10namespace tracktion {
inline namespace engine
14ExpEnvelope::ExpEnvelope()
16 calculateAttackTime();
18 calculateReleaseTime();
21void ExpEnvelope::calculateAttackTime()
23 float samples =
float (sampleRate * attackTime);
25 attackCoeff =
std::exp (-
std::log ((1.0f + attackTCO) / attackTCO) /
float (samples));
26 attackOffset = (1.0f + attackTCO) * (1.0f - attackCoeff);
29void ExpEnvelope::calculateDecayTime()
31 float samples =
float (sampleRate * decayTime);
34 decayOffset = (sustainLevel - decayTCO) * (1.0f - decayCoeff);
37void ExpEnvelope::calculateReleaseTime()
39 float samples =
float (sampleRate * releaseTime);
41 releaseCoeff =
std::exp (-
std::log ((1.0f + releaseTCO) / releaseTCO) / samples);
42 releaseOffset = -releaseTCO * (1.0f - releaseCoeff);