Latência de loopback do PulseAudio

3

Estou usando loopback de pulseaudio para vincular meus sons do sistema e meu microfone. O problema é que os sons do meu sistema têm um atraso de um segundo ou até mais, às vezes. Eu mudei marcada simultaneamente em paprefs , mas isso não foi corrigido. Estou usando este script para fazer isso.

STREAM_MODULE=$(pactl load-module module-null-sink sink_name=StreamAudio sink_properties=device.description="StreamAudio")

pactl load-module module-loopback source=alsa_output.pci-0000_00_1b.0.analog-stereo.monitor sink=StreamAudio latency_msec=1 >> /dev/null  
pactl load-module module-loopback source=alsa_input.usb-AKM_AK5370-00-AK5370.analog-mono sink=StreamAudio latency_msec=1 >> /dev/null

pactl load-module module-device-manager >> /dev/null  

read -p "Loaded! Press enter to unload!"

pactl unload-module $STREAM_MODULE
pactl unload-module module-device-manager
pactl unload-module module-null-sink
pactl unload-module module-loopback

Eu passei por páginas do google, mas nada parece consertar isso. Existe algo óbvio que eu estou sentindo falta?

alsa_output.pci-0000_00_1b.0.analog-stereo.monitor são todos os sons do meu sistema.

alsa_input.usb-AKM_AK5370-00-AK5370.analog-mono é meu microfone

Aqui está um exemplo onde o atraso se torna 3,4 segundos: link enquanto o outro loopback tem muito menos link

Pelo que sei, por algum motivo o buffer enche. De alguma forma eu posso liberar ou algo assim?

    
por Vilsol 05.07.2014 / 01:13

2 respostas

2

Encontrei uma saída temporária, mas isso ainda me confunde. Eu fiz um módulo combinado, e depois disso eu conecto todas as fontes de som que eu quero ao combinado, que então direciona para os sons do meu sistema e para o coletor Streaming.

STREAM_MODULE=$(pactl load-module module-null-sink sink_name=StreamAudio sink_properties=device.description="StreamAudio")
COMBINE_MODULE=$(pactl load-module module-combine-sink sink_name=Combined sink_properties=device.description="Combined" slaves=StreamAudio,alsa_output.pci-0000_00_1b.0.analog-stereo)

pactl load-module module-loopback rate=44000 adjust_time=0 source=alsa_input.usb-AKM_AK5370-00-AK5370.analog-mono sink=StreamAudio latency_msec=1 >> /dev/null

pactl load-module module-device-manager >> /dev/null  

read -p "Loaded! Press enter to unload!"

pactl unload-module $COMBINE_MODULE
pactl unload-module $STREAM_MODULE
pactl unload-module module-device-manager
pactl unload-module module-loopback

Provavelmente, há uma maneira de obter os resultados de pacmd list-clients e, em seguida, limpar somente origens válidas, alterar sua saída para o coletor combinado, mas isso levaria muito tempo e seria complexo.

Embora agora surja um novo problema, eu até o testei executando o comando através do terminal. Por alguma razão, não consigo alterar o dissipador de saída do Java. Aqui está o que eu tentei e o que ele retornou:

vilsol@skynet:~$ pacmd move-sink-input 6421 124
Welcome to PulseAudio! Use "help" for usage information.
>>> Moved failed.

Eu tentei com os outros também e todos eles funcionaram. 6421 é o índice Java e 124 é o índice do coletor.

    
por Vilsol 06.07.2014 / 19:38
-1
Algum tempo atrás, eu era capaz de fazer loopback minha guitarra para os alto-falantes sem atraso perceptível, por isso pulseaudio suporta isso, mas lembro-me de ter problemas com atrasos inferiores a 10 ms. Minhas sugestões são

  1. para revisar os parâmetros de comando
  2. use um atraso maior
  3. teste cada loopback separadamente e
  4. peça instruções diretamente aos desenvolvedores do pulseaudio.
por Henrique 05.07.2014 / 18:16