public ChorusEffect(int minDelay, int maxDelay, double rate, ChorusEffector.DelayType delayType, Effect prior)
     : base(prior)
 {
     this.minDelay  = minDelay;
     this.maxDelay  = maxDelay;
     this.rate      = rate;
     this.delayType = delayType;
 }
        private Effect BuildChorusEffect(string[] effectArguments, Effect lastEffect)
        {
            if (effectArguments.Length == 2 || effectArguments.Length > 5)
            {
                throw new EffectParsingException(
                          $"Incorrect argument count for ChorusEffect. Expected: 0, 2, or 3, Received: {effectArguments.Length - 1}");
            }

            int minDelay = SafeParseAndVerifyInt(
                effectData: effectArguments,
                position: 0,
                minValue: 0,
                maxValue: 200,
                defaultValue: 40,
                parameterName: "ChorusEffect MinDelay");

            int maxDelay = SafeParseAndVerifyInt(
                effectData: effectArguments,
                position: 1,
                minValue: 0,
                maxValue: 200,
                defaultValue: 60,
                parameterName: "ChorusEffect MaxDelay");

            if (maxDelay < minDelay)
            {
                //swap
                (maxDelay, minDelay) = (minDelay, maxDelay);
            }

            double rate = SafeParseAndVerifyDouble(
                effectData: effectArguments,
                position: 2,
                minValue: 0.125,
                maxValue: 100.0,
                defaultValue: 0.25,
                parameterName: "ChorusEffect Rate");

            ChorusEffector.DelayType delayType = SafeParseAndVerifyEnum(
                effectData: effectArguments,
                position: 3,
                translationDelegate: ChorusEffect.TranslateDelayType,
                isValidDelegate: x => x != ChorusEffector.DelayType.MAX,
                defaultValue: ChorusEffector.DelayType.Sine,
                notValidError: "Must be \"Sine\" or \"Triangle\"",
                parameterName: "ChorusEffect DelayType");

            return(new ChorusEffect(minDelay, maxDelay, rate, delayType, lastEffect));
        }