JACK is a system that allows audio applications to seamlessly move audio data between themselves and/or an audio interface without caring precisely where the data is going. Programs can share audio data before passing it to the audio interface, for example. It does all this while maintaining perfect sample synchronous behaviour, just like a correctly set up mesh of digital audio hardware would. JACK is unique and cool and makes everyone's life easier.

Recording things outside the computer

Traditionally, the sound sources that you record, as well as a lot of the more significant effects processing, lives outside the computer. Consequently one of the biggest issues in integrating a computer into the operation of the studio is how to move audio data in and out of the computer. This is why there is wide range of audio interfaces available, and an ever growing set of device driver standards for applications to use when accessing them (ASIO, WDM, CoreAudio, GSIF, ALSA), presenting both choices and confusion for users and developers alike.

Recording things inside the computer

However, it is becoming increasingly common for studios to be using audio sources and FX processing that are nothing more than pieces of software, quite often running on the same machine as the DAW. A new problem arises in such situations, because moving audio in and out of the DAW no longer involves your hardware audio interface. Instead, data has to be moved from one piece of software to another, preferably with the same kind of sample synchronisation you'd have in a well-setup digital hardware system.

To handle this, most proprietary audio software companies have adopted the plugin model, in which these software sound sources and effects processors have to use the same plugin API(s) as your DAW/sequencer, and then the plugins run as part of the DAW/sequencer. It's not a bad solution, and it has certain performance benefits. But it has led to at least 5 major plugin APIs being developed with more on the periphery, and it also means that a totally different programming model is used by developers when writing plugins compared to when writing new standalone applications, thus further slowing development work.

Making it all seamless

What users (and developers) want is a single way to move audio between audio interfaces and applications as well as between applications. At present, the Windows and Mac OS worlds present different systems for these purposes, with 3rd party developers responsible for handling inter-application audio routing (such as ReWire from PropellerHeads and DirectConnect from Digidesign).

JACK is a new and different design: the same system is used to move audio (and potentially other kinds of streaming media data) to and from an audio interface as is used to move it between applications. A program using JACK doesn't have to care where its signals are going to or coming from - your audio interface, other programs - they can all be handled in the same way.

Developed within the world of open source software, and is thus available for anyone to use, learn from, extend, fix or modify. JACK runs on Linux and Mac OS X, and is portable to just about any POSIX-like operating system.

Other Cool Things About JACK

Because of JACK's level of integration, it's possible to provide all programs using JACK with facilities that traditional systems like ASIO or WDM force each application to develop for themselves. For example, there are JACK-using programs that will stream audio from any other JACK program (or programs) to an Icecast server for direct broadcast over the internet. Or consider a JACK program that encodes five channels of input as AC3 and forwards it to a S/PDIF port on your audio interface - instant surround sound compatibility for all JACK clients without redundant code in each one. Finally, consider JACK's transport control system that allows all JACK programs that have "transport" systems to run in sync with each other, even in the presence of programs that cannot locate to new transport positions immediately.

Running JACK

JACK itself does not come with graphical user interface - to start JACK and control it you once needed to have access to a command line and a basic knowledge of Unix-like operating systems. However, qjackctl is a wonderful application that wraps JACK up with a graphical interface that is both nice to look at and useful at same time. qjackctl is the recommended way of using JACK.

Find out more
Visit the JACK website and learn more.