wav 파일을 바이트로 읽었을 때 처음 시작하는 44바이트 파일 헤더에 해당한다.
아래는 내가 갖고 있는 임의의 wav파일의 헤더이다.
b'RIFF$`\x01\x00WAVEfmt \x10\x00\x00\x00\x01\x00\x01\x00\x80\xbb\x00\x00\x00w\x01\x00\x02\x00\x10\x00data\x00`\x01\x00'
44바이트의 헤더는 크게 3개의 chunk(파일 형식 chunk + 음성 정보 chunk + 데이터 chunk)로 나뉜다. 특히 해당 오디오 데이터를 다룰 때는 samplerate, byterate, channel 등의 정보를 담고 있는 중간 chunk의 내용이 중요하다. 위의 헤더 예시에서 각 byte가 무엇을 의미하는지 아래 간단히 정리하였다.
* 주의할 점 : little endian 방식으로 표기하기 때문에, 작은 단위가 앞에온다.
1. 파일의 형식을 나타내는 chunk (12byte)
1-1. chunk ID (4byte)
RIFF
wav 파일에 대한 고정값이다.
1-2. chunk size (4byte)
$`\x01\x00
파일 전체 사이즈에서 chunk id, chunck size를 제외한 값을 의미한다.(파일 전체 크기 - 8byte)
1-3. format (4byte)
WAVE
파일 형식을 나타내며, WAVE라는 문자가 고정값이다.
2. 음성 정보를 담고 있는 chunk (24byte)
2-1. chunk ID (4byte)
fmt
'fmt ' 고정값(뒤에 띄어쓰기 있음에 주의하자)
2-2. chunk size (4byte)
\x10\x00\x00\x00
현재 헤더에서 뒤이어 나올 부분의 크기로 16byte 고정값
2-3. audio format (2byte)
\x01\x00
고정값 1
2-4. number of channel (2byte)
\x01\x00
음성파일의 채널 수를 의미한다. mono라면 1, stereo라면 2, ...
2-5. sample rate (4byte)
\x80\xbb\x00\x00
1초 동안 저장하는 sample의 수를 의미하며, Hz 단위로 표시한다. (해당 파일의 경우 48000)
2-6. byte rate (4byte)
\x00w\x01\x00
1초 동안 소리를 내는데 필요한 byte 수 (해당 파일의 경우 96000)
2-7. block align (2byte)
\x02\x00
sample frame의 크기 (mono라면 sample크기, stereo라면 sample크기X2)
2-8. bit per sample (2byte)
\x10\x00
sample 1개를 몇 bit로 나타내는지. (해당 파일의 경우 16)
3. data chunk (8byte)
2-1. chunk ID (4byte)
data
'data' 고정값이다.
2-2. chunk size (4byte)
\x00`\x01\x00'
실제 오디오 데이터 부분 크기로, pcm파일 크기와 동일하다.
'ML' 카테고리의 다른 글
허깅페이스에 오디오 데이터셋 업로드하기 (0) | 2024.01.05 |
---|
댓글