2013-12-10 63 views
0

正如我們所知道的,當我們打開設備進行播放時,我們必須以設備運行的速率向設備提供數據(意味着我們必須與設備的速率匹配),否則我們將運行不足。 我們可以用snd_pcm_sw_params_set_silence_size克服alsa中的不足嗎?

 "Under-run/over-run can be overcomed by increasing the buffer size"
我可以理解如何克服超額運行,但如何通過增加緩衝區大小來消除運行不足。我們是否可以通過使用 snd_pcm_sw_params_set_silence_sizesnd_pcm_sw_params_set_silence_threshold?來克服運行不足。這兩者之間的確切區別是什麼?任何幫助提前感謝。

+0

是的..我們可以通過使用snd_pcm_sw_params_set_silence_size來克服欠運行,我測試了它,工作。但我並不清楚這兩個功能之間的區別是什麼 –

+0

你是說「克服」的意思是什麼?當您的程序沒有提供數據播放時應該發生什麼? –

+0

它應該玩沉默。 –

回答

1

靜音大小/閾值設置比實際需要更通用。

要用零重新初始化任何剛剛播放的緩衝區部分,請將靜音閾值設置爲零,並將靜音大小設置爲邊界值(您可以使用snd_pcm_sw_params_get_boundary讀取)。

+0

何時發生上述情況?我認爲這樣可以爲整個緩衝區寫入沉默(這裏寫完沉默之後,如果我們寫了任何數據,那麼它會延遲播放)。 –

+0

我試圖通過設置停止閾值爲零(0),然後也沒有發生斷管。但當我們將停止閾值設置爲零(0)時,我不知道到底發生了什麼。 –

+0

在該部分播放後,在中斷處理程序中發生沉默。要詢問有關停止閾值的問題,請不要使用註釋,而要使用「提問」按鈕。 –

相關問題