aboutsummaryrefslogtreecommitdiffstats
path: root/bin/set_volume
diff options
context:
space:
mode:
Diffstat (limited to 'bin/set_volume')
-rwxr-xr-xbin/set_volume142
1 files changed, 142 insertions, 0 deletions
diff --git a/bin/set_volume b/bin/set_volume
new file mode 100755
index 0000000..1652312
--- /dev/null
+++ b/bin/set_volume
@@ -0,0 +1,142 @@
+#!/usr/bin/env bash
+
+FUNCTIONS=$HOME/bin/functions.sh
+[ -e $FUNCTIONS ] || exit 1
+. $FUNCTIONS
+
+state_muted="/tmp/$(whoami)/state_muted"
+state_muted_headphone=""
+state_muted_speaker=""
+state_bt_headphone=""
+name_bt_headphone="bluez_sink.00_1B_66_02_36_41"
+cardselector=""
+card_icon="/usr/share/icons/gnome/48x48/devices/audio-speakers.png" # gnome-icon-theme
+
+function increase_volume()
+{
+ mute amixer $cardselector sset Master 5%+
+ local state_master=$(amixer $cardselector sget Master |grep "%" | cut -d'%' -f1 | cut -d '[' -f2 | uniq)
+ #update pactl bluetooth audio to same level if present
+ if [ $state_bt_headphone = "[on]" ];then
+ pactl set-sink-volume $name_bt_headphone "$state_master%"
+ fi
+ print_volumes $state_master
+}
+
+function decrease_volume()
+{
+ mute amixer $cardselector sset Master 5%-
+ local state_master=$(amixer $cardselector sget Master |grep "%" | cut -d'%' -f1 | cut -d '[' -f2 | uniq)
+ #update pactl bluetooth audio to same level if present
+ if [ $state_bt_headphone = "[on]" ];then
+ pactl set-sink-volume $name_bt_headphone "$state_master%"
+ fi
+ print_volumes $state_master
+}
+
+function print_volumes()
+{
+ local state_master=$1
+ local state_headphone=$(amixer $cardselector sget Headphone |grep "%" | cut -d'%' -f1 | cut -d '[' -f2 | uniq)
+ local state_speaker=$(amixer $cardselector sget Speaker |grep "%" | cut -d'%' -f1 | cut -d '[' -f2 | uniq)
+ if [ $state_bt_headphone = "[on]" ]; then
+ send_notify "Master: $state_master% \nHeadphone: $state_headphone% \nSpeaker: $state_speaker%\nBT Headphone: $state_master%"
+ else
+ send_notify "Master: $state_master% \nHeadphone: $state_headphone% \nSpeaker: $state_speaker%"
+ fi
+}
+
+function toggle_volume()
+{
+ local state_master=$(amixer $cardselector sget Master | grep -o '\[o[n|f]*\]' | head -n 1)
+ local state_headphone=$(amixer $cardselector sget Headphone | grep -o '\[o[n|f]*\]' | head -n 1)
+ local state_speaker=$(amixer $cardselector sget Speaker | grep -o '\[o[n|f]*\]' | head -n 1)
+ case "$state_master" in
+ "[on]")
+ mute amixer $cardselector sset Master mute
+ state_master="[off]"
+ # if headphones are off already, don't mute, instead save state to tmp file
+ if [ "$state_headphone" = "[off]" ];then
+ echo "headphone [off]" >> "$state_muted"
+ else
+ mute amixer $cardselector sset Headphone mute
+ state_headphone="[off]"
+ fi
+ # if speakers are off already, don't mute, instead save state to tmp file
+ if [ "$state_speaker" = "[off]" ];then
+ echo "speaker [off]" >> "$state_muted"
+ else
+ mute amixer $cardselector sset Speaker mute
+ state_speaker="[off]"
+ fi
+ # if present, also mute bluetooth headphone
+ if [ $state_bt_headphone = "[on]" ]; then
+ pactl set-sink-mute $name_bt_headphone 1
+ fi
+ ;;
+ "[off]")
+ mute amixer $cardselector sset Master unmute
+ state_master="[on]"
+ # if headphones are meant to be off, don't unmute them again
+ if [ "$state_muted_headphone" != "[off]" ];then
+ mute amixer $cardselector sset Headphone unmute
+ state_headphone="[on]"
+ fi
+ # if headphones are meant to be off, don't unmute them again
+ if [ "$state_muted_speaker" != "[off]" ];then
+ mute amixer $cardselector sset Speaker unmute
+ state_speaker="[on]"
+ fi
+ # if present, also unmute bluetooth headphone
+ if [ $state_bt_headphone = "[on]" ]; then
+ pactl set-sink-mute $name_bt_headphone 0
+ fi
+ ;;
+ esac
+ if [ $state_bt_headphone = "[on]" ]; then
+ send_notify "Master: $state_master \nHeadphone: $state_headphone \nSpeaker: $state_speaker\nBT Headphone: $state_master" 2000
+ else
+ send_notify "Master: $state_master \nHeadphone: $state_headphone \nSpeaker: $state_speaker" 2000
+ fi
+}
+
+function send_notify()
+{
+ # allow timeout to be set by 2nd argument
+ local timeout=500
+ if [ $2 -gt 0 ]; then
+ timeout=$2
+ fi
+ notify-send -t $timeout \
+ -i /usr/share/icons/gnome/48x48/devices/audio-speakers.png \
+ "Volume" "$1"
+}
+
+if [ $HOSTNAME = "dvzrv" ];then
+ cardselector=" -M -c 1 "
+ if [ -n "$(pactl list sinks short | grep $name_bt_headphone)" ]; then
+ state_bt_headphone="[on]"
+ fi
+ #TODO: also check pactl for JACK sink
+fi
+
+case "$1" in
+ increase)
+ increase_volume
+ ;;
+ decrease)
+ decrease_volume
+ ;;
+ toggle)
+ if [ -f "$state_muted" ]; then
+ state_muted_headphone=$(cat "$state_muted" | grep headphone | cut -d' ' -f2)
+ state_muted_speaker=$(cat "$state_muted" | grep speaker | cut -d' ' -f2)
+ rm "$state_muted"
+ else
+ touch "$state_muted"
+ fi
+ toggle_volume
+ ;;
+ *)
+ ;;
+esac