15

I have a text status bar on a tiling window manager and I am using tcl to feed information to it. At the moment I need a command line that output the volume level 0% to 100%. I am using Arch Linux.

  • Looks like you should be able to do it by parsing /var/lib/alsa/asound.state. – jordanm Sep 5 '13 at 19:22
  • Note: in the future, saying you're using Arch isn't really relevant. What actually matters is what sound subsystem you're using, e.g. ALSA, OSS or PulseAudio. – strugee Sep 5 '13 at 19:55
  • 1
    Instead of adding "closed" to your title, you should just answer your own question and leave it – jordanm Sep 5 '13 at 19:55
15

A one-liner to parse amixer's output for volume in a status bar:

awk -F"[][]" '/dB/ { print $2 }' <(amixer sget Master)
  • what does [][] mean? – approximatenumber May 24 '16 at 14:44
  • 4
    @approximatenumber It sets the field separator as either ] or [. – jasonwryan May 24 '16 at 18:38
  • Cool. I didn't know you could have a regex for the F – mihai Mar 15 '17 at 17:33
  • How would you store this command in a variable ? – mike23 Jan 16 '18 at 21:18
  • @mike23 vol=$(awk '/%/ {gsub(/[\[\]]/,""); print $4}' <(amixer sget Master)) – jasonwryan Jan 16 '18 at 21:20
11

You can use amixer to do this.

Examples

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

You can also change it and mute it like so:

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

mute/unmute

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

You can quiet the output if you don't want to see any of it with the --quiet switch.

$ amixer --quiet set Master 75%
$ 
6

Right

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

Left

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

Sound server

If you are not using pulseaudio as default you can specify to amixer what server to use with -D pulse

amixer -D pulse sget Master | grep 'Left:' | awk -F'[][]' '{ print $2 }'
85%
  • This doesn't work for me... Master for some reason doesn't have "Left" and "Right" despite other channels such as "Speaker" having it. – Michael May 3 at 20:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.