KIK01 Proto 08
Dependencies: AverageMCP3008 VoltageMonitor mbed-rtos mbed mcp3008
Fork of KIK01_Proto07 by
Diff: EnvelopeAR.h
- Revision:
- 22:a3bb7594f9bb
- Child:
- 24:e9fbadd15e90
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/EnvelopeAR.h Sun Sep 17 19:11:41 2017 +0000 @@ -0,0 +1,127 @@ +/* + * AR Type Envelope Class + * + * 2017.09.18 + * + */ + + #ifndef _ENVELOPE_AR_H_ + #define _ENVELOPE_AR_H_ + + class EnvelopeAR +{ +public: + EnvelopeAR(int _attack, int _release, float _v0, float _v1, float _v2, float _attackTauRatio=0.36f, float _releaseTauRatio=0.36f) : + amplitude(_v0), + v0(_v0), + v1(_v1), + v2(_v2), + vLast(_v0), + attackTauRatio(_attackTauRatio), + releaseTauRatio(_releaseTauRatio) { + setAttack(_attack); + setRelease(_release); + } + + ~EnvelopeAR() {} + + void setAttack(int _attack) { + attack = _attack; + tau0 = attack * attackTauRatio; + } + int getAttack() { + return attack; + } + + void setRelease(int _release) { + release = _release; + tau1 = release * releaseTauRatio; + } + int getRelease() { + return release; + } + + void setAttackTauRatio(float _attackTauRatio) { + attackTauRatio = _attackTauRatio; + tau0 = attack * attackTauRatio; + } + float getAttackTauRatio() { + return attackTauRatio; + } + + void setReleaseTauRatio(float _releaseTauRatio) { + releaseTauRatio = _releaseTauRatio; + tau1 = release * releaseTauRatio; + } + float getReleaseTauRatio() { + return releaseTauRatio; + } + + float getTau0() { + return tau0; + } + float getTau1() { + return tau1; + } + + void setV0(float _v0) { + v0 = _v0; + } + float getV0() { + return v0; + } + void setV1(float _v1) { + v1 = _v1; + } + float getV1() { + return v1; + } + void setV2(float _v2) { + v2 = _v2; + } + float getV2() { + return v2; + } + + float getAmplitude() { + return amplitude; + } + float getAmplitude(int tick) { + if (tick < attack) { + // attackの処理 + amplitude = v0 + (v1 - v0) * (1 - expf(-(float)tick / tau0)); + vLast = amplitude; + } else { + // releaseの処理 + amplitude = (vLast - v2) * (expf(-(float)(tick - attack) / tau1)) + v2; + } + return amplitude; + } + +private: + int attack; + int release; + float amplitude; + float v0; + float v1; + float v2; + float vLast; + float tau0; + float tau1; + float attackTauRatio; + float releaseTauRatio; +}; + +class EnvelopeParam +{ +public: + int attack; + int release; + float v0; + float v1; + float v2; + float attackTauRatio; + float releaseTauRatio; +}; + +#endif //_ENVELOPE_AR_H_