AUDIO
Source snapshot · 12 October 2026

Native AAX generated short-MIDI output

Profile and capacity

AaxMidiOutput<MaximumPackets> owns up to1024 packet slots. Whole canonical fields, source order, offsets and supported MIDI subset validate before the first post. Supported ordinary nonidentity NoteOn/Off and raw MIDI status are NoteOn/Off, pitch bend, poly pressure, CC0 bank select, program change and channel pressure, matching the external SDK's documented subset. Other CC, system, SysEx, UMP, identity/scoped/expression/completion and parameter output rejects. A raw short message accepted by the generic native codec may still be outside this profile.

Ordinary notes preserve channel/key and quantize exact widened-f32 velocity nearest/ties-up. A positive On rounds to at least1; exact zero On stays zero. Explicit NoteId0 remains an identity and rejects like every identity. The stage never strips scope or IDs. Packet timestamps are original offsets, immediate=0 and unused bytes zero. Typed live aligned input/node capacities, exclusive AUDIO ownership and synchronous host packet borrows remain caller obligations. The host may copy packets during PostMIDIPacket, not retain or mutate the packet.

Nonzero appended MaximumOutputEvents enables the native owner and SDK model; zero preserves old contexts/APIs/configuration. Initial generated model requires Instrument=true/Multibus=false and selects owner0,frames1,outputs2,inputNotes3, generatedOutput4. Register LocalInput3 and LocalOutput4 explicitly. Every native process passes the FULL prepared generated capacity, even a zero/one-event block; result.event_count is only the produced prefix. No output capacity reservation or whole-batch transaction exists in the SDK. Live output node, whole map/input MIDI/ effective controls capacity precede native state apply/dequeue/process. Known callback metadata/public node base ranges are protected; full derived node size and role/provenance remain a host caller contract, not private-layout inspection.