You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							153 lines
						
					
					
						
							3.2 KiB
						
					
					
				
			
		
		
	
	
							153 lines
						
					
					
						
							3.2 KiB
						
					
					
				| #!/bin/sh | |
|  | |
| # Control the volume | |
| # Depends: pamixer | |
|  | |
| help() { | |
| 	B=$(tput bold) | |
| 	U=$(tput smul) | |
| 	N=$(tput sgr0) | |
|  | |
| 	cat << EOF | |
| ${B}NAME${N} | |
| 	volctl - control the volume | |
|  | |
| ${B}SYNOPSIS${N} | |
| 	${B}volctl${N} [${U}OPTION${N}] [${U}COMMAND${N}] [<${U}ARG${N}>] | |
|  | |
| ${B}DESCRIPTION${N} | |
| 	${B}volctl${N} uses pamixer to change the volume of the system. | |
|  | |
| 	Commands can be truncated, i.e. "${B}volctl t${N}" for "${B}volctl toggle${N}" | |
| 	Arguments need to be of numeric value. | |
|  | |
| ${B}OPTIONS${N} | |
| 	${B}-h${N}	Display usage message and exit. | |
|  | |
| ${B}COMMANDS${N} | |
| 	${B}i${N} <${U}AMOUNT${N}>, ${B}inc${N} <${U}AMOUNT${N}> | |
| 		Increase volume by ${U}AMOUNT${N}, default of 2. | |
|  | |
| 	${B}d${N} <${U}AMOUNT${N}>, ${B}dec${N} <${U}AMOUNT${N}> | |
| 		Decrease volume by ${U}AMOUNT${N}, default of 2. | |
|  | |
| 	${B}s${N} <${U}LEVEL${N}>, ${B}set${N} <${U}LEVEL${N}> | |
| 		Set volume to ${U}LEVEL${N}, default of 0. | |
|  | |
| 	${B}t${N}, ${B}toggle${N} | |
| 		Toggle mute. | |
|  | |
| 	${B}m${N}, ${B}mute${N} | |
| 		Mute volume. | |
|  | |
| 	${B}u${N}, ${B}unmute${N} | |
| 		Unmute volume. | |
|  | |
| 	${B}p${N} <${U}STATE${N}> <${U}DEVICE${N}>, ${B}pulsetcp${N} <${U}STATE${N}> <${U}DEVICE${N}> | |
| 		Set PulseAudio TCP module, possible values: on/off, 1/0, default enable. | |
|  | |
| 	${B}getv${N}, ${B}getvolume${N} | |
| 		Get volume level. | |
|  | |
| 	${B}getm${N}, ${B}getmute${N} | |
| 		Get mute status. | |
| EOF | |
| } | |
|  | |
| # Exit if no option is provided | |
| [ "$#" -eq 0 ] && help && exit 1 | |
|  | |
| SCRIPT="$(basename "$0")" | |
|  | |
| # Option handling | |
| while getopts ':h?' opt; do | |
| 	case $opt in | |
| 		h) | |
| 			help | |
| 			exit 0 | |
| 			;; | |
| 		\?) | |
| 			echo "$SCRIPT: invalid option '$OPTARG'" | |
| 			echo "Try '$SCRIPT -h' for more information." | |
| 			exit 1 | |
| 			;; | |
| 	esac | |
| done | |
|  | |
| pulseTcp() | |
| { | |
| 	if test "$2" = "off" || test "$2" = "0"; then | |
| 		echo "Disabling PulseAudio TCP module" | |
| 		if pactl list modules short | grep -q module-simple-protocol-tcp; then | |
| 			pactl unload-module module-simple-protocol-tcp | |
| 		fi | |
| 		exit 0 | |
| 	fi | |
|  | |
| 	"$0" p off | |
|  | |
| 	# Select audio output device | |
| 	devices="$(pactl list sources short | awk '/alsa_output.*/ { print }' | sort -k 2)" | |
| 	select="$3" | |
| 	if [ -z "$select" ]; then | |
| 		echo "$devices" | sed -nE '=;s/.*alsa_output\.(.*)\.monitor.*/\1/p;' | sed 'N;s/\n/) /' | |
| 		printf "Enter device to stream: " | |
| 		read -r select | |
| 	fi | |
|  | |
| 	device="$(echo "$devices" | sed -n "${select}p")" | |
| 	source="$(echo "$device" | awk '{ print $1; }')" | |
| 	format="$(echo "$device" | awk '{ print $4; }')" | |
| 	channels="$(echo "$device" | awk '{ print $5 + 0; }')" | |
| 	rate="$(echo "$device" | awk '{ print $6 + 0; }')" | |
|  | |
| 	# Load PulseAudio TCP module | |
| 	pactl load-module module-simple-protocol-tcp \ | |
| 		  rate="$rate" format="$format" channels="$channels" source="$source" \ | |
| 		  record=true port=8000 listen=0.0.0.0 > /dev/null | |
|  | |
| 	# Echo connection info | |
| 	ip="$(ip a show eth0 | awk '/inet / { print substr($2, 0, length($2) - 3) }')" | |
| 	echo "server: $ip:8000" | |
| 	echo "audio:  ${rate}Hz ${channels}ch" | |
| } | |
|  | |
| # Command handling | |
| shift $((OPTIND - 1)) | |
| case "$1" in | |
| 	i*) | |
| 		NUM=${2:-2} | |
| 		pamixer --increase "$NUM" | |
| 		;; | |
| 	d*) | |
| 		NUM=${2:-2} | |
| 		pamixer --decrease "$NUM" | |
| 		;; | |
| 	s*) | |
| 		NUM=${2:-0} | |
| 		pamixer --set-volume "$NUM" | |
| 		;; | |
| 	t*) | |
| 		pamixer --toggle-mute | |
| 		;; | |
| 	m*) | |
| 		pamixer --mute | |
| 		;; | |
| 	n*) | |
| 		pamixer --unmute | |
| 		;; | |
| 	p*) | |
| 		pulseTcp "$@" | |
| 		;; | |
| 	getv*) | |
| 		pamixer --get-volume | |
| 		;; | |
| 	getm*) | |
| 		pamixer --get-mute | |
| 		;; | |
| 	*) | |
| 		echo "$SCRIPT: invalid command '$1'" | |
| 		echo "Try '$SCRIPT -h' for more information." | |
| 		exit 1 | |
| 		;; | |
| esac
 | |
| 
 |