Dispatch an incoming MPE (MIDI Polyphonic Expression) stream to the voices of a polyphonic sub-patch — one voice per active MPE member channel — and decompose each note's expression axes into ready-to-use outputs.
Used to create polyphonic MPE synthesizers with per-note pitch bend, timbre and pressure.
What is MPE? On an MPE controller (Roli Seaboard, LinnStrument, Haken Continuum, Osmose…) each finger gets its own MIDI channel, so pitch bend, timbre (CC74) and pressure can be applied per note instead of globally. The channels are organized in a zone: one master channel carrying zone-global messages, and the remaining member channels carrying one note each:
| zone | master channel | member channels |
|---|---|---|
| lower (most common) | 1 | 2–16 |
| upper | 16 | 1–15 |
Where Poly Voice Dispatcher MIDI assigns incoming notes to voices in arrival order, this module assigns one voice per active member channel and follows that channel's expression for the whole life of the note. Each expression axis is extracted to a dedicated output:
MPE controllers may send bend, slide or pressure on a channel before the note-on. The module latches the expression state of every member channel, so a new note starts with the correct initial values instead of jumping after the first expression message.
A pitch bend received on the master channel is a zone-global bend: it shifts every held voice, scaled by the master pb range fader, and is added to the per-note bend on the pitch bend output.
When used outside a polyphonic sub-patch (or with a polyphony of 1), the module behaves as a monophonic MPE voice: the most recent note-on takes over the voice (previously held notes are not retriggered when it is released).
MIDI input flow(s).
Selects the MPE zone: master ch 1 (lower zone) with member channels 2–16, or master ch 16 (upper zone) with member channels 1–15. The master channel is excluded from voice allocation; its pitch bend shifts all voices globally.
Pitch bend range of the member channels in semitones, applied to the pitch bend output. Set it to the value configured in your MPE controller (default 48 semitones, the MPE standard for member channels).
Pitch bend range of the master channel in semitones (default 2 semitones, the MPE standard for the master channel).
Release time applied to the active output.
Should be set to the release time of the ADSR or 0 otherwise.
MIDI output flow(s).
The note gate of the voice. Notes are re-channelized to channel 1, so any downstream module sees a channel-neutral mono stream; the expression is exposed through the outputs below.
Sends a 1 value when a MIDI event is sent to the output.
Sends a 1 value when a NOTE-ON MIDI event is sent to the output.
Sends a 1 value when a NOTE-OFF MIDI event is sent to the output.
Pitch of the current note ON.
Velocity of the current note ON.
Pitch bend of the voice in semitones: per-note bend scaled by pb range, plus the zone-global master bend scaled by master pb range.
Typically added to data 1 (pitch) before feeding the oscillator's pitch input.
Raw per-note pitch bend position as [0..1] (0.5 = center), independent of the range faders and of the master bend.
Per-note timbre (Y axis of the controller, CC74), normalized [0..1].
Per-note pressure (Z axis of the controller, channel or key aftertouch), normalized [0..1].
Lights when the current voice is active.
Can be connected to patch-on-off to save CPU when the voice is not used.
A minimal MPE synth voice inside a polyphonic sub-patch:
midi in -> [Poly Voice Dispatcher MPE] -> data 1 (pitch) + pitch bend -> [MIDI Note to Freq] -> oscillator pressure -> voice gain (Z = loudness) slide (CC74) -> filter cutoff (Y = brightness) note ON / note OFF -> ADSR triggers active -> [patch-on-off]
Set the sub-patch polyphony to the number of simultaneous notes you want (typically 10 to 15 — one per available member channel), and match pb range with the pitch bend range configured in the controller.
Button. Opens the manual page of the selected object (or of its parent module for a control) in the web browser. If no page exists for this object, an error is traced in the trace panel.
For more details about information/help creation, see create-help-file.
Free multi-line text attached to the module, saved with the patch. It is only meant as an internal note for the patch designer: it is not displayed in the interface.
visible only in god mode, see setup-panel-tab-expert.
Read-only, not saved. Current private numeric ID of the object, used internally to identify it (for example as the target of a bind ID).
Read-only, not saved. Private ID used to store and recall the values of this control in presets.
Button. Generates a new unique ID, original ID and preset ID for the object. Use it if you experience difficulties in Polyphonic mode or if two objects share the same ID. Preset values and binds referring to the old IDs are lost.
Read-only, not saved. Absolute address of the object in the Usine objects tree, built from the workspace root. This is the address to use to reach the object from scripts, the objects panel or remote messages. Only shown for objects that are registered in the objects list. See objects-address.
Read-only, not saved. Address of the object relative to the current patch, valid inside that patch only. See objects-address.
Free user-defined address for the object (empty by default). When set, the object is also registered in the objects tree under this name, so it can be reached independently of its position in the workspace (the value is also reported in the mouse-over and mouse-down chunks). Changing it rebuilds the objects list. Only available on objects that support a user address. See objects-address.
version 7.0.250121
Edit All Pages