#!/bin/bash alsafind () { client="unknown" aconnect $1 | while read x y z ; do if [ "$x" = "client" ] ; then client="${y/:/}" elif echo "$y $z" | grep -q "$2" ; then echo "$client:$x" fi done } jackfind () { jack_lsp | grep "$1" | head -1 } patch () { case "$1" in none) midiname="none" lout="system:capture_1" rout="system:capture_2" ;; fluidsynth) midiname="Synth input" lout="$(jackfind 'fluidsynth.*:left')" rout="$(jackfind 'fluidsynth.*:right')" ;; aeolus) midiname="1" lout="aeolus:out_1" rout="aeolus:out_2" ;; phasex) midiname="PHASEX MIDI In " lout="phasex:out_1" rout="phasex:out_2" ;; jack-dssi-host) case "$2" in hexter.so) lout="$(jackfind hexter)" rout="$lout" midiname="hexter" ;; xsynth-dssi.so) lout="$(jackfind Xsynth)" rout="$lout" midiname="Xsynth" ;; whysynth.so) lout="$(jackfind 'WhySynth.*out_1')" rout="$(jackfind 'WhySynth.*out_2')" midiname="WhySynth" ;; nekobee.so) lout="$(jackfind nekobee)" rout="$lout" midiname="nekobee" ;; sineshaper.so) lout="$(jackfind Sineshaper)" rout="$lout" midiname="Sineshaper" ;; esac ;; esac if [ "$midiname" != "none" ] ; then aconnect $(alsafind -i "MIDI") $(alsafind -o "$midiname") fi jack_disconnect "$lout" system:playback_1 jack_disconnect "$rout" system:playback_2 inp1="$(jackfind 'jack_rack.*:in_1')" if [ "$inp1" != "" ] ; then jack_connect "$lout" "$inp1" jack_connect "$rout" "$(jackfind 'jack_rack.*:in_2')" jack_connect "$(jackfind 'jack_rack.*:out_1')" system:playback_1 jack_connect "$(jackfind 'jack_rack.*:out_2')" system:playback_2 else jack_connect "$lout" system:playback_1 jack_connect "$rout" system:playback_2 fi echo "Patching complete" } if [ "$1" = "none" ] ; then patch none else (sleep 5; patch "$@") & exec "$@" fi