WAVEFORMATEX 構造体

WAVEFORMATEX 構造体は、波形オーディオ データのフォーマットを定義する。すべての波形オーディオ データのフォーマットに共通のフォーマット情報だけがこの構造体に含まれる。追加情報が必要なフォーマットの場合、この構造体は、追加情報と共に別の構造体の先頭メンバとして含まれる。

この構造体は Platform SDK の一部で、Mmreg.h で宣言されているが、便宜上このドキュメントにも記載している。

構文

typedef struct { 
  WORD  wFormatTag; 
  WORD  nChannels; 
  DWORD nSamplesPerSec; 
  DWORD nAvgBytesPerSec; 
  WORD  nBlockAlign; 
  WORD  wBitsPerSample; 
  WORD  cbSize; 
} WAVEFORMATEX; 

メンバ

wFormatTag

波形オーディオのフォーマット タイプ。フォーマット タグは、多くの圧縮アルゴリズム用に Microsoft Corporation に登録されている。フォーマット タグの完全なリストは、Mmreg.h ヘッダー ファイルにある。1 チャンネルか 2 チャンネルの PCM (Pulse Code Modulation) データの場合、この値は WAVE_FORMAT_PCM にする必要がある。

nChannels

波形オーディオ データに含まれるチャンネル数。モノラル データは 1 チャンネルを使い、ステレオ データは 2 チャンネルを使う。

nSamplesPerSec

サンプル/秒で表すサンプル レート (単位 Hz)。wFormatTag が WAVE_FORMAT_PCM の場合、nSamplesPerSec の一般的な値は 8.0 kHz、11.025 kHz、22.05 kHz、44.1 kHz となる。非 PCM フォーマットの場合、このメンバは製造業者のフォーマット タグ仕様に従って算出する必要がある。

nAvgBytesPerSec

フォーマット タグに必要な平均データ転送レート (単位 バイト/秒)。wFormatTag が WAVE_FORMAT_PCM の場合、nAvgBytesPerSecnSamplesPerSecnBlockAlign の積と等しくなければならない。非 PCM フォーマットの場合、このメンバは製造業者のフォーマット タグ仕様に従って算出する必要がある。

nBlockAlign

ブロック アラインメント (単位 バイト)。ブロック アラインメントとは、wFormatTag フォーマット タイプのデータの最小構成単位である。wFormatTag が WAVE_FORMAT_PCM または WAVE_FORMAT_EXTENSIBLE の場合、nBlockAlignnChannelswBitsPerSample の積を 8 (1 バイトあたりのビット数) で割った値と等しくなければならない。非 PCM フォーマットの場合、このメンバは製造業者のフォーマット タグ仕様に従って算出する必要がある。

ソフトウェアは、一度に複数の nBlockAlign バイトのデータを処理する必要がある。デバイスに対するデータの書き込みと読み取りは常に、ブロックの先頭から開始しなければならない。たとえば、PCM データの再生をサンプルの途中 (すなわち、非ブロック アライン境界上) から開始することは不正である。

wBitsPerSample

wFormatTag フォーマット タイプの 1 サンプルあたりのビット数。wFormatTag が WAVE_FORMAT_PCM の場合、wBitsPerSample は 8 または 16 でなければならない。wFormatTag が WAVE_FORMAT_EXTENSIBLE の場合、この値は、任意の 8 の倍数を指定できる。一部の圧縮スキームは wBitsPerSample の値を定義できないので、このメンバには 0 を指定してもかまわない。

cbSize

WAVEFORMATEX 構造体の最後に追加される追加フォーマット情報のサイズ (単位バイト)。非 PCM フォーマットは、この情報を使って wFormatTag の追加属性を格納できる。wFormatTag に追加情報が必要ない場合は、このメンバはゼロに設定しなければならない。WAVE_FORMAT_PCM フォーマットしかない場合、このメンバは無視される。

参照