我設法改變它通過添加一個新的變量和一些數學。
OVERMAX
值(調整到所需的最大百分比)用於設置新的百分比值。所以130%
變成100%
。
#!/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
#MAXVOL=`pacmd list-sinks | grep "volume steps" | cut -d: -f2 | tr -d "[:space:]"`
OVERMAX=130 # how much the volume can raise over 100%
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))"
MAXCHECK="$(($MAXVOL * $OVERMAX/100 ))"
if [ -z $SKIPOVERCHECK ]; then
if [ $VOLUME -gt $MAXCHECK ]; then
VOLUME=$MAXCHECK
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:]"`
VOLPERC="$(($VOLPERC * 100/$OVERMAX))"
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
要點:https://gist.github.com/paulodiovani/67906a5bf0392de51eca
它不工作。任何超過65537的MAXVOL值都會導致VOLSTEP超過100%,計算VOLUME時會增加很多。這種方式容易超過200%,不能降低。 – paulodiovani