WAV는 마이크로소프트와 IBM이 개발한 디지털 오디오 파일 형식이다. 정식 명칭은 Waveform Audio File Format이며 파일 확장자는 주로 `.wav`를 사용한다.
Windows에서 오래전부터 사용된 대표적인 음향 파일 형식으로, 음악 제작·녹음·게임·영상 편집·방송 등에서 아직도 존나 많이 쓰인다. 보통 압축하지 않은 PCM 오디오를 저장하는 데 사용하기 때문에 WAV = 무압축 음원으로 인식되는 경우가 많지만, 엄밀히 말하면 WAV 자체는 특정 오디오 압축방식을 뜻하는 것이 아니라 오디오 데이터를 담는 컨테이너 형식이다.
따라서 가장 흔한 것이 PCM WAV일 뿐이고 WAV 안에 ADPCM, A-law, μ-law 등 다른 방식으로 인코딩된 오디오를 넣는 것도 가능하다.[1]
개요
| 항목 | 내용 |
|---|---|
| 정식명칭 | Waveform Audio File Format |
| 약칭 | WAV, WAVE |
| 확장자 | `.wav`, `.wave` |
| 개발 | 마이크로소프트, IBM |
| 공개 | 1991년 |
| 기반 | RIFF |
| 주요 용도 | 디지털 오디오 저장 |
| 대표 인코딩 | LPCM |
WAV는 IBM과 Microsoft가 Windows 3.1을 위해 만든 RIFF(Resource Interchange File Format)를 기반으로 설계됐다. 최초 공식 사양은 1991년 양사가 공동 작성한 《Multimedia Programming Interface and Data Specifications 1.0》에 포함됐다.[2]
30년도 넘은 포맷인데도 호환성이 존나 좋아서 아직도 거의 모든 운영체제와 오디오 프로그램에서 기본적으로 지원한다.
구조
WAV는 기본적으로 RIFF 컨테이너 안에 WAVE 형식의 데이터를 넣는 구조다.
가장 단순한 PCM WAV 파일은 대충 다음과 같이 생겼다.
RIFF
└─ WAVE
├─ fmt
└─ data
파일을 헥스 에디터 등으로 열어보면 맨 앞부분에서 다음과 비슷한 ASCII 문자열을 볼 수 있다.
RIFF....WAVEfmt
미국 의회도서관에서도 WAV의 대표적인 파일 시그니처를 다음과 같이 제시하고 있다.[3]
52 49 46 46 xx xx xx xx 57 41 56 45 66 6D 74 20 R I F F W A V E f m t
RIFF
파일의 가장 바깥쪽 컨테이너다.
RIFF는 데이터를 청크(chunk)라는 단위로 나눠 저장한다. 각각의 청크에는
- 4바이트 식별자
- 데이터 크기
- 실제 데이터
가 들어간다.[4]
WAV에서는 파일 맨 처음에 `RIFF`가 나타나고 그 안의 데이터 형식이 `WAVE`라고 표시된다.
fmt 청크
`fmt ` 청크에는 오디오가 어떤 형식으로 저장됐는지를 기록한다.
대표적으로 다음 정보가 들어간다.
- 오디오 코덱
- 채널 수
- 샘플레이트
- 초당 평균 데이터량
- 블록 정렬 크기
- 비트 심도
Microsoft의 `WAVEFORMATEX` 구조체도 이 정보들을 기본적으로 사용한다.[5]
예를 들어
2채널 / 44.1kHz / 16bit / PCM
이라는 정보를 보고 프로그램이 뒤에 있는 오디오 데이터를 어떻게 해석해야 하는지 알 수 있다.
data 청크
`data` 청크에는 실제 오디오 데이터가 들어간다.
PCM WAV라면 각 시점에서 측정한 음압을 디지털 숫자로 변환한 샘플들이 순서대로 저장된다.
Microsoft가 설명하는 가장 단순한 WAV 구조 역시
`RIFF → WAVE → fmt → data`
형태다.[6]
기타 청크
WAV에는 `fmt`와 `data`만 들어갈 필요는 없다.
RIFF 구조상 여러 부가 청크를 추가할 수 있으며 제목, 제작자, 날짜 등의 메타데이터나 루프·큐 포인트 등 다양한 정보를 기록할 수도 있다.
예를 들어 `LIST`와 `INFO` 청크를 사용해 저작권이나 제작일 같은 정보를 저장할 수 있다.[7]
그래서 WAV라고 해서 파일 구조가 전부 똑같은 것은 아니다.
PCM
WAV에서 가장 많이 사용되는 방식은 PCM(Pulse-code modulation)이다.
엄밀히 말하면 WAV가 음질 좋은 이유가 아니라 WAV 안에 무손실 PCM 데이터를 넣는 경우가 압도적으로 많기 때문에 음질 좋은 파일로 인식되는 것이다.
일반적인 PCM WAV에서는 음성신호를 일정한 시간 간격으로 측정하고 그 값을 숫자로 저장한다.
음질과 파일 크기에 영향을 주는 대표적인 값은 다음과 같다.
샘플레이트
1초 동안 소리를 몇 번 측정하는지를 뜻한다.
대표적으로
- 44.1kHz
- 48kHz
- 88.2kHz
- 96kHz
- 192kHz
등이 사용된다.
44.1kHz라면 1초에 44,100번 측정한다는 뜻이다.
CD 음질의 표준적인 PCM 오디오는 44.1kHz / 16bit / 스테레오다.
영상 제작과 방송에서는 48kHz도 널리 사용된다.
비트 심도
한 번 측정한 샘플을 얼마나 정밀한 숫자로 저장하는지를 뜻한다.
대표적으로
- 8bit
- 16bit
- 24bit
- 32bit integer
- 32bit float
등이 있다.
비트 수가 커질수록 표현할 수 있는 단계가 많아지기 때문에 양자화 잡음을 줄이고 더 넓은 다이내믹 레인지를 처리할 수 있다.
음악 제작에서는 24bit PCM이나 32bit float WAV를 흔히 사용한다.
채널
모노는 1채널, 스테레오는 2채널이다.
WAV는 멀티채널 오디오도 저장할 수 있다.
Microsoft는 기존 `WAVEFORMATEX`를 확장한 WAVEFORMATEXTENSIBLE을 통해 2채널을 넘는 멀티채널 오디오와 각 채널의 스피커 위치 등을 정의할 수 있도록 했다.[8]
파일 크기
무압축 PCM WAV의 가장 큰 단점.
존나 크다.
PCM 파일의 대략적인 데이터량은 다음 공식으로 계산할 수 있다.
샘플레이트 × 비트심도 × 채널 수 ÷ 8
예를 들어 CD와 동일한
44,100Hz × 16bit × 2채널
PCM이라면
44,100 × 16 × 2 ÷ 8 = 176,400 byte/s
즉 1초에 약 176KB가 필요하다.
| 형식 | 1분당 대략적인 크기 | 1시간당 대략적인 크기 |
|---|---|---|
| 44.1kHz / 16bit / 스테레오 | 약 10.6MB | 약 635MB |
| 48kHz / 24bit / 스테레오 | 약 17.3MB | 약 1.04GB |
| 96kHz / 24bit / 스테레오 | 약 34.6MB | 약 2.07GB |
헤더와 메타데이터를 제외한 PCM 데이터만 단순 계산한 수치다.
MP3 하나가 몇 MB 정도였던 시절 WAV 음악 한 곡이 수십 MB씩 처먹었으니 일반 소비자용 음악 배포 포맷으로는 존나 비효율적이었다.
그래서 인터넷 음악 배포에서는 MP3, AAC 같은 손실압축 포맷이 널리 사용됐고 무손실 보관 목적에서는 FLAC 같은 무손실 압축 포맷이 등장했다.
WAV는 무조건 무압축인가?
아니다.
존나 흔한 오해다.
WAV는 컨테이너이고 PCM은 그 안에 들어가는 오디오 데이터 형식이다.
Microsoft의 WAVEFORMATEX에는 다음과 같은 여러 오디오 형식을 지정할 수 있다.<ref>[https://learn.microsoft.com/en
- ↑ Microsoft Learn, 「WAVEFORMATEX」
- ↑ 미국 의회도서관, 「WAVE Audio File Format」
- ↑ 미국 의회도서관, 「WAVE Audio File Format」
- ↑ Microsoft Learn, 「Resource Interchange File Format Services」
- ↑ Microsoft Learn, 「WAVEFORMATEX」
- ↑ Microsoft Learn, 「Tutorial: Decoding Audio」
- ↑ Microsoft Learn, 「Resource Interchange File Format Services」
- ↑ Microsoft Learn, 「Extensible Wave-Format Descriptors」