Phase 8: Add stereo track mixer, automation and undo/redo
This commit is contained in:
parent
cacc086805
commit
7db5fb7738
45 changed files with 1611 additions and 130 deletions
|
|
@ -42,8 +42,8 @@ without normalization. Failed additions leave IDs and graph contents unchanged.
|
|||
thread. Empty graphs compile to silence. Sample rate must be finite and positive,
|
||||
oscillators must be at or below Nyquist, and max_frames is 1..65536. Compilation
|
||||
allocates and copies topology/parameters, builds a topological schedule and
|
||||
input adjacency, and allocates one max_frames float buffer per node. The
|
||||
maximum buffer storage is 64 MiB per plan. Compilation may fail with an
|
||||
input adjacency, and allocates paired max_frames float buffers per node for stereo. The
|
||||
maximum buffer storage is 128 MiB per plan (32 MiB for the GUI 64-node limit). Compilation may fail with an
|
||||
allocation error; output plan is then NULL. Destroy a plan on the control thread.
|
||||
|
||||
`xtc_plan_process` uses only prepared state: no allocation/free, sorting,
|
||||
|
|
@ -86,7 +86,7 @@ publication and JACK processing; offline tests alone do not qualify hardware.
|
|||
|
||||
Use `xtc_backend.h` on one serialized control thread:
|
||||
|
||||
1. Open a config with `XTC_BACKEND_JACK`, a client name, channel_count 1, and
|
||||
1. Open a config with `XTC_BACKEND_JACK`, a client name, channel_count 1 (or 2 for stereo output), and
|
||||
max_frames 1..65536. It must accommodate the server's current buffer size.
|
||||
The actual rate and buffer size are returned through get_status. Open does
|
||||
not start the server or acquire devices directly. Invalid config returns
|
||||
|
|
@ -134,8 +134,7 @@ JACK notification callbacks were audited for prohibited operations; JACK's own
|
|||
internal realtime guarantees depend on the installed implementation/server.
|
||||
|
||||
Validation commands and results are recorded in BUILD.md and the integration
|
||||
test README. Current limitations: mono input/output, no parameter ramping or
|
||||
crossfaded graph changes, no realtime meter bridge, no automatic reconnect,
|
||||
test README. Current limitations: mono input, no crossfaded graph changes, no automatic reconnect,
|
||||
no physical-device or long-duration endurance qualification. Phase 3 connects
|
||||
the FLTK shell to backend controls and status; see GUI.md. Its editors remain
|
||||
placeholders except the Phase 4 modular editor described below.
|
||||
|
|
@ -250,3 +249,17 @@ prepared MIDI runtime state exclusively while active, with lock-free panic
|
|||
requests and no callback allocation/I/O. Stop/seek clear live voices; scheduled
|
||||
notes chase their absolute phase. See MIDI.md for event ordering, panic semantics,
|
||||
capacities and test coverage. No new dependency is required.
|
||||
|
||||
## Phase 8 stereo mixing and automation
|
||||
|
||||
Track settings and automation are copied into immutable source-plan snapshots.
|
||||
`xtc_audio_plan_render_stereo` and `xtc_midi_plan_render_stereo` pan track audio
|
||||
and scheduled notes before summing into paired source buffers. Mono wrappers
|
||||
retain gain/mute/solo/automation but ignore pan. `xtc_plan_process_stereo` and
|
||||
`xtc_realtime_process_stereo` process both buses through the same graph topology
|
||||
with one oscillator phase advance, preserving mono APIs and graph publication.
|
||||
The backend preallocates paired buffers, registers an optional output_right port
|
||||
and publishes independently atomic output peak snapshots. Callback work remains
|
||||
bounded and allocation/I/O/lock free. Meter UI reads no active plan memory.
|
||||
See MIXER.md for exact pan law, automation interpolation, event/source exceptions,
|
||||
memory/history bounds and verification. Input/recording remain mono.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue