I’ve found the relevant part of the AAX documentation, the relevant AAX demo plugin and even the provided extension designed to handle JUCE’s use case.
- Doc page: AAX SDK Manual » Additional Topics » Parameter updates » Parameter update timing » Fixing timing issues due to shared data
- Demo plugin: DemoMIDI_Synth
- Extension: aax-sdk/Extensions/Topology/AAX_CMonolithicParameters.cpp
The documentation describes JUCE’s use case (“monolithic plug-in objects which are designed to work across multiple plug-in formats”) and explains that “if the algorithm directly shares data with the data model then the algorithm will immediately start using any new data model state without waiting for the corresponding coefficient delivery.”
The extension provides an alternate framework for parameter update delivery which uses a member function (rather than a relocatable free function) for audio processing and introduces a concept of ‘synchronized parameters’ designed to allow the audio processing function access to accurate parameter values.
Is there a reason this ‘monolithic’ plugin design was not used in the first place?