. lib/audio_dev_is_mute
. lib/print_usage
-IDX=0
-TYPE=sink
-if [ "$1" = "mic" ]; then
- IDX=1
- TYPE=source
- shift 1
-fi
MAX_LOUDNESS=150
-FLAG_HELP_SHORT='-h'
-FLAG_HELP_LONG='--help'
+TARGET_IDX_SPEAKER=0
+TARGET_TYPE_SPEAKER=sink
+
+TARGET_IDX_MIC=1
+TARGET_TYPE_MIC=source
+
+
+
+USAGE_DESCRIPTION='Set audio device volume, or (if no LOUDNESS provided) toggle device muteness.\n\nAvailable arguments:'
+USAGE_LINES='[OPTION] [LOUDNESS]'
+USAGE_INDICES='_help _mic LOUDNESS'
-USAGE_DESCRIPTION='Set audio device volume, or (if no LOUDNESS provided) toggle audio device muteness.\n\nAvailable arguments:'
-USAGE_LINES='[mic] [COMMAND]\nLOUDNESS'
-USAGE_INDICES='mic LOUDNESS _help'
-USAGE_DESC_mic='if set, affect microphone rather than speakers'
-USAGE_DESC_LOUDNESS='audio volume to set (as percentage, must be integer)'
+ARG_HELP_SHORT='-h'
+ARG_HELP_LONG='--help'
USAGE_DESC__help='display this help and exit'
-USAGE_NAME__help="${FLAG_HELP_SHORT}, ${FLAG_HELP_LONG}"
+USAGE_NAME__help="${ARG_HELP_SHORT}, ${ARG_HELP_LONG}"
-error_exit() { abort "Aborting due to $1\n\n$(print_usage)"; }
+ARG_MIC_SHORT='-m'
+ARG_MIC_LONG='--mic'
+USAGE_DESC__mic='as device to manipulate, target microphone rather than speakers'
+USAGE_NAME__mic="${ARG_MIC_SHORT}, ${ARG_MIC_LONG}"
+
+USAGE_DESC_LOUDNESS="volume to set (as percentage, should be integer <= ${MAX_LOUDNESS}, final '%' optional)"
+
+
+
+error_exit() {
+ abort "Aborting due to $1\n\n$(print_usage)"
+}
+
+set_target_device() {
+ TARGET_NAME="$1"
+ TARGET_IDX="$2"
+ TARGET_TYPE="$3"
+}
toggle_mute() {
- if $(audio_dev_is_mute "${TYPE}" "${IDX}"); then
+ if $(audio_dev_is_mute "${TARGET_TYPE}" "${TARGET_IDX}"); then
MUTE_BOOL=0
MUTE_WORD=off
else
MUTE_BOOL=1
MUTE_WORD=on
fi
- pacmd "set-${TYPE}-mute" "${IDX}" "${MUTE_BOOL}"
- echo "Toggled audio ${TYPE} muteness ${MUTE_WORD}."
+ pacmd "set-${TARGET_TYPE}-mute" "${TARGET_IDX}" "${MUTE_BOOL}"
+ echo "Toggled ${TARGET_NAME} muteness ${MUTE_WORD}."
}
-set_vol_percentage() {
+set_volume_as_percentage() {
+ _PERCENTAGE=$(echo "$1" | tr -d '%')
+ if [ "${_PERCENTAGE}" -gt "${MAX_LOUDNESS}" ]; then
+ error_exit "demand for unreasonably high loudness: ${_PERCENTAGE}%."
+ fi
AT_FULL=65536
- pacmd set-${TYPE}-volume "${IDX}" $(calc "($1 * ${AT_FULL} // 100)")
- echo -n "Audio ${TYPE} volume set to ${1}%."
- audio_dev_is_mute "${TYPE}" "${IDX}" && echo -n " (But audio device is muted.)"
+ pacmd set-${TARGET_TYPE}-volume "${TARGET_IDX}" $(calc "(${_PERCENTAGE} * ${AT_FULL} // 100)")
+ echo -n "Volume of ${TARGET_NAME} set to ${_PERCENTAGE}%."
+ audio_dev_is_mute "${TARGET_TYPE}" "${TARGET_IDX}" && echo -n " (But device is muted.)"
echo
}
+
+
+set_target_device 'speaker' 0 'sink'
+if [ "$(echo $1 | cut -c1)" = '-' ]; then
+ if [ "$1" = "${ARG_HELP_SHORT}" ] || [ "$1" = "${ARG_HELP_LONG}" ]; then
+ print_usage
+ exit 0
+ elif [ "$1" = "${ARG_MIC_SHORT}" ] || [ "$1" = "${ARG_MIC_LONG}" ]; then
+ set_target_device 'microphone' 1 'source'
+ else
+ error_exit "unrecognized argument: $1"
+ fi
+ shift 1
+fi
if [ -z "$1" ]; then
toggle_mute
-elif [ -z "$(echo -n $1 | sed 's/[0-9]*//g')" ]; then
- if [ "$1" -gt "${MAX_LOUDNESS}" ]; then
- error_exit "demand for unreasonably high loudness: $1."
- fi
- set_vol_percentage "$1"
-elif [ "$1" = "$FLAG_HELP_SHORT" ] || [ "$1" = "$FLAG_HELP_LONG" ]; then
- print_usage
+elif [ -z "$(echo -n $1 | sed -E 's/[0-9]*[%]?//g')" ]; then
+ set_volume_as_percentage "$1"
else
error_exit "unrecognized argument: $1"
fi
}
print_volume() {
- _NAME="$1"
- _IDX="$2"
- _TYPE="$3"
- print_bar_block "$1 " '' 0
- VOLUME="$(pactl get-${_TYPE}-volume "${_IDX}" | head -1 | sed 's/ //g' | cut -d'/' -f2)"
- if $(audio_dev_is_mute "${_TYPE}" "${_IDX}"); then
- print_bar_block "<s>${VOLUME}</s>"
- else
- print_bar_block "${VOLUME}" "${COL_YELLOW}"
- fi
+ _print_vol() {
+ _NAME="$1"
+ _IDX="$2"
+ _TYPE="$3"
+ _BORDER="$4"
+ print_bar_block "$1 " "${COL_WHITE}" 0
+ VOLUME="$(pactl get-${_TYPE}-volume "${_IDX}" | head -1 | sed 's/ //g' | cut -d'/' -f2)"
+ if $(audio_dev_is_mute "${_TYPE}" "${_IDX}"); then
+ print_bar_block "<s>${VOLUME}</s>" '' "${_BORDER}"
+ else
+ print_bar_block "${VOLUME}" "${COL_YELLOW}" "${_BORDER}"
+ fi
+ }
+ _print_vol 'vol' 0 'sink' 0
+ _print_vol ' --mic' 1 'source'
}
print_keyboard() {
print_battery
print_temperature
print_datetime
- print_volume vol 0 sink
- print_volume mic 1 source
+ print_volume
print_keyboard
printf '],'
sleep 0.1