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