2013-04-05 136 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緩衝區時放大音頻數據包可能會解決問題。