MIDI Control Reference

Applies to firmware v3.63.

Comprehensive reference for every MIDI message Midi2CV Mk2 responds to: notes, aftertouch, pitch bend, control change, program change, clock/transport, System Exclusive, and MIDI Learn. LFO and Envelope CC parameters have their own detailed references (LFO MIDI CC Numbers, Envelope MIDI CC Numbers, and MIDI Clock Sync Rate Table).

Overview

  • 4 CV outputs (CV1-CV4) and 4 Gate outputs (Gate1-Gate4), routed differently depending on Device Mode.
  • One assignable MIDI channel (1-16) that the device listens on; how it’s interpreted depends on Device Mode.
  • MIDI OUT/THRU exists only as software MIDI Thru: every incoming message is echoed out verbatim when enabled — the device does not otherwise generate note/CC MIDI output. MIDI OUT is also used to send SysEx replies.
  • All settings persist across power-cycling.

Device Modes

Set via SysEx (see below). No dedicated MIDI CC controls this — only SysEx.

ModeBehavior
MonoSingle monophonic voice on channel. CV1=note, CV2=velocity, CV3=aftertouch, CV4=assignable controller. Gate1=gate, Gate2=strobe, Gate3=Start/Stop, Gate4=MIDI clock. In UNISON-4 (Poly Port Mapping on), all 4 CV/Gate pairs output the same note/gate in unison instead.
DuoTwo-note voice on channel: CV1=lowest held note, CV2=highest held note, CV3=velocity, CV4=aftertouch. Gate1/2/3/4 same as Mono. In UNISON-DUO (Poly Port Mapping on), CV pairs alternate low/high note in unison.
QuadFour independent monophonic voices, one per MIDI channel starting at channel and wrapping around (e.g. base channel 15 covers channels 15, 16, 1, 2). CV1-4 = note per voice, Gate1-4 = gate per voice. No velocity/aftertouch/controller CV in this mode.
PolyUp to 4 polyphonic voices (configurable) on a single channel, allocated round-robin with oldest-note stealing. CV1-4 = note per voice, Gate1-4 = gate per voice.

Number of voices (1-4) limits how many of the 4 CV/Gate pairs Poly mode uses.

LFO and Envelope, when routed to a CV output, override that CV’s normal role regardless of Device Mode.

Notes (Note On / Note Off)

  • Velocity is shaped by the velocity curve: Linear, Soft 1/2/3, Hard 1/2/3, or Wide 1/2. Linear passes velocity through unchanged; the other curves reshape it and never let a genuine Note On read as silent (minimum output of 1).
  • Each channel/voice keeps its own 16-note stack. Releasing a held note while others remain re-plays the most recently played note (Mono/Quad) or the new low/high extreme (Duo), with a fresh strobe pulse if the sounding note actually changed.
  • Hold pedal (CC 64) sustains gates after Note Off while held; releasing the pedal clears all gates (and the Envelope gate) with no notes currently held. Works the same way across Mono/Duo/Quad.
  • Strobe: a short pulse on Gate2 (or the shared strobe-gate output, if enabled) marking “new note value is stable,” with a configurable width (1-5ms) and polarity.
  • Gate polarity (positive/negative) applies uniformly to all active gate outputs.
  • If routed, the LFO can reset its phase and/or start its fade-in on a qualifying Note On; the Envelope gates on (unless it’s clock-synced), and only for the first note of a held stack unless Retrigger mode is on.

Aftertouch

Both channel (mono) and polyphonic aftertouch messages are treated identically — shaped by the aftertouch curve (same curve set as velocity) and sent to CV3 in Mono mode. Not available as a per-note CV in Duo/Quad/Poly beyond Mono/Duo’s shared aftertouch CV.

