Skip to content
Jim Menard edited this page Jul 11, 2020 · 4 revisions


Clone this wiki locally


Welcome. Welcome. Welcome.

-- The entire Ig Nobel awards ceremony welcoming speech

KeyMaster is a MIDI processing and patching system. It allows a musician to reconfigure a MIDI setup instantaneously and modify the MIDI data in real time.

With KeyMaster a performer can split controlling keyboards, layer MIDI channels, transpose them, send program changes and System Exclusive messages, map and filter controllers, and much more. With a computer keypress or mouse click or the stomp of a foot switch (or any other MIDI event), an entire MIDI system can be totally reconfigured.

KeyMaster lets you describe songs, which are lists of patches that make connections between instruments. Those connections can send program changes, set keyboard splits, transpose, send, remap, or limit volume or other controller changes --- all in real time.

Set lists let you organize songs into set lists for live performance or in the studio.

Any incoming MIDI message can trigger an action such as moving to the next or previous patch or song. For example, you can tell KeyMaster to move forward or backward based on controller values coming from foot switches or an instrument's buttons.

Any array of MIDI commands can be stored as a named message which can be sent via a trigger, a key press, or from any filter.

A master MIDI clock is sent to all outputs when it is running. The tempo can be set per song.

A software panic button turns off any stuck notes.

KeyMaster is cross-platform: it should run on Mac OS X, Linux, and Windows.

KeyMaster is by Jim Menard. It is a faster C++ version of PatchMaster. The Github repo is here.


  • The PortMidi library
  • The wxWidkgets library
  • The SQLite3 library (includes with MacOS)
  • A C++11 compiler and the make program


Install PortMidi. If you use brew, you can install it by running brew install portmidi.

Install wxWidgets. Here are their installation instructions. Even simpler if you use brew on the Mac: you can install it by running brew install wxmac.

SQLite3 comes with MacOS. In case you're on another platform, here is the download page.

Download the KeyMaster code from Github and run make install. If you're on a Mac, you will need the XCode Command Line Tools package. (I think you will be prompted to download them if you don't have them installed already.) If you're not running MacOS, you'll have to change a few of the compile-time flags in the Makefile first.

By default, keymaster will be installed in /usr/local/bin. To install it elsewhere run make install bindir=/path/to/desired/dir.

Running KeyMaster

The terminal command

keymaster --list-devices

outputs the list of MIDI input and output ports and exits. The short form of the --list-devices flag is -l.

keymaster []

starts KeyMaster and optionally loads

If you start KeyMaster without specifying a save file, it scans your system to find all attached MIDI devices and then, as a convenience, creates a number of songs that link them together in various combinations.

More Information

See the Sidebar.