我正在使用ALSA API snd_pcm_drop()
来清除缓冲区。但是当我稍后用snd_pcm_prepare()
继续播放音频时,我可以听到应该被清除的部分先前音频。
当我的snd_pcm_sw_params_set_stop_threshold()
值很高时会发生这种情况。如果我使用较低的值,则不会播放前一个音频会话的部分音频。
这里发生了什么?如何彻底清除缓冲区?
(我是ALSA的新手)
由于
答案 0 :(得分:0)
“可以听到应该被清除的部分先前的音频。”因为ALSA缓冲区中仍然存在一些音频数据,而且数据不够大。放入ALSA缓冲区时放大音频包可以解决问题。
答案 1 :(得分:0)
我以这种方式解决了克隆问题:
snd_pcm_prepare(pcm_handle);
snd_pcm_drop(pcm_handle);