synthbase.h:
- handles the audio signal-processing and implements the DSP functionality
- is straight C++ and does not contain any API-specific code, does not require any API-specific files or SDK components
- does not link to any pre-compiled libraries
- defines and maintains a set of PluginParameter objects, each of which corresponds to a GUI control or other plugin parameter that may be stored and loaded with DAW sessions and presets
- defines factory presets for AU, VST and RAFX2 plugins (AAX factory presets are done in an entirely different manner and are discussed in Chapter 5)
- exists independently from the PluginGUI and does not know, or need to know, of the PluginGUIs existence
- does not create the PluginGUI object
- does not hold a pointer to the PluginGUI object or share any resources with it
The PluginParameter:
- stores plugin parameters as atomic variables for thread-safe operation
- encapsulates each parameter specific to the plugin as a C++ object
- can store all types of input parameters; ints, floats, doubles, string-lists, and custom user types
- can implement audio meters, complete with meter ballistics (attack and release times) and various envelope detection schemes: peak, MS, RMS and in linear or log format
- implements optional automatic variable-binding to connect GUI parameter changes to plugin variables in a completely thread-safe manner across all APIs
- has an optional auxiliary storage system to maintain other information along with any of the plugin parameters allowing you to easily customize and extend the object
- implements optional parameter smoothing for glitch-free GUI controls with two types of smoothing available: linear and exponential
- automatically implements four types of control tapering: linear, log, anti-log, and volt/octave
- implements optional sample-accurate automation for VST3 plugins (VST3 is the only API that has a specification for sample-accurate automation)