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

IAudioProcessingObject

COM
IIDfd7f2b29-24d0-4b5c-b177-592c39f9ca10継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

System Effects Audio Processing Objects (sAPO) は、通常、リアルタイム処理スレッドで使用されるか、そこから呼び出されます。

メソッド 7

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

vtbl 3 HRESULT Reset()

Reset メソッドは、APO を元の状態にリセットします。このメソッドは、APO の入力または出力に接続されている接続オブジェクトに変更を加えません。

戻り値

Reset メソッドは、呼び出しが正常に完了すると S_OK の値を返します。

解説(Remarks)

このメソッドはリアルタイム対応ではなく、リアルタイム処理スレッドから呼び出してはなりません。このメソッドの実装は、ページ メモリに触れることはなく、また触れてはなりません。さらに、ブロッキングを伴うシステム ルーチンを呼び出してはなりません。

vtbl 4 HRESULT GetLatency(LONGLONG* pTime)

GetLatency メソッドは、この APO のレイテンシを返します。レイテンシとは、フレームが APO の処理パスを通過するのにかかる時間です。

pTimeLONGLONG*outこの APO が生じさせる遅延の単位数を受け取る MFTIME 構造体へのポインターです。遅延の各単位は 100 ナノ秒を表します。

戻り値

GetLatency は、呼び出しが成功した場合に S_OK の値を返します。それ以外の場合は、無効なポインターが関数に渡されたことを示すエラー コード E_POINTER を返します。

解説(Remarks)

この APO を呼び出しているクライアントがサンプリング レートを把握している場合、クライアントはレイテンシをフレーム数の観点で計算できます。オーディオ信号処理ストリーム全体の合計レイテンシを取得するには、クライアントは処理チェーン内のすべての APO に問い合わせ、その結果を合計する必要があります。

重要 このメソッドはリアルタイム対応ではなく、リアルタイム処理スレッドから呼び出してはなりません。
vtbl 5 HRESULT GetRegistrationProperties(APO_REG_PROPERTIES** ppRegProps)

GetRegistrationProperties は、オーディオ処理オブジェクト (APO) の登録プロパティを返します。

ppRegPropsAPO_REG_PROPERTIES**outAPO の登録プロパティです。このパラメーターは APO_REG_PROPERTIES 型です。

戻り値

GetRegistrationProperties は、呼び出しが成功した場合に S_OK の値を返します。それ以外の場合は、無効なポインターが関数に渡されたことを示すエラー コード E_POINTER を返します。

解説(Remarks)

呼び出し元は、GetRegistrationProperties が返したメモリを解放する必要があります。

注意

このメソッドは、リアルタイム処理スレッドから呼び出してはなりません。

vtbl 6 HRESULT Initialize(DWORD cbDataSize, BYTE* pbyData)

Initialize メソッドは、APO を初期化し、可変長のデータをサポートします。

cbDataSizeDWORDin初期化データのサイズ (バイト単位) です。
pbyDataBYTE*inこの APO に固有の初期化データです。

戻り値

Initialize メソッドは、呼び出しが成功した場合に S_OK の値を返します。それ以外の場合、このメソッドは次のいずれかのエラー コードを返します。

リターン コード 説明
E_POINTER
無効なポインターが関数に渡されました。
E_INVALIDARG
無効な引数です。
APOERR_ALREADY_INITIALIZED
APO は既に初期化されています。
Other HRESULTS
これらの追加のエラー条件は、オーディオ エンジンによって追跡されます。

解説(Remarks)

データを初期化する必要なく APO を初期化するためにこのメソッドを使用する場合は、pbyData パラメーターの値として NULL を、cbDataSize パラメーターの値として 0 (ゼロ) を指定してかまいません。指定するデータは可変長であり、次の形式でなければなりません。

Struct MyAPOInitializationData
{
APOInitBaseStruct APOInit;
// list additional struct members here
// ...
};
vtbl 7 HRESULT IsInputFormatSupported(IAudioMediaType* pOppositeFormat, IAudioMediaType* pRequestedInputFormat, IAudioMediaType** ppSupportedInputFormat)

このメソッドは、Windows Vista のオーディオ エンジンとネゴシエーションを行い、オーディオ データのストリームのデータ形式を確立します。

pOppositeFormatIAudioMediaType*inIAudioMediaType インターフェイスへのポインターです。このパラメーターは、データの出力形式を示すために使用されます。出力形式が任意の型でよいことを示すには、pOppositeFormat の値を NULL に設定する必要があります。
pRequestedInputFormatIAudioMediaType*inIAudioMediaType インターフェイスへのポインターです。このパラメーターは、検証する入力形式を示すために使用されます。
ppSupportedInputFormatIAudioMediaType**outこのパラメーターは、検証対象の形式に最も近いサポートされている形式を示します。

戻り値

