terça-feira, 14 de fevereiro de 2017

Áudio remoto no linux (revisitado)

Usando arecord e aplay

Existem muitos softwares para capturar e distribuir áudio remoto para SO Microsoft, nomeadamente os dedicados a esta tarefa e outros mais genéricos que podem ser usados para o efeito como o Skype. No GNU/Linux o panorama é um pouco diferente, aparentemente não há soluções "chave na mão". Porem com alguma imaginação isto é muito fácil de obter: basta instalar o 'alsamixer' e 'libogg' 'libvorbis' 'vorbis-tools' e finalmente 'mplayer' no par servidor/cliente. Não se admire que alguns destes já façam parte da sua distribuição.
Assim para obter áudio remoto:
ssh user@192.168.1.25 'arecord -f cd -t wav -vv | oggenc - -r' | mplayer -
Versão com menos lag e BW de cerca de 400k, a novidade está aqui.
ssh -C pmc@192.168.1.25 'arecord -f cd -D hw:2,0 -t wav -M | oggenc - -r -q 10' | mplayer -
Assim tem o áudio da entrada de áudio "default" da sua máquina remota. Para setups mais complexos o programa 'arecord' permite a escolha da entrada, por ex: ...arecord -f cd -D hw:0,0... uma vista de olhos pela man page revela outras facilidades. Esta pode ser usada numa máquina remota com vários rádios ligados a várias placas. Rádios com o o TS-590 com placa de som interna podem ser usados com muita facilidade não precisando de adaptadores ou cabos especiais, apenas o cabo USB.
Para enviar áudio para o rádio remoto é assim:
arecord -f cd -t raw | oggenc - -r | ssh user@192.168.1.25 'mpalyer -'
Um "&" no fim de cada comando liberta a shell para receber outros comandos e temos uma ligação full-duplex para o nosso rádio remoto.
https://ct7aez.blogspot.pt/2016/09/audio-remoto-no-linux.html

Usando portaudio Audio Server

A novidade aqui é podemos usar uma placa de som remota no fldigi. 

Servidor

sudo apt-get install pulseaudio pulseaudio-module-zeroconf alsa-utils avahi
Adicionar o utilizador aos grupos audio pulse e pulse-access
sudo usermod -a -G audio user sudo usermod -a -G pulse user sudo usermod -a -G pulse-access user
Ver os grupos a que pertence o utilizador sudo groups user
Fazer PulseAudio iniciar no arranque
Editar /etc/default/pulseaudio
Change PULSEAUDIO_SYSTEM_START to 1
Editar /etc/pulse/daemon.conf
exit-idle-time = -1 para evitar "timeout"
Editar /etc/pulse/default.pa
load-module module-alsa-sink device=hw:2,0
load-module module-alsa-source device=hw:2,0
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.1.0/24
load-module module-zeroconf-publish
Comentar o seguinte:
### Automatically load driver modules depending on the hardware available
#.ifexists module-udev-detect.so
#load-module module-udev-detect
#.else
### Use the static hardware detection module (for systems that lack udev support)
#load-module module-detect
#.endif
pulseaudio -vvv para fazer o debug se necessário.

Cliente

Instalar o psprefs sudo apt-get install paprefs
Correr o paprefs e configurar o seguinte:
  • Make discoverable PulseAudio network sound devices available locally
  • Enable network access to local sound devices
  • Allow other machines on the LAN to discover local sound devices
  • Don’t require authentication
A monitorização do sinal pode ser feita assim:
pactl load-module module-loopback
No pauvcontrol selecionar o separador A Gravar selecionar "Show All Streams" e selecionar a fonte para o monitor "PCM2903BAudio CODEC on XXXXX".

fldigi

No fldigi na configuração da placa de som selecionar "PortAudio" e colocar o servidor local.
Com este setup a latência é quase 0 (menos de 1 segundo garantidamente).