Пример #1
0
        public static Note[][] GetDiddy(int length, int genSeed = 0)
        {
            Random r;

            if (genSeed == 0)
            {
                r = new Random();
            }
            else
            {
                r = new Random(genSeed + Art.SeedShifter);
            }

            Note[][] diddy = new Note[length][];

            Note  startNote = GetRandomNote(r);
            Scale scale     = new Scale(startNote, Scale.GetRandomScaleType(r));
            int   lastStart = -999;

            for (int i = 0; i < length; i++)
            {
                int numNotes    = r.Next(4);
                int startDegree = -999;
                while (startDegree == lastStart)
                {
                    startDegree = r.Next(0, 8);
                }
                switch (numNotes)
                {
                case 1:
                    Note n = scale.GetNote(startDegree);
                    diddy[i] = new[] { n };
                    break;

                case 2:
                    Note start    = scale.GetNote(startDegree);
                    int  interval = r.Next(2, 5);
                    diddy[i] = new[] { start, start.GetInterval(interval, Tonality.Major) };
                    break;

                default:
                    Note[] triad = scale.GetTriad(startDegree, Tonality.Major, r.Next(0, 3));
                    diddy[i] = triad;
                    break;
                }

                lastStart = startDegree;
            }

            Note[] finalTriad = scale.GetTriad(0, Tonality.Major, 1);

            diddy[diddy.Length - 1] = finalTriad;
            Debug.Log("First Note: " + startNote);
            diddy.PrintNoteArray();
            return(diddy);
        }