You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
872B

  1. #include "Overdrive.hpp"
  2. using namespace dsp;
  3. Overdrive::Overdrive(float sr) : WaveShaper(sr) {
  4. init();
  5. noise = new Noise;
  6. tanh1 = new HQTanh(sr, 1);
  7. }
  8. void Overdrive::init() {
  9. WaveShaper::rs = new Resampler<1>(4);
  10. }
  11. void Overdrive::process() {
  12. WaveShaper::process();
  13. }
  14. void Overdrive::invalidate() {}
  15. double Overdrive::compute(double x) {
  16. double out, k;
  17. double in = clampd(x, -SHAPER_MAX_VOLTS, SHAPER_MAX_VOLTS);
  18. in *= clampd(gain, 0., 20.); // add gain
  19. in += clampd(bias * 2, -SHAPER_MAX_BIAS, SHAPER_MAX_BIAS); // add bias
  20. in *= OVERDRIVE_GAIN;
  21. in = tanh1->next(in * 1.5) * 1.5;
  22. double a = clampd(gain / 20, 0., .999999);
  23. k = 2 * a / (1 - a);
  24. in = (1 + k) * (in) / (1 + k * abs(in));
  25. in *= 1 / OVERDRIVE_GAIN * 0.3;
  26. // if (blockDC) in = dc->filter(in);
  27. out = in;
  28. return out;
  29. }