- Audio
- Control
Learn
Purpose
Section titled “Purpose”MIDI Learn maps hardware knobs and faders to Voro control signals. Put a slot into learn mode, wiggle a knob on your controller, and the CC number and channel are captured. The slot then tracks that CC and outputs a smoothed, range-mapped control value. 16 slots, each with its own output range and smoothing.
Place MIDI Learn after MIDI Capture (or MIDI Filter). Set the Learnslot parameter to the slot number you want to assign (0-15), then move a knob or fader on your controller. The CC is captured and the slot starts tracking. Wire the output into instruments, effects, or any parameter you want to control. Each output channel corresponds to one mapping slot.
Inputs and outputs
Section titled “Inputs and outputs”- Input 0: events — midi_event_v1 (required). The MIDI event stream from MIDI Capture or MIDI Filter.
- Output 0: out — control_f32_v1. 16 channels, one per mapping slot. Each channel carries the smoothed, range-mapped value for its learned CC.
Controls
Section titled “Controls”- Learnslot — Which slot is learning (-1 = none, 0-15 = slot index). Auto-clears to -1 after a CC is captured.
- Smoothing — Exponential slew time in milliseconds applied to all slots. Default 5 ms.
- Cc0-Cc15 — The learned CC number for each slot (-1 = unassigned). Persisted as parameters so mappings survive project save/load.
- Ch0-Ch15 — The learned MIDI channel for each slot (-1 = omni).
- Min0-Min15 / Max0-Max15 — Per-slot output range. Default 0-1. Set a wider range (e.g., 20-20000) to map a knob directly onto a frequency parameter without a separate Control Remap.
- Replaces the single-CC midi_cc mapper with a multi-slot learn workflow.
- All slot mappings are stored as plugin parameters, so they persist across project save and load without a separate serialization path.
- Reveal channels show active_slots, learn_slot, last_learned_cc, last_learned_ch, and match counts.
Inputs
-
eventsrow required
Outputs
-
outrow
Parameters
Section titled “Parameters” Learnslot (Learnslot) Int
op('midi_learn').par.Learnslot - Default:
-1- Range:
- -1 to 15
Smoothing (Smoothing) Float
op('midi_learn').par.Smoothing - Default:
5- Range:
- 0 to 1000
Cc0 (Cc0) Int
op('midi_learn').par.Cc0 - Default:
-1- Range:
- -1 to 127
Cc1 (Cc1) Int
op('midi_learn').par.Cc1 - Default:
-1- Range:
- -1 to 127
Cc2 (Cc2) Int
op('midi_learn').par.Cc2 - Default:
-1- Range:
- -1 to 127
Cc3 (Cc3) Int
op('midi_learn').par.Cc3 - Default:
-1- Range:
- -1 to 127
Cc4 (Cc4) Int
op('midi_learn').par.Cc4 - Default:
-1- Range:
- -1 to 127
Cc5 (Cc5) Int
op('midi_learn').par.Cc5 - Default:
-1- Range:
- -1 to 127
Cc6 (Cc6) Int
op('midi_learn').par.Cc6 - Default:
-1- Range:
- -1 to 127
Cc7 (Cc7) Int
op('midi_learn').par.Cc7 - Default:
-1- Range:
- -1 to 127
Cc8 (Cc8) Int
op('midi_learn').par.Cc8 - Default:
-1- Range:
- -1 to 127
Cc9 (Cc9) Int
op('midi_learn').par.Cc9 - Default:
-1- Range:
- -1 to 127
Cc10 (Cc10) Int
op('midi_learn').par.Cc10 - Default:
-1- Range:
- -1 to 127
Cc11 (Cc11) Int
op('midi_learn').par.Cc11 - Default:
-1- Range:
- -1 to 127
Cc12 (Cc12) Int
op('midi_learn').par.Cc12 - Default:
-1- Range:
- -1 to 127
Cc13 (Cc13) Int
op('midi_learn').par.Cc13 - Default:
-1- Range:
- -1 to 127
Cc14 (Cc14) Int
op('midi_learn').par.Cc14 - Default:
-1- Range:
- -1 to 127
Cc15 (Cc15) Int
op('midi_learn').par.Cc15 - Default:
-1- Range:
- -1 to 127
Ch0 (Ch0) Int
op('midi_learn').par.Ch0 - Default:
-1- Range:
- -1 to 15
Ch1 (Ch1) Int
op('midi_learn').par.Ch1 - Default:
-1- Range:
- -1 to 15
Ch2 (Ch2) Int
op('midi_learn').par.Ch2 - Default:
-1- Range:
- -1 to 15
Ch3 (Ch3) Int
op('midi_learn').par.Ch3 - Default:
-1- Range:
- -1 to 15
Ch4 (Ch4) Int
op('midi_learn').par.Ch4 - Default:
-1- Range:
- -1 to 15
Ch5 (Ch5) Int
op('midi_learn').par.Ch5 - Default:
-1- Range:
- -1 to 15
Ch6 (Ch6) Int
op('midi_learn').par.Ch6 - Default:
-1- Range:
- -1 to 15
Ch7 (Ch7) Int
op('midi_learn').par.Ch7 - Default:
-1- Range:
- -1 to 15
Ch8 (Ch8) Int
op('midi_learn').par.Ch8 - Default:
-1- Range:
- -1 to 15
Ch9 (Ch9) Int
op('midi_learn').par.Ch9 - Default:
-1- Range:
- -1 to 15
Ch10 (Ch10) Int
op('midi_learn').par.Ch10 - Default:
-1- Range:
- -1 to 15
Ch11 (Ch11) Int
op('midi_learn').par.Ch11 - Default:
-1- Range:
- -1 to 15
Ch12 (Ch12) Int
op('midi_learn').par.Ch12 - Default:
-1- Range:
- -1 to 15
Ch13 (Ch13) Int
op('midi_learn').par.Ch13 - Default:
-1- Range:
- -1 to 15
Ch14 (Ch14) Int
op('midi_learn').par.Ch14 - Default:
-1- Range:
- -1 to 15
Ch15 (Ch15) Int
op('midi_learn').par.Ch15 - Default:
-1- Range:
- -1 to 15
Min0 (Min0) Float
op('midi_learn').par.Min0 - Default:
0- Range:
- -100000 to 100000
Min1 (Min1) Float
op('midi_learn').par.Min1 - Default:
0- Range:
- -100000 to 100000
Min2 (Min2) Float
op('midi_learn').par.Min2 - Default:
0- Range:
- -100000 to 100000
Min3 (Min3) Float
op('midi_learn').par.Min3 - Default:
0- Range:
- -100000 to 100000
Min4 (Min4) Float
op('midi_learn').par.Min4 - Default:
0- Range:
- -100000 to 100000
Min5 (Min5) Float
op('midi_learn').par.Min5 - Default:
0- Range:
- -100000 to 100000
Min6 (Min6) Float
op('midi_learn').par.Min6 - Default:
0- Range:
- -100000 to 100000
Min7 (Min7) Float
op('midi_learn').par.Min7 - Default:
0- Range:
- -100000 to 100000
Min8 (Min8) Float
op('midi_learn').par.Min8 - Default:
0- Range:
- -100000 to 100000
Min9 (Min9) Float
op('midi_learn').par.Min9 - Default:
0- Range:
- -100000 to 100000
Min10 (Min10) Float
op('midi_learn').par.Min10 - Default:
0- Range:
- -100000 to 100000
Min11 (Min11) Float
op('midi_learn').par.Min11 - Default:
0- Range:
- -100000 to 100000
Min12 (Min12) Float
op('midi_learn').par.Min12 - Default:
0- Range:
- -100000 to 100000
Min13 (Min13) Float
op('midi_learn').par.Min13 - Default:
0- Range:
- -100000 to 100000
Min14 (Min14) Float
op('midi_learn').par.Min14 - Default:
0- Range:
- -100000 to 100000
Min15 (Min15) Float
op('midi_learn').par.Min15 - Default:
0- Range:
- -100000 to 100000
Max0 (Max0) Float
op('midi_learn').par.Max0 - Default:
1- Range:
- -100000 to 100000
Max1 (Max1) Float
op('midi_learn').par.Max1 - Default:
1- Range:
- -100000 to 100000
Max2 (Max2) Float
op('midi_learn').par.Max2 - Default:
1- Range:
- -100000 to 100000
Max3 (Max3) Float
op('midi_learn').par.Max3 - Default:
1- Range:
- -100000 to 100000
Max4 (Max4) Float
op('midi_learn').par.Max4 - Default:
1- Range:
- -100000 to 100000
Max5 (Max5) Float
op('midi_learn').par.Max5 - Default:
1- Range:
- -100000 to 100000
Max6 (Max6) Float
op('midi_learn').par.Max6 - Default:
1- Range:
- -100000 to 100000
Max7 (Max7) Float
op('midi_learn').par.Max7 - Default:
1- Range:
- -100000 to 100000
Max8 (Max8) Float
op('midi_learn').par.Max8 - Default:
1- Range:
- -100000 to 100000
Max9 (Max9) Float
op('midi_learn').par.Max9 - Default:
1- Range:
- -100000 to 100000
Max10 (Max10) Float
op('midi_learn').par.Max10 - Default:
1- Range:
- -100000 to 100000
Max11 (Max11) Float
op('midi_learn').par.Max11 - Default:
1- Range:
- -100000 to 100000
Max12 (Max12) Float
op('midi_learn').par.Max12 - Default:
1- Range:
- -100000 to 100000
Max13 (Max13) Float
op('midi_learn').par.Max13 - Default:
1- Range:
- -100000 to 100000
Max14 (Max14) Float
op('midi_learn').par.Max14 - Default:
1- Range:
- -100000 to 100000
Max15 (Max15) Float
op('midi_learn').par.Max15 - Default:
1- Range:
- -100000 to 100000