Music Technology

MPE: Getting Started With Per-Note Expression

Five dimensions per note instead of one velocity value — and the reason it works at all is a channel-allocation trick inside plain MIDI 1.0, which is also the reason it goes wrong in specific, fixable ways.

A standard MIDI note carries one expressive number: velocity, fixed at the moment you strike it. Everything after that is global — the pitch bend wheel bends every sounding note, the mod wheel modulates all of them.

MPE — MIDI Polyphonic Expression — makes those dimensions per-note. One note in a chord can bend while the others hold. One finger can add pressure while the rest stay still.

This is a guide to getting it working, and to understanding the one mechanism that explains every problem you will have with it.

The five dimensions

The commonly used names come from ROLI, and they are more memorable than the spec’s:

NameWhat you doTypical MIDI mapping
StrikeHow hard you hit the noteNote-on velocity
PressPressure after the note soundsChannel pressure (aftertouch)
GlideMove the finger sidewaysPitch bend
SlideMove the finger up/down the keyCC74
LiftHow fast you releaseNote-off velocity

Strike and Lift are per-note events. Press, Glide and Slide are continuous, which is the part that changes how you play — they are gestures held over the life of a note rather than values set at its start.

The trick that makes it work

Here is the thing to understand before anything else, because it explains all the troubleshooting below.

MIDI 1.0 has no concept of a per-note controller. Pitch bend and channel pressure are channel-wide messages. The obvious workaround — Mono Mode — gives each note its own channel but caps you at 16 notes, and in practice far fewer.

MPE’s solution is a recommended practice for using individual MIDI channels to achieve per-note control without requiring Mono Mode. Your controller allocates each new note to its own channel from a pool, sends that note’s bend and pressure on that channel, and returns the channel to the pool when the note ends. Channel 1 typically carries global messages for the zone.

So: MPE is not a new protocol. It is ordinary MIDI 1.0 messages, used in a specific disciplined way, defined as a Recommended Practice by the MIDI Manufacturers Association and AMEI.

Which means an MPE controller plugged into a non-MPE synth is not broken — it is sending valid MIDI that the synth interprets wrongly, usually as a storm of notes on different channels with independent bends. That is the signature failure, and recognising it saves an hour.

The current specification is M1-100-UM, MPE v1.1, which replaced the original RP-053 v1.0. Version 1.1 is an editorial clarification with no technical design changes — so documentation written against the original spec is still accurate.

What you need

A controller. Options differ enormously in feel and price:

  • Continuous soft surfaces — the ROLI Seaboard family, where Glide is literally sliding along a silicone keywave
  • Grid controllers — LinnStrument, Erae Touch, Embodme Erae II, Keith McMillen K-Board Pro 4
  • Key-based with per-note sensing — Expressive E Osmose, which gives real keys all five dimensions
  • Touch surfaces — Sensel Morph
  • iPad apps, which cost nothing and are a legitimate way to find out whether you like this before spending

A sound source that understands MPE. This is non-negotiable and the most common oversight. Surge XT is free, open-source, cross-platform and fully MPE-capable, which makes it the right place to start — no purchase, no excuses. Beyond that, Equator2, u-he’s synths, Arturia Pigments, Vital, Madrona Labs’ instruments, and the synths built into Bitwig.

A host that passes it through. Bitwig Studio, Ableton Live, Logic Pro, Cubase, Studio One and FL Studio all support MPE in current versions. Reaper can do it with per-note modulation configured manually.

Getting a first sound

  1. Connect the controller and check the host sees it. Enable MPE for that input — it is usually a per-device checkbox, and it is usually off by default.
  2. Load Surge XT (or another MPE synth) on a track.
  3. Enable MPE in the synth as well. Both ends need it on. Half the “MPE doesn’t work” reports are one of the two switches.
  4. Play one note and press into it. If nothing changes, the synth has MPE off, or Press is not routed to a destination.
  5. Play a chord and bend one note. If the whole chord bends, MPE is not active and you are getting legacy channel-wide behaviour.

Step five is the real test. Everything else can look fine while the thing you actually wanted is not happening.

Routing the dimensions somewhere useful

An MPE synth gives you Press and Slide as modulation sources. Where you send them is the whole craft, and the default assignments are rarely the interesting ones.

Start here, in this order:

  • Press → filter cutoff. The most legible mapping there is. Leaning into a note opens it up. Immediately feels like an instrument.
  • Slide → something timbral but not pitched. Wavetable position, FM index, oscillator blend. Keep it off anything that reads as tuning, or you will fight Glide.
  • Press → amplitude, carefully. Powerful for sustained material; makes staccato playing hard to control. Use a shallow amount.

Two mistakes worth skipping:

Mapping everything at once. Five dimensions into five destinations produces a sound you cannot control and cannot debug. One mapping at a time, until each is predictable.

Setting pitch bend range wrong. Glide range must agree between controller and synth. If the controller sends ±48 semitones and the synth expects ±2, sideways movement produces either nothing or chaos. Check both numbers explicitly — do not assume.

Troubleshooting, all of it from the channel trick

Only one note responds to pressure. The synth is treating channel pressure as channel-wide. MPE is off at the synth end.

Stuck notes. A note-off arrived on a different channel than its note-on, usually because something between controller and synth is rewriting channels. Remove any MIDI filters, transposers or channel-forcing utilities from the path.

Everything is monophonic. The synth is in Mono Mode rather than MPE mode — a genuinely easy mistake, since Mono Mode is the old approximation of the same idea.

Polyphony lower than expected. The channel pool is finite. Fifteen notes is the practical ceiling with one global channel, and controllers often allocate fewer.

Works in standalone, not in the DAW. The host is not passing MPE to the plugin. Find the per-track or per-device MPE setting.

How to practise it

The genuine difficulty with MPE is not configuration, it is that you now have a continuous instrument and years of habits from a switch-based one.

Three exercises that help more than playing repertoire:

Hold one note and move only Press. No other hand, no other notes. Learn what your pressure range actually produces, and where the mapping stops being useful.

Play a triad and move one voice. This is the thing MPE exists for and the thing no other MIDI setup can do. It is also awkward at first, because isolating one finger’s pressure while the others hold steady is a physical skill.

Play something you know well, badly, with expression on. Your existing muscle memory will fight the surface. Better to find that out on familiar material.

Where it is going

MPE is a well-designed workaround for a limitation of MIDI 1.0, and MIDI 2.0 addresses per-note control natively rather than by convention. That transition will take years, and MPE hardware and software will keep working throughout — the spec’s own framing, as a Recommended Practice for communicating multidimensional control using MIDI 1.0 messages, is honest about what it is.

For now it is the working standard, it is supported across every major DAW, and the entry cost is a free synth and whatever controller you can borrow.

Sources