次の方法で共有


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 は次の方法で求めること。

  • レイヤ 1 : 4 * (int)(12 * bitrate / sampling frequency)
  • レイヤ 2 およびレイヤ 3 : (int)(144 * bitrate / sampling frequency)

ビット レートが可変またはサンプリング周波数が 44.1 kHz の場合、オーディオ フレーム サイズは一定ではないので、nBlockAlign には必ず 1 を指定すること。

wBitsPerSample 未使用。ゼロを設定する。
cbSize WAVEFORMATEX 構造体の後のフォーマット データのサイズを指定する (バイト単位)。標準的な MPEG1WAVEFORMAT 構造体の場合、この値は 22 バイトである。

参照