Some VSTi's never provide values

May 19, 2010 at 3:10 AM

Hi, this project looks like it will be a godsend to us but we're encountering a problem with it that is similar to something we have already hit while trying to create our own VST host code.


A few of the VST instruments we are using (SoHaSonata, mda ePiano) work fine, while others (Drumatic_3, DVS Guitar) never provide any data when ProcessReplacing is called on them. That is to say, in the following example, buffer will always be filled with 0's no matter the MIDI provided to ProcessEvents earlier.


        Jacobi.Vst.Interop.Host.VstAudioBufferManager inManager = new VstAudioBufferManager(numOutputs, BlockSize);
        Jacobi.Vst.Interop.Host.VstAudioBufferManager outManager = new VstAudioBufferManager(numOutputs, BlockSize);
        Jacobi.Vst.Core.VstAudioBuffer[] buffer = outManager.ToArray();

        vst.PluginCommandStub.ProcessReplacing(inManager.ToArray(), buffer);

To me this seems similar to a problem we encountered when writing our own C++ unmanaged host code that we called from C#. When input was provided from an external MIDI keyboard, handled in C# then passed to ProcessEvents, it worked fine, but if a MIDI event was generated in another way (by a button click on screen for example), no sound data was ever generated. This was incredibly wierd, and leads me to beleive that this is some sort of threading/permissons issue, as Drumatic and DVS Guitar write .sem files to the file system while SoHoSonata and ePiano do not. Does this seem like a likely scenario? Any other ideas?

In any case, thanks for the immensely helpful work on VST.NET


May 19, 2010 at 6:15 AM

Thanks for your kind words.

I am not familiar with these plugins. Is there an exsisting host that does work? Perhaps in that case you could try them in that host using the PluginWrapper sample (download source). This would allow you to see what calls are made from the host to the plugin and visa versa. You could even set a breakpoint in the C# wrapper code. That would also give you the opportunitity to switch on the diagnostics traces in Interop that will print out information on method opcodes dispatched.

Hope it helps.

May 19, 2010 at 6:25 AM

Yes these plugins work in OpenMPT ( And they worked *in most cases* in our previous version without using VST.NET (though VST.NET is much more responsive). There might be something to your suggestion of wrapping one of these instruments in C# wrapper for testing though, and I will look in to that, thanks.