#!/bin/bash
###########################################
### HOUSEKEEPING AND ERROR-CHECKING ###
###########################################
AUDIO_CHECK="$1"
shift
AUDIO_SETUP="$1"
shift
AUDIO_TEARDOWN="$1"
shift
###############################################
### MORE HOUSEKEEPING AND ERROR-CHECKING ###
###############################################
#
# Wait for Mic, Spk Present
#
echo
"$AUDIO_CHECK"
RESULT=$?
if [[ "$RESULT" != "0" ]]
then
exit $RESULT
fi
#
# Start Jack
#
echo
echo "Start Jack"
qjackctl &
PID_JACK=$!
sleep 5
#
# Create Bridges to/from PulseAudio
#
echo
echo "Create Bridges to/from PulseAudio"
INDEX_SINK_0=$( pactl load-module module-jack-sink channels=2 sink_name=PA_out_Playback client_name=PA_out_Playback )
INDEX_SINK_1=$( pactl load-module module-jack-sink channels=2 sink_name=PA_out_Meet_Rtrn client_name=PA_out_Meet_Rtrn )
INDEX_SOURCE_0=$( pactl load-module module-jack-source channels=2 source_name=PA_in_Mics client_name=PA_in_Mics )
INDEX_SOURCE_1=$( pactl load-module module-jack-source channels=2 source_name=PA_in_Meet_Send client_name=PA_in_Meet_Send )
INDEX_SOURCE_2=$( pactl load-module module-jack-source channels=2 source_name=PA_in_Record client_name=PA_in_Record )
#
# Remove Automatic Connections
#
disconnect_all ()
{
for CONNECTION in $(jack_lsp --connections "$1")
do
if [[ "$CONNECTION" = "$1" ]]
then
continue
fi
jack_disconnect "$1" "$CONNECTION"
done
}
disconnect_all system:capture_1
disconnect_all system:capture_2
disconnect_all system:playback_1
disconnect_all system:playback_2
#
# Save and Set Default Connections
#
PA_DEFAULT_SINK=$( pactl get-default-sink )
PA_DEFAULT_SOURCE=$( pactl get-default-source )
pactl set-default-sink PA_out_Playback
pactl set-default-source PA_in_Mics
#
# Create Bridges to/from Mic, Spk
#
echo
"$AUDIO_SETUP" "/tmp/pid_audio"
PID_AUDIO=$(<"/tmp/pid_audio")
rm "/tmp/pid_audio"
###########################
### START APPS, ###
### WAIT FOR DONE, ###
### CLOSE APPS ###
###########################
#
# Remove Bridges to/from Mic, Spk
#
echo
"$AUDIO_TEARDOWN" $PID_AUDIO
#
# Restore Default Connections
#
echo
echo "Unload Bridges between Jack and PulseAudio"
pactl set-default-sink "$PA_DEFAULT_SINK"
pactl set-default-source "$PA_DEFAULT_SOURCE"
#
# Remove Bridges to/from PulseAudio
#
pactl unload-module $INDEX_SOURCE_2
pactl unload-module $INDEX_SOURCE_1
pactl unload-module $INDEX_SOURCE_0
pactl unload-module $INDEX_SINK_1
pactl unload-module $INDEX_SINK_0
#
# Stop Jack
#
echo
echo "Stop Jack"
kill -TERM "$PID_JACK"
sleep 1
#
# End
#