Masalah memetakan ulang dan menggabungkan dua speaker di pulseaudio

Aug 19 2020

Saya memiliki sepasang speaker Bluetooth dan sepasang speaker line-in yang saya coba mainkan secara bersamaan. Saya tidak memiliki masalah dalam menghubungkan dan memainkan keduanya, tetapi menghubungkan mereka telah menimbulkan banyak masalah. Selain itu, speaker bluetooth saya dibalik, jadi saya memetakannya kembali agar sesuai dengan posisi yang benar.

Saya melihat beberapa utas yang menjelaskan cara membalik speaker menggunakan pulseaudio module-remap-sink, dan menggabungkan speaker menggunakan module-combine-sink. Saya juga ingin menambahkan latensi ke speaker garis keras untuk memperhitungkan penundaan bluetooth, jadi saya menyertakan module-null-sinkdan memutar sumber monitornya ke wastafel garis keras untuk mendapatkan penundaan ini. Empat perintah saya tercantum di bawah ini.

CATATAN: Saya membagi garis panjang di sini dengan garis miring terbalik untuk tujuan pemformatan. Setiap perintah adalah satu baris dalam kode sebenarnya

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

Urutan perintah ini berfungsi dengan baik ketika saya menjalankan setiap perintah satu per satu dari terminal bash, tetapi saya ingin mengatur ini agar berjalan saat boot, jadi saya menulis skrip bash yang berisi baris-baris ini. Saat saya menjalankan skrip bash, sink gabunganSpeakers tidak pernah dimuat. Untuk menyelidiki ini, saya mengomentari baris dan menguji masing delayed_speakers- masing dan secara remapped_bluetoothindividual. Jika saya meletakkan module-remap-sink sebelum module-loopback, maka audio hardline menerima keluaran dari delayed_speakersdan remapped_bluetooth(termasuk pemetaan ulang yang tepat) keluaran. Jika saya membalik urutan baris ini, speaker bluetooth menerima output dari kedua baris. Saya telah mencoba menambahkan tidur selama 10 detik di antara setiap pemuatan modul, tetapi ini juga tidak menyelesaikan masalah. Saya menyertakan skrip saya di bawah ini.

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

Ketika saya memeriksa log dari pulseaudio systemctl --user status pulseaudio, saya melihat 100 atau lebih pesan dari pulseaudio[7998]: q overrun, queuing locally, dan satu pesan dari
No remapping configured, proceeding nonetheless!. Setelah ini, saya tidak dapat lagi menjalankan perintah pactlatau pacmdsampai saya memulai ulang pulseaudio dengan sudo pkill -9 pulseaudio.

EDIT: Saya tahu saya dapat menambahkan pemuatan modul ke file default.pa, tetapi ini tidak berfungsi dalam kasus saya karena speaker bluetooth saya tidak terhubung saat file berjalan, sehingga pemuatan modul akan gagal

Jawaban

1 ScottDriggers Aug 28 2020 at 06:24

Saya menemukan masalahnya. Ternyata kegagalan itu bukan pada scripting, itu hanya kebetulan. Kegagalan terjadi setiap kali saya mencoba untuk menggunakan module-remap-sinkdi sink yang merupakan default-sink. Kegagalan ini terjadi secara diam-diam dan pacmd muncul seperti biasa. Hanya ketika saya mencoba ke set-defaultsink baru yang dipetakan ulang ini atau membuat sink gabungan termasuk itu pulseaudio menjadi tidak responsif.

Solusi: Gunakan pacmd set-default-sink 0sebelum menggunakan module-remap-sink(atau indeks lain jika sink yang bermasalah adalah sink 0). Jika sink yang bermasalah adalah satu-satunya sink, maka Anda dapat membuat dummy sink menggunakan pacmd load-module module-null-sink, beralih ke sink , mengkonfigurasi pemetaan ulang, dan terakhir menghapus dummy.