IAudioInputEndpointRT
COM公式ドキュメント
各処理パスの入力バッファーを取得します。
解説(Remarks)
IAudioInputEndpointRT のメソッドはリアルタイム処理スレッドから呼び出すことができます。このインターフェイスのメソッドの実装は、ブロックしたり、ページ メモリにアクセスしたり、ブロックする可能性のあるシステム ルーチンを呼び出したりしてはなりません。
リモート デスクトップ サービス AudioEndpoint API はリモート デスクトップのシナリオで使用するためのものであり、クライアント アプリケーション向けではありません。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
オーディオ エンジンがデータを読み取るバッファーへのポインターを取得します。
| pConnectionProperty | APO_CONNECTION_PROPERTY* | inout | APO_CONNECTION_PROPERTY 構造体へのポインター。 呼び出し元は次のようにメンバー値を設定します。
|
| pAeTimeStamp | AE_CURRENT_POSITION* | inout | バッファーにキャプチャされたデータのタイム スタンプを含む AE_CURRENT_POSITION 構造体へのポインター。このパラメーターは省略可能です。 |
解説(Remarks)
このメソッドは、エンジンへの入力として渡す必要のあるデータを含むバッファー pConnectionProperty->pBuffer へのポインターをエンドポイントから返します。データおよびバッファー ポインターは、IAudioInputEndpointRT::ReleaseInputDataPointer メソッドが呼び出されるまで有効な状態を維持しなければなりません。エンドポイント オブジェクトは、要求された量の情報を設定し、有効なデータが存在しない場合は無音を挿入しなければなりません。エンドポイント オブジェクトが返すバッファー ポインター pConnectionProperty->pBuffer は、フレーム アラインされている必要があります。エンドポイントは、pConnectionProperty パラメーターで渡される接続プロパティに関連付けられた APO_CONNECTION_PROPERTY で利用可能となる場合がある追加の領域をサポートしません。
u32ValidFrameCount メンバーにゼロを渡すことは有効な要求です。この場合、入力ポインターは有効でなければなりませんが、エンドポイントはそこから読み取りを行いません。pConnectionProperty->u32ValidFrameCount の値は、エンドポイントがサポートする最大フレーム数以下でなければなりません。サポートされるフレーム数を取得するには、IAudioEndpoint::GetFramesPerPacket メソッドを呼び出します。
このメソッドはリアルタイム処理スレッドから呼び出すことができます。このメソッドの実装は、ブロックしたり、ページ メモリにアクセスしたり、ブロックする可能性のあるシステム ルーチンを呼び出したりしてはなりません。
リモート デスクトップ サービス AudioEndpoint API はリモート デスクトップのシナリオで使用するためのものであり、クライアント アプリケーション向けではありません。
取得したデータ ポインターを解放します。
| u32FrameCount | DWORD | in | オーディオ エンジンによって消費されたフレーム数。この数は、IAudioInputEndpointRT::GetInputDataPointer メソッドが pConnectionProperty->u32ValidFrameCount メンバーで返した値と同じでない場合があります。 |
| pDataPointer | UINT_PTR | in | GetInputDataPointer メソッドによって取得され、pConnectionProperty->pBuffer メンバーで受け取ったバッファーへのポインター。 |
解説(Remarks)
ReleaseInputDataPointer は、オーディオ エンジンが入力データ ポインターを必要としなくなったことをエンドポイントに通知するとともに、セッション中に使用されたフレーム数を示します。たとえば、ループ バッファーを表すエンドポイントがオーディオ エンジンの入力に接続されている場合、実際のフレーム数を使用して読み取りポインターを進めることができます。u32FrameCount がゼロの場合、これはクライアントが指定された入力バッファーのデータをまったく使用しなかったことを示します。u32FrameCount は、エンドポイントがサポートする最大フレーム数以下でなければなりません。サポートされるフレーム数を取得するには、オーディオ エンジンが IAudioEndpoint::GetFramesPerPacket メソッドを呼び出します。
このメソッドはリアルタイム処理スレッドから呼び出すことができます。このメソッドの実装は、ブロックしたり、ページ メモリにアクセスしたり、ブロックする可能性のあるシステム ルーチンを呼び出したりしてはなりません。
リモート デスクトップ サービス AudioEndpoint API はリモート デスクトップのシナリオで使用するためのものであり、クライアント アプリケーション向けではありません。
予約されています。(IAudioInputEndpointRT.PulseEndpoint)
解説(Remarks)
このメソッドはリアルタイム処理スレッドから呼び出すことができます。このメソッドの実装は、ブロックしたり、ページ メモリにアクセスしたり、ブロックする可能性のあるシステム ルーチンを呼び出したりしてはなりません。
リモート デスクトップ サービス AudioEndpoint API はリモート デスクトップのシナリオで使用するためのものであり、クライアント アプリケーション向けではありません。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IAudioInputEndpointRT "{8026AB61-92B2-43C1-A1DF-5C37EBD08D82}" #usecom global IAudioInputEndpointRT IID_IAudioInputEndpointRT "{}" #comfunc global IAudioInputEndpointRT_GetInputDataPointer 3 var,var #comfunc global IAudioInputEndpointRT_ReleaseInputDataPointer 4 int,sptr #comfunc global IAudioInputEndpointRT_PulseEndpoint 5 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IAudioInputEndpointRT "{8026AB61-92B2-43C1-A1DF-5C37EBD08D82}" #usecom global IAudioInputEndpointRT IID_IAudioInputEndpointRT "{}" #comfunc global IAudioInputEndpointRT_GetInputDataPointer 3 sptr,sptr #comfunc global IAudioInputEndpointRT_ReleaseInputDataPointer 4 int,sptr #comfunc global IAudioInputEndpointRT_PulseEndpoint 5 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。