Problèmes de remappage et de combinaison de deux haut-parleurs dans pulseaudio

Aug 19 2020

J'ai une paire de haut-parleurs Bluetooth et une paire de haut-parleurs d'entrée de ligne que j'essaie de lire simultanément. Je n'ai aucun problème à me connecter et à jouer sur l'un ou l'autre, mais les connecter a posé de nombreux problèmes. De plus, la configuration de mes haut-parleurs Bluetooth est inversée, je les remappe donc pour qu'ils correspondent au bon positionnement.

J'ai vu plusieurs fils qui décrivaient comment inverser les haut-parleurs à l'aide de pulseaudio module-remap-sinket combiner des haut-parleurs à l'aide de module-combine-sink. Je voulais également ajouter une latence aux haut-parleurs hardline pour tenir compte d'un retard Bluetooth, j'ai donc inclus un module-null-sinket mis en boucle sa source de moniteur dans le puits hardline pour obtenir ce retard. Mes quatre commandes sont répertoriées ci-dessous.

REMARQUE: j'ai divisé les longues lignes ici avec des barres obliques inverses à des fins de formatage. Chaque commande est une ligne dans le code réel

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

Cette séquence de commandes fonctionne bien lorsque j'exécute chaque commande une par une à partir d'un terminal bash, mais je veux configurer cela pour qu'il s'exécute au démarrage, j'ai donc écrit un script bash qui contient ces lignes. Lorsque j'exécute le script bash, le récepteur combinéSpeakers ne se charge jamais. Pour enquêter sur cela, j'ai commenté la ligne et testé chacun delayed_speakerset remapped_bluetoothindividuellement. Si je mets module remap-évier avant module réalimentation, l'audio pur et dur reçoit la sortie à la fois la delayed_speakerset les remapped_bluetoothsorties (y compris de remappage appropriées). Si je change l'ordre de ces lignes, le haut-parleur bluetooth reçoit la sortie des deux lignes. J'ai essayé d'ajouter un sommeil pendant 10 secondes entre chaque chargement de module, mais cela ne résout pas non plus le problème. J'ai inclus mon script ci-dessous.

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

Lorsque je vérifie le journal pulseaudio à partir de systemctl --user status pulseaudio, je vois 100 messages ou plus de pulseaudio[7998]: q overrun, queuing locally, et un seul message de
No remapping configured, proceeding nonetheless!. Après cela, je ne peux plus exécuter aucune commande pactlou pacmdjusqu'à ce que je redémarre pulseaudio avec sudo pkill -9 pulseaudio.

EDIT: Je sais que je peux ajouter le chargement de module au fichier default.pa, mais cela ne fonctionne pas dans mon cas car mon haut-parleur bluetooth n'est pas connecté lorsque le fichier s'exécute, donc le chargement du module échouerait

Réponses

1 ScottDriggers Aug 28 2020 at 06:24

J'ai compris le problème. Il s'avère que l'échec n'était pas avec le script, c'était juste une coïncidence. L'échec se produit chaque fois que j'essaye d'utiliser module-remap-sinksur un récepteur qui est le récepteur par défaut. Cet échec se produit en silence et pacmd existe normalement. Ce n'est que lorsque j'essaye d'accéder à set-defaultce nouveau récepteur remappé ou de créer un récepteur combiné en l'incluant que pulseaudio ne répond plus.

Solution: utilisez pacmd set-default-sink 0avant d'utiliser module-remap-sink(ou un autre index si le récepteur problématique est le récepteur 0). Si le récepteur problématique est le seul récepteur, vous pouvez créer un récepteur factice à l'aide de pacmd load-module module-null-sink, basculer vers celui-ci, configurer votre remappage et enfin supprimer le récepteur.