2013-04-05 133 views
7

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

这里发生了什么?如何完全清除缓冲区?

(我是新来的ALSA)

感谢

+0

是否可以使用snd_pcm_drain()而不是snd_pcm_drop()? – 2013-04-05 06:09:02

+0

听起来像一个驱动程序错误,但这是很难说没有更多的信息。 – 2013-04-05 07:00:36

+0

@Multimedia Mike,根据文档,snd_pcm_drain()不会立即删除缓冲区。所以这对我没有用。反正我试过snd_pcm_drain(),但观察结果是一样的。 – 2013-04-05 07:44:36

回答

0

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