본문/내용
여기서 박스 하나하나를 모두 청크(Chunk)라고 한다. 처음에 나오는 박스 “WAVE FILE”이란 헤더가 있는 블럭을 부모 청크라고 하고 그 하단부에 있는 청크를 자식 청크라고 한다. 그리고 데이터들을 데이터 청크라고 한다.
위와 같은 구성으로 데이터를 저장하는 방식을 RIFF(Resource Interchange File Format)라고 하고 위와 같은 구성으로 저장된 데이터를 RIFF 파일이라고 한다. WAVE 파일이 바로 RIFF 파일입니다.
WAVE 파일 구조
웨이브 파일의 구조는 부모 청크 1개와 자식 청크 1개 그리고 데이터 청크 1개로 구성되어 있다. 부모 청크에는 “RIFF”-데이터 크기(4바이트)-“WAVE”로 설정되어 있다.
여기서 “RIFF”란 웨이브 파일이 RIFF 파일이라는 말이며, 현재 4바이트이고 그 다음 파일 끝까지가 몇 바이트라는 것이 데이터 크기에 DWORD형으로 저장되어 있다. 그 다음에 WAVE 파일이라는 “WAVE”가 기록되어 있다.
다음 자식 청크에는 “fmt ”-현재포인터-WAVEFORMAT-채널(스테레오,모노)-샘플링-초당 샘플바이트 -샘플당바이트- 비트(8비트, 16비트 등등)가 기록되어 있다.
다음 데이터 청크에는 “data”-데이터 크기-데이터가 기록되어 있다.
WAVEFORMAT란 웨이브 형태를 말하며, PCM_WAVE 형태의 값은 1입니다. 현재 포인터란 현재 위치를 말하는데 청크의 cksize라고도 하며, 위의 구조대로 계산한다면 다음과 같다.
부모 청크 = 4+4+4 = 12
“현재 포인터”이전까지 자식 청크 = 4
위의 값을 모두 더하면 12+4이므로 16이므로 16값을 넣는다. 사실 wave 파일의 구조에서는 위 값에 변함이 없다. 변함이 없는 값은 WAVEFORMAT와 현재 포인터 두 개이다. WAVEFORMAT에는 1을, 현재 포인터에는 16을 넣으면 된다.