IAudioDeviceEndpoint
COM公式ドキュメント
デバイスエンドポイントオブジェクトを初期化し、それが表すデバイスの機能を取得します。
解説(Remarks)
リモートデスクトップサービスの AudioEndpoint API はリモートデスクトップのシナリオで使用するためのものであり、クライアントアプリケーション向けではありません。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
エンドポイントを初期化し、オーディオデータのストリーミング先となるバッファーをエンドポイントの形式に基づいて作成します。
| MaxPeriod | LONGLONG | in | オーディオエンドポイントの処理時間( 100 ナノ秒単位)。 |
| u32LatencyCoefficient | DWORD | in | オーディオデバイスのレイテンシ係数。この値はレイテンシの計算に使用されます。レイテンシ = u32LatencyCoefficient * MaxPeriod となります。 注意 エンドポイントが表すデバイスには最小レイテンシ
値があります。このパラメーターの値がデバイスの最小レイテンシより小さい場合やゼロの場合、
エンドポイントオブジェクトは最小レイテンシを適用します。オーディオエンジンは IAudioEndpoint::GetLatency メソッドを呼び出すことで、エンドポイントの
実際のレイテンシを取得できます。
|
戻り値
メソッドが成功した場合は S_OK を返します。
失敗した場合、返される可能性のあるコードには次のものが含まれますが、これらに限定されません。
解説(Remarks)
リモートデスクトップサービスの AudioEndpoint API はリモートデスクトップのシナリオで使用するためのものであり、クライアントアプリケーション向けではありません。
オーディオデバイスがリアルタイム (RT) 対応かどうかを照会します。このメソッドは IAudioDeviceEndpoint のリモートデスクトップサービス実装では使用されません。
| pbIsRTCapable | BOOL* | out | オーディオデバイスが RT 対応の場合は TRUE を、そうでない場合は FALSE を受け取ります。リモートデスクトップサービスの実装では常に FALSE を返す必要があります。 |
戻り値
メソッドが成功した場合は S_OK を返します。
解説(Remarks)
リモートデスクトップサービスの AudioEndpoint API はリモートデスクトップのシナリオで使用するためのものであり、クライアントアプリケーション向けではありません。
デバイスエンドポイントがイベント駆動かどうかを示します。デバイスエンドポイントは、バッファーの利用可能性を通知するイベントを設定することで、オーディオエンジンの周期を制御します。
| pbisEventCapable | BOOL* | out | 値が TRUE の場合、デバイスエンドポイントがイベント駆動であることを示します。値が FALSE の場合、イベント駆動ではないことを示します。エンドポイントデバイスがイベント駆動の場合、オーディオエンジンはオーディオデバイスエンドポイントからイベントを受け取ることができます。 |
戻り値
メソッドが成功した場合は S_OK を返します。
解説(Remarks)
デバイスエンドポイントを初期化してバッファーを作成する IAudioDeviceEndpoint::SetBuffer メソッドを呼び出す前に、GetEventDrivenCapable メソッドを呼び出してください。これにより、デバイスエンドポイントはイベント駆動に必要な構造をセットアップできます。
オーディオエンジンがイベント駆動のデバイスエンドポイントを必要とする場合、次を行います。
- IAudioEndpoint::SetEventHandle メソッドを呼び出してイベントを作成し、デバイスエンドポイントにイベントハンドルを設定します。
- IAudioEndpoint::SetStreamFlags メソッドを呼び出してデバイスエンドポイントに AUDCLNT_STREAMFLAGS_EVENTCALLBACK フラグを設定し、イベント駆動モードを指定します。
排他モードのパラメーターを作成し、共有メモリに書き込みます。
| hTargetProcess | UINT_PTR | in | ハンドルの複製先となるプロセスの ハンドル。 |
| hnsPeriod | LONGLONG | in | デバイスの周期(100 ナノ秒単位)。この値は、エンドポイントが表すデバイスの 最小周期と最大周期の範囲内でなければなりません。 |
| hnsBufferDuration | LONGLONG | in | クライアントが要求するバッファーの継続時間(100 ナノ秒単位)。 |
| u32LatencyCoefficient | DWORD | in | オーディオエンドポイントのレイテンシ係数。クライアントは IAudioEndpoint::GetLatency メソッドを呼び出すことで、エンドポイントの実際のレイテンシを取得できます。 |
| pu32SharedMemorySize | DWORD* | out | サービスとプロセスで共有されるメモリ領域のサイズを受け取ります。 |
| phSharedMemory | UINT_PTR* | out | サービスとプロセスで共有されるメモリ領域へのハンドルを受け取ります。 |
戻り値
メソッドが成功した場合は S_OK を返します。
解説(Remarks)
このメソッドは、排他モードで使用するために、エンドポイントのオーディオサービスのハンドルとパラメーターをクライアント プロセスに提供するために使用されます。エンドポイントオブジェクトが IAudioDeviceEndpoint::SetBuffer メソッドの呼び出しによって完全に初期化されている場合、このメソッドは失敗します。
リモートデスクトップサービスの AudioEndpoint API はリモートデスクトップのシナリオで使用するためのものであり、クライアント アプリケーション向けではありません。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IAudioDeviceEndpoint "{D4952F5A-A0B2-4CC4-8B82-9358488DD8AC}" #usecom global IAudioDeviceEndpoint IID_IAudioDeviceEndpoint "{}" #comfunc global IAudioDeviceEndpoint_SetBuffer 3 int64,int #comfunc global IAudioDeviceEndpoint_GetRTCaps 4 var #comfunc global IAudioDeviceEndpoint_GetEventDrivenCapable 5 var #comfunc global IAudioDeviceEndpoint_WriteExclusiveModeParametersToSharedMemory 6 sptr,int64,int64,int,var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IAudioDeviceEndpoint "{D4952F5A-A0B2-4CC4-8B82-9358488DD8AC}" #usecom global IAudioDeviceEndpoint IID_IAudioDeviceEndpoint "{}" #comfunc global IAudioDeviceEndpoint_SetBuffer 3 int64,int #comfunc global IAudioDeviceEndpoint_GetRTCaps 4 sptr #comfunc global IAudioDeviceEndpoint_GetEventDrivenCapable 5 sptr #comfunc global IAudioDeviceEndpoint_WriteExclusiveModeParametersToSharedMemory 6 sptr,int64,int64,int,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。