Example #1
0
        public override void Reset()
        {
            _n    = 0;
            _prev = 0;

            State = AdsrState.Attack;
        }
Example #2
0
        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);
        }