@ 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のデフォルトシンクを設定するコマンドがありますが、私のPCには影響がないようです。
$ pacmd set-default-sink 0 #doesn't work on my PC :(
代わりに、最近ストリームが移動されたシンクに新しいストリームが接続されているようです。
したがって、現在再生中のすべてのストリームをsinkに移動するように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
OK、2つのストリーム(ID 290および295)があり、両方ともsinkに接続されています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イベントまたはキーショートカットに添付できます。
man pactl
PulseAudioのコマンドラインオプションをご覧ください。