Expression & MIDI 2.0
MPE: MIDI Polyphonic Expression
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:
| Dimension | Gesture | Message | Bytes |
|---|---|---|---|
| Strike | How hard the key is hit | Note On velocity | 9n kk vv |
| Lift | How fast the finger leaves | Note Off (release) velocity | 8n kk vv |
| Glide (X) | Sliding left/right | Pitch Bend (14-bit) | En ll mm |
| Slide (Y) | Moving up/down the key | Control Change 74 | Bn 4A vv |
| Press (Z) | Pressure after the strike | Channel Pressure | Dn 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.
| Zone | Master channel | Member channels |
|---|---|---|
| Lower zone | Channel 1 | 2 upward: 2 … (1 + n) |
| Upper zone | Channel 16 | 15 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 type | Default pitch bend range | Changed with |
|---|---|---|
| Member channels | ±48 semitones | RPN 0 on any member channel; applies to all members of the zone |
| Master channel | ±2 semitones | RPN 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:
| Bytes | Meaning |
|---|---|
| B2 4A 40 | Ch 3, CC 74 (Slide) = 64, the neutral starting point |
| D2 00 | Ch 3, Channel Pressure = 0 |
| E2 00 40 | Ch 3, Pitch Bend = 8192 (centered) |
| 92 3C 5A | Ch 3, Note On, C4 (60), velocity 90 |
| D2 30 | Pressure rises to 48 … |
| E2 55 42 | Pitch Bend = 8533 → +2 semitones at ±48 (8192 + 2 × 8192⁄48 ≈ 8533) |
| B2 4A 5C | Slide moves to 92 |
| 82 3C 28 | Note 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.
Spotted an error? Edit this page on GitHub.