#!/bin/sh # sh-pulse --- Control script for pulseaudio volume and output sink # Copyright © 2024 Runciter <runciter@pkbd.org> # # This file is part of sh-pulse. # # sh-pulse is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or (at # your option) any later version. # # sh-pulse is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with sh-pulse. If not, see <http://www.gnu.org/licenses/>. declare -a SINKS=($(pactl list short sinks | awk '{print $1}')) if test "x${#SINKS[@]}" = x0 then echo no sinks found, are you running pulseaudio? exit 1 fi declare -a SINKNAMES=($(pactl list short sinks | awk '{print $2}')) declare -a INPUTS=($(pactl list short sink-inputs | awk '{print $1}')) declare -a INPUTSINKS=($(pactl list short sink-inputs | awk '{print $2}')) if test "x${#INPUTS[@]}" = x0 then echo no inputs found, setting first sink as default sink IS=0 pactl set-default-sink ${SINKNAMES[$IS]} else for (( I=0; I<${#SINKS[@]}; ++I )) do if test "x${INPUTSINKS[0]}" = "x${SINKS[$I]}" then IS=$I fi done fi case "$1" in increase) if test "x$2" = "x" then pactl set-sink-volume ${SINKS[$IS]} "+5%" else pactl set-sink-volume ${SINKS[$IS]} $2 fi ;; decrease) if test "x$2" = "x" then pactl set-sink-volume ${SINKS[$IS]} "-5%" else pactl set-sink-volume ${SINKS[$IS]} $2 fi ;; togglemute) pactl set-sink-mute ${SINKS[$IS]} toggle ;; nextsink) if test "x$(( ${IS}+1))" = "x${#SINKS[@]}" then IS=0 else IS=$(($IS+1)) fi pactl set-default-sink ${SINKNAMES[$IS]} for (( I=0; I<${#INPUTS[@]}; ++I )) do pactl move-sink-input ${INPUTS[$I]} ${SINKS[$IS]} done ;; *) echo "Usage: vlm {increase [INC]|decrease [INC]|togglemute|nextsink}" echo " Volume increment INC is given as is to pactl." echo " Default INC is +5% for increase, -5% for decrease." echo " nextsink cycles audio outputs e.g. sound cards, usb, ..." exit 2 ;; esac exit 0