Pitch Bend

  • Pitch bend range (0-12 semitones, 0 = disabled) sets how much a full-scale bend shifts the note CV, applied to every currently-mapped note CV for the active Device Mode (CV1 in Mono; CV1+CV2 in Duo; the per-channel CV in Quad; all 4 in Poly).
  • Note fine-tuning mode: holding the Learn switch while sending pitch bend toggles per-note micro-tuning mode instead of bending pitch. Once armed (pitch bend must first return to center to confirm), further pitch bend nudges the CV tuning of the currently-held note, saved persistently — used to compensate DAC/oscillator nonlinearity per note. See CC 115-119 below for the companion tuning-adjustment controllers. Only available in Mono mode.

Control Change

CCs are handled in this order: the assignable generic Controller, then the fixed LFO/Envelope CC block, then (if note fine-tuning mode is active) the note-tuning CCs. CC 120/121/123 (All Sound Off/Reset All Controllers/All Notes Off) are standard MIDI channel-mode messages handled separately — see Channel Mode Messages.

Assignable controller

  • A configurable CC number (0-119, default 1 = Mod Wheel) is treated as the “generic” controller.
  • When that CC arrives on the active channel, its value is sent straight to CV4 in Mono mode with no curve/scaling applied.
  • Any other CC number in 0-119 that isn’t the assigned controller, an LFO/EG CC, a note-tuning CC, or CC 64 (Hold Pedal) is silently ignored.

LFO controllers (CC 90-99)

Full detail (waveshape table, math, ranges) in the LFO MIDI CC Numbers reference.

CC#NameCC#Name
90CV routing95Fade-in
91Waveshape96Amplitude
92Rate97Output polarity (bipolar)
93MIDI clock sync98Distortion
94Phase reset on note-on99Steppyness

Envelope (EG) controllers (CC 100-112)

Full detail (curve math, shape/loop tables) in the Envelope MIDI CC Numbers reference.

CC#NameCC#Name
100CV routing107Amplitude
101Attack time108Curve shape
102Hold time109Retrigger mode
103Decay time110Loop mode
104Sustain level111MIDI clock sync
105Release time112Output invert
106Auto gate width

Note tuning controllers (CC 115-119)

Only acted on while note fine-tuning mode is active (see Pitch Bend above) and the CC value is non-zero; otherwise ignored. All operate on the most recently played note.

CC#NameEffect
115Reset All Notes TuningClears the entire per-note tuning table
116Reset Note TuningClears tuning for the current note only
117Increment Note TuningNudges the current note’s tuning up by one step
118Decrement Note TuningNudges the current note’s tuning down by one step
119Interpolate Note TuningRecomputes the current note’s tuning by interpolating from neighboring tuned notes

After any of these, the note’s CV is re-sent immediately so the pitch change is audible without re-triggering the note.

Channel Mode Messages (CC 120/121/123)

Standard MIDI channel-mode messages:

CC#NameEffect
120All Sound OffSame as All Notes Off (123) in this firmware
121Reset All ControllersZeroes the aftertouch and assignable-controller CV outputs in Mono/Duo; per-channel in Quad; on the active channel in Poly
123All Notes OffZeroes velocity, drops all gates, and clears the note stack for the affected channel(s)/voices

CC 122 (Local Control), 124/125 (Omni Off/On), 126 (Mono Mode), and 127 (Poly Mode) are recognized but have no effect on this device.

Program Change

Received but currently ignored — reserved for future use.

MIDI Clock & Transport

  • Clock: if a clock divider is configured and Device Mode is Mono or Duo, pulses Gate4 once every configured number of MIDI clock ticks. Also drives LFO sync phase and, when Envelope Sync is active, periodically retriggers the Envelope.
  • Start: resets the clock/LFO/Envelope sync counters, resets LFO phase to 0 if synced, and (Mono only) pulses Gate3 high — a transport-start trigger for synced sequencers/modules.
  • Continue: (Mono only) pulses Gate3 high, same as Start, but without resetting counters/phase.
  • Stop: (Mono only) drops Gate3 low.

See the MIDI Clock Sync Rate Table reference for the full rate-to-duration table shared by the clock divider, LFO Rate/Sync, LFO Fade-in, and Envelope Sync.

Soft MIDI Thru

