Introducing New 64-Bit Distortion / Fuzz Pedal Emulators

VST, AU, AAX, CLAP, etc. Plugin Virtual Effects Discussion
RELATED
PRODUCTS

Post

Thanks, the 32 bit VST3 is working here.

Post

Hi Chris-S,

Thanks very much for letting me know. Hope you like it.

Regards,
Dave Clark

Post

Hi all,

All software has been re-released on KVR Audio only as VST3 because the wrapped VST3 versions (with extension .dll acting as VST2) were not working properly to store/restore parameter values (e.g. knob settings) for many hosts. As long as you have a DAW or other host that accepts VST3, you should no longer have this problem.

Versions at the http://www.execonsultingtx.com have now been updated to VST3 only.

Regards,
Dave Clark
Last edited by DaveClark on Sun Nov 05, 2017 11:09 pm, edited 1 time in total.

Post

So what's the deal with VST3 vs VST2 not working? Are the plugs made with SE or something?

Post

Hi izonin,

Well, if you must know, I actually built all the numerical stuff under Ubuntu using g++ at the command line. I use tons of bash scripts and stuff like awk, sed, vim, python, valgrind, circuit simulators, and utilities such as grep, paste, etc. plus the computer-algebra system Maxima and the statistical modelling program R to automatically construct a lot of data and code, saving tons of time. Does that scare you?

I then imported all the source and, as noted in my videos, built the initial VST prototypes with RackAFX (which creates additional C++ code for compilation and linking to VST SDK) because it makes the GUI easy to build, then exported all C++ code to VST SDK where I further work on them. So it's possible that the VST2 problems originated with RackAFX, but there is a long-standing problem with many hosts that clobber VST2 parameter values upon reloading projects. In the past, developers have resorted to timers and logic to prevent this from happening, but if you wrap a VST3 as a VST2, it's not at all clear to me how to then go about preventing this old problem from re-appearing. I have contacted the developer of RackAFX about this problem.

As far as I know, VST2 works fine otherwise, but admittedly the host problem is a big deal for many users.

In summary, I use the tools that match my interest and experience to do this as efficiently as possible so I can actually get things done like making making music. Using Samplitude Pro X3 Suite I myself have had no problems with the plugins developed using this process, either VST2 or VST3, and have used them in more than 36 different projects.

Regards,
Dave Clark

Post

DaveClark wrote:Hi izonin,

Well, if you must know, I actually built all the numerical stuff under Ubuntu using g++ at the command line. I use tons of bash scripts and stuff like awk, sed, vim, python, valgrind, circuit simulators, and utilities such as grep, paste, etc. plus the computer-algebra system Maxima and the statistical modelling program R to automatically construct a lot of data and code, saving tons of time. Does that scare you?
Pretty neat to see you modeling with R. As a data scientist, I use R a lot as well (but for a different purpose).
Out of personal interest, might I ask what part of the process you use it for?
Demo/soundtrack work: https://soundcloud.com/antaln
My post/prog rock band: http://www.sylvium.com

Post

I just found my old midi vst2 effect and added basic logging stuff. So, project loading sequence for a vst with 7 parameters in Reaper looks like this

Code: Select all

