IAudioSystemEffectsCustomFormats
COM公式ドキュメント
IAudioSystemEffectsCustomFormats インターフェイスは、Windows Vista 以降のバージョンの Windows でサポートされます。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
GetFormatCount メソッドは、システムエフェクトオーディオ処理オブジェクト (sAPO) がサポートするカスタムフォーマットの数を取得します。
| pcFormats | DWORD* | out | 符号なし整数へのポインターを指定します。この符号なし整数は、sAPO がサポートするフォーマットの数を表します。 |
戻り値
解説(Remarks)
sAPO の詳細については、System Effects Audio Processing Objects を参照してください。
GetFormat メソッドは、カスタムフォーマットの IAudioMediaType 表現を取得します。
| nFormat | DWORD | in | サポートされるフォーマットのインデックスを指定します。このパラメーターには、0 から GetFormatCount の戻り値より 1 小さい値までの範囲の任意の値を指定できます。つまり、0 から GetFormatCount( ) - 1 までの範囲の任意の値です。 |
| ppFormat | IAudioMediaType** | out | IAudioMediaType インターフェイスへのポインターへのポインターを指定します。ppFormat パラメーターが指す IAudioMediaType インターフェイスを解放するのは、呼び出し元の責任です。 |
戻り値
GetFormat メソッドは、呼び出しが成功すると S_OK を返します。それ以外の場合は、次の表に示すエラーコードのいずれかを返します。
| リターンコード | 説明 |
|---|---|
| 無効なポインターが関数に渡されました | |
| リターンバッファーを割り当てられません | |
| nFormat が範囲外です |
解説(Remarks)
オーディオシステムが GetFormat メソッドを呼び出すと、sAPO はオーディオメディアタイプオブジェクトを作成し、IAudioMediaType インターフェイスを返します。sAPO の実装では、CreateAudioMediaType ユーティリティ関数を使用してオーディオメディアタイプオブジェクトを作成できます。
GetFormatRepresentation メソッドは、カスタムフォーマットの文字列表現を取得し、ユーザーインターフェイスに表示できるようにします。
| nFormat | DWORD | in | サポートされるフォーマットのインデックスを指定します。このパラメーターには、0 から GetFormatCount の戻り値より 1 小さい値までの範囲の任意の値を指定できます。つまり、0 から GetFormatCount( ) - 1 までの範囲の任意の値です。 |
| ppwstrFormatRep | LPWSTR* | out | カスタムフォーマットを記述する NULL 終端の Unicode 文字列を受け取るバッファーのアドレスを指定します。 |
戻り値
GetFormatRepresentation メソッドは、呼び出しが成功すると S_OK を返します。それ以外の場合は、次の表に示すエラーコードのいずれかを返します。
| リターンコード | 説明 |
|---|---|
| 無効なポインターが関数に渡されました | |
| リターンバッファーを割り当てられません | |
| nFormat が範囲外です |
解説(Remarks)
sAPO は CoTaskMemAlloc を使用して、返される文字列を割り当てます。呼び出し元は、CoTaskMemFree を使用して、ppwstrFormatRep パラメーターが指すバッファーを削除する必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IAudioSystemEffectsCustomFormats "{B1176E34-BB7F-4F05-BEBD-1B18A534E097}" #usecom global IAudioSystemEffectsCustomFormats IID_IAudioSystemEffectsCustomFormats "{}" #comfunc global IAudioSystemEffectsCustomFormats_GetFormatCount 3 var #comfunc global IAudioSystemEffectsCustomFormats_GetFormat 4 int,sptr #comfunc global IAudioSystemEffectsCustomFormats_GetFormatRepresentation 5 int,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IAudioSystemEffectsCustomFormats "{B1176E34-BB7F-4F05-BEBD-1B18A534E097}" #usecom global IAudioSystemEffectsCustomFormats IID_IAudioSystemEffectsCustomFormats "{}" #comfunc global IAudioSystemEffectsCustomFormats_GetFormatCount 3 sptr #comfunc global IAudioSystemEffectsCustomFormats_GetFormat 4 int,sptr #comfunc global IAudioSystemEffectsCustomFormats_GetFormatRepresentation 5 int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。