Here is a code framework for developing audio plugins and GUIs, which includes:
- A platform independent IPlug class that handles all communication with the audio host.
- A platform independent IGraphics class that handles managing the controls on the GUI.
- A set of platform independent IControl classes that handle moving and rotating images, vector graphics, mouse input, etc. Classes like "static bitmap", "switch", "fader", "rotating knob", etc. These classes can be easily extended.
- Windows and OSX graphics implementation classes, which handle window management, and use LICE (Cockos graphics lib) to draw GUIs.
- VST and AU implementation classes, which handle communication between the audio host and the plugin.
The idea is that you can derive a new plugin class from IPlug, and with a small number of readable lines of code, you can assemble the plugin and GUI without caring what the OS, plugin format, or graphics implementation is.
The framework and the code for the sample plugin can be found in the latest WDL package
. This code should compile into a Windows VST, an OSX Audio Unit, or an OSX VST with no changes.
is an example of the source code (from the package) for the constructor of the example plugin.
To compile VSTs, you will need the VST SDK
from Steinberg. You only need two files out of the SDK: aeffect.h and aeffectx.h. To compile AUs, you will need the Core Audio SDK
from Apple (this comes with XCode).
The IPlug example project in WDL links in the Cockos LICE graphics library statically, but if you are making one-off plugins you may find it easier to simply add the necessary LICE source files to your plugin project.
This is code I use, so it's designed for users who are comfortable using C++. It doesn't offer any sort of GUI assembling graphical interface, everything is done in the user's code. Although it supports all the plugin/GUI functionality I happen to use, it may not support the functionality you want, for example it doesn't support common Windows controls like dropdowns and checkboxes. However, it should be straightforward to extend the framework to add features.