WAVEFORMATEX

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 データの場合、この値は WAVE_FORMAT_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 である場合、nAvgBytesPerSecnSamplesPerSecnBlockAlign の積に等しくなければならない。PCM フォーマットでない場合は、メーカーのフォーマット タグの仕様に従ってこのメンバを計算する必要がある。

nBlockAlign

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

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

wBitsPerSample

wFormatTag フォーマット タイプの、サンプリングあたりのビット数。wFormatTag が WAVE_FORMAT_PCM である場合、wBitsPerSample は 8 または 16 でなければならない。PCM フォーマットでない場合は、メーカーのフォーマット タグの仕様に従ってこのメンバを設定する必要がある。wFormatTag が WAVE_FORMAT_EXTENSIBLE である場合は、任意の 8 の倍数を設定できる。 圧縮スキームが wBitsPerSample の値を定義できないこともあるので、このメンバは 0 となる。

cbSize

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

要件

**  ヘッダー:**mmreg.h で宣言。

参照