Beispiel #1
0
        /// <summary>
        /// Reusable code snippet to shuffle a given oscillator
        /// </summary>
        /// <param name="index">Index of oscillator shuffler to target</param>
        /// <param name="pattern">Pattern to be mutated by this shuffle operation</param>
        private void RollShuffler(int index, ref LineCirclePattern pattern)
        {
            //check whether we should shuffle at all
            if (!Roll(GlobalShuffleChance))
            {
                return;
            }

            //check whether we should freeze
            if (Roll(FreezeChance))
            {
                Shufflers[index].RandomiseCenter(ref pattern.Oscillators[index]);
                pattern.Oscillators[index].Amplitude = 0;
            }
            else
            {
                Shufflers[index].RandomiseRange(ref pattern.Oscillators[index]);
                OscillatorShuffler.RandomisePhase(ref pattern.Oscillators[index]);

                //check whether we should use override frequency values
                if (Shufflers[index].OverrideFrequency)
                {
                    Shufflers[index].RandomiseFrequency(ref pattern.Oscillators[index]);
                }
                else
                {
                    OscillatorShuffler.RandomiseFrequency(ref pattern.Oscillators[index],
                                                          GlobalMinimumFrequency, GlobalMaximumFrequency);
                }
            }

            Shufflers[index].EnforceMaxFrequency(ref pattern.Oscillators[index]);
        }