춯처 : http://blog.naver.com/sshuikr?Redirect=Log&logNo=100060086075
WAVEFORMATEX 구조체
WAVEFORMATEX 구조체는, 파형 오디오 데이터의 포맷을 정의한다. 모든 파형 오디오 데이터의 포맷에 공통의 포맷 정보만이 이 구조체에 포함된다. 추가 정보가 필요한 포맷의 경우, 이 구조체는, 추가 정보와 함께 다른 구조체의 선두 멤버로서 포함된다.
이 구조체는 Platform SDK 의 일부로, Mmreg.h 로 선언되고 있지만, 편의상 이 문서에도 기재하고 있다.
구문
typedef struct {
WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign;
WORD wBitsPerSample;
WORD cbSize;
} WAVEFORMATEX;
멤버
wFormatTag
파형 오디오의 포맷 타입. 포맷 태그는, 많은 압축 알고리즘용으로 Microsoft Corporation 에 등록되어 있다. 포맷 태그의 완전한 리스트는, Mmreg.h 헤더 파일에 있다.
1 채널이나 2 채널의 PCM (Pulse Code Modulation) 데이터의 경우, 이 값은 WAVE_FORMAT_PCM 로 할 필요가 있다.
nChannels
파형 오디오 데이터에 포함되는 채널수. 단청(모노)의 데이터는 1 채널을 사용해, 스테레오 데이터는 2 채널을 사용한다.
nSamplesPerSec
샘플/초에 나타내는 샘플 레이트 (단위 Hz). wFormatTag 가 WAVE_FORMAT_PCM 의 경우,nSamplesPerSec 의 일반적인 값은 8.0 kHz, 11.025 kHz, 22.05 kHz, 44.1 kHz 가 된다. 비 PCM 포맷의 경우, 이 멤버는 제조업자의 포맷 태그 사양에 따라 산출할 필요가 있다.
nAvgBytesPerSec
포맷 태그에 필요한 평균 데이터 전송 레이트 (단위 바이트/초). wFormatTag 가 WAVE_FORMAT_PCM 의 경우,nAvgBytesPerSec 는 nSamplesPerSec 와 nBlockAlign 의 적과 동일해야 한다. 비 PCM 포맷의 경우, 이 멤버는 제조업자의 포맷 태그 사양에 따라 산출할 필요가 있다.
nBlockAlign
블록 alignment (단위 바이트). 블록 alignment란,wFormatTag 포맷 타입의 데이터의 최소 구성 단위이다. wFormatTag 가 WAVE_FORMAT_PCM 또는 WAVE_FORMAT_EXTENSIBLE 의 경우,nBlockAlign 는nChannels 와 wBitsPerSample 의 적을 8 (1 바이트 당의 비트수)으로 나눈 값과 동일해야 한다. 비 PCM 포맷의 경우, 이 멤버는 제조업자의 포맷 태그 사양에 따라 산출할 필요가 있다.
소프트웨어는, 한 번에 복수의 nBlockAlign 바이트의 데이터를 처리할 필요가 있다. 장치에 대한 데이터의 쓰기와 읽기는 항상, 블록의 선두로부터 시작 해야 한다. 예를 들어, PCM 데이터의 재생을 샘플의 도중 (즉, 비블록 아라인 경계상)부터 시작 하는 것은 부정하다.
wBitsPerSample
wFormatTag 포맷 타입의 1 샘플 근처의 비트수. wFormatTag 가 WAVE_FORMAT_PCM 의 경우,wBitsPerSample 는 8 또는 16 이 아니면 안된다.
wFormatTag 가 WAVE_FORMAT_EXTENSIBLE 의 경우, 이 값은, 임의의 8 의 배수를 지정할 수 있다. 일부의 압축 스킴은 wBitsPerSample 의 값을 정의할 수 없기 때문에, 이 멤버에는 0 을 지정해도 상관없다.
cbSize
WAVEFORMATEX 구조체의 마지막에 추가되는 추가 포맷 정보의 사이즈 (단위 바이트). 비 PCM 포맷은, 이 정보를 사용해 wFormatTag 의 추가 속성을 저장 할 수 있다. wFormatTag 에 추가 정보가 필요없는 경우는, 이 멤버는 제로로 설정해야 한다. WAVE_FORMAT_PCM 포맷 밖에 없는 경우, 이 멤버는 무시된다.
[출처] WAVEFORMATEX 구조체|작성자 네오랑
'C,C++ ' 카테고리의 다른 글
ohhara 덤프 코드 출력 코드 헤더 [펌] (0) | 2012.04.27 |
---|---|
음성채팅 프로그램 분석 [client] (Analysis about Voice chat) (1) | 2012.04.13 |
calloc vs malloc 함수의 비교 (2) | 2012.03.21 |
MFC에서 중복실행 방지 코드 (0) | 2012.03.21 |
unix 환경에서 getopt() 사용하기.. 파라미터 값으로 옵션주기. (0) | 2012.03.21 |