Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

MIDI input

Source of truth: the doc comments on each module struct in patches-modules/src/ define the canonical port names, parameter ranges, and behaviour. This page is kept in sync with those comments.

MIDI events arrive on the engine-level GLOBAL_MIDI backplane (carrying up to 5 packed events per sample). Modules that need MIDI either read the backplane directly (MidiToCv, PolyMidiToCv, MidiCC) or sit downstream of a MidiIn module which exposes the backplane as a midi cable so other MIDI-processing modules can be chained.

MidiIn — Backplane → MIDI cable

Exposes the engine’s GLOBAL_MIDI backplane as a midi output cable so that MidiSplit, MidiTranspose, MidiArp, MidiDelay, etc. can be chained from it.

Outputs

PortKindDescription
midimidiMIDI events from the system input

MidiToCv — Mono MIDI note input

Monophonic: only one note active at a time (last-note priority). Pressing a new key updates pitch immediately; releasing the top key falls back to the previously held key without retriggering. Up to 16 simultaneously held keys are tracked.

V/oct convention

voct is referenced to MIDI note 0 (C0 ≈ 16.35 Hz) at 0 V, with 1/12 V per semitone:

MIDI noteNotevoct
0C00.0
12C11.0
60C4 (middle C)5.0
69A4 (concert A)5.75

Outputs

PortDescription
voctPitch in V/oct above C0 (MIDI note 0 = 0.0, 1/12 V per semitone)
triggerSub-sample trigger on each note-on
gate1.0 while any note is held or sustain pedal (CC 64) is active
modCC 1 (mod wheel) normalised to [0.0, 1.0]
pitchPitchbend normalised to [−1.0, 1.0] (centre = 0.0)
velocityMost-recent note-on velocity normalised to [0.0, 1.0]
slur1.0 while a held key falls back to a still-held lower key without retriggering, otherwise 0.0

Parameters

NameTypeDefaultDescription
legatoboolfalseWhen true, holding through a note change suppresses the per-note trigger (gate stays high; only the first key triggers)

PolyMidiToCv — Polyphonic MIDI input

Distributes incoming notes across up to 16 voices with LIFO voice stealing. When all voices are occupied the most-recently-allocated voice is stolen.

Outputs

PortKindDescription
voctPolyPer-voice pitch in V/oct above C0
triggerPolyPer-voice sub-sample trigger on note-on
gatePoly1.0 while the note for that voice is physically held
velocityPolyPer-voice note-on velocity normalised to [0.0, 1.0]
modMonoCC 1 (mod wheel) normalised to [0.0, 1.0]
pitchMonoPitchbend normalised to [−1.0, 1.0]

MidiCC — Control-change reader

Reads a configured MIDI CC number from the backplane and emits its normalised value as a mono signal.

Parameters

NameTypeDefaultDescription
ccint (0–127)1MIDI CC number to read

Outputs

PortKindDescription
outmonoMost-recent CC value for cc, normalised to [0.0, 1.0]

MidiArp — Arpeggiator

Arpeggiates held notes, clocked by an external trigger (e.g. Clock). Refer to the module doc comment in patches-modules/src/midi_arp.rs for the current parameter set and port list.

MidiDelay — MIDI note delay

Delays incoming MIDI events by a configurable number of samples or beats, with optional feedback for repeating echoes. See patches-modules/src/midi_delay.rs for ports and parameters.

MidiSplit — MIDI splitter

Routes incoming MIDI notes to one of several outputs based on channel, velocity, or pitch range. See patches-modules/src/midi_split.rs.

MidiTranspose — MIDI pitch transposer

Transposes note-on / note-off events by a configurable number of semitones. See patches-modules/src/midi_transpose.rs.

MidiDrumset — MIDI note-to-drum mapper

Maps incoming MIDI notes to trigger outputs for drum-voice modules (Kick, Snare, etc). See patches-modules/src/midi_drumset.rs.