restartComponent(kParamTitlesChanged) during session recall

Similar to other threads in the past here, we have a multi-effect that changes the names and properties of its’ automatable parameters depending on it’s state (i.e., whatever preset is loaded) When our effect’s properties change (which is at the end of a call to SingleComponentEffect::setState), we update the properties and names for all parameters and then call:

componentHandler->restartComponent(kParamValuesChanged | kParamTitlesChanged);

For the most part this works fine, except during session recall. During session recall, most hosts seem to ignore kParamTitlesChanged, and so automation lanes come up with generic names after loading a session. The values and ranges of those parameters seem to be fine - it’s just the names that aren’t updated.

Why is this the case and what is the recommended moment during a session recall sequence to let the host know it needs to rescan parameter names?

Inside a setState it is allowed to call restartComponent, the host should support it. You just need to call this:
componentHandler->restartComponent(kParamTitlesChanged);

Some hosts may have issue when redrawing parameter name of automation track, an open / close automation track should solve this issue.

Which hosts are you using?

Ableton Live ignores calls to restartComponent(kParamTitlesChanged) from within setState(). The only workaround we found is to use a timer or other delay mechanism to call restartComponent after setState has completed, not ideal but gets the job done.

It’s a shame there are no tools to validate host implementations of VST3; us poor plugin developers have so many quirks & bugs to deal with!

Sorry for not getting back on this one, but confirming it was Ableton. We also had a bug on our end that was overlapping with this, so I wanted to develop a complete understanding before throwing Ableton under the bus, hence my delay in getting back.

We developed a similar workaround by calling restartComponent an additional time if needed at activation time, which seemed to solve the issue for now, even though it’s a hack.

Did you report this to Ableton?

restartComponent should work in a setState.