calling MidiGTRA (effect class constructor)
calling setProgram | 0
calling setParameter | 0 | 0.000000
calling setParameter | 1 | 0.500000
calling setParameter | 2 | 0.500000
calling setParameter | 3 | 0.500000
calling setParameter | 4 | 0.500000
calling setParameter | 5 | 0.500000
calling setParameter | 6 | 0.500000
calling setSampleRate | 44100
calling setBlockSize | 132
calling getEffectName
calling getVendorString
calling canDo | 'hasCockosNoScrollUI'
calling canDo | 'hasCockosExtensions'
calling resume
calling canDo | 'receiveVstEvents'
calling canDo | 'sendVstEvents'
calling getParameter | 0
calling getParameter | 1
calling getParameter | 2
calling getParameter | 3
calling getParameter | 4
calling getParameter | 5
calling getParameter | 6
calling getProgramName
calling setProgram | 1
calling setParameter | 0 | 0.000000
calling setParameter | 1 | 0.500000
calling setParameter | 2 | 0.500000
calling setParameter | 3 | 0.500000
calling setParameter | 4 | 0.500000
calling setParameter | 5 | 0.500000
calling setParameter | 6 | 0.250000
calling getProgramName
calling setProgramName | 'Transpose -12'
calling setParameter | 0 | 0.000000
calling setParameter | 1 | 1.000000
calling setParameter | 2 | 0.000000
calling setParameter | 3 | 1.000000
calling setParameter | 4 | 0.000000
calling setParameter | 5 | 1.000000
calling setParameter | 6 | 0.000000
calling getParameter | 0
calling getParameter | 1
calling getParameter | 2
calling getParameter | 3
calling getParameter | 4
calling getParameter | 5
calling getParameter | 6
calling getProgramNameIndexed | 0
calling getProgramNameIndexed | 0
calling getProgramNameIndexed | 1
calling getProgramNameIndexed | 2
calling getEffectName
calling getParameter | 0
calling getParameter | 0
calling getParameterName | 0
calling getParameterDisplay | 0
calling getParameterLabel | 0
calling getParameter | 1
calling getParameter | 1
calling getParameterName | 1
calling getParameterDisplay | 1
calling getParameterLabel | 1
calling getParameter | 2
calling getParameter | 2
calling getParameterName | 2
calling getParameterDisplay | 2
calling getParameterLabel | 2
calling getParameter | 3
calling getParameter | 3
calling getParameterName | 3
calling getParameterDisplay | 3
calling getParameterLabel | 3
calling getParameter | 4
calling getParameter | 4
calling getParameterName | 4
calling getParameterDisplay | 4
calling getParameterLabel | 4
calling getParameter | 5
calling getParameter | 5
calling getParameterName | 5
calling getParameterDisplay | 5
calling getParameterLabel | 5
calling getParameter | 6
calling getParameter | 6
calling getParameterName | 6
calling getParameterDisplay | 6
calling getParameterLabel | 6
calling getParameter | 0
calling getParameter | 1
calling getParameter | 2
calling getParameter | 3
calling getParameter | 4
calling getParameter | 5
calling getParameter | 6
calling getProgramName
Project was saved with modified vst program #1 (calling setProgram | 1) and params 0.0000, 1.0000, 0.0000, 1.0000....
Since there are no setXXX after the last setParameter sequence it's kinda weird that your vst resetting params.

Post

Hi tico-tico,

Thanks for your post with the logging information.

It's also kind of weird that VST3 works but wrapped as VST2 doesn't for the same plugin. The question I have is how all hosts act in the case of VST3 wrapped as VST2. Reaper is just one host, and at this point, even with your log, we don't really know for sure what it's doing with VST3 wrapped as VST2. Also: If I'm doing something wrong, why does Samplitude Pro X3 Suite work? Why do the Harrison Mixbus programs work? Isn't that even more weird?

I probably should also create a logging VST3 wrapped as VST2 created with RackAFX, but I've been pretty busy trying to find workarounds. Then the problem with Reaper of not providing support for bridging of 32-bit Reaper to 64-bit plugins for VST3 popped up. That's also weird.

But again, I do thank you for doing that. It reminded me to create my own log if I don't hear back from the RackAFX developer soon.

Regards,
Dave Clark

Post

DaveClark wrote:The question I have is how all hosts act in the case of VST3 wrapped as VST2.
I really think that from the vst host's point of view there is no such thing as "wrapped vst2". VST2 is just a protocol, a set of API functions. So there is should be no different for any vst2 even if it is somehow "wrapped" internally.
In my log you see calling of overrided (is this the term?) virtual functions from class AudioEffectX of vst2 sdk.

Post

evilantal wrote: Out of personal interest, might I ask what part of the process you use it for?
Hi evilantal,

The most important use is probably fitting of model parameters, although R seems a bit limited in that regard.

Having worked in the semiconductor industry and knowing the folks who wrote "parameter extractors" for complicated models, I know that such software may very well need to be somewhat custom-made for specific types of models. But I wanted to use something more general-purpose like R that had programmability built into it plus other capabilities.

Regards,
Dave Clark

Post

tico-tico wrote:I really think that from the vst host's point of view there is no such thing as "wrapped vst2". VST2 is just a protocol, a set of API functions. So there is should be no different for any vst2 even if it is somehow "wrapped" internally.
I agree that this should definitely be the case, but I'm no longer sure that it actually is:

Again, how do you explain that some hosts actually work if I'm resetting parameters? Something is different, obviously. There is an API, yes. But that does not mean that there is a true protocol. If there was, this problem wouldn't exist.

It may be that, for some reason, the protocol for a VST3 wrapped as VST2 necessarily be different than a pure VST2 even though the APIs appear to be the same from the host's point of view.

