void MaybeAdvancesStage()
        {
            if (CurrentStage == AdsrStage.Attack)
            {
                if (currentSample > numAttackSamples)
                {
                    CurrentStage = AdsrStage.Decay;
                }
            }

            if (CurrentStage == AdsrStage.Decay)
            {
                if (currentSample > numAttackSamples + numDecaySamples)
                {
                    CurrentStage = AdsrStage.Sustain;
                }
            }

            if (CurrentStage == AdsrStage.Release)
            {
                if (currentSample - releaseSample > numReleaseSamples)
                {
                    CurrentStage = AdsrStage.Off;
                }
            }
        }
 public void Reset()
 {
     currentSample = 0;
     CurrentStage  = AdsrStage.Attack;
 }
 public void Release()
 {
     CurrentStage  = AdsrStage.Release;
     releaseSample = currentSample;
 }