Skip to content

Instantly share code, notes, and snippets.

@trustin
Created June 13, 2013 07:43
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save trustin/5771905 to your computer and use it in GitHub Desktop.
Save trustin/5771905 to your computer and use it in GitHub Desktop.
Volume control script for PulseAudio
#!/bin/bash
SINK="`pactl info | grep -P '^Default Sink: ' | sed 's/[^:]\+:\s\+//'`"
[[ -z "$SINK" ]] && exit 1
if [[ "$SINK" =~ DragonFly ]]; then
INCR='24'
MIN_VOLUME=65050
MAX_VOLUME=65146
else
INCR='2%'
MIN_VOLUME=0
MAX_VOLUME=65536
fi
function volume() {
VOLUME="`pacmd dump | grep -P '^set-sink-volume.*\s+0x[1-9a-f][0-9a-f]*$'`"
echo "$VOLUME" | grep -qF "$SINK"
if [[ $? -eq 0 ]]; then
VOLUME="`echo "$VOLUME" | grep -oP '0x[1-9a-f][0-9a-f]*$'`"
printf "%d\n" "$VOLUME"
else
echo 0
fi
unset VOLUME
}
volume
if [[ -z "$1" ]]; then
echo "Usage: $0 <up | down | mute | unmute | toggle>"
exit 1
fi
case "$1" in
up)
pactl -- set-sink-volume "$SINK" "+$INCR"
VOLUME="`volume`"
if [[ $VOLUME -gt $MAX_VOLUME ]]; then
pactl -- set-sink-volume "$SINK" "$MAX_VOLUME"
fi
;;
down)
pactl -- set-sink-volume "$SINK" "-$INCR"
VOLUME="`volume`"
if [[ $VOLUME -lt $MIN_VOLUME ]]; then
pactl -- set-sink-volume "$SINK" "$MIN_VOLUME"
fi
;;
mute)
pactl -- set-sink-mute "$SINK" 1
;;
unmute)
pactl -- set-sink-mute "$SINK" 0
;;
toggle)
MUTED="`pacmd dump | grep -P '^set-sink-mute.*\s+yes$'`"
echo "$MUTED" | grep -qF "$SINK"
if [[ $? -eq 0 ]]; then
pactl -- set-sink-mute "$SINK" 0
else
pactl -- set-sink-mute "$SINK" 1
fi
;;
*)
echo "Unknown command: $1"
exit 1
;;
esac
volume
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment