We’re also seeing this bug in our plugins. After investigating a little, we narrowed it down to AudioProcessor::updateHostDisplay()
, which calls audioProcessorChanged()
.
In the AU wrapper, this then calls PropertyChanged()
for a number of properties, even though latency is the only thing that changed. Commenting out line 1020 of juce_AU_wrapper.mm
fixes this behavior: PropertyChanged (kAudioUnitProperty_PresentPreset, kAudioUnitScope_Global, 0);
.
Ableton polls the values of all parameters and sets them internally when notified that a preset change may have occurred. This marks all parameters as “manually updated”, even though the value has not actually been set by the plugin, and therefore the automation is disabled because it is overridden by the “manual” setting.
In the VST wrapper, the specific cause isn’t as easy to see. Commenting out hostCallback (&vstEffect, hostOpcodeUpdateView, 0, 0, 0, 0);
fixes the problem, but by doing this we also probably stop informing the host of the latency change. There must be a way around this, since we’ve tested other non-juce plugins in Ableton and they are able to change the latency without disabling automation.