feat(midi): export selected clip as an atomic Standard MIDI File (phase 103)

This commit is contained in:
Johannes Findeisen 2026-11-06 02:26:20 +01:00
commit 02ee1818a3
9 changed files with 178 additions and 5 deletions

View file

@ -49,3 +49,14 @@ choice for retry. Reconnect audio after server loss, then retry Play. Defaults
also apply when playback resumes after a loop edit. MIDI input/thru currently
requires active transport. Existing editing and project_defaults tabs contain
note length, velocity, channel, filters and new-project controller mappings.
## Export a selected clip
Select exactly one MIDI clip and choose File → Export selected clip as MIDI.
The save chooser confirms overwrites. Export writes an atomic Standard MIDI File
(type 0, 960 PPQN) with project tempo, clip name and audible notes relative to the
clip start, retaining channels and velocities. Notes crossing trimmed boundaries
are cropped and notes outside the trim are omitted. Trailing silence remains.
Export does not edit the project or undo history. Audio clips reject. Only note
messages are exported: instruments, opaque plugin data, controller maps,
automation and audio are excluded. Export is unavailable during recording.

View file

@ -2271,12 +2271,12 @@ Implemented: a MIDI preferences tab provides editable source/destination dropdow
Export the audible part of a selected MIDI clip as an atomic Standard MIDI File with note timing, channels, velocities and project tempo.
### Tasks and acceptance criteria
- [ ] Implement and document the workflow with bounded validation and safe ownership.
- [ ] Pass meaningful core and GUI checks, including errors and persistence or undo.
- [ ] Commit this phase separately after validation.
- [x] Implement and document the workflow with bounded validation and safe ownership.
- [x] Pass meaningful core and GUI checks, including errors and persistence or undo.
- [x] Commit this phase separately after validation.
### Implementation status
Planned.
Implemented: a C99 atomic type-0/960-PPQN SMF exporter and GUI save chooser export one selected MIDI clip, preserving note channels/velocities, project tempo, clip name and trailing silence. Trim-crossing notes crop to audible boundaries; out-of-trim notes omit. Independent byte/event checks, invalid/audio/destination preservation checks, bounded external scheduling overflow checks and focused GUI export/nonmutation tests passed with warning-enabled builds.
---