# What are the preferred methods to go about programming a VST plugin?



## Virtual Virgin (Oct 4, 2022)

From some basic research, it seems that many plugins are coded with C++ using an IDE?
I am seeing JUCE Projucer as a popular framework.
Are there others to consider?
I would like to make some simple VST3 MIDI plugins, where should I start?
Should I do a course on C++ first or can I start with learning an IDE?


----------



## xepocal (Oct 5, 2022)

C++ is a safe bet.

Which frameworks are available to you depends on your choice of language and plugin format (VST, CLAP, AAX, AU). JUCE and iPlug2 are the most popular frameworks. You could also just use Steinberg's VST SDK if that's all you need.

You don't need to understand advanced programming concepts, you do need to understand DSP math if you want to work with sound (as opposed to MIDI notes).

If you're on Reaper, I'd suggest prototyping in JSFX and rewriting in C++ later.


----------



## doctoremmet (Oct 5, 2022)

There’s also HISE


----------



## AllanH (Oct 6, 2022)

I would say that it depends a bit on your skills. If you can program in a "real" programming language such as C/C++ or Java, I think JUCE is the best by a large amount. JUCE can be a bit overwhelming at first, but given the flexibility and feature set, this is to be expected.

Many also use a combination of C/C++, Steinbergs VST SDK, and various GUI toolkits such as Qt and wxWidgets.


----------



## Virtual Virgin (Oct 8, 2022)

xepocal said:


> C++ is a safe bet.
> 
> Which frameworks are available to you depends on your choice of language and plugin format (VST, CLAP, AAX, AU). JUCE and iPlug2 are the most popular frameworks. You could also just use Steinberg's VST SDK if that's all you need.
> 
> ...


The VST3 format is my goal. I will be testing in Nuendo 12. MIDI plugins are where I want to concentrate. Are there any significant limitations to using JUCE? 

About learning C++ (I have no programming experience), where should I start as it pertains to JUCE and plugin making? I would like to learn the fundamentals involved without getting lost in the weeds of features I would need to use.


----------



## mattnedgus (Oct 8, 2022)

Virtual Virgin said:


> The VST3 format is my goal. I will be testing in Nuendo 12. MIDI plugins are where I want to concentrate. Are there any significant limitations to using JUCE?
> 
> About learning C++ (I have no programming experience), where should I start as it pertains to JUCE and plugin making? I would like to learn the fundamentals involved without getting lost in the weeds of features I would need to use.


I tried starting with JUCE and felt a bit overwhelmed despite some basic programming experience in the past - I bought Will Pirkles books in the hope they'd shed some light on it all but it was all a bit too 'in at the deep end'.

For C++ there are a few other options I found - you could get a Bela board and go through their courses on YouTube: Bela Course

There's this general C++ course on Udemy: Udemy C++ Course

And then there's The Audio Programmers Courses on YouTube aimed specifically towards JUCE <-- this one is for JUCE 6 but I've not used it yet and can't say how it will fare if you use JUCE 7.

I started both of the Bela and Udemy courses but then ended up finding something more suited to what I want to do (more DSP-based) in a Python course.

Hope those links help!


EDIT: Here's one more I just remembered saving but never starting: it's a free 8hr YouTube video by Matkat Music where he takes you through building a 3-band compressor plugin in JUCE .


----------



## AllanH (Oct 8, 2022)

C++ is a large and complex language. JUCE does not use all of it and has replaced key parts to make the features more applicable to audio and real-time programming (e.g. juce::String vs. std::string), features for locking, etc. However, JUCE is also very modern and uses many of the features in C++ 14 and 17. 

I would suggest that you start with resources focused on C++ in the context of JUCE and then later back-fill with "real" C++. You can make a career out of being a good C++ programmer, so it's big rabbit hole to jump into. 

Finally, C++ has tremendeous expressive power, so there is no doubt that any time you invest is well spent.


----------



## d.healey (Oct 8, 2022)

+1 for HISE, it's built with JUCE so you can incorporate extra JUCE and C++ stuff if there is something you want that isn't already there. See my signature for tutorial videos.


----------



## Virtual Virgin (Oct 11, 2022)

d.healey said:


> +1 for HISE, it's built with JUCE so you can incorporate extra JUCE and C++ stuff if there is something you want that isn't already there. See my signature for tutorial videos.


Thanks 
I am watching your "Introduction to HISE 2020" video at the moment.


----------



## Virtual Virgin (Oct 11, 2022)

AllanH said:


> C++ is a large and complex language. JUCE does not use all of it and has replaced key parts to make the features more applicable to audio and real-time programming (e.g. juce::String vs. std::string), features for locking, etc. However, JUCE is also very modern and uses many of the features in C++ 14 and 17.
> 
> I would suggest that you start with resources focused on C++ in the context of JUCE and then later back-fill with "real" C++. You can make a career out of being a good C++ programmer, so it's big rabbit hole to jump into.
> 
> Finally, C++ has tremendeous expressive power, so there is no doubt that any time you invest is well spent.


If you have suggestions on search terms I should use to investigate C++ in relation to JUCE that would be great. When learning a new thing I often start with a list of words/terms to define to help in just getting a grasp onto something.


----------



## AllanH (Oct 12, 2022)

Virtual Virgin said:


> If you have suggestions on search terms I should use to investigate C++ in relation to JUCE that would be great. When learning a new thing I often start with a list of words/terms to define to help in just getting a grasp onto something.


I would suggest you start with one of the many tutorials. JUCE provides source code and good explanations. https://juce.com/learn/tutorials

As you need to get better understanding of C++, a place to start would be:





C++ Tutorial


C++ Tutorial, C++ is a middle-level programming language developed by Bjarne Stroustrup starting in 1979 at Bell Labs. C++ runs on a variety of platforms, such as Windows, Ma




www.tutorialspoint.com





In other words - start with JUCE source code and as you need to understand some of the finer details, look them up.


----------



## Jaap (Oct 12, 2022)

If you like having a real book on your table to study, I can recommend Will Pirkle's book Designing Audio Effect Plugins in C++


Getting some core C++ is essential though and I think AllanH his suggestions are nice to get you started. Likewise with the Juce tutorials.
The Will Pirkle book can serve as a nice reverence and to pick up some ideas and enhance some core dsp knowlege in my opinion.


----------



## Pier (Oct 12, 2022)

If you're serious about this and have programming experience, I'd go with JUCE and C++. Many plugins (probably the majority) are built this way. I think the first versions of Ableton Live were built with JUCE too.

The original source code of Vital is available on Github BTW and it's built with JUCE.

If you don't have any programming experience, C++ might be a bit too hard to digest though. And then you will have to worry about GUI stuff, DSP, etc. It's not for the faint of hearth.

It's not very clear, but Cycling 74 might be working on a VST3 export for Max via JUCE or something. They posted this tweet yesterday:


----------

