我目前正在開發一個項目,要求我對Alsa進行一些抽樣。我正在嘗試正確配置所有內容,但我一直在堅持如何正確調整閱讀大小。正確調整Alsa緩衝區的大小,奇怪的API
有兩個原語,似乎是對我的任務有趣:
snd_pcm_hw_params_get_period_time
snd_pcm_hw_params_get_buffer_size
第一個的名字所暗示的輸出將是一個採樣週期的時間長度,但是這是奇怪的:如果我設置採樣率爲f = 44100Hz
採樣週期(以納秒爲單位)應爲T0 = 1e9/44100 ~= 22676 ns
,而函數將回答T1 = 725 us = 725000 ns
。與此同時,即使我被要求使用非鎖定原語,我試圖分析鎖定'readi'所需的時間,事實證明,在最佳情況下樣本需要T2 = 8028603 ns
,並且在最佳情況下需要T2 = 8028603 ns
T3 = 12436217 ns
在最壞的情況下。
最後,我無法找出什麼是以下兩個含義:
snd_pcm_hw_params_get_buffer_time
snd_pcm_hw_params_get_period_size
我不明白我怎麼能衡量時間的緩衝和大小的時期,但前者的回報與get_buffer_size
相同的值,而後者返回與get_period_time
相同的值。
任何提示?
他們回到什麼是返回類型,這是'snd_uframe_t'爲* _size和'unsigned'爲* _time明確獲得「真正的」採樣率,但我沒有得到什麼「緩衝時間」和「週期大小」的含義。 – Dacav 2010-07-27 15:34:33
期大小:在幀 VAL返回週期近似尺寸 緩衝時間(當然這取決於當前配置):在 VAL返回的緩衝區時我們 – ninjalj 2010-07-27 15:40:35
是,該文件具有的功能名稱的相同信息內容,但什麼是一個緩衝時間?緩衝區有一定的*大小*,而不是*時間*。 – Dacav 2010-07-27 15:43:04