8 #define enumToInt(ENUM) static_cast<int>(ENUM) 10 inline double semitonesBetweenFreqs(
double startFrequency,
double endFrequency)
12 return log2(endFrequency / startFrequency)*12.0;
22 const double OSC_FMIN = MIDI_NOTE_0_FREQ;
23 const double OSC_FMAX = 20480.0;
26 const double WT_OSC_MIN = MIDI_NOTE_0_FREQ;
27 const double WT_OSC_MAX = 20480.0;
28 const uint32_t WT_OSC_INPUTS = 1;
29 const uint32_t WT_OSC_OUTPUTS = 2;
31 enum { WTO_SHAPE, WTO_HSYNC, WTO_START_PHASE, WTO_PITCH_MOD };
50 struct WTOscParameters
90 struct WSOscParameters
95 double detuneSemis[8] = { 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 };
96 double detuneCents[8] = { 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 };
97 double oscillatorShape[8] = { 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 };
98 double hardSyncRatio[8] = { 1.00,1.00,1.00,1.00,1.00,1.00,1.00,1.00 };
99 double morphIntensity[8] = { 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00 };
100 double panValue[8] = { 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 };
102 bool doubleOscillator =
true;
113 const double VA_OSC_MAX = 20480.0;
114 const uint32_t VA_OSC_INPUTS = 0;
115 const uint32_t VA_OSC_OUTPUTS = 2;
116 const double VA_MIN_PW = 0.5;
117 const double VA_MAX_PW = 0.95;
118 const double PW_MOD_RANGE = (VA_MAX_PW - VA_MIN_PW);
119 const double HALF_PW_MOD_RANGE = PW_MOD_RANGE / 2.0;
122 enum class VAWaveform { kSawAndSquare, kSawtooth, kSquare };
123 enum { VAO_WAVE_MIX, VAO_PULSE_WIDTH, VAO_C, VAO_PITCH_MOD };
159 struct VAOscParameters
204 ModSource& operator=(
const ModSource& params)
238 struct ModDestination
240 ModDestination() { clear(); }
241 ModDestination& operator=(
const ModDestination& params)
301 struct ModMatrixParameters
303 ModMatrixParameters() {}
304 ModMatrixParameters& operator=(
const ModMatrixParameters& params)
316 std::shared_ptr<std::array<ModSource, kNumberModSources>>
modSourceRows = std::make_shared<std::array<ModSource, kNumberModSources>>();
319 std::shared_ptr<std::array<ModDestination, kNumberModDestinations>>
modDestinationColumns = std::make_shared<std::array<ModDestination, kNumberModDestinations>>();
450 const uint32_t NOISE_OSC_OUTPUTS = 2;
453 enum class NoiseWaveform { kWhiteNoise, kPinkNoise, kGaussWhiteNoise };
469 struct NoiseOscillatorParameters
471 NoiseOscillatorParameters(){}
472 NoiseOscillatorParameters& operator=(
const NoiseOscillatorParameters& params)
484 NoiseWaveform
waveform = NoiseWaveform::kWhiteNoise;
495 const double freqModHigh = 20480.0;
496 const double freqModSemitoneRange = semitonesBetweenFreqs(
freqModLow, freqModHigh);
497 const uint32_t FILTER_AUDIO_INPUTS = 2;
498 const uint32_t FILTER_AUDIO_OUTPUTS = 2;
499 enum class FilterModel { kFirstOrder, kSVF, kKorg35, kMoog, kDiode };
500 enum { FLT_KEYTRACK, FLT_DRIVE, FLT_EG_INT, FLT_BP_INT };
501 enum { FLT1, FLT2, FLT3, FLT4 };
502 const int MOOG_SUBFILTERS = 4;
503 const int DIODE_SUBFILTERS = 4;
504 const int KORG_SUBFILTERS = 3;
505 enum class VAFilterAlgorithm {
506 kBypassFilter, kLPF1, kHPF1, kAPF1, kSVF_LP, kSVF_HP, kSVF_BP, kSVF_BS, kKorg35_LP, kKorg35_HP, kMoog_LP1, kMoog_LP2, kMoog_LP3, kMoog_LP4, kDiode_LP4
508 enum class BQFilterAlgorithm {
509 kBypassFilter, k1PLPF, k1PHPF, kLPF2, kHPF2
528 struct FilterParameters
555 enum { kEGNormalOutput, kEGBiasedOutput, kNumEGOutputs };
556 enum class EGState { kOff, kDelay, kAttack, kHold, kDecay, kSlope, kSustain, kRelease, kShutdown };
602 uint32_t moduleIndex = 0;
619 struct ExciterParameters
621 ExciterParameters& operator=(
const ExciterParameters& data)
643 const double FM_OSC_MAX = 20480.0;
644 const uint32_t FM_OSC_INPUTS = 0;
645 const uint32_t FM_OSC_OUTPUTS = 2;
646 enum { FMO_A, FMO_B, FMO_FEEDBACK, FMO_PITCH_MOD };
664 struct FMOperatorParameters
666 FMOperatorParameters() {}
735 const double LFO_FCMOD_MAX = 200.0;
737 const double LFO_HALF_RANGE = LFO_RANGE / 2.0;
738 const double MAX_LFO_DELAY_MSEC = 5000.0;
739 const double MAX_LFO_FADEIN_MSEC = 5000.0;
741 enum class LFOWaveform {
742 kTriangle, kSin, kRampUp, kRampDown,
743 kExpRampUp, kExpRampDn, kExpTriangle, kSquare,
747 const uint32_t NUM_FMLFO_OPS = 3;
748 enum class FMLFOWaveform { kFM2, kFM3A, kFM3B };
749 enum class LFOMode { kSync, kOneShot, kFreeRun };
758 enum { LFO_SHAPE, LFO_DELAY, LFO_FADE_IN, LFO_BPMSYNC };
792 const double PCM_OSC_MAX = 20480.0;
793 const uint32_t SMPL_OSC_INPUTS = 0;
794 const uint32_t SMPL_OSC_OUTPUTS = 2;
795 enum { PCMO_A, PCMO_B, PCMO_C, PCMO_PITCH_MOD };
812 struct PCMOscParameters
842 const double KS_OSC_MAX = 20480.0;
843 const uint32_t KS_OSC_INPUTS = 0;
844 const uint32_t KS_OSC_OUTPUTS = 2;
845 const double MAX_KSO_ATTACK_MSEC = 500.0;
846 const double MAX_KSO_HOLD_MSEC = 2000.0;
847 const double MAX_KSO_RELEASE_MSEC = 5000.0;
848 enum { KSO_OUTPUT, KSO_BODY, KSO_BITE, KSO_PLUCK_POS };
868 struct KSOscParameters
894 uint32_t moduleIndex = 0;
917 struct AudioDelayParameters
919 AudioDelayParameters() {}
bool enableKeyTrack
key track flag
Definition: synthlabparams.h:713
double dryLevel_dB
dry output level in dB
Definition: synthlabparams.h:999
bool forceLoop
force the wavetable to loop at extremes
Definition: synthlabparams.h:133
const double LFO_FCMOD_MIN
Definition: synthlabparams.h:906
#define enumToInt(ENUM)
macro helper to cast a typed enum to an int
Definition: synthfunctions.h:245
double coarseDetune
+/-12 semitones
Definition: synthlabparams.h:120
double phaseModIndex
[1, 4]
Definition: synthlabparams.h:292
double fc
parameter fc
Definition: synthlabparams.h:705
double modKnobValue[4]
mod knobs
Definition: synthlabparams.h:295
const uint32_t NOISE_OSC_INPUTS
Definition: synthlabparams.h:621
double rightDelay_mSec
right delay time
Definition: synthlabparams.h:1002
AnalogEGContour
Definition: synthlabparams.h:729
const double KS_OSC_MIN
Definition: synthlabparams.h:304
double waveformMix
[1, +???]
Definition: synthlabparams.h:242
double panValue
[-1, +1] –> [left -> right]
Definition: synthlabparams.h:894
double outputAmplitude_dB
dB
Definition: synthlabparams.h:347
double oscSpecificDetune
+/-12 semitones
Definition: synthlabparams.h:123
double filterDrive
parameter drive (distortion)
Definition: synthlabparams.h:708
bool noteNumberToDecayScaling
one of two EG modulations
Definition: synthlabparams.h:757
EGParameters dxEGParameters
parameters for embdedded EG
Definition: synthlabparams.h:858
double outputAmplitude_dB
dB
Definition: synthlabparams.h:850
double pulseWidth_Pct
sqr wave only
Definition: synthlabparams.h:235
double fineDetune
1 = up one half-step, -1 = down one half-step
Definition: synthlabparams.h:345
double sustainLevel
from GUI control
Definition: synthlabparams.h:769
double modKnobValue[4]
mod knobs
Definition: synthlabparams.h:954
double fineDetune
1 = up one half-step, -1 = down one half-step
Definition: synthlabparams.h:230
uint32_t moduleIndex
module identifier
Definition: synthlabparams.h:855
double feedback_Pct
feedback as a % value
Definition: synthlabparams.h:1000
double panValue
[-1, +1]
Definition: synthlabparams.h:294
double modKnobValue[4]
mod knobs
Definition: synthlabparams.h:244
double attackTime_mSec
exciter EG
Definition: synthlabparams.h:338
bool enableChannelIntensity
to enable this mode, in addition to or instead of the source and destination intensity controls ...
Definition: synthlabparams.h:450
uint32_t channelEnable[MAX_MODULATION_CHANNELS]
channel enable on/off switches
Definition: synthlabparams.h:443
double phaseModIndex
[0, 4]
Definition: synthlabparams.h:853
double unisonDetuneCents
fine tune for unison
Definition: synthlabparams.h:122
double modKnobValue[4]
mod knobs
Definition: synthlabparams.h:717
double hardSyncRatio
[1, +4]
Definition: synthlabparams.h:350
double frequency_Hz
parameter fc
Definition: synthlabparams.h:951
double panValue
[-1, +1]
Definition: synthlabparams.h:353
double panValue
[-1, +1]
Definition: synthlabparams.h:129
double hardSyncRatio
[1, +???]
Definition: synthlabparams.h:128
void setMM_DestIntensity(uint32_t destination, double intensity)
set the destination (column) intensity control
Definition: synthlabparams.h:394
double outputAmplitude_dB
output in dB
Definition: synthlabparams.h:657
double intensity
one final intensity knob
Definition: synthlabparams.h:452
double decayLevel
from GUI control
Definition: synthlabparams.h:768
double outputAmplitude_dB
dB
Definition: synthlabparams.h:236
double freqModIndex
[1, 4]
Definition: synthlabparams.h:293
std::shared_ptr< std::array< ModSource, kNumberModSources > > modSourceRows
Definition: synthlabparams.h:488
double ampModIntensity
[0, +1]
Definition: synthlabparams.h:896
uint32_t algorithmIndex
GUI index for KS algorithm.
Definition: synthlabparams.h:336
double modKnobValue[4]
mod knobs
Definition: synthlabparams.h:854
double curvature
from GUI control
Definition: synthlabparams.h:770
int32_t filterIndex
filter index in GUI control
Definition: synthlabparams.h:703
Definition: synthengine.cpp:16
double fineDetune
+/-50 cents
Definition: synthlabparams.h:121
uint32_t waveIndex
the waveform string is usually the patch or WAV folder name
Definition: synthlabparams.h:279
double octaveDetune
1 = up one octave, -1 = down one octave
Definition: synthlabparams.h:282
double holdTime_mSec
exciter EG
Definition: synthlabparams.h:339
double keyTrackSemis
key tracking ratio in semitones
Definition: synthlabparams.h:714
double slopeTime_mSec
from GUI control
Definition: synthlabparams.h:762
double outputAmplitude_dB
dB
Definition: synthlabparams.h:126
double alpha
alpha is (wcT/2)
Definition: synthlabparams.h:202
const uint32_t DELAY_AUDIO_OUTPUTS
Definition: synthlabparams.h:965
double hardSyncRatio
[1, 4]
Definition: synthlabparams.h:291
double filterOutputGain_dB
parameter output gain in dB
Definition: synthlabparams.h:707
void setMM_DestHardwireIntensity(uint32_t source, uint32_t destination, double intensity)
set the hardwired intensity control that connects a source/destination pair in a routing and bypasses...
Definition: synthlabparams.h:382
void setMM_HardwiredRouting(uint32_t source, uint32_t destination, double intensity=1.0)
Helper function to set a source/destination/intensity trio that defines a hard-wired routing...
Definition: synthlabparams.h:435
uint32_t moduleIndex
module identifier
Definition: synthlabparams.h:718
double fineDetune
+/-50 cents
Definition: synthlabparams.h:846
double endLevel
from GUI control
Definition: synthlabparams.h:767
double octaveDetune
1 = up one octave, -1 = down one octave
Definition: synthlabparams.h:228
double panValue
[-1, +1]
Definition: synthlabparams.h:240
double unisonDetune
1 = up one cent, -1 = down one cent
Definition: synthlabparams.h:287
double modKnobValue[4]
mod knobs
Definition: synthlabparams.h:131
double modKnobValue[4]
mod knob values
Definition: synthlabparams.h:356
const double OSC_FMIN
Definition: synthlabparams.h:83
double decayTime_mSec
from GUI control
Definition: synthlabparams.h:761
const double VA_OSC_MIN
Definition: synthlabparams.h:173
bool channelHardwire[MAX_MODULATION_CHANNELS]
channel hardwire on/off switches
Definition: synthlabparams.h:446
double leftDelay_mSec
left delay time
Definition: synthlabparams.h:1001
double oscillatorShape
[-1, +1]
Definition: synthlabparams.h:851
EGState
Definition: synthlabparams.h:728
double phaseModIndex
[1, 4]
Definition: synthlabparams.h:241
void setMM_ChannelIntensity(uint32_t source, uint32_t destination, double intensity)
set the channel intensity control that connects a source/destination pair in a routing ...
Definition: synthlabparams.h:368
bool analogFGN
use analog FGN filters; adds to CPU load
Definition: synthlabparams.h:710
const double FM_OSC_MIN
Definition: synthlabparams.h:814
double modKnobValue[4]
mod knobs
Definition: synthlabparams.h:773
NoiseWaveform waveform
noise wavform
Definition: synthlabparams.h:656
double bassGainComp
0.0 = no bass compensation, 1.0 = restore all bass
Definition: synthlabparams.h:709
double intensity
one final intensity knob
Definition: synthlabparams.h:392
double beta
beta value, not used
Definition: synthlabparams.h:203
double releaseTime_mSec
from GUI control
Definition: synthlabparams.h:763
uint32_t waveIndex
DX algorithm.
Definition: synthlabparams.h:841
double unisonDetune
1 = up one cent, -1 = down one cent
Definition: synthlabparams.h:346
double oscillatorShape
[-1, +1]
Definition: synthlabparams.h:238
double oscillatorShape
[-1, +1]
Definition: synthlabparams.h:290
double coarseDetune
1 = up one octave, -1 = down one octave
Definition: synthlabparams.h:344
bool priorityModulation
for high-priority modulator; not used in SynthLab
Definition: synthlabparams.h:454
double phaseModIndex
/ [1, +4]
Definition: synthlabparams.h:351
void setMM_HardwireEnable(uint32_t source, uint32_t destination, bool enable)
set/clear a routing as hardwired
Definition: synthlabparams.h:354
double coarseDetune
+/-12 semitones
Definition: synthlabparams.h:845
double hardSyncRatio
[1, +4]
Definition: synthlabparams.h:239
double ampEGIntensity
[-1, +1]
Definition: synthlabparams.h:895
double octaveDetune
+/- 4 octaves
Definition: synthlabparams.h:844
double panModIntensity
[0, +1] for external GUI control only, defaults to 1 to make mm work
Definition: synthlabparams.h:897
void setMM_ChannelEnable(uint32_t source, uint32_t destination, bool enable)
enable/disable a routing channel
Definition: synthlabparams.h:341
uint32_t quantize
for stepped LFOs
Definition: synthlabparams.h:953
double coarseDetune
1 = up one octave, -1 = down one octave
Definition: synthlabparams.h:229
const double MAX_EG_VALUE
Definition: synthlabparams.h:731
double gainValue_dB
for per-voice gain control (not same as master MIDI volume)
Definition: synthlabparams.h:893
int32_t modeIndex
one shot, free run, sync
Definition: synthlabparams.h:950
double coarseDetune
1 = up one octave, -1 = down one octave
Definition: synthlabparams.h:283
DXEGContour
Definition: synthlabparams.h:730
const uint32_t DELAY_AUDIO_INPUTS
Definition: synthlabparams.h:964
std::shared_ptr< std::array< ModDestination, kNumberModDestinations > > modDestinationColumns
Definition: synthlabparams.h:491
double outputAmplitude_dB
in dB
Definition: synthlabparams.h:288
void setMM_DestDefaultValue(uint32_t destination, double defaultValue)
set a defalt value to prevent accidental no-note events
Definition: synthlabparams.h:406
double wetLevel_dB
wet output level in dB
Definition: synthlabparams.h:998
uint32_t moduleIndex
module identifier
Definition: synthlabparams.h:245
double unisonDetune
1 = up one cent, -1 = down one cent
Definition: synthlabparams.h:233
bool resetToZero
reset to zero (see book)
Definition: synthlabparams.h:754
double ratio
FM ratio +/- 4 octaves.
Definition: synthlabparams.h:859
uint32_t waveIndex
index of waveform, usually linked to GUI control
Definition: synthlabparams.h:116
uint32_t waveIndex
waveform index in the GUI
Definition: synthlabparams.h:225
const uint32_t DCA_AUDIO_INPUTS
Definition: synthlabparams.h:867
uint32_t pluckPosition
[+1, +12]
Definition: synthlabparams.h:355
double attackTime_mSec
from GUI control
Definition: synthlabparams.h:760
double panValue
[-1, +1]
Definition: synthlabparams.h:852
double octaveDetune
+/- 4 octaves
Definition: synthlabparams.h:119
const uint32_t DCA_AUDIO_OUTPUTS
Definition: synthlabparams.h:868
int32_t waveformIndex
selection index from GUI
Definition: synthlabparams.h:949
double unisonDetune
fine tune for unison
Definition: synthlabparams.h:847
double holdTime_mSec
from a GUI control
Definition: synthlabparams.h:805
const double PCM_OSC_MIN
Definition: synthlabparams.h:254
double decay
[-1, +1]
Definition: synthlabparams.h:354
Custom parameter structure for the AudioDelay object.
Definition: synthlabparams.h:979
double hardwireIntensity[MAX_MODULATION_CHANNELS]
hardwire intensity controls
Definition: synthlabparams.h:447
double defautValue
to allow max down, etc...
Definition: synthlabparams.h:453
double oscillatorShape
[-1, +1]
Definition: synthlabparams.h:127
AudioDelayParameters & operator=(const AudioDelayParameters ¶ms)
Definition: synthlabparams.h:921
double octaveDetune
1 = up one octave, -1 = down one octave
Definition: synthlabparams.h:343
double releaseTime_mSec
from a GUI control
Definition: synthlabparams.h:806
double channelIntensity[MAX_MODULATION_CHANNELS]
channel intensity controls
Definition: synthlabparams.h:444
double outputAmplitude
parameter output gain in dB
Definition: synthlabparams.h:952
void setMM_DestHighPriority(uint32_t destination, bool _priorityModulation)
mark a destination has high-priority
Definition: synthlabparams.h:421
double startLevel
from GUI control
Definition: synthlabparams.h:766
int32_t egContourIndex
iundex from GUI control
Definition: synthlabparams.h:751
bool legatoMode
legato
Definition: synthlabparams.h:755
bool velocityToAttackScaling
one of two EG modulations
Definition: synthlabparams.h:756
double attackTime_mSec
from a GUI control
Definition: synthlabparams.h:804
uint32_t moduleIndex
module indentifier
Definition: synthlabparams.h:132
uint32_t moduleIndex
module identifier
Definition: synthlabparams.h:296
uint32_t moduleIndex
module ID
Definition: synthlabparams.h:955
double phaseModIndex
[1, 4]
Definition: synthlabparams.h:130
uint32_t moduleIndex
module identifier
Definition: synthlabparams.h:898
double fineDetune
1 = up one half-step, -1 = down one half-step
Definition: synthlabparams.h:284
double Q
parameter Q
Definition: synthlabparams.h:706
const uint32_t MAX_MODULATION_CHANNELS
Definition: synthconstants.h:39
const double freqModLow
Definition: synthlabparams.h:666
double freqModIndex
[1, +4]
Definition: synthlabparams.h:352
void setMM_SourceIntensity(uint32_t destination, double intensity)
set source intensity value
Definition: synthlabparams.h:328
double releaseTime_mSec
exciter EG
Definition: synthlabparams.h:340
double oscillatorShape
/ [-1, +1]
Definition: synthlabparams.h:349