WAVEFORMATEXTENSIBLE 構造体
WAVEFORMATEXTENSIBLE 構造体は、チャンネル数が 3 つ以上であるか、WAVEFORMATEX で許可されているサンプル解像度よりも高いフォーマット向けの Wave 形式オーディオ データのフォーマットを定義します。WAVEFORMATEXTENSIBLE 構造体は、xWMA 形式の定義にも使用されます。
構文
typedef struct { WAVEFORMATEX Format; union { WORD wValidBitsPerSample; WORD wSamplesPerBlock; WORD wReserved; }Samples; DWORD dwChannelMask; GUID SubFormat;} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE, *LPPWAVEFORMATEXTENSIBLE;
メンバー
Format
基本のフォーマットを示す、基本 WAVEFORMATEX 構造体です。wFormatTag メンバーには必ず WAVE_FORMAT_EXTENSIBLE を指定し、cbSize メンバーは 22 以上にする必要があります。Samples
wValidBitsPerSample
信号中の精度のビット数です。通常は、WAVFORMATEX.wBitsPerSample に等しくなります。wSamplesPerBlock
オーディオ データの圧縮された 1 つのブロックに含まれるサンプル数。この値は、各ブロック内のサンプル数が固定されている圧縮形式で使用されます。圧縮されたオーディオ データの各ブロックに含まれるサンプル数が一定ではない場合、この値はゼロに設定できます。この場合、バッファーの見積もりおよび位置情報は、別の方法で取得する必要があります。WAVFORMATEX.wBitsPerSample=0 の場合にのみ有効です (ただし、ほとんど使用されません)。wReserved
内部用途のための予約済みメンバー変数です。dwChannelMask
マルチチャンネル ストリーム内にどのチャンネルが存在するかを指定します。最下位ビットは、左前のスピーカー、次のビットが右前のスピーカー、というように対応しています。dwChannelMask メンバーは、0 であるか、ビット数がサンプル チャンネル数と同じ数に設定される必要があります。dwChannelMask を 0 に設定すると、XAudio2 の既定のチャンネル マップが使用されるようになります。詳細については、「XAudio2 の既定のチャンネル マッピング」を参照してください。
dwChannelMask で指定したチャンネルは、(最下位ビットから最上位ビットへと) 定められた順序で存在する必要があります。たとえば、SPEAKER_FRONT_LEFT と SPEAKER_FRONT_RIGHT のみを指定した場合は、左フロント スピーカーのサンプルがインターリーブされたストリームに最初に現れる必要があります。dwChannelMask で設定したビット数は、WAVFORMATEX.nChannels で指定したチャンネル数と同じでなければなりません。
スピーカー位置 フラグ ビット 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 SubFormat
KSDATAFORMAT_SUBTYPE_PCM などのデータのサブフォーマット。サブフォーマット情報は、WAVFORMATEX 構造体の wFormatTag メンバーでタグが提供する情報と似ています。
解説
WAVEFORMATEXTENSIBLE は、すべての新規オーディオ形式の基本として使用する必要があります。フォーマット タグは、GUID で置き換えられるため、Microsoft でフォーマット タグを登録しなくても、新しいフォーマットを定義できるようになります。各チャンネルの空間位置を指定するために使用する新しいフィールドおよびワイド サンプル (32 ビット コンテナーの 24 ビット PCM サンプル) に使用するビット パックもあります。
WAVEFORMATEXTENSIBLE では、WAVFORMATEX で記述できる任意のフォーマットを記述できますが、サンプルあたりのビット数の精度を高めるため、3 チャンネル以上のサポートおよび新しい圧縮方式が提供されています。
WAVEFORMATEXTENSIBLE は、WAVFORMATEX.cbSize で指定された追加のバイトを設定するだけであるため、WAVFORMATEX に問題なくキャストされます。
WAVEFORMATEXTENSIBLE のメンバーは、再生されるファイルの 'fmt ' RIFF チャンクに含まれる値に対応します。このチャンクからロードされる値には、Xbox 360 にファイルをロードするときに、バイト スワップが必要になります。
要件
ヘッダー: audiodefs.h で宣言されています。