An optional setting (on/off). When enabled, every message received on MIDI IN is echoed to MIDI OUT, independent of how (or whether) it was otherwise acted on.

MIDI Learn (front-panel Learn switch)

The front-panel Learn switch provides hands-on assignment without SysEx:

  • Held during a Note On: sets the active channel to that note’s MIDI channel (all Device Modes).
  • Held during a CC: sets the assignable Controller to that CC number.
  • Held while sending Pitch Bend: toggles Note Fine-Tuning mode on/off (Mono mode only), per the Pitch Bend section above.
  • Held at power-on: boots into the bootloader instead of the normal firmware, awaiting a firmware image over SysEx (see Firmware Update below).

System Exclusive

Message format

F0 29 '2' 'C' 'V' 00 <cmd> <mod> [<data...>] F7
  • F0 SysEx start, 29 manufacturer ID, '2' 'C' 'V' 00 product ID string (“2CV”). Any mismatch is ignored as a foreign SysEx message.
  • <cmd> — one byte, see Commands below.
  • <mod> — one byte, a modifier/action selector; for parameter-set commands this is normally 0x00.
  • <data...> — payload, nibblized: every real byte is split into two MIDI-safe nibbles and sent as two bytes, since SysEx data bytes must have bit 7 clear.
  • F7 End-of-Exclusive.

Modifiers (<mod> byte)

ValueNameMeaning
0x00Reset Device(Request Action command only) Factory-reset all settings and reinitialize
0x01Update Firmware(Request Action command only) Reboot into the bootloader for a firmware update
0x7eRequest State ReplyMarks an inbound message as a reply to a prior request (ignored on receipt — reply framing only)
0x7fRequest StateRequests the device send back the current value for <cmd> (answered asynchronously with <mod>=0x7e)

Any other command carries its actual parameter value as the payload, with <mod>=0x00.

Commands (<cmd> byte)

ValueNamePayloadNotes
0x00Request Actionfirmware major+minor (reply only)Action commands + firmware version query
0x01Controller1 byte, 0-119Assignable CC controller number
0x02Strobe Width1 byte, 0-4Strobe pulse width, 1-5ms
0x03Clock Divider1 byte, 0-19MIDI-clock output divider (Gate4)
0x04Tune Data128 × 16-bit wordsPer-note CV tuning table, streamed in fixed-size blocks
0x05Velocity Curve1 byte, 0-8Linear/Soft1-3/Hard1-3/Wide1-2
0x06Aftertouch Curve1 byte, 0-8Same curve set as velocity
0x07Number of Voices1 byte, 1-4Poly-mode voice count
0x08Inverted Strobe1 byte, 0/1Strobe polarity
0x09Inverted Gate1 byte, 0/1Gate polarity
0x0aStrobe Gate1 byte, 0/1Route strobe onto the shared strobe-gate line
0x0bPitch Bend Range1 byte, 0-12Semitones; 0 disables pitch bend
0x0cPoly Port Mapping1 byte, 0/1Enables UNISON-4/UNISON-DUO CV/Gate fan-out
0x0dEnable Soft Thru1 byte, 0/1Software MIDI Thru
0x0eDevice Mode1 byte, 0-3Mono/Duo/Quad/Poly
0x0fMIDI Channel1 byte, 0-15Active MIDI channel
0x7fDevice Statefull settings block (reply only)Bulk read of every setting in one message; bulk write is not currently supported — only the bulk read reply

The active MIDI channel can also be changed via MIDI Learn (see above) or a full factory reset, in addition to the dedicated command above.

Query flow

To read a current value, send the command with <mod>=0x7f (Request State) and no payload. The device answers asynchronously with the same <cmd> and <mod>=0x7e (Request State Reply) carrying the current value. Device State (0x7f) is the efficient way to fetch everything at once; the web-based configurator uses it for its “Query device” action.

Firmware update

Request Action / Update Firmware (0x00/0x01) reboots the device into its bootloader, which then expects the firmware image delivered as further SysEx (outside the scope of this runtime protocol — see the web-based updater, which sources the payload from a firmware bundle).