feat(project): persist bounded per-track effect chains (phase 81)

This commit is contained in:
Johannes Findeisen 2026-11-06 01:34:08 +01:00
commit 7489f86351
15 changed files with 159 additions and 12 deletions

View file

@ -1895,12 +1895,12 @@ Implemented: sequencer Create menu retains empty/audio/MIDI track creation, WAV
Add a bounded C99 per-track insert model with validation, clone/history/duplicate support and backward-compatible project persistence. Loading metadata must not load plugin binaries.
### Tasks and acceptance criteria
- [ ] Implement the described workflow with validated errors and safe ownership.
- [ ] Pass relevant core and/or GUI tests.
- [ ] Document behavior and limitations; commit this phase separately.
- [x] Implement the described workflow with validated errors and safe ownership.
- [x] Pass relevant core and/or GUI tests.
- [x] Document behavior and limitations; commit this phase separately.
### Implementation status
Planned.
Implemented: eight validated metadata-only insert slots per non-bus track, including enabled/wet/output values, format 17 persistence and reads of formats 1–16 with empty chains. Clone/history use copied state; duplicate/move/remove retain track association. Full warning-enabled core suite and dedicated metadata, persistence and invalid-value tests passed. See TRACK_INSERTS.md. Playback integration follows in phase 82.
---

16
docs/TRACK_INSERTS.md Normal file
View file

@ -0,0 +1,16 @@
# Track inserts
The sequencer's **Create** dropdown groups track creation, WAV import and
instrument loading. **View → Track inspector** opens the optional inspector;
it is hidden when the application starts to leave more room for editing.
Project format 17 stores up to eight effect slots per track, their order,
bypass, wet amount and chain output gain. Formats 1–16 read with empty chains.
Metadata load, clone and history never open executable plugin modules. Track
move, duplicate and removal retain the association with stable track IDs.
Nonempty bus chains are rejected. The model accepts mono effect specifications
for LADSPA, VST2, VST3, CLAP and internal effects; this alone does not establish
that a third-party binary is compatible with the host.
The chain API is declared in `xtc_plugin.h`. Setter errors preserve the old
chain; plugin identity and layout are checked when preparing playback.