VSTPlugin v0.2.0 final release

Hi, I’m happy to announce the final release of VSTPlugin v0.2.0. You can download binaries here: https://git.iem.at/pd/vstplugin/-/releases

If possible, please report bugs at https://git.iem.at/pd/vstplugin/issues

Otherwise just leave them here in the comments.

Enjoy!


Changelog

features

  • VST2 shell plugin support (e.g. “Waves”, “Blue Ripple Sound”)
  • (experimental) VST3 support including sample accurate automation and auxiliary inputs/outputs for side-chaining
  • soft-bypass
  • potential Cocoa GUI editor for Supercollider
  • faster search/probe (multi-processing)
  • save search/probe results in a cache file to speed up subsequent searches
  • VSTPluginController: ‘set’, ‘map’ and ‘get’ now also accept parameter names instead of indices.
  • VSTPlugin.ar now accepts an ‘info’ argument, which allows ‘params’ to contain parameter names instead of indices. You can also omit the ‘path’ argument in ‘VSTPluginController.open’.
  • *Msg versions for all relevant methods to enable NRT synthesis and bundling.
  • You don’t have to wait anymore between creating a Synth and calling ‘open’, e.g.: VSTPluginController(Synth(\vst)).open("myPlugin");
  • the preset methods (‘readPrograms’, ‘writePrograms’, etc.) now have an ‘async’ parameter (like ‘reset’ and ‘vendorMethod’). By default, they are executed on the RT thread (except for the file IO). If ‘async’ is ‘true’, they are safely executed on the NRT thread (the plugin is suspended in the meantime).
  • the OSC interface is now stable and documented

bug fixes

  • fix broken GUI editor with certain (older) plugins
  • fixed possible crasher bugs when the UGen is freed while asynchronous commands are still running

changes

  • use CMake for the whole project (not only for the SuperCollider part)
  • deprecated ‘parameterNames’ and ‘parameterLabels’ in plugin info. The info has now a member called ‘parameters’ which is an Array of parameter info Events (with ‘name’ and ‘label’ being the only members so far).
  • ‘set’ now always executes on the RT thread.
  • the ‘info’ argument for ‘VSTPluginControler.open’ has been renamed to ‘verbose’.
  • many internal changes to the OSC interface, UGen arguments and plugin info file structure.

internal changes

  • use .ini like syntax for plugin info
  • hard-bypass prefers the plugin’s bypass method
  • single event loop shared by all plugins
1 Like

Greetings and thanks again for this project.

When I open a certain Vsti (Synful Orchestra) a ton of info is printed to the post window during load, and indeed while running the plug-in prints a ton of not-important info!

During load in particular I am having performance issues - language-side processes glitch and can be delayed… I am not seeing CPU levels of concern… Any thoughts?

Another solution to my problem could be if there were a way for VSTs to persist after command-. so that I wouldn’t have to reload…

@semiquaver

When I open a certain Vsti (Synful Orchestra) a ton of info is printed to the post window during load, and indeed while running the plug-in prints a ton of not-important info!

can you show me the output? I’m just curious whether the plugin prints actual error messages or useless debug info.

During load in particular I am having performance issues - language-side processes glitch and can be delayed… I am not seeing CPU levels of concern… Any thoughts?

VST plugins are loaded asynchronously in the non-realtime thread, so they will never block the audio (realtime) thread, but subsequent asynchronous operations (e.g. loading soundfiles into buffers, waiting on a Server reply with s.sync, etc.) will have to wait till the plugin has finished loading. However, pure client-side computations shouldn’t be affected!

Another solution to my problem could be if there were a way for VSTs to persist after command-. so that I wouldn’t have to reload…

Well, command+. kills all Nodes on the Server, so there’s no way the VST plugins can persist. You can simply create “heavy” VST plugins upfront and run/pause the Nodes as needed. And don’t use command+. :slight_smile: