166 inline double _calcFreq(
double modAmount);
177 inline double _calcLFOValue(
double freq,
double phaseModValue);
197 _outputMode(Parameters::OUTPUTMODE.defaultValue),
198 _bypassSwitch(Parameters::LFOSWITCH_DEFAULT),
199 _tempoSyncSwitch(Parameters::TEMPOSYNC_DEFAULT),
200 _phaseSyncSwitch(Parameters::PHASESYNC_DEFAULT),
201 _invertSwitch(Parameters::INVERT_DEFAULT),
202 _needsSeekOffsetCalc(true),
203 _tempoNumer(Parameters::TEMPONUMER.defaultValue),
204 _tempoDenom(Parameters::TEMPODENOM.defaultValue),
205 _rawFreq(Parameters::FREQ.defaultValue),
206 _modulatedFreqValue(0),
207 _rawDepth(Parameters::DEPTH.defaultValue),
208 _modulatedDepthValue(0),
209 _manualPhase(Parameters::PHASE.defaultValue),
210 _modulatedPhaseValue(0),
213 _wavetablePosition(0),
214 _waveArrayPointer(
Wavetables::getInstance()->getSine()) {
234 if (existingSource.source == source) {
245 if ((*it).source == source) {
266 if (existingSource.source == source) {
277 if ((*it).source == source) {
298 if (existingSource.source == source) {
309 if ((*it).source == source) {
328 double timeInSeconds) {
344 static int seekIndexOffset {0};
346 const double waveLength {1 /
_calcFreq(0)};
347 const double waveTimePosition {std::fmod(timeInSeconds, waveLength)};
349 seekIndexOffset =
static_cast<int>((waveTimePosition / waveLength) *
Wavetables::SIZE);
377 const double samplesPerTremoloCycle {
_sampleRate / freq};
385 const int phaseIndexOffset {
T BoundsCheck(T val) const
static constexpr int BIPOLAR
const double * _waveArrayPointer
virtual void _resetImpl() override
std::vector< ModulationSourceWrapper< double > > _phaseModulationSources
void prepareForNextBuffer(double bpm, double timeInSeconds)
RichterLFO(RichterLFO &)=delete
RichterLFO operator=(RichterLFO &other)=delete
virtual ~RichterLFO() override=default
double getModulatedPhaseValue() const
double _modulatedDepthValue
bool addDepthModulationSource(std::shared_ptr< ModulationSource > source)
bool getTempoSyncSwitch() const
void setTempoSyncSwitch(bool val)
std::vector< ModulationSourceWrapper< double > > _freqModulationSources
void setTempoDenom(int val)
bool getPhaseSyncSwitch() const
bool setDepthModulationAmount(size_t index, double amount)
void setOutputMode(int val)
double getModulatedFreqValue() const
bool removeDepthModulationSource(std::shared_ptr< ModulationSource > source)
bool getInvertSwitch() const
void setInvertSwitch(bool val)
std::vector< ModulationSourceWrapper< double > > getFreqModulationSources() const
void setManualPhase(double val)
double _getNextOutputImpl(double inSample) override
bool removePhaseModulationSource(std::shared_ptr< ModulationSource > source)
double getTempoNumer() const
std::vector< ModulationSourceWrapper< double > > _depthModulationSources
double _modulatedPhaseValue
void setTempoNumer(int val)
bool addFreqModulationSource(std::shared_ptr< ModulationSource > source)
double getManualPhase() const
bool addPhaseModulationSource(std::shared_ptr< ModulationSource > source)
double _calcLFOValue(double freq, double phaseModValue)
void setSampleRate(double val)
bool getBypassSwitch() const
std::vector< ModulationSourceWrapper< double > > getPhaseModulationSources() const
void _calcPhaseOffset(double timeInSeconds)
bool removeFreqModulationSource(std::shared_ptr< ModulationSource > source)
bool _needsSeekOffsetCalc
bool setFreqModulationAmount(size_t index, double amount)
void setPhaseSyncSwitch(bool val)
double getTempoDenom() const
double getModulatedDepthValue() const
std::vector< ModulationSourceWrapper< double > > getDepthModulationSources() const
double _calcFreq(double modAmount)
bool setPhaseModulationAmount(size_t index, double amount)
double _modulatedFreqValue
void setDepth(double val)
void setBypassSwitch(bool val)
double _wavetablePosition
static const Wavetables * getInstance()
static constexpr int SIZE
const double * getSidechain() const
const double * getSquare() const
const double * getSine() const
const double * getSaw() const
const ParameterDefinition::RangedParameter< double > FREQ(0, 20, 2)
const ParameterDefinition::RangedParameter< int > TEMPODENOM(1, 32, 1)
const OutputModeParameter OUTPUTMODE
const ParameterDefinition::RangedParameter< double > DEPTH(0, 1, 0.5)
const ParameterDefinition::RangedParameter< double > PHASE(0, 360, 0)
const ParameterDefinition::RangedParameter< int > TEMPONUMER(1, 32, 1)
SampleType calcModValue(const std::vector< ModulationSourceWrapper< SampleType > > &sources)