rework volume control
This commit is contained in:
56
usr/bin/x-volume
Executable file
56
usr/bin/x-volume
Executable file
@@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
# the amount to increase / decrease each time
|
||||
[ -z "$AMOUNT" ] && AMOUNT=5
|
||||
|
||||
# utility for sending notifications easily
|
||||
notify() {
|
||||
notify-send "$@" -h string:x-dunst-stack-tag:'audioctl' -a 'audioctl'
|
||||
}
|
||||
|
||||
# get current volume information
|
||||
vol_str="$(wpctl get-volume @DEFAULT_AUDIO_SINK@)"
|
||||
|
||||
# Remove leading non-numeric or zero characters, then remove remaining non-numeric characters.
|
||||
# NOTE: if zero (0.00), the string will be empty. This is fine for arithmetic operations.
|
||||
vol_int="$(echo "$vol_str" | sed 's/^[^1-9]*//; s/[^0-9]//g')"
|
||||
|
||||
# if the string contains MUTED, set the variable accordion
|
||||
case "$vol_str" in
|
||||
*MUTED*) vol_off=1 ;;
|
||||
*) vol_off=0 ;;
|
||||
esac
|
||||
|
||||
# handle what action to perform from the argument
|
||||
echo $vol_off
|
||||
case $1 in
|
||||
up) vol_int=$((vol_int + AMOUNT)) ;;
|
||||
down) vol_int=$((vol_int - AMOUNT)) ;;
|
||||
mute) vol_off=$((!vol_off)) ;;
|
||||
*)
|
||||
echo 'E: could not decide what audio action to perform!' >&2
|
||||
notify 'could not decide what audio action to perform!' -u critical -t 5000
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
vol_int=$((vol_int - (vol_int % AMOUNT)))
|
||||
vol_pcnt=$(echo "scale = 2; $vol_int / 100;" | bc)
|
||||
|
||||
echo $vol_off
|
||||
wpctl set-volume @DEFAULT_AUDIO_SINK@ "$vol_pcnt"
|
||||
wpctl set-mute @DEFAULT_AUDIO_SINK@ "$vol_off"
|
||||
|
||||
play -n synth 0.005 sine 1000 vol 0.2 2>/dev/null
|
||||
|
||||
if [ "$vol_int" -eq 0 ] || [ "$vol_off" -eq 1 ]; then
|
||||
ico=audio-volume-muted
|
||||
elif [ "$vol_int" -lt 33 ]; then
|
||||
ico=audio-volume-low
|
||||
elif [ "$vol_int" -lt 66 ]; then
|
||||
ico=audio-volume-medium
|
||||
else
|
||||
ico=audio-volume-high
|
||||
fi
|
||||
|
||||
str="volume: $vol_int% $([ $vol_off -eq 1 ] && printf '(MUTE)')"
|
||||
notify -i "$ico" -u low -h "int:value:$vol_int" "$str"
|
||||
Reference in New Issue
Block a user