次の方法で共有


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 は WAVEFORMATEX の制限を受けません。これは、2 つ以上のチャネルを持つ形式を明確に指定できないか、サンプルあたりの有効なビット数がサンプル コンテナー のサイズと等しくない場合です。 詳細については、「オーディオ データ形式とデータ範囲を参照してください。

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

サンプル コンテナーは、バイト境界で開始および終了し、Formatの値です。wBitsPerSample は常に 8 の倍数にする必要があります。 また、wValidBitsPerSample の値は、形式の値を超えないようにする必要があります。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 指定されているチャネルは、上の表に示した順序で、先頭から順に存在する必要があります。

たとえば、前-左と前中央のみを指定する場合は、インターリーブされたストリームのチャネル 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 を参照してください。

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

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

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

WAVEFORMATEXTENSIBLE では、フォーマットの登録は不要になります。 ベンダーは、必要に応じて、SubFormat GUID を新しい形式に個別に割り当てることができます。 ただし、Microsoft では、パブリック ヘッダー ファイルの SubFormat GUID Ksmedia.hの一部を一覧表示しています。 新しい 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 を自由に定義して、ウェーブ形式タグが存在しない独自の形式を識別できます。

必要条件

要件 価値
ヘッダー ksmedia.h (Mmreg.h、Ksmedia.h、Mmreg.h を含む)

関連項目

KSAUDIO_CHANNEL_CONFIG

WAVEFORMATEX する