PulseAudio ALSA 모듈에서 조각과 조각_크기의 의미는 무엇입니까?

PulseAudio ALSA 모듈에서 조각과 조각_크기의 의미는 무엇입니까?

블로그 게시물의 조언을 따르세요.펄스 오디오 및 지연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

매개변수 fragmentsfragment_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과도한 대기 시간을 유발하는 시스템 구성의 모든 측면을 식별하는 것이 도움이 될 수 있습니다.

관련 정보