SynthLab SDK
SynthLab-WT

The SynthLab-WT example demonstrates wavetable synthesis. Originally this was split into two synths, one for static wavetable and one for dynamic (morphing) wavetable. However, the SynthLab wavetable database is designed in such a way that I could easily combine them into a single synth example. The morphing wavetable oscillators use the Aux EG as the morphing source that is hardwired to the morphing modulation input point. Figure 1 shows the Voice Edit and Mod Matrix GUI interfaces for my example version. The Voice Edit panel includes the oscillator block, articulation and filtering panels along with a global control panel for final output volume, synth tuning, and other engine-level controls.

The modulation matrix is formatted as a "pin programmable" control, reminiscent of the EMS VCS3. Note that the ModulationMatrix C++ object is designed for a variety of different interfaces with intensity controls and internal switches that will work with practially any mod matrix scheme. For all SynthLab examples, the filterEG -> filter fc routings are pre-enabled and the source and destination intensities are set to 0.75 so that you will hear the effects in the first patch. This panel also includes the ping-pong delay controls.


SynthLab_WT_00.png


Figure 1. SynthLab-WT Interface

High Resolution (HR) Wavetables

All of the pitched wavetables are generated using RackAFX-TableMaker that automatically calculates the number of harmonics a given note (pitch) is allowed to stay within the Nyquist criteria and then synthesizes the tables accordingly, as explained in the synth book. This means that each note you play will have the maximum number of allowed harmonics and pitch modulations will always result in choosing the proper wavetable that does not alias. Use any table and a pitch bender along with a spectrum analyzer to watch the upper harmonics disappear and reappear as you raise and lower the pitch. There are no "dead zones" or tables that require interpolation outside of one half-step.

The SynthLab-WT synth includes all four cores populated with wavetable oscillators. Three of these are static wavetables that produce a single waveform. You may freely mix the static and moprhing wavetables or make patches with all fixed or all morphing tables. Each of the four oscillators has its own waveform patch, so you may create very dynamic patches if you set all four cores to morphing and then choose different banks for each. The linear EG (considered useless in most synths) actually works quite well as the morphing EG. The Aux EG is also setup with much longer attack, decay and release times (up to 10 seconds). When using the morphing wavetables, audition only one oscillator at a time (use the Volume sliders) and set the EG for very long time segments so that you may hear the morphing properly and in isolation of the others. When blending four of them together the morph may "get lost in the mix" so make sure you establish those parameters independently for each oscillator.

Static Wavetables

There are four static wavetable cores provided and three of them are used in SynthLab-WT.

  • ClassicWTCore: 16 classic wavetables including some nice FM patches, all pre-tabulated and compiled into the synth
  • FourierWTCore: 2 Fourier synthesized wavtables demonstrating dynamic table creation; use this as a starting point for your own
  • SFXWTCore: one-shot, pitchless sound effects taken from WAV files and converted to wavetables
  • DrumWTCore: bonus core that produces one-shot, pitchless electronic drum sounds taken from PCM samples and converted to wavetables with RackAFX-TableMaker; this is a bonus core that you may add to the others

Figure 2 shows the selection of a static wavetable core, followed by a selection of the wavetable itself. For the Classic WT oscillator, all 16 waveform slots are used.


SynthLab_WT_1.png


Figure 2: static wavetable core selection reveals sets of fixed wavetables

Morphing Wavetables

There is one morphing wavetable core MorphWTCore provided along with a set of wavetable banks which describe a set of wavetables grouped together. Note that the IWavetableDatabase interface only stores sets of IWavetableSources, and the database does not know anything about grouping these tables together as banks, which is done at the oscillator level instead. This is what allows me to mix both static and morphing wavetables into the same product!

Figure 3 shows the selection of the morphing wavetable core, followed by a selection of the wavetable bank. The banks were made from sets of wavetables generated with WaveEdit and then turned into high-resolution wavetables with RackAFX-TableMaker. After selecting the bank, make sure to adjust the morphing intensity control "Morph Mod" to a value greater than zero in order to hear the morphing. You may also adjust the morphing start point within the bank as a normalized value; 0.0 is the first table in the bank while 1.0 is the last.


SynthLab_WT_2.png


Figure 3: morphing wavetable core selection reveals sets of wavetable banks which are really just groups of static tables

Modulation Matrix

Figure 4 shows the modulatiom matrix panel, which is fundamentally identical across all SynthLab synths (there are minor differences for the DX and WS varieties). The destinations are columns and sources are rows. Each source and destination features a single intensity control (see the synth book for alternate modulation matrix schemes). Routings are enabled by pressing the buttons that connect rows and columns. For the WT synth, the unique modulation varies depending on the kind of oscillator core that is chosen. The unique modulation destinations are listed in Table 1. In Figure 4, you can see that LFO1 has been chosen as a modulation source for the "unique modulation" destination and source/destination intensities have been adjusted for operation.


SynthLab_WT_3.png


Figure 4: SynthLab-WT modulation matrix panel with LFO1 selected for the oscillator unique modulation

Wavetable Core Unique Modulation Destination
ClassicWTCore self-hard sync
MorphWTCore morph modulation
FourierWTCore self hard-sync
SFXWTCore none
DrumWTCore none

Table 1: unique modulation destinations for wavetable cores


synthlab_4.png