MPE Drift · Documentation
← Back to site
Documentation

MPE Drift User Guide

A plugin that sits between your keyboard and your synth and gives every note its own drifting pressure, pitch, timbre and pan. This guide covers every control in the window.

In development. MPE Drift is not released yet. This guide describes the plugin as it is being built, so that what you read here and what you see in the window are the same thing. If you want to hear about the first build, there is a list on the product page.

What MPE is

MIDI Polyphonic Expression gives every note its own MIDI channel, so pitch bend, pressure and timbre can move per finger instead of per keyboard.

What MPE Drift does

It re-voices every incoming note onto a member channel of its own and generates the expression that an ordinary keyboard cannot send, so a plain key press arrives at the synth as a living MPE voice.

With an MPE controller

Your own playing is kept. What you send is forwarded onto the re-allocated channel and the generated motion layers on top of it, so the plugin adds to your expression instead of replacing it.

The same engine as the app

DRIFT started as a module inside MPE Insight. The plugin runs the same engine, measured against the same test fixtures, so a part played in either one comes out the same.

Requirements & Formats

MPE Drift is a note effect: MIDI goes in, MIDI comes out, and no audio passes through it. It needs a host that can run a MIDI plugin and route its output into an instrument, and it needs something MPE capable at the other end, either a synth in MPE mode or a DAW track switched to MPE.

CLAP

MPE Drift.clap, the native build.

VST3

MPE Drift.vst3, built from the same CLAP through a wrapper, so both formats are one plugin and not two code paths.

Not built

AU and AAX are not part of this plugin.

Windows

The build runs on Windows. macOS is not part of the first release.

Installing

Both formats go into the standard shared folders, which is where every host looks by default:

FileFolder
MPE Drift.clapC:\Program Files\Common Files\CLAP
MPE Drift.vst3C:\Program Files\Common Files\VST3

Then rescan your plugins, or restart the host. Most hosts only read those folders at startup.

In your host

Put MPE Drift before the instrument that should hear it: on the same track ahead of an MPE synth, or on a MIDI track whose output is routed to one. What leaves the plugin is a complete MPE stream on member channels 2 to 16, so the receiver has to be expecting one.

The power switch comes back with the project. This is a deliberate difference from the module in MPE Insight, where the app always starts with DRIFT off so that it can never boot silently armed into a live rig. In a host that rule would be the wrong one: a project that sounds different from the one you saved is the fault, so power is an automatable parameter here and is restored with the rest of the state.

Nothing at the other end? Check the receiver first. A synth that is not in MPE mode hears fifteen channels of the same patch and the per note motion disappears. The Send MPE Setup button in the Output tab tells a receiver that honours the MPE Configuration Message what to expect.

The flow field

The field is the picture of the wire. Its own header carries the title on the left and, on the right, the view switch and the time axis; the lane rail runs down the left edge, and the channel filter sits underneath.

Four views

ViewWhat it shows
FlowEvery curve in one band: up to fifteen voices times five lanes, all on top of each other. The stacking is the point, because it is the only way to see what a Mode does. In Parallel a colour group falls together into one line, in Chaos it is a tangle, in Orbit a wave travels through it, in Split two halves run against each other.
LevelsOne bar per lane and channel: a column for each member channel with a bar inside it for every lane. The reading is how much, not what shape.
NotesNote names and drift nodes, one column per member channel. This is the picture the module in MPE Insight has always drawn.
LanesOne band per lane, so a single modulator can be watched on its own without the other four crossing it.

Two time axes

Hold is the running band: the right edge is now, the left edge is 1.55 seconds ago, and the picture scrolls. Scope triggers on the start of every note and is exactly one arp step wide, so the curve stands still and starts again from the left with each note. Scope needs a step to measure, so it is only available with the arpeggiator running.

The node carries three values

Each sounding voice gets a ring node, and it says three things in three radii instead of asking for a legend: the outer ring is how far the lane has pushed that voice right now, measured against how far it could; the core is the timbre value on CC74; the inner ring is pressure.

