The JACK API implements
an audio server, allowing the connection of various software clients and
hardware interfaces.
In short, it turns the whole system into a digital audio workstation (DAW).
It is the the standard way of working on Linux (pro) audio systems,
but is also available for Mac and Windows.
JACK needs a back end to connect to the actual audio hardware.
On Linux systems, this is usually ALSA (Mac uses Core Audio and Windows ASIO).
Starting a JACK Server
A JACK server can be started via various graphical tools,
such as QjackCtl or
Carla.
Many audio programs also boot a JACK server o their own,
if launched.
The recommended way of starting a JACK server in our case is the
terminal, using the command jackd
. It takes several arguments.
The following line starts a server (in the background) with the ALSA interface named
PCH, using a sample rate of 48kHz and a buffer size of 128 samples.
$ jackd -d alsa -d hw:PCH -r 48000 -p 128 &
Finding ALSA Devices
One way of finding the ALSA name of your interface
is to type the following command:
$ aplay -l
The output shows all ALSA capable devices, their name
listed after the card x:
. PCH is usually the default
onboard sound card:
**** List of PLAYBACK Hardware Devices ****
card 0: HDMI [HDA Intel HDMI], device 3: HDMI 0 [HDMI 0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: HDMI [HDA Intel HDMI], device 7: HDMI 1 [HDMI 1]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: HDMI [HDA Intel HDMI], device 8: HDMI 2 [HDMI 2]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: HDMI [HDA Intel HDMI], device 9: HDMI 3 [HDMI 3]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: HDMI [HDA Intel HDMI], device 10: HDMI 4 [HDMI 4]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: PCH [HDA Intel PCH], device 0: CX20751/2 Analog [CX20751/2 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
Connecting JACK Clients
As almost everything, JACK connections can be modified from the terminal.
All available JACK ports can be listed with the following command:
$ jack_lsp
Two ports can be connected with the following command:
$ jack_connect client1:output client2:input
Disconnecting two ports is done as follows:
$ jack_disconnect client1:output client2:input
If possible, a GUI-based tool, such as QjackCtl, can be
more handy for connecting clients. It can be started via
the a Desktop environment or from the command line:
$ qjackctl
Storing/Restoring Connections
Several tools allow to store and restore JACK connections.
Some of them work in a dynamic way, detecting spawned clients
and connecting them accordingly.
Others just allow a single operation for restoring connections.
aj-snapshot
The command line tool
aj-snapshot is automatically
installed alongside JACK. It can store and restore both JACK
and ALSA connections, which can be handy when working with MIDI
and is the most feature-rich and robust solution.
Once all connections are set, they can be stored to in an XML
file, specified by a single argument:
aj-snapshot connections.snap
The above stored connections can be restored with the flag -r
.
An additional x
deletes all prior connections, thus restoring the
original state in the file:
aj-snapshot -xr connections.snap
The tool can also be started as a demon, looking for new clients
and setting the related connections:
aj-snapshot -d connections.snap
Note
In some spatial audio projects, hardware devices and
clients can have many a large number of ports.
aj-snapshot does not handle that well and takes
an excessive amount of time for deleting existing connections.
jmess
jmess is another command line tool,
storing and restoring only JACK connections.
It does not come with a demon mode but is a lot faster than aj-snapshot.
jack-matchmaker
jack matchmaker is a Python-based
command line tool for dynamically restoring previously saved JACK connections.
QjackCtl Patchbay
The QjackCtl Patchbay offers a graphical
solution for storing JACK and ALSA connections.
Once activated, it patches new clients dynamically.