IXAudio2SourceVoice::FlushSourceBuffers 方法 (xaudio2.h)
從語音佇列中移除所有擱置的音訊緩衝區。
Syntax
HRESULT FlushSourceBuffers();
傳回值
如果成功,則傳回S_OK,否則傳回錯誤碼。
備註
如果語音已啟動,則目前播放的緩衝區不會從佇列中移除。
不論語音目前是否已啟動或停止,都可以呼叫FlushSourceBuffers。
針對移除的每個緩衝區,將會建立 OnBufferEnd 回呼,但不會建立其他每個緩衝區回呼 (OnBufferStart、 OnStreamEnd 或 OnLoopEnd) 。
FlushSourceBuffers 不會變更語音的執行狀態,因此如果語音在通話之前播放緩衝區,它會繼續執行此動作,而且會正常傳遞緩衝區的所有回呼。 這表示這個緩衝區的 OnBufferEnd 回呼會在移除之緩衝區的 OnBufferEnd 回呼之後進行。 因此,呼叫 FlushSourceBuffers 的 XAudio2 用戶端無法預期會依提交緩衝區的順序接收 OnBufferEnd 回呼。
當目前播放的緩衝區完成時,不會發出緩衝區佇列耗盡的警告;假設用戶端已刻意移除其後面的緩衝區。 不過,如果這個緩衝區未以零交叉結束,可能會有音訊快顯。 如果應用程式必須確定在特定緩衝區現正播放時發生排清作業,可能是因為緩衝區以零交叉結束—它必須從回呼呼叫 FlushSourceBuffers ,以便同步執行。
在語音停止之後呼叫 FlushSourceBuffers ,然後將新資料提交至語音會重設所有語音的內部計數器。
在呼叫FlushSourceBuffers之後,語音的狀態不會被視為重設,直到先前提交緩衝區) 或IXAudio2SourceVoice::GetState傳回XAUDIO2_VOICE_STATE時,才會發生onBufferEnd回 (呼。 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 |