ALSA snd_pcm_drop()未清除完整缓冲区

时间:2013-04-05 04:54:08

标签: c linux alsa

我正在使用ALSA API snd_pcm_drop()来清除缓冲区。但是当我稍后用snd_pcm_prepare()继续播放音频时,我可以听到应该被清除的部分先前音频。 当我的snd_pcm_sw_params_set_stop_threshold()值很高时会发生这种情况。如果我使用较低的值,则不会播放前一个音频会话的部分音频。

这里发生了什么?如何彻底清除缓冲区?

(我是ALSA的新手)

由于

2 个答案:

答案 0 :(得分:0)

“可以听到应该被清除的部分先前的音频。”因为ALSA缓冲区中仍然存在一些音频数据,而且数据不够大。放入ALSA缓冲区时放大音频包可以解决问题。

答案 1 :(得分:0)

我以这种方式解决了克隆问题:

snd_pcm_prepare(pcm_handle);
snd_pcm_drop(pcm_handle);