SynthLab SDK
SynthLab Developer's Guide



SynthLab is a collection of C++ objects that encapsulate various aspects of software synthesizer design. Everything is a C++ object or structure from the tiny SynthClock timebase, to the ultra-configurable, program-on-the-fly ModMatrix, to the 8-segment multi-lane WaveSequencer. The underlying mathematics and electrical engineering topics are discussed in Designing Software Synthesizers in C++ 2nd Ed. by Will Pirkle. These objects are pure C++ and platform independent and not linked to any plugin framework or API. All example synths are built from a single set of C++ source files. Below are two GUIs for the wave sequencing and DX example synths.


Standalone Mode

Each object can be used in a standalone manner in your C++ projects; objects that normally share databases and parameters with others will automatically synthesize their own local structures and use them. This developer's guide will show you how to use the objects in standalone mode and create a minimal synth C++ object using each of the types of modules: LFO, EG, oscillator, filter, DCA and modulation matrix.

SynthLab-DM Modules

Get started quickly building synth modules and testing them right-away in SynthLab-DM; study and learn the underlying theory from the synth book. DM modules don't require any third party frameworks or APIs as they are pure C++ so you can get started today designing, coding, and testing your synth module ideas. Then you can spin-off the C++ objects for other platforms such as VCVRack. SynthLab modules allow you to "go deep" to study and experiment with very specific synth components without being bogged down with complete synth code – great for graduate students who are focusing only on very distinct synth components or theory or book readers who are digesting the different book sections in any order they choose.


SynthVoice and SynthEngine

SynthLab includes examples of voice and engine objects that handle many of the tedious synth chores like decoding MIDI and taking care of the synth note lifecycles: the event that occur from the note-on event to the expiration of the amp EG that signifies that the note event is complete. You can also use the SynthVoice and SynthEngine objects as a container for your own synth components and leverage off of the MIDI message decoding and parameter sharing, and ignore the other modules and cores. SynthLab was desiged for maximum flexibility.

Using this Programming Guide

The programming guide is setup like a tutorial. The underlying theory and mathematics, along with rationale for programming certain components in a certain way (such as the audio block processing) is explained in detail in the synth book so it isnt' repeated here. But, you may still learn the SDK without the book by following the tutorial. Start at the top of the sidebar on the left and work your way down. The coding portion starts with Standalone Programming where you learn to use the C++ objects in stand-alone mode. Then, you may continue on and learn how to code the modules and their cores. SynthLab-DM makes it easy to get started because you will be coding tiny portions of a larger product. The SynthLab-DM objects are identical to the so you won't waste any time!

SynthLab Example Projects

There are six complete synths that document and demonstrate the theory from the book and how to use these objects. If you start with the ModuleCores, you can add those components and compile them into the other synth projects. The synths include:
SynthLab-WT: wavetable synth that includes both static and morphing wavetables
SynthLab-VA: virtual analog synth with multi-output oscillators inspired by the Oberheim SEM(R)
SynthLab-PCM: sample based synth including traditional multi-samples, wave-sliced samples, and a special Mellotron(R) core
SynthLab-KS: physical modeling synth featuring the Karplus-Strong algorithm for super-realistic guitar and bass patches, or for generating bizarre plucked/struck/bowed sounds
SynthLab-DX: FM synth using the Yamaha DX-100 algorithms
SynthLab-WS: wave-sequencing synth with an 8-segment multi-lane wave sequencer inspired by the Korg Wavestate(R)

Developer's Guide Contents