|
- #include "Overdrive.hpp"
-
- using namespace dsp;
-
-
- Overdrive::Overdrive(float sr) : WaveShaper(sr) {
- init();
- noise = new Noise;
- tanh1 = new HQTanh(sr, 1);
- }
-
-
- void Overdrive::init() {
- WaveShaper::rs = new Resampler<1>(4);
- }
-
-
- void Overdrive::process() {
- WaveShaper::process();
- }
-
-
- void Overdrive::invalidate() {}
-
-
- double Overdrive::compute(double x) {
- double out, k;
- double in = clampd(x, -SHAPER_MAX_VOLTS, SHAPER_MAX_VOLTS);
-
- in *= clampd(gain, 0., 20.); // add gain
- in += clampd(bias * 2, -SHAPER_MAX_BIAS, SHAPER_MAX_BIAS); // add bias
-
- in *= OVERDRIVE_GAIN;
-
- in = tanh1->next(in * 1.5) * 1.5;
-
- double a = clampd(gain / 20, 0., .999999);
-
- k = 2 * a / (1 - a);
- in = (1 + k) * (in) / (1 + k * abs(in));
-
- in *= 1 / OVERDRIVE_GAIN * 0.3;
- // if (blockDC) in = dc->filter(in);
-
- out = in;
-
- return out;
- }
|