A server and an API for Linux to facilitate low-latency audio. Jack is used to route digital sound data between applications. It's often used as a higher-level system for audio output, but with Jack it's possible to route the sound to, say, another program that's a Jack client instead of sound card.

It's also designed to be ground up to have low latency - requirement for professional audio work - and is specifically used in applications like Ardour.

Practically, it works like this: You run a program called jackd. Then, you start a program that acts as a Jack client. This program then exposes its inputs and outputs through jackd, and another program can connect to them.

Here are some practical examples:

You want to record a new hit song. You decide to use Ardour, a multitrack recording program (in industry lingo, a "Digital Audio Workstation" program) to record your song. When you start up, you have audio bus "master", which outputs to soundcard. You set a click track to pace away at steady 110 bps, add an audio track, and record your singing using a microphone. Specifically, you set up following connections in JACK (this can easily be done either with jack_connect command-line tool, qjackctl, or Ardour's own connection settings):

  • "alsa_pcm:capture_1" → "ardour:Song/in 1"
  • "alsa_pcm:capture_2" → "ardour:Song/in 2"
  • "ardour:Song/out 1" → "ardour:master/in 1"
  • "ardour:Song/out 2" → "ardour:master/in 2"
  • "ardour:master/out 1" → "alsa_pcm:playback_1"
  • "ardour:master/out 2" → "alsa_pcm:playback_2"

This describes how audio is routed within application and how the audio is routed to another application - or, in this case, the hardware.

Okay, so now you can record stuff from your ALSA soundcard. It goes from the mic to Song track. Song track goes to master. Master goes to sound card.

Record away.

You add another track, likewise outputting to Ardour master bus, but it takes inputs from another application: Hydrogen (a drum machine).

Record away.

Add another application. Fluidsynth (a SoundFont-based software synthetizer, capable of using MIDI input).

Record away.

Piece by piece, the song starts to take shape after you record all separate app's outputs, directly from the applications themselves.

You can then use something like jackrec - connect to Ardour's outputs and save them to a .wav. Like this: jackrec -f file.wav -d 20 "ardour:master/out 1" "ardour:master/out 2" - this is cooler than Ardour's own "export session to .wav" because it allows you to use transport chain and add weird effects. And I believe it also has higher quality.

Cool, huh?

Jack's home page: http://jackit.sourceforge.net/


Also, a rather interesting audio CD ripping program written by Arne Zellentin. It's similar to Grip and has most of its features, but uses a curses-based interface, uses external programs to do the ripping (everything configurable!) and has pretty interesting features like disk space availability monitoring... It's written in Python.