Regards,
Dave Clark

Post

I wonder if RackAFX came as a bunch of source code files or as prebuilt libraries. If the former then a simple breakpoint could solve the mistery.
btw you may always switch to WDL.

Post

I can't wait to give these puppies a whirl! Thank you so much Dave Clark!

No distortion is too much distortion. :P
It is no measure of health to be well adjusted to a profoundly sick society. - Jiddu Krishnamurti

Post

Upon Edit:

You can skip all of this below. There was a bug in version 3.6.6 of the VST2Wrapper code distributed by Steinberg, not something I did nor anything in RackAFX. Parameters were incorrectly mapped from VST3 to VST2. Steinberg fixed this in 3.6.7, and I have recently adapted 3.6.6 to use 3.6.7 parameter-mapping code.

Once I'm confident that nothing else has changed, I'll release VST2/VST3 versions that work correctly with all hosts.


Hi all,

Regarding the recent VST2/VST3 issue wherein VST3-wrapped-as-VST2 plugins didn't recall edited preset parameters when projects were reloaded (for those interested in or requiring VST2 versions):

Contrary to what has been suggested, for example by poster tico-tico, I myself am not implementing the VST2 function setProgram in my plugins, nor is RackAFX.

setProgram, setChunk, and getChunk are not part of VST3. They are in VST2Wrapper, just as they should be in order to appear as VST2, but these official versions are incompatible with most hosts, including Cubase. To get some idea of just how much DAWs differ from one another, see (*) below.

This is a long-standing problem going back to VST2 SDK that programmers could get around, but now that the functions are officially part of VST2Wrapper inside of VST3 SDK, I'm reluctant to mess around with them. Basically, it appears that the official VST2 wrapper is a no-go, so I would be required to redo the plugins entirely under some VST2 methodology, and I don't want to do that, either.

This problem and potential solutions (unreliable or inapplicable for VST2Wrapper) were discussed both long ago and more recently:

2005:

viewtopic.php?p=1096418

2015:

viewtopic.php?p=6393961


Unless there is a large number of requests for VST2 or I find an easy solution for porting VST3 code to VST2, I won't be distributing VST2 versions in the future. Because my favorite DAW works correctly with VST2Wrapper, for my own use I can simply rename the .vst3 extensions to .dll and use the wrapped plugins as if they were VST2.

Regards,
Dave Clark

(*) Hosts I've personally tested with an extremely simple saved and reloaded project that has nothing more than a wrapped VST3 (extension .dll) are listed below. No means “did not restore edited value” and YES! means “restored edited value” :

Cubase 9 Elements: getChunk, setChunk, setProgram => No

Reaper: getChunk, setProgram, setChunk => No

Samplitude Pro X3 Suite: setProgram (times 3), setChunk, getChunk => YES!

Waveform 8: setProgram, setChunk => No

SONAR X3: setProgram (times 2), setChunk => No the first time after reboot, Yes the second (Weird!)

Renoise 3.1: setProgram, setChunk => No

FL Studio 12 x64: getChunk, setChunk, setProgram => No

Mixcraft 8 Pro Studio: getChunk (times2), setProgram, getChunk (times3), set Program, setChunk, getChunk => No

Harrison Consoles Mixbus32c: setChunk => YES!


Skipping around setProgram using a debugger shows that if these DAWs had all refrained from calling setProgram upon loading a project, calling it only if there was some recorded automation wherein the user actually did change the preset, everything should have turned out fine except that, in some cases but not all, the incorrect preset label is displayed, namely the default preset. Because, strictly speaking, the chosen preset values were edited, this misrepresentation arguably shouldn't be an issue.

To give one example of what goes wrong: Reaper does actually restore the edited parameters under VST2Wrapper, but it puts them in preset 0 if another preset is chosen. So the edited parameters are there, they just cannot be seen or further edited. When the user selects preset 0 to edit them, of course the factory values overwrite the edited values so the user still cannot see the edited parameters. Reaper puts them in the wrong place under the official VST2Wrapper, then the user unwittingly overwrites them if he/she selects preset 0.
Last edited by DaveClark on Sat Nov 25, 2017 6:04 pm, edited 1 time in total.

Post

Hi Dave, first of all thanks for your free plugins.
Second, I have moved to the most recent vst3 versions here but was just wondering if you are going to add support for category? Right now using Cubase the plugins are all sorted under 'other' category. Just sayin'.
thanks

Post Reply

Return to “Effects”