commit
					8ffd810a4f
				
				 5 changed files with 151 additions and 0 deletions
			
			
		| @ -0,0 +1,11 @@@@ -0,0 +1,11 @@ | ||||
| This is a small pulseaudio script library, written to be used with keyboard shortcuts. However, it can also help in command line audio control. | ||||
| 
 | ||||
| IMPORTANT: set_all_sink.sh sources a file called sink_names.sh, this file should define a variable named $bluetooth_sink_name containing the identifying string for a specific device (i.e. the MAC address) like this: | ||||
| 
 | ||||
| #sink_names.sh | ||||
| #!/bin/bash | ||||
| 
 | ||||
| bluetooth_sink_name="00_00_00_00_00_00" | ||||
| 
 | ||||
| To change the audio output device, use set_all_sink.sh | ||||
| To change the master volume, use set_current_sink_volume.sh | ||||
| @ -0,0 +1,40 @@@@ -0,0 +1,40 @@ | ||||
| #!/bin/bash | ||||
| 
 | ||||
| source stdlib.sh | ||||
| source sink_names.sh | ||||
| 
 | ||||
| while getopts 'vs' opt ; do | ||||
|    case "$opt" in | ||||
|       v) verbosity=VERBOSE ;; | ||||
|       s) verbosity=SILENT ;; | ||||
|    esac | ||||
| done | ||||
| 
 | ||||
| newSink=${@:$OPTIND:1} | ||||
| 
 | ||||
| if [ -z "$newSink" ]; then | ||||
|    error "Usage: $0 [OPTION] <sinkId/sinkName>" | ||||
|    error " -v     print verbose output" | ||||
|    error " -s     don't print any output" | ||||
|    error "Valid sinks:" | ||||
|    error "$(pactl list short sinks)" | ||||
|    exit 1 | ||||
| fi | ||||
| 
 | ||||
| case "$newSink" in | ||||
|    'bluetooth') | ||||
|       newSink=`pactl list short sinks | grep "$bluetooth_sink_name" | cut -f 1` ;; | ||||
|    'analog') | ||||
|       newSink=`pactl list short sinks | grep analog-stereo | cut -f 1` ;; | ||||
|    'hdmi') | ||||
|       newSink=`pactl list short sinks | grep hdmi-stereo-extra1 | cut -f 1` ;; | ||||
| esac | ||||
| 
 | ||||
| 
 | ||||
| pactl list short sink-inputs 2> >(error) |while read stream; do | ||||
|    streamId=$(echo $stream|cut '-d ' -f1) | ||||
|    log "moving stream $streamId" | ||||
|    pactl move-sink-input "$streamId" "$newSink" > >(log) 2> >(error)  | ||||
| done | ||||
| 
 | ||||
| pacmd set-default-sink "$newSink" > >(log) 2> >(error) # to change toolbar item | ||||
| @ -0,0 +1,67 @@@@ -0,0 +1,67 @@ | ||||
| #!/bin/bash | ||||
| 
 | ||||
| source stdlib.sh | ||||
| 
 | ||||
| while getopts 'vsasp' opt ; do | ||||
|    case "$opt" in | ||||
|       v) verbosity=VERBOSE ;; | ||||
|       q) verbosity=QUIET;; | ||||
|       a) relative=ADD;; | ||||
|       s) relative=SUBTRACT;; | ||||
|       p) percentage=true ;; | ||||
|    esac | ||||
| done | ||||
| 
 | ||||
| value=${@:$OPTIND:1} | ||||
| log "value: ${value}" | ||||
| 
 | ||||
| if [ -z "$value" ]; then | ||||
|     error "Usage: $0 [OPTION] <volume>" | ||||
|     error " -v     print verbose output" | ||||
|     error " -q     quiet; don't print any output" | ||||
|     error " -a     relative; add value to current volume" | ||||
|     error " -s     relative; subtract value from current volume" | ||||
|     error " -p     interpret value as a percentage instead of an abosolute value" | ||||
|     exit 1 | ||||
| fi | ||||
| 
 | ||||
