SynthLab SDK
Standalone Programming

One of the simplest ways to use the SynthLab SDK is to pick and choose objects that suit your need. The synth modules were designed from the outset to be able to safely share information with other like-modules to streamline the synth and avoid unnecessary replication of variables and functions. The SynthLab example projects all use the SynthVoice and SynthEngine objects to encapsulate the basic synth functionality. In those projects, the SynthEngine creates all of the shared resources (wavetable and PCM sample databases and all common GUI parameter structures) and then shares them with the voice and module objects via their constructors, that accept pointers to these shared resources.

However, all of the modules are also designed to run in a standalone mode in which they do not share resources with other objects. You can start using the SynthLab objects today in your own projects by instantiating them in standalone mode. In this case, the objects will synthesize their own databases and parameters locally and use them. You also have access to the object parameters for GUI control manipulation.

Many objects do not require shared resources and may be used straight away, while others require a simple manipulation of the constructor to signify standalone operation.

Required Files: Minimum Set

There are several files that contain numerous base classes, interfaces, structures, and functions that most of the objects require in some way. With the exception of the PCMSample and WaveFolder objects, these files require only the standard C++ library (std::). The PCMSample and WaveFolder objects requre a few Windows or MacOS-specific files (but no libraries) for iterating through a folder hierarchy or parsing WAV file information. The minimal file-set you need to add to your project are in the table below. When you work with individual objects, you will need to find and add it's associated files as well.

SynthLab File Description
synthconstants.h constants and enumerations
synthstructures.h structures that do not deal with GUI parameters
synthlabparams.h structures that deal direclty with GUI parameters and constants that are used within them
synthbase.h .h file for the basic base classes and intefaces, including derived classes for databases and sources
synthbase.cpp implementation file for the objects defined in synthbase.h
bleptables.h these are needed for synthfunctions.h only

For intermediate and higher programmers, the objects in synthbase.h can be used directly and should only require looking at these documents and the sample code. Most of them are self-explanatory. The more advanced objects will require deeper study of the sample code and purchase of the synth book might also help.

In this module we will create a set of objects in stand-alone mode, and then we will put them together into the most minimal synth object possible that will render, modulate and filter. We will start with the SynthClock - while it is not directly needed for the other modules, it is very simple and is the timebase for all the oscillators and hard-syncrhonizers in SynthLab. After looking at that, move on to the rest of the modules and create them one by one, adding them to the plugin framework project of your choice. We will need to send MIDI events to these objects, and you can test them with fake events as well.

Standalone Examples