사운드 확장자 파일들 mp3 wav flac등 여러가지가 있는데
그 중에 wav 파일을 조금 정리해보려고 한다
오디오에 관하여 전문가는 아니지만 쓰기 위해서
최소한의 공부는 해두고 가야할 것 같기 때문
WAVE 파일 형식은 컴퓨터에 오디오 비트스트림을 저장하기 위한
오디오 파일 형식이다.
PCM(Pulse-code Modulation) 방식
아날로그 사운드를 디지털 방식으로 변환하기 위한 방법
wav 는 mp3 와 달리 압축 없는 원본 사운드 파일이며
고로 High Fidelity 오디오 데이터이다 - 손실이 거의 없다는 뜻
오디오의 확장자, 데이터, 채널 수...등 여러 요소들을 저장하고 읽기 위해
청크 단위로 나눠서 저장함
그 청크 데이터의 첫번째 요소
RIFF는 Resource Interchange File Format
오디오 확장자 및 파일 크기를 나타내는 부분임
4 4 4 바이트로 ID는 "RIFF" 아스키 값이 저장
FileSize(ChunkSize)는 전체 파일 크기에서 8바이트를 뺀 값이며
그리고 FileFormatID(Format)은 wav 확장자를 의미하는 "WAVE"가 저장되어 있음
똑같이 ASCII 형
다음은 fmt 청크로 얘는 오디오 데이터 포맷을 설명함
첫번째 값은 ID로 "fmt" 아스키를 저장
두번째는 fmt 청크의 크기를 나타내는데 ID와
fmt ChunkSize를 제외한 나머지 크기를 의미함 - 16바이트
AudioFormat은 PCM 의 경우 1이 저장
NumChannels 는 채널 개수,
모노는 채널수가 하나인 좌우 개념 없는 사운드고
스테레오는 좌우 음향, 사플 대충 그런 느낌 - 채널 두개
Frequence(SampleRate) - 초당 행하는 샘플링 횟수
보통 44100 Hz (44.1 kHz) 임
ByteRate(BytePerSec) - 초당 비트전송률
(샘플 레이트 x 채널 갯수 x 샘플 당 비트수) 로 구할 수 있음
여기에 8로 나누어 바이트로 변환하면 실제 저장된 값이 나옴
ex) 44.1kHz * 2(stereo) * 16bit = 1411.2 kbps
오디오 속성 들가면 나와있음
BlockAlign(BytePerBlock) - 블럭 당 바이트 수
(채널 갯수 x 샘플 당 비트 수) / 8
BitsPerSample - 각 샘플 당 비트 수
8비트 16비트 등이 있음
마지막 청크로 Data 청크는
ID "data" ASCII
DataSize - (샘플 갯수 x 채널 갯수 x 샘플 당 비트 수) / 8
SampledData - N 바이트
이렇게 실제 오디오 데이터 관련해서 저장됨
이게 바이트가 저장되는 순서는 또 다르다
Identifier 는 ASCII라 1 2 3 4 이렇게 순서대로 저장
나머지는 0인 비트가 자주 있어서 인지 모르겠는데
4 3 2 1 거꾸로 저장됨
이는 Big Endian 과 Little Endian 이라 한다
예를 들어 RIFF 청크에 이런 데이터가 있다고 치면
ID "RIFF"와 뒷부분 포맷 "WAVE" 는 Big Endian이라 순서대로 저장되는데
가운데는 Little로 거꾸로니까 실제로 읽을때는
00 00 08 24 가 된다.
이는 10진수로 2084이므로 실제 파일 사이즈는 2084 + 8 인
2 KB (2092 byte) 가 된다. /1024
참고 사이트 : WAV - 위키백과, 우리 모두의 백과사전 (wikipedia.org)
댓글 없음:
댓글 쓰기