WAVEFORMATEX 構造体 (mmreg.h)
WAVEFORMATEX 構造体は、ウェーブ オーディオ ストリームのデータ形式を指定します。
構文
typedef struct tWAVEFORMATEX {
WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign;
WORD wBitsPerSample;
WORD cbSize;
} WAVEFORMATEX, *PWAVEFORMATEX, *NPWAVEFORMATEX, *LPWAVEFORMATEX;
メンバー
wFormatTag
波形オーディオ形式の種類を指定します。 詳細については、「解説」を参照してください。
nChannels
オーディオ データのチャネル数を指定します。 モノフォニック オーディオの場合は、このメンバーを 1 に設定します。 ステレオの場合は、このメンバーを 2 に設定します。
nSamplesPerSec
各チャネルを再生または記録する必要があるサンプル周波数を指定します。 wFormatTag = WAVE_FORMAT_PCMの場合、nSamplesPerSec の一般的な値は 8.0 kHz、11.025 kHz、22.05 kHz、44.1 kHz です。 たとえば、11.025 kHz のサンプル周波数を指定するには、 nSamplesPerSec を 11025 に設定します。 PCM 以外の形式の場合、このメンバーは、製造元の format タグの仕様に従って計算する必要があります。
nAvgBytesPerSec
必要な平均データ転送速度を 1 秒あたりのバイト数で指定します。 この値は、バッファー サイズを見積もる場合に便利です。
nBlockAlign
ブロックの配置をバイト単位で指定します。 ブロックの配置は、 wFormatTag 形式型のデータの最小アトミック単位のサイズです。 wFormatTag = WAVE_FORMAT_PCMまたは wFormatTag = WAVE_FORMAT_IEEE_FLOATの場合は、nBlockAlign を に(nChannels*wBitsPerSample)/8
設定します。これは、1 つのオーディオ フレームのサイズです。 非 PCM 形式の場合、このメンバーは format タグの製造元の仕様に従って計算する必要があります。
再生および記録ソフトウェアでは、一度に nBlockAlign バイトのデータの倍数を処理する必要があります。 デバイスに書き込まれ、デバイスから読み取られたデータは、常にブロックの先頭から開始する必要があります。
wBitsPerSample
wFormatTag で指定された書式の種類のサンプルごとのビット数を指定します。 wFormatTag = WAVE_FORMAT_PCMの場合は、wBitsPerSample を 8 または 16 に設定する必要があります。 wFormatTag = WAVE_FORMAT_IEEE_FLOATの場合、wBitsPerSample は 32 に設定する必要があります。 PCM 以外の形式の場合は、書式タグの製造元の仕様に従って、このメンバーの値を設定します。 一部の圧縮スキームでは 、wBitsPerSample の値を定義できません。 この場合は、 wBitsPerSample を 0 に設定します。
cbSize
WAVEFORMATEX 構造体の末尾に追加される追加の書式情報のサイズをバイト単位で指定します。 この情報は、PCM 以外の形式で wFormatTag の追加の属性を格納するために使用できます。 wFormatTag に追加情報が必要ない場合は、このメンバーを 0 に設定します。 WAVE_FORMAT_PCM形式の場合、クライアントはこのメンバーを無視する必要があります (その値は暗黙的にゼロです)。 すべてのクライアントがこの規則に従っていない可能性があるため、WAVE_FORMAT_PCM形式では cbSize を 0 に初期化することをお勧めします。
解説
WAVEFORMATEX 構造体では、 WAVEFORMATEXTENSIBLE 構造体で記述できる形式のサブセットのみを記述できます。 たとえば、WAVEFORMATEX では、8 ビットまたは 16 ビットの整数値、または 32 ビット浮動小数点サンプル値を使用して、単一または (2 チャネル) ステレオ パルス コード変調 (PCM) ストリームを記述できます。 さらに、WAVEFORMATEX では、AC-3 や WMA Pro などの一般的な PCM 以外の形式を記述できます。
WAVEFORMATEX では、サンプルあたりの有効なビット数がサンプル コンテナー サイズと同じモノまたはステレオ PCM 形式を明確に記述できます。 2 つ以上のチャネルを持つ PCM 形式を記述するには、スピーカーの構成 (つまり、物理スピーカー位置へのチャネルのマッピング) を指定するチャネル マスクを持つ WAVEFORMATEXTENSIBLE が必要です。 サンプルあたりの有効なビット数がサンプル コンテナー サイズより小さい PCM 形式 (たとえば、3 バイト コンテナーに格納されている 20 ビットサンプル) を記述するには、有効なサンプル ビット数とサンプル コンテナー サイズの両方を指定する WAVEFORMATEXTENSIBLE が必要です。
WAVEFORMATEX では、ヘッダー ファイル Mmreg.h (たとえば、WAVE_FORMAT_MPEG) で 16 ビット形式タグが定義されている PCM 以外の形式を記述できます。 WAVEFORMATEX の wFormatTag メンバーには、書式タグが含まれています。 形式タグが Mmreg.h で定義されていない PCM 以外の形式を、形式を識別する GUID を含む WAVEFORMATEXTENSIBLE 構造体で指定します。 必要に応じて、ハードウェア ベンダーは GUID 値を個別に生成して新しい形式を識別できます。 MICROSOFT に GUID を登録する必要は不要です。
WAVEFORMATEX と WAVEFORMATEXTENSIBLE の違いの詳細については、「 拡張可能な Wave-Format 記述子」を参照してください。
wFormatTag メンバーは、Mmreg.h で定義されているウェーブ形式タグのいずれかに設定されます。 一般的な非プロパティ形式の一部のタグを次の表に示します。
wFormatTag 値 | 説明 |
---|---|
WAVE_FORMAT_PCM | PCM (パルス コード変調) データ (整数形式)。 |
WAVE_FORMAT_IEEE_FLOAT | IEEE 浮動小数点形式の PCM データ。 |
WAVE_FORMAT_DRM | DRM でエンコードされた形式 (Microsoft Digital Rights Management によって保護されたデジタル オーディオ コンテンツの場合)。 |
WAVE_FORMAT_EXTENSIBLE | 拡張可能な WAVEFORMATEX 構造体 ( 「WAVEFORMATEXTENSIBLE」を参照)。 |
WAVE_FORMAT_ALAW | 法律でエンコードされた形式。 |
WAVE_FORMAT_MULAW | Mu-law エンコード形式。 |
WAVE_FORMAT_ADPCM | ADPCM (アダプティブ差動パルスコード変調) データ。 |
WAVE_FORMAT_MPEG | MPEG-1 データ形式 (ストリームは ISO 11172-3 オーディオ仕様に準拠しています)。 |
WAVE_FORMAT_DOLBY_AC3_SPDIF | AC-3 (ドルビー デジタルとも呼ばれる) over S/PDIF。 |
WAVE_FORMAT_WMASPDIF | S/PDIF 経由の Windows Media Audio (WMA) Pro。 |
WAVE_FORMAT_Xxx 形式の完全な一覧については、Mmreg.h を参照してください。
WAVEFORMATEX は PCMWAVEFORMAT 構造体とほぼ同じです。これは、PCM 形式を指定するために使用される古い構造です。 唯一の違いは、WAVEFORMATEX に cbSize メンバーが含まれ、PCMWAVEFORMAT には含まれないということです。 規則により、wFormatTag = WAVE_FORMAT_PCMの場合は cbSize を無視する必要があります (cbSize は暗黙的に 0 であるため)。 この規則により、ドライバー ソフトウェアは、PCM 形式の場合、WAVEFORMATEX と PCMWAVEFORMAT 構造体を同一に扱うことができます。 PCMWAVEFORMAT の詳細については、Microsoft Windows SDKドキュメントを参照してください。
wFormatTag = WAVE_FORMAT_PCMまたは wFormatTag = WAVE_FORMAT_IEEE_FLOAT場合は、cbSize を 0 に設定します。 wFormatTag の他のすべての値に対して、cbSize は WAVEFORMATEX 構造体に追加される追加のフォーマット データのバイト数を指定します。
wFormatTag = WAVE_FORMAT_EXTENSIBLEの場合は、cbSize に、WAVEFORMATEXTENSIBLE 構造体にsizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX)
追加される任意の形式固有のデータのサイズを加えた値に設定します。
必要条件
Header | mmreg.h (mmsystem.h、Mmreg.h、Mmsystem.h を含む) |