I am developing a plugin that relies on loading different IRs when it detects a parameter change. It works fine on FL Studio and a few other DAWs, but in Mixcraft it reliably crashes when the parameter is changed.
I’ve set my Editor class to inherit privately from AudioProcessorValueTreeState::Listener, and added the following to its constructor:
// ADD ALL PARAM LISTENERS
apvts.addParameterListener("lb_freq", this);
apvts.addParameterListener("lb_amt", this);
apvts.addParameterListener("lc_freq", this);
apvts.addParameterListener("lc_amt", this);
apvts.addParameterListener("hb_amt", this);
apvts.addParameterListener("hb_freq", this);
apvts.addParameterListener("hc_amt", this);
apvts.addParameterListener("hc_freq", this);
apvts.addParameterListener("oversample", this);
Then, I added a private function void parameterChanged(const juce::String& parameterID, float newValue) override to the Editor class.
But in Mixcraft, turning the parameter knob gives me the following exception: Access violation reading location 0xFFFFFFFFFFFFFFFF.
I’ve commented out the entire body of my parameterChanged() function, except for suspending and un-suspending audio processing, and I get the same exception, indicating it was not anything in that function that caused the issue. I added breakpoints at the beginning and end of my parameterChanged() function, and it seems like it executes fine, and that the crash happens somewhere in JUCE’s code after my parameterChanged() function is finished. My call stack is shown below:
Here is the JUCE code where the exception occurs, in the AudioProcessorValueTreeState::ParameterAdapter class:
void parameterValueChanged (int, float) override
{
const auto newValue = denormalise (parameter.getValue());
if (unnormalisedValue == newValue && ! listenersNeedCalling)
return;
unnormalisedValue = newValue;
// The below call is where it crashes
listeners.call ([this] (Listener& l) { l.parameterChanged (parameter.paramID, unnormalisedValue); });
listenersNeedCalling = false;
needsUpdate = true;
}
The disassembly shows the exception happening on almost the last instruction of that line: call qword ptr [rax+8] , and the “registers” window shows RAX = DDDDDDDDDDDDDDDD. So I’m guessing it’s trying to call parameterChanged() on a listener that doesn’t exist?
I’m not sure if this is an issue with JUCE, or if I set up the Editor as a listener in the wrong way. I am using 64-bit Windows 11, JUCE v7.0.2. Does anyone have any ideas on what might be going wrong or how I could fix it?
Thanks so much in advance!