Channel filter and the steal lamp

The channel filter under the field is a view filter on the input side, the same one every module in MPE Insight has: it hides voices whose incoming channel is switched off, and it never changes a byte on the wire. Non MPE input arriving on the master channel is never filtered. When all fifteen member channels are busy and a new note takes one away from an older one, the field says so.

The four tabs

One card, four tabs, and only things that change bytes live in them. Everything about the picture itself stays with the field.

Lanes

The five modulators.

Notes

What every note gets: octaves, chords, scale, spread, bend quantize, humanize.

Arp

Held keys as a pattern.

Output

What leaves the plugin: bend range, MPE setup, seed.

Lanes

Five independent per voice modulators. Each lane carries its own target, shape, depth, rate and colour, and a target can sit on one lane only, so the colour stays a readable legend: a target another lane already holds is simply not offered in the list.

Pitch Brightness, CC74 Pressure Pan, CC10

Out of the box the lanes are those four classic destinations with the fifth switched off. The target list itself is wider: Pitch, Pressure and every continuous controller from CC0 to CC119 under its own name. That last part matters more than it sounds, because on member channels an ordinary CC becomes a per note CC, and that does not exist without MPE.

Depth for a pitch lane is in cents, up to 200 of them, so two full semitones. Every other target is a percentage of its own range. Rate runs from 0.02 to 3 Hz while the lane is free, and becomes the division picker once it is synced.

Mode

Each lane says how its voices relate to one another, which is the difference between a chorus and a breath. The switch in the head row sets all five lanes at once; each lane can still be set on its own afterwards.

ModeWhat the voices do
ChaosThe default. Every voice draws its own phase and its own rate variation, so the fifteen member channels never move in lockstep and a single sustained chord already feels chorused.
ParallelOne clock, one phase, every voice together. The chord swells and falls as a block.
OrbitThe phase is spread evenly across the member channels, so the movement travels through the chord as a standing wave.
SplitAlternate channels run in counter phase, so two halves pull against each other.

Static and S&H Random have no phase to spread, so Orbit and Split are greyed out on those lanes and the lane runs as Parallel. They are greyed rather than hidden, so the row still says what the engine is doing.

Sync

A lane runs free or on the host's grid. Synced, the same Rate control stops reading in hertz and becomes the division picker, stepping through 23 divisions from 4/4 down to 1/128 with the dotted and triplet values in between. Switching back and forth loses nothing: the hertz rate and the last division are both kept.

A synced lane also drops the per voice rate variation, Chaos included. A rate that scatters cannot sit on a grid, and a Sync that kept scattering would be a label without an effect. Where a voice sits inside the bar stays the Mode's business.

Note generators

On top of the modulation, MPE Drift can generate whole notes. Each generated note is a full MPE voice of its own with its own drift, and each one takes one of the fifteen member channels.

Octaves stack copies one and two octaves above and below every played note, with a settable relative velocity. Chord turns a single key into a full chord, the played note becoming the root and every interval getting its own voice. Scale locks everything generated into a key and scale, so the chord machine turns diatonic and spread and bend quantize follow the same scale. Note spread scatters the pitch per note, in semitones, snapped to the scale when the lock is on. Bend quant pulls continuous glides onto scale notes, where 100% is a hard snap and less keeps some of the slide, while plain held notes are left alone. Velocity and Timing are the humanizers: a little variation in strength and a few milliseconds of give, so no two notes are identical.

Fifteen channels, and no more. Octave layers and chord intervals each cost a channel per played note. A wide chord together with the chord machine can run past fifteen, and then the newest note takes a channel from the oldest one. The voice lamp in the head row and the field both say when that happens.

Arpeggiator

With the arp on, held keys become a step pattern instead of sounding directly, and every step still runs through the whole chain, drift and spread and even the chord machine included. Because each step builds new voices, every hit re rolls its own detune, phase, velocity and timing, so the same chord breathes differently on every beat.

