pulseaudioで2つのスピーカーを再マッピングして組み合わせる際の問題

Aug 19 2020

同時に再生しようとしているBluetoothスピーカーとライン入力スピーカーのペアがあります。どちらも接続して再生するのに問題はありませんが、接続すると多くの問題が発生します。さらに、私のBluetoothスピーカーはセットアップが反転しているので、正しい位置に一致するように再マッピングしています。

私はmodule-remap-sink、pulseaudioを使用してスピーカーを反転し、を使用してスピーカーを組み合わせる方法を説明しているスレッドをいくつか見ましたmodule-combine-sink。また、Bluetoothスピーカーにレイテンシーを追加して、Bluetoothの遅延を考慮したかったので、module-null-sinkこの遅延を取得するために、モニターソースをハードラインシンクにループさせました。私の4つのコマンドを以下に示します。

注:ここでは、書式設定のために長い行をバックスラッシュで分割しています。各コマンドは、実際のコードでは1行です

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ターミナルから各コマンドを1つずつ実行すると正常に機能しますが、起動時に実行するように設定したいので、これらの行を含むbashスクリプトを作成しました。bashスクリプトを実行すると、combinedSpeakersシンクが読み込まれません。これを調べるために、私はラインをコメントアウトし、各テストdelayed_speakersremapped_bluetooth個別に。module-remap-sinkをmodule-loopbackの前に置くと、ハードラインオーディオはdelayed_speakersremapped_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するとpulseaudio[7998]: q overrun, queuing locally、100以上のメッセージと1つのメッセージが表示されます
No remapping configured, proceeding nonetheless!。この後、pulseaudioを。で再起動するまで、pactlまたはpacmdコマンドを実行できなくなります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それに切り替えて、再マッピングを構成し、最後にダミーを削除できます。