AUDIO
Source snapshot · 12 October 2026

Owned VST3 parameters and timed input

Prepared sample-timed input

prepare_parameters reserves the native pool and selects the companion for the existing scoped Audio owner. The control provider stays on main; the audio owner carries the exact table borrow and can move into one joined worker scope. Ordinary prepare selects ordinary audio processing again. No raw SDK interface escapes.

Audio::process_parameters admits at most 2048 copied normalized points across 64 distinct writable IDs. Source offsets are globally nondecreasing and strictly increasing for each ID. Offsets lie inside the current block; a zero-frame block accepts offset zero. SDK per-ID queues do not define cross-ID ordering at equal offsets. Complete point, channel, report and protected owner/storage ranges are checked before copying input, invoking DSP or touching caller outputs. A late malformed point, unknown ID, alias or exhausted pool rejects the entire block without consuming DSP history or changing output prefixes or backing tails.

Each prepared child borrows one core-owned pool: 16 fixed batches, each with 64 queue objects and 2048 points. Per-core admission is bounded to 16 pools and 64 MiB. Pool and queue storage is created on CONTROL. Processing copies into a host-owned batch without allocation, deallocation, locks, controller calls or registry operations. Queue data is readable only on the admitted audio thread during the synchronous native process call, then freezes on return or exception. Mutation methods, wrong-thread access and malformed queue reads refuse effects; an observed admitted protocol fault is distinct from the plug-in's returned code. Known native DSP faults silence supported output prefixes and close processing; backing tails remain unchanged.

Reports preserve original SDK results only when returned_status() is present. Exceptions have threw()==true and no returned status. A swallowed queue fault can accompany an actual native zero. Owned metadata rejection can carry a synthetic diagnostic without advertising a returned SDK code. Raw C stage and failure constants are declared in RavetVst3Parameters.h; successful CONTROL reports do not expose a result for every individual SDK getter. A successful process report must prove the actual process return and absence of queue faults. Raw C admission rejection preserves the report buffer. Initialize it for each call and do not interpret a previous call's fields as new facts. Rust supplies a fresh owned report for each operation.