diff --git a/plugin/chorus.cpp b/plugin/chorus.cpp index f8f4372..1f6b779 100644 --- a/plugin/chorus.cpp +++ b/plugin/chorus.cpp @@ -55,14 +55,14 @@ Chorus::~Chorus() { delete postFilter2r; } -void Chorus::run(const float* input, float** outputs, uint32_t frames) { +void Chorus::run(float* input, float** outputs, uint32_t frames) { // actual effects here // FIXME add highpass filter // now run the DSP float s0 = 0, s1 = 0; - float lfoMod, dly1, frac; + float lfoMod, dly1, frac, flt; uint16_t tap, delay; for (uint32_t i = 0; i < frames; i++) { @@ -70,6 +70,10 @@ void Chorus::run(const float* input, float** outputs, uint32_t frames) { fastPhase += fastOmega; if (fastPhase > 6.283) fastPhase -= 6.283; + flt = ((hpdelay - input[i]) * hpcut) + input[i]; + hpdelay = flt; + input[i] += (flt * hpgain); + ram[delayptr] = input[i]; #define BASE 0.005 @@ -115,6 +119,24 @@ void Chorus::run(const float* input, float** outputs, uint32_t frames) { } void Chorus::setHpf(uint8_t mode) { + switch (mode) { + case 0x00: + hpcut = 0.91245; + hpgain = -1; + break; + case 0x08: + hpcut = 0.97097; + hpgain = -1; + break; + case 0x10: + hpcut = 1; + hpgain = 0; + break; + case 0x18: + hpcut = 0.99088; + hpgain = 1; + break; + } } void Chorus::setChorus(uint8_t mode) { diff --git a/plugin/chorus.hpp b/plugin/chorus.hpp index 8dc7328..5596fc2 100644 --- a/plugin/chorus.hpp +++ b/plugin/chorus.hpp @@ -33,7 +33,7 @@ class Chorus { public: Chorus(); ~Chorus(); - void run(const float* input, float** outputs, uint32_t frames); + void run( float* input, float** outputs, uint32_t frames); void setHpf(uint8_t mode); void setChorus(uint8_t mode); @@ -47,6 +47,8 @@ class Chorus { float* lpfIn; float *lpfOut1, *lpfOut2; + float hpdelay=0, hpcut=0, hpgain=1; + SVF *postFilter1l, *postFilter2l, *postFilter1r, *postFilter2r; }; #endif diff --git a/plugin/module.cpp b/plugin/module.cpp index 5c8a8df..3c4d7a5 100644 --- a/plugin/module.cpp +++ b/plugin/module.cpp @@ -43,6 +43,7 @@ void Module::run(Voice* voice) { noise = patchRam.noise / 127.0; chorus->setChorus(patchRam.switch1 & 0x60); + chorus->setHpf(patchRam.switch2 & 0x18); if (lfoPhase & 0x4000) lfo = 0x1fff - (lfoPhase & 0x3fff);