MadJACK is a MPEG Audio Deck for the Jack Audio Connection Kit with an OSC based control interface.
C C++ Perl M4 Shell Makefile QMake
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Nicholas J. Humfrey <>

For the latest version of MadJACK, please see:

What is MadJACK ?

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 licence.

It aims to achieve the following:
 - Lightweight
 - Talk natively to JACK
 - Easy to script / remote control
 - High Quality audio
 - Skip free playback
 - Responsive / Low Latency
 - Reliable / Not Crash

It does not do the following:
 - Have pitch control on playback (yet!)
 - Decode metadata/ID3 tags
 - Queue up multiple tracks
 - Have playlists

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

Terminal Interface

MadJACK accepts the following keys on 

  h: Display help message
  p: Play/Pause Deck
  l: Load a Track
  e: Eject current track
  s: Stop Deck
  c: Cue deck to start of track
  C: Cue to specified time
  q: Quit MadJack

Command Line Interface

madjack_remote <command>

 play, pause, stop, cue [<cuepoint>], eject, load <filename>, status, position, filepath, ping

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_duration             - Get track duration (in seconds)
  replies with:
 /deck/duration (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:

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