WAVEFORMATEXTENSIBLE 構造体 (ksmedia.h)

WAVEFORMATEXTENSIBLE 構造体は、オーディオウェーブストリームの形式を指定します。

構文

typedef struct {
  WAVEFORMATEX Format;
  union {
    WORD wValidBitsPerSample;
    WORD wSamplesPerBlock;
    WORD wReserved;
  } Samples;
  DWORD        dwChannelMask;
  GUID         SubFormat;
} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;

メンバー

Format

ストリームのウェーブ データ形式を指定します。 このメンバーは、 WAVEFORMATEX 型の構造です。 WAVEFORMATEX の wFormat メンバーは、WAVE_FORMAT_EXTENSIBLEに設定する必要があります。 WAVEFORMATEX の wBitsPerSample メンバーは、各サンプルのコンテナーのサイズとして明確に定義されます。 サンプル コンテナーは常にバイトアラインされ、 wBitsPerSample は 8 の倍数である必要があります。

Samples

Samples.wValidBitsPerSample

サンプルの精度をビット単位で指定します。 このメンバーの値は、 Format で指定されたコンテナー サイズ以下である必要があります。wBitsPerSample メンバー。 詳細については、「解説」を参照してください。

Samples.wSamplesPerBlock

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

Samples.wReserved

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

dwChannelMask

マルチチャネル ストリーム内のチャネルを話者の位置に割り当てを指定します。 エンコードは、KSAUDIO_CHANNEL_CONFIG 構造体の ActiveSpeakerPositions メンバーに使用されるのと同じです。 詳細については、「解説」を参照してください。

SubFormat

サブフォーマットを指定します。 詳細については、「解説」を参照してください。

解説

WAVEFORMATEXTENSIBLE は、 WAVEFORMATEX 構造体の拡張形式です。 WAVEFORMATEX では、WAVEFORMATEXTENSIBLE で記述できる形式のサブセットのみを明確に記述できます。 WAVEFORMATEXTENSIBLE には、2 つ以上のチャネルを持つ形式を明確に指定できない、またはサンプルあたりの有効なビット数がサンプル コンテナー サイズと等しくない WAVEFORMATEX の制限は適用されません。 詳細については、「 オーディオ データ形式とデータ範囲」を参照してください。

多くの場合、サンプルの有効桁数を指定する wValidBitsPerSample メンバーには、 Format と同じ値が含まれています。サンプル コンテナー サイズを指定する wBitsPerSample メンバー。 ただし、これらの値は異なる場合があります。 たとえば、ウェーブ データが 20 ビットの A/D コンバーターから生成された場合、 wValidBitsPerSample は 20 ですが Format である必要があります。wBitsPerSample は 24 または 32 である可能性があります。 wValidBitsPerSampleFormat より小さい場合。wBitsPerSample では、有効なビット (実際の PCM データ) がコンテナー内で左揃えになります。 コンテナーの最下位部分の未使用ビットは 0 に設定する必要があります。

サンプル コンテナーは、バイト境界で開始および終了し、Format の値を指定 しますwBitsPerSample は常に 8 の倍数である必要があります。 また、 wValidBitsPerSample の値が Format の値を超えないようにする必要があります。wBitsPerSample。 ドライバーは、これらの規則に違反するウェーブ形式を拒否する必要があります。

WAVEFORMATEXTENSIBLE 構造体の dwChannelMask メンバーには、マルチチャネル ストリームに存在するチャネルを示すマスクが含まれています。 最下位ビットはフロントレフトスピーカーを表し、次のビットはフロントライトスピーカーに対応します。 ヘッダー ファイル Ksmedia.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

dwChannelMask で指定されたチャネルは、上の表の先頭から始まる順序で存在する必要があります。

たとえば、front-left と front-center のみを指定する場合は、インターリーブストリームのチャネル 0 と 1 に、フロント左とフロントセンターをそれぞれ配置する必要があります。

2 つ目の例として、 nChannels ( Format メンバーの場合は「 WAVEFORMATEX」を参照) が 4 に設定され、 dwChannelMask が 0x00000033 に設定されている場合、オーディオ チャネルは、フロントレフ、フロント右、バック左、およびバック右のスピーカーへの再生を目的としています。 チャネル データは、各ブロック内でその順序でインターリーブする必要があります。

定義済みの場所を超えるチャネルの場所は予約済みと見なされます。

または、チャネル マスクは、 Ksmedia.h で定義され、標準のスピーカー構成を表す上記のフラグのビットごとの ORed の組み合わせである、次のいずれかの定数として指定できます。

KSAUDIO_SPEAKER_MONO

KSAUDIO_SPEAKER_STEREO

KSAUDIO_SPEAKER_QUAD

KSAUDIO_SPEAKER_SURROUND

KSAUDIO_SPEAKER_5POINT1

KSAUDIO_SPEAKER_7POINT1

KSAUDIO_SPEAKER_DIRECTOUT

