I hacked the plugin_manager.cc. I don't know what I did but it works :)

So I’ve been trying to resurrect a couple of old Windows VST2 plugins I have. I’ve managed to get them to work nicely with wine and yabridge in BitWig Studio on Linux Mint 20.1 Cinnamon. Most of them work in Ardour too which I just compiled from git just today. However the very old EastWest Quantum Leap Symphonic Orchestra I have from 2003 gave me an error in Ardour:

 plugin EWQLSOGoldVST does not support processReplacing, and so cannot be used in Ardour at this time

Since it works in BitWig on the same machine I thought I’d poke around with the Ardour code a bit. I don’t really understand much of the code at all but I simply just ignored the above error in the PluginManager::vst2_plugin(...) (plugin_manager.cc) by commenting out the return false; after where it spits out the above message. And what do you know… It works!!! The plugin manager still marks it as errored but it does open the UI and produces sounds as expected.

Obviously this isn’t a fix as such but I’m wondering:
A: How and why does it work? Maybe there’s some yabridge magic going on?
B: Could this compatibility check be maybe improved?

I don’t have the necessary skills to look much deeper into this. Be great if someone could :slight_smile:

Cheers,
Kari

VST allows plugins to do one or both of two things when they are given buffers of data to process:

  1. place the results of their DSP into the same buffers
  2. place the results of their DSP into output buffers provided by the host

Ardour only supports #1, which means that the plugin must support processReplacing.

I think I read something about yabridge doing that for legacy plugins that don’t support processReplacing directly. I’ll see if I can find that article again.

It was here under VST2 plugins section: yabridge/docs/architecture.md at master · robbert-vdh/yabridge · GitHub

Seems odd then that it would report that it cannot support processReplacing

Yes, I’m not sure how that works… yabridge seems to create an .so file for every .dll file. Maybe that’s where the problem lies? Could be a yabridge problem rather than Ardour…

Ardour supports both of those these days. I added support for no-inplace VST2 processing few years ago.

The difference is:

  • process adds the processed data to the input
  • processReplacing outputs the processed data directly, replacing any data that is on input ports (if they are shared buffers)

Ardour does not allow a plugin to add processed data to existing data, and always calls processReplacing for VST2s;

For what it’s worth this particular plugin is a midi instrument so it’s not really processing an input as such.

OK, it is weird that the plugin does not announce that effFlagsCanReplacing, yet still supports that function call.

Anyway, I am glad you managed to help yourself! Another win for free/libre open source software!

2 Likes

I’ll take a look at the yabridge code at some point to see if I can understand any of it. Maybe it’s an oversight there…

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.