Я хочу зачитать уровень громкости, который могу установить
pactl set-sink-volume $SINK $VOLUME
Есть ли простой способ сделать это? Так легко, как гипотетически
pactl get-sink-volume $SINK
?
(Что я пытаюсь сделать? Я использую pactl для установки громкости, и это позволяет мне устанавливать громкость выше 100%, что является плохой идеей (качество звука снижается), поэтому я думаю о написании небольшого сценария, который будет не превышайте 100%. Прочитайте это. За некоторый порог? Установите на 100%. Ниже - добавьте 1%. Если есть другой способ сделать это, отлично, скажите мне! Самое чистое решение, вероятно, скажет пульс просто остановиться. на 100%. Но оригинальный вопрос остается, должен быть какой-то путь ..)
Я на Debian, если это что-то меняет.
command-line
pulseaudio
Higemaru
источник
источник
pactl list sinks
дает вам объем, но не в таком удобном формате, как set-sink-volume.Ответы:
Вот что у меня есть. Это не опрятно, но этого было достаточно для моего использования. Я не мог найти способ сделать это.
pactl
Просто , кажется, не имеют каких - либо средств получения листинга на один тонет только, но они печатаются в порядке возрастания. Так что выбирает n-ю строку, используяtail
иhead
. Обратите внимание, что в строке громкости могут быть отдельные громкости для правого и левого каналов, и этаsed
замена выбирает только первый, потому что мне нужно было только это.Для записи я использую,
pactl list sinks short
чтобы получить мой активный номер приемника:РЕДАКТИРОВАТЬ 2017-10-05: Мне пришлось немного подправить их из-за изменений в pulseaudio. Вот что у меня сейчас:
Я
MOD
установил +10 или -10, и я делаю некоторые проверки границ и, наконец,:источник
pactl list sinks short | grep RUNNING | sed -e 's,^\([0-9][0-9]*\)[^0-9].*,\1,'
- Добавленоsinks
междуpactl list
иshort
LC_ALL=C pactl list sinks | grep
потому что текст «Volume:» может быть локализован на язык пользователя.volume=$(pactl list sinks | grep Volume | head -n1 | awk '{print $5}')
Если у вас нет ограничений на использование другой программы, есть
pamixer
.Вы можете получить объем с:
источник
pulsemixer
пакет. Это выглядит примерно так же.Обратите внимание, что ответ Tommi Kyntola зависит от использования приемника, чтобы вы могли получить номер приемника.
Также обратите внимание, что он полагается, что именованные индексы приемника совпадают с подсчитанным индексом. Скажем, например, у нас есть 3 приемника 1, 2 и 3, и что 3 - это выбранный приемник, затем мы отключаем номер 2, оставляя нам 1 и 3. Теперь вы не можете рассчитывать на приемник 3 с решением Томми Кинтолы, потому что
pactl list sinks | grep "^[[:space:]]Volume:"
будет выводить только 2 поля громкости, таким образом, трубопровод к голове / хвосту, чтобы получить$SINK + 1
'-ю линию, не будет работать. (Я испытал этот ирл, я не просто придираюсь)Мое решение работает на основе предположения, что pacmd всегда будет перечислять приемники в определенном порядке. Если вы хотите более надежное решение, вам нужно проанализировать вывод.
Примечание: я не знаю, отличаются ли поля объема, мое выглядит так (с
pacmd list-sinks
):Также я получаю только громкость первого канала (передний левый) в процентном формате (т. Е. Поле 5), ваши каналы могут быть на разных уровнях.
РЕДАКТИРОВАТЬ:
Если подумать, вы, вероятно, действительно хотите получить имя приемника по умолчанию
pacmd stat
для менее сложного решения:источник
pactl set-sink-volume $(getdefaultsinkname) "$1"
для получения тома я пытаюсь это:
источник
Многоязычный вариант:
Протестировано на pactl 5.0
источник
Поскольку я пока не могу комментировать (специально для улучшения ответа @ jgr), в случае, если ваш приемник по умолчанию является плагином (как любое количество плагинов ladspa), его решение для редактирования вернет XX% (обратите внимание на запятую ), так что это работает немного лучше, чем это. Извините, мой awk-fu очень простой, я уверен, что есть лучший способ сделать это.
Модифицированное решение также пропускает '%', так как я не вижу смысла в его сохранении, и если мы возвращаем только число, мы можем использовать его в математике. Также исправлен случай setvol, который требует конкретных инструкций в моем случае.
источник
Вы можете использовать
amixer
для считывания громкости импульса с помощью опции микшера, подобной этой.Теперь мы можем разобрать это используя
grep
илиsed
илиperl
.источник