What is JACK?
Have you ever wanted to take the audio output of one piece of software and send it to another? How about taking the output of that same program and send it to two others, then record the result in the first program? Or maybe you're a programmer who writes real-time audio and music applications and who is looking for a cross-platform API that enables not only device sharing but also inter-application audio routing, and is incredibly easy to learn and use? If so, JACK may be what you've been looking for.
JACK is system for handling real-time, low latency audio (and MIDI). It runs on GNU/Linux, Solaris, FreeBSD, OS X and Windows (and can be ported to other POSIX-conformant platforms). It can connect a number of different applications to an audio device, as well as allowing them to share audio between themselves. Its clients can run in their own processes (ie. as normal applications), or can they can run within the JACK server (ie. as a "plugin"). JACK also has support for distributing audio processing across a network, both fast & reliable LANs as well as slower, less reliable WANs.
JACK was designed from the ground up for professional audio work, and its design focuses on two key areas: synchronous execution of all clients, and low latency operation. More background information is available.
Understanding JACK in different ways
The term "JACK" doesn't really identify anything very precisely. What "JACK" means depends a little bit on your perspective. There are several ways of understanding the term, all equally valid:
- The JACK API
- The definition of the data structures, protocols and functions used by programs that use JACK
- An implementation of the API
- Actual software, including a server application, often called "jack", and a library used by clients. There are already two implementations of the API, known as "jack1" and "jack2" (formerly "jackmp"). Different implementations are (in almost every way) drop-in replacements for each other.
- A GUI control application
- The existing implementations do not come with any GUI at all. To make life easier for most users, GUI control apps exist that allow easy modification of JACK startup parameters, and ways to monitor the state of a running JACK system.
qjackctlis the most widely used GUI control application. - A running instance of JACK with a variety of JACK-aware applications
- This will likely include the server application, the control GUI, and zero or more actual applications that use JACK, such as Ardour (a DAW), Hydrogen (a drum machine) or many, many more.
MacBook running Linux: audio via JACK is distorted, audio via ALSA is not
As of April 2012 there seems to be driver problem that affects the audio interface on the Macbook when it is used in 24 or 32 bit mode. To avoid the resulting distortion, use the -S flag to the ALSA backend to force it to use 16 bit sample data format.
JACK 1.9.8 released
Submitted by letz on Mon, 2011-12-19 14:45Jack 1.9.8 is API compatible with latest Jack 0.121.3 version.
This is the first version that contains the new MIDI driver model developed by Devin Anderson in spring of this year. This includes the Linux FFADO driver, the Mac OSX CoreMIDI driver, the Windows WinMME driver, and a new Linux 'alsarawmidi' slave driver that can run alongside other master drivers (i.e. FFADO).
JACK 0.121.3 released
Submitted by paul on Wed, 2011-09-28 13:01JACK 0.121.3 is a bug fix release containing (almost) no new functionality. It is required if you want to use JACK1 on OS X with any clients that use weak linkage for JACK feature detection (e.g. Ardour).
Using JACK on Windows
Introduction
As on other platforms, JACK on Windows is a multi-purpose application that connects audio and MIDI using the Windows system drivers... It connects (OUTPUT) to those audio drivers using the PortAudio project (so Jack can connect using dsound, wmme, WDMKS, ASIO, WASAPI, and WaveRT) depending on what the soundcard's drivers support. Currently Jack for Windows only supports 32-bit applications, but a new version is currently being tested that supports both 32-bit and 64-bit audio applications.
JACK 0.121.2 released
Submitted by paul on Wed, 2011-06-29 02:07JACK 0.121.2 has been released. This correctly includes changes made to jackd.py's device reservation handling. They were done before 0.121.0 was released but not included in that version. No functional changes to regular JACK functionality are present in this upgrade.
JACK 0.121.1 released
Submitted by paul on Tue, 2011-06-28 13:51JACK 0.121.0 released
Submitted by paul on Thu, 2011-06-23 16:08JACK 0.121.0 is now available. and it contains a couple of important bug fixes, a small but nice new piece of functionality, and some unfinished work. Read more below for the details.
JACK 0.120.2 released
Submitted by paul on Fri, 2011-05-27 19:39Jack 0.120.2 is now available. This is primarily a bug fix release, though some of the bugs are important.
JACK 1.9.7 released
Submitted by letz on Wed, 2011-03-30 15:40Continuing the JACK2 serie. Jack 1.9.7 is API compatible with latest Jack 0.120.1 version.
What is new:
- Sync JackAlsaDriver::alsa_driver_check_card_type with JACK1 backend.
- Correct JackServer::Open to avoid a race when control API is used on OSX.
- Improve backend error handling: fatal error returned by Read/Write now cause a Process failure (so a thread exit for blocking backends).
- Recoverable ones (XRuns..) are now treated internally in ALSA, FreeBob and FFADO backends.
- In jackdmp.cpp, jackctl_setup_signals moved before jackctl_server_start.
