Request: remove unnecessary workload in JuceAU::addParameter

Please apply this patch, it checks just if the parameter is a non-legacy parameter, and than uses the modern getText() approach to retrieve the text for a step value, instead of setting the parameter for every step.
I have a plugin with thousand of parameters, and a lot of different steps, this old approach is very inefficient, because it causes a complicated coefficient calculation for every setValue(), in my case.

The comment in the source-code mentions that it can be replaced with getText() sometime in the future, but this approach works also with LegacyParameter.

        for (auto* param : juceParameters.params)
        {
            OwnedArray<const __CFString>* stringValues = nullptr;

            auto initialValue = param->getValue();

            bool isLegacy=dynamic_cast<LegacyAudioParameter*>(param) != nullptr;
            
            if (param->isDiscrete() && (! forceUseLegacyParamIDs))
            {
                const auto numSteps = param->getNumSteps();
                stringValues = new OwnedArray<const __CFString>();
                stringValues->ensureStorageAllocated (numSteps);

                const auto maxValue = getMaximumParameterValue (param);

                for (int i = 0; i < numSteps; ++i)
                {
                    auto value = (float) i / maxValue;
                    String text;
                    if (!isLegacy)
                    {
                       text=param->getText(value,100);
                    } else
                    {
                       param->setValue (value);
                       text=param->getCurrentValueAsText();
                    }
                    stringValues->add (CFStringCreateCopy (nullptr, (text.toCFString())));
                }
            }

            if (isLegacy)
            {
                param->setValue (initialValue);
            }

            parameterValueStringArrays.add (stringValues);
        }
1 Like

Yep, that’s a reasonable request. I’ll push something shortly.

1 Like

https://github.com/WeAreROLI/JUCE/commit/fb0385796d68464b44aa5994deed1b4ed42cd0f5

Great! Thank you very much!