diff options
| author | Chris Kiefer <chrisk13fer@gmail.com> | 2011-12-21 16:10:33 +0000 |
|---|---|---|
| committer | Chris Kiefer <chrisk13fer@gmail.com> | 2011-12-21 16:10:33 +0000 |
| commit | 78c44f13463966c1bf3c2f7f86e65ba8d7efdfbc (patch) | |
| tree | c27950b29653bbf92d3668b6c9d905391c46394a /ofxMaxim | |
| parent | b3d027d27f077ea1ccb92afd3c44612d94dae6ba (diff) | |
Flange and chorus
Diffstat (limited to 'ofxMaxim')
| -rwxr-xr-x | ofxMaxim/ofxMaxim/libs/maximilian.h | 40 |
1 files changed, 35 insertions, 5 deletions
diff --git a/ofxMaxim/ofxMaxim/libs/maximilian.h b/ofxMaxim/ofxMaxim/libs/maximilian.h index d5234d1..0a3b95a 100755 --- a/ofxMaxim/ofxMaxim/libs/maximilian.h +++ b/ofxMaxim/ofxMaxim/libs/maximilian.h @@ -396,23 +396,53 @@ inline double maxiDistortion::fastAtanDist(const double in, const double shape) } -class maxiDelayEffect { +class maxiFlanger { public: //delay = delay time - ~800 sounds good //feedback = 0 - 1 //speed = lfo speed in Hz, 0.0001 - 10 sounds good //depth = 0 - 1 - double chorus(const double input, const unsigned int delay, const double feedback, const double speed, const double depth); + double flange(const double input, const unsigned int delay, const double feedback, const double speed, const double depth); maxiDelayline dl; maxiOsc lfo; }; -inline double maxiDelayEffect::chorus(const double input, const unsigned int delay, const double feedback, const double speed, const double depth) { +inline double maxiFlanger::flange(const double input, const unsigned int delay, const double feedback, const double speed, const double depth) +{ + //todo: needs fixing double output; double lfoVal = lfo.triangle(speed); - output = dl.dl(input, delay + (lfoVal * depth * delay) + 1, feedback) + input; - return output; + output = dl.dl(input, delay + (lfoVal * depth * delay) + 1, feedback) ; + double normalise = (1 - fabs(output)); + output *= normalise; + return (output + input) / 2.0; +} + +class maxiChorus { +public: + //delay = delay time - ~800 sounds good + //feedback = 0 - 1 + //speed = lfo speed in Hz, 0.0001 - 10 sounds good + //depth = 0 - 1 + double chorus(const double input, const unsigned int delay, const double feedback, const double speed, const double depth); + maxiDelayline dl, dl2; + maxiOsc lfo; + maxiFilter lopass; + +}; + +inline double maxiChorus::chorus(const double input, const unsigned int delay, const double feedback, const double speed, const double depth) +{ + //this needs fixing + double output1, output2; + double lfoVal = lfo.noise(); + lfoVal = lopass.lores(lfoVal, speed, 1.0) * 2.0; + output1 = dl.dl(input, delay + (lfoVal * depth * delay) + 1, feedback) ; + output2 = dl2.dl(input, (delay + (lfoVal * depth * delay * 1.02) + 1) * 0.98, feedback * 0.99) ; + output1 *= (1.0 - fabs(output1)); + output2 *= (1.0 - fabs(output2)); + return (output1 + output2 + input) / 3.0; } #endif |
