• 0 Posts
  • 4 Comments
Joined 4 years ago
cake
Cake day: July 27th, 2020

help-circle

  • I’ve written a bash script i’m using daily, maybe you can adapt it to your needs. I’m using pipewire-pulse. It’s probably not perfect but it does the job:

    #!/usr/bin/env bash
    DEVICE=$1
    
    # read input, parse list of available sinks (outputs)
    if [ "$DEVICE" = "pc" ]
    then
    	OUTPUT=($(pactl list short sinks | awk '{print $2}' | grep -i -E 'hdmi|samson|Targus' -v))
    elif [ "$DEVICE" = "tv" ]
    then	
    	OUTPUT=($(pactl list short sinks | awk '{print $2}' | grep -i -E 'hdmi'))
    else
    	echo "No valid input (must be either 'pc' or 'tv')"
    	exit -1
    fi
    
    # get all currently connected streams
    INPUTS=($(pactl list short sink-inputs | awk '{print $1}'))
    
    # change default sink (for new audio outputs)
    pactl set-default-sink $OUTPUT
    
    # switch sink for existing audio outputs
    for i in "${INPUTS[@]}"
    do
    	pactl move-sink-input $i $OUTPUT
    done
    
    # use notify-send to send a visual notification to the user that the sink changed
    notify-send -c info "Default sink changed" "Changed default sink and sink-inputs to $OUTPUT"