Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: AverageMCP3008 VoltageMonitor mbed-rtos mbed mcp3008
Fork of KIK01_Proto05 by
EnvelopeAR.h
- Committer:
- ryood
- Date:
- 2017-09-17
- Revision:
- 22:a3bb7594f9bb
- Child:
- 24:e9fbadd15e90
File content as of revision 22:a3bb7594f9bb:
/*
* 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_
