Như @ Teresa-e-Junior đã chỉ ra pactl
là công cụ để sử dụng:
Trước hết, chúng tôi có thể muốn lấy ID của các bồn PA của chúng tôi. Trên hệ thống của tôi đây là những gì tôi nhận được:
$ 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
Chìm 1 hiện là bồn rửa mặc định của tôi.
Nhưng bây giờ tôi muốn tất cả các luồng hiện tại và tương lai của mình sẽ được phát qua HDMI (tức là chìm 0).
Có một lệnh để đặt mức chìm mặc định cho PulseAudio, nhưng dường như nó không có bất kỳ ảnh hưởng nào đến PC của tôi:
$ pacmd set-default-sink 0 #doesn't work on my PC :(
Thay vào đó, các luồng mới dường như được kết nối với bồn rửa có luồng được chuyển đến gần đây nhất.
Vì vậy, hãy nói với pactl để di chuyển tất cả các luồng đang phát đang chìm xuống 0
. Trước tiên chúng ta cần liệt kê chúng:
$ pactl list short sink-inputs
290 1 176 protocol-native.c float32le 2ch 44100Hz
295 1 195 protocol-native.c float32le 2ch 44100Hz
Ok, chúng tôi đã có hai luồng (ID 290 và 295) đều được gắn vào chìm 1
.
Hãy di chuyển chúng để chìm 0
:
$ pactl move-sink-input 290 0
$ pactl move-sink-input 295 0
Vì vậy, đó nên là nó. Bây giờ chúng ta chỉ cần tạo một kịch bản phù hợp với chúng ta:
#!/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
Bạn có thể gọi nó bằng ID chìm hoặc tên chìm là tham số (nghĩa là 0
hoặc một cái gì đó giống như alsa_output.pci-0000_01_00.1.hdmi-surround
).
Bây giờ bạn có thể đính kèm tập lệnh này vào một sự kiện udev hoặc phím tắt.
man pactl
các tùy chọn dòng lệnh PulseAudio.