Skip to content

Recording from MIDI input

You can live-record input from an external MIDI keyboard / controller / hardware sequencer into a skulpton track. We capture notes and CC + Pitch Bend + Channel Aftertouch in the same pass, so mod-wheel moves and pitch bends performed alongside notes are preserved.

Recording fires when all of these are true:

  1. The track has an IN port other than None (Set up MIDI I/O)
  2. The track is armed
  3. Record is on (or you pressed Play with the track armed and Record was already on)
  4. The incoming MIDI channel matches the track’s IN channel filter (or it’s set to All / Omni)

If no track is armed when you press Record, the first track is auto-armed.

MIDI messageRecorded into
Note On / OffThe track’s clip (piano roll)
CC (Control Change)The lane for that CC# (auto-created if missing)
Pitch BendThe PB lane (auto-created if missing)
Channel AftertouchThe CA lane (auto-created if missing)
Program ChangeNot recorded (avoids accidental patch-change capture)
Poly AftertouchLive-thru only (not recorded for now)

So performing your part with the mod wheel, pitch wheel, or channel aftertouch leaves all of it on the lanes.

Mod wheels and pitch benders can fire 30–100 events per second. skulpton drops repeated identical values automatically, so the clip never bloats:

  • Wheel held at 64 with continued bursts → only the first event is kept
  • Wheel moves 64 → 70 → 64 → all three are kept (real change)
  • Different lanes (e.g. CC1 and CC11) are evaluated independently

Thinning compares the clamped value. If you somehow send 200 on a CC, it clamps to 127 — the next 127 is then thinned.

From the start of recording until it ends, your input lands in the same clip. Pauses in your performance don’t split the clip.

  • If a clip already covers the playhead, that one is used
  • If not, a new bar-aligned clip is auto-created at the next bar
  • If your performance runs past the end of the host clip, the clip is auto-extended to the next bar boundary

A “take” ends when any of the following happens:

  • Stop
  • Pause
  • Seek (timeline click / piano-roll ruler click)
  • Disarm the track
  • Delete the track

The next Play starts a fresh clip.

With the loop range on, each lap layers onto the existing clip (overdub).

  • Lap 1: kick
  • Lap 2: snare
  • Lap 3: hi-hats

All in the same clip. This matches Logic / Live / Cubase / Bitwig MIDI overdub semantics (Pro Tools “Stacked Take” mode is different — we don’t do that yet).

At the wrap:

  • Notes spanning the loop boundary are surgically released (no big panic_all burst that would hitch the wrap)
  • The first events of the new lap fire inside the same engine tick as the wrap (no per-lap timing drift)
  • MIDI Clock keeps emitting monotonically — sync with external gear is unaffected

Same-pitch retrigger across the loop boundary

Section titled “Same-pitch retrigger across the loop boundary”

If a note rings into the loop end and the same (channel, pitch) fires again at the loop start (a re-trigger), skulpton suppresses the redundant note-off, sending only the new note-on. This avoids the envelope-glitch you get when off + on for the same pitch land in adjacent MIDI bytes — the industry term is “Note Tie” / “Legato” (à la Cirklon hardware sequencers and Live Clip Legato).

Track is armed and Record is on, but nothing records

Section titled “Track is armed and Record is on, but nothing records”
  • IN port is None
  • IN channel is filtering out the source channel (set to All to receive all)
  • Another app (Logic, etc.) is claiming the same MIDI port — IAC on macOS is shareable, USB device ports usually aren’t
  • skulpton scans MIDI ports at startup only — restart the app after plugging in new gear
  • Same-value thinning (intended). Detail-record by moving the wheel slightly more
  • v0.1.0 includes the smooth-wrap fix
  • If you still hear it, check whether external clock-receiving gear is the bottleneck