IAudioSystemEffects2
COM公式ドキュメント
IAudioSystemEffects2 インターフェースは、特定のモードにおける処理オブジェクトに関する情報を取得するために Windows 8.1 で導入されました。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
GetEffectsList メソッドは、現在アクティブなオーディオ処理エフェクトの一覧を取得し、一覧が変更された場合にシグナル状態にするイベントを保存するために使用します。
| ppEffectsIds | GUID** | out | オーディオ処理エフェクトを表す GUID の一覧へのポインター。このメモリの解放は、CoTaskMemFree を呼び出して呼び出し側が行う責任があります。 |
| pcEffects | DWORD* | out | 一覧に含まれるオーディオ処理エフェクトの数。 |
| Event | HANDLE | in | 一覧が変更された場合にシグナル状態になるイベントの HANDLE。 |
戻り値
GetEffectsList メソッドは、メソッド呼び出しが成功した場合に S_OK を返します。一覧にエフェクトが 1 つもない場合でも関数は成功し、ppEffectsIds は NULL ポインターを返し、pcEffects は 0 を返します。
解説(Remarks)
APO は、オーディオ処理エフェクトの一覧が GetEffectsList によって返された一覧から変更されたときに、指定されたイベントをシグナル状態にします。APO は、GetEffectsList が再度呼び出されるか、または APO が破棄されるまで、このイベントを使用します。渡すハンドルには NULL を指定でき、その場合 APO は以前のハンドルの使用を停止し、イベントをシグナル状態にしません。
APO はこのメソッドを実装することで、APO が適用している現在のエフェクトを Windows が検出できるようにします。エフェクトの一覧は、APO が初期化した処理モードや、エンドユーザーの構成に依存する場合があります。処理モードは、APOInitSystemEffects2 の AudioProcessingMode メンバーによって示されます。
APO は、AUDIO_EFFECT_TYPE_ACOUSTIC_ECHO_CANCELLATION のような Windows によって定義された GUID を使用してエフェクトを識別する必要があります。APO がカスタム GUID を定義して返すのは、エフェクトの種類が Windows によって定義されたものと明らかに異なるまれなケースに限るべきです。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IAudioSystemEffects2 "{BAFE99D2-7436-44CE-9E0E-4D89AFBFFF56}" #usecom global IAudioSystemEffects2 IID_IAudioSystemEffects2 "{}" #comfunc global IAudioSystemEffects2_GetEffectsList 3 var,var,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IAudioSystemEffects2 "{BAFE99D2-7436-44CE-9E0E-4D89AFBFFF56}" #usecom global IAudioSystemEffects2 IID_IAudioSystemEffects2 "{}" #comfunc global IAudioSystemEffects2_GetEffectsList 3 sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。