Uso o Mumble (cliente de desktop) + Murmur (como servidor LAN) + Plumble (cliente Android / iOS). Isso resulta na menor latência que eu já alcancei (soa quase como loopback normal, teoricamente, atraso de 7ms no WiFi + atraso de 2x 10ms no codec = 27 ms).
https://github.com/pzmarzly/mic_over_mumble
Fragmentos de README (rev 59091372580f481320224532aeaaea84c9c07848)
Defina todos os 3 programas para usar a melhor qualidade e latência mínima. Defina o cliente móvel para sempre transmitir. Copie para mic_over_mumble
qualquer lugar - ele será usado ~/.mic_over_Mumble
como diretório de configuração. Execute mic_over_mumble
e conecte seu dispositivo móvel ao servidor da LAN. Em seguida, configure seus programas para usar o monitor do Mumble como dispositivo de entrada. Por exemplo, no ORG:
Cópia do mic_over_mumble
script (rev 59091372580f481320224532aeaaea84c9c07848)
#!/bin/bash
set -e
# PAID = PulseAudio ID
# ID = PID / process ID
function main () {
if [ ! -e ~/.mic_over_Mumble ]; then
mkdir ~/.mic_over_Mumble
fi
cd ~/.mic_over_Mumble
rm murmur.ini | true
echo "bonjour=true" >> murmur.ini
echo "bandwidth=130000" >> murmur.ini
if [ ! -e ./initdone ]; then
echo "You will need to configure Mumble client to use the lowest possible latency."
echo "We will start Mumble now. Please complete setup wizard and go to settings to increase quality and decrease latency."
echo "Also, mute your microphone (if you have one) in Mumble."
echo "Then close Mumble."
run_mumble_client_wizard
touch ./initdone
fi
echo "Starting Mumble server (murmurd)..."
MUMBLE_SERVER_ID=`run_mumble_server_bg`
sleep 5
echo "Starting Mumble client..."
MUMBLE_CLIENT_ID=`run_mumble_client_bg`
sleep 5
echo "Fetching PulseAudio configuration..."
MUMBLE_CLIENT_PAID=`get_mumble_client_paid`
echo "Changing PulseAudio configuration..."
SINK_MODULE_PAID=`add_sink`
sleep 3
SINK_PAID=`get_sink_paid`
pacmd move-sink-input $MUMBLE_CLIENT_PAID $SINK_PAID
echo "Done. Please use pavucontrol to ensure everything works."
echo "Press Return to shut down..."
read -n1 -s
echo "Shutting down..."
echo "Stopping Mumble client..."
kill -KILL $MUMBLE_CLIENT_ID | true
sleep 2
echo "Stopping Mumble server..."
kill -KILL $MUMBLE_SERVER_ID | true
echo "Restoring PulseAudio configuration..."
pactl unload-module $SINK_MODULE_PAID
}
function run_mumble_client_wizard () {
mumble >/dev/null 2&>1
}
function run_mumble_client_bg () {
MUMBLE_URL="mumble://localhost"
mumble $MUMBLE_URL >/dev/null 2&>1 &
echo $!
}
function run_mumble_server_bg () {
murmurd -ini ./murmur.ini &
echo $!
}
function get_mumble_client_paid () {
pacmd list-sink-inputs |
egrep "index: |application.name = " |
cut_every_second_newline |
egrep Mumble |
print_second_column
}
function add_sink () {
pactl load-module \
module-null-sink \
sink_name="Loopback_of_Mumble" \
sink_properties=device.description="Loopback_of_Mumble"
}
function get_sink_paid () {
pacmd list-sinks |
egrep "index: |name: " |
cut_every_second_newline |
egrep Loopback |
print_second_column
}
# /server//a/375098/449626
function cut_every_second_newline () {
awk 'ORS=NR%2?" ":"\n"'
}
function print_second_column () {
awk '{print $2}'
}
main
Please first load ALSA snd-aloop.
, então eu precisava fazer:sudo modprobe snd-aloop
e então eu tive que executar omicclient-ubuntu-x86
como root (usandosudo
). E então funcionou, sim.