Share via


WAVEFORMATEX 구조체(mmreg.h)

WAVEFORMATEX 구조체는 웨이브 오디오 스트림의 데이터 형식을 지정합니다.

구문

typedef struct tWAVEFORMATEX {
  WORD  wFormatTag;
  WORD  nChannels;
  DWORD nSamplesPerSec;
  DWORD nAvgBytesPerSec;
  WORD  nBlockAlign;
  WORD  wBitsPerSample;
  WORD  cbSize;
} WAVEFORMATEX, *PWAVEFORMATEX, *NPWAVEFORMATEX, *LPWAVEFORMATEX;

멤버

wFormatTag

파형 오디오 형식 유형을 지정합니다. 자세한 내용은 아래 설명 부분을 참조하십시오.

nChannels

오디오 데이터의 채널 수를 지정합니다. 모노포닉 오디오의 경우 이 멤버를 1로 설정합니다. 스테레오의 경우 이 멤버를 2로 설정합니다.

nSamplesPerSec

각 채널을 재생하거나 기록해야 하는 샘플 빈도를 지정합니다. wFormatTag = WAVE_FORMAT_PCM 경우 nSamplesPerSec의 일반 값은 8.0kHz, 11.025kHz, 22.05kHz 및 44.1kHz입니다. 예를 들어 샘플 주파수를 11.025kHz로 지정하려면 nSamplesPerSec을 11025로 설정합니다. PCM이 아닌 형식의 경우 이 멤버는 제조업체의 형식 태그 사양에 따라 계산되어야 합니다.

nAvgBytesPerSec

필요한 평균 데이터 전송 속도(초당 바이트)를 지정합니다. 이 값은 버퍼 크기를 예측하는 데 유용합니다.

nBlockAlign

블록 맞춤을 바이트 단위로 지정합니다. 블록 맞춤은 wFormatTag 형식 형식에 대한 데이터의 최소 원자 단위 크기입니다. wFormatTag = WAVE_FORMAT_PCM 또는 wFormatTag = WAVE_FORMAT_IEEE_FLOAT 경우 nBlockAlign(nChannels*wBitsPerSample)/8단일 오디오 프레임의 크기인 로 설정합니다. PCM이 아닌 형식의 경우 이 멤버는 형식 태그에 대한 제조업체의 사양에 따라 계산되어야 합니다.

재생 및 레코드 소프트웨어는 한 번에 여러 nBlockAlign 바이트의 데이터를 처리해야 합니다. 디바이스에 기록되고 디바이스에서 읽은 데이터는 항상 블록의 시작 부분에서 시작되어야 합니다.

wBitsPerSample

wFormatTag에 지정된 형식 형식에 대한 샘플당 비트 수를 지정합니다. wFormatTag = WAVE_FORMAT_PCM 경우 wBitsPerSample을 8 또는 16으로 설정해야 합니다. wFormatTag = WAVE_FORMAT_IEEE_FLOAT 경우 wBitsPerSample을 32로 설정해야 합니다. PCM이 아닌 형식의 경우 형식 태그에 대한 제조업체의 사양에 따라 이 멤버의 값을 설정합니다. 일부 압축 체계는 wBitsPerSample에 대한 값을 정의할 수 없습니다. 이 경우 wBitsPerSample을 0으로 설정합니다.

cbSize

WAVEFORMATEX 구조체의 끝에 추가된 추가 형식 정보의 크기(바이트)를 지정합니다. 이 정보는 비 PCM 형식에서 wFormatTag에 대한 추가 특성을 저장하는 데 사용할 수 있습니다. wFormatTag에 추가 정보가 필요하지 않은 경우 이 멤버를 0으로 설정합니다. WAVE_FORMAT_PCM 형식의 경우 클라이언트는 이 멤버를 무시해야 합니다(해당 값은 암시적으로 0임). 모든 클라이언트가 이 규칙을 따르지 않을 수 있으므로 WAVE_FORMAT_PCM 형식에 대해 cbSize 를 0으로 초기화하는 것이 좋습니다.

설명

WAVEFORMATEX 구조체는 WAVEFORMATEXTENSIBLE 구조체에서 설명할 수 있는 형식의 하위 집합만 설명할 수 있습니다. 예를 들어 WAVEFORMATEX는 8비트 또는 16비트 정수 샘플 값 또는 32비트 부동 소수점 샘플 값이 있는 모노 또는 (2 채널) 스테레오 펄스 코드 변조(PCM) 스트림을 설명할 수 있습니다. 또한 WAVEFORMATEX는 AC-3 및 WMA Pro와 같은 인기 있는 비 PCM 형식을 설명할 수 있습니다.

