IAudioClient::GetDevicePeriod メソッド (audioclient.h)
GetDevicePeriod メソッドは、エンドポイント バッファー内のデータに対するオーディオ エンジンによって連続する処理パスを分離する定期的な間隔の長さを取得します。
構文
HRESULT GetDevicePeriod(
[out] REFERENCE_TIME *phnsDefaultDevicePeriod,
[out] REFERENCE_TIME *phnsMinimumDevicePeriod
);
パラメーター
[out] phnsDefaultDevicePeriod
メソッド がオーディオ エンジンによって定期的な処理パスの既定の間隔を指定する時間値を書き込むREFERENCE_TIME変数へのポインター。 時間は 100 ナノ秒単位で表されます。 REFERENCE_TIMEの詳細については、Windows SDK のドキュメントを参照してください。
[out] phnsMinimumDevicePeriod
メソッド がオーディオ エンドポイント デバイスによって定期的な処理パスの最小間隔を指定する時間値を書き込むREFERENCE_TIME変数へのポインター。 時間は 100 ナノ秒単位で表されます。
戻り値
メソッドが成功した場合は、S_OK を返します。 エラーが発生した場合、次の表に示す値が、可能なリターン コードに含まれますが、これらに限定されません。
リターン コード | 説明 |
---|---|
|
オーディオ エンドポイント デバイスが取り外されているか、オーディオ ハードウェアまたは関連するハードウェア リソースが再構成、無効、削除、またはその他の方法で使用できなくなります。 |
|
Windows オーディオ サービスが実行されていません。 |
|
パラメーター phnsDefaultDevicePeriod と phnsMinimumDevicePeriod はどちらも NULL です。 |
注釈
クライアントは、 IAudioClient::Initialize メソッドを呼び出す前に、このメソッドを呼び出すことができます。
phnsDefaultDevicePeriod パラメーターは、共有モード ストリームの既定のスケジュール期間を指定します。 phnsMinimumDevicePeriod パラメーターは、排他モード ストリームの最小スケジュール期間を指定します。
phnsDefaultDevicePeriod と phnsMinimumDevicePeriod の 2 つのパラメーターのうち少なくとも 1 つは NULL 以外である必要があります。または、エラー コードをE_POINTERしてメソッドが直ちに返されます。 両方のパラメーターが NULL 以外の場合、メソッドは既定と最小の両方の期間を出力します。
共有モード ストリームの場合、オーディオ エンジンはエンドポイント バッファー内のデータを定期的に処理します。このデータは、エンジンがクライアント アプリケーションと共有します。 エンジンは、これらの処理パスを一定の間隔で実行するようにスケジュールします。
オーディオ エンジンによる処理パスの間隔は、特定のオーディオ エンドポイント デバイスに対して固定され、オーディオ エンジンの最小の処理量子を表します。 この期間に加えて、バッファーとエンドポイント デバイスの間のストリーム待機時間は、オーディオ アプリケーションで実現できる最小待機時間を表します。
クライアントには、オーディオ エンジンと同時に実行するように定期的な処理スレッドをスケジュールするオプションがあります。 このようにして、クライアントは共有モード ストリームに対して可能な限り最小の待機時間を実現できます。 ただし、待機時間の重要度が低いアプリケーションでは、クライアントは、処理パスの発生頻度を低くするようにスケジュールすることで、CPU のプロセス切り替えオーバーヘッドを削減できます。 この場合、処理パス間の長い期間を補うために、エンドポイント バッファーは比例して大きくする必要があります。
クライアントは、 IAudioClient::Initialize メソッドの呼び出し中にバッファー サイズを決定します。 共有モード ストリームの場合、クライアントがこのメソッド に hnsBufferDuration パラメーター値 0 を渡した場合、メソッドは、クライアントエンジンとオーディオ エンジンの期間が等しいことが保証されていると想定し、メソッドは可能な最小待機時間を達成するのに十分な小さいバッファーを割り当てます。 (実際、0 からオーディオ エンジンの期間とデバイスの待機時間の合計までの hnsBufferDuration 値は同じ結果になります)。同様に、排他モード ストリームの場合、クライアントが hnsBufferDuration を 0 に設定した場合、メソッドはクライアントの期間がオーディオ エンドポイント デバイスの最小期間に設定されていることを前提とし、メソッドは可能な最小待機時間を達成するのに十分な小さいバッファーを割り当てます。
クライアントが定期的な処理スレッドの実行頻度を低くすることを選択した場合、待機時間の増加を犠牲にして、十分に大きい IAudioClient::Initialize 呼び出し中にエンドポイント バッファーを作成する限り、これを行うことができます。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ | UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2008 [デスクトップ アプリ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | audioclient.h |