Qual é o significado de fragmentos e fragment_size nos módulos do PulseAudio ALSA?

0

Seguindo os conselhos em um post chamado Pulseaudio e Latency , tentei carregar module-alsa-sink com especial% co_de Parâmetros% e fragments para garantir baixa latência. No entanto, não tenho certeza do que exatamente isso está fazendo. A latência relatada por fragment_size não tem uma correspondência óbvia com os valores que eu coloquei nesses parâmetros. Aqui está um pequeno script que escrevi para testar várias configurações:

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)
}

Agora posso testar várias configurações de pactl list sinks (F) e fragments (FS). Para o dispositivo de hardware "hw: 0", a latência é baixa, mas não consigo ver como corresponde aos dois parâmetros:

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

Para o dispositivo ALSA "dmix", ele é um pouco mais alto, não sei por que:

F=1; FS=15; DEV=dmix; patest
#        Latency: 42752 usec, configured 42666 usec

# (default:)
DEV=dmix; patest_nofix
#        Latency: 326596 usec, configured 341333 usec

No entanto, quando eu crio meu próprio dispositivo "dmix" para gerar a saída para hw: 0,

$ cat ~/.asoundrc
...
pcm.hw0mix {
    type dmix
    ipc_key 2498 # unique random number
    slave {
        pcm "hw:0,0"
        channels 2
        rate 48000
    }
}

então eu posso ver que a latência é muito maior e parece ter sido fixada em 0,25 segundos:

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

Qual é a relação entre os parâmetros fragment_size e fragments e a "latência configurada" e como altero a latência mínima configurada para ser menor mesmo para dispositivos ALSA não hardware?

    
por Metamorphic 24.10.2018 / 11:52

0 respostas