PulseAudio ALSA模組中的fragments和fragment_size是什麼意思?
根據一篇名為Pulseaudio And Latency
module-alsa-sink
的部落格文章的建議,我嘗試使用特殊fragments
和參數載入fragment_size
以確保低延遲。但是,我不確定這些到底在做什麼。報告的延遲pactl list sinks
與我在這些參數中輸入的值沒有明顯的對應關係。這是我編寫的用於測試各種設置的簡短腳本:pulseaudio & # unload all sinks pactl list sinks | grep "Owner Module" | \ cut -d : -f 2 | \ while read i; do pactl unload-module $i; done # try different settings patest () { pactl load-module module-alsa-sink device=$DEV \ tsched=no \ fixed_latency_range=yes \ fragments=$F fragment_size=$FS > /tmp/modnum.out; pactl list sinks | grep Latency; pactl unload-module $(cat /tmp/modnum.out) } patest_nofix () { pactl load-module module-alsa-sink device=$DEV > /tmp/modnum.out; pactl list sinks | grep Latency; pactl unload-module $(cat /tmp/modnum.out) }
fragments
現在我可以嘗試(F)和fragment_size
(FS)的各種設置。對於硬體設備“hw:0”,延遲很低,但我看不出它與兩個參數的對應關係:F=1; FS=15; DEV=hw:0; patest # Latency: 2516 usec, configured 1451 usec F=1; FS=30; DEV=hw:0; patest # Latency: 2484 usec, configured 1451 usec F=5; FS=15; DEV=hw:0; patest # Latency: 2475 usec, configured 1451 usec F=50; FS=200; DEV=hw:0; patest # Latency: 57628 usec, configured 56689 usec # (default minimum latency:) DEV=hw:0; patest_nofix # Latency: 1983968 usec, configured 2000000 usec
對於“dmix” ALSA 設備,它有點高,不知道為什麼:
F=1; FS=15; DEV=dmix; patest # Latency: 42752 usec, configured 42666 usec # (default:) DEV=dmix; patest_nofix # Latency: 326596 usec, configured 341333 usec
但是,當我創建自己的“dmix”設備以輸出到 hw:0 時,
$ cat ~/.asoundrc ... pcm.hw0mix { type dmix ipc_key 2498 # unique random number slave { pcm "hw:0,0" channels 2 rate 48000 } }
然後我可以看到延遲要高得多,並且似乎固定在 0.25 秒:
F=1; FS=15; DEV=hw0mix; patest # Latency: 251132 usec, configured 250000 usec F=50; FS=200; DEV=hw0mix; patest # Latency: 251126 usec, configured 250000 usec # (default:) DEV=hw0mix; patest_nofix # Latency: 356292 usec, configured 375000 usec
fragments
參數和和“配置的延遲”之間有什麼關係fragment_size
,如何將配置的最小延遲更改為更低,即使對於非硬體 ALSA 設備也是如此?
有關片段/週期的說明,請參閱https://www.alsa-project.org/wiki/FramesPeriods>,另請參閱<https://juho.tykkala.fi/Pulseaudio-and-latency了解 Pulseaudio 調整技巧。
Pulseaudio 也進行混音,因此通過將其與 dmix 結合使用,您可能會在設置中出現一些重複。
dmix 使用 ALSA 外掛層,因此它總是會增加一些延遲。為了盡可能降低延遲,您可以直接使用 hw: 設備並在模擬端混合源。
但是,通過正確的系統配置,應該可以使用 dmix 作為 pulseaudio 的替代品,並且在大多數情況下保持不明顯的延遲。251ms 是多餘的,應該可以得到很多,比使用 dmix 低很多。
該工具https://github.com/raboof/realtimeconfigquickscan可能有助於辨識系統配置的任何方面導致過度延遲。