This project has moved and is read-only. For the latest updates, please go here.

Some VST Synths do not sound.

Topics: Audio, Host Development, Host Processing
Jan 1, 2015 at 11:19 AM
Hello.
I have problems with some VST synthesizers to generate sound.
I have reed ProcessEvents with midi events with correct information (i Think) and have a working host sequencer to play sequences with notes and so on. Everything seems to work.

But, when I load some vst synthesizers, they do not generate sound. But I can get programs, parameters and so on from it. So it seems to be loaded correctly. Even when I play on the vsts built in keyboard there is no sound.

I am using Startprocess, ProcessReplace.
What can make some vst not to sound? Any ideas?
Jan 1, 2015 at 12:24 PM
The Synth VST convert MIDI events into audio. So you need to call ProcessEvents AND ProcessReplace...

[2c]
Jan 1, 2015 at 12:40 PM
Yes, sorry I was not clear. I am calling ProcessEvents(vstevents); Before ProcessReplace.
I have synthesizers like Freqatic, DSK TechSynth PRO and they sounds. But AlphatronFreeMain, DigiDrum Pro, GTG DPC 3 do not sound anything. And all vst feeds with midi events and Calling ProccessReplace.

And I have sitting here in hours and trying to find out why some vst synths works and some not works.
Jan 1, 2015 at 5:36 PM
I know some plugins require the EditorIdle() method to be called. Usually this is related to UI problems, but still...

Can you see any difference in support in the VST plugins? - like PluginFlags and CanDo's?
Do you provide a real implementation for GetTimeInfo()? I can imagine that plugins fail to work if that method is stubbed or not working correctly.
You can try to trace what Host methods these plugins use. Perhaps a critical method that you didn't implement is called?
Similar: debug what CanDo's are asked of the host by these plugins?
Jan 1, 2015 at 10:45 PM
Now I got more synthesizers to work!
I added MainsChanged(true); when I creates and instance of my vst and now all synthesizers works except one. I got 'System.AccessViolationException' occurred in Jacobi.Vst.Interop.dll in ProcessReplace. And i dont event processing any events at all. I got that exception on the first call in ProcessReplace.

CanDo, there was only one vst synth that request a CanDo and that vst works.

GetTimeInfo is correct I Think, I am setting ppqPosition, samplePosition, nanoseconds.

The plugin flags is the same as other vst so i Think there is no problem.

But the vst is only Calling GetVersion and GetVendorString and after that it goes into ProcessReplacing and crash.

I have also tested the vst that not works in FL Studio and it works there.

Thanks very much for helping :)
Jan 2, 2015 at 12:41 AM
Can you tell me which vst makes a memory access violation?
I have time to test it in the next few days to see what could be wrong.
This error could be related to the size of the buffer, ie: plugins expect more channels to be in the buffer but you only have stereo. Plugin will read past the soze of the buffer you provided.
Jan 2, 2015 at 10:01 AM
DigiDrum Pro.dll

Here inte the download link:
http://www.vst4free.com/free_vst.php?plugin=DigiDrum_Pro&id=396

Thank you so much for helping me! :)
Jan 3, 2015 at 9:05 AM
Edited Jan 3, 2015 at 9:10 AM
Plugin is crap, it kept crashing but luckily I figured it out in less than 5 min. I loaded the bugger from 'c:\' like I always do for debugging and I noticed it kept recreating folder 'c:\DigiDrum Pro' before the crash. I moved the dll in 'c:\DigiDrum Pro' and it loaded fine from there. Not much you can do about it, it's pretty obvious the plugin hardcoded the path to it's settings folder and does no bug checks when attempting to read them triggering a memory access violation. Only fix I can think of is to open it from it's hardcoded path or change the startup path to that location which probably is not an option.
Jan 3, 2015 at 10:31 PM
Hmm okey, I wounder how FL Studio can open it? But thank you for checking up that. I will look at more about that vst synth later. :)
Jan 4, 2015 at 2:03 AM
Hard to know without seeing the code, it could be a simple shim: if (pluginName == "DigiDrum Pro") startUpPath = "c:\DigiDrum Pro"
Or alternatively if (pluginName == "DigiDrum Pro") make directory "c:\DigiDrum Pro"; copy plugin.dll to "c:\DigiDrum Pro"; load "c:\DigiDrum Pro\plugin.dll"

FL Studio is full of these kinds of shims, if that's the way you're going you'll have to patch specific plugins left and right to emulate it's behavior.

I opened DigiDrum Pro in ModPlug Tracker which I know doesn't have many shims. The plugin crashes when opened outside of it's hardcoded path just like my host.
If you still have a problem opening the plugin in your host from the path 'c:\DigiDrum Pro' then I might be able to figure out what's still missing.
Jan 6, 2015 at 10:27 AM
I implemented the following shim for this particular plugin:
public static String CheckPath(String path)
{
    String fileName = Path.GetFileName(path);

    // Plugin 'DigiDrum Pro' works only in hardcoded path 'C:\DigiDrum Pro'
    if (fileName.Contains("DigiDrum Pro"))
    {
        String pluginDirectory = @"C:\DigiDrum Pro";

        if (!Directory.Exists(pluginDirectory))
            Directory.CreateDirectory(pluginDirectory);

        String newPath = Path.Combine(pluginDirectory, fileName);

        if (!File.Exists(newPath))
            File.Copy(path, newPath);

        path = newPath;
    }

    return path;
}