ISpatialAudioObjectRenderStreamBase
COM公式ドキュメント
空間オーディオオブジェクトのレンダーストリームを制御するためのメソッド(ストリームの開始、停止、リセットを含む)を提供する基底インターフェイスです。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
現在利用可能な動的空間オーディオオブジェクトの数を取得します。
| value | DWORD* | out | 現在利用可能な動的空間オーディオオブジェクトの数。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合、返される可能性のあるコードには次の表に示す値が含まれますが、これらに限定されません。
| 戻り値 | 説明 | ||
|---|---|---|---|
| 空間オーディオストリームに関連付けられた ISpatialAudioClient は破棄されています。 | |||
| 空間オーディオストリームに関連付けられたオーディオデバイスは、もはや有効ではありません。 | |||
| オーディオエンドポイントデバイスが取り外されたか、オーディオハードウェアまたは関連するハードウェアリソースが再構成、無効化、削除、その他の理由で使用できなくなっています。 | |||
| 内部エラーが発生しました。 | |||
| 空間オーディオストリームに関連付けられたメディアが、サポートされていない形式を使用しています。 |
| riid | GUID* | in | 要求するサービスのインターフェイス ID。クライアントはこのパラメーターに次の REFIID 値のいずれかを設定してください。 IID_IAudioClock IID_IAudioClock2 IID_IAudioStreamVolume |
| service | void** | out | 要求したインターフェイスのインスタンスのアドレスをメソッドが書き込むポインター変数へのポインター。このメソッドを通じて、呼び出し元はインターフェイスへの参照カウント付き参照を取得します。呼び出し元は、インターフェイスが不要になった際に、そのインターフェイスの Release メソッドを呼び出して解放する責任があります。GetService の呼び出しが失敗した場合、*ppv は NULL になります。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合、返される可能性のあるコードには次の表に示す値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| パラメーター ppv が NULL です。 | |
| 空間オーディオストリームに関連付けられた ISpatialAudioClient は破棄されています。 | |
| オーディオエンドポイントデバイスが取り外されたか、オーディオハードウェアまたは関連するハードウェアリソースが再構成、無効化、削除、その他の理由で使用できなくなっています。 | |
| 内部エラーが発生しました。 | |
| 空間オーディオストリームに関連付けられたメディアが、サポートされていない形式を使用しています。 |
解説(Remarks)
GetService メソッドは次のサービスインターフェイスをサポートします。
空間オーディオストリームを開始します。
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合、返される可能性のあるコードには次の表に示す値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| オーディオストリームが停止されていません。Stop を呼び出してストリームを停止してください。 | |
| 空間オーディオストリームに関連付けられた ISpatialAudioClient は破棄されています。 | |
| オーディオエンドポイントデバイスが取り外されたか、オーディオハードウェアまたは関連するハードウェアリソースが再構成、無効化、削除、その他の理由で使用できなくなっています。 | |
| 内部エラーが発生しました。 | |
| 空間オーディオストリームに関連付けられたメディアが、サポートされていない形式を使用しています。 |
解説(Remarks)
ストリームを開始すると、エンドポイントバッファーとオーディオエンジンの間でデータフローが発生します。
このメソッドが初めて呼び出されたときは、ストリームのオーディオクロック位置は 0 になります。
それ以外の場合、クロックは Stop の呼び出しによってストリームが最後に一時停止された時点の位置から再開します。
クロック位置を 0 にリセットし、アクティブなすべての ISpatialAudioObject インスタンスを取り消すには、Reset を呼び出してください。
ストリームは事前に Stop の呼び出しによって停止されている必要があります。そうでない場合、このメソッドは失敗し、SPTLAUDCLNT_E_STREAM_NOT_STOPPED を返します。
実行中のオーディオストリームを停止します。
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合、返される可能性のあるコードには次の表に示す値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| 空間オーディオストリームに関連付けられた ISpatialAudioClient は破棄されています。 | |
| オーディオエンドポイントデバイスが取り外されたか、オーディオハードウェアまたは関連するハードウェアリソースが再構成、無効化、削除、その他の理由で使用できなくなっています。 | |
| 内部エラーが発生しました。 | |
| 空間オーディオストリームに関連付けられたメディアが、サポートされていない形式を使用しています。 |
解説(Remarks)
ストリームを停止すると、エンドポイントバッファーとオーディオエンジンの間のデータフローが停止します。
この操作はストリームの一時停止と見なすことができます。ストリームのオーディオクロックを現在のストリーム位置に残し、0 にリセットしないためです。その後 Start を呼び出すと、ストリームは現在の位置から実行を再開します。
クロック位置を 0 にリセットし、アクティブなすべての ISpatialAudioObject インスタンスを取り消すには、Reset を呼び出してください。
停止したオーディオストリームをリセットします。
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合、返される可能性のあるコードには次の表に示す値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| オーディオストリームが停止されていません。Stop を呼び出してストリームを停止してください。 | |
| 空間オーディオストリームに関連付けられた ISpatialAudioClient は破棄されています。 | |
| オーディオエンドポイントデバイスが取り外されたか、オーディオハードウェアまたは関連するハードウェアリソースが再構成、無効化、削除、その他の理由で使用できなくなっています。 | |
| 内部エラーが発生しました。 | |
| 空間オーディオストリームに関連付けられたメディアが、サポートされていない形式を使用しています。 |
解説(Remarks)
オーディオストリームをリセットすると、保留中のすべてのデータがフラッシュされ、オーディオクロックのストリーム位置が 0 にリセットされます。ストリームをリセットすると、アクティブなすべての ISpatialAudioObject インスタンスも取り消されます。
その後 Start を呼び出すと、ストリームは 0 の位置から開始します。
ストリームは事前に Stop の呼び出しによって停止されている必要があります。そうでない場合、このメソッドは失敗し、SPTLAUDCLNT_E_STREAM_NOT_STOPPED を返します。
オーディオオブジェクトデータを処理のために送信でき、ISpatialAudioObject の状態を変更できる状態にシステムを移行させます。
| availableDynamicObjectCount | DWORD* | out | 現在の処理パスでレンダリングに利用可能な動的オーディオオブジェクトの数。割り当てられたすべての静的オーディオオブジェクトは各パスでレンダリングできます。オーディオオブジェクトの種類については、AudioObjectType を参照してください。 |
| frameCountPerBuffer | DWORD* | out | GetBuffer によって返されるバッファーのサイズ(オーディオフレーム単位)。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合、返される可能性のあるコードには次の表に示す値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| 2 回の呼び出しの間に対応する EndUpdatingAudioObjects の呼び出しがないまま、BeginUpdatingAudioObjects が 2 回呼び出されました。 | |
| 空間オーディオストリームに関連付けられた ISpatialAudioClient は破棄されています。 | |
| オーディオエンドポイントデバイスが取り外されたか、オーディオハードウェアまたは関連するハードウェアリソースが再構成、無効化、削除、その他の理由で使用できなくなっています。 | |
| 空間オーディオストリームに関連付けられたリソースは、もはや有効ではありません。 | |
| 内部エラーが発生しました。 | |
| 空間オーディオストリームに関連付けられたメディアが、サポートされていない形式を使用しています。 |
解説(Remarks)
このメソッドは、ISpatialAudioClient::ActivateSpatialAudioStream に SpatialAudioObjectRenderStreamActivationParams で渡されたイベントがシグナル状態になるたびに、送信するオーディオオブジェクトデータがない場合でも呼び出す必要があります。
各 BeginUpdatingAudioObjects の呼び出しには、対応する EndUpdatingAudioObjects の呼び出しが必要です。
BeginUpdatingAudioObjects が EndUpdatingAudioObjects の呼び出しを間に挟まずに 2 回呼び出された場合、2 回目の BeginUpdatingAudioObjects の呼び出しは SPTLAUDCLNT_E_OUT_OF_ORDER を返します。
ActivateSpatialAudioObject でアクティブ化された空間オーディオオブジェクトへのオーディオデータの供給がアプリで完了したことをシステムに通知します。
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合、返される可能性のあるコードには次の表に示す値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| EndUpdatingAudioObjects が BeginUpdatingAudioObjects より前に呼び出されました。 | |
| 空間オーディオストリームに関連付けられた ISpatialAudioClient は破棄されています。 | |
| オーディオエンドポイントデバイスが取り外されたか、オーディオハードウェアまたは関連するハードウェアリソースが再構成、無効化、削除、その他の理由で使用できなくなっています。 | |
| 空間オーディオストリームに関連付けられたリソースは、もはや有効ではありません。 | |
| 内部エラーが発生しました。 | |
| 空間オーディオストリームに関連付けられたメディアが、サポートされていない形式を使用しています。 |
解説(Remarks)
ISpatialAudioObjectBase::GetBuffer で取得したポインターは、このメソッドが呼び出された後は使用できなくなります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ISpatialAudioObjectRenderStreamBase "{FEAAF403-C1D8-450D-AA05-E0CCEE7502A8}" #usecom global ISpatialAudioObjectRenderStreamBase IID_ISpatialAudioObjectRenderStreamBase "{}" #comfunc global ISpatialAudioObjectRenderStreamBase_GetAvailableDynamicObjectCount 3 var #comfunc global ISpatialAudioObjectRenderStreamBase_GetService 4 var,sptr #comfunc global ISpatialAudioObjectRenderStreamBase_Start 5 #comfunc global ISpatialAudioObjectRenderStreamBase_Stop 6 #comfunc global ISpatialAudioObjectRenderStreamBase_Reset 7 #comfunc global ISpatialAudioObjectRenderStreamBase_BeginUpdatingAudioObjects 8 var,var #comfunc global ISpatialAudioObjectRenderStreamBase_EndUpdatingAudioObjects 9 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ISpatialAudioObjectRenderStreamBase "{FEAAF403-C1D8-450D-AA05-E0CCEE7502A8}" #usecom global ISpatialAudioObjectRenderStreamBase IID_ISpatialAudioObjectRenderStreamBase "{}" #comfunc global ISpatialAudioObjectRenderStreamBase_GetAvailableDynamicObjectCount 3 sptr #comfunc global ISpatialAudioObjectRenderStreamBase_GetService 4 sptr,sptr #comfunc global ISpatialAudioObjectRenderStreamBase_Start 5 #comfunc global ISpatialAudioObjectRenderStreamBase_Stop 6 #comfunc global ISpatialAudioObjectRenderStreamBase_Reset 7 #comfunc global ISpatialAudioObjectRenderStreamBase_BeginUpdatingAudioObjects 8 sptr,sptr #comfunc global ISpatialAudioObjectRenderStreamBase_EndUpdatingAudioObjects 9 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。