feat: humanize MIDI timing and dynamics with reproducible seeded edits

This commit is contained in:
Johannes Findeisen 2026-11-06 00:39:19 +01:00
commit d034417c8c
9 changed files with 51 additions and 7 deletions

View file

@ -26,3 +26,7 @@ The existing Split clip at cursor command (S) now handles MIDI as well as audio.
## Phase 63 — MIDI Clip Consolidation
Edit/Consolidate MIDI clips merges two or more selected MIDI clips on one track. The new clip spans their full bounding range; gaps and overlapping notes remain. Notes outside visible trims are discarded and crossing notes are cropped to audible boundaries. IDs are fresh. Cropped notes start anew, so envelope/phase behavior can change. Audio or cross-track selections reject atomically.
## Phase 64 — Deterministic MIDI Humanization
Edit/MIDI tools/Humanize applies timing variation up to 960 ticks and velocity variation up to 127, using a 32-bit seed and stable note IDs. Repeating from the same original state reproduces results; applying repeatedly accumulates edits. All source notes are affected, including hidden trimmed notes. Timing outside source bounds rejects the entire edit; velocities clamp to 1..127. This is offline editing, not live randomness.

View file

@ -1587,12 +1587,12 @@ Implemented: transactional consolidation of selected same-track MIDI clips into
Apply seeded timing and velocity variation to MIDI clip sources with reproducible results, bounds checks and undo.
### Tasks and acceptance criteria
- [ ] Implement bounded C99 model/control APIs and accessible GUI commands.
- [ ] Preserve transactional errors, history, compatibility and callback safety.
- [ ] Verify the feature with automated model/GUI tests and document limitations.
- [x] Implement bounded C99 model/control APIs and accessible GUI commands.
- [x] Preserve transactional errors, history, compatibility and callback safety.
- [x] Verify the feature with automated model/GUI tests and document limitations.
### Implementation status
Planned.
Implemented: seeded note-ID keyed timing/velocity humanization, independent of selection order. Timing overflow rejects atomically; velocity saturates to MIDI bounds. Core reproducibility/range/rollback and GUI undo tests pass.
---