Developers: How to add MPE Capability
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 here. and the official MPE specification can be downloaded from the MIDI Association web site here, though for some odd reason they require you to create an account before downloading it.
In brief overview, implementing MPE in your synth involves the following:
1) routing each incoming Per-Note 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), Per-Note 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 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 sounds. I use the term expressive sounds instead of MPE sounds because the main goal is to create sounds that respond to how MPE controllers use pressure and Y-axis differently than a MIDI keyboard. So MPE sounds are merely expressive sounds that can be played polyphonically.
Expressive sounds are different from MIDI keyboard sounds in the following ways:
In a MIDI 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 each reason, it is good to create some sounds that use pressure to continuously control note volume from silence to full.
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 (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.