次の方法で共有


フォーマット ネゴシエーション

アプリケーションがオーディオ処理を開始すると、グラフ ビルダーは sAPOs をオーディオ グラフに構成し、sAPO も初期化します。 その後、オーディオ サービスは LFX sAPO とネゴシエートして、sAPO の入力と出力でのオーディオ データの形式を確立します。 このネゴシエーション プロセスはフォーマット ネゴシエーションと呼ばれます。

Windows Vista のオーディオ システム効果を提供するすべての sAPO には、特定のインターフェイスとメソッドが必要です。 データ形式をネゴシエートするために sAPO とオーディオ エンジンによって使用されるメソッドは、IAudioProcessingObject インターフェイスの IsInputFormatSupported メソッドと、IAudioProcessingObjectConfiguration インターフェイスの LockForProcess メソッドと UnlockForProcess メソッドです。

フォーマット ネゴシエーションを開始するために、オーディオ サービスは最初に LFX sAPO の出力を既定の float32 ベースの形式に設定します。 その後、オーディオ サービスは、LFX sAPO の IAudioProcessingObject::IsInputFormatSupported メソッドを呼び出し、既定の形式を提案し、このメソッドの HRESULT 応答を監視します。 LFX sAPO が推奨形式をサポートできる場合は、サポートされている形式への参照と共にS_OKを返します。 LFX sAPO が推奨形式をサポートできない場合は、提案された形式に最も近い形式への参照と共にS_FALSEが返されます。 LFX sAPO が推奨形式をサポートできず、一致するものがない場合は、APOERR_FORMAT_NOT_SUPPORTEDが返されます。 GFX sAPO は、LFX sAPO の出力形式で動作します。 そのため、GFX sAPO はフォーマット ネゴシエーション プロセスに関与しません。

オーディオ データを処理するためにデータ形式を選択した後、オーディオ処理グラフ ビルダーは sAPOs の IAudioProcessingObjectConfiguration::LockForProcess メソッドを呼び出して、形式の選択を終了します。

Windows Vista sAPO が LockForProcess メソッドの呼び出しに応答してカスタム sAPO の折り返しにエラーを返す場合、カスタム sAPO は、sAPO のインスタンス化が失敗したときに CoCreateInstance からのエラーを処理するのと同じ方法でエラーを処理する必要があります。 システム提供の LockForProcess メソッドを上書きする方法の詳細については、Spkrfill.cpp ファイルを参照してください。

オーディオ サービスの動作方法により、LFX と GFX の sAPO は、データ形式に関するオーディオ サービスからのクエリに対して互いに独立して応答できる必要があります。

大事な Windows Vista LFX sAPO をラップするカスタム sAPO を実装する場合は、カスタム sAPO の登録プロパティに APO_FLAG_FRAMESPERSECOND_MUST_MATCH フラグを指定しないでください。 このフラグを指定すると、Windows Vista LFX sAPO はスピーカーフィル、ヘッドフォン仮想化、または仮想サラウンドを実行できなくなります。 さらに、カスタム sAPO ではオーディオ ストリームをダウンミックスできません。 たとえば、カスタム sAPO では、5.1 オーディオ ストリームを 2 チャンネルのステレオ オーディオ ストリームにミックスダウンすることはできません。