问题
I'm using this script to change volume in pulseaudio through keybindigs, but it has a 0%
to 100%
limit.
As pulseaudio allows volume to increase over 100%
(what is still to low on my notebook), I want to adjust it to allow 140%
or 150%
max volume.
Note that by just commenting lines 105 ~ 111
the scripts works or that, but without a limit value (what can wreck my speakers). What I really want is to set a configurable limit over 100%
.
This is, actualy, more a bash
question than a pulseaudio
.
Gist with the complete script
回答1:
Just increase MAXVOL to something like 100000 (150% of its original value, 65537).
回答2:
I managed to change it by adding an new variable and to some math.
The OVERMAX
value (adjust to desired max percentage) is used to set a new percentage value. So 130%
becomes 100%
.
#!/bin/sh
# pulsevol.sh
# PulseAudio Volume Control Script
# Original 2010-05-20 - Gary Hetzel <garyhetzel@gmail.com>
#
# Modified 2010-10-18 by Fisslefink <fisslefink@gmail.com>
# - 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
Gist: https://gist.github.com/paulodiovani/67906a5bf0392de51eca
来源:https://stackoverflow.com/questions/22115643/how-to-allow-pulse-audio-script-to-increase-volume-over-100-through-bash