Support for VST 3 in Cantabile is just about done, but may be abandoned due to some technical difficulties.

Over the last two weeks I’ve been adding support for VST 3 to Cantabile 3. This has gone fairly well although Steinberg’s documentation could be alot clearer on some things.

Mostly it’s done: the plugin scan works, the insert plugin dialog handles VST 3 plugins, the audio and MIDI ports are setup correctly, the plugins seem to process correctly, parameter editing works, the plugin GUI editor works, saving and loading all works.

There’s just one small problem — program list management. The problem here is that the VST 3 documentation suggests two ways in which a plugin might like to handle this:

  • Copy and edit — where the plugin has a built in set of factory programs which when loaded get copied into the plugin’s current working set of parameters for user editing
  • Edit in place — where edits are applied directly to the entry in the program list (like most VST 2 plugins).

The problem is there doesn’t seem to be a way for the host to find out which model the plugin uses so Cantabile can’t really normalize this behaviour to make it consistent to the user. To make matters worse, just about every VST 3 plugin that I’ve tried, (including the sample plugins supplied by Steinberg) don’t seem to work correctly or consistently.

Given that Cantabile’s sub-session support really relies on meaningful program list behaviour this is a pretty big problem. I could include it and state that it’s flakey, or require the user to manually handle the different program list models but I’m having a really hard time seeing the up-side of including it. I’m also wondering whether I want to encourage the uptake of VST 3 by supporting it.

So, for the time being anyway I’m putting VST 3 support on the side-burner. The time wasn’t completely wasted since I’ve refactored Cantabile’s plugin hosting code to better support different plugin formats and the UI is now fully capabable of handling plugins with multiple MIDI input/output ports (which it wasn’t before).