Last active
February 24, 2020 14:02
-
-
Save paulodiovani/9290420 to your computer and use it in GitHub Desktop.
Volume control script for pulseaudio
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# pulsevol.sh | |
# PulseAudio Volume Control Script | |
# Original 2010-05-20 - Gary Hetzel <[email protected]> | |
# | |
# Modified 2010-10-18 by Fisslefink <[email protected]> | |
# - Added support for multiple sinks and Ubuntu libnotify OSD | |
# | |
# Usage: pulsevol.sh [sink_index] [up|down|min|max|overmax|toggle|mute|unmute] | |
# | |
EXPECTED_ARGS=2 | |
E_BADARGS=65 | |
if [ $# -ne $EXPECTED_ARGS ] | |
then | |
echo "Usage: `basename $0` [sink_index] [up|down|min|max|overmax|toggle|mute|unmute]" | |
exit $E_BADARGS | |
fi | |
SINK=$1 | |
STEP=5 | |
MAXVOL=65537 # let's just assume this is the same all over | |
getperc(){ | |
VOLPERC=`pacmd list-sinks | grep "volume" | head -n1 | cut -d: -f3 | cut -d% -f1 | tr -d "[:space:]"` | |
} | |
getperc; | |
up(){ | |
VOLSTEP="$(( $VOLPERC+$STEP ))"; | |
} | |
down(){ | |
VOLSTEP="$(( $VOLPERC-$STEP ))"; | |
} | |
max(){ | |
pacmd set-sink-volume $SINK $MAXVOL > /dev/null | |
} | |
min(){ | |
pacmd set-sink-volume $SINK 0 > /dev/null | |
} | |
overmax(){ | |
SKIPOVERCHECK=1 | |
if [ $VOLPERC -lt 100 ]; then | |
max; | |
exit 0; | |
fi | |
up | |
} | |
mute(){ | |
pacmd set-sink-mute $SINK 1 > /dev/null | |
notify-send " " -i "notification-audio-volume-muted" -h int:value:0 -h string:synchronous:volume | |
} | |
unmute(){ | |
VOLSTEP="$(( $VOLPERC-0 ))"; | |
SKIPOVERCHECK=1 | |
pacmd set-sink-mute $SINK 0 > /dev/null | |
} | |
toggle(){ | |
M=`pacmd list-sinks | grep "muted" | cut -d: -f2 | tr -d "[:space:]"` | |
if [ "$M" = "no" ]; then | |
mute | |
exit 0; | |
else | |
unmute; | |
fi | |
} | |
case $2 in | |
up) | |
up;; | |
down) | |
down;; | |
max) | |
max | |
exit 0;; | |
min) | |
min | |
exit 0;; | |
overmax) | |
overmax;; | |
toggle) | |
toggle;; | |
mute) | |
mute; | |
exit 0;; | |
unmute) | |
unmute;; | |
*) | |
echo "Usage: `basename $0` [sink_index] [up|down|min|max|overmax|toggle|mute|unmute]" | |
exit 1;; | |
esac | |
VOLUME="$(( ($MAXVOL/100) * $VOLSTEP ))" | |
if [ -z $SKIPOVERCHECK ]; then | |
if [ $VOLUME -gt $MAXVOL ]; then | |
VOLUME=$MAXVOL | |
elif [ $VOLUME -lt 0 ]; then | |
VOLUME=0 | |
fi | |
fi | |
pacmd set-sink-volume $SINK $VOLUME > /dev/null | |
VOLPERC=`pacmd list-sinks | grep "volume" | head -n1 | cut -d: -f3 | cut -d% -f1 | tr -d "[:space:]"` | |
if [ "$VOLPERC" = "0" ]; then | |
icon_name="notification-audio-volume-off" | |
else | |
if [ "$VOLPERC" -lt "33" ]; then | |
icon_name="notification-audio-volume-low" | |
else | |
if [ "$VOLPERC" -lt "67" ]; then | |
icon_name="notification-audio-volume-medium" | |
else | |
icon_name="notification-audio-volume-high" | |
fi | |
fi | |
fi | |
notify-send " " -i $icon_name -h int:value:$VOLPERC -h string:synchronous:volume |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment