オーディオ ストリームの構成

一般に、オーディオ ストリームは構成が最も簡単です。 「コーデックからのストリーム構成情報の取得」の説明に従って 、IWMCodecInfo のメソッドを使用して コーデックからストリーム構成を取得します。 ほとんどの状況では、取得した設定から設定を変更しないでください。

これらの列挙から選択するコーデック形式は、プロファイルで作成された ASF ファイルの用途によって異なります。 IWMCodecInfo2::GetCodecFormatDesc によって取得されたコーデック形式の説明は、形式の特性をまとめたものです。 アプリケーションに選択する説明が表示されない場合は、コーデック形式の IWMStreamConfig インターフェイスで QueryInterface を呼び出して、IWMMediaProps インターフェイスを取得できます。 その後、IWMMediaProps::GetMediaType を呼び出して、WM_MEDIA_TYPE構造体を取得できます。 WM_MEDIA_TYPE構造とそれが指す WAVEFORMATEX 構造を調べることで、コーデック形式の設定を決定し、要件と比較できます。

A/V 同期のオーディオ形式を取得する

Windows Media Audio コーデックと Windows Media Audio Professional コーデックは、オーディオのみのファイルとオーディオ/ビデオ ファイルの両方の形式をサポートします。 オーディオのみの形式はオーディオ データのみを含むファイルに対して最適化され、オーディオ/ビデオ形式はビデオ ストリームを含むファイル内のオーディオ用に最適化されています。 これらのコーデックのコーデック形式を列挙する場合、オーディオ/ビデオ形式はオーディオのみの形式の後に表示されます。 オーディオ/ビデオ形式の説明には、すべて "(A/V)" という文字列が含まれています。 1 秒あたりのパケット数を確認することで、オーディオ/ビデオ同期用に設計された形式をプログラムで識別できます。 ビット レートが 32,000 ビット/秒以上の場合、同期の形式は 1 秒あたり 5 つ以上のパケットを持っています。 1 秒あたり 32,000 ビット未満のビット レートの形式は、1 秒あたり 3 つ以上のパケットを使用する場合、同期されたビデオで使用できます。 「オーディオ形式を検索する」トピックのコード例には、このチェックを行うために必要なコードが含まれています。

if((pWave->nAvgBytesPerSec / pWave->nBlockAlign) >= 
       ((pWave->nAvgBytesPerSec >= 4000) ? 5.0 : 3.0))
{
    // Set this stream configuration as the new best match.
}

Low-Delayオーディオ形式の取得

Windows Media 9.1 コーデックと Windows Media Audio 9.1 Professional コーデックはどちらも低遅延形式をサポートしています。 これらの形式では、他のオーディオ形式よりもバッファー ウィンドウが小さくなります。 低遅延オーディオは、ファイルまたはストリームが頻繁に切り替えられるシナリオでパフォーマンスを向上させることを目的としています。たとえば、ユーザー インターフェイスでストリーミングする曲の数を一覧表示し、ユーザーが任意に切り替えることができます。

低遅延形式は、CBR モード (1 パスまたは 2 パス) でのみ使用できます。 低遅延形式の説明には、すべて "Low Delay" という文字列が含まれています。 形式のビット レート値を確認することで、プログラムで形式を識別できます。 低遅延形式には、同等の通常の形式のビット レートより 1 キロビット未満のビット レートが割り当てられます。 たとえば、Windows Media Audio 9.1 コーデックでは、ビット レートが 192 kbps のシングルパス CBR 形式がサポートされています。 同等の低遅延形式のビット レートは 191 kbps です。 さらに、Windows Media Audio 9.1 コーデックでサポートされている 5 kbps mono 形式を除き、低遅延形式は奇数ビット レート値を持つ唯一の形式です。

可変ビットレートオーディオの設定

Windows Media オーディオ コーデックの 1 つに可変ビット レート (VBR) 形式が必要な場合は、 IWMCodecInfo3::SetCodecEnumerationSetting メソッドで列挙設定を設定することで取得できます。 g_wszVBREnabledを True に設定し、品質ベースの VBR の場合は g_wszNumPasses を 1 に、2 パス VBR の場合は 2 (制約ありまたは制約なし) に設定します。 制約付き 2 パス VBR を使用している場合は、「VBR ストリームの構成」の説明に従って、IWMPropertyVault のメソッドを使用して、ストリームの最大ビット レートとバッファー ウィンドウを手動で設定する必要があります。

品質ベースの VBR プロファイルでは、WAVEFORMATEX 構造体の nAvgBytesPerSec メンバーには、下位バイトの品質レベル (1 から 100) が含まれており、3 つの上位バイトが0x7fffffに設定されます。 この値を手動で変更して品質設定を変更しないでください。コーデックから取得される形式を使用する必要があります。 別の品質値を使用するには、ニーズを満たす形式が見つかるまで書式を列挙する必要があります。 また、 nAvgBytesPerSec は ASF ファイルに保持されません。リーダー オブジェクトで開かれたファイルの WAVEFORMATEX 構造体を取得すると、 nAvgBytesPerSec には、1 秒あたりの平均バイト数を表す概算値が含まれます。

Note

オーディオ ストリームを構成するときに、ファイル内のビデオ ストリームの値より大きいオーディオ バッファー ウィンドウの値を設定しないでください。 通常、これは問題ではありません。オーディオ バッファー ウィンドウの値の範囲は 1.5 秒から 3 秒で、ビデオ値の範囲は 3 秒から 5 秒です。 オーディオ バッファー ウィンドウがビデオ バッファー ウィンドウよりも大きい場合、ファイルは、同期が少し外れたストリームで再生されます。

 

すべてのストリームに共通の構成

ストリームの構成

オーディオ形式を検索するには