I’d like to cache the indexes of parameters, I don’t see why I’d have to search for the params everytime.
Is this safe?
// I'll get the pointer once at the start of the session
std::atomic<float>* myParamPointer = state.getRawParameterValue ("myParam");
// Now i'll use the value durign the whole of the session
doSomeThingWith( *myParamPointer )
I will ofcourse not write to *myParamPointer, it is just for faster reading in the audiothread
I recently learned this extra step, which is better, as you then also get the built in rounding functions for parameters that aren’t meant to be floats:
delta = dynamic_cast<juce::AudioParameterBool*>(apvts.getParameter(ID::PARAM::delta));
personally I’m happy with all unrounded floats.
My question is whether my caching is correct, meaning that the param adress is solid during a session. You suggest that it is allright then?
Yes, the pointers will remain the same. That also means Juce does not currently support dynamically adding/removing parameters of the plugin, which you might want to keep in mind if you are planning to do more complicated plugins.
To be fair, most plugin formats don’t support that either.
ok guys, thanks!
all clear to me now
all my parameters are created with their corresponding atomic* and I always use them in the processor. only in the editor i use get and set.
Although as a precautionary measure, before processing the audio buffer it copied the values to local variables. That is, I do not want the values to change in the middle of the process. Apart from preventing them from being read hundreds of times in a loop.