Проблемы с переназначением и объединением двух динамиков в pulseaudio

Aug 19 2020

У меня есть пара динамиков Bluetooth и пара динамиков с линейным входом, которые я пытаюсь воспроизводить одновременно. У меня нет проблем с подключением и воспроизведением того и другого, но их подключение вызвало много проблем. Кроме того, мои bluetooth-динамики перевернуты, поэтому я переназначаю их, чтобы они соответствовали правильному расположению.

Я видел несколько тем, в которых описывалось, как переворачивать динамики с помощью pulseaudio module-remap-sinkи комбинировать динамики с помощью module-combine-sink. Я также хотел добавить задержку для жестких динамиков, чтобы учесть задержку bluetooth, поэтому я включил module-null-sinkи зациклил его источник монитора в жестком приемнике, чтобы получить эту задержку. Мои четыре команды перечислены ниже.

ПРИМЕЧАНИЕ. Здесь я разделяю длинные строки с помощью обратной косой черты для целей форматирования. Каждая команда представляет собой одну строку в реальном коде

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

Эта последовательность команд отлично работает, когда я запускаю каждую команду одну за другой из терминала bash, но я хочу настроить ее для запуска при загрузке, поэтому я написал сценарий bash, содержащий эти строки. Когда я запускаю bash-скрипт, ни одна из сторон не загружается. Чтобы исследовать это, я закомментировать линию и проходят каждый delayed_speakersи по remapped_bluetoothотдельности. Если я поставлю модуль-remap-приемник перед модулем-loopback, тогда жесткий звук получит вывод как с выходов, так delayed_speakersи с remapped_bluetoothвыходов (включая правильное переназначение). Если я переверну порядок этих строк, динамик bluetooth получит вывод обеих линий. Я попытался добавить 10 секунд сна между каждой загрузкой модуля, но это тоже не решило проблему. Я включил свой сценарий ниже.

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

Когда я проверяю журнал pulseaudio из systemctl --user status pulseaudio, я вижу 100 или более сообщений pulseaudio[7998]: q overrun, queuing locallyи одно сообщение
No remapping configured, proceeding nonetheless!. После этого я больше не могу выполнять какие- pactlлибо pacmdкоманды или, пока не перезапущу pulseaudio с помощью sudo pkill -9 pulseaudio.

РЕДАКТИРОВАТЬ: Я знаю, что могу добавить загрузку модуля в файл default.pa, но в моем случае это не работает, потому что мой динамик Bluetooth не подключен при запуске файла, поэтому загрузка модуля завершится ошибкой

Ответы

1 ScottDriggers Aug 28 2020 at 06:24

Я разобрался в проблеме. Оказалось, что сбой произошел не из-за сценария, а просто случайно. Сбой происходил всякий раз, когда я пытался использовать module-remap-sinkприемник, который является приемником по умолчанию. Этот сбой происходит незаметно, и pacmd существует как обычно. Только когда я пытаюсь set-defaultподключиться к этому новому переназначенному приемнику или создать комбинированный приемник, включающий его, pulseaudio перестает отвечать.

Решение: используйте pacmd set-default-sink 0перед использованием module-remap-sink(или другой индекс, если проблемный сток равен 0). Если проблемный приемник является единственным приемником, то вы можете создать фиктивный приемник с помощью pacmd load-module module-null-sink, переключиться на него, настроить повторное сопоставление и, наконец, удалить фиктивный приемник .