JACK

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.