呼び出しが正常に完了した場合、ppSupportedInputFormat パラメーターは pRequestedInputFormat ポインターを返し、IsInputFormatSupported メソッドは S_OK の値を返します。それ以外の場合、このメソッドは次のいずれかのエラー コードを返します。

リターン コード 説明
S_FALSE
入力/出力形式のペアの形式がサポートされていません。ppSupportedInputFormat は、推奨される新しい形式を返します。
APOERR_FORMAT_NOT_SUPPORTED
検証対象の形式がサポートされていません。ppSupportedInputFormat の値は変更されません。
E_POINTER
無効なポインターがメソッドに渡されました。ppSupportedInputFormat の値は変更されません。
Other HRESULT values
これらの追加のエラー条件は、オーディオ エンジンによって追跡されます。

解説(Remarks)

IsInputFormatSupported メソッドの実装は、APO ごとに違いがあります。たとえば、特定の実装では、入力形式が整数型の場合、出力は float 型のみになることがあります。

形式ネゴシエーションを開始するために、オーディオ サービスはまず LFX sAPO の出力を既定の float32 ベースの形式に設定します。次にオーディオ サービスは、LFX sAPO の IAudioProcessingObject::IsInputFormatSupported メソッドを呼び出し、既定の形式を提案し、このメソッドの HRESULT の応答を監視します。LFX sAPO の入力が提案された形式をサポートできる場合は、サポートされている形式への参照とともに S_OK を返します。LFX sAPO の入力が提案された形式をサポートできない場合は、提案された形式に最も近い形式への参照とともに S_FALSE を返します。LFX sAPO が提案された形式をサポートできず、近い形式もない場合は、APOERR_FORMAT_NOT_SUPPORTED を返します。GFX sAPO は LFX sAPO の出力形式で動作します。そのため、GFX sAPO は形式ネゴシエーションのプロセスには関与しません。

vtbl 8 HRESULT IsOutputFormatSupported(IAudioMediaType* pOppositeFormat, IAudioMediaType* pRequestedOutputFormat, IAudioMediaType** ppSupportedOutputFormat)

IsOutputFormatSupported メソッドは、特定の出力形式がサポートされていることを検証するために使用されます。

pOppositeFormatIAudioMediaType*inIAudioMediaType インターフェイスへのポインターです。このパラメーターは出力形式を示します。出力形式が任意の型でよいことを示すには、このパラメーターを NULL に設定する必要があります。
pRequestedOutputFormatIAudioMediaType*inIAudioMediaType インターフェイスへのポインターです。このパラメーターは、検証する出力形式を示します。
ppSupportedOutputFormatIAudioMediaType**outこのパラメーターは、検証対象の形式に最も近いサポートされている出力形式を示します。

戻り値

呼び出しが正常に完了した場合、ppSupportedOutputFormat パラメーターは pRequestedOutputFormat ポインターを返し、IsOutputFormatSupported メソッドは S_OK の値を返します。それ以外の場合、このメソッドは次のいずれかのエラー コードを返します。

リターン コード 説明
S_FALSE
入力/出力形式のペアの形式がサポートされていません。ppSupportedOutPutFormat パラメーターは、推奨される新しい形式を返します。
APOERR_FORMAT_NOT_SUPPORTED
形式がサポートされていません。ppSupportedOutputFormat の値は変更されません。
E_POINTER
無効なポインターが関数に渡されました。ppSupportedOutputFormat の値は変更されません。
Other HRESULT values
これらの追加のエラー条件は、オーディオ エンジンによって追跡されます。

解説(Remarks)

IsOutputFormatSupported メソッドの実装は、APO ごとに違いがあります。たとえば、特定の実装では、入力形式が整数型の場合、出力は float 型のみになることがあります。

vtbl 9 HRESULT GetInputChannelCount(DWORD* pu32ChannelCount)

GetInputChannelCount は、この APO の入力チャネル数 (フレームあたりのサンプル数) を返します。

pu32ChannelCountDWORD*out入力チャネル数です。

戻り値

GetInputChannelCount は、呼び出しが成功した場合に S_OK の値を返します。

解説(Remarks)

返される入力チャネル数は、APO の入力側を指します。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IAudioProcessingObject "{FD7F2B29-24D0-4B5C-B177-592C39F9CA10}"
#usecom global IAudioProcessingObject IID_IAudioProcessingObject "{}"
#comfunc global IAudioProcessingObject_Reset                      3
#comfunc global IAudioProcessingObject_GetLatency                 4 var
#comfunc global IAudioProcessingObject_GetRegistrationProperties  5 var
#comfunc global IAudioProcessingObject_Initialize                 6 int,var
#comfunc global IAudioProcessingObject_IsInputFormatSupported     7 sptr,sptr,sptr
#comfunc global IAudioProcessingObject_IsOutputFormatSupported    8 sptr,sptr,sptr
#comfunc global IAudioProcessingObject_GetInputChannelCount       9 var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。