I’ve got some parameters in an audio plugin, some are AudioParameterFloat, some are AudioParameterBool, AudioParameterInt and AudioParameterChoice.

I’m finding that audioProcessorParameterChanged() is almost never called for non-float types (Int, Bool, Choice) even though I can see the parameter instance has been updated and changes are reflected in my GUI (which uses the parameter objects directly).

I am making these value changes via Ableton Live, updating the parameters not from the plug-in GUI, but from the sliders Live provides for MIDI mapping (I want this to work, otherwise my parameters can’t be MIDI-mapped).

As an aside - I can see (I think!) that the AudioParameter objects were designed with the idea that you would use the parameter directly in your audio processing code (e.g., just using the *parameter as the value). But I have sub-classes and I need to update the value of variables in these sub-classes, so I need to have callbacks telling me when they have been updated.

I know another solution is the AudioProcessorValueTreeState class - but it seems to me there is less explicit support for bool/int types with most parameters represented as a float (or perhaps I misunderstand). Also - is there a reason they are indexed by Strings rather than Identifiers?

(There are also examples where AudioParameterFloat parameters don’t trigger the callbacks either. Some of the float parameters do, others don’t. I’ve initialised them the same way, as per the JUCE AudioParameter class tutorial).