Skip to content

feat: note recording (REC) + FX chain drag & drop - #14

Merged
steady41 merged 2 commits into
mainfrom
testing
Aug 26, 2026
Merged

feat: note recording (REC) + FX chain drag & drop#14
steady41 merged 2 commits into
mainfrom
testing

Conversation

@steady41

Copy link
Copy Markdown
Owner

Summary

Two features on top of #8, per-feature commits for easy rollback.

Note recording (9f53ade)

  • REC button in the transport (glowing red + pulse while armed) and R shortcut
  • While the transport plays, notes from the LIVE CONTROLLER (computer keyboard or Web MIDI) are quantized into the current pattern's piano roll:
    • nearest-step start, length defined by note-off moment, velocity preserved
    • out-of-range pitches / non-finite positions rejected
  • Whole take = one undo transaction; empty take leaves history untouched; stopping the transport disarms and commits

FX chain drag & drop (60dfdc9)

  • Grab an effect's type name in the FX RACK and drop it between rows to reorder the insert chain
  • Bright edge marker shows the insertion point; no-op gaps stay clean
  • Same moveEffect path as the ▲▼ buttons → identical undo/serialize behavior

Test plan

  • npx tsc --noEmit clean; build clean
  • 35/35 headless tests: quantization math, pitch-range rejection, single-transaction semantics, transport-stop disarm

- REC button in the transport cluster (glowing red while armed, pulse
  animation) + R shortcut; guarded against typing targets
- engine captures noteOn/noteOff pairs while playing: nearest-step start
  quantization, length from the release moment, velocity preserved;
  out-of-range pitches and non-finite positions are rejected
- the whole take is ONE history transaction — an empty take commits
  nothing, stopping the transport disarms and commits automatically
- grab an effect's type name and drop it between rows; insertion point
  shows as a bright edge marker on the neighbours, no-op gaps stay clean
- pointer-capture based (works while zoomed), single history transaction
  per move via the same engine.moveEffect path as the arrow buttons
@steady41
steady41 merged commit c49641a into main Aug 26, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant