Win32 API 日本語リファレンス
ホームMedia.Audio.Apo › IAudioSystemEffects2

IAudioSystemEffects2

COM
IIDbafe99d2-7436-44ce-9e0e-4d89afbfff56継承元IAudioSystemEffects自前メソッド開始 vtbl3

公式ドキュメント

IAudioSystemEffects2 インターフェースは、特定のモードにおける処理オブジェクトに関する情報を取得するために Windows 8.1 で導入されました。

メソッド 1

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT GetEffectsList(GUID** ppEffectsIds, DWORD* pcEffects, HANDLE Event)

GetEffectsList メソッドは、現在アクティブなオーディオ処理エフェクトの一覧を取得し、一覧が変更された場合にシグナル状態にするイベントを保存するために使用します。

ppEffectsIdsGUID**outオーディオ処理エフェクトを表す GUID の一覧へのポインター。このメモリの解放は、CoTaskMemFree を呼び出して呼び出し側が行う責任があります。
pcEffectsDWORD*out一覧に含まれるオーディオ処理エフェクトの数。
EventHANDLEin一覧が変更された場合にシグナル状態になるイベントの HANDLE。

戻り値

GetEffectsList メソッドは、メソッド呼び出しが成功した場合に S_OK を返します。一覧にエフェクトが 1 つもない場合でも関数は成功し、ppEffectsIds は NULL ポインターを返し、pcEffects は 0 を返します。

解説(Remarks)

APO は、オーディオ処理エフェクトの一覧が GetEffectsList によって返された一覧から変更されたときに、指定されたイベントをシグナル状態にします。APO は、GetEffectsList が再度呼び出されるか、または APO が破棄されるまで、このイベントを使用します。渡すハンドルには NULL を指定でき、その場合 APO は以前のハンドルの使用を停止し、イベントをシグナル状態にしません。

APO はこのメソッドを実装することで、APO が適用している現在のエフェクトを Windows が検出できるようにします。エフェクトの一覧は、APO が初期化した処理モードや、エンドユーザーの構成に依存する場合があります。処理モードは、APOInitSystemEffects2AudioProcessingMode メンバーによって示されます。

APO は、AUDIO_EFFECT_TYPE_ACOUSTIC_ECHO_CANCELLATION のような Windows によって定義された GUID を使用してエフェクトを識別する必要があります。APO がカスタム GUID を定義して返すのは、エフェクトの種類が Windows によって定義されたものと明らかに異なるまれなケースに限るべきです。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 指定が可能。