Advertisement
Guest User

Untitled

a guest
Mar 24th, 2013
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.91 KB | None | 0 0
  1. #!/bin/bash
  2. # Dependencies: pulseaudio-utils grep coreutils mawk
  3. # Based on http://blog.waan.name/pulseaudio-setting-volume-from-command-line/
  4.  
  5. # SINK_NAME="`pacmd dump | grep set-sink-volume | awk '{print $2}' | head -1`" # this is auto detect but it may break using the reset action to fix maxed volume at login
  6. SINK_NAME="alsa_output.pci-0000_00_1b.0.analog-stereo"
  7. VOL_STEP="0x01000"
  8.  
  9. function wait {
  10.     while [ -z "$VOL_NOW" ]; do
  11.         VOL_NOW=`pacmd dump | grep -P "^set-sink-volume $SINK_NAME\s+" | awk '{print $3}'`
  12.         if [ -z "$VOL_NOW" ]; then
  13.             echo "Waiting on volume to become setable (infinite loop on invalid sink name)"
  14.             sleep 0.7
  15.         fi
  16.     done
  17. }
  18.  
  19. if [ "$1" == "--help" ]; then
  20.     echo "Usage: `basename $0` [ACTION] [SINK] [STEP]"
  21.     echo "Action:"
  22.     echo "   plus      Increase volume by one step"
  23.     echo "   minus     Decrease volume by one step"
  24.     echo "   mute      Toggle volume mute status"
  25.     echo "   reset     Re-apply current volume (useful if you have maxed volume at login)"
  26.     echo "   dump      List sink name(s)"
  27.     echo "   delay     Don't exit till audio is adjustable"
  28.     echo "Sink (Optional):"
  29.     echo "   Default is '$SINK_NAME'"
  30.     echo "   Run '`basename $0` dump' for a list"
  31.     echo "Step (Optional):"
  32.     echo "   Increment to adjust volume by"
  33.     echo "   Default is '$VOL_STEP'"
  34.     echo "Note:"
  35.     echo "   Configure defaults by editing lines 3 and 4 of `dirname $0`/`basename $0`"
  36.     echo "   To set STEP and not SINK use empty quotes for SINK"
  37.     exit
  38. fi
  39.  
  40. if [ -n "$2" ]; then
  41.     SINK_NAME="$2"
  42. fi
  43. if [ -n "$3" ]; then
  44.     VOL_STEP="$3"
  45. fi
  46.  
  47. case "$1" in
  48.     plus)
  49.         wait
  50.         VOL_NEW=$((VOL_NOW + VOL_STEP))
  51.         if [ $VOL_NEW -gt $((0x10000)) ]; then
  52.             VOL_NEW=$((0x10000))
  53.         fi
  54.         pactl set-sink-volume $SINK_NAME `printf "0x%X" $VOL_NEW`
  55.     ;;
  56.     minus)
  57.         wait
  58.         VOL_NEW=$((VOL_NOW - VOL_STEP))
  59.         if [ $(($VOL_NEW)) -lt $((0x00000)) ]; then
  60.             VOL_NEW=$((0x00000))
  61.         fi
  62.         pactl set-sink-volume $SINK_NAME `printf "0x%X" $VOL_NEW`
  63.         ;;
  64.     mute)
  65.         wait
  66.         MUTE_STATE=`pacmd dump | grep -P "^set-sink-mute $SINK_NAME\s+" | awk '{print $3}'`
  67.         if [ $MUTE_STATE = no ]; then
  68.             pactl set-sink-mute $SINK_NAME 1
  69.         elif [ $MUTE_STATE = yes ]; then
  70.             pactl set-sink-mute $SINK_NAME 0
  71.         fi
  72.         ;;
  73.     reset)
  74.         wait
  75.         pactl set-sink-volume $SINK_NAME `printf "0x%X" $VOL_NOW`
  76.         ;;
  77.     delay)
  78.         wait
  79.         ;;
  80.     dump)
  81.         SINK="`pacmd dump | grep set-sink-volume | awk '{print $2}'`"
  82.         if [ -z "$SINK" ]; then
  83.             echo "Looks like you are going to have a bad day"
  84.             echo "No Sinks found"
  85.         else
  86.             echo "$SINK"
  87.         fi
  88.         ;;
  89.     *)
  90.         `dirname $0`/`basename $0` --help
  91. esac
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement