PulseAudioの入力/出力をシェルから変更しますか?

PulseAudioの入力/出力をシェルから変更しますか?

スピーカーと通常のマイクに加えて、時々使用する素晴らしいワイヤレスヘッドフォンセットがあります。

ある入力ソースと出力ソースを別のソースに切り替えるスクリプトを作成したいと思います。本質的にヘッドフォンとスピーカー+マイクを切り替えます。

私はこれを変えたい:

...これ:

2つの入力と出力間の転送をスクリプト化する方法はありますか?本質的に私は次のようなものを探しています:

CURRENT_INPUT="$(get-current-input-name)"
CURRENT_OUTPUT="$(get-current-output-name)"

if [ "$CURRENT_INPUT" == "Vengeance 2000" ]; then
    set-current-input "HD Pro Webcam C920"
else 
    set-current-input "Vengeance 2000"
fi

if ["$CURRENT_OUTPUT" == "Vengeance 2000" ]; then
    set-current-output "Built-in Audio"
else
    set-current-output "Vengeance 2000"
fi

これをスクリプトで書く方法はありますか?

ベストアンサー1

@Teresa-e-Juniorが指摘したように、pactl使用するツールは次のとおりです。

まず、PA受信機のIDを取得する必要があります。私のシステムでは、次のような結果が得られます。

$ pactl list short sinks
0       alsa_output.pci-0000_01_00.1.hdmi-surround      module-alsa-card.c      s16le 6ch 44100Hz  SUSPENDED
1       alsa_output.pci-0000_00_1b.0.analog-stereo      module-alsa-card.c      s16le 2ch 44100Hz  RUNNING

受信機1は現在私のデフォルトの受信機です。
しかし、今では、現在と将来のすべてのストリームがHDMI(例:レシーバー0)を介して再生されるようになりました。

PulseAudioのデフォルトのリスナーを設定するコマンドがありますが、私のコンピュータには何の影響もありません。

$ pacmd set-default-sink 0 #doesn't work on my PC :(

代わりに、新しいストリームは、最近ストリームが移動したシンクに接続されているように見えます。

したがって、現在再生中のすべてのストリームをシンクに移動するようにpactlに指示します0。まず、リストをリストする必要があります。

$ pactl list short sink-inputs
290     1       176     protocol-native.c       float32le 2ch 44100Hz
295     1       195     protocol-native.c       float32le 2ch 44100Hz

いいですね。 2つのストリーム(ID 290と295)があり、どちらもシンクに接続されています1
下に移動してみましょう0

$ pactl move-sink-input 290 0
$ pactl move-sink-input 295 0

だからこうする必要があります。これで私たちのために作業を行うスクリプトを書くだけです。

#!/bin/bash

if [ -z "$1" ]; then
    echo "Usage: $0 <sinkId/sinkName>" >&2
    echo "Valid sinks:" >&2
    pactl list short sinks >&2
    exit 1
fi

newSink="$1"

pactl list short sink-inputs|while read stream; do
    streamId=$(echo $stream|cut '-d ' -f1)
    echo "moving stream $streamId"
    pactl move-sink-input "$streamId" "$newSink"
done

受信者IDまたは受信者名をパラメータとして呼び出すことができます(つまり0、同様のもの)。alsa_output.pci-0000_01_00.1.hdmi-surround

これで、このスクリプトをudevイベントまたはショートカットにリンクできます。

おすすめ記事