IApoAcousticEchoCancellation
COM公式ドキュメント
このインターフェイスは、音響エコーキャンセル (AEC) のシナリオを可能にするために APO によって実装されます。
解説(Remarks)
このインターフェイスは、キャプチャエンドポイント上のモードエフェクト (MFX) のみが実装できます。これ以外の APO でこのインターフェイスを実装すると、その APO の読み込みに失敗します。キャプチャエンドポイント上のモードエフェクトが複数の APO を連結した形で実装されている場合、このインターフェイスを実装できるのはデバイスに最も近い APO のみです。
IApoAcousticEchoCancellation インターフェイスには明示的なメソッドはありません。その目的は、AEC APO をオーディオエンジンに識別させることです。このインターフェイスを実装する APO は、IAudioProcessingObjectRT::APOProcess の呼び出し時に APO_CONNECTION_PROPERTY_V2 構造体を渡されます。APO_CONNECTION_PROPERTY_V2 はタイムスタンプを提供し、APO がプライマリストリームと補助ストリームのバッファを同期できるようにします。IAudioProcessingObjectRT::APOProcess に渡された APO_CONNECTION_PROPERTY 構造体の u32Signature フィールドが APO_CONNECTION_PROPERTY_V2_SIGNATURE と等しい場合、この構造体は安全に APO_CONNECTION_PROPERTY_V2 へ型変換できます。
AEC アルゴリズムは通常、特定のサンプリングレートとチャネル数を必要とするため、オーディオエンジンは IApoAcousticEchoCancellation インターフェイスを実装する APO に対してリサンプリングのサポートを提供します。IApoAuxiliaryInputConfiguration::IsInputFormatSupported メソッドは、HRESULT APOERR_FORMAT_NOT_SUPPORTED を返し、要求された形式をメソッドの ppSupportedInputFormat パラメーターで返すことによって、APO が優先する入力形式をシステムに通知する仕組みを提供します。するとオーディオエンジンは、入力オーディオを AEC APO に送信する前に、提示された形式へリサンプリングします。これにより、AEC APO 側でサンプリングレートやチャネル数の変換を実装する必要がなくなります。
メソッド 0
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IApoAcousticEchoCancellation "{25385759-3236-4101-A943-25693DFB5D2D}"
#usecom global IApoAcousticEchoCancellation IID_IApoAcousticEchoCancellation "{}"
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。