Beispiel #1
0
        public static KeySignature Parse(string input)
        {
            var inputArr = input.Split(' ');
            var tonicAndAccidentalArr = inputArr[0].ToCharArray();

            if (inputArr.Length == 2 &&
                (tonicAndAccidentalArr.Length == 2 ||
                 tonicAndAccidentalArr.Length == 1))
            {
                var tonic      = char.ToUpper(tonicAndAccidentalArr[0]);
                var accidental = tonicAndAccidentalArr.Length == 2 ? tonicAndAccidentalArr[1].ToString() : "";
                var mode       = inputArr[1].ToLower().FirstCharToUpper();

                if (Scale.Contains(tonic) && Accidentals.Contains(accidental) &&
                    Modes.Contains(mode))
                {
                    return(new KeySignature(tonic, accidental, mode));
                }
                else
                {
                    Console.WriteLine($"One or more parts of '{input}' are not valid. Ensure your key signature has no double sharps or double flats.");
                }
            }
            else
            {
                Console.WriteLine($"'{input}' is not a valid key signature. Must contain a tonic and mode separated by a space. (e.g., Bb Major)");
            }
            return(null);
        }