IXAudio2SourceVoice::FlushSourceBuffers 方法 (xaudio2.h)

从语音队列中删除所有挂起的音频缓冲区。

语法

HRESULT FlushSourceBuffers();

返回值

如果成功,则返回S_OK,否则返回错误代码。

注解

如果语音已启动,则当前正在播放的缓冲区不会从队列中删除。

无论语音当前是启动还是停止,都可以调用 FlushSourceBuffers

对于删除的每个缓冲区,将发出 OnBufferEnd 回调,但不会 (OnBufferStartOnStreamEndOnLoopEnd) 创建其他每个缓冲区回调。

FlushSourceBuffers 不会更改语音的运行状态,因此,如果语音在调用之前正在播放缓冲区,它将继续这样做,并且将正常传递缓冲区的所有回调。 这意味着,此缓冲区的 OnBufferEnd 回调将在删除的缓冲区的 OnBufferEnd 回调之后发生。 因此,调用 FlushSourceBuffers 的 XAudio2 客户端不能按照提交缓冲区的顺序接收 OnBufferEnd 回调。

当前正在播放的缓冲区完成后,不会发出缓冲区队列耗尽的警告;假定客户端已有意删除其后的缓冲区。 但是,如果此缓冲区未在零交叉处结束,则可能会出现音频弹出。 如果应用程序必须确保在播放特定缓冲区时执行刷新操作(可能是因为缓冲区以零交叉结束),则必须从回调调用 FlushSourceBuffers ,以便同步执行。

在语音停止后调用 FlushSourceBuffers ,然后将新数据提交到语音后,会重置语音的所有内部计数器。

调用 FlushSourceBuffers 后,语音的状态不会被视为重置,直到 OnBufferEnd 回调发生 (如果缓冲区之前已提交) 或 IXAudio2SourceVoice::GetState 返回 XAUDIO2_VOICE_STATEBuffersQueued == 0。 例如,如果停止语音并调用 FlushSourceBuffers,则立即调用 IXAudio2SourceVoice::SetSourceSampleRate (这要求语音没有任何缓冲区当前排队) ,直到满足上述任一条件为止。

平台要求

Windows 10 (XAudio2.9) ;Windows 8、Windows Phone 8 (XAudio 2.8) ;DirectX SDK (XAudio 2.7)

要求

   
目标平台 Windows
标头 xaudio2.h

另请参阅

IXAudio2SourceVoice