MadJACK is a MPEG Audio Deck for the Jack Audio Connection Kit with an OSC based control interface.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit 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.