Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
04-28 03:24
관리 메뉴

zyint's blog

struct WAVEFORMATEX 본문

예전글들

struct WAVEFORMATEX

진트­ 2009. 3. 12. 21:56

struct WAVEFORMATEX

WAVEFORMATEX는 waveform-audio data의 포맷을 정의한다. 모든 waveform-audio 데이터 포맷이 공통적으로 가지고있는 포맷 정보가 이 구조체에 포함되어 있다. 추가적인 정보가 필요한 다른 오디오 포맷들을 지원 하기위해 이 구조체가 다른 포맷 구조체의 첫 번째 멤버 변수로 들어가게 된다.

 

헤더파일

mmreg.h

 

구조

typedef struct WAVEFORMATEX
{
    WORD    wFormatTag;
    WORD    nChannels;
    DWORD   nSamplesPerSec;
    DWORD   nAvgBytesPerSec;
    WORD    nBlockAlign;
    WORD    wBitsPerSample;
    WORD    cbSize;
} WAVEFORMATEX;

 

Members

WORD wFormatTag

Waveform-audio 포맷 타입.  Format Tag는 Microsoft Corporation에 여러 압축 알고리즘이 등록되어있다. 전체 format tag의 목록은 Mmsystem.h 헤더 파일에 정의되어 있다.

 

WORD nChannels

waveform-audio 데이터의 채널 개수를 나타낸다. 모노 데이터는 1 채널을 사용하고, 스테레옫 ㅔ이터는 2 채널을 사용한다.

 

DWORD nSamplesPerSec

각 채널에서 소리를 녹음하거나 재생될 때, 1초당  샘플의 개수를 나타내는 샘플링 rate를 나타낸다(Herz).  wFormatTag가 WAVE_FORMAT_PCM이면 nSamplesPerSec은 8.0 kHz, 22.05kHz, 44.1kHz를 나타낸다. PCM 포맷이 아닌 경우 이 변수에는 format tag에 따라 샘플링 rate가 계산되어 저장된다.

 

DWORD nAvgBytesPerSec

초당 바이트를 나타내는 평균 데이터 transfer rate를 나타낸다. 만일 wFormatTag가 WAVE_FORMAT_PCM이면, nAvgBytesPerSec =  nSamplesPerSec * nBlockAlign이다. PCM 포맷이 아닌 경우, format tag에 따라 nAvgBytesPerSec 값이 계산되어 저장되게 된다.

재생 또는 녹음 소프트웨어에서 버퍼의 크기를 추정할 때, nAvgBytesPerSec 변수를 사용한다.

 

WORD nBlockAlign

바이트 단위이다. block alignment는 wFormatTag 포맷 타입의 최소 atomic unit을 나타낸다. wFormatTag가 WAVE_FORMAT_PCM이라면, nBlockAlign = nChannels * wBitsPerSample / 8이다. PCM 포맷이 아닌경우 이 변수에는 format tag에 따라 계산되어서 저장되어야 한다.

Playback과 record 소프트웨어에서는 여러개의 nBlockAlign 바이트의 데이터가 한 번에 처리되어야 한다. 데이터를 장치에서 읽고 쓸 때에 항상 블록의 처음에서 시작해야 한다. 만일 PCM 데이터를 읽을 때, 블록의 중간에서 시작하면 잘못된 결과를 나타낼 수 있다.

 

WORD wBitsPerSample

wFormatTag에 따른 한 개의 샘플 당 비트의 개수를 나타낸다. wFormatTag가 WAVE_FORMAT_PCM일 경우, wBitsPerSample은 8 이나 16이 되어야 한다. PCM 포맷이 아닌 경우 format tag에 따라 이 값이 계산되어 저장되어야 한다. 일부 압축 방식에서는 이 값을 지정할 수 없을 수 있다. 이럴 경우에는 0을 지정한다.

 

WORD cbSize

바이트 단위로 WAVEFORMATEX 구조체에 추가된 추가 포맷 정보의 길이를 나타낸다. 이 정보는 PCM 포맷이 아닌 경우, 오디오의 추가적인 속성값들을 저장할 때 이 속성값들의 정보의 크기를 지정한다. 추가 정보가 없는 경우 0 을 지정하며, WAVE_FORMAT_PCM인 경우 이 변수 값은 무시된다.

 

참고자료

WAVEFORMATEX

이 글은 스프링노트에서 작성되었습니다.

Comments