Share via


WAVEFORMATEXTENSIBLE 구조체(mmreg.h)

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

WAVEFORMATEXTENSIBLE 구조체는 WAVEFORMATEX에서 허용하는 것보다 두 개 이상의 채널 이상의 샘플 해상도를 갖는 형식에 대한 파형 오디오 데이터의 형식을 정의합니다. WAVEFORMATEX에서 정의할 수 있는 모든 형식을 정의하는 데 사용할 수도 있습니다.

구문

typedef struct {
  WAVEFORMATEX Format;
  union {
    WORD wValidBitsPerSample;
    WORD wSamplesPerBlock;
    WORD wReserved;
  } Samples;
  DWORD        dwChannelMask;
  GUID         SubFormat;
} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;

멤버

Format

기본 형식을 지정하는 WAVEFORMATEX 구조체입니다. wFormatTag 멤버는 WAVE_FORMAT_EXTENSIBLE 합니다. cbSize 멤버는 22 이상이어야 합니다.

Samples

샘플 형식을 설명하는 공용 구조체입니다.

Samples.wValidBitsPerSample

신호의 정밀도 비트 수입니다. 일반적으로 WAVEFORMATEX.wBitsPerSample과 같습니다. 그러나 wBitsPerSample 은 컨테이너 크기이며 8의 배수여야 하지만 wValidBitsPerSample 은 컨테이너 크기를 초과하지 않는 값일 수 있습니다. 예를 들어 형식이 20비트 샘플을 사용하는 경우 wBitsPerSample 은 24 이상이어야 하지만 wValidBitsPerSample 은 20입니다.

Samples.wSamplesPerBlock

하나의 압축된 오디오 데이터 블록에 포함된 샘플 수입니다. 이 값은 버퍼 추정에 사용됩니다. 이 값은 각 블록 내에 고정된 수의 샘플이 있는 압축된 형식과 함께 사용됩니다. 압축된 오디오 데이터의 각 블록에 샘플 수가 가변적인 경우 이 값을 0으로 설정할 수 있습니다. 이 경우 버퍼 예측 및 위치 정보를 다른 방법으로 가져와야 합니다.

Samples.wReserved

운영 체제에서 내부용으로 예약됩니다. 0으로 설정합니다.

dwChannelMask

스트림에서 화자 위치로 채널 할당을 지정하는 비트 마스크입니다.

SubFormat

KSDATAFORMAT_SUBTYPE_PCM 같은 데이터의 하위 형식입니다. 하위 형식 정보는 WAVEFORMATEX 구조체의 wFormatTag 멤버에서 태그에서 제공하는 것과 유사합니다.

설명

WAVEFORMATEXTENSIBLEWAVEFORMATEX에서 설명할 수 있는 모든 형식을 설명할 수 있지만 두 개 이상의 채널, 샘플당 비트 수의 정밀도 및 새 압축 체계에 대한 추가 지원을 제공합니다.

WAVEFORMATEX.cbSize에서 지정한 추가 바이트를 구성하기 때문에 WAVEFORMATEXTENSIBLE을 WAVEFORMATEX로 안전하게 캐스팅할 수 있습니다.

dwChannelMask 멤버는 다중 채널 스트림에 있는 채널을 지정합니다. 가장 중요한 비트는 앞 왼쪽 스피커에 해당하고, 다음으로 가장 중요하지 않은 비트는 앞 오른쪽 스피커에 해당합니다. 비트는 다음과 같이 정의됩니다.

화자 위치 플래그 비트
SPEAKER_FRONT_LEFT 0x1
SPEAKER_FRONT_RIGHT 0x2
SPEAKER_FRONT_CENTER 0x4
SPEAKER_LOW_FREQUENCY 0x8
SPEAKER_BACK_LEFT 0x10
SPEAKER_BACK_RIGHT 0x20
SPEAKER_FRONT_LEFT_OF_CENTER 0x40
SPEAKER_FRONT_RIGHT_OF_CENTER 0x80
SPEAKER_BACK_CENTER 0x100
SPEAKER_SIDE_LEFT 0x200
SPEAKER_SIDE_RIGHT 0x400
SPEAKER_TOP_CENTER 0x800
SPEAKER_TOP_FRONT_LEFT 0x1000
SPEAKER_TOP_FRONT_CENTER 0x2000
SPEAKER_TOP_FRONT_RIGHT 0x4000
SPEAKER_TOP_BACK_LEFT 0x8000
SPEAKER_TOP_BACK_CENTER 0x10000
SPEAKER_TOP_BACK_RIGHT 0x20000
 

dwChannelMask에 지정된 채널은 지정된 순서로 있어야 합니다(최소 중요 비트 이상). 예를 들어 SPEAKER_FRONT_LEFT 및 SPEAKER_FRONT_RIGHT 지정한 경우 왼쪽 앞 스피커에 대한 샘플이 인터리브 스트림에서 먼저 와야 합니다. dwChannelMask에 설정된 비트 수는 WAVEFORMATEX.nChannels에 지정된 채널 수와 동일해야 합니다.

이전 버전과의 호환성을 위해 독립 실행형 WAVEFORMATEX 구조체로 지정할 수 있는 모든 웨이브 형식을 WAVEFORMATEXTENSIBLE 구조체로 정의할 수도 있습니다. 따라서 mmreg.h의 모든 웨이브 형식 태그에는 해당 SubFormat GUID가 있습니다. 다음 표에서는 몇 가지 일반적인 웨이브 형식 태그와 해당 SubFormat GUID를 보여 줍니다. 이러한 GUID는 Ksmedia.h에 정의되어 있습니다.

Wave-Format 태그 SubFormat GUID
WAVE_FORMAT_PCM KSDATAFORMAT_SUBTYPE_PCM
WAVE_FORMAT_IEEE_FLOAT KSDATAFORMAT_SUBTYPE_IEEE_FLOAT
WAVE_FORMAT_DRM KSDATAFORMAT_SUBTYPE_DRM
WAVE_FORMAT_ALAW KSDATAFORMAT_SUBTYPE_ALAW
WAVE_FORMAT_MULAW KSDATAFORMAT_SUBTYPE_MULAW
WAVE_FORMAT_ADPCM KSDATAFORMAT_SUBTYPE_ADPCM
 

WAVEFORMATEXTENSIBLEWAVEFORMATEX의 확장 버전이므로 WAVEFORMATEX만으로는 설명할 수 없는 추가 형식을 설명할 수 있습니다. 공급업체는 웨이브 형식 태그가 없는 독점 형식을 식별하기 위해 자체 SubFormat GUID를 자유롭게 정의할 수 있습니다.

특정 확장 형식에 대해 다음 구조체는 WAVEFORMATEXTENSIBLE로 정의됩니다.

정의 SubFormat 값
WAVEFORMATIEEEFLOATEX KSDATAFORMAT_SUBTYPE_IEEE_FLOAT
WAVEFORMATPCMEX KSDATAFORMAT_SUBTYPE_PCM

요구 사항

   
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
머리글 mmreg.h

추가 정보

파형 오디오

파형 구조체