Developers: how to add MPE compatibility

If you are a developer of MIDI sound generators and would like to add MPE (MIDI Polyphonic Expression) capability, this page will give you some help. MPE is pretty straightforward and is very similar to the old MIDI Mode 4 (Omni off, Mono). It is summarized on the page "What is MPE?" (click at left) and the official MPE specification can be downloaded from the MIDI Association web site here.

In brief overview, implementing MPE in your synth involves the following:

1) routing each incoming Member channel to its own voice, listening only for the five per-note messages (Note On, Note Off, Pitch Bend, CC74 and Channel Pressure/Aftertouch),

2) routing the Master Channel ( 1 or 16) messages to all voices,

3) adding UI elements for users to select the Master channel (1 or 16), Member Channels, and MPE pitch bend range (default is +/- 48).

4) creating MPE presets.


1) It best to permit the MPE Pitch Bend Range to be set globally (not individually for each sound preset) so if the controller has a different bend range than the default +/-48, the user don't have to change it after selecting each new preset.

2) Some MPE synths don't implement a master channel. Instead, all received messages except for the five per-note messages (Note On, Note Off, Pitch Bend, CC74 and Channel Pressure/Aftertouch) are applied to all voices, regardless of the channel on which they are received.

3) Ableton Live and a few other DAWs reassign all received messages to the track's assigned single MIDI channel, thereby preventing MPE plug-ins from receiving the necessary multiple channels. Live also blocks reception of MIDI Polyphonic Pressure messages, preventing the alternative of polyphonic pressure over a single MIDI channel.

Creating new expressive sounds

With your MPE implementation, it is important to also create expressive preset sounds. I use the term expressive sounds to mean sound that respond to continuous X, Y and Z finger moments in addition to a convention MIDI keybaord's velocity and release velocity. So MPE sounds are merely expressive sounds that can be played polyphonically (MIDI polyphonic expression). For example, Audio Modeling's software instruments are fully expressive, responding to Velocity and X, Y and Z, but they are monophonic and therefore not MPE.

Expressive sounds are different from MIDI keyboard sounds in the following ways:

1) Pressure
In a conventional MIDI piano keyboard, pressure (aftertouch) is sent only after the key is fully pressed and the note is sounding, and therefore is not useful for controlling the overall volume of each note from silence to full, but rather for adding an extra effect to a note that is already sounding. In an MPE controller, pressure (aftertouch) messages are sent continuously from the lightest to heaviest touch, and can therefore be used to continuously control the overall volume of each note from silence to full level, analogous to wind pressure on a wind instrument or bow pressure on a bowed string instrument. For this reason, it is good to create some sounds that use pressure to continuously control note volume from silence to full.

2)  Y-axis
MPE controllers add Y-axis control. Often people initially make the mistake of thinking that Y-axis should be used in the same way as Mod Wheel, adding LFO modulation. This is not a good idea because one of the main purposes of expressive controllers is to replace the venerable and unnatural LFO with performed gestures like vibrato (left/right finger movement) or tremolo (repeated varying pressure). Instead, a better use of Y-axis is to provide a continuous change in timbre, analogous to picking a guitar or bowing a violin at different string positions between the bridge and neck, or varying embouchure on a wind instrument. A good example of this in subtractive synthesis is to assign Y-axis to vary the pulse width of a pulse oscillator, thereby providing a continuous change in the fundamental harmonic content of the waveform in such a way that all tones produced are useful. In this way, timbral variation becomes a performance gesture.

For some examples of good expressive sounds, download my LinnStrument-optimized sounds for Apple's Logic or MainStage from the Getting Started page.

If you have any questions, you're welcome to contact me.

- Roger