IXAudio2SourceVoice::FlushSourceBuffers メソッド (xaudio2.h)
保留中のすべてのオーディオ バッファーを音声キューから削除します。
構文
HRESULT FlushSourceBuffers();
戻り値
成功した場合はS_OKを返し、それ以外の場合はエラー コードを返します。
解説
音声が開始された場合、現在再生中のバッファーはキューから削除されません。
FlushSourceBuffers は、音声が現在開始されているか停止されているかに関係なく呼び出すことができます。
削除されたバッファーごとに OnBufferEnd コールバックが行われますが、他のバッファーごとのコールバック (OnBufferStart、 OnStreamEnd 、または OnLoopEnd) は行われません。
FlushSourceBuffers は音声の実行状態を変更しないため、音声が呼び出しの前にバッファーを再生していた場合は、引き続き行われ、バッファーのすべてのコールバックが正常に配信されます。 つまり、このバッファーの OnBufferEnd コールバックは、削除されたバッファーの OnBufferEnd コールバックの後に行われます。 したがって、 FlushSourceBuffers を呼び出す XAudio2 クライアントは、バッファーが送信された順序で OnBufferEnd コールバックを受け取ることを期待できません。
現在再生中のバッファーが完了すると、バッファー キューの枯渇に関する警告は生成されません。クライアントは、その後に続くバッファーを意図的に削除したと見なされます。 ただし、このバッファーがゼロ交差で終わらない場合は、オーディオ ポップが発生する可能性があります。 アプリケーションで特定のバッファーの再生中にフラッシュ操作が実行されるようにする必要がある場合 (バッファーがゼロクロッシングで終わる可能性があるため)、同期的に実行されるように、コールバックから FlushSourceBuffers を呼び出す必要があります。
音声が停止した後に FlushSourceBuffers を呼び出し、音声に新しいデータを送信すると、音声のすべての内部カウンターがリセットされます。
OnBufferEnd コールバックが発生するか (バッファーが送信された場合)、または IXAudio2SourceVoice::GetState がXAUDIO2_VOICE_STATEで返されるまで、FlushSourceBuffers を呼び出した後、音声の状態はリセットとは見なされません。 BuffersQueued == 0。 たとえば、音声を停止して FlushSourceBuffers を呼び出した場合、前述の条件のいずれかが満たされるまで、 IXAudio2SourceVoice::SetSourceSampleRate (音声に現在キューに入れられているバッファーが必要) を直ちに呼び出すのはまだ有効ではありません。
プラットフォームの要件
Windows 10 (XAudio2.9);Windows 8、Windows Phone 8 (XAudio 2.8);DirectX SDK (XAudio 2.7)要件
対象プラットフォーム | Windows |
ヘッダー | xaudio2.h |