본문 바로가기

COM

WAV 파일의 헤더 구조와 Raw Data(pcm data)

잡다한 잡다방 -주인장 잡숴

 

 

 

 

 

우리는 .mp3 형식의 오디오 파일엔 익숙하고,  

.wav 형식의 오디오 파일은 다소 생소한 느낌이 있다.

 

 

 

 

 

 

과연 wav 파일은 무엇일까?

Wav 는 Waveform audio format의 준말로 개인용 컴퓨터에서 오디오를 재생하는 마이크로소프트와 IBM의 오디오 파일 포맷 표준이다. 덩어리째로 데이터를 저장하기 위한 RIFF 비트스트림 포맷 방식에서 변화한 것으로, 아미가에 쓰이는 IFFF와 매킨토시 컴퓨터에 쓰이는 AIFF 포맷에 매우 가깝다. 가공되지 않은 오디오를 위한 윈도 시스템에 쓰이는 기본 포맷이다.

대부분의 음원 편집/재생 소프트웨어 에서 이 포맷(wav)을 지원한다. 무손실 무압축 형식의 파일이기 때문에 용량이 무척 크지만 그만큼 원본 소스 그대로를 가지고 있기 때문에 녹음/편집 작업을 하는 분들은 이 파일을 토대로 작업을 하게 된다.




쉽게 말해, 소리의 정보가 그대로 들어있는 파일 인 것이다.

 

 

 

 

 

 

 

그렇다면 wav 파일은 어떤 구조로 이뤄져 있을까?

 

 

 

 

wav 파일의 구조를 펼쳐보면 다음과 같다.

 

 

 

 

 

 

 

위 값들만 보면 뭐가 뭔지 너무 복잡해 보이지만,, 이는 간단하게 아래와 같이 앞에서부터 3덩어리로 나뉘어 진다는 것을 알고나면 쉽다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ㅡㅡㅡㅡ※ 참고ㅡㅡㅡㅡ

 

Little Endian을 유의해서 값을 확인해야 한다.

(값이 10 00 00 00 일 경우 00 00 00 10 으로 읽어야 한다.)

Little Endian이 궁금하다면 우측 링크에서 확인 -> https://anythingcafe.tistory.com/3

 

리틀 엔디언과 빅 엔디언의 차이 (Little-endian, Big-endian)

엔디언이란? 엔디언(Endianness)은 컴퓨터의 메모리와 같은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방법을 뜻하며, 바이트를 배열하는 방법을 특히 바이트 순서(Byte order)라고 한다. 엔디언은 보통..

anythingcafe.tistory.com

ㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

 

 

 

 

하나씩 뜯어보자

 

 

 

Little Endian 유의해서 읽을 것

Little Endian 유의해서 읽을 것

Little Endian 유의해서 읽을 것

 

 

 

 

 


 

 

 

 

추가 자료로 덩어리 2인 fmt(녹색) 에 있는 Audio format(2 Byte)과 Number 0f Channels(2Byte)에 대한 설명

-Audio Format(2Byte)의 코드에 따른 설명-

 

-Number of Channels(2Byte)의 값에 대한 의미와 data의 구성-


 

 

 

 

 

PCM DATA 란?

 

pcm audio file은 header가 없이 raw data만 저장한 파일이다.
따라서 pcm 포맷으로 저장된 오디오는 별도로 오디오에 대한 정보를 가지고 있지 않으면 제대로 play할 수 없다.

 

오디오 드라이버에서 오디오 데이터를 캡쳐했다면, 당연히 header가 없는 pcm 포맷이며 이때 오디오 드라이버가 어떤 상태(sampling rate, bit size, endian, channels)로 동작 중이 였는지에 따라 pcm 포맷을 해석해야 한다. 만일 데이터가 RIFF 포맷이라면 Little endian 형식이므로, wav header만 붙여주면 wav 오디오의 play가 가능해진다.

 

따라서 big endian 이라면 header 추가 뿐만 아니라 오디오 데이터에 대한 endian 변환까지 해야 한다.