パルスオーディオで2つのスピーカーを再マッピングして結合するときに発生する問題

パルスオーディオで2つのスピーカーを再マッピングして結合するときに発生する問題

私はBluetoothスピーカーのペアとラインであるスピーカーのペアを持っていますが、2つを同時に再生しようとしています。どちらのゲームも接続してプレイするのに問題はありませんでしたが、接続すると多くの問題が発生しました。また、Bluetoothスピーカーの設定が反転し、正しい位置に合わせて再マッピングしています。

私はpulseaudioを使ってスピーカーを反転させ、コンボスピーカーの使い方を説明するmodule-remap-sinkいくつかのスレッドを見ましたmodule-combine-sink。また、Bluetoothレイテンシーを考慮して有線スピーカーに遅延を追加したかったので、1つを追加してリスニングソースを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_speakersを個別にテストしましたremapped_bluetooth。 module-loopbackの前にmodule-remap-sinkを挿入すると、ハードワイヤードオーディオは出力(正しい再マッピングを含む)を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 pulseaudio100以上のメッセージ pulseaudio[7998]: q overrun, queuing locallyと1つのメッセージが表示されます
No remapping configured, proceeding nonetheless!。その後、pulseaudioを使用してpulseaudioを再起動するまで、これ以上pactlコマンドを実行することはできません。pacmdsudo pkill -9 pulseaudio

編集:default.paファイルにモジュールローディングを追加できることを知っていますが、ファイルの実行時にBluetoothスピーカーが接続されず、モジュールローディングが失敗するため、私の場合は機能しません。

答え1

私はこれを見つけました。その結果、失敗はシナリオではなく偶然の一致でした。module-remap-sinkプライマリ受信機で使用しようとするたびに不具合が発生します。この失敗は自動的に発生し、pacmdは正常に存在します。set-default新しくマッピングされた受信機を使用する場合、またはそれを含む結合された受信機を作成しようとした場合にのみ、パルスオーディオが応答しなくなります。

回避策:pacmd set-default-sink 0使用する前に使用してくださいmodule-remap-sink(該当する受信機が受信機0の場合は別のインデックスを使用してください)。問題の受信機が唯一の受信機である場合は、ダミー受信機を作成し、対応する受信機に切り替え、再pacmd load-module module-null-sinkマッピングを設定し、最後にダミー受信機を削除できます。

答え2

ちなみに、シンクの代わりにソースを再マップしようとすると、同じ問題が発生します。

ソースとして同じことを行うとうまくいきます。

pactl load-module module-null-source source_name=dummy-temp-source
pactl set-default-source dummy-temp-source

その後、すべてのソース再マッピングコマンドを実行します。途中で余分な睡眠を取る必要はありません!

最後に作成したソースの1つに切り替えます。

pactl set-default-source my-newly-created-source

一時削除して

pactl unload-module module-null-source

注:このモジュールmodule-null-sourceパルスオーディオモジュールドキュメント。理由が気になりました。

評判が足りないので投票できませんが、@scott-driggersに感謝します!何かがシェルで動作しますが、スクリプトのコンテキストでは動作せずに睡眠を追加する愚かな方法を経験しているという事実は本当に混乱しています...

関連情報