WAVEFORMATEX는 샘플당 유효한 비트 수가 샘플 컨테이너 크기와 동일한 모노 또는 스테레오 PCM 형식을 명확하게 설명할 수 있습니다. 두 개 이상의 채널이 있는 PCM 형식을 설명하려면 스피커 구성(즉, 실제 화자 위치에 채널 매핑)을 지정하는 채널 마스크가 있는 WAVEFORMATEXTENSIBLE이 필요합니다. 샘플당 유효한 비트 수가 샘플 컨테이너 크기(예: 3비트 컨테이너에 저장된 20비트 샘플)보다 작은 PCM 형식을 설명하려면 유효한 샘플 비트 수와 샘플 컨테이너 크기를 모두 지정하는 WAVEFORMATEXTENSIBLE이 필요합니다.

WAVEFORMATEX는 헤더 파일 Mmreg.h(예: WAVE_FORMAT_MPEG)에 16비트 형식 태그가 정의된 비 PCM 형식을 설명할 수 있습니다. WAVEFORMATEX의 wFormatTag 멤버에는 형식 태그가 포함됩니다. 형식을 식별하는 GUID를 포함하는 WAVEFORMATEXTENSIBLE 구조체에 의해 Mmreg.h에 형식 태그가 정의되지 않은 비 PCM 형식을 지정합니다. 필요한 경우 하드웨어 공급업체는 GUID 값을 독립적으로 생성하여 새 형식을 식별할 수 있습니다. MICROSOFT에 GUID를 등록할 필요가 없습니다.

WAVEFORMATEX와 WAVEFORMATEXTENSIBLE 간의 차이점에 대한 자세한 내용은 확장 가능한 Wave-Format 설명자를 참조하세요.

wFormatTag 멤버는 Mmreg.h에 정의된 웨이브 형식 태그 중 하나로 설정됩니다. 더 일반적인 비프로비타리 형식 중 일부에 대한 태그는 다음 표에 나와 있습니다.

wFormatTag 값 의미
WAVE_FORMAT_PCM 정수 형식의 PCM(펄스 코드 변조) 데이터입니다.
WAVE_FORMAT_IEEE_FLOAT IEEE 부동 소수점 형식의 PCM 데이터입니다.
WAVE_FORMAT_DRM DRM으로 인코딩된 형식(Microsoft 디지털 권한 관리로 보호되는 디지털 오디오 콘텐츠의 경우).
WAVE_FORMAT_EXTENSIBLE 확장 가능한 WAVEFORMATEX 구조체( WAVEFORMATEXTENSIBLE 참조).
WAVE_FORMAT_ALAW A-law로 인코딩된 형식입니다.
WAVE_FORMAT_MULAW Mu-law로 인코딩된 형식입니다.
WAVE_FORMAT_ADPCM ADPCM(적응 차등 펄스 코드 변조) 데이터.
WAVE_FORMAT_MPEG MPEG-1 데이터 형식(스트림은 ISO 11172-3 오디오 사양을 준수합니다).
WAVE_FORMAT_DOLBY_AC3_SPDIF S/PDIF를 통한 AC-3(일명 Dolby Digital).
WAVE_FORMAT_WMASPDIF WMA(Windows Media Audio) Pro over S/PDIF.
 

WAVE_FORMAT_Xxx 형식의 전체 목록은 Mmreg.h를 참조하세요.

WAVEFORMATEX는 PCM 형식을 지정하는 데 사용되는 사용되지 않는 구조체인 PCMWAVEFORMAT 구조체와 거의 동일합니다. 유일한 차이점은 WAVEFORMATEX에 cbSize 멤버가 포함되어 있고 PCMWAVEFORMAT는 포함하지 않는다는 것입니다. 규칙에 따라 wFormatTag = WAVE_FORMAT_PCM 때 cbSize를 무시해야 합니다(cbSize가 암시적으로 0이기 때문). 이 규칙을 사용하면 드라이버 소프트웨어가 PCM 형식의 경우 WAVEFORMATEX 및 PCMWAVEFORMAT 구조를 동일하게 처리할 수 있습니다. PCMWAVEFORMAT에 대한 자세한 내용은 Microsoft Windows SDK 설명서를 참조하세요.

wFormatTag = WAVE_FORMAT_PCM 또는 wFormatTag = WAVE_FORMAT_IEEE_FLOAT 경우 cbSize를 0으로 설정합니다. wFormatTag의 다른 모든 값에 대해 cbSize는 WAVEFORMATEX 구조체에 추가되는 추가 형식 데이터의 바이트 수를 지정합니다.

wFormatTag = WAVE_FORMAT_EXTENSIBLE 경우 waveFORMATEXTENSIBLE 구조체에 sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX) 추가된 형식별 데이터의 크기와 함께 cbSize를 로 설정합니다.

요구 사항

   
머리글 mmreg.h(Mmsystem.h, Mmreg.h, Mmsystem.h 포함)

참고 항목

WAVEFORMATEXTENSIBLE