Example #1
0
        private static int FillFretNumbers(int[][] fretNumbers, Guitar guitar, int stringNumber, DiatonicScale scale)
        {
            int fretNumber    = 0;
            int minFretNumber = fretNumber;
            int maxFretNumber = fretNumber;

            using (IEnumerator <Interval> intervalEnumerator = scale.GetIntervalsAscending().GetEnumerator())
            {
                for (var i = 0; i < fretNumbers.Length; i++)
                {
                    for (var j = 0; j < fretNumbers[i].Length; j++)
                    {
                        fretNumbers[i][j] = fretNumber;
                        if (fretNumber > maxFretNumber)
                        {
                            maxFretNumber = fretNumber;
                        }

                        intervalEnumerator.MoveNext();
                        fretNumber += intervalEnumerator.Current.Semitones;
                    }

                    if (stringNumber < guitar.StringIntervals.Count)
                    {
                        fretNumber -= guitar.StringIntervals[stringNumber].Semitones;
                        if (fretNumber < minFretNumber)
                        {
                            minFretNumber = fretNumber;
                        }
                    }

                    stringNumber++;
                }
            }

            if (minFretNumber < 0)
            {
                ShiftFretNumbers(fretNumbers, -minFretNumber);
                maxFretNumber -= minFretNumber;
            }

            return(maxFretNumber);
        }