1 #ifndef __synthBase_h__ 2 #define __synthBase_h__ 14 #include "synthstructures.h" 15 #include "synthlabparams.h" 17 #define _MATH_DEFINES_DEFINED 39 bool dm_build =
false;
40 bool dual_mono_filters =
false;
41 bool half_sample_set =
false;
42 bool reduced_unison_count =
false;
43 bool analog_fgn_filters =
false;
44 bool parameterSmoothing =
true;
84 AudioBuffer(uint32_t _numInputChannels, uint32_t _numOutputChannels, uint32_t _blockSize);
88 void init(uint32_t _numInputChannels, uint32_t _numOutputChannels, uint32_t _blockSize);
101 uint32_t getOutputChannelCount() {
return numOutputChannels; }
113 uint32_t numInputChannels = 1;
114 uint32_t numOutputChannels = 1;
145 void reset(
double startValue = 0.0);
154 void setFrequency(
double _frequency_Hz,
double _sampleRate);
175 double sampleRate = 0.0;
176 enum { MOD_COUNTER, PHASE_INC, PHASE_OFFSET, FREQUENCY_HZ, NUM_VARS };
177 double state[NUM_VARS] = { 0.0, 0.0, 0.0, 0.0 };
243 XFader(uint32_t _xfadeTime_Samples);
250 void startCrossfade() {
running =
true; }
251 void stopCrossfade() {
running =
false; }
252 bool isCrossfading() {
return running; }
338 double output = input*(1.0 -
g) +
g*
z1;
372 bool reset(
double _sampleRate,
double startPhase, int32_t xfadeSamples = 16);
380 bool isProcessing() {
return hardSyncFader.isCrossfading(); }
419 bool startModulator(
double startValue,
double endValue,
double modTime_mSec,
double sampleRate);
422 bool setModTime(
double modTime_mSec,
double sampleRate);
464 bool startModulator(
double startNote,
double endNote,
double glideTime_mSec,
double sampleRate);
467 bool setGlideTime(
double glideTime_mSec,
double sampleRate);
512 double bN[3] = { 0.0, 0.0, 0.0 };
515 float g_fScale = 2.0f / 0xffffffff;
516 int g_x1 = 0x67452301;
517 int g_x2 = 0xefcdab89;
583 virtual void setModValue(uint32_t index,
double value) = 0;
620 virtual void selectTable(uint32_t midiNoteNumber) = 0;
957 enum { LPF1, LPF2, LPF3, LPF4, HPF1, HPF2, HPF3, HPF4, BPF2, BPF4, BSF2, BSF4,
958 APF1, APF2, ANM_LPF1, ANM_LPF2, ANM_LPF3, ANM_LPF4, NUM_FILTER_OUTPUTS };
991 double filter[NUM_FILTER_OUTPUTS];
994 memset(&filter[0], 0,
sizeof(
double) * NUM_FILTER_OUTPUTS);
1026 virtual bool reset(
double _sampleRate) = 0;
1034 virtual bool update() = 0;
1052 virtual void setFilterParams(
double _fc,
double _Q) = 0;
1130 uint32_t* _tableLengths, uint64_t** _ppHexTableSet,
double _outputComp)
1143 double tableFs = 44100.0;
1179 , staticSources(_staticSources) {}
1212 StaticWavetable(
const uint64_t* _table, uint32_t _tableLength,
const char* _waveformName,
1213 double _outputComp = 1.0,
double _tableFs = 44100)
1224 StaticWavetable(
const double* _table, uint32_t _tableLength,
const char* _waveformName,
1225 double _outputComp = 1.0,
double _tableFs = 44100)
1242 double tableFs = 44100.0;
1268 DynamicWavetable(std::shared_ptr<double> _table, uint32_t _tableLength,
const char* _waveformName,
1269 double _outputComp = 1.0,
double _tableFs = 44100)
1279 std::shared_ptr<double>
table =
nullptr;
1283 double tableFs = 44100.0;
1325 std::vector<IWavetableSource*> wavetableVector;
1362 typedef std::map < std::string, IPCMSampleSource* >sampleSourceMap;
1364 std::vector<IPCMSampleSource*> sources;
1388 SynthProcessInfo(uint32_t _numInputChannels, uint32_t _numOutputChannels, uint32_t _blockSize);
1475 virtual void setModValue(uint32_t index,
double value);
1528 virtual bool reset(CoreProcData& processInfo) = 0;
1529 virtual bool update(CoreProcData& processInfo) = 0;
1530 virtual bool render(CoreProcData& processInfo) = 0;
1531 virtual bool doNoteOn(CoreProcData& processInfo) = 0;
1532 virtual bool doNoteOff(CoreProcData& processInfo) = 0;
1536 virtual bool shutdown() {
return false; }
1537 virtual void setSustainOverride(
bool sustain) {
return; }
1547 const char* getModuleName() {
return moduleName; }
1549 void setModuleHandle(
void* handle) {
moduleHandle = handle; }
1551 void setModuleIndex(uint32_t index) {
moduleIndex = index; }
1553 void setPreferredModuleIndex(uint32_t index) {
preferredIndex = index; }
1603 SynthModule(std::shared_ptr<MidiInputData> _midiInputData);
1607 virtual bool reset(
double _sampleRate) = 0;
1608 virtual bool update() = 0;
1609 virtual bool render(uint32_t samplesToProcess = 1) = 0;
1614 virtual bool initialize(
const char* _dllDirectory) { dllDirectory = _dllDirectory;
return true; }
1618 virtual bool shutdown() {
return false; }
1625 std::shared_ptr<Modulators> getModulationOutput() {
return modulationOutput; }
1632 unisonDetuneCents = _unisonDetuneCents; unisonStartPhase = _unisonStarPhase;
1637 void clearFMBuffer() {
fmBuffer =
nullptr; }
1641 virtual bool getModuleStrings(std::vector<std::string>& moduleStrings, std::string ignoreStr =
"");
1642 virtual bool getModuleStrings(uint32_t coreIndex, std::vector<std::string>& moduleStrings, std::string ignoreStr);
1643 virtual bool getAllModuleStrings(std::vector<std::string>& moduleStrings, std::string ignoreStr);
1645 virtual bool getModKnobStrings(uint32_t coreIndex, std::vector<std::string>& modKnobStrings);
1647 virtual bool addModuleCore(std::shared_ptr<ModuleCore> core);
1676 std::shared_ptr<ModuleCore> selectedCore =
nullptr;
1681 double unisonDetuneCents = 0.0;
1682 double unisonStartPhase = 0.0;
1683 bool standAloneMode =
false;
1687 std::string dllDirectory;
1716 if (fractional_X >= 1.0)
return y2;
1719 return fractional_X*y2 + (1.0 - fractional_X)*y1;
1736 template <
typename T>
1744 void flushBuffer() { memset(&buffer[0], 0, bufferLength *
sizeof(T)); }
1762 bufferLength = _bufferLengthPowerOfTwo;
1765 wrapMask = bufferLength - 1;
1768 buffer.reset(
new T[bufferLength]);
1778 buffer[writeIndex++] = input;
1781 writeIndex &= wrapMask;
1790 int32_t readIndex = (writeIndex - 1) - delayInSamples;
1793 readIndex &= wrapMask;
1796 return buffer[readIndex];
1803 int32_t intPart = (int32_t)delayInFractionalSamples;
1808 if (!interpolate)
return y1;
1812 int readIndexNext = intPart + 1;
1815 readIndexNext &= wrapMask;
1821 double fraction = delayInFractionalSamples - intPart;
1831 std::unique_ptr<T[]> buffer =
nullptr;
1832 uint32_t writeIndex = 0;
1833 uint32_t bufferLength = 1024;
1834 uint32_t wrapMask = 1023;
1835 bool interpolate =
true;
1872 void reset(
double _sampleRate,
double minimumPitch = MIDI_NOTE_0_FREQ)
1887 delaySamples = _delaySamples;
1910 double yn = delayBuffer.
readBuffer(delaySamples);
1916 double delaySamples = 0;
1938 double coeff[7] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
1967 for (uint32_t i = 0; i<numStates; i++)
1990 double yn =
bq.coeff[a0] * xn +
state[xz1];
1994 state[xz2] =
bq.coeff[a2] * xn -
bq.coeff[b2] * yn;
1995 return xn*
bq.coeff[d0] + yn*
bq.coeff[c0];
1999 enum { a0, a1, a2, b1, b2, c0, d0 };
2000 enum { xz1, xz2, yz1, yz2, numStates };
2001 double state[4] = { 0.0, 0.0, 0.0, 0.0 };
2047 double yn = xn*alpha + state[0] - alpha*state[1];
2056 double state[2] = { 0.0, 0.0 };
2096 double yn = 0.5*xn + 0.5*state[0];
2102 double state[2] = { 0.0, 0.0 };
2130 for (uint32_t i = 0; i<numStates; i++)
2133 sampleRate = _sampleRate;
2136 double theta_c =
kTwoPi*
fc / sampleRate;
2137 double gamma = cos(theta_c) / (1.0 + sin(theta_c));
2140 coeffs[a0] = (1.0 + gamma) / 2.0;
2141 coeffs[a1] = -(1.0 + gamma) / 2.0;
2165 enum { xz1, xz2, yz1, yz2, numStates };
2166 double state[4] = { 0.0, 0.0, 0.0, 0.0 };
2167 enum { a0, a1, a2, b1, b2 };
2168 double coeffs[5] = { 0.0, 0.0, 0.0, 0.0, 0.0 };
2170 double sampleRate = 1.0;
2198 for (uint32_t i = 0; i<numStates; i++)
2201 sampleRate = _sampleRate;
2207 if (fc == _fc && Q == _Q)
2214 double K = tan(
kPi*fc / sampleRate);
2215 double delta = K*K*Q + K + Q;
2218 coeffs[a0] = K / delta;;
2220 coeffs[a2] = -K / delta;
2221 coeffs[b1] = 2.0*Q*(K*K - 1) / delta;
2222 coeffs[b2] = (K*K*Q - K + Q) / delta;
2234 double yn = coeffs[a0] * xn + state[xz1];
2237 state[xz1] = coeffs[a1] * xn - coeffs[b1] * yn + state[xz2];
2238 state[xz2] = coeffs[a2] * xn - coeffs[b2] * yn;
2243 enum { xz1, xz2, yz1, yz2, numStates };
2244 double state[4] = { 0.0, 0.0, 0.0, 0.0 };
2245 enum { a0, a1, a2, b1, b2 };
2246 double coeffs[5] = { 0.0, 0.0, 0.0, 0.0, 0.0 };
2249 double sampleRate = 1.0;
2276 sampleRate = _sampleRate;
2283 for (uint32_t i = 0; i<numStates; i++)
2290 if (fc == _fc && Q == _Q)
2297 double theta_c = 2.0*
kPi*fc / sampleRate;
2299 double betaNumerator = 1.0 - ((d / 2.0)*(sin(theta_c)));
2300 double betaDenominator = 1.0 + ((d / 2.0)*(sin(theta_c)));
2302 double beta = 0.5*(betaNumerator / betaDenominator);
2303 double gamma = (0.5 + beta)*(cos(theta_c));
2304 double alpha = (0.5 + beta - gamma) / 2.0;
2308 coeffs[a1] = 2.0*alpha;
2310 coeffs[b1] = -2.0*gamma;
2311 coeffs[b2] = 2.0*beta;
2323 double yn = coeffs[a0] * xn + state[xz1];
2326 state[xz1] = coeffs[a1] * xn - coeffs[b1] * yn + state[xz2];
2327 state[xz2] = coeffs[a2] * xn - coeffs[b2] * yn;
2332 enum { xz1, xz2, yz1, yz2, numStates };
2333 double state[4] = { 0.0, 0.0, 0.0, 0.0 };
2334 enum { a0, a1, a2, b1, b2 };
2335 double coeffs[5] = { 0.0, 0.0, 0.0, 0.0, 0.0 };
2338 double sampleRate = 1.0;
2366 for (uint32_t i = 0; i<numStates; i++)
2369 sampleRate = _sampleRate;
2375 if (fc == _fc && Q == _Q)
2381 double theta_c =
kTwoPi*fc / sampleRate;
2385 double betaNumerator = 1.0 - ((d / 2.0)*(sin(theta_c)));
2386 double betaDenominator = 1.0 + ((d / 2.0)*(sin(theta_c)));
2388 double beta = 0.5*(betaNumerator / betaDenominator);
2389 double gamma = (0.5 + beta)*(cos(theta_c));
2390 double alpha = (0.5 + beta + gamma) / 2.0;
2394 coeffs[a1] = -2.0*alpha;
2396 coeffs[b1] = -2.0*gamma;
2397 coeffs[b2] = 2.0*beta;
2409 double yn = coeffs[a0] * xn + state[xz1];
2412 state[xz1] = coeffs[a1] * xn - coeffs[b1] * yn + state[xz2];
2413 state[xz2] = coeffs[a2] * xn - coeffs[b2] * yn;
2418 enum { xz1, xz2, yz1, yz2, numStates };
2419 double state[4] = { 0.0, 0.0, 0.0, 0.0 };
2420 enum { a0, a1, a2, b1, b2 };
2421 double coeffs[5] = { 0.0, 0.0, 0.0, 0.0, 0.0 };
2424 double sampleRate = 1.0;
2451 for(uint32_t i=0; i<numStates; i++)
2454 sampleRate = _sampleRate;
2460 if (fc == _fc && Q == _Q)
2466 double theta_c =
kTwoPi*fc / sampleRate;
2468 coeffs[b2] = exp(-2.0*
kPi*(BW / sampleRate));
2469 coeffs[b1] = ((-4.0*coeffs[b2]) / (1.0 + coeffs[b2]))*cos(theta_c);
2470 coeffs[a0] = 1.0 - pow(coeffs[b2], 0.5);
2471 coeffs[a2] = -coeffs[a0];
2483 double yn = coeffs[a0]*xn + coeffs[a2]*state[xz2] - coeffs[b1]*state[yz1] -coeffs[b2]*state[yz2];
2484 state[xz2] = state[xz1];
2486 state[yz2] = state[yz1];
2487 state[yz1] = yn * loss;
2492 enum { xz1, xz2, yz1, yz2, numStates };
2493 double state[4] = { 0.0, 0.0, 0.0, 0.0 };
2494 enum { a0, a2, b1, b2 };
2495 double coeffs[4] = { 0.0, 0.0, 0.0, 0.0 };
2498 double sampleRate = 1.0;
2525 for (uint32_t i = 0; i<numStates; i++)
2528 sampleRate = _sampleRate;
2534 double theta_c =
kTwoPi*shelfFreq / sampleRate;
2535 double mu = pow(10.0, boostCut_dB / 20.0);
2537 double beta = 4.0 / (1.0 + mu);
2538 double delta = beta*tan(theta_c / 2.0);
2539 double gamma = (1.0 - delta) / (1.0 + delta);
2542 coeffs[a0] = (1.0 - gamma) / 2.0;
2543 coeffs[a1] = (1.0 - gamma) / 2.0;
2545 coeffs[b1] = -gamma;
2548 coeffs[c0] = mu - 1.0;
2561 double yn = coeffs[a0] * xn + state[xz1];
2564 state[xz1] = coeffs[a1] * xn - coeffs[b1] * yn + state[xz2];
2565 state[xz2] = coeffs[a2] * xn - coeffs[b2] * yn;
2566 return xn*coeffs[d0] + yn*coeffs[c0];
2570 enum { xz1, xz2, yz1, yz2, numStates };
2571 double state[4] = { 0.0, 0.0, 0.0, 0.0 };
2572 enum { a0, a1, a2, b1, b2, c0, d0 };
2573 double coeffs[7] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
2575 double boostCut_dB = 0.0;
2576 double sampleRate = 1.0;
2604 for (uint32_t i = 0; i<numStates; i++)
2607 sampleRate = _sampleRate;
2613 double theta_c =
kTwoPi*shelfFreq / sampleRate;
2614 double mu = pow(10.0, boostCut_dB / 20.0);
2616 double beta = (1.0 + mu) / 4.0;
2617 double delta = beta*tan(theta_c / 2.0);
2618 double gamma = (1.0 - delta) / (1.0 + delta);
2620 coeffs[a0] = (1.0 + gamma) / 2.0;
2621 coeffs[a1] = -coeffs[a0];
2623 coeffs[b1] = -gamma;
2626 coeffs[c0] = mu - 1.0;
2639 double yn = coeffs[a0] * xn + state[xz1];
2642 state[xz1] = coeffs[a1] * xn - coeffs[b1] * yn + state[xz2];
2643 state[xz2] = coeffs[a2] * xn - coeffs[b2] * yn;
2644 return xn*coeffs[d0] + yn*coeffs[c0];
2648 enum { xz1, xz2, yz1, yz2, numStates };
2649 double state[4] = { 0.0, 0.0, 0.0, 0.0 };
2650 enum { a0, a1, a2, b1, b2, c0, d0 };
2651 double coeffs[7] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
2653 double boostCut_dB = 0.0;
2654 double sampleRate = 1.0;
2681 for (uint32_t i = 0; i<numStates; i++)
2684 sampleRate = _sampleRate;
2690 if (fc == _fc && Q == _Q && boostCut_dB == _boostCut_dB)
2694 boostCut_dB = _boostCut_dB;
2697 double theta_c =
kTwoPi*fc / sampleRate;
2698 double mu = pow(10.0, boostCut_dB / 20.0);
2701 double tanArg = theta_c / (2.0 * Q);
2702 if (tanArg >= 0.95*
kPi / 2.0) tanArg = 0.95*
kPi / 2.0;
2705 double zeta = 4.0 / (1.0 + mu);
2706 double betaNumerator = 1.0 - zeta*tan(tanArg);
2707 double betaDenominator = 1.0 + zeta*tan(tanArg);
2709 double beta = 0.5*(betaNumerator / betaDenominator);
2710 double gamma = (0.5 + beta)*(cos(theta_c));
2711 double alpha = (0.5 - beta);
2716 coeffs[a2] = -alpha;
2717 coeffs[b1] = -2.0*gamma;
2718 coeffs[b2] = 2.0*beta;
2720 coeffs[c0] = mu - 1.0;
2733 double yn = coeffs[a0] * xn + state[xz1];
2736 state[xz1] = coeffs[a1] * xn - coeffs[b1] * yn + state[xz2];
2737 state[xz2] = coeffs[a2] * xn - coeffs[b2] * yn;
2738 return xn*coeffs[d0] + yn*coeffs[c0];
2742 enum { xz1, xz2, yz1, yz2, numStates };
2743 double state[4] = { 0.0, 0.0, 0.0, 0.0 };
2744 enum { a0, a1, a2, b1, b2, c0, d0 };
2745 double coeffs[7] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
2748 double boostCut_dB = 0.0;
2749 double sampleRate = 1.0;
2778 sampleRate = _sampleRate;
2784 for (uint32_t i = 0; i<numStates; i++)
2797 double theta_c = 2.0*
kPi*fc / sampleRate;
2798 double gamma = 2.0 - cos(theta_c);
2800 double filter_b1 = pow((gamma*gamma - 1.0), 0.5) - gamma;
2801 double filter_a0 = 1.0 + filter_b1;
2804 coeffs[a0] = filter_a0;
2807 coeffs[b1] = filter_b1;
2821 double yn = coeffs[a0] * xn + state[xz1];
2824 state[xz1] = coeffs[a1] * xn - coeffs[b1] * yn + state[xz2];
2825 state[xz2] = coeffs[a2] * xn - coeffs[b2] * yn;
2830 enum { xz1, xz2, yz1, yz2, numStates };
2831 double state[4] = { 0.0, 0.0, 0.0, 0.0 };
2832 enum { a0, a1, a2, b1, b2 };
2833 double coeffs[5] = { 0.0, 0.0, 0.0, 0.0, 0.0 };
2836 double sampleRate = 1.0;
2842 enum class PluckFilterType {kPluck, kPluckAndBridge, kPickup, kPluckAndPickup, kBridge, kPluckPickupBridge};
2884 void reset(
double _sampleRate,
double minimumPitch = MIDI_NOTE_0_FREQ)
2890 pickupFilter.
reset(_sampleRate);
2920 if (type == PluckFilterType::kBridge)
2923 if (type == PluckFilterType::kPickup)
2931 double pluck = 0.5*(xn - yn);
2932 if (type == PluckFilterType::kPluck)
2936 if (type == PluckFilterType::kPluckAndPickup)
2940 if (type == PluckFilterType::kPluckAndBridge)
2943 if (type == PluckFilterType::kPluckPickupBridge)
void setDelayInSamples(double _delaySamples)
set comb delay time - this will be based on virtual plucking position on string
Definition: synthbase.h:2903
void reset(double _sampleRate)
Definition: synthbase.h:2775
const double SVF_Q_SLOPE
Definition: synthbase.h:968
Object that acts as the PCM sample database, as shared synth-wide resource. You should study this esp...
Definition: synthbase.h:1346
uint32_t tableLength
length
Definition: synthbase.h:1239
virtual IWavetableSource * getTableSource(const char *uniqueTableName)=0
get a table source based on its unique name string
void reset()
reset the counter
Definition: synthbase.h:332
std::unique_ptr< GlideModulator > glideModulator
built-in glide modulator for oscillators
Definition: synthbase.h:1575
IPCMSampleDatabase * sampleDatabase
PCM sample database, usually owned by engine.
Definition: synthbase.h:1084
virtual bool addTableSource(const char *uniqueTableName, IWavetableSource *tableSource, uint32_t &uniqueIndex)=0
adds a table to the database
virtual bool getModuleCoreStrings(std::vector< std::string > &moduleCoreStrings)
Gets a std::vector of the names of the four cores in this module.
Definition: synthbase.cpp:1570
double processAudioSample(double xn)
run the filter
Definition: synthbase.h:2153
float * getOutputBuffer(uint32_t channel)
Get a naked pointer to an audio OUTPUT buffer by channel.
Definition: synthbase.cpp:162
SynthClock hardSyncClock
clock for reset oscillator
Definition: synthbase.h:387
bool setGlideTime(double glideTime_mSec, double sampleRate)
Change the glide time; this is optional.
Definition: synthbase.cpp:773
Implements a first order APF that is used to generate a fractional delay for the physcial model of a ...
Definition: synthbase.h:2019
void setParameters(double _fc, double _Q)
Definition: synthbase.h:2458
SynthLabTableSet ** tablePtrs
set of table-sets
Definition: synthbase.h:1182
const uint32_t NUM_MODULE_CORES
Definition: synthconstants.h:136
IModulator * modulationOutputs
output modulation values
Definition: synthbase.h:1075
~PCMSampleDatabase()
clear out the table sources
Definition: synthbase.cpp:1080
void setXFadeTimeSamples(uint32_t _xfadeTimeSamples)
Definition: synthbase.h:293
double phaseInc
phase inc = fo/fs
Definition: synthbase.h:171
std::shared_ptr< Modulators > modulationOutput
Definition: synthbase.h:1660
uint32_t numActiveChannels
number of active channels; not used in SynthLab but available
Definition: synthbase.h:736
double g
one pole filter feedback coefficient
Definition: synthbase.h:344
float ** fmBuffers
used for DX synths (phase modulator synths)
Definition: synthbase.h:1080
virtual void setModValue(uint32_t index, double value)=0
set a modulation value to the array for a certain channel
void initWithClock(SynthClock &clock)
Initialize this clock with another SynthClock.
Definition: synthbase.cpp:211
The CircularBuffer object implements a simple circular buffer. It uses a wrap mask to wrap the read o...
Definition: synthbase.h:1737
double processAudioSample(double xn, PluckFilterType type)
run the string of filters
Definition: synthbase.h:2918
bool isActive()
checks to see if the modulator is running, or completed
Definition: synthbase.h:429
virtual bool addModuleCore(std::shared_ptr< ModuleCore > core)
adds a module core to the module's set of four
Definition: synthbase.cpp:1603
void writeBuffer(T input)
Definition: synthbase.h:1775
Ultra compact timer object that is used for many different functionalities.
Definition: synthbase.h:195
~WavetableDatabase()
clear out the table sources
Definition: synthbase.cpp:952
double outputComp
output scaling factor (NOT volume or attenuation, waveform specific)
Definition: synthbase.h:1282
void reset(double _sampleRate)
Definition: synthbase.h:2449
double timeSigNumerator
time signature numerator
Definition: synthbase.h:1400
double sampleRate
fs
Definition: synthstructures.h:246
Compact modulo counter with wrapping used as the timebase for all oscillators.
Definition: synthbase.h:137
sampleSourceMap sampleDatabase
map that connects PCM sample set names to source objects
Definition: synthbase.h:1363
const double kPi
pi to 80 decimal places
Definition: synthconstants.h:536
double outputComp
output scaling factor
Definition: synthbase.h:1146
std::shared_ptr< AudioBuffer > audioBuffers
Definition: synthbase.h:1666
void reset(double _sampleRate)
Definition: synthbase.h:2128
void destroyOutputBuffers()
Destroy dynamically allocated output buffer; done at destruct time, or if client want to re-size buff...
Definition: synthbase.cpp:69
virtual bool clearModuleCores()
Clears out the module core pointer list.
Definition: synthbase.cpp:1730
void setExpireSamples(uint32_t _targetValueInSamples)
set target value
Definition: synthbase.h:205
uint32_t endMIDINote
ending MIDI note for the glide
Definition: synthstructures.h:244
BQCoeffs bq
coefficients
Definition: synthbase.h:2002
void reset(double _sampleRate, double minimumPitch=MIDI_NOTE_0_FREQ)
reset the delay, calculate a new length based on sample rate and minimum pitch
Definition: synthbase.h:2884
virtual bool removeTableSource(const char *uniqueTableName)=0
remove a table from the database
IMidiInputData * midiInputData
MIDI input daa, usually owned by engine.
Definition: synthbase.h:1085
void advanceClock(uint32_t ticks=1)
Nudge the clock on the modulator; this is used for block processing where the modulator output output...
Definition: synthbase.cpp:727
float ** inputBuffers
set of input bufers, one per channel
Definition: synthbase.h:1078
uint32_t xfadeTime_Samples
the target crossfade time
Definition: synthbase.h:260
const double KORG35_Q_SLOPE
Definition: synthbase.h:969
void setParameters(double shelfFreq, double boostCut_dB)
Definition: synthbase.h:2611
virtual bool selectModuleCore(uint32_t index)
Select a core.
Definition: synthbase.cpp:1653
double doPinkingFilter(double white)
run the pinking filter
Definition: synthbase.cpp:874
void copyCoeffs(BQAudioFilter &destination)
Definition: synthbase.h:1977
Interface for wavetable sources.
Definition: synthbase.h:609
void setParameters(double shelfFreq, double boostCut_dB)
Definition: synthbase.h:2532
virtual bool reset(double _sampleRate)=0
double bN[3]
Definition: synthbase.h:512
double BPM
current BPM, needed for LFO sync to BPM
Definition: synthbase.h:1094
void advanceClock(uint32_t ticks=1)
Nudge the clock on the modulator; this is used for block processing where the modulator output output...
Definition: synthbase.cpp:809
virtual bool haveValidSamples()=0
query for valid samples; needed if WAV parsing fails and we need to delete the entry ...
void addPhaseOffset(double _phaseOffset, bool wrap=true)
For phase modulation, this adds a phase offset and then optionally checks/wraps the counter as needed...
Definition: synthbase.cpp:302
SynthModule(std::shared_ptr< MidiInputData > _midiInputData)
Constructs a SynthModule.
Definition: synthbase.cpp:1403
double modEnd
ramp mod end value
Definition: synthbase.h:437
Encapsulates the audio buffering requirements of any module that uses audio samples for input and/or ...
Definition: synthbase.h:80
std::shared_ptr< Modulators > modulationInput
Definition: synthbase.h:1657
double absoluteBufferTime_Sec
the time in seconds of the sample index at top of buffer
Definition: synthbase.h:1398
const char * moduleName
module name must be set in derived constructor
Definition: synthbase.h:1569
virtual bool clearSampleSources() override
clear all entries from the std::map
Definition: synthbase.cpp:1175
void setSamplesInBlock(uint32_t _samplesInBlock)
Set the number of samples in a block for processing.
Definition: synthbase.cpp:176
Implements a simple 2nd order HPF.
Definition: synthbase.h:2356
uint32_t moduleType
type of module, LFO_MODULE, EG_MODULE, etc...
Definition: synthbase.h:1568
float ** getInputBuffers()
Definition: synthbase.h:96
const double GUI_Q_MIN
Definition: synthbase.h:966
uint32_t samplesToProcess
number of samples in this block
Definition: synthbase.h:1090
bool crossfade(XFadeType xfadeType, double inputA, double inputB, double &output)
Perform crossfade FROM A to B on a pair of input values to oroduce a single output value...
Definition: synthbase.cpp:421
std::shared_ptr< MidiInputData > midiInputData
Definition: synthbase.h:1663
virtual bool removeSampleSource(const char *uniqueSampleSetName) override
remove a PCM sample source from the database
Definition: synthbase.cpp:1150
Object that acts as the wavetable database, as shared synth-wide resource. You should study this espe...
Definition: synthbase.h:1305
bool advanceWrapClock(uint32_t renderInterval=1)
Advance the clock some number of tics by adding the phaseInc value and then check to see if modulo co...
Definition: synthbase.cpp:251
const double DIODE_Q_SLOPE
Definition: synthbase.h:971
void reset(double startValue=0.0)
Reset to initial state.
Definition: synthbase.cpp:226
double timerInc
timer incrementer value
Definition: synthbase.h:433
double freqOffset
FM.
Definition: synthbase.h:173
void saveState()
Freeze and save the current state of the clock; for PM and FM.
Definition: synthbase.cpp:354
double state[4]
state variables
Definition: synthbase.h:2166
void reset()
Reset to initial state; just resets counters to 0.
Definition: synthbase.cpp:459
void clear()
Definition: synthbase.h:2281
void resetTimer()
reset the counter
Definition: synthbase.h:202
uint32_t xfadeTime_Counter
counter for timer
Definition: synthbase.h:261
double phaseOffset
PM.
Definition: synthbase.h:172
virtual double getModValue(uint32_t index)
get a value from a slot in the modulation array
Definition: synthbase.cpp:1374
const char * waveformName
string for the GUI
Definition: synthbase.h:1149
Implementation of a high shelving filter.
Definition: synthbase.h:2594
Interface for PCM sample sources.
Definition: synthbase.h:766
~AudioBuffer()
As one of the few objects that uses naked pointers (for maximum compatibility between plugin framewor...
Definition: synthbase.cpp:39
std::map< std::string, IWavetableSource *> wavetableSourceMap
map that connects wavetable names to source objects
Definition: synthbase.h:1323
bool standAloneMode
flag for stand-alone mode of operation outside of SynthLab
Definition: synthbase.h:1574
void createCircularBufferPowerOfTwo(uint32_t _bufferLengthPowerOfTwo)
Definition: synthbase.h:1756
Implements a simple 2nd order LPF.
Definition: synthbase.h:2266
Implementation of a constant-Q parametric EQ filter.
Definition: synthbase.h:2671
double z1
one pole filter state variable
Definition: synthbase.h:345
virtual uint32_t getSelectedCoreIndex()
get the index of the selected core
Definition: synthbase.cpp:1640
const uint32_t UNDEFINED_MODULE
Definition: synthconstants.h:112
IPCMSampleDatabase * getIPCMSampleDatabase()
Definition: synthbase.h:1359
uint32_t wrapMask
wrapping mask = length - 1
Definition: synthbase.h:1240
void setCoeffs(BQCoeffs &_coeffs)
Definition: synthbase.h:1972
double frequency_Hz
clock frequency
Definition: synthbase.h:174
double state[4]
state registers
Definition: synthbase.h:2001
std::shared_ptr< Modulators > getModulationInput()
Definition: synthbase.h:1624
std::default_random_engine defaultGeneratorEngine
Definition: synthbase.h:502
virtual IWavetableSource * getTableSource(const char *uniqueTableName) override
selects a table source based on the unique table name
Definition: synthbase.cpp:965
Simple object that generates white, gaussian white or pink noise.
Definition: synthbase.h:495
bool reset(double _sampleRate, double startPhase, int32_t xfadeSamples=16)
Specialized reset function that:
Definition: synthbase.cpp:568
void reset()
Definition: synthbase.h:1962
virtual void setSampleLoopMode(SampleLoopMode _loopMode)=0
Set the looping mode:
Simple version of the AudioFilter object from Designing Audio Effects Plugins in C++ 2nd Ed...
Definition: synthbase.h:1954
Structure to hold the seven coeffieicents used in the AudioFilter object from Designing Audio Effects...
Definition: synthbase.h:1935
Definition: addosccore.cpp:4
const double MOOG_Q_SLOPE
Definition: synthbase.h:970
double processAudioSample(double xn)
run the filter
Definition: synthbase.h:2558
virtual int32_t getWaveformIndex(const char *uniqueTableName) override
get the vector index of a waveform, use at reset() or startup, not runtime
Definition: synthbase.cpp:1061
void clear()
Definition: synthbase.h:2870
double coeffs[5]
biquad coefficients
Definition: synthbase.h:2168
Definition: synthstructures.h:235
uint32_t blockSize
the maximum block size
Definition: synthbase.h:115
virtual bool getAllModuleStrings(std::vector< std::string > &moduleStrings, std::string ignoreStr)
Gets a std::vector of all Module Strings concatenated from all cores in succession.
Definition: synthbase.cpp:1488
std::shared_ptr< AudioBuffer > getAudioBuffers()
Definition: synthbase.h:1628
XFader()
simple construction
Definition: synthbase.h:242
double countDownTimer
current timer value; this always counts DOWN regardless of the polarity of the modulation (up or down...
Definition: synthbase.h:479
uint32_t getModuleType()
Definition: synthbase.h:1546
virtual IPCMSampleSource * getSampleSource(const char *uniqueSampleSetName)=0
get a PCM sample source based on its unique name string
virtual bool addSampleSource(const char *uniqueSampleSetName, IPCMSampleSource *sampleSource)=0
adds a PCM sample to the database
uint32_t getInputChannelCount()
Definition: synthbase.h:100
double processAudioSample(double xn)
run the filter
Definition: synthbase.h:2045
std::string * tableNames
names of tables
Definition: synthbase.h:1183
Simple interface for SynthLab filters.
Definition: synthbase.h:1017
ModuleCoreData coreData
core strings (16) and mod knob labels (4)
Definition: synthbase.h:1573
void reset(double _sampleRate)
Definition: synthbase.h:2679
void reset(double _sampleRate)
Definition: synthbase.h:2196
virtual bool startGlideModulation(GlideInfo &glideInfo)
starts the built-in glide modulator
Definition: synthbase.cpp:1587
void clearMidiEvents()
Clear the queue.
Definition: synthbase.cpp:918
virtual uint32_t getWaveTableLength()=0
void removePhaseOffset()
Remove existing a phase offset to the reset clock; for supporting phase modulation.
Definition: synthbase.cpp:643
void writeDelay(double xn)
write a value into the top of the delay
Definition: synthbase.h:1896
T readBuffer(double delayInFractionalSamples)
Definition: synthbase.h:1800
std::shared_ptr< double > table
the table (shared)
Definition: synthbase.h:1279
uint32_t getTick()
tick count
Definition: synthbase.h:216
double sampleRate
fs
Definition: synthbase.h:1089
void initInputValues()
set default values in modulator array
Definition: synthbase.cpp:1347
bool startModulator(double startValue, double endValue, double modTime_mSec, double sampleRate)
Setup the timers and start the ramp modulator running. The modulator produces an output on the range ...
Definition: synthbase.cpp:661
Implementation of a one-pole LPF.
Definition: synthbase.h:2767
void reset(double _sampleRate)
Definition: synthbase.h:2274
Modulators()
constructs the modulator object
Definition: synthbase.cpp:1328
Crossfades two values (from A to B) and then holds B for some amount of time.
Definition: synthbase.h:283
IModulator * getModulatorPtr()
Definition: synthbase.h:1484
Specialized version of the RampModulator, with nearly identically named functions to peform the porta...
Definition: synthbase.h:457
bool running
state variable
Definition: synthbase.h:262
uint32_t * tableLengths
pointers to lengths of each of the hex encoded tables
Definition: synthbase.h:1139
float ** outputBuffer
array of output buffer pointers
Definition: synthbase.h:112
bool setHardSyncFrequency(double hardSyncFrequency)
Sets the new reset oscillator frequency in Hz.
Definition: synthbase.cpp:584
uint32_t getExpireSamples()
Definition: synthbase.h:209
T readBuffer(int32_t delayInSamples)
Definition: synthbase.h:1785
Holds the audio output samples from reading a PCM sample file.
Definition: synthbase.h:733
virtual int32_t getWaveformIndex(const char *uniqueTableName)
Definition: synthbase.h:714
float ** outputBuffers
set of output bufers, one per channel
Definition: synthbase.h:1079
Structure for holding information about a static wavetable, that is read from a static location...
Definition: synthbase.h:1208
virtual bool clearTableSources()=0
clear all source pointers
void setUnisonMode(double _unisonDetuneCents, double _unisonStarPhase)
Definition: synthbase.h:1631
void restoreState()
Restore the clock to its last saved state; for PM and FM.
Definition: synthbase.cpp:366
SampleLoopMode
Definition: synthbase.h:741
double modRange
range of modulation output
Definition: synthbase.h:435
uint32_t tableLength
length
Definition: synthbase.h:1280
Implements a first order feedforward LPF with coefficients a0 = a1 = 0.5.
Definition: synthbase.h:2074
void setParameters(double _fc)
Definition: synthbase.h:2789
Implements a simple 2nd order BPF.
Definition: synthbase.h:2188
Abstract base class that encapsulates functionality of a module; used with the Module-Core paradigm...
Definition: synthbase.h:1600
Structure for holding information about a static wavetable, that is read from a static location...
Definition: synthbase.h:1264
void clear()
Definition: synthbase.h:2782
virtual int32_t getState()
Definition: synthbase.h:1617
double processAudioSample(double xn)
Definition: synthbase.h:1987
bool timerExpired()
check if we hit target
Definition: synthbase.h:212
const double HSYNC_MOD_SLOPE
Definition: synthbase.h:972
virtual double selectSample(double oscFrequency)=0
Selects a PCM sample based on the current oscillation frequency (after all modulations have been appl...
unsigned int tablePtrsCount
number of pointers
Definition: synthbase.h:1181
bool timerActive
state of modulator, running (true) or expired (false)
Definition: synthbase.h:477
std::unique_ptr< GlideModulator > glideModulator
Definition: synthbase.h:1669
uint32_t wrapMask
mask = length - 1
Definition: synthbase.h:1281
const char * waveformName
waveform name string
Definition: synthbase.h:1243
void addPhaseOffset(double offset)
Add a phase offset to the reset clock; for supporting phase modulation.
Definition: synthbase.cpp:634
void reset()
Definition: synthbase.h:2082
Interface for wavetable databases.
Definition: synthbase.h:669
Implements a modulator object.
Definition: synthbase.h:1467
virtual bool addSampleSource(const char *uniqueSampleSetName, IPCMSampleSource *sampleSource) override
add a PCM sample source to the database
Definition: synthbase.cpp:1123
Minute implementation of a 2nd order resonator filter.
Definition: synthbase.h:2441
uint32_t counter
the timer counter
Definition: synthbase.h:219
double getNextModulationValue(uint32_t advanceClock=1)
Get the current output of the modulator; this is called repeatedly over the ramp modulation time...
Definition: synthbase.cpp:787
void clear()
Definition: synthbase.h:1863
double outputComp
output scaling factor (NOT volume or attenuation, waveform specific)
Definition: synthbase.h:1241
Interface for modulator objects.
Definition: synthbase.h:551
Definition: synthbase.h:37
virtual bool clearSampleSources()=0
clear all the sample sources
PluckFilterType
Definition: synthbase.h:2842
void reset(double _sampleRate, double minimumPitch=MIDI_NOTE_0_FREQ)
reset the delay, calculate a new length based on sample rate and minimum pitch
Definition: synthbase.h:1872
XFadeData getCrossfadeData()
Returns the current state of the crossfade or hold.
Definition: synthbase.cpp:487
virtual bool clearTableSources() override
clear all entries from the std::map
Definition: synthbase.cpp:1048
uint32_t getBlockSize()
Definition: synthbase.h:104
void setFrequency(double _frequency_Hz, double _sampleRate)
Set the clock frequency, which calculates the current phase increment value.
Definition: synthbase.cpp:288
const double * dTable
table of 64-bit doubles
Definition: synthbase.h:1238
void * moduleParameters
module parameters, cloaked as void* – varies according to module
Definition: synthbase.h:1086
double doSlewLimiter(double input)
Definition: synthbase.h:336
void setSlewValue(double _g)
b1 coefficient
Definition: synthbase.h:335
virtual double * getModArrayPtr(uint32_t index)
get a pointer to a slot in the modulation array
Definition: synthbase.cpp:1361
void setXFadeTime(uint32_t _xfadeTime_Samples)
Set the current crossfade time.
Definition: synthbase.cpp:403
void clear()
fast clearing of modulator array
Definition: synthbase.cpp:1337
virtual bool selectDefaultModuleCore()
Select the default core, which is always the first in the list.
Definition: synthbase.cpp:1671
std::shared_ptr< AudioBuffer > fmBuffer
Definition: synthbase.h:1672
void reset()
Resets object to initialized state.
Definition: synthbase.cpp:391
uint32_t xfadeTime_Samples
target crossfade time
Definition: synthbase.h:304
uint64_t getMidiEventCount()
Definition: synthbase.cpp:926
virtual int32_t getState()
Definition: synthbase.h:1535
void setParameters(double _fc, double _Q, double _boostCut_dB)
Definition: synthbase.h:2688
void flushDelays()
Definition: synthbase.h:1965
double doLinearInterp(double y1, double y2, double fractional_X)
performs linear interpolation of fractional x distance between two adjacent (x,y) points; returns int...
Definition: synthbase.h:1713
virtual void packCores()
packs the cores into non-null ordering
Definition: synthbase.cpp:1686
void startHardSync(SynthClock oscClock)
Starts the hard sync operation as a result of being reset, using the main oscillator's SynthClock to ...
Definition: synthbase.cpp:598
Crossfades two values (from A to B)
Definition: synthbase.h:239
const double kTwoPi
2pi to 80 decimal places
Definition: synthconstants.h:543
IWavetableDatabase * wavetableDatabase
wavetable database, usually owned by engine
Definition: synthbase.h:1083
virtual bool initialize(const char *_dllDirectory)
Definition: synthbase.h:1614
uint32_t xfadeTime_Counter
crossfade timer counter
Definition: synthbase.h:305
uint32_t timeSigDenomintor
time signature denominator
Definition: synthbase.h:1401
double processAudioSample(double xn)
run the filter
Definition: synthbase.h:2406
int32_t preferredIndex
preferred index of this DYNAMIC core
Definition: synthbase.h:1572
Storage for one static table source; a static table is pre-compiled into the synth, or (optionally) read from a file. The "source" stores a set of these tables to maximize frequency content while prohibiting aliasing.
Definition: synthlabwtsource.h:39
CoreProcData coreProcessData
Definition: synthbase.h:1686
Implements a simple slew limiter using a one pole lowpass filter.
Definition: synthbase.h:325
void addFrequencyOffset(double _freqOffset)
For frequency modulation, this adds a frequency offset, and recalculates the phase increment value...
Definition: synthbase.cpp:334
void setFMBuffer(std::shared_ptr< AudioBuffer > pmBuffer)
Definition: synthbase.h:1636
virtual bool removeSampleSource(const char *uniqueSampleSetName)=0
remove a PCM sample set from the database
double countUpTimer
current timer value; this always counts UP regardless of the polarity of the modulation (up or down) ...
Definition: synthbase.h:434
double glideRange
range (distance between MIDI note numbers, as double)
Definition: synthbase.h:480
void removePhaseOffset()
For phase modulation, this removes a phase offset, notice that the function does not attempt to wrap ...
Definition: synthbase.cpp:320
This structure holds all of the information needed to for the plugin framework to send MIDI informati...
Definition: synthbase.h:1384
virtual bool addTableSource(const char *uniqueTableName, IWavetableSource *tableSource, uint32_t &uniqueIndex) override
add a table source to the database
Definition: synthbase.cpp:999
const double GUI_Q_MAX
Definition: synthbase.h:967
void removeFrequencyOffset()
For frequency modulation, this removes a frequency offset and recalculates the phase inc...
Definition: synthbase.cpp:345
MIDINoteEvent noteEvent
the MIDI note event for the current audio block
Definition: synthbase.h:1095
bool timerActive
state of modulator, running (true) or expired (false)
Definition: synthbase.h:432
double processAudioSample(double xn)
run the filter
Definition: synthbase.h:2636
XFader hardSyncFader
crossfader for smearing discontinuity
Definition: synthbase.h:389
bool startGlideModulation(GlideInfo &glideInfo)
Definition: synthbase.h:1541
void * moduleHandle
used for dynamically loading cores from DLLs
Definition: synthbase.h:1570
double doPinkNoise()
Function generate pink noise by filtering white noise.
Definition: synthbase.cpp:859
const uint32_t kDefaultWaveTableLength
Definition: synthbase.h:1190
virtual bool reset(CoreProcData &processInfo)=0
double processAudioSample(double xn)
run the filter
Definition: synthbase.h:2320
uint32_t moduleIndex
index of this core
Definition: synthbase.h:1571
double doHardSyncXFade(double inA, double inB)
Perform the crossfade on the two oscillator signals to smear over the discontinuity.
Definition: synthbase.cpp:620
virtual void setStandAloneMode(bool b)
Sets the stand-alone mode flag on all cores.
Definition: synthbase.cpp:1713
This super-structure holds a set of SynthLabTableSet called a "bank" and used in the morphing wavetab...
Definition: synthbase.h:1173
void setInterpolate(bool b)
Definition: synthbase.h:1828
IModulator * modulationInputs
input modulation values
Definition: synthbase.h:1074
SynthClock & operator=(const SynthClock ¶ms)
Overloaded = operator for setting two clocks equal to each other by copying member values from a sour...
Definition: synthbase.cpp:189
IWavetableDatabase * getIWavetableDatabase()
Definition: synthbase.h:1320
void pushMidiEvent(midiEvent event)
Add a MIDI event to the queue.
Definition: synthbase.cpp:908
This is a very specialized object that performs the hard-sync operation using two SynthClocks...
Definition: synthbase.h:365
Interface for PCM sample databases.
Definition: synthbase.h:838
double getNextModulationValue(uint32_t advanceClock=1)
Get the current output of the modulator; this is called repeatedly over the ramp modulation time...
Definition: synthbase.cpp:699
void setExpireMilliSec(double timeMSec, double sampleRate)
set target value
Definition: synthbase.h:206
float ** inputBuffer
array of input buffer pointers
Definition: synthbase.h:111
double modStart
ramp mod start value
Definition: synthbase.h:436
void setAlpha(double _alpha)
Definition: synthbase.h:2034
Implements a first order HPF with fc = 2.0Hz.
Definition: synthbase.h:2120
void destroyInputBuffers()
Destroy dynamically allocated input buffer; done at destruct time, or if client want to re-size buffe...
Definition: synthbase.cpp:51
void setDelayInSamples(double _delaySamples)
set delay time in samples; used to access the delay when reading
Definition: synthbase.h:1885
This is a tiny modulator object that produces an output that ramps up or down linearly between two va...
Definition: synthbase.h:412
double hardSyncFrequency
reset oscillator rate
Definition: synthbase.h:390
double unisonStartPhase
unison start phase value for this core
Definition: synthbase.h:1092
double processAudioSample(double xn, double loss=1.0)
run the filter
Definition: synthbase.h:2480
const uint64_t * uTable
table of 64-bit HEX values
Definition: synthbase.h:1237
Definition: synthbase.h:1855
XFadeType
Definition: synthconstants.h:81
uint32_t samplesInBlock
the number of samples to process in the block (in case of partial blocks)
Definition: synthbase.h:116
virtual bool removeTableSource(const char *uniqueTableName) override
remove a table source from the database
Definition: synthbase.cpp:1029
double mcounter
modulo counter [0.0, +1.0], this is the value you use
Definition: synthbase.h:170
double unisonDetuneCents
detuning value for this core
Definition: synthbase.h:1091
std::vector< midiEvent > midiEventQueue
queue
Definition: synthbase.h:1405
uint32_t startMIDINote
starting MIDI note for the glide
Definition: synthstructures.h:243
virtual void selectTable(uint32_t midiNoteNumber)=0
Objects that access the database will select a table based on the user's waveform selection...
void reset(double _sampleRate)
Definition: synthbase.h:2523
void advanceClock(uint32_t renderInterval=1)
Advance the clock some number of tics by adding the phaseInc value.
Definition: synthbase.cpp:239
const char * waveformName
waveform name
Definition: synthbase.h:1284
void reset(double _sampleRate)
Definition: synthbase.h:2364
void createCircularBuffer(uint32_t _bufferLength)
Definition: synthbase.h:1748
double state[NUM_VARS]
for state save
Definition: synthbase.h:177
double doWhiteNoise()
Function generate white noise.
Definition: synthbase.cpp:842
bool holding
state variable for holding
Definition: synthbase.h:308
virtual IPCMSampleSource * getSampleSource(const char *uniqueSampleSetName) override
selects a PCM sample source based on the unique table name
Definition: synthbase.cpp:1094
ModuleCoreData & getModuleData()
provides access to the core data:
Definition: synthbase.h:1564
void setParameters(double _fc, double _Q)
Definition: synthbase.h:2373
double BPM
beats per minute, aka "tempo"
Definition: synthbase.h:1399
DelayLine combDelay
for pluck position
Definition: synthbase.h:2954
double doGaussianWhiteNoise(double mean=0.0, double variance=1.0)
Function generate gaussian white noise.
Definition: synthbase.cpp:832
double processAudioSample(double xn)
run the filter
Definition: synthbase.h:2730
virtual bool getModKnobStrings(std::vector< std::string > &modKnobStrings)
Gets a std::vector of Mod Knob label strings for the selected core.
Definition: synthbase.cpp:1518
Implementation of a low shelving filter.
Definition: synthbase.h:2515
virtual double readWaveTable(double normalizedPhaseInc)=0
Read a table at a normalized index where 0.0 is the start of the table and 1.0 is the end of it...
uint32_t targetValueInSamples
curent target galue
Definition: synthbase.h:220
This structure defines a set of wavetables that are usually found in .h files and compiled into the s...
Definition: synthbase.h:1126
void reset(double _sampleRate)
Definition: synthbase.h:2602
virtual double getModValue(uint32_t index)=0
get a modulation value from the array for a certain channel
bool startModulator(double startNote, double endNote, double glideTime_mSec, double sampleRate)
Setup the timers and start the ramp modulator running. The modulator produces an output on the range ...
Definition: synthbase.cpp:751
std::shared_ptr< ModuleCore > moduleCores[NUM_MODULE_CORES]
Definition: synthbase.h:1675
virtual ~SynthModule()
Removes cores, if any.
Definition: synthbase.cpp:1421
ModuleCoreData moduleData
modulestrings (16) and mod knob labels (4)
Definition: synthbase.h:1679
void setHoldTimeSamples(double _holdTimeSamples)
Setting the hold time is slightly more complicated than the crossfade time becuase it may be done at ...
Definition: synthbase.cpp:470
virtual uint32_t getValidSampleCount()=0
query for valid sample count (not used in SynthLab but avialable)
Holds an array of filter output values; SynthLab filters can produce multiple outputs at once...
Definition: synthbase.h:988
const char * dllPath
path to the plugin, used for finding PCM sample WAV files
Definition: synthbase.h:1087
bool wrapClock()
Wrap the modulo counter; note that this will wrap the modulo counter as many times as needed to get i...
Definition: synthbase.cpp:263
double audioOutput[STEREO_CHANNELS]
array of audio output samples
Definition: synthbase.h:735
double readDelay()
read a delayed value at the location specified in the call to setDelayInSamples() ...
Definition: synthbase.h:1908
void flushBuffers()
clear out the audio; used often
Definition: synthbase.cpp:127
void advanceTimer(uint32_t ticks=1)
advance by 1
Definition: synthbase.h:215
void flushBuffer()
Definition: synthbase.h:1744
virtual double * getModArrayPtr(uint32_t index)=0
Used for the modulation matrix to have instant access to the array.
double processAudioSample(double xn)
run the filter
Definition: synthbase.h:2231
void init(uint32_t _numInputChannels, uint32_t _numOutputChannels, uint32_t _blockSize)
Main initializer that creates the new arrays and sets up the object.
Definition: synthbase.cpp:92
Information about a MIDI event.
Definition: synthstructures.h:166
virtual const char * getWaveformName()=0
void reset()
Definition: synthbase.h:2027
This structure holds all of the information needed to call functions on a ModuleCore object...
Definition: synthbase.h:1071
ModuleCore()
Constructs a ModuleCore.
Definition: synthbase.h:1524
double processAudioSample(double xn)
run the filter
Definition: synthbase.h:2818
uint64_t ** ppHexTableSet
pointers to sets of hex encoded tables
Definition: synthbase.h:1140
Comnination of three filters in one; note that the figure in the book does not show the variety of co...
Definition: synthbase.h:2862
Contains the two sets of strings unique to each core: the module strings (waveforms for oscillators) ...
Definition: synthstructures.h:264
double timerInc
timer incrementer value
Definition: synthbase.h:478
bool isActive()
checks to see if the modulator is running, or completed
Definition: synthbase.h:474
double glideTime_mSec
glide time to cover the range of notes
Definition: synthstructures.h:245
virtual bool getModuleStrings(std::vector< std::string > &moduleStrings, std::string ignoreStr="")
Gets a std::vector of Module Strings.
Definition: synthbase.cpp:1437
void setParameters(double _fc, double _Q)
Definition: synthbase.h:2288
const uint32_t kNumMIDICCs
Definition: synthconstants.h:577
virtual void setModValue(uint32_t index, double value)
set a value into a slot in the modulation array
Definition: synthbase.cpp:1388
bool setModTime(double modTime_mSec, double sampleRate)
Change the modulation time; this is optional.
Definition: synthbase.cpp:685
Abstract base class that encapsulates functionality of a module core; used with the Module-Core parad...
Definition: synthbase.h:1516
const uint32_t MAX_MODULATION_CHANNELS
Definition: synthconstants.h:39
virtual void deleteSamples()=0
Delete the samples, part of destruction process.
SynthClock crossFadeClock
crossfading timer
Definition: synthbase.h:388
float * getInputBuffer(uint32_t channel)
Get a naked pointer to an audio INPUT buffer by channel.
Definition: synthbase.cpp:148
void setParameters(double _fc, double _Q)
Definition: synthbase.h:2205
virtual PCMSampleOutput readSample(double &readIndex, double inc)=0
Read a PCM sample at a fractional read index location (not normalized)
double sampleRate
fs
Definition: synthbase.h:391
LP1PFilter bridgeIntegrator
for bridge LPF
Definition: synthbase.h:2955
Information about a MIDI note event (note on or note off).
Definition: synthstructures.h:212
uint32_t holdTime_Counter
hold timer counter
Definition: synthbase.h:307
midiEvent * getMidiEvent(uint32_t index)
gets a MIDI event within the event queue
Definition: synthbase.cpp:939
double fc
hardcoded fc value
Definition: synthbase.h:2169
double processAudioSample(double xn)
run the filter
Definition: synthbase.h:2094
uint32_t holdTime_Samples
target hold time
Definition: synthbase.h:306