public void Release() { if (State != StateADSR.Stopped && State != StateADSR.Release) { State = StateADSR.Release; timer = 0; } }
public double Step(double deltaTime) { if (Stopped) { return(0); } Amplitude = 1; if (State == StateADSR.Attack) { if (timer >= AttackTime) { State = StateADSR.Decay; timer -= AttackTime; } else { Amplitude = (float)(timer / AttackTime); } } if (State == StateADSR.Decay) { if (timer >= DecayTime) { State = StateADSR.Sustain; timer = 0; } else { float t = (float)(timer / DecayTime); Amplitude = Mathf.Lerp(1f, SustainVolume, t); } } if (State == StateADSR.Sustain) { Amplitude = SustainVolume; if (Mathf.Approximately(Amplitude, 0)) { State = StateADSR.Stopped; } } if (State == StateADSR.Release) { if (timer >= ReleaseTime) { State = StateADSR.Stopped; Amplitude = 0; } else { Amplitude = 1f - (float)(timer / ReleaseTime); } } timer += deltaTime; return(Amplitude); }
public void Trigger() { timer = 0; State = StateADSR.Attack; Amplitude = 0; }