Expression & MIDI 2.0

MPE: MIDI Polyphonic Expression

Spec: MPE specification (MMA RP-053) All MIDI specs

MIDI 1.0 puts pitch bend, channel pressure and most controllers on the channel, so every note on that channel bends together. MPE works around that by giving each sounding note its own channel. The result is per-note pitch, pressure and timbre that still runs over plain MIDI 1.0 cables and drivers.

MPE was adopted by the MMA in 2018 as Recommended Practice RP-053. It is used by expressive controllers such as the ROLI Seaboard, Expressive E Osmose, LinnStrument, Haken Continuum, Sensel Morph and Ableton Push 3, and it is supported by most current DAWs and many soft synths.

The five dimensions of touch

A typical MPE controller tracks a note along five axes, each mapped to a standard MIDI 1.0 message on the note's own channel:

DimensionGestureMessageBytes
StrikeHow hard the key is hitNote On velocity9n kk vv
LiftHow fast the finger leavesNote Off (release) velocity8n kk vv
Glide (X)Sliding left/rightPitch Bend (14-bit)En ll mm
Slide (Y)Moving up/down the keyControl Change 74Bn 4A vv
Press (Z)Pressure after the strikeChannel PressureDn vv

The spec permits Polyphonic Key Pressure (An) in place of Channel Pressure, but Channel Pressure is the norm and what receivers should expect by default.

Zones, master channels and member channels

The 16 channels of a MIDI port are split into at most two zones. Each zone has one master channel, which carries messages that apply to the whole zone, and a range of member channels that carry individual notes.

ZoneMaster channelMember channels
Lower zoneChannel 12 upward: 2 … (1 + n)
Upper zoneChannel 1615 downward: 15 … (16 − n)
  • A single Lower zone with 15 member channels (2–16) is the most common setup and is what most controllers send out of the box.
  • Two zones split the channels, for example a Lower zone of 7 members (2–8) and an Upper zone of 7 members (9–15). The zones may not overlap. If a new configuration makes them overlap, the zone that was configured first shrinks.
  • Messages on the master channel, such as sustain pedal, program change, or a zone-wide pitch bend, apply to every note in the zone. They combine with each note's own member-channel values.

The MPE Configuration Message (MCM)

A zone is set up with Registered Parameter Number 6, sent on the zone's master channel. The Data Entry MSB gives the number of member channels. A value of 0 turns the zone off.

Lower zone, 15 member channels (sent on channel 1)
B0 65 00   CC 101 RPN MSB = 0
B0 64 06   CC 100 RPN LSB = 6   → RPN 6: MPE Configuration
B0 06 0F   CC 6   Data Entry MSB = 15 member channels

Upper zone, 4 member channels (sent on channel 16)
BF 65 00
BF 64 06
BF 06 04   → master = 16, members = 15, 14, 13, 12

Senders often follow with the null RPN (CC 101 = 127, CC 100 = 127) so that later Data Entry messages can't change the parameter by accident.

Receiving an MCM also resets pitch bend sensitivity to its MPE defaults:

Channel typeDefault pitch bend rangeChanged with
Member channels±48 semitonesRPN 0 on any member channel; applies to all members of the zone
Master channel±2 semitonesRPN 0 on the master channel

±48 semitones (four octaves) lets a finger slide across most of a playing surface with one bend. The 14-bit value gives a step of about 0.59 cents (96 semitones / 16384), which is fine enough for smooth glides.

A single note, byte by byte

A player in the Lower zone presses middle C, slides up a whole tone, leans into the key, and lets go. The controller picked channel 3 for the note. Per-note state is sent before the Note On, so the synth's voice starts with the right pitch, timbre and pressure:

BytesMeaning
B2 4A 40Ch 3, CC 74 (Slide) = 64, the neutral starting point
D2 00Ch 3, Channel Pressure = 0
E2 00 40Ch 3, Pitch Bend = 8192 (centered)
92 3C 5ACh 3, Note On, C4 (60), velocity 90
D2 30Pressure rises to 48 …
E2 55 42Pitch Bend = 8533 → +2 semitones at ±48 (8192 + 2 × 8192⁄48 ≈ 8533)
B2 4A 5CSlide moves to 92
82 3C 28Note Off, release velocity 40. Channel 3 is free again.

Running status still works

MPE streams contain long runs of pitch bend and pressure on the same channel, which suits running status. Senders may also thin out these streams (for example, cap them at a few hundred messages per second) when the link is a 31.25 kbaud DIN cable.

Channel allocation

The spec leaves the allocation algorithm to the sender but recommends behavior along these lines:

  • Use the least-recently-used free channel for a new note. That way the release tail of the previous note on that channel has the longest time to fade before the channel's pitch bend and CC 74 change.
  • When every member channel is busy, share a channel with the note that has been active the longest or is quietest. Notes that share a channel also share its expression, so senders avoid it where they can.
  • Receivers should treat each member channel as monophonic per note and keep a voice's expression bound to its channel until Note Off.
  • Reset per-channel values (pitch bend to center, pressure to 0, CC 74 to a sensible default) before reusing a channel, as in the example above.

Receiver behavior

  • Combine a voice's member-channel pitch bend with the zone's master-channel pitch bend, each scaled by its own bend range.
  • Apply master-channel controllers (sustain, modulation, volume) to every voice in the zone.
  • CC 74 is often sent as an absolute value from 0 to 127 starting near 64. Some controllers instead start each note at 0 and send motion relative to the initial touch point. Synths usually let you set this per patch.
  • A receiver in "MPE mode" should accept an MCM at any time and reconfigure. If it receives no MCM, it should still accept the common default of one Lower zone with 15 members.

Compatibility notes

  • Non-MPE synths: an MPE stream played into an ordinary multitimbral synth sounds right only if the same patch is loaded on every member channel. Otherwise notes jump between patches.
  • Recording: a DAW has to keep notes and their per-channel data together. Editors that merge channels into a single-channel clip will smear one note's bends across all notes.
  • Bend range mismatches are the most common MPE bug. If a controller assumes ±48 but the synth uses ±2 (or the reverse), slides overshoot or barely move. Send the MCM, or RPN 0, explicitly.
  • MPE 1.1 is a later revision of the spec. It clarifies defaults and receiver behavior; the basic MIDI 1.0 message scheme described here is unchanged. The MPE MIDI-CI profile lets devices discover and switch on MPE automatically.

MPE and MIDI 2.0

The MIDI 2.0 Protocol makes the one-channel-per-note approach unnecessary. On a single channel, each note can have its own:

  • Per-Note Pitch Bend (32-bit),
  • Registered and Assignable Per-Note Controllers (256 of each per note, 32-bit values),
  • Polyphonic Pressure at 32-bit resolution,
  • Per-Note Management messages that detach or reset a note's controllers.

MPE is still useful in the MIDI 2.0 world. Most existing hardware speaks it, the MPE Profile negotiated over MIDI-CI can switch it on automatically, and translators can map MPE member-channel data onto MIDI 2.0 per-note messages.