Beispiel #1
0
            private Accidental GetAccidental(int index, int noteValue)
            {
                var pitchValue      = (Mode.ModeIntervals[index].Semitones + Root.SemitonesAboveC).RollingRange(11);
                var accidentalValue = (pitchValue - noteValue);

                switch (accidentalValue)
                {
                case -11:
                    accidentalValue = 1;
                    break;

                case -10:
                    accidentalValue = 2;
                    break;

                case 11:
                    accidentalValue = -1;
                    break;

                case 10:
                    accidentalValue = -2;
                    break;
                }
                return(Accidentals.Single(a => a.SemitonesAwayFromNatural == accidentalValue));
            }
Beispiel #2
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);
        }
Beispiel #3
0
 public Note(NoteType type, PitchName pitch, int octave, bool isDotted, Accidentals accidental, bool isOverlaid)
 {
     Pitch      = pitch;
     Accidental = accidental;
     Octave     = octave;
     Type       = type;
     IsDotted   = isDotted;
     IsOverlaid = isOverlaid;
 }
Beispiel #4
0
        public static bool TryReadAccidental(Scanner scanner, ILogger logger,
                                             out LiteralNode <Accidental> accidentalNode)
        {
            var        accidentalText = scanner.ReadAnyPatternOf(@"\#\#", "bb", "♯♯", "♭♭", @"\#", "♯", "b", "♭", "\u1d12a", "\u1d12b");
            Accidental accidental;

            if (!Accidentals.TryParse(accidentalText, out accidental))
            {
                accidentalNode = null;
                return(false);
            }

            accidentalNode = new LiteralNode <Accidental>(accidental, scanner.LastReadRange);
            return(true);
        }
Beispiel #5
0
            public Pitch GetPitchByIntervalBelow(Interval interval)
            {
                var noteIndex = (Note.Index() - (interval.NoteIndex - 1)).RollingRange(6);
                var note      = Utilities.GetNoteByIndex(noteIndex);

                var semitones = SemitonesAboveC - interval.Semitones - note.SemitonesAboveC;

                if (semitones < -2)
                {
                    semitones += 12;
                }
                else if (semitones > 2)
                {
                    semitones -= 12;
                }
                var accidental = Accidentals.Single(a => a.SemitonesAwayFromNatural == semitones);

                return(new Pitch(note, accidental));
            }
Beispiel #6
0
		public Pitch(Step step = null, Octaves octaves = Octaves.First, Accidentals accidental = Accidentals.Natural)
		{
			this.Step = step ?? new Step();
			this.Octaves = octaves;
			this.Accidental = accidental;
		}
Beispiel #7
0
		public Alter(Accidentals alterValue):this()
		{
			Value = alterValue;
		}