形式に関するネゴシエーション
アプリケーションがオーディオ処理を開始すると、グラフ ビルダーは 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_FAL Standard Edition が返されます。 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 チャンネルのステレオ オーディオ ストリームにミキシングすることはできません。