MPEG1WAVEFORMAT
MPEG1WAVEFORMAT 構造体は、MPEG-1 オーディオ データのフォーマットを記述する。
構文
typedef struct mpeg1waveformat_tag {
WAVEFORMATEX wfx;
WORD fwHeadLayer;
DWORD dwHeadBitrate;
WORD fwHeadMode;
WORD fwHeadModeExt;
WORD wHeadEmphasis;
WORD fwHeadFlags;
DWORD dwPTSLow;
DWORD dwPTSHigh;
} MPEG1WAVEFORMAT;
メンバ
wfx
オーディオ フォーマットに関する情報を格納する WAVEFORMATEX 構造体。「注意」を参照すること。
fwHeadLayer
次の定数で定義されるように MPEG オーディオ レイヤを指定する。
値 | 説明 |
ACM_MPEG_LAYER1 | レイヤ 1 |
ACM_MPEG_LAYER2 | レイヤ 2 |
ACM_MPEG_LAYER3 | レイヤ 3 |
一部の MPEG ストリームには、複数のレイヤからのフレームが含まれる場合がある。その場合、フラグをビットごとの OR で結ぶこと。
dwHeadBitrate
ビットレート (ビット/秒) を指定する。この値には、MPEG フレームのヘッダー コードではなく、実際のビットレートを指定する。ビットレートが変数か、または標準でないビットレートの場合は、このフィールドをゼロに設定する。
fwHeadMode
次の定数で定義されるようにストリーム モードを指定する。
値 | 説明 |
ACM_MPEG_STEREO | ステレオ |
ACM_MPEG_JOINTSTEREO | ジョイント ステレオ |
ACM_MPEG_DUALCHANNEL | デュアル チャンネル |
ACM_MPEG_SINGLECHANNEL | 単一チャンネル |
一部の MPEG ストリームには、モードの異なるフレームが含まれる場合がある。その場合、フラグをビットごとの OR で結ぶこと。
fwHeadModeExt
次に示すジョイントステレオ エンコーディング用のモード エクステンションを指定する。
値 | MPEG フレーム ヘッダー コード | レイヤ 1 とレイヤ 2 | レイヤ 3 |
0x01 | '00' | 帯域 4 ~ 31 のインテンシティ ステレオ | インテンシティ ステレオをオフ、ミドルサイド (MS) ステレオをオフ |
0x02 | '01' | 帯 8 ~ 31 のインテンシティ ステレオ | インテンシティ ステレオをオン、MS ステレオをオフ |
0x04 | '10' | 帯域 12 ~ 31 のインテンシティ ステレオ | インテンシティ ステレオをオフ、MS ステレオをオン |
0x08 | '11' | 帯域 16 ~ 31 のインテンシティ ステレオ | インテンシティ ステレオをオフ、MS ステレオをオン |
これらの値は、ビットごとの OR によって結ばれていることがある。通常、エンコーダは信号の特性に応じてエクステンション モードを動的に切り替える。したがって、標準のジョイントステレオ エンコーディングでは、このフィールドに 0x0F (すべてのフラグのビットごとの OR) を設定する。ただし、このフィールドを使って、エンコーダが指定できる一連のエンコーディングの種類を制限できる。
このフィールドは、fwHeadMode に ACM_MPEG_JOINTSTEREO が含まれる場合に限って適用される。その他のモードについては、このフィールドにはゼロを設定する。
wHeadEmphasis
デコーダに必要なデエンファシスを指定する。
値 | MPEG フレーム ヘッダー コード | 必要なデエンファシス |
1 | '00' | なし |
2 | '01' | 50/15 ms エンファシス |
3 | '10' | 予約済み |
4 | '11' | CCITT J.17 |
fwHeadFlags
次のフラグの 0 個以上のビットごとの組み合わせを指定する。
値 | 説明 |
ACM_MPEG_PRIVATEBIT | プライベート ビットを設定する。 |
ACM_MPEG_COPYRIGHT | 著作権ビットを設定する。 |
ACM_MPEG_ORIGINALHOME | オリジナル/ホーム ビットを設定する。 |
ACM_MPEG_PROTECTIONBIT | 保護ビットを設定し、16 ビットのエラー保護コードを各フレームに挿入する。 |
ACM_MPEG_ID_MPEG1 | ID ビットを 1 に設定し、ストリームを MPEG-1 オーディオ ストリームとして定義する。 |
エンコーダはこれらのフラグを使って、MPEG オーディオ フレーム ヘッダーの対応するビットを設定する。
dwPTSLow
オーディオ ストリームの先頭フレームにあるプレゼンテーション タイム スタンプ (PTS) の最下位 32 ビットを指定する。
dwPTSHigh
PTS の最上位ビットを指定する。dwPTSLow フィールドと dwPTSHigh フィールドは、単一の 64 ビット値と見なすことができる。
注意
MPEG-1 オーディオの場合、wfx メンバに定義される WAVEFORMATEX 構造体には次の値を持たせる必要がある。
WAVEFORMATEX メンバ | 説明 |
wFormatTag | 必ず WAVE_FORMAT_MPEG を指定すること。 |
nChannels | モノラルの場合は 1、ステレオの場合は 2。 |
nSamplesPerSec | サンプリング周波数が固定の場合は、サンプリング周波数を指定する。サンプリング周波数が可変の場合、このフィールドは 0 に設定する。 |
nAvgBytesPerSec | 平均データ レートを指定する。レイヤ 3 で可変ビットレート エンコーディングが使われている場合、この値は正しい MPEG-1 ビット レートでない可能性がある。 |
nBlockAlign | 固定オーディオ フレーム長を持つオーディオ ストリームの場合、このフィールドでオーディオ フレームの長さを指定する。フレーム長が可変の場合、このフィールドは 1 に設定する。
サンプリング周波数が 32 kHz または 48 kHz でビット レートが一定の場合、オーディオ フレーム サイズは一定である。そのような場合、nBlockAlign は次の方法で求めること。
ビット レートが可変またはサンプリング周波数が 44.1 kHz の場合、オーディオ フレーム サイズは一定ではないので、nBlockAlign には必ず 1 を指定すること。 |
wBitsPerSample | 未使用。ゼロを設定する。 |
cbSize | WAVEFORMATEX 構造体の後のフォーマット データのサイズを指定する (バイト単位)。標準的な MPEG1WAVEFORMAT 構造体の場合、この値は 22 バイトである。 |
参照