#!/bin/bash # I, Ian Kelling, follow the GNU license recommendations at # https://www.gnu.org/licenses/license-recommendations.en.html. They # recommend that small programs, < 300 lines, be licensed under the # Apache License 2.0. This file contains or is part of one or more small # programs. If a small program grows beyond 300 lines, I plan to change # to a recommended GPL license. # Copyright 2024 Ian Kelling # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # mutes or unmutes ffmpeg stream # usage: toggle-mute [mute|unmute|mute notify] # # # gets state from $HOME/.iank-stream-muted if ! test "$BASH_VERSION"; then echo "error: shell is not bash" >&2; exit 1; fi shopt -s inherit_errexit 2>/dev/null ||: # ignore fail in bash < 4.4 set -eE -o pipefail trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" exit status: $?, PIPESTATUS: ${PIPESTATUS[*]}" >&2' ERR v=0 notify=false # note: condition duplicated in stream-clip, myi3statsus if pgrep -fc '^ffmpeg.*icecast://source.*/fsf' >/dev/null; then if [[ $1 ]]; then case $1 in mute) v=0 if [[ $2 == notify ]]; then notify=true fi ;; unmute) v=1 ;; *) i3-nagbar -m "INVALID mute argument:$1" -t error -f "pango:monospace 30" ;; esac else v_state=$(cat $HOME/.iank-stream-muted) ||: case $v_state in 1) : ;; # default action 0) v=1 ;; *) i3-nagbar -m "FAILED GETTING MUTE STATE:$v" -t error -f "pango:monospace 30" ;; esac fi out=$(echo Parsed_volume_1 volume $v | zmqsend ||:) if [[ $out == "0 Success" ]]; then echo $v >$HOME/.iank-stream-muted if $notify; then dunstify -h string:x-dunst-stack-tag:alert "automuted" fi else i3-nagbar -m "FAILED ffmpeg volume:$v out:$out" -t error -f "pango:monospace 30" fi fi # note: i figured out how to do system input level muting, but I don't # really have a use case for it other than being doubly sure that i'm # muted. leaving it commented in case I figure out a use case, or I # find the application level muting to be unreliable. # uncomment and refactor for system muting # muted=$(pactl get-source-mute @DEFAULT_SOURCE@ | awk '{print $2}' ||:) # case $muted in # no) v=0 ;; # yes) v=1 ;; # esac # uncomment for system muting, and set $mute_p # pactl set-source-mute @DEFAULT_SOURCE@ $mute_p