Direction is Up, Down, Up & Down, Random, As Played or Chord, over one to four octaves. Chord is a distribution rather than a direction: it plays the whole held chord on every step, and there the octave range rotates the chord one octave per step instead of stacking it, which keeps the voice count flat.

Rate runs free or locked to the host's transport. Gate sets note length as a fraction of the step. Latch keeps the pattern playing after you let go, and the next key press starts a new chord. Shuffle makes every second step of the grid play late, from 50% dead straight through 66% triplet swing to 75% hard dotted; the grid itself never moves, so a pair of steps always adds up to the same span of time and the pattern stays locked to the bar however far you push it.

MPE output

Bend range has to match what the receiving synth uses on its member channels, or the pitch depth will be wrong in the same proportion. The MPE standard is 48 semitones, which is the default here.

Send MPE Setup transmits the MPE Configuration Message for the lower zone, fifteen member channels, plus the bend range on the member channels and the standard two semitones on the master. A receiver that honours the message then expects exactly the stream the plugin sends.

Seed makes a take repeatable. Left at zero the randomization is free and every take is new; any other number re seeds the generator at power on and at every transport start, so the same part played against the same transport comes out the same twice. That is what makes a randomizer usable in a session at all: you can keep the take you liked.

Automation

Thirteen parameters are exposed to the host, and they are deliberately few. What is automatable is what has a value; the switches that change a meaning, target, shape, mode and sync, live in the state instead. A depth lane keeps its sense that way even if you later change what the lane points at: "lane 3 deeper" stays "lane 3 deeper".

ParameterRange
poweroff / on
intensity0 to 100%
lane1_depth to lane5_depththe lane's own unit, cents for a pitch lane, percent otherwise
lane1_rate to lane5_rate0.02 to 3.00 Hz
arp_gate10 to 95%

A rate parameter stays continuous while its lane is synced, so an automation curve through it never jumps; only the display rounds to the division it lands on.

Presets & state

Seven factory presets ship with the plugin, the same seven the module in MPE Insight has: Analog Warmth, Tape Wobble, Ocean Swell, S&H Madness, Drunken Arp, Diatonic Comping and Ghost Octaves. The preset bar in the head row steps through them and marks favourites.

Everything else, every target, shape, mode, sync division, colour and note setting, is saved with the project as plugin state, so a reopened project is the one you left.

Targets & rest positions

Where a wave rests is knowledge in the target list rather than a control you have to find. A bipolar shape around the wrong rest would not be a matter of taste, it would be a mapping error, so the plugin carries the table instead of asking:

TargetRests on
Pitchthe bend centre, and swings both ways
Pressurezero, and rises
CC8, CC10 Pan, CC74 Brightnessthe centre, 64, and swings both ways
CC7 Volume, CC11 Expressionthe top, 127, and dips
every other CCzero, and rises

Shapes

Eight per lane: Drift (organic), Sine, Triangle, Saw Up, Saw Down, Square, S&H Random and Static (one value per note). Static has no cycle at all, so its rate cannot move a byte and the control is greyed out on that lane.

Tempo divisions

The 23 divisions a synced lane steps through, slowest first. D is dotted, T is a triplet:

4/4 3/4 1/2D 1/1T 1/2 1/4D 1/2T 1/4 1/8D 1/4T 1/8 1/16D 1/8T 1/16 1/32D 1/16T 1/32 1/64D 1/32T 1/64 1/128D 1/64T 1/128

The arpeggiator has its own, shorter list, because a step pattern counts whole clock pulses: 1/32, 1/16T, 1/16, 1/8T, 1/8 and 1/4.

MPE Insight

DRIFT began as a module inside MPE Insight, and the plugin runs the same engine. If you own the app you already know most of this window, and the module's own chapter in the app documentation covers the same controls from the app's side, together with the eight visual modules that show you what the stream is doing.

The two are separate products and neither needs the other. The plugin takes DRIFT into your DAW; the app is where you watch MPE.