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. See below.

Note: 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.

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 sounds 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 continuous X, Y and Z, but they are monophonic and therefore not MPE.

Also, it is common for a synth maker to add MPE capability but no expressive preset sounds, or to create "MPE sounds" that are actually standard keyboard sounds with no full pressure control of note loudness, or having Y-axis assignments that are better suited for a keyboard's mod wheel that therefore not very useful in an MPE instrument. So it is a good thing to give some thought to how an MPE sound is different than a piano keyboard sound.

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 MPE 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