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.
JACK 1.9.5 released
Submitted by letz on Mon, 2010-02-15 10:38.Continuing the JACK2 serie.
- Dynamic choice of maximum port number.
- More robust sample rate change handling code in JackCoreAudioDriver.
- Devin Anderson patch for Jack FFADO driver issues with lost MIDI bytes between periods (and more).
- Fix port_rename callback : now both old name and new name are given as parameters.
- Special code in JackCoreAudio driver to handle completely buggy Digidesign CoreAudio user-land driver.
- Ensure that client-side message buffer thread calls thread_init callback if/when it is set by the client (backport of JACK1 rev 3838).
- Check dynamic port-max value. Fix JackCoreMidiDriver::ReadProcAux when ring buffer is full (thanks Devin Anderson).
JACK 1.9.4 released
Submitted by letz on Fri, 2009-11-20 08:30.Continuing the JACK2 serie: Jack 1.9.4 is API synched with JACK 0.118.0. Fix a lot of more or less important bugs, especially on OSX with much better support off CoreAudio devices (input/output devices "internally" aggregated, hog mode...etc...).
- Solaris boomer backend now working in capture or playback only mode.
- Add a -G parameter in CoreAudio backend (the computation value in RT thread expressed as percent of period).
- Use SNDCTL_DSP_SYNCGROUP/SNDCTL_DSP_SYNCSTART API to synchronize input and output in Solaris boomer backend.
- Big endian bug fix in memops.c.
- Fix issues in JackNetDriver::DecodeTransportData and JackNetDriver::Initialize.
JACK 0.118.0 released
Submitted by paul on Mon, 2009-11-16 14:36.Due to a very shortsighted error on my part, we are re-releasing JACK today with a very minor change to ensure continuing compatibility between JACK 1 and JACK 2. The new release 0.118.0 differs from 0.117.0 by replacing the newly added -L command line switch (--no-realtime) with -r, since -L was already in use in JACK 2. There were also two minor code cleanups that do not affect functionality. LINUX DISTRIBUTIONS: PLEASE DO NOT RELEASE 0.117.0 - we want QJackctl and other similar tools to have a single command line argument set
JACK 0.117.0 released
Submitted by paul on Sat, 2009-11-14 14:25.JACK 0.117.0 has been released and is available here. There is one API addition, some significant implementation improvements in netjack1, and some important command line changes which will affect all JACK GUI control applications (such as qjackctl). Thanks to Torben Hohn for his continuing work on netjack1 and Florian Faber for the new sanity checking tests. Please report issues to the JACK mailing list.
- jackd now runs in realtime mode by default. the use of -R is no longer necessary. Use -L to run in non-realtime-scheduling.
- if you build JACK from source, the configure step will halt if you appear to be trying to install JACK in parallel with an existing version
- new run-time sanity checks. These are platform dependent, but on Linux JACK will check:
- user can run with realtime priority (if JACK is going to run with RT scheduling)
- memory locking is allowed and not unlimited
- if using the TSC as a clock source, check that CPU frequency scaling is disabled
If any of them are not satisfactory, jackd will print appropriate information
to the screen, and exit with an error status. Use --no-sanity-checks or -N to disable
these tests. There is likely
some room for improvement in the heuristics they use, and possibly adding further runtime
testing to ensure that JACK is likely to run correctly for the user. - internal design of the alsa_io utilities revised, with substantial improvements. These clients
can be configured with the same settings as you could use with jackd itself (e.g. -dhw:0 -p128 -n2),
which previously would not have been stable. Also, the resampling quality (via libsamplerate) is
now configurable if you need/wish to reduce CPU usage. See their respective man pages for details. - netjack1 improvements:
- driver command line options are more consistent with other backends and with jack_netsource,
They are also documented on the man pages for the net backend and jack_netsource. - make it all work even better (you probably don't care about the details)
- some options which allow the netjackconnect script to pierce a
firewall and tell netjack which ports to use. - support for CELT 0.7.0 (note that CELT is subject to fairly
frequent updates and if you use this for a WAN connection,
both ends must be using the same version of CELT - it does
not provide for any version detection or back-compatibility). - CELT bandwidth is now configured in Kbits per second, instead of bytes per
period, which made the quality and bandwidth depend on periodsize. - the client name of jack_netsource is now "netjack"
- driver command line options are more consistent with other backends and with jack_netsource,
- New JACK API function:
jack_on_info_shutdown(). This is very similar to the existingjack_on_shutdown(), but if used, JACK will deliver some information about the reason for the shutdown to the client. This reflects our realization that, particularly on OS X, there are reasons why JACK might shut down that have nothing to do with client behaviour (e.g. an audio interface is unplugged or taken over by another application with new settings). See the documentation for more details.
Torben is working on web-based system for setting up WAN netjack connectivity. More news will follow on this front.
JACK 1.9.3 released
Submitted by letz on Tue, 2009-07-21 09:45.Future JACK2 will be based on C++ jackdmp code base. Jack 1.9.3 is the "renaming" of jackdmp and the result of a lot of developments started after LAC 2008.
What is new:
- New JackBoomerDriver class for Boomer driver on Solaris.
- Add mixed 32/64 bits mode (off by default).
- Native MIDI backend (JackCoreMidiDriver, JackWinMMEDriver).
- In ALSA audio card reservation code, tries to open the card even if reservation fails.
- Clock source setting on Linux.
- Add jackctl_server_switch_master API.
- Fix transport callback (timebase master, sync) issue when used after jack_activate (RT thread was not running).
JACK 1.9.2 released
Submitted by letz on Mon, 2009-03-23 13:49.Future JACK2 will be based on C++ jackdmp code base. Jack 1.9.2 is the "renaming" of jackdmp and the result of a lot of developments started after LAC 2008.
What is new:
- Solaris version with a new OSS backend (Yes We Can !!)
- New "profiling" tools, allowing to better understand/measure the temporal behaviour of the system.
- Rework the mutex/signal classes.
- Support for BIG_ENDIAN machines in NetJack2.
- D-BUS based device reservation to better coexist with PulseAudio on Linux.
- Add auto-connect parameter in netmanager and netadapter.
- Use Torben Hohn PI controler code for adapters.
JACK 1.9.1 released
Submitted by letz on Wed, 2009-02-11 10:11.Future JACK2 will be based on C++ jackdmp code base. Jack 1.9.1 is the "renaming" of jackdmp and the result of a lot of developments started after LAC 2008.
What is new:
- A lot of improvements and bug fixes in NetJack2, that is now working more reliably.
- Synchronize the JACK2 codebase with recent changes in JACK1 API (in particular some thread related functions as well as ALSA backend, ring buffer code...)
- A lot of small bug fixes and improvements everywhere.
JACK 0.116.2 released (32/64 JACK MIDI bugfix)
Submitted by paul on Fri, 2009-02-06 10:55.This release features fixes to make JACK MIDI work between mixed 32bit and 64bit JACK server and clients. This functionality was omitted from previous 32/64 bit work. There are also some minor improvements in netjack. If you are not using JACK MIDI in a mixed 32/64 environment, you probably do not need to upgrade, but no other areas of JACK have been altered, so an upgrade will not change existing behaviour. Thanks to Torben Hohn for his work on this release.
JACK 0.116.1 released (netjack bugfix)
Submitted by paul on Sat, 2008-12-06 10:54.JACK 0.116.1 is now released. It contains a critical bugfix for the netjack driver discovered last night. There are no other changes between this and 0.116.0. Apologies to any distribution packagers who jumped on the 0.116.0 release (but thanks also for your attention).
