Hello Will and all the crew here, I'm new to this world and i've studied in high school c++ and java programming (and in schools you don't do a lot) i've found a preview on internet of books written by Will and i started read them (only some pages with example was the preview downloadable for free, i'll purchase the book soon) and i've not understand a lot of it, i mean, my c++ knowledge it's not so good because we just studied at school and was three years ago or four, i don't remember, i just have a lot of nice ideas on vst and how them could be made so i would also start to program them from scratch, i mean starting from 0 because it's a world that i really want to know but in the examples inside the book i've not understand how all that work, i founded the examples hard, i mean book is well written but the examples and all the code it's not so clear to me, maybe it's for users with an advanced experience in c++, but it would be really cool and really nice if somebody could make video tutorials or clear example on how to create manually a vst in c++ using rack afx, because i just found a lot hard to do it from 0, i mean, how i have to setup everything inside my project? how can i just write something that modify my audio? there are a lot of hard things that are really cool and i don't know how to start to make them, I'm sorry if this is the wrong position in the forum for post this message, but i don't found a section about help
buy the Blue Book now!
You will not find a better getting in for programming VST plugins.
There is all you need.
Don't be afraid of C++.
The best way to learn is to start with the RackAFX projects.
You can download some C++ code (Brown Book: effects) from my website: http://www.retnz.de/tag/code/
And look at the SDK projects 'note_expression_synth' & 'mda-vst3' (optimizing).
Dive in, read, code!
I've downloaded RackAFX and started using it with Visual Studio 2015, i'm gonna buy the books and i just don't understand a thing following the first tutorials, the panel when i open RackAFX for the first time have a lot of "controls" what are these controls?
Are them some kind of property of RackAFX? If yes, will not this limit the creation of the vst? Because if i can just a max of (for example) 10 things to chose from filters, oscillators etc etc i've a vst with only 10 different "functions", maybe i'm wrong but it seems like this
RackAFX is designed to make prototyping a plugin very fast - all the controls you see are blank and un-initialized. After you create a project, you right-click on the sliders/buttons to setup controls that are linked to variables in your code. This is all detailed in the (brown) Audio FX book. In fact, that book is also a RackAFX manual that describes how all the controls work in great detail.
There are no limitations to the number of things (functions) you can choose from or the number of components in your plugin. That is totally up to you. You can have 1000 filters, 2000 oscillators, etc...
The current version of RackAFX's main GUI has 40 sliders, 4 radio button banks, 4 2-state switches and the LCD control at the top right allows you to include 1024 additional controls.
However, the current beta version has a totally new interface, and you can get information about that here (be sure to check out the new main GUI picture that allows thousands of controls and eliminates the need for the LCD control)
Since both of the books (blue Synth and brown FX) are written using the original RackAFX interface, you can choose to use the "classic" GUI mode so that it matches the books exactly. Once you understand how that works, then you can switch to the "modern"mode that is shown in the picture and which is also seen in the latest few videos on YouTube.
Once you have your plugin prototyped, you can then switch to the GUI Designer and create a "proper" GUI for your plugin, and there are several video tutorials that show this.
The reason that I have the main "Prototype" UI with all the controls you see when you open RackAFX is that when I first started designing VST2 plugins back in 1997, I had to spend a lot of time dealing with setting up the GUI controls to link to the variables in the plugin code. For some plugins, this would require more time that actually coding the audio processing functions, which is the most important part. RackAFX allows you to prototype your GUI controls in just a few minutes rather than hours.
Hope that helps -
Cool that's a complete answer, so if i have an idea about a "dynamic" synth I can create it 😀 that's cool, because i would create something that the user manage, like in this example:
Oscillators page with definitions of oscillators, for example, two oscillators created, one sine or one saw or viceversa
Main Page where the user decide to create two istances and define to them these possible combinations:
instance one (oscillator 1) instace 2 (oscillator 1)
instance one (oscillator 1) instace 2 (oscillator 2)
instance one (oscillator 2) instace 2 (oscillator 2)
This would be amazing in my point of view, because i would also add the effects page that can be attached at the bottom of these istances, like it's done with the inserts in every DAW, this would be a completely dynamic synth with just defining what do you need and using what do you need, do you think this would be possible?
And with this example of synth, where i could create 1, 2, ... n oscillators and 1, 2, ... reverbs for example, could be possible to use automations? because for example the normal synthesizers have just 2 oscillators and all the things in the automation are "static", so if i have a reverb that have these parameters (mix, hp, lp) i have 3 instances on automations that manage these 3 properties but in my case, if i have 2 reverbs, i should need 6 istances, and if 3, 9 instances and so on, it could be possible to have also dynamic automations?
I'm sorry if i didn't explain it well, but i have really a strange project in my mind and i would start to make it correctly because i think that would be really cool
The project you are describing is certainly do-able, however it is very complex and is going to require an extremely complicated GUI as well. You will most likely need to use the Advanced GUI API
or, more likely, design your GUI completely "from scratch" as in the last example in the tutorial.
My advice would be to *not* attempt this project until you can design much more simple devices. You won't be able to simply use the code in my synth book and then modify it. You are describing a project that I might assign to my *entire* graduate student class to be accomplished over a complete semester - very, very difficult.
As far as dynamic automation of effects, I don't think that is possible. Parameters are automate-able because you describe the parameters when the plugin is instantiated during one of the host function calls - all plugin APIs (RackAFX, VST3, AU, AAX) require you to describe the effect parameters during an initialization phase that only happens once. You can't add effect parameters after that because these initialization functions are only called once.
Be very careful that you do not attempt a project this complex without complete understanding of the target API and you will need to have very advanced C++ programming skills as well.
For sure i'll before understand all the background importance of everything about the books and synthetization programming, but it's something that affascinate me this project i've in my mind, like a challenge.
About the automations, it's not possible to "recall" or "update" this funcion and reset the parameters?
Or maybe destroy the synthesizer and recreate it, but maybe it would be hard for the memory, i don't know, it could be nice by the way
No, the initialization functions only get called once when the plugin is created. Destroying and recreating the plugin has multiple problems - of course all audio would need to stop so this could not be done with MIDI streaming, and you would need to have some kind of way to know how to recreate the plugin with the new parameters.
BTW - really neat site you have, jhox!
I don't know where to post this, but i've found this amazing Synth, it have endless possibilities, it's just amazing
It's called UVI Falcon, it's something like the idea that i have, but i've to admit they did an epic work on it, i'll buy it for sure 😀
I've started reading the software synthesizer book, and not for commenting or what, but I'm a lot confused, there's a lot of theory, and that's good thing, but personally, from a view of somebody that know 0 about audio programming, I found the book understandable for people that already know audio world and how it works, I just read a lot of words, arguments or symbols that it's hard for me to connect.
I'm not denying the work made by Will, but really i found this book hard (probably somebody with experience found it simple) but I'm also angry with myself because it's an interesting world which i would discover at all
Good news, I've started reading the brown book, I'm at page 52 and I'm understanding everything maybe reading 2 or 3 times some phrases/text, by the way I'm arrived where the book teach the ".h" interface files, and I was wondering some questions that could be useful to make a clearest idea to how variables works.
1) I can add more variables but these can't be linked to a control in GUI, so if I create an oscillator, can I manage it with a non-linked variable to change the value in the code?
2) Can be used array to store vectors of variables? For example if i would use an array of oscillator/effects?
3) What could be the consequence if I (just for know what happens) add a non-linked variable into the RACKAFX generated code?
I will try to answer your questions:
1) Yes, it's just plain C++ code. There are no restrictions. If you want more "UI-bound" variables, create them within RackAFX, so they will be included in the code generation.
2) see 1)
3) Look for the comments in the generated files. There are special places to put your custom stuff, so that it will not be overwritten when RackAFX re-generates the code after you modified the UI or other RackAFX settigns. To put it the other way: What could happen is that your variables will be overwritten.
-> but just try it out, that's the best way to learn
You can not link a main RackAFX GUI control (the 40 sliders, or 4 radio buttons or 4 switches) to a user variable. These must all connect directly to variables in your plugin, using the Setup Panels you see when you right-click on the controls. This is party of the simplicity (and beauty, I believe) of RackAFX. It saves you the time of coding this for yourself. Try to write a VST2 plugin "from scratch" and you will see what I mean.
However, if you are an advanced RackAFX user, you can create custom VSTGUI variables and then link custom-view based controls to them via the GUI Designer. There is an example here, where a custom-view COptionMenu is linked to a VSTGUI variable. It is not part of the main RackAFX UI. This requires understanding the Advanced GUI API and going through the tutorials.
You can also add user-variables for preset saving/loading; these variables are not linked to any controls, but are stored and retrieved as presets.
Most Users Ever Online: 152
Currently Browsing this Page:
Guest Posters: 1
Newest Members:Alex, oneday, Phelan Kane, audiocoder, agel, Makai, Abyz, Nonlinear, IgorVish, Arjuna
Moderators: W Pirkle: 470
Administrators: Tom: 74, JD Young: 80, Will Pirkle: 0, W Pirkle: 470