| default_sink=`pactl info 2> >(error) | grep "Default Sink" | cut -d ' ' -f 3` | ||||
| default_sink_id=`pactl list sinks short | grep "$default_sink" | cut -f 1` | ||||
| log "default sink: #${default_sink_id}: ${default_sink}" | ||||
| 
 | ||||
| if [ -n "$relative" ]; then | ||||
|    if [ "$percentage" = 'true' ]; then | ||||
|       current_percentage=`pactl list sinks 2> >(error) | grep '^[[:space:]]Volume:' | head -n $(( ${default_sink_id} + 1 )) | tail -n 1 | sed -e 's,.* \([0-9][0-9]*\)%.*,\1,'` | ||||
|       log "current percentage: ${current_percentage}" | ||||
|       value_percentage=$(echo "scale=2; "$value" / 65536 * 100" | bc 2> >(error) ) | ||||
|       log "value percentage: ${value_percentage}" | ||||
| 
 | ||||
|       if [ "$relative" = 'ADD' ]; then | ||||
|          value=$((current_percentage + value )) | ||||
|       elif [ "$relative" = 'SUBTRACT' ]; then | ||||
|          value=$((current_percentage - value )) | ||||
|       fi | ||||
|       log "new percentage: ${value}" | ||||
|    else | ||||
|       current_volume=`pactl list sinks 2> >(error) | grep '^[[:space:]]Volume:' | head -n $(( ${default_sink_id} + 1 )) | tail -n 1 | cut -d ' ' -f 3` | ||||
|       log "current volume: ${current_volume}" | ||||
| 
 | ||||
|       if [ "$relative" = 'ADD' ]; then | ||||
|          value=$((current_volume + value)) | ||||
|       elif [ "$relative" = 'SUBTRACT' ]; then | ||||
|          value=$((current_volume - value)) | ||||
|       fi | ||||
|       log "new volume: ${value}" | ||||
|    fi | ||||
| fi | ||||
| 
 | ||||
| if [ "$percentage" = 'true' ]; then | ||||
|    value=$(echo "scale=2; 65536 * ("$value" / 100)" | bc 2> >(error) ) | ||||
|    log "new volume: ${value}" | ||||
| fi | ||||
| value=$( printf "%.0f" "$value" 2> >(error) ) | ||||
| if [ "$value" -lt 0 ]; then value=0; fi | ||||
| if [ "$value" -gt 98304 ]; then value=98304; fi | ||||
| log "rounded value: ${value}" | ||||
| 
 | ||||
| pactl set-sink-volume "$default_sink" "$value" > >(log) 2> >(error)  | ||||
| @ -0,0 +1,32 @@@@ -0,0 +1,32 @@ | ||||
| #!/bin/bash | ||||
| 
 | ||||
| function log () { | ||||
|    # if argument is given, echo argument, if stream is piped, echo each line of stream | ||||
|    if [ "$verbosity" != 'VERBOSE' ] ; then return 0; fi | ||||
|    if [ -n "$1" ]; then | ||||
|       echo "$1" | ||||
|    else | ||||
|       while read line | ||||
|       do | ||||
|          if [ -n "$line" ]; then | ||||
|             echo "$line" | ||||
|          fi | ||||
|       done | ||||
|    fi | ||||
| } | ||||
| 
 | ||||
| function error () { | ||||
|    # if argument is given, echo argument to stderr, if stream is piped, echo each line of stream to stderr | ||||
|    if [ "$verbosity" = 'SILENT' ]; then return 0; fi | ||||
|    if [ -n "$1" ]; then | ||||
|       echo "$1" >&2 | ||||
|    else | ||||
|       while read line | ||||
|       do | ||||
|          if [ -n "$line" ]; then | ||||
|             echo "$line" >&2 | ||||
|          fi | ||||
|       done | ||||
|    fi | ||||
| } | ||||
| 
 | ||||
					Loading…
					
					
				
		Reference in new issue