From 4f06cc87a2a26b3f7be22268f095c00c88bf49f9 Mon Sep 17 00:00:00 2001 From: sinanmohd Date: Fri, 17 Mar 2023 11:42:54 +0530 Subject: audio_cyclesink, audio_mutemic: initial commit mute mic and cycle between wireplumber(pipewire) audio sinks --- .local/bin/audio_cyclesink | 77 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100755 .local/bin/audio_cyclesink (limited to '.local/bin/audio_cyclesink') diff --git a/.local/bin/audio_cyclesink b/.local/bin/audio_cyclesink new file mode 100755 index 0000000..52b2661 --- /dev/null +++ b/.local/bin/audio_cyclesink @@ -0,0 +1,77 @@ +#!/bin/sh + +# cycle between wireplumber(pipewire) audio sinks + +parse_sinks() +{ + isaudio= + isadsink= + + while read -r line + do + case "$line" in + Audio) + isaudio=true + ;; + ├─\ Sinks:) + + [ "$isaudio" = true ] && + isadsink=true + ;; + ├─*:) + [ "$isadsink" = true ] && + break + ;; + *) + # skip if not inside audio sink + [ "$isadsink" != true ] && + continue + + # skip "blank" lines + [ -z "${line#│}" ] && + continue + + # clean up input + line="${line#│ }" + line="${line%%.*}" + + sinks="${sinks}${line}:" + + ;; + esac + done + + printf "%s" "${sinks%:}" + unset isaudio isadsink +} + +cycle_sink() +{ + read -r sinks + default_sink= + next_sink= + + IFS=: + for sink in $sinks + do + case "$sink" in + \**) + default_sink="${sinks#* }" + ;; + *) + if [ -n "$default_sink" ] + then + next_sink="${sink# }" + break + fi + ;; + esac + done + + # if default sink is last one use first sink + : "${next_sink:="${sinks%%:*}"}" + + wpctl set-default "$next_sink" +} + +wpctl status | parse_sinks | cycle_sink -- cgit v1.2.3