次の方法で共有


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 宣言

関連項目

マルチチャンネルと高解像度 WAV フォーマット