| @@ -49,6 +49,11 @@ public: | |||||
| return x * x / 2.f; | return x * x / 2.f; | ||||
| } | } | ||||
| } | } | ||||
| void reset() { | |||||
| xPrev = 0.f; | |||||
| } | |||||
| private: | private: | ||||
| float xPrev = 0.f; | float xPrev = 0.f; | ||||
| }; | }; | ||||
| @@ -101,6 +106,10 @@ public: | |||||
| } | } | ||||
| } | } | ||||
| void reset() { | |||||
| xPrev = 0.f; | |||||
| } | |||||
| private: | private: | ||||
| float xPrev = 0.f; | float xPrev = 0.f; | ||||
| static constexpr float c = 0.1; | static constexpr float c = 0.1; | ||||
| @@ -142,7 +151,7 @@ struct PonyVCO : Module { | |||||
| chowdsp::VariableOversampling<6> oversampler; // uses a 2*6=12th order Butterworth filter | chowdsp::VariableOversampling<6> oversampler; // uses a 2*6=12th order Butterworth filter | ||||
| int oversamplingIndex = 1; // default is 2^oversamplingIndex == x2 oversampling | int oversamplingIndex = 1; // default is 2^oversamplingIndex == x2 oversampling | ||||
| DCBlocker blockTZFMDCFilter; | |||||
| dsp::RCFilter blockTZFMDCFilter; | |||||
| bool blockTZFMDC = true; | bool blockTZFMDC = true; | ||||
| // hardware doesn't limit PW but some user might want to (to 5%->95%) | // hardware doesn't limit PW but some user might want to (to 5%->95%) | ||||
| @@ -182,9 +191,12 @@ struct PonyVCO : Module { | |||||
| void onSampleRateChange() override { | void onSampleRateChange() override { | ||||
| float sampleRate = APP->engine->getSampleRate(); | float sampleRate = APP->engine->getSampleRate(); | ||||
| blockTZFMDCFilter.setFrequency(5. / sampleRate); | |||||
| blockTZFMDCFilter.setCutoffFreq(5.0 / sampleRate); | |||||
| oversampler.setOversamplingIndex(oversamplingIndex); | oversampler.setOversamplingIndex(oversamplingIndex); | ||||
| oversampler.reset(sampleRate); | oversampler.reset(sampleRate); | ||||
| stage1.reset(); | |||||
| stage2.reset(); | |||||
| } | } | ||||
| // implementation taken from "Alias-Suppressed Oscillators Based on Differentiated Polynomial Waveforms", | // implementation taken from "Alias-Suppressed Oscillators Based on Differentiated Polynomial Waveforms", | ||||
| @@ -209,7 +221,8 @@ struct PonyVCO : Module { | |||||
| float tzfmVoltage = inputs[TZFM_INPUT].getVoltage(); | float tzfmVoltage = inputs[TZFM_INPUT].getVoltage(); | ||||
| if (blockTZFMDC) { | if (blockTZFMDC) { | ||||
| tzfmVoltage = blockTZFMDCFilter.process(tzfmVoltage); | |||||
| blockTZFMDCFilter.process(tzfmVoltage); | |||||
| tzfmVoltage = blockTZFMDCFilter.highpass(); | |||||
| } | } | ||||
| const double pitch = inputs[VOCT_INPUT].getVoltage() + params[FREQ_PARAM].getValue() * range[rangeIndex]; | const double pitch = inputs[VOCT_INPUT].getVoltage() + params[FREQ_PARAM].getValue() * range[rangeIndex]; | ||||