Problemi di rimappatura e combinazione di due altoparlanti in pulseaudio

Aug 19 2020

Ho un paio di altoparlanti Bluetooth e un paio di altoparlanti line-in che sto cercando di riprodurre contemporaneamente. Non ho problemi a collegarmi e giocare con nessuno dei due, ma collegarli ha presentato molti problemi. Inoltre, la configurazione dei miei altoparlanti Bluetooth è capovolta, quindi li sto rimappando per adattarli al posizionamento corretto.

Ho visto diversi thread su che descrivevano come capovolgere gli altoparlanti usando pulseaudio module-remap-sinke combinare gli altoparlanti usando module-combine-sink. Volevo anche aggiungere una latenza agli altoparlanti hardline per tenere conto di un ritardo Bluetooth, quindi ho incluso un module-null-sinke ho collegato la sua sorgente di monitoraggio nel sink hardline per ottenere questo ritardo. I miei quattro comandi sono elencati di seguito.

NOTA: ho diviso le righe lunghe qui con i backslash per scopi di formattazione. Ogni comando è una riga nel codice effettivo

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

Questa sequenza di comandi funziona bene quando eseguo ogni comando uno per uno da un terminale bash, ma voglio impostarlo per l'esecuzione all'avvio, quindi ho scritto uno script bash che contiene queste righe. Quando eseguo lo script bash, il sink combinato degli altoparlanti non viene mai caricato. Per indagare su questo, ho commentato la linea e testato ciascuno delayed_speakerse remapped_bluetoothindividualmente. Se metto modulo-di modifica del lavandino prima module-loopback, quindi l'audio linea dura riceve l'uscita sia dal delayed_speakerse remapped_bluetooth(comprese rimappatura propri) uscite. Se capovolgo l'ordine di queste linee, l'altoparlante bluetooth riceve l'uscita di entrambe le linee. Ho provato ad aggiungere una sospensione per 10 secondi tra ogni caricamento del modulo, ma nemmeno questo risolve il problema. Ho incluso il mio script di seguito.

#!/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

Quando controllo il registro di pulseaudio da systemctl --user status pulseaudio, vedo 100 o più messaggi di pulseaudio[7998]: q overrun, queuing locallye un singolo messaggio di
No remapping configured, proceeding nonetheless!. Dopo questo, non posso più eseguire alcun comando pactlo pacmdfino a quando non riavvio pulseaudio con sudo pkill -9 pulseaudio.

EDIT: So di poter aggiungere il caricamento del modulo al file default.pa, ma nel mio caso non funziona perché il mio altoparlante bluetooth non è connesso quando il file viene eseguito, quindi il caricamento del modulo fallirebbe

Risposte

1 ScottDriggers Aug 28 2020 at 06:24

Ho scoperto il problema. Si scopre che il fallimento non era con la sceneggiatura, era solo una coincidenza. L'errore si è verificato ogni volta che provo a utilizzare module-remap-sinkun sink che è il sink predefinito. Questo errore si verifica silenziosamente e pacmd esiste normalmente. È solo quando provo a set-defaultusare questo nuovo sink rimappato o creo un sink combinato che lo includa che pulseaudio non risponde.

Soluzione: utilizzare pacmd set-default-sink 0prima dell'uso module-remap-sink(o un altro indice se il sink problematico è il sink 0). Se il sink problematico è l'unico sink, è possibile creare un sink fittizio utilizzando pacmd load-module module-null-sink, passare ad esso, configurare la rimappatura e infine eliminare il fittizio.