#!/bin/zsh
export devname=$2
if [ -z $devname ];then
export devname=mixbox
fi
function startroute
{
export defsink=`pactl info|grep Default\ Sink:|sed "s|Default Sink: ||g"`
export defsource=`pactl info|grep Default\ Source:|sed "s|Default Source: ||g"`
pactl load-module module-null-sink sink_name=$devname sink_properties=device.description=$devname media.class=Audio/Duplex
pactl set-default-source $devname
pactl load-module module-loopback source=$defsource sink=$devname
pactl load-module module-loopback source=$devname.monitor sink=$defsink
}
function stoproute
{
export recindex=`pactl list modules|grep --after-context=2 \#|grep --before-context=2 -i \ sink=$devname|head -n 1|cut -f 2 -d \#`
pactl unload-module $recindex
export loopindex=`pactl list modules|grep --after-context=2 \#|grep --before-context=2 -i argument:\ source=$devname|head -n 1|cut -f 2 -d \#`
pactl unload-module $loopindex
export devindex=`pactl list modules|grep --after-context=2 \#|grep --before-context=2 -i argument:\ sink.name=$devname|head -n 1|cut -f 2 -d \#`
pactl unload-module $devindex
}
function routed
{
if pactl list sources|grep -qw $devname;then
true
else
false
fi
}
case "$1" in
start)
startroute
;;
stop)
stoproute
killall recd
;;
routed)
routed
;;
*)
echo usage: $0 \[start\|stop\|routed\] \[\<device name\>\]
echo entering interactive automatic headphone detecting mode
while true;do
trap "stoproute;exit" TERM
trap "stoproute;exit" INT
if pactl list sinks|grep -i active\ port|cut -f 2 -d :|grep -iq headphone;then
if routed;then
sleep .25
else
startroute
fi
else
stoproute
fi
sleep .25
done
;;
esac
