aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Kiefer <chrisk13fer@gmail.com>2012-03-14 11:35:13 +0000
committerChris Kiefer <chrisk13fer@gmail.com>2012-03-14 11:35:13 +0000
commitdcdea1838e6f2c0b3011f89d3d7fb41c8e43eb05 (patch)
treec1875a01e10f5776890e262860048c048f2bf9e8
parentb4826eea761b6215dc385cff4aff18e8b5f442a7 (diff)
Envelope Follower
-rw-r--r--ofxMaxim/ofxMaxim/libs/maximilian.cpp9
-rwxr-xr-xofxMaxim/ofxMaxim/libs/maximilian.h21
2 files changed, 30 insertions, 0 deletions
diff --git a/ofxMaxim/ofxMaxim/libs/maximilian.cpp b/ofxMaxim/ofxMaxim/libs/maximilian.cpp
index 5326172..a6420b2 100644
--- a/ofxMaxim/ofxMaxim/libs/maximilian.cpp
+++ b/ofxMaxim/ofxMaxim/libs/maximilian.cpp
@@ -1026,3 +1026,12 @@ double convert::mtof(int midinote) {
return mtofarray[midinote];
}
+
+void maxiEnvelopeFollower::setAttack(double attackMS) {
+ attack = pow( 0.01, 1.0 / ( attackMS * maxiSettings::sampleRate * 0.001 ) );
+}
+
+void maxiEnvelopeFollower::setRelease(double releaseMS) {
+ release = pow( 0.01, 1.0 / ( releaseMS * maxiSettings::sampleRate * 0.001 ) );
+}
+
diff --git a/ofxMaxim/ofxMaxim/libs/maximilian.h b/ofxMaxim/ofxMaxim/libs/maximilian.h
index 85c4c16..6f4d384 100755
--- a/ofxMaxim/ofxMaxim/libs/maximilian.h
+++ b/ofxMaxim/ofxMaxim/libs/maximilian.h
@@ -442,4 +442,25 @@ inline double maxiChorus::chorus(const double input, const unsigned int delay, c
return (output1 + output2 + input) / 3.0;
}
+class maxiEnvelopeFollower {
+public:
+ maxiEnvelopeFollower() {
+ setAttack(100);
+ setRelease(100);
+ env = 0;
+ }
+ void setAttack(double attackMS);
+ void setRelease(double releaseMS);
+ inline double play(double input) {
+ input = fabs(input);
+ if (input>env)
+ env = attack * (env - input) + input;
+ else
+ env = release * (env - input) + input;
+ return env;
+ }
+private:
+ double attack, release, env;
+};
+
#endif