diff options
Diffstat (limited to 'ofxMaxim')
| -rw-r--r-- | ofxMaxim/ofxMaxim/libs/maximilian.cpp | 9 | ||||
| -rwxr-xr-x | ofxMaxim/ofxMaxim/libs/maximilian.h | 21 |
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 |
