Как получить уровень громкости из командной строки?

15

У меня есть текстовая строка состояния в диспетчере окон, и я использую tcl для передачи информации в нее. На данный момент мне нужна командная строка, которая выводит уровень громкости от 0% до 100%. Я использую Arch Linux.

Миларепа
источник
Похоже, вы должны быть в состоянии сделать это путем анализа /var/lib/alsa/asound.state.
Иордания
Примечание: в будущем утверждение о том, что вы используете Arch, на самом деле неактуально. На самом деле важно, какую звуковую подсистему вы используете, например, ALSA, OSS или PulseAudio.
августа
1
Вместо того, чтобы добавлять «закрыто» в заголовок, вы должны просто ответить на свой вопрос и оставить его
Иордания

Ответы:

15

Однострочный анализатор amixerдля вывода объема в строке состояния:

awk -F"[][]" '/dB/ { print $2 }' <(amixer sget Master)
jasonwryan
источник
что [][]значит?
приблизительно
4
@approximatenumber Он устанавливает разделитель полей либо как ]или [.
Джейсонвриан
Здорово. Я не знал, что у тебя может быть регулярное выражение дляF
mihai
Как бы вы сохранили эту команду в переменной?
mike23
@ mike23vol=$(awk '/%/ {gsub(/[\[\]]/,""); print $4}' <(amixer sget Master))
jasonwryan
12

Вы можете использовать amixerдля этого.

Примеры

$ amixer get Master
Simple mixer control 'Master',0
  Capabilities: pvolume pswitch pswitch-joined penum
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 65536
  Mono:
  Front Left: Playback 65536 [100%] [off]
  Front Right: Playback 65536 [100%] [off]

Вы также можете изменить его и отключить звук следующим образом:

установить громкость 75%

$ amixer set Master 75%
Simple mixer control 'Master',0
  Capabilities: pvolume pswitch pswitch-joined penum
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 65536
  Mono:
  Front Left: Playback 49152 [75%] [on]
  Front Right: Playback 49152 [75%] [on]

отключения / включения микрофона

$ amixer set Master toggle
Simple mixer control 'Master',0
  Capabilities: pvolume pswitch pswitch-joined penum
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 65536
  Mono:
  Front Left: Playback 65536 [100%] [on]
  Front Right: Playback 65536 [100%] [on]

Вы можете --quietотключить вывод, если не хотите видеть его с помощью переключателя.

$ amixer --quiet set Master 75%
$ 
SLM
источник
6

Правильно

amixer sget Master | grep 'Right:' | awk -F'[][]' '{ print $2 }'
85%

Осталось

amixer sget Master | grep 'Left:' | awk -F'[][]' '{ print $2 }'
85%

Звуковой сервер

Если вы не используете pulseaudio по умолчанию, вы можете указать, amixerкакой сервер использовать с-D pulse

amixer -D pulse sget Master | grep 'Left:' | awk -F'[][]' '{ print $2 }'
85%
intika
источник
Это не работает для меня ... Мастер по некоторым причинам не имеет "Левый" и "Правый", несмотря на то, что другие каналы, такие как "Динамик", имеют его.
Майкл