Lưu ý rằng câu trả lời của Tommi Kyntola dựa vào bồn rửa đang được sử dụng để bạn thực sự có thể có được số chìm.
Cũng lưu ý rằng nó phụ thuộc vào các chỉ số chìm được đặt tên giống với chỉ số được tính . Ví dụ, giả sử chúng ta có 3 bồn 1, 2 và 3 và 3 là bồn được chọn, sau đó chúng ta ngắt kết nối số 2, để lại cho chúng ta 1 và 3. Bây giờ bạn không thể đếm đến chìm 3 với giải pháp của Tommi Kyntola vì pactl list sinks | grep "^[[:space:]]Volume:"
sẽ chỉ xuất 2 trường Âm lượng, do đó chuyển sang đầu / đuôi để có được $SINK + 1
dòng thứ 'sẽ không hoạt động. (Tôi đã trải nghiệm irl này, tôi không chỉ là nitpicking)
Giải pháp của tôi hoạt động dựa trên giả định rằng pacmd sẽ luôn liệt kê các mức chìm theo một thứ tự cụ thể. Nếu bạn muốn một giải pháp đáng tin cậy hơn, bạn cần phân tích đầu ra.
#!/bin/sh
# Get the index of the selected sink:
getsink() {
pacmd list-sinks |
awk '/index:/{i++} /* index:/{print i; exit}'
}
# Get the selected sink volume
getvolume() {
pacmd list-sinks |
awk '/^\svolume:/{i++} i=='$(getsink)'{print $5; exit}'
}
getvolume
Lưu ý: Tôi không biết liệu các trường âm lượng có khác nhau không, trường của tôi trông như thế này (từ pacmd list-sinks
):
volume: front-left: 42706 / 65% / -11.16 dB, front-right: 42706 / 65% / -11.16 dB
Ngoài ra, tôi chỉ nhận âm lượng của kênh đầu tiên (phía trước bên trái) ở định dạng tỷ lệ phần trăm (tức là trường 5), các kênh của bạn có thể ở các mức khác nhau.
CHỈNH SỬA:
Về ý nghĩ thứ hai, có lẽ bạn thực sự muốn lấy tên chìm mặc định pacmd stat
cho một giải pháp ít phức tạp hơn:
#/bin/sh
getdefaultsinkname() {
pacmd stat | awk -F": " '/^Default sink name: /{print $2}'
}
getdefaultsinkvol() {
pacmd list-sinks |
awk '/^\s+name: /{indefault = $2 == "<'$(getdefaultsinkname)'>"}
/^\s+volume: / && indefault {print $5; exit}'
}
setdefaulsinkvol() {
pactl $(getdefaultsinkname) $1
}
pactl list sinks
cung cấp cho bạn âm lượng, nhưng không phải ở một định dạng dễ dàng như set-chìm-volume.