What does this Cantabile error actually mean?

I’m trying to create my own VST3 plug-ins for Cantabile. Occasionally my plug-ins work perfectly, but most of the time Cantabile doesn’t recognize them (they don’t appear in the list of available plug-ins after I re-scan plug-in folders), and trying to manually load them makes Cantabile print the following error:

Value cannot be null. (Parameter 'input')

What does this error actually mean? If I knew which vst3 method Cantabile was calling and rejecting, I could probably fix it; but without that info I’m stuck.

Hi Hamlen,

I had some VST3 plugins from DMG do that after they changed from a single VST3 dll in the VST3 root folder to a folder with the VST3 extension.

image

The workaround was to move the the VST3 dll from the sub folder (x86_64-win) to the VST3 root folder.

image

I don’t know if that is your situation but the same error message came up and after I moved it Cantabile recognized it so maybe it will fix it. Either way @brad should know about the issue so I will flag this post.

Dave

1 Like

That doesn’t sound like an error message from Cantabile. Try Dave’s suggestion and if that doesn’t help, get back to me and I’ll take a closer look.

Thanks Dave & Brad:

I’m pretty sure it’s something wrong with the vst3 I’m creating, since the broken ones won’t load into other hosts either. But they pass all the validation tests that come with Steinberg’s VST3 SDK (“validator.exe”), and other hosts I’ve tried give no error at all; they just silently ignore my attempt to load the plugin, making it very hard to diagnose the problem. Moving them to different folders as per Dave’s suggestion didn’t work either, unfortunately.

Here’s what the error looks like (on Cantabile v4.0 Build 4055 x64):

CantabileError

In Cantabile’s log file I find the following interesting text:

00027045    24576 ! [22172:0]: Failed to load plugin 'SustainPedal2 1'
System.ArgumentNullException: Value cannot be null. (Parameter 'input')
   at System.Guid.Parse(String input)
   at #=zM1MfJhfZPmawewWjMNYfI$nJakuY..ctor(String #=zbXn8kzc=, UInt32 #=zRM_8lK8=)
   at #=zYfIBf9ZlmkhYgMP7doOpJTfr3MVT.#=z3jvmO8fyefQu()

Yeah, that’s weird.

What it Looks like superficially is that we’re passing a NULL parameter to the parse function. Have you isolated the fault to a particular invocation of the function?

I’d try adding some NULL checks to the GUIDs before the invocation of GUID.parse to see whether I’ve forgotten to initialize the right variable.

Hi cdkrugjr:

No, I unfortunately don’t know what vst3 function Cantabile is calling, and my vst3 code doesn’t call System.Guid.Parse at all because it doesn’t contain any .NET code.

My guess is that Cantabile is calling System.Guid.Parse with a null argument somewhere in its vst3 loader code, probably because at that point something has already gone wrong with its attempt to load my vst3, which resulted in a null GUID string that it then attempts to parse. If that’s the case, then I guess the right fix would be for Cantabile to detect the earlier error and abort the vst3 load process with an error message right at that point rather than proceeding to the System.Guid.Parse operation and throwing an exception.

Update: After much experimenting, I’ve discovered that adding at least one Audio Out port (even if the plugin generates no audio output) mysteriously transforms my broken plugins into working ones that Cantabile can load. But I’ve created at least one test vst3 that has no Audio ports and yet loads properly anyway, so having an Audio Out seems to be a sufficient but not necessary condition for success.

I don’t know whether this is a bug in Cantabile, but it seems weird—especially since this Guid.Parse null-argument exception has apparently popped up for other Cantabile users in the past for other vst3’s. Might be worth investigation.

2 Likes

FWIW the DMG VST3 plugins that produced the error message for me have been fixed in the latest release.