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)); }
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); }
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; }
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); }
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)); }
public Pitch(Step step = null, Octaves octaves = Octaves.First, Accidentals accidental = Accidentals.Natural) { this.Step = step ?? new Step(); this.Octaves = octaves; this.Accidental = accidental; }
public Alter(Accidentals alterValue):this() { Value = alterValue; }