xtc/docs/MODERN_EDITING.md

5.7 KiB
Raw Blame History

Modern editing workflows

Phases 47–57 introduced these control-thread edits without changing format 15. The current writer uses format 16 for arrangement markers and still reads older projects. Session selections, clipboard and comparison snapshots are not saved in projects. Audio callbacks continue to consume prepared plans; edits use the existing stop/history workflow.

Phase 47 — Arrangement Multi-selection

Shift-click clips to toggle selection; Ctrl+A in the sequencer or Edit/Select all clips selects every clip. Plain clicking replaces the selection. Selection is session UI state; no marquee selection yet.

Phase 48 — Transactional Group Editing

Use Left/Right in the sequencer (or Edit/Nudge selection) to move the selected phrase by the current snap step. Ctrl+D duplicates after its complete bounding span; Delete removes selected clips. Edits are atomic and undoable. Mouse dragging remains a single-clip gesture.

Phase 49 — Arrangement Clipboard

Ctrl+C/Ctrl+V in the sequencer, or Edit/Copy clips and Paste clips at cursor, copy/paste the selection. Earliest clip lands on the cursor. The earliest source track maps to the currently selected destination track; intervening track spacing is retained. All required tracks must already exist and must not be buses. Instruments, automation and media bytes are not copied. The clipboard survives document changes within the window but is not the OS clipboard.

Phase 50 — Repeat Arrangement Patterns

Edit/Repeat selected phrase asks for 1..1024 additional copies. The bounding span includes gaps and overlaps; copies remain on their original tracks. The entire repeat is one undo step. Clip/note capacity and timeline endpoints can limit the requested count.

Phase 51 — Align and Slip Editing

Edit/Align clip starts to cursor places every selected start at the cursor. Slip sources earlier/later changes source offsets by the snap step while retaining timeline positions and durations. Trimming must leave source material available; an invalid slip rejects the whole selection. No time stretching or destructive media edits are performed.

Phase 52 — MIDI Swing Quantization

Select MIDI clips and use Edit/MIDI tools/Swing quantize. Grid is in source ticks; swing delays alternate subdivisions by 0..half a grid step, while strength blends the old start toward the nearest swung point. Durations stay fixed. All source notes are affected, including notes outside visible trims. Mixed audio/MIDI selections and notes that would exceed source bounds reject the entire edit. This is destructive note editing with undo, not a live groove engine.

Phase 53 — MIDI Legato and Gate Tools

Edit/MIDI tools/Note gate scales lengths from 1 to 400 percent, rounded to at least one tick. Legato ends notes at the next strictly later onset in the same clip and channel; notes in a chord end together. The final onset extends to source end. Gate expansion beyond the source rejects the whole edit. Undo restores original durations.

Phase 54 — MIDI Scale Correction

Edit/MIDI tools/Correct to scale takes a root (0=C through 11=B) and chromatic, major or natural minor. Each pitch moves to the nearest permitted MIDI note; ties choose the lower pitch. Timing, channel and velocity remain unchanged. Corrections can produce unison notes; notes are not merged. This changes MIDI notes, not audio pitch or a live scale filter.

Phase 55 — MIDI Velocity Shaping

Edit/MIDI tools/Shape velocities scales from 0 to 400 percent, rounds, then applies an offset from -127 to 127. Results clamp to 1..127, keeping every note audible rather than introducing velocity-zero note-offs. Use 0 percent with a positive offset for a fixed velocity. No randomization is applied.

Phase 56 — Batch Audio Fade Tools

Edit/Audio tools/Set boundary fades sets linear fade-in and fade-out lengths in ticks; 0 or Remove boundary fades clears them. Each fade must fit within half of every selected clip duration. Gain and source offsets stay unchanged. These are boundary envelopes, not overlap-aware crossfades, equal-power curves or destructive WAV processing.

Phase 57 — Mixer A/B Comparison

Edit/Mixer comparison captures or recalls A and B. Capture stores static gain, pan, mute and solo for every track and bus without changing the document. Recall requires the same stable track IDs, stops playback through the normal edit guard and creates one undo step. Track order may change. Routing, plugins and automation are excluded; automation still overrides static gain and pan. Slots are session-only and clear on New/Open. This is static mix comparison, not seamless live scene morphing.

Validation and remaining scope

Each phase was built with warnings enabled and tested before its implementation commit. Reproduce the core, transaction and allocation-failure checks with:

make BUILD_DIR=build/roadmap-audit all gui test-reliability
make BUILD_DIR=build/roadmap-audit test-gui-modern-editing

The full GUI, instrument/effect plugin fixtures, software JACK lifecycle, Clang static analysis, AddressSanitizer/UBSan and staged default/custom installation checks also cover the integrated changes. GUI leak checks use only the existing system Fontconfig suppression. Save/reload comparisons render identical nonzero MIDI output after musical transforms; no project format migration is required.

These phases improve arrangement and musical editing workflows. They do not provide DAW feature parity: time stretching, comping, a clip launcher, tempo maps, track insert chains and customizable shortcuts need separate designs. No new dependencies or audio-callback operations are introduced. Human listening, physical devices and arbitrary third-party plugins remain unqualified.