WAVEFORMATEXTENSIBLE
WAVEFORMATEXTENSIBLE 構造体は、チャンネル数が 3 つ以上であるか、WAVEFORMATEX で許可されているサンプル解像度よりも高いフォーマット向けの Wave フォーム オーディオ データのフォーマットを定義します。
この構造体は DirectSound API には含まれていませんが、ここでは参考として説明しています。
typedef struct WAVEFORMATEXTENSIBLE {
WAVEFORMATEX Format;
WORD wValidBitsPerSample;
WORD wSamplesPerBlock;
WORD wReserved;
DWORD dwChannelMask;
DWORD SubFormat;
} WAVEFORMATEXTENSIBLE;
メンバ
- Format
基本のフォーマットを示す、WAVEFORMATEX 構造体です。wFormatTag メンバーには、必ず Mmreg.h で定義されている WAVE_FORMAT_EXTENSIBLE を指定し、cbSize メンバーは 22 以上にする必要があります。 - wValidBitsPerSample
信号の精度のビット数です。通常は、WAVEFORMATEX.wBitsPerSample に等しくなります。ただし、wBitsPerSample はコンテナー サイズであり、8 の倍数である必要があります。これに対し、wValidBitsPerSample には、コンテナー サイズを超えない任意の値を指定できます。たとえば、フォーマットが 20 ビット サンプルを使用する場合、wBitsPerSample は 24 以上にする必要がありますが、wValidBitsPerSample には 20 を指定できます。 - wSamplesPerBlock
オーディオ データの圧縮された 1 つのブロックに含まれるサンプル数。この値は、バッファーの見積もりに使用されます。この値は、各ブロック内のサンプル数が固定されている圧縮形式で使用されます。圧縮されたオーディオ データの各ブロックに含まれるサンプル数が一定ではない場合、この値はゼロに設定できます。この場合、バッファーの見積もりおよび位置情報は、別の方法で取得する必要があります。 - wReserved
オペレーティング システムでの内部用途のために予約されています。ゼロに設定します。 - dwChannelMask
スピーカー位置へのストリームのチャネルを指定するビットマスクです。「解説」を参照してください。 - SubFormat
KSDATAFORMAT_SUBTYPE_PCM などのデータのサブフォーマット。サブフォーマット情報は、WAVFORMATEX 構造体の wFormatTag メンバーでタグが提供する情報と似ています。
解説
WAVEFORMATEXTENSIBLE では、WAVFORMATEX で記述できる任意のフォーマットを記述できますが、サンプルあたりのビット数の精度を高めるため、3 チャンネル以上のサポートおよび新しい圧縮方式が提供されています。
WAVEFORMATEXTENSIBLE は、WAVEFORMATEX.cbSize で指定された追加のバイトを設定するだけであるため、WAVEFORMATEX に対して安全にキャストできます。DirectSound は、フォーマットがドライバーでサポートされている限り、WAVE_FORMAT_EXTENSIBLE フォーマット タグを認識し、複数のチャネル、およびハードウェア バッファーの圧縮フォーマットを正確に再生します。
dwChannelMask メンバーは、マルチチャネル ストリームに存在するチャネルを指定します。最下位ビットは、左前のスピーカー、次のビットが右前のスピーカー、というように対応しています。ビットは、上位から Ksmedia.h および Mmreg.h で次のように定義されます。
スピーカー位置 | フラグ ビット |
---|---|
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 |
この構造体の詳細については、www.microsoft.com で入手できるドキュメント「Multiple Channel Audio Data and WAVE Files」を参照してください。
要件
ヘッダー: Mmreg.h, Ksproxy.h 宣言