Universal Controller MIDI

Core concepts

MIDI messages (notes, CCs, channels)

Notes, CCs, and channels in plain English. A 60-second tour of the only three message types you need to know to map a controller to a DAW.

Updated

MIDI is three bytes on a wire, repeated forever — and once you can read those three bytes, every mapping in this app stops being magic. Status byte, data byte one, data byte two. That's it. That's the whole format that's run electronic music since 1983.

The mapping editor is just a friendly UI over those three bytes. Learn the bytes, you own the editor.

Notes — on/off events

A note is a one-shot. You press a key, MIDI fires note on. You let go, MIDI fires note off. The note number says which note (0–127), and velocity says how hard you hit it (0–127).

Middle C is MIDI note 60. Each octave is 12 semitones. So note 72 is C5, note 48 is C3. Drums live in the low 30s and 40s in General MIDI — kick is 36, snare is 38, hi-hat is 42.

# Note on, channel 1, note 60 (middle C), velocity 100
0x90 0x3C 0x64

# Note off, channel 1, note 60, velocity 0
0x80 0x3C 0x00

The status byte encodes both the message type and the channel. 0x90 is "note on, channel 1". 0x91 is "note on, channel 2". All the way to 0x9F for channel 16. Same trick for 0x80 (note off) and 0xB0 (CC) — high nibble is type, low nibble is channel minus one.

CCs — continuous controllers

CC stands for Control Change. Where notes are on/off events, CCs are continuous — a stream of 0–127 values that move a knob, slider, or parameter inside your DAW. Sticks and triggers send CCs.

A few you'll see everywhere: CC 1 is mod wheel, CC 7 is volume, CC 10 is pan, CC 11 is expression, CC 64 is sustain pedal. CCs 16–19 and 102–119 are undefined — fair game for custom mappings.

The CCs you actually meet

Memorise these eight and you'll cover 90% of mappings without ever opening the spec sheet. The undefined ranges are the safe sandbox for personal mappings — nothing in your DAW will react to CC 102 unless you wire it up yourself.

CC numberNameWhat it controlsGood source
1Mod wheelVibrato / filter / texture in most synthsRight stick Y
7VolumeChannel volume (set-and-forget)Touchpad slide
10PanStereo position, 64 = centreRight stick X
11ExpressionDynamics — multiplies onto volumeR2 trigger
64Sustain pedal0–63 = off, 64–127 = onL1 button
71ResonanceFilter resonance / QRight stick Y
74BrightnessFilter cutoff in most synthsLeft stick Y
102–119UndefinedFree for custom mappingsAny axis

Channels — 16 lanes on one cable

A single MIDI port carries 16 channels, numbered 1–16. Each channel is an independent voice. Your DAW can route channel 1 to a bass synth and channel 2 to a drum rack on the same port at the same time.

This is how multi-controller mode keeps two DualSenses from stepping on each other — controller A on channel 1, controller B on channel 2. The DAW arms two tracks, one per channel, and everything stays clean.

Channel 10 is special. The General MIDI spec reserves it for percussion. Most DAW drum templates listen on channel 10 by default, so when you build a drum-pad template, default to channel 10 unless you've got a reason not to.

{
  "bindings": [
    { "source": "cross",    "target": { "type": "note", "value": 36, "channel": 10 } },
    { "source": "square",   "target": { "type": "note", "value": 38, "channel": 10 } },
    { "source": "circle",   "target": { "type": "note", "value": 42, "channel": 10 } },
    { "source": "triangle", "target": { "type": "note", "value": 46, "channel": 10 } }
  ]
}

Bonus messages worth knowing

Notes and CCs handle most work, but two other message types come up often enough to mention. Pitch bend is a 14-bit value (0–16383) centred at 8192 — much higher resolution than CCs, perfect for stick-driven pitch sweeps. Program change swaps the instrument/patch on a channel and is a single byte (0–127). Both have first-class support in the mapping editor.

Common mistakes

  • Mapping two controls to the same CC on the same channel. Both will fight for the value. Use different channels, or different CC numbers.
  • Setting velocity to 0 on a note-on. The MIDI spec treats note on velocity 0 as a note off. Confusing first bug to hit. Always send velocity ≥ 1 for note-on.
  • Forgetting to send note off. If a stuck note rings forever, your binding is firing note-on without the matching note-off. The editor handles this automatically — but custom SysEx mappings won't.
  • Treating channel 10 like a normal channel. Most synth presets ignore channel 10. If your synth goes silent, check whether you accidentally routed it to the percussion channel.
  • Assuming CC 7 and CC 11 are interchangeable. CC 7 sets level. CC 11 modulates it. Both run 0–127, but mixing them up wrecks your gain staging.

That's the whole spec

Notes, CCs, channels, plus pitch bend and program change for flavour. There's more (aftertouch, SysEx — see advanced) but 95% of mappings are built from those primitives. Next: tour the mapping editor and put a CC on a stick.

Edit this page on GitHub Updated
ESC

Type to search.