Skip to content
Voro
  1. Audio
  2. Control

Learn

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.

  • 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.
  • 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

  • events row required
    midi_event_v1

Outputs

  • out row
    control_f32_v1
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