Problemas de reasignación y combinación de dos altavoces en pulseaudio

Aug 19 2020

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-sinky 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-sinky 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_speakersy remapped_bluetoothde 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_speakerscomo 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 locallyy un solo mensaje de
No remapping configured, proceeding nonetheless!. Después de esto, ya no puedo ejecutar ningún comando pactlo pacmdhasta 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

1 ScottDriggers Aug 28 2020 at 06:24

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-sinken un fregadero que es el fregadero predeterminado. Este error se produce de forma silenciosa y pacmd existe normalmente. Solo cuando intento hacer set-defaulteste nuevo receptor reasignado o crear un receptor combinado que lo incluya, pulseaudio no responde.

Solución: Úselo pacmd set-default-sink 0antes 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.