블로그 게시물의 조언을 따르세요.펄스 오디오 및 지연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)와 (FS) fragment_size
의 다양한 설정을 시도해 볼 수 있습니다 . 하드웨어 장치 "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
그러나 hw:0으로 출력하기 위해 나만의 "dmix" 장치를 만들면,
$ 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 장치에 대해서도 구성된 최소 대기 시간을 더 낮게 변경하려면 어떻게 해야 합니까?
답변1
세그먼트/주기에 대한 설명은 다음을 참조하세요.https://www.alsa-project.org/wiki/FramesPeriods또한보십시오https://juho.tykkala.fi/Pulseaudio-and-latencyPulseaudio 튜닝 기술에 대해 알아보세요.
Pulseaudio는 믹싱도 가능하므로 dmix와 함께 사용하면 설정이 일부 중복될 수 있습니다.
dmix는 ALSA 플러그인 레이어를 사용하므로 항상 약간의 대기 시간이 추가됩니다. 대기 시간을 최대한 낮게 유지하려면 hardware:device를 직접 사용하고 아날로그 측에서 소스를 혼합할 수 있습니다.
그러나 올바른 시스템 구성을 사용하면 dmix를 pulseaudio 대신 사용할 수 있으며 대부분의 경우 대기 시간을 눈에 띄지 않게 유지할 수 있습니다. 251ms는 너무 길기 때문에 dmix보다 훨씬 낮아야 합니다.
도구https://github.com/raboof/realtimeconfigquickscan과도한 대기 시간을 유발하는 시스템 구성의 모든 측면을 식별하는 것이 도움이 될 수 있습니다.