Pulseaudio'da iki hoparlörü yeniden eşleme ve birleştirme sorunları
Bir çift Bluetooth hoparlörüm ve aynı anda çalmaya çalıştığım bir çift giriş hoparlörüm var. İkisini de bağlayıp oynamakta sorun yaşamıyorum, ancak onları bağlamak birçok sorunu ortaya çıkardı. Ek olarak, bluetooth hoparlörlerim ters çevrildi, bu yüzden onları doğru konumlandırmaya uyacak şekilde yeniden eşleştiriyorum.
Pulseaudio'ları kullanarak hoparlörleri nasıl çevireceğinizi module-remap-sink
ve kullanarak hoparlörleri nasıl birleştireceğinizi anlatan birkaç konu gördüm module-combine-sink
. Ayrıca bir bluetooth gecikmesini hesaba katmak için sabit hat hoparlörlerine bir gecikme eklemek istedim, bu yüzden module-null-sink
bu gecikmeyi almak için monitör kaynağını sabit hat lavabosuna ekledim ve döngü yaptım . Dört komutum aşağıda listelenmiştir.
NOT: Burada uzun satırları biçimlendirme amacıyla ters eğik çizgilerle böldüm. Her komut gerçek kodda bir satırdır
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
Bu komut dizisi, her komutu bir bash terminalinden tek tek çalıştırdığımda iyi çalışıyor, ancak bunu önyüklemede çalışacak şekilde ayarlamak istiyorum, bu yüzden bu satırları içeren bir bash betiği yazdım. Bash komut dosyasını çalıştırdığımda, birleşik Hoparlörler havuzu asla yüklenmiyor. Bu araştırmak için, ben çizgi dışarı yorumladı ve her test delayed_speakers
ve remapped_bluetooth
tek tek. Module-remap-sink'yi modül geri dönüşünden önce koyarsam, hardline ses çıkışı hem çıkışlardan hem delayed_speakers
de remapped_bluetooth
(uygun yeniden eşleme dahil) alır. Bu hatların sırasını değiştirirsem, bluetooth hoparlörü her iki hattın çıkışını alır. Her modül yüklemesi arasına 10 saniye uyku eklemeyi denedim, ancak bu da sorunu çözmüyor. Senaryomu aşağıya ekledim.
#!/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
Üzerinden pulseaudio kaydını kontrol systemctl --user status pulseaudio
ettiğimde 100 veya daha fazla mesaj pulseaudio[7998]: q overrun, queuing locally
ve tek bir mesaj görüyorum
No remapping configured, proceeding nonetheless!
. Bundan sonra, pulseaudio ile yeniden başlatana kadar herhangi bir pactl
veya pacmd
komutunu yürütemiyorum sudo pkill -9 pulseaudio
.
DÜZENLEME: default.pa dosyasına modül yüklemesi ekleyebileceğimi biliyorum, ancak bu benim durumumda çalışmıyor çünkü dosya çalışırken bluetooth hoparlörüm bağlı değil, bu nedenle modül yükleme başarısız oluyor
Yanıtlar
Sorunu çözdüm. Başarısızlığın komut dosyasıyla değil, sadece bir tesadüf olduğu ortaya çıktı. module-remap-sink
Varsayılan havuz olan bir havuzda kullanmaya çalıştığımda hata oluştu . Bu arıza sessizce gerçekleşir ve pacmd normal olarak mevcuttur. set-default
Pulseaudio yalnızca bu yeni yeniden eşlenmiş havuza veya onu içeren bir birleşik havuz oluşturmaya çalıştığımda, pulseaudio yanıt vermiyor.
Çözüm: Kullanmadan pacmd set-default-sink 0
önce kullanın module-remap-sink
(veya sorunlu havuz havuz 0 ise başka bir dizin). Sorunlu havuz tek havuzsa, kullanarak sahte bir havuz oluşturabilir pacmd load-module module-null-sink
, ona geçiş yapabilir, yeniden eşlemenizi yapılandırabilir ve son olarak mankeni silebilirsiniz.