포스트

[데이터통신] wav 포맷

wav 파일

wav파일은 비압축 형태의 디지털 오디오 파일 포맷입니다.

이는 RIFF (Resource Interchange File Format)구조를 따릅니다.

1
2
3
RIFF Chunk (파일 전체)
├── "fmt " Chunk: 포맷 정보 (오디오 형식, 채널 수, 샘플링 속도 등)
├── "data" Chunk: 실제 오디오 데이터 (샘플)

쉽게 말해서, 포맷 정보 (samplerate, channel 등), 샘플로 2개로 나눠 파일을 구성하는 것 정도로만 알면 될 것 같습니다.

용어를 정리하고 넘어갑시다.

samplerate는 1초에 샘플 개수를 말하는 것입니다. precision은 샘플 1개를 몇 비트로 표현할것인지를 말합니다. sample width 샘플 하나가 차지하는 바이트 수입니다. $precision \div 8$로 표현할 수 있습니다. channels은 몇 개의 독립적인 신호로 나뉘는지를 의미합니다.

좋습니다. 이제 wav파일이 binary로 어떻게 존재하는지를 알아봅시다.

RIFF HEADER(Chunk)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
52 49 46 46   ; "RIFF"
XX XX XX XX   ; ChunkSize (파일 전체 크기 - 8)
57 41 56 45   ; "WAVE"

66 6D 74 20       ; "fmt "
10 00 00 00       ; 16바이트 (Subchunk1Size = 16, PCM)
01 00             ; PCM 형식 (AudioFormat = 1)
02 00             ; 2채널 (Stereo)
44 AC 00 00       ; 44,100 Hz (0xAC44)
10 B1 02 00       ; ByteRate = 176,400 (0x02B110)
04 00             ; BlockAlign = 4 bytes
10 00             ; 16비트 (BitsPerSample)

64 61 74 61      ; "data"
XX XX XX XX      ; 데이터 크기
YY YY YY YY ...  ; 오디오 샘플 데이터

이런 식의 구조를 가진다..! 샘플은 보통 리틀 엔디언으로 저장된다. 그래서 16바이트가 10 00 00 00이고, 44,100 Hz가 0xAC44 인 것

송신자는 아날로그 신호를 알파벳 모스코드에 매핑해주고, wav파일로 저장하면 된다.

수신자는 반면, wav 파일을 열고, frame 단위로 분할하고, 시작 frame(신호)을 찾고, 이후 신호를 고정된 chunk로 나누고, 각 chunk를 디코딩하여 최종적으로 알파벳. 문장으로 복원하는 과정을 거친다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.