Fork me on GitHub

Qualm: Queing Application for Live MIDI

What is Qualm?

Qualm might be referred to simply as a "MIDI event processor" -- it connects to an input MIDI port, listens for events, and will output new MIDI events on an output port as necessary. For example, it can listen for particular note on/off events and use them to send out patch changes, or even duplicate one channel's pedal events on other channels so that one pedal can do the work of many.

Qualm can also be thought of as a musical analog to the software used to control lighting for live shows. It can divide a production into a series of "cues", and step through them sequentially based on events. It can also rewind or fast-forward to any given cue state simply by entering a cue number into the program. If the cue numbers are linked to measure numbers in the music, it's easy and straightforward to use the system for rehearsals.

Because Qualm uses MIDI events for all processing, it could also be used to control (or be controlled by) any MIDI-enabled application, such as lighting boards.

Why Qualm?

Most musical theater productions that need to execute lots of patch changes accomplish this by using a synthesizer module that can store a large number of patches in sequence, and then using a pedal that can send a "patch advance" command to the module. Qualm tries to improve on this model in several ways.

No specialized hardware. Not all synthesizer modules have the "patch advance" feature, and not all pedals are easily programmed to submit the correct commands. Sometimes, budgetary concerns mean that you have to make do with older equipment. With Qualm, any MIDI synthesizer module can be used (or even the keyboard's built-in bank of patches), and any computer that can run Java can be utilized. Some form of computer MIDI interface will be needed, but a USB-MIDI cable can often be found cheaply. Qualm even can make the need for special pedals un-necessary, since the trigger to move to the next patch can be anything from an unused button to a designated key on the keyboard.

Support for reversing a patch. If you accidentally advance to the next patch out of sequence, it can be difficult to recover while the orchestra continues to play. Qualm makes it possible to define a "patch reverse" trigger, so that the keyboard player can quickly get back to the correct part of the score.

Better rehearsal support. During rehearsals, or when trying to fine-tune parts of the show, the music director will often want the entire orchestra to start at a given measure number. This requires the keyboard player to dial in the correct patch, which with an older approach can be time-consuming as he searches through hundreds of changes for the correct spot. With Qualm, getting the keyboards set up for measure 125 of song 13 is as simple as typing "13.125".

Easier handling of large numbers of patches. There is limited space in the synthesizer's user banks, so trying to put all the patch changes in a row can quickly eat up all the memory. In addition, some synth modules require that if a patch is used frequently, it needs to be copied separately into different areas. As such, later alteration of the sound requires a time-consuming and potentially error-prone operation of copying the patch into all the places where it is used. With Qualm, each patch is set up individually, and Qualm handles switching among them in the correct order.

Versatility. With Qualm, you can make patch changes occur through any kind of trigger, and can even set up special triggers for different sections of the show, so that the act of playing the score automatically advances to the next patch when a fast change is required. Multiple keyboards can be set up to share a single synthesizer module, and can be linked together so that when one keyboard changes to a new patch it will automatically switch the sound on another keyboard.

What is Qualm written in?

Qualm is written in Java, and uses the Java Sound API for all processing. In order to use it, therefore, you will need an implementation of Java Sound that can talk to your MIDI devices. For Windows, this will require a JDK version 1.4.1 or greater. For Linux, I recommend the use of the open-source Tritonus implementation. This implementation also has support for ALSA devices.

For more information on Java Sound, see the Java Sound Resources page.

Qualm also makes use of the gnu.getopt command-line option parser.


Stephen Peters (


The manual for version 0.8 of Qualm is available as a PDF.



For convenience, a pre-built version of Qualm is available for MacOS X as a compressed package file.


You can download the source for Qualm in either zip or tar formats.

You can also clone the project with Git by running:

$ git clone git://