Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
aax_midi_packets.hpp File Reference

SDK-free MIDI/SysEx packet translation for the AAX runtime. More...

#include <pulp/midi/buffer.hpp>
#include <pulp/midi/message.hpp>
#include <array>
#include <cstdint>
#include <span>
#include <vector>

Go to the source code of this file.

Classes

struct  pulp::format::aax::MidiPacketBytes
 SDK-free mirror of the fields of AAX_CMidiPacket this layer needs. More...

Namespaces

namespace  pulp
namespace  pulp::format
 What the product grants a device: the quota table indexed by capability tier and live thermal state.
namespace  pulp::format::aax

Functions

void pulp::format::aax::decode_midi_packets (std::span< const MidiPacketBytes > packets, midi::MidiBuffer &out)
 Decode a stream of AAX-style packets into out (short messages plus reassembled SysEx).
std::vector< MidiPacketBytes > pulp::format::aax::fragment_sysex (std::span< const uint8_t > payload, uint32_t timestamp)
 Fragment one full F0..F7 SysEx payload into consecutive 4-byte packets that all share timestamp — the inverse of decode's reassembly.

Detailed Description

SDK-free MIDI/SysEx packet translation for the AAX runtime.

AAX delivers MIDI as a stream of fixed 4-byte AAX_CMidiPacket entries: short channel-voice/system messages are 1..3 bytes in a single packet, and a system-exclusive run is split across consecutive packets with F0 in the first and F7 in the last (continuation packets carry no status byte). Getting that reassembly — and the inverse fragmentation on output — right is the most fragile, regression-prone part of the AAX adapter, but it lived inline in aax_runtime.cpp against AAX_* types and could only be compiled (let alone tested) on a machine with the developer-supplied AAX SDK.

This header lifts that logic into pure functions over a minimal, SDK-independent packet struct so the state machine can be unit-tested without the SDK. aax_runtime.cpp translates AAX_CMidiPacket <-> these structs and delegates here, so the tested code is the shipping code.