AUDIO
Source snapshot · 12 October 2026

Prepared hosted VST3 events and block context

Publish complete outputs

OutputStorage allocates fixed event, aligned payload, queue-ID and point arrays. Use OutputStorage::maximum() for the full 2048/65536/64/2048 limits unless the consumer has separately established every possible output bound. Smaller backing is a deliberate limit: a legitimate larger plug-in batch is discovered after DSP, silences active audio and requires retiring/recreating the child. Audio::process_events accepts audio slices, points, InputEvents and optional Context, then returns an immutable Output view borrowing that storage. Rust prevents a subsequent render into the same storage while the view remains live. The method validates the complete native wire reply before exposing any slices. All ten SDK output event kinds are admitted, including legacy MIDI controller output and reserved negative SDK output note IDs. No portable unsigned identity remapping occurs. Output queue IDs preserve empty queues and known read-only parameter IDs; point order and normalized values remain independently checked.

Native processing reserves both queue families before activation or input/DSP mutation. A pure refusal preserves the old audio/output batch. After DSP starts, native return failure, throw, retained-list protocol fault or insufficient output capacity invalidates processing, silences valid active audio prefixes, preserves backing tails and publishes no partial event/parameter batch. DSP history may have advanced; no rollback is implied. Stop and retire/recreate the failed child.

Output text must provide readable aligned non-null storage including a final NUL, even for zero-length text. Output parameter offsets must increase strictly within each ID queue; repeated or earlier offsets are protocol faults, not sorted or replaced. These are explicit admission rules, and violations fault the child.

Successful CONTROL replies must carry the exact refresh/prepare stage and no AUDIO publication/history/list facts. Failed operations preserve independent native diagnostics; CONTROL exception provenance remains incomplete.

Report exposes original returned SDK status only when it was actually returned. Throw, invalidation, possible history advancement, complete publication and individual list faults remain independent facts. A malformed wire reply retires the Rust processing capability even when its flags do not establish dispatch; a valid pre-dispatch native refusal permits retry. Controller output changes require explicit correct-thread consumer adoption, never implicit AUDIO edits.