WAVEFORMATEX
ウェーブフォーム オーディオ データのフォーマットを定義する。この構造体には、ウェーブフォーム オーディオ データ形式すべてに共通のフォーマット情報のみが含まれる。追加情報が必要なフォーマットでは、この構造体が最初のメンバとして、ほかの情報と共に別の構造体に含まれる。
この構造体は Platform SDK の一部であり、Dsound.h では宣言されない。便宜上ここで説明している。
typedef struct {
WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign;
WORD wBitsPerSample;
WORD cbSize;
} WAVEFORMATEX;
メンバ
- wFormatTag
- ウェーブフォーム オーディオ フォーマットのタイプ。多くの圧縮アルゴリズムのフォーマット タグが、Microsoft で登録されている。フォーマット タグの完全なリストは、ヘッダー ファイル Mmreg.h に記述されている。1 チャンネルまたは 2 チャンネル PCM データの場合、この値は WAVEFORMAT_PCM となる。
- nChannels
- ウェーブフォーム オーディオ データのチャンネル数。モノラル データは 1 つのチャンネルを使い、ステレオ データは 2 つのチャンネルを使う。
- nSamplesPerSec
- サンプリング レート。1 秒あたりのサンプル数 (Hz) で表す。wFormatTag が WAVE_FORMAT_PCM の場合、nSamplesPerSec の一般的な値は 8.0 kHz、11.025 kHz、22.05 kHz、および 44.1 kHz である。PCM フォーマットでない場合、このメンバはメーカーのフォーマット タグの仕様に従って計算する必要がある。
- nAvgBytesPerSec
- フォーマット タグで必要な平均データ転送速度。単位は、1 秒あたりのバイト数。wFormatTag が WAVE_FORMAT_PCM である場合、nAvgBytesPerSec は nSamplesPerSec と nBlockAlign の積に等しくする。PCM フォーマットでない場合、このメンバはメーカーのフォーマット タグの仕様に従って計算する必要がある。
- nBlockAlign
- ブロック アライメント (バイト単位)。ブロック アライメントは、wFormatTag フォーマット タイプの最小単位である。wFormatTag が WAVE_FORMAT_PCM または WAVE_FORMAT_EXTENSIBLE である場合、nBlockAlign は nChannels と wBitsPerSample の積を 8 で割った値 (バイトあたりのビット数) に等しくなる必要がある。PCM フォーマットでない場合、このメンバはメーカーのフォーマット タグの仕様に従って計算する必要がある。
ソフトウェアは、複数の nBlockAlign バイトを、一度に処理しなければならない。デバイスに書き込むデータ、およびデバイスから読み込むデータは、常にブロックの先頭から開始しなければならない。たとえば、PCM データの再生を、サンプルの中間 (つまり、非ブロック整列の境界) で開始することは不正である。
- wBitsPerSample
- wFormatTag フォーマット タイプの、サンプリングあたりのビット数。wFormatTag が WAVE_FORMAT_PCM である場合、wBitsPerSample は 8 または 16 とする。wFormatTag が WAVE_FORMAT_EXTENSIBLE である場合は、任意の 8 の倍数を設定できる。
- cbSize
- WAVEFORMATEX 構造体の後ろに追加されるフォーマット情報のサイズ (バイト単位)。この情報を非 PCM フォーマットで使用して、wFormatTag の追加属性を格納することができる。wFormatTag で必要な追加情報がない場合、このメンバは 0 に設定しなければならない。WAVE_FORMAT_PCM フォーマットでは、このメンバは無視される。
ヘッダー : mmreg.h で宣言。
参照
WAVEFORMATEXTENSIBLE