Problemas de reasignación y combinación de dos altavoces en pulseaudio
Tengo un par de parlantes Bluetooth y un par de parlantes de entrada de línea que intento reproducir simultáneamente. No tengo problemas para conectar y jugar con ninguno de los dos, pero conectarlos ha presentado muchos problemas. Además, mis altavoces bluetooth están configurados al revés, por lo que los estoy reasignando para que coincidan con la posición correcta.
Vi varios hilos que describían cómo voltear altavoces usando pulseaudio module-remap-sink
y combinar altavoces usando module-combine-sink
. También quería agregar una latencia a los altavoces de línea rígida para tener en cuenta un retraso de bluetooth, por lo que incluí un module-null-sink
y conecté su fuente de monitor en el receptor de línea rígida para obtener este retraso. Mis cuatro comandos se enumeran a continuación.
NOTA: Divido líneas largas aquí con barras invertidas para fines de formato. Cada comando es una línea en el código real
pacmd load-module module-null-sink sink_name=delayed_speakers \
sink_properties=device.description=DelayedSpeakers
pacmd load-module module-remap-sink sink_name=remapped_bluetooth \
master=bluez_sink.EC_81_93_5A_66_BB.a2dp_sink channels=2 \
master_channel_map=front-left,front-right channel_map=rear-right,rear-left remix=no
pacmd load-module module-loopback latency_msec=80 source=delayed_speakers.monitor \
sink=alsa_output.usb-Generic_USB_Audio-00.analog-stereo
pacmd load-module module-combine-sink slaves=remapped_bluetooth,delayed_speakers \
sink_name=CombinedSink sink_properties=device.description=CombinedSpeakers \
channel_map=front-left,front-right,rear-left,rear-right
Esta secuencia de comandos funciona bien cuando ejecuto cada comando uno por uno desde un terminal bash, pero quiero configurar esto para que se ejecute en el arranque, así que escribí un script bash que contiene estas líneas. Cuando ejecuto el script bash, el sumidero combinado de altavoces nunca se carga. Para investigar esto, se lo comenté a cabo la línea y probado cada uno delayed_speakers
y remapped_bluetooth
de forma individual. Si pongo module-remap-sink antes del module-loopback, entonces el audio de línea dura recibe la salida tanto de la salida delayed_speakers
como de la remapped_bluetooth
(incluida la reasignación adecuada). Si cambio el orden de estas líneas, el altavoz bluetooth recibe la salida de ambas líneas. Intenté agregar un sueño durante 10 segundos entre cada carga de módulo, pero esto tampoco resuelve el problema. Incluí mi guión a continuación.
#!/bin/bash
echo "Loading null sink";
pacmd load-module module-null-sink sink_name=delayed_speakers \
sink_properties=device.description=DelayedSpeakers
sleep 10
echo "Loading remap sink"
pacmd load-module module-remap-sink sink_name=remapped_bluetooth \
master=bluez_sink.EC_81_93_5A_66_BB.a2dp_sink channels=2 \
master_channel_map=front-left,front-right channel_map=rear-right,rear-left \
remix=no
sleep 10
echo "Loading delayed speakers loopback"
pacmd load-module module-loopback latency_msec=80 source=delayed_speakers.monitor \
sink=alsa_output.usb-Generic_USB_Audio-00.analog-stereo
sleep 10
echo "Loading combined sink"
pacmd load-module module-combine-sink slaves=remapped_bluetooth,delayed_speakers \
sink_name=CombinedSink sink_properties=device.description=CombinedSpeakers \
channel_map=front-left,front-right,rear-left,rear-right
Cuando reviso el registro de pulseaudio systemctl --user status pulseaudio
, veo 100 o más mensajes de pulseaudio[7998]: q overrun, queuing locally
y un solo mensaje de
No remapping configured, proceeding nonetheless!
. Después de esto, ya no puedo ejecutar ningún comando pactl
o pacmd
hasta que reinicie pulseaudio con sudo pkill -9 pulseaudio
.
EDITAR: Sé que puedo agregar la carga del módulo al archivo default.pa, pero esto no funciona en mi caso porque mi altavoz bluetooth no está conectado cuando se ejecuta el archivo, por lo que la carga del módulo fallaría
Respuestas
Descubrí el problema. Resulta que la falla no fue con la secuencia de comandos, fue solo una coincidencia. La falla ocurrió cada vez que intento usar module-remap-sink
en un fregadero que es el fregadero predeterminado. Este error se produce de forma silenciosa y pacmd existe normalmente. Solo cuando intento hacer set-default
este nuevo receptor reasignado o crear un receptor combinado que lo incluya, pulseaudio no responde.
Solución: Úselo pacmd set-default-sink 0
antes de usar module-remap-sink
(u otro índice si el sumidero problemático es el sumidero 0). Si el sumidero problemático es el único sumidero, puede crear un sumidero ficticio usando pacmd load-module module-null-sink
, cambiar a él, configurar su reasignación y finalmente eliminar el ficticio.