a lot of applications seem to hardcode this location, so it's better to have something default, or default-adjasoned.
57 lines
1.6 KiB
Bash
Executable File
57 lines
1.6 KiB
Bash
Executable File
#!/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"
|