The term "JACK" is mentioned often in context without actually discussing it in detail and it is difficult to understand JACK's depth and importance within other discussions. This page hopes to alleviate this situation.
Simply stated, JACK is a recursive acronym for JACK Audio Connection Kit which is a sound server (and more!) that will serve audio to applications that request it. But merely calling JACK a "sound server" belies its other powerful, pervasive aspects and capabilities.
Indeed, JACK provides the audio backbone for Linux audio and all serious audio distributions not only include it, but have come to rely on it.
But JACK will not only serve sound in a unilateral direction, it also allows interconnection of audio and midi between "JACK-aware" applications. For example, this means that you can take sound from an application, route it into a second application and then route it back into the first application. Thankfully, there are many "JACK-aware" applications, and the list is growing.
It is also worth noting that some applications rely on JACK and will not start unless JACK is already running.
Since JACK was developed for professional audio work it makes all these connection with extremely low latency (the time between when I sound is created and when it is heard). This is critical for serious audio work because it can become impossible to properly sync or multi-track audio if the latency is too great. The ability to leverage the real-time kernel also facilitates achieving lower latencies.
Additionally, an often overlooked (or unmentioned) feature of JACK is to act as a transport control. This function allows one applications to be designated as a master transport that will control the starting and stopping of other applications. For example, if Ardour is set as the transport master, starting Ardour will also start the Hydrogen drum machine.
Various audio back ends are available for JACK to use including:
JACK over the Net
jackd can be started from the CLI in a rather succinct manner which also establishes the configuration at the same time. An example is:
jackd -R -P4 -dalsa -r44100 -p512 -n4 -D -Chw:0 -Phw:0
See the Ubuntu jackd manpage for a list of the expansive options.
Despite the large amount of options, it can be very easy to start JACK from the CLI with the correct options and is regularly started in this manner, although it is possible that most users will want to use a GUI.
A GUI is available to start the jackd daemon, which makes using JACK more accessible especially to newer users. The interface can be seen below:
qjackctl is fairly comprehensive and not only provides access to the start and transport controls, but also provides immediate access to the Connect (connection) and Setup (configuration) buttons.
For more information about starting and using JACK via qjackctl see the JackQuickStart page.
JACK configuration can be accessed in qjackctl by selecting the Setup key. This provides a graphical dialogue box for editing various JACK options.
This has several benefits over starting JACK with options from the CLI, including the ability to save and recall option settings by name and showing the latency for the current option settings.
See the HowToJACKConfiguration page for more information.
Connections via JACK
Making connections via JACK can be effected in qjackctl by selecting the Connect key. This provides a graphical dialogue box for making audio and midi connections with JACK.
See the HowToQjackCtlConnections page for more information.
Other Reference Material
Dave Phillips Intro Article in Linux Journal - Another well written article by Dave Phillips, this time highlighting JACK.