Share via


WAVEFORMATEXTENSIBLE 構造体 (mmreg.h)

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayerIMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]

WAVEFORMATEXTENSIBLE 構造体は、WAVEFORMATEX で許可されているよりも 2 つ以上のチャネルまたは高いサンプル解像度を持つ形式の波形オーディオ データの形式を定義します。 また、 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

1 つの圧縮されたオーディオ データ ブロックに含まれるサンプルの数。 この値は、バッファー推定で使用されます。 この値は、各ブロック内に固定数のサンプルがある圧縮形式で使用されます。 圧縮されたオーディオ データの各ブロックに可変数のサンプルが含まれている場合、この値は 0 に設定できます。 この場合、バッファー推定と位置情報は他の方法で取得する必要があります。

Samples.wReserved

オペレーティング システムによる内部使用のために予約されています。 0 に設定されます。

dwChannelMask

ストリーム内のチャネルのスピーカー位置への割り当てを指定するビットマスク。

SubFormat

データのサブフォーマット (KSDATAFORMAT_SUBTYPE_PCMなど)。 サブフォーマット情報は、 WAVEFORMATEX 構造体の wFormatTag メンバーの タグによって提供される情報と似ています。

解説

WAVEFORMATEXTENSIBLE、WAVEFORMATEX で記述できる任意の形式を記述できますが、2 つ以上のチャネルに対して追加のサポートを提供し、サンプルあたりのビット数の精度を高め、新しい圧縮スキームを実現します。

WAVEFORMATEXTENSIBLE は、 単に 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 のすべての wave-format タグには、対応する 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 (デスクトップ アプリのみ)
Header mmreg.h

関連項目

波形オーディオ

波形構造