WAVEFORMATEXTENSIBLE 構造体 (mmreg.h)
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/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 |
WAVEFORMATEXTENSIBLE は WAVEFORMATEX の拡張バージョンであるため、WAVEFORMATEX だけでは記述できない追加の形式を記述できます。 ベンダーは、独自の SubFormat GUID を自由に定義して、ウェーブ形式タグが存在しない独自の形式を識別できます。
特定の拡張形式の次の構造体は、 WAVEFORMATEXTENSIBLE として定義されます。
定義 | SubFormat の値 |
---|---|
WAVEFORMATIEEEFLOATEX | KSDATAFORMAT_SUBTYPE_IEEE_FLOAT |
WAVEFORMATPCMEX | KSDATAFORMAT_SUBTYPE_PCM |
要件
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
Header | mmreg.h |