Thanks @t0m - one minor observation, re: your comment:
// From the VST3 docs:
// Up to 2^31 parameters can be exported with id range [0, 2147483648]
// (the range [2147483649, 429496729] is reserved for host application).
I’d note that the VST3 docs refer to a reserved range for parameter IDs, not unit IDs - but it’s clear the same restriction applies to unit IDs too.
I’m guessing this restriction might also have been the cause of this code in generateVSTParamIDForParam
- from that code:
#if JUCE_USE_STUDIO_ONE_COMPATIBLE_PARAMETERS
// studio one doesn't like negative parameters
paramHash &= ~(((Vst::ParamID) 1) << (sizeof (Vst::ParamID) * 8 - 1));
#endif
When this code was introduced it seems it wasn’t clear/documented that some of the ID range was reserved: Automation not working in Studio One 3