MadJACK is a MPEG Audio Deck for the Jack Audio Connection Kit with an OSC based control interface. It was written as a backend for DJ music playback and is released under the GPL license.

It aims to achieve the following:

It does not do the following:

In order to segue and cross-fade between tracks I have multiple copies of MadJACK running.

Command Line Parameters

Usage: madjack [options] [<filename>]
   -a            Automatically connect JACK ports
   -l <port>     Connect left output to this input port
   -r <port>     Connect right output to this input port
   -n <name>     Name for this JACK client
   -j            Don't automatically start jackd
   -d <dir>      Set root directory for audio files
   -p <port>     Specify port to listen for OSC messages on
   -R <secs>     Set duration of ringbuffer (in seconds)
   -v            Enable verbose mode
   -q            Enable quiet mode

OSC Interface

 → /deck/play          - Start deck playing
 → /deck/pause         - Pause deck
 → /deck/stop          - Stop Deck playback
 → /deck/cue [f]       - Cue deck, with optional cue point (in seconds)
 → /deck/eject         - Eject the current track from deck
 → /deck/load (s)      - Load <filename> into deck

 → /deck/get_state     - Get deck state
  replies with:
 ← /deck/state (s)
 State Strings:
    PLAYING          - Deck is playing
    PAUSED           - Deck is paused
    READY            - Deck is loaded and ready to play
    LOADING          - Starting to decode track
    STOPPED          - At end of track / Stopped
    ERROR            - Problem opening/decoding track
    EMPTY            - No track loaded in deck

 → /deck/get_error     - Get description of error (when in state ERROR)
  replies with:
 ← /deck/error (s)

 → /deck/get_version   - Get name and version number of MadJACK
  replies with:
 ←  /deck/version (ss)
 → /deck/get_position  - Get deck position (in seconds)
  replies with:
 ← /deck/position (f)

 → /deck/get_filepath  - Get path of track (as passed to /deck/load)
  replies with:
 ← /deck/filepath (s)
 → /ping               - Check deck is still there
  replies with:
 ← /pong

Replies are send back to the port/socket that they were sent from.


Included is a minimal GUI, written with QT4, which runs as a seperate binary, and communicates with madjack backends. The QMadJACK class is designed to be reused in other applications.

QMadJACK Screenshot



Valid XHTML 1.1! Nicholas J Humfrey <>