이미 예전에 상세하게 글을 올린 적이 있으니 참고하시기 바랍니다.
http://php.chol.com/~active/bbs/audio/55
사실 저 글을 쓸 때에 AIFF 파일 포맷도 아주 상세하게 다루려고 했는데 너무 무의미하기도 하고 글이 너무 길어져서 WAV의 기록포맷만 자세하게 소개하고 AIFF는 사운드 데이타 청크 부분만 간략하게 소개했습니다.
AIFF는 메타데이타를 기록하는 청크(옵션)가 더 많기 때문에 다 소개하려면 그냥 기술문서를 읽는게 낫습니다만... 앞부분의 핵심파트만 보자면 이렇습니다.
1) FORM 청크
AIFF 파일을 열어보면 항상 시작은 FORM 으로 시작합니다. 이부분이 FORM 청크의 시작입니다. FORM 청크는 ID, 청크 사이즈, 폼 타잎으로 기록되는데, 대부분 FORM .... AIFF 로 기록되어 있습니다.
참고로 만약 포맷이 AIFF가 아니라 AIFC인 경우에는 다음에 포맷 버전 청크가 추가됩니다. 포맷 버전 청크는 ID, 청크 사이즈, 타임스탬프로 기록되는데 FVER가 고정된 ID입니다.
2) Common 청크
이 부분에는 샘플링 레이트와 같은 일반적인 오디오 정보가 기록되는 부분입니다.
AIFF의 경우 ID, 청크 사이즈, 채널 수, 샘플 프레임 수, 샘플 사이즈, 샘플 레이트로 이루어져 있습니다. Common 청크의 ID는 COMM 으로 여기서부터 Common 청크가 시작됩니다.
3) Sound Data 청크
사운드 데이타 청크는 SSND ID로 시작하고 청크 사이즈, 오프셋, 블록 사이즈 순으로 기록됩니다. 그리고 그 다음부터가 실제 오디오 데이타가 기록됩니다.
AIFF를 헥스 에디터로 열어보면 앞대가리에 FORM...AIFFCOMM....SSND... 를 보실 수 있는데 설명은 위를 참고하세요.
실제로는 이런 식으로 저장되어 있습니다.
첨부한 사진속에서 위가 WAV 파일이고 아래가 AIFF 파일입니다. 실제 사운드 데이타 본체가 시작되는 부분은 알기 쉽게 파란색으로 블럭을 잡아놓았습니다.
위의 예제는 지터 테스트에 사용하는 시그널인데 그냥 한 눈에 봐도 WAV와 AIFF의 차이가 쉽게 들어올 것입니다.
WAV의 경우는 little endian 으로 기록되어 있고 AIFF는 big endian으로 기록되어 있습니다.
WAV는 ①(FF 3F FF 3F) ②(FF 3F FF 3F) ③(00 C0 00 C0) ④(00 C0 00 C0) ....
AIFF는ⓐ(3F FF 3F FF) ⓑ(3F FF 3F FF) ⓒ(C0 00 C0 00) ⓓ(C0 00 C0 00) ....
이걸 해석하면,
첫번째 샘플(①ⓐ)의 좌채널 데이타가 3FFF(16진수) 우채널 데이타 3FFF
두번째 샘플(②ⓑ)의 좌채널 데이타가 3FFF(16진수) 우채널 데이타 3FFF
세번째 샘플(③ⓒ)의 좌채널 데이타가 C000(16진수) 우채널 데이타 C000
네번째 샘플(④ⓓ)의 좌채널 데이타가 C000(16진수) 우채널 데이타 C000
....
이런 식입니다.
AIFF와 WAV에 저장된 본체 데이타는 동일한 PCM 데이타이며 "완전히 똑같습니다".