Skip to content

MIDI & MPE

Timbre supports both standard MIDI and MIDI Polyphonic Expression (MPE). The per-chip-per-voice architecture makes MPE support natural rather than bolted on — each voice is already a physically independent signal path.

In standard MIDI mode, Timbre operates as a 16-channel multi-timbral instrument:

  • Note on/off triggers voice allocation and envelope gate
  • Velocity maps to VCA initial gain and optionally to filter cutoff offset
  • Channel aftertouch modulates a configurable target (filter cutoff, VCA, oscillation mode blend)
  • CC messages control global and per-channel parameters
CCFunctionRange
1Modulation wheel — LFO depth0–127
7Channel volume0–127
10Pan position0–127 (64 = center)
71Resonance / Q0–127
74Filter cutoff0–127
91Reverb send (if external)0–127

These are the default mappings. The modulation routing matrix in the ESP32 firmware allows any CC to be mapped to any parameter on any voice.

MPE assigns each note to its own MIDI channel, enabling per-note continuous control of multiple dimensions simultaneously. Timbre’s architecture — one physical chip per voice — maps perfectly to this model.

MPE DimensionPhysical MappingWhy It Works
Per-note pitch bendSC clock ratio offset per chipEach chip has its own clock — pitch bend is just a ratio adjustment
Per-note pressureVCA gain or filter cutoff per chipDirect I2C write to the target chip’s parameter register
Per-note slide (CC74)Oscillation mode morphThe most expressive mapping: slide between bandpass and relaxation oscillation continuously

The CC74 (slide) mapping deserves special attention. On most synthesizers, slide controls brightness — filter cutoff. On Timbre, slide controls the oscillation mode itself. Moving your finger along a Linnstrument or Roli surface doesn’t just make the note brighter — it changes the fundamental wave-generation mechanism of that specific voice.

At position 0, the voice runs in bandpass self-oscillation (clean, sinusoidal). At position 127, it runs in relaxation oscillation (aggressive, harmonically rich). Intermediate positions represent intermediate topologies — partially reconfigured analog blocks producing sounds that don’t correspond to any fixed oscillator type.

This is only possible because each voice is a discrete reconfigurable chip. There is no shared oscillator bank to negotiate with.

MPE itself has clear precedents — the Arturia PolyBrute 12, UDO Super 6, and ASM Hydrasynth all offer per-note polyphonic expression, and they do it well. What distinguishes Timbre is not MPE support but what MPE controls. Those instruments apply per-note expression within a shared patch architecture: every voice runs the same oscillator and filter topology, and MPE modulates parameters within that shared topology. The Xpander allowed different patches per voice but predated MPE by three decades and had no per-note continuous expression. Timbre combines both capabilities — per-note continuous expression applied to per-voice independent analog topology. Slide does not modulate a parameter of a fixed circuit; it reconfigures the circuit itself.

The ESP32’s voice allocator supports several strategies:

StrategyBehaviorUse Case
Round-robinCycles through voices sequentiallyEven wear, predictable behavior
Lowest-availableUses the lowest-numbered free voiceConsistent voice-to-position mapping
Voice stealingSteals the oldest or quietest voice when all are occupiedDense playing, sustain pedal
Zone assignmentPre-assigns voice ranges to keyboard zonesSplit/layer configurations

In MPE mode, the allocator respects MPE zone boundaries (lower zone, upper zone) and ensures that re-triggered notes on the same channel reuse the same voice chip, preserving the physical continuity of per-note expression.

The MPE implementation targets compatibility with:

  • Roli Seaboard — 5D touch surface (strike, press, glide, slide, lift)
  • Haken Continuum / Osmose — continuous pitch and pressure
  • Roger Linn Design Linnstrument — per-note X/Y/Z
  • Sensel Morph — pressure-sensitive grid

These controllers generate MPE data natively. Timbre receives it and maps it to physical per-voice parameter changes — no interpolation, no voice-sharing compromises.