ハードウェア デバイスは、 KSPROPERTY_AUDIO_CHANNEL_CONFIG set-property 要求によって、これらのスピーカー構成のいずれかに設定できます。 スピーカー構成の設定の詳細については、「 KSAUDIO_CHANNEL_CONFIG」を参照してください。

通常、 nChannels のカウントは dwChannelMask で設定されたビット数と等しくなりますが、これは必ずしもそうであるとは限りません。 nChannels が dwChannelMask に設定されているビット数より少ない場合、dwChannelMask の余分な (最も重要な) ビットは無視されます。 nChannels が dwChannelMask に設定されているビット数を超える場合、対応するマスク ビットがないチャネルは、物理スピーカーの位置には割り当てされません。 KSAUDIO_SPEAKER_DIRECTOUT以外のスピーカー構成では、KMixer のようなオーディオ シンク ( 「KMixer システム ドライバー」を参照) は、これらの余分なチャネルを無視し、対応するマスク ビットを持つチャネルのみを混在させます。

KSAUDIO_SPEAKER_DIRECTOUTは、スピーカーのない構成を表し、 Ksmedia.h でゼロとして定義されます。 この構成では、オーディオ デバイスはデバイスの最初のポートに最初のチャネルをレンダリングし、2 番目のチャネルはデバイス上の 2 番目のポートにレンダリングします。 これにより、オーディオオーサリングアプリケーションは、デジタルミキサーやデジタルオーディオストレージデバイス(ハードディスクまたはADAT)などのデバイスに変更を加えることなく、マルチチャンネルデータを直接出力できます。 たとえば、チャンネル 0 から 30 には、それぞれドラム、ギター、ベース、音声などが含まれる場合があります。 このような生のオーディオ データの場合、話者の位置は意味がなく、スピーカーの位置を入力ストリームまたは出力ストリームに割り当てると、KMixer などのコンポーネントが不要な形式変換を実行して不適切に介入する可能性があります。 デバイスが生のオーディオ ストリームを処理できない場合は、スピーカーの構成をKSAUDIO_SPEAKER_DIRECTOUTに変更する要求を拒否する必要があります。 詳細については、「 DSSPEAKER_DIRECTOUT Speaker Configuration」を参照してください。

マルチチャネル構成の詳細については、オーディオ テクノロジ Web サイトの「マルチ チャネル オーディオ データと WAVE ファイル」というホワイト ペーパーを参照してください。

SubFormat メンバーには、ウェーブ ストリームの一般的なデータ形式を指定する GUID が含まれています。 たとえば、この GUID では、ストリームに整数の PCM データが含まれていることを指定できます。 他のメンバーは、サンプル サイズやチャネル数などの追加情報を提供します。 SubFormat GUID の意味は、WAVEFORMATEX 構造体の wFormatTag メンバーの 16 ビット形式タグの意味と似ています。

WINDOWS 98 Second Edition で WAVEFORMATEXTENSIBLE が導入される前は、WAVE 形式を指定するために WAVEFORMATEX が推奨される構造でした。 その時点で、ベンダーは、公式の書式タグを形式に割り当てることができるように、新しいウェーブ形式を Microsoft に登録する必要があります。 登録済みの書式タグの一覧が、パブリック ヘッダー ファイル Mmreg.h に表示されます。

WAVEFORMATEXTENSIBLE では、書式の登録は不要になりました。 ベンダーは、必要に応じて 、SubFormat GUID を新しい形式に個別に割り当てることができます。 ただし、Microsoft では、パブリック ヘッダー ファイル Ksmedia.h で一般的な SubFormat GUID の一部を一覧表示します。 新しい SubFormat GUID を定義する前に、ベンダーは Ksmedia.h の KSDATAFORMAT_SUBTYPE_Xxx 定数の一覧をチェックして、特定の形式に対して適切な GUID が既に定義されているかどうかを確認する必要があります。

下位互換性のために、スタンドアロンの WAVEFORMATEX 構造体で指定できるウェーブ形式は、WAVEFORMATEXTENSIBLE 構造体でも定義できます。 したがって、Mmreg.h のすべての書式タグには、対応する SubFormat GUID があります。 次の表は、一般的な書式タグとそれに対応する SubFormat GUID を示しています。

タグの書式設定 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

詳細については、「 書式タグとサブフォーマット GUID 間の変換」を参照してください。

WAVEFORMATEXTENSIBLE は WAVEFORMATEX の拡張バージョンであるため、WAVEFORMATEX だけでは記述できない追加の形式を記述できます。 ベンダーは、独自の SubFormat GUID を自由に定義して、ウェーブ形式タグが存在しない独自の形式を識別できます。

要件

要件
Header ksmedia.h (Mmreg.h、Ksmedia.h、Mmreg.h を含む)

こちらもご覧ください

KSAUDIO_CHANNEL_CONFIG

WAVEFORMATEX