AAX Platform API
The AAX (Avid Audio eXtension) implementation provides complete integration with Pro Tools and other Avid hosts through the AAX SDK.Overview
TheIPlugAAX class implements the AAX API, inheriting from Avid’s AAX_CIPlugParameters class to provide seamless integration with Pro Tools’ parameter system, automation, and rendering architecture.
AAX is the native plugin format for Pro Tools 11 and later. It replaced RTAS and supports modern features like 64-bit processing, extended channel configurations, and Pro Tools HDX.
Core Classes
IPlugAAX
Defined in:IPlug/AAX/IPlugAAX.h
- Parameter synchronization
- Audio rendering with Pro Tools’ algorithm callback
- State management (chunks)
- MIDI I/O
- Track context information
AAX_CEffectGUI_IPLUG
Create()- Factory method to create GUI instancesSetControlHighlightInfo()- Handles control highlighting from Pro ToolsGetViewSize()- Returns editor dimensionsParameterUpdated()- Handles parameter updates from host
Key Methods
Host Communication
BeginInformHostOfParamChange
idx- Parameter index
InformHostOfParamChange
idx- Parameter indexnormalizedValue- Normalized parameter value (0.0 to 1.0)
EndInformHostOfParamChange
idx- Parameter index
Editor
EditorResize
viewWidth- New width in pixelsviewHeight- New height in pixels
true if resize was accepted
Track Information
GetTrackName
str- String to receive track name
Pro Tools provides detailed track context information including track name, color, and position in the session.
Processing
SetLatency
samples- Latency in samples
AAX latency must be declared at initialization and cannot be changed dynamically. Set latency in your plugin’s
EffectInit() method.MIDI
SendMidiMsg
msg- MIDI message to send
true if message was sent successfully
MIDI output requires configuring the output MIDI node in your AAX descriptor during registration.
AAX-Specific Methods
EffectInit
AAX_SUCCESS on successful initialization
Usage:
This is where you should:
- Register parameters
- Configure algorithm processing IDs
- Set up MIDI nodes
- Declare latency
RenderAudio
ioRenderInfo- Render context with buffers, MIDI, metersinSynchronizedParamValues- Array of synchronized parameter changesinNumSynchronizedParamValues- Number of parameter changes
UpdateParameterNormalizedValue
iParameterID- AAX parameter ID (string)iValue- Normalized value (0.0 to 1.0)iSource- Update source (UI, automation, etc.)
AAX_SUCCESS on success
State Management
AAX supports chunk-based state storage for plugins with complex state or non-parameter data.GetChunkIDFromIndex
index- Chunk index (0-based)pChunkID- Receives chunk type ID
AAX_SUCCESS on success
GetChunkSize
chunkID- Chunk type IDpChunkSize- Receives chunk size in bytes
AAX_SUCCESS on success
GetChunk
chunkID- Chunk type IDpChunk- Chunk structure to fill
AAX_SUCCESS on success
SetChunk
chunkID- Chunk type IDpChunk- Chunk data to restore
AAX_SUCCESS on success
CompareActiveChunk
pChunk- Chunk to comparepIsEqual- Receives comparison result
AAX_SUCCESS on success
The compare light in Pro Tools indicates when the plugin’s current state differs from the saved state. Implement proper comparison for accurate feedback.
DirtyPTCompareState
Call this when your plugin’s state changes in a way that’s not captured by indexed parameters (e.g., custom data, imported samples, etc.).
NotificationReceived
type- Notification type IDdata- Notification datasize- Data size in bytes
AAX_SUCCESS on success
Configuration
AAX Setup Structure
Defined in:IPlug/AAX/IPlugAAX_Parameters.h
Common Stem Formats
Mono/Stereo
Surround
Immersive
Special
Plugin Configuration
Set in your plugin’sconfig.h:
Factory Function
Create
AAX_CEffectParameters instance (your plugin class)
Example:
MakePlug
info- Instance information (empty for AAX)
Best Practices
Parameter IDs
AAX uses string-based parameter IDs. iPlug2 handles conversion automatically, but parameters use an offset of
kAAXParamIdxOffset.Chunk State
Use chunks for complex state. Always implement
CompareActiveChunk() properly for the compare light to work correctly.MIDI Setup
Configure MIDI nodes during descriptor registration, not in
EffectInit(). Declare all MIDI needs upfront.Latency
AAX latency is fixed at initialization. For variable latency algorithms, declare the maximum possible latency.
Common Issues
AudioSuite: Set
AAX_DOES_AUDIOSUITE 1 to create an offline processing version of your plugin for Pro Tools’ AudioSuite menu.Related Documentation
- IPlugAPIBase - Base API functionality
- IPlugProcessor - Audio processing interface
- Plugin Configuration - Plugin configuration options
- AAX SDK Documentation - Official AAX documentation (requires developer account)