Обратите внимание, что ответ Tommi Kyntola зависит от использования приемника, чтобы вы могли получить номер приемника.
Также обратите внимание, что он полагается, что именованные индексы приемника совпадают с подсчитанным индексом. Скажем, например, у нас есть 3 приемника 1, 2 и 3, и что 3 - это выбранный приемник, затем мы отключаем номер 2, оставляя нам 1 и 3. Теперь вы не можете рассчитывать на приемник 3 с решением Томми Кинтолы, потому что pactl list sinks | grep "^[[:space:]]Volume:"
будет выводить только 2 поля громкости, таким образом, трубопровод к голове / хвосту, чтобы получить $SINK + 1
'-ю линию, не будет работать. (Я испытал этот ирл, я не просто придираюсь)
Мое решение работает на основе предположения, что pacmd всегда будет перечислять приемники в определенном порядке. Если вы хотите более надежное решение, вам нужно проанализировать вывод.
#!/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
Примечание: я не знаю, отличаются ли поля объема, мое выглядит так (с pacmd list-sinks
):
volume: front-left: 42706 / 65% / -11.16 dB, front-right: 42706 / 65% / -11.16 dB
Также я получаю только громкость первого канала (передний левый) в процентном формате (т. Е. Поле 5), ваши каналы могут быть на разных уровнях.
РЕДАКТИРОВАТЬ:
Если подумать, вы, вероятно, действительно хотите получить имя приемника по умолчанию pacmd stat
для менее сложного решения:
#/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
дает вам объем, но не в таком удобном формате, как set-sink-volume.