public override void Reset() { _n = 0; _prev = 0; State = AdsrState.Attack; }
public override float NextSample() { float cur; if (_n > _sustain) { if (_state != AdsrState.Release) { State = AdsrState.Release; } cur = 0; } else if (_n > _decay) { if (_state != AdsrState.Sustain) { State = AdsrState.Sustain; } cur = 1; } else if (_n > _attack) { if (_state != AdsrState.Decay) { State = AdsrState.Decay; } cur = 1; } else { cur = _attackAmp; } _prev = _b * cur - _a * _prev; if (++_n == _release) { _n = 0; } return(_prev); }