KIK01 Proto 08

Dependencies:   AverageMCP3008 VoltageMonitor mbed-rtos mbed mcp3008

Fork of KIK01_Proto07 by Ryo Od

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers EnvelopeAR.h Source File

EnvelopeAR.h

00001 /*
00002  * AR Type Envelope Class
00003  *
00004  * 2017.09.18
00005  *
00006  */
00007 
00008 #ifndef _ENVELOPE_AR_H_
00009 #define _ENVELOPE_AR_H_
00010 
00011 class EnvelopeParam
00012 {
00013 public:
00014     int attack;
00015     int release;
00016     float v0;
00017     float v1;
00018     float v2;
00019     float attackTauRatio;
00020     float releaseTauRatio;
00021 };
00022 
00023 class EnvelopeAR
00024 {
00025 public:
00026     EnvelopeAR(int _attack, int _release, float _v0, float _v1, float _v2, float _attackTauRatio=0.36f, float _releaseTauRatio=0.36f) :
00027         amplitude(_v0),
00028         v0(_v0),
00029         v1(_v1),
00030         v2(_v2),
00031         attackTauRatio(_attackTauRatio),
00032         releaseTauRatio(_releaseTauRatio)
00033     {
00034         setAttack(_attack);
00035         setRelease(_release);
00036     }
00037 
00038     EnvelopeAR(const EnvelopeParam& param) :
00039         amplitude(param.v0),
00040         v0(param.v0),
00041         v1(param.v1),
00042         v2(param.v2),
00043         attackTauRatio(param.attackTauRatio),
00044         releaseTauRatio(param.releaseTauRatio)
00045     {
00046         setAttack(param.attack);
00047         setRelease(param.release);
00048     }
00049 
00050     ~EnvelopeAR() {}
00051 
00052     void setAttack(int _attack) {
00053         attack = _attack;
00054         tau0 = attack * attackTauRatio;
00055     }
00056     int getAttack() {
00057         return attack;
00058     }
00059 
00060     void setRelease(int _release) {
00061         release = _release;
00062         tau1 = release * releaseTauRatio;
00063     }
00064     int getRelease() {
00065         return release;
00066     }
00067 
00068     void setAttackTauRatio(float _attackTauRatio) {
00069         attackTauRatio = _attackTauRatio;
00070         tau0 = attack * attackTauRatio;
00071     }
00072     float getAttackTauRatio() {
00073         return attackTauRatio;
00074     }
00075 
00076     void setReleaseTauRatio(float _releaseTauRatio) {
00077         releaseTauRatio = _releaseTauRatio;
00078         tau1 = release * releaseTauRatio;
00079     }
00080     float getReleaseTauRatio() {
00081         return releaseTauRatio;
00082     }
00083 
00084     float getTau0() {
00085         return tau0;
00086     }
00087     float getTau1() {
00088         return tau1;
00089     }
00090 
00091     void setV0(float _v0) {
00092         v0 = _v0;
00093     }
00094     float getV0() {
00095         return v0;
00096     }
00097     void setV1(float _v1) {
00098         v1 = _v1;
00099     }
00100     float getV1() {
00101         return v1;
00102     }
00103     void setV2(float _v2) {
00104         v2 = _v2;
00105     }
00106     float getV2() {
00107         return v2;
00108     }
00109 
00110     float getAmplitude() {
00111         return amplitude;
00112     }
00113     
00114     void setParam(const EnvelopeParam& param) {
00115         setV0(param.v0);
00116         setV1(param.v1);
00117         setV2(param.v2);
00118         setAttackTauRatio(param.attackTauRatio);
00119         setReleaseTauRatio(param.releaseTauRatio);
00120         setAttack(param.attack);
00121         setRelease(param.release);
00122     }
00123 
00124     float getAmplitude(int tick) {
00125         if (tick <= attack) {
00126             // attackの処理
00127             amplitude = v0 + (v1 - v0) * (1 - expf(-(float)tick / tau0));
00128         } else {
00129             // releaseの処理
00130             float vAttack = v0 + (v1 - v0) * (1 - expf(-attack / tau0));
00131             amplitude = (vAttack - v2) * (expf(-(float)(tick - attack) / tau1)) + v2;
00132         }
00133         return amplitude;
00134     }
00135 
00136 private:
00137     int attack;
00138     int release;
00139     float amplitude;
00140     float v0;
00141     float v1;
00142     float v2;
00143     float tau0;
00144     float tau1;
00145     float attackTauRatio;
00146     float releaseTauRatio;
00147 };
00148 
00149 #endif //_ENVELOPE_AR_H_