Audio track velocity editing in the sequencer.

This commit is contained in:
Johannes Findeisen 2026-11-06 21:10:48 +01:00
commit 896a7907d3
10 changed files with 292 additions and 6 deletions

View file

@ -3612,6 +3612,50 @@ checks, plus rendered screenshot inspection. See [the gallery](../screenshots/RE
---
## Phase 110 — Continuous Audio Velocity Editing in the Sequencer
### Goal
Extend the sequencer's downward-expanding velocity lanes to audio tracks, with
level editing at arbitrary timeline positions using the existing C gain
automation, playback, persistence and history contracts.
### Tasks and acceptance criteria
- [x] Display a connected audio level envelope beneath audio tracks using the
same disclosure arrows and row layout as MIDI velocity lanes.
- [x] Add points anywhere, independently of snap and note positions; drag caps
vertically to adjust gain between silence and 400%, and right-click to remove.
- [x] Preview edits locally, cancel with Escape, and commit once per gesture
through the arrangement edit hook and undo/redo publication path.
- [x] Share saved gain automation with the mixer, respecting existing Linear/Hold
segments and preserving interpolation mode when editing an existing point.
- [x] Verify off-grid point creation, edits, clamping, removal, cancellation,
undo/redo, save/reopen and rendered audio levels in GUI integration tests.
- [x] Capture the real audio envelope beside MIDI velocity bars, add it to the
complete screenshot gallery and document the workflow.
### Implementation status
Implemented on 2026-11-06 without engine, dependency or project-format changes.
Audio velocity controls track gain (0–4 linear, displayed as 0–400%); it is not
MIDI note velocity. Empty tracks, buses and tracks containing audio display the
gain envelope; tracks containing only MIDI retain their note velocity bars.
On mixed audio/MIDI tracks the gain envelope affects both sources, and individual
MIDI velocities remain editable in the piano roll. Automation replaces static
track gain and holds its first/last values beyond its endpoints. New points use
Linear interpolation; existing Hold segments remain supported. An initial point
therefore sets the whole track's level until further points shape the curve.
Points stay at their timeline position during vertical drags; add/remove points
to change timing. The existing project-wide 1024-point automation limit applies.
Envelope edits are saved; track disclosure state remains temporary GUI state.
Validation: warning-enabled CMake build, CTest checks including real FLTK
lane gestures and comparison of rendered audio against the unautomated source,
and inspection of the actual [audio envelope capture](../screenshots/audio-velocity-expanded.png).
---
## Recommended Execution Order
Reorder the phases when the audit reveals a blocking dependency. Do not mark a