139 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			139 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!/bin/sh
 | 
						|
 | 
						|
set -xe
 | 
						|
 | 
						|
# depends on: awk, pactl, pacmd, notify-send
 | 
						|
 | 
						|
MAX_VOL=150
 | 
						|
STEP=10
 | 
						|
 | 
						|
notify() {
 | 
						|
    volume=$(get_vol_$TARGET)
 | 
						|
 | 
						|
    if is_muted_$TARGET; then
 | 
						|
        s="Muted"
 | 
						|
    else
 | 
						|
        s="Volume"
 | 
						|
    fi
 | 
						|
 | 
						|
    s=$(echo "${TARGET} ${s}" | sed 's/^\(.\)/\U\1/')
 | 
						|
 | 
						|
    notify-send "${s}" "${volume}%" \
 | 
						|
        --app-name=volumesh \
 | 
						|
        --hint=int:value:"$volume"
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
round() {
 | 
						|
    awk '{
 | 
						|
        print int($1/'$STEP')*'$STEP';
 | 
						|
    }'
 | 
						|
}
 | 
						|
 | 
						|
round_vol() {
 | 
						|
    rounded=$(get_vol_$TARGET | round)
 | 
						|
    newvol=$(min $MAX_VOL $rounded)
 | 
						|
}
 | 
						|
 | 
						|
min() {
 | 
						|
    printf '%i\n' ${@} | sort -n | head -n1
 | 
						|
}
 | 
						|
 | 
						|
# Pulse{{{
 | 
						|
get_vol_system() {
 | 
						|
    pamixer --get-volume
 | 
						|
}
 | 
						|
 | 
						|
is_muted_system() {
 | 
						|
    pamixer --get-mute >/dev/null
 | 
						|
}
 | 
						|
 | 
						|
change_vol_system() {
 | 
						|
    pamixer "-$1" "$(min 120 $2)"
 | 
						|
    round_vol
 | 
						|
    pamixer --set-volume "${newvol}"
 | 
						|
    if
 | 
						|
        test -n "$VOLUME_CHANGE_SOUND"
 | 
						|
    then
 | 
						|
        paplay "$VOLUME_CHANGE_SOUND"
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
toggle_mute_system() {
 | 
						|
    pactl set-sink-mute @DEFAULT_SINK@ toggle
 | 
						|
}
 | 
						|
#}}}
 | 
						|
# Mpd {{{
 | 
						|
 | 
						|
get_vol_mpd() {
 | 
						|
    env LC_ALL=C mpc vol |
 | 
						|
        sed -e 's/^.*://g' -e 's/%.*$//g' -e 's/ //g'
 | 
						|
}
 | 
						|
 | 
						|
is_muted_mpd() {
 | 
						|
    env LC_ALL=C mpc status | grep '\[paused\]' 1>/dev/null
 | 
						|
}
 | 
						|
change_vol_mpd() {
 | 
						|
    case $1 in
 | 
						|
        d)
 | 
						|
            op="-";;
 | 
						|
        i)
 | 
						|
            op="+";;
 | 
						|
    esac
 | 
						|
    mpc vol "${op}${2}" &>/dev/null
 | 
						|
    round_vol
 | 
						|
    mpc vol "${newvol}" &>/dev/null
 | 
						|
}
 | 
						|
 | 
						|
toggle_mute_mpd() {
 | 
						|
    mpc toggle
 | 
						|
}
 | 
						|
#}}}
 | 
						|
usage() {
 | 
						|
    local CNAME=$(basename $0)
 | 
						|
    echo "${CNAME} [-m][-di <amount>]"
 | 
						|
    echo "${CNAME} [-m][-t]"
 | 
						|
    echo ""
 | 
						|
    echo "Options:"
 | 
						|
    echo "  -m --mpd          Target mpd instead of PulseAudio"
 | 
						|
    echo "  -i --increase     <amount> of volume to increase"
 | 
						|
    echo "  -d --decrease     <amount> of volume to decrease"
 | 
						|
    echo "  -t --toggle       Mute/Unmute target"
 | 
						|
    echo "  -h --help         Show This help message"
 | 
						|
 | 
						|
    exit "$1"
 | 
						|
}
 | 
						|
TARGET=system
 | 
						|
 | 
						|
while [ $# -gt 0 ]; do
 | 
						|
    case $1 in
 | 
						|
        -m | --mpd)
 | 
						|
            TARGET=mpd
 | 
						|
            shift
 | 
						|
            ;;
 | 
						|
        -i | --increase)
 | 
						|
            shift
 | 
						|
            change_vol_$TARGET i $1
 | 
						|
            shift
 | 
						|
            ;;
 | 
						|
        -d | --decrease)
 | 
						|
            shift
 | 
						|
            change_vol_$TARGET d $1
 | 
						|
            shift
 | 
						|
            ;;
 | 
						|
        -t | --toggle)
 | 
						|
            toggle_mute_$TARGET
 | 
						|
            shift
 | 
						|
            ;;
 | 
						|
        -h | --help)
 | 
						|
            usage 0
 | 
						|
            ;;
 | 
						|
        *)
 | 
						|
            usage 1
 | 
						|
            ;;
 | 
						|
    esac
 | 
						|
done
 | 
						|
 | 
						|
notify
 | 
						|
 | 
						|
# vim: fdm=marker
 |