Problèmes de remappage et de combinaison de deux haut-parleurs dans pulseaudio
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-sink
et 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-sink
et 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_speakers
et remapped_bluetooth
individuellement. Si je mets module remap-évier avant module réalimentation, l'audio pur et dur reçoit la sortie à la fois la delayed_speakers
et les remapped_bluetooth
sorties (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 pactl
ou pacmd
jusqu'à 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
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-sink
sur 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-default
ce 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 0
avant 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.