aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Kiefer <chrisk13fer@gmail.com>2011-12-21 16:10:33 +0000
committerChris Kiefer <chrisk13fer@gmail.com>2011-12-21 16:10:33 +0000
commit78c44f13463966c1bf3c2f7f86e65ba8d7efdfbc (patch)
treec27950b29653bbf92d3668b6c9d905391c46394a
parentb3d027d27f077ea1ccb92afd3c44612d94dae6ba (diff)
Flange and chorus
-rwxr-xr-xofxMaxim/ofxMaxim/libs/maximilian.h40
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