スピーカーと通常のマイクに加えて、時々使用する素晴らしいワイヤレスヘッドフォンセットがあります。
ある入力ソースと出力ソースを別のソースに切り替えるスクリプトを作成したいと思います。本質的にヘッドフォンとスピーカー+マイクを切り替えます。
私はこれを変えたい:
...これ:
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イベントまたはショートカットにリンクできます。