I asked on Reddit a while back on how I can get started, and they pointed me here. They also told me to use the JUCE framework, which pretty much all of you I would think are familiar with/have heard of.
But there's a reason I would rather use an alternative if I had the option, and here's why. JUCE isn't fully free, libre, and open source, and you have to have a watermark on all of your plugins unless you pay $40 every month or $800 once. And even though I have the money to pay for this, I'd rather not support a for-profit company (PACE) or for-profit program in having this much control over the audio plugin industry (an example with a different industry would be Adobe CC and the graphic design industry). You can correct me if JUCE/the JUCE project is actually non-profit.
So I looked at alternatives. The most widely used alternative to JUCE that I can think of is iPlug. And I specifically looked into iPlug 2. And as far as I can tell, this is a fully free, libre, and open source framework. Unfortunately, it doesn't seem to have as much support for different plugin formats, etc. as JUCE, including with LV2, which is one of the formats I would want to target for every plugin.
And then I stumbled upon FAUST. Unlike JUCE and iPlug 2, FAUST is not really a framework but an entire programming language of its own. After taking a look at it, I feel like this could be a viable option for me to use as the main way of doing plugin development. Before you start yelling at me saying that I should just use what everyone else is using and that I should stop wasting my time looking for alternatives to C++ with JUCE, let me finish explaining why, as well as a couple unknowns that I'm aware of.
With FAUST, there are scripts that you can use to compile your projects into VST2, AU, and LV2. For VST3 and AAX, I can translate my FAUST projects into an iPlug or iPlug 2 project, and then turn them into those plugin formats from there.
But of course, there are also some things that I'm not sure about that could be deal-breakers for using FAUST as my main way to develop plugins. The first thing is that the way that I add the GUI for my plugin to the DSP code to compile into one program doesn't always seem clear. If I wanted to use the standard script to turn FAUST code into a 64-bit VST2 for Windows, would I be able to add the code and/or assets for a GUI that I made with GTK to the compiler along with the respective DSP code? Although, it seems like maybe the developer of Foo YC20 got away with doing just this without any trace of JUCE, so I don't know.
The second issue has to do with how I'm allowed to license anything that I make with FAUST. FAUST's compiler is under a GPL license, meaning that any program that uses code that's already under that license must also be open source and under GPL or a GPL-compatible license. So I'm worried that what the compiler does is that there may be a stage where it turns the FAUST code into C++ code, and since the compiler is under GPL, the C++ code that it generates for my plugin must also be GPL, meaning after it compiles the plugin down into binaries, those binaries will have come from C++ code that is under GPL, forcing me to release my plugins under only a GPL or GPL-compatible license. I don't like this because even though I'd want many, if not most or all of my plugins to be free, libre, and open source, I may still want to make some plugins that aren't. And in general, I want to feel like I actually own my own programs/plugins and can do what I want with them.
If FAUST or iPlug 2 isn't a great option for me, here's what I'd want out of a solution to develop my own plugins:
- 100% free of charge, libre, and open source
- able to compile to 64-bit VST3, AU, and LV2, and for Mac, Windows, and Linux without too much difficulty (VST2 is fine if it isn't going to be obsolete for a while, and I don't care as much about AAX because Pro Tools is evil and people should be using something like Reaper or Bitwig instead)
- not too much of a hassle to use (i.e. not very buggy and decent user experience)
- has a decent community of people I can turn to to ask for help if I need it
Edit: Took out a sentence I originally wrote due to some drama having to do with iPlug2