Cycling74 / rnbo.adapter.juce

RNBO JUCE Adapter code
https://rnbo.cycling74.com/
MIT License
3 stars 2 forks source link

Crash on certain hosts due to initial preset value being set to -1 #5

Open yamadapc opened 1 year ago

yamadapc commented 1 year ago

This is a duplicate of https://github.com/Cycling74/rnbo.example.juce/issues/18, since it should apply to this repository.

The problem is that the initial program being set to -1 causes some iOS hosts to crash the plug-in when it is loaded.

I'm copying all information that was linked above.


This is fine on most iOS hosts, but for AUM (https://apps.apple.com/us/app/aum-audio-mixer/id1055636344) which is a highly used host for iOS, the fact the initial program is set to -1 causes the plugin to crash.

The reason is that -1 is not a valid program index and JUCE AudioUnit code is not handling -1 as an input. See:

What AUM seems to do it:

AUAudioUnitPreset* getAtIndex (int index) const
{
     std::lock_guard<std::mutex> lock (mutex);

     if (index < (int) [presets.get() count])
          return [presets.get() objectAtIndex: (unsigned int) index];

     return nullptr;
}

The fix could be to for RNBO::JuceAudioProcessor's _currentPresetIdx field to be initialised to 0 or a different value. I can verify setting the program to 0 (as well as patching JUCE bounds checking code above to consider lower bounds) fixes crashes in AUM for my iOS plugin.

All the best


The problem is on RNBO_JuceAudioProcessors.cpp line 246:

    , _currentPresetIdx(-1)

https://github.com/Cycling74/rnbo.adapter.juce/blob/main/RNBO_JuceAudioProcessor.cpp#L114