Como obter o nível de volume na linha de comando?

15

Eu tenho uma barra de status de texto em um gerenciador de janelas lado a lado e estou usando o tcl para fornecer informações a ele. No momento, preciso de uma linha de comando que produza o nível de volume de 0% a 100%. Estou usando o Arch Linux.

milarepa
fonte
Parece que você deve conseguir fazer isso analisando /var/lib/alsa/asound.state.
jordanm
Nota: no futuro, dizer que você está usando o Arch não é realmente relevante. O que realmente importa é o subsistema de som que você está usando, por exemplo, ALSA, OSS ou PulseAudio.
strugee
1
Em vez de adicionar "fechado" para o seu título, você deve apenas responder à sua própria pergunta e deixá-lo
jordanm

Respostas:

15

Uma linha para analisar amixera saída do volume em uma barra de status:

awk -F"[][]" '/dB/ { print $2 }' <(amixer sget Master)
jasonwryan
fonte
o que [][]significa
Aproximadamente
4
@approximatenumber Define o separador de campos como ]ou [.
Jasonwryan
Legal. Eu não sabia que você poderia ter um regex para oF
mihai 15/03
Como você armazenaria esse comando em uma variável?
precisa saber é
@ mike23vol=$(awk '/%/ {gsub(/[\[\]]/,""); print $4}' <(amixer sget Master))
jasonwryan
12

Você pode usar amixerpara fazer isso.

Exemplos

$ 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]

Você também pode alterar e desativar o som da seguinte forma:

definir volume 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]

mudo / mudo

$ 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]

Você pode silenciar a saída se não quiser ver nada com a --quietchave.

$ amixer --quiet set Master 75%
$ 
slm
fonte
6

Certo

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

Esquerda

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

Servidor de som

Se você não estiver usando o pulseaudio como padrão, poderá especificar em amixerqual servidor usar-D pulse

amixer -D pulse sget Master | grep 'Left:' | awk -F'[][]' '{ print $2 }'
85%
intika
fonte
Isso não funciona para mim ... O Master, por algum motivo, não possui "Left" e "Right", apesar de outros canais como "Speaker".
Michael