Signal paths

by Jan Depner - Jan's email, Alexandre Prokoudine
v1.1, available under terms of GNU General Public License v2, 27 April 2005

1. Internal

It is always useful to know how the audio signal travels through an application. Steve Harris has kindly provided the following diagram. Note that the bypass institutes a delay. This is set to the same delay that is introduced by the effects so that when you toggle the bypass you don't hear a "jump" in the sound.

JAMin block diagram

[back to top]

2. External

In order for JAMin to be useful you must first connect JACK enabled input and output applications. Ideally you will want to use applications that incorporate the JACK transport mechanics so that the transport can be controlled from one of the applications. In order to run JAMin you must first have started the JACK daemon (jackd). There are a number of ways to do this. Ideally you would want to use qjackctl or qjackconnect to handle the connections instead of having to use a hardwired script. Qjackctl has the added feature of being able to start and stop the jackd process and modify it's parameters. Note that qjackctl requires the latest version 3.0.5 of Qt. If you're running Red Hat 7.3 you will need to download and install the latest from Trolltech. Trust me on this, it's well worth the effort.  A fairly standard setup is to start jackd using qjackctl, start Ardour, have all of your outputs going to the master out in Ardour, connect the master outputs to JAMin inputs, connect JAMin outputs to a stereo track in Ardour, and then use Ardour to both play and record. You can also export audio sessions from Ardour, use alsaplayer or ecamegapedal to play the audio file, connect the outputs to JAMin inputs, connect JAMin outputs to Ardour stereo track inputs. As you can see the JACK Audio Connection Kit makes many different kinds of setups possible. Here is a picture of the qjackctl connections page with the alsaplayer, JAMin, Ardour setup:

qjackctl shot

If you're a dyed-in-the-wool UNIX geek you might prefer the command line method. As an example here is a test script that I use to start jackd and run JAMin:

#!/bin/bash

if [ $1 ]; then
    SONG=$1
else
    SONG=/data2/cdroast/grown_man_cry.wav
fi

killall -9 artsd 2>/dev/null
killall -9 jackd 2>/dev/null
rm -rf /tmp/jack*

echo 1 > /proc/sys/kernel/lowlatency

jackd -R -d alsa -d ice1712 -n 2 -p 2048 -r 44100 &

sleep 2

qjackconnect &

sleep 2

alsaplayer -s alsaplayer -S -o jack $SONG &

sleep 2

jamin alsaplayer:out_1 alsaplayer:out_2 alsa_pcm:playback_1 alsa_pcm:playback_2

killall -9 alsaplayer
killall -9 qjackconnect
killall -9 jackd 2>/dev/null        

Instead of alsaplayer you can use ecamegapedal (which understands JACK transport controls) by using:

ecamegapedal $SONG &
jamin ecasound:out_1 ecasound:out_2 alsa_pcm:playback_1 alsa_pcm:playback_2
killall -9 ecamegapedal             

in place of the alsaplayer specific lines. Note that there is no recorder connected in this case because it's just for testing. Hooking up Ardour or some other JACK enabled recorder is left as an exercise for the student ;-)

[back to top]