/// <summary> /// Add an interval to this representation. /// </summary> /// <param name="interval">The interval to add.</param> /// <param name="direction">Which direction to go - up or down.</param> /// <returns>Null if there is no supported enharmonically correct representation of the requested interval. For example, /// adding a minor second to a Bb should return a Cb, but this is not supported so the result will be null. If there is /// a valid representation (for example, A# plus a minor second correctly yields B) it will be returned.</returns> public NoteRepresentation AddInterval(Interval interval, IntervalDirection direction = IntervalDirection.Up) { var coefficient = direction == IntervalDirection.Up ? 1 : -1; var newNoteNumber = this.Note.Number + (interval.NumberOfSemitones() * coefficient); var newNoteName = this.Name.AddNoteNames(interval.NumberOfNoteNames() * coefficient); var result = new Note(newNoteNumber).GetRepresentations().SingleOrDefault(r => r.Name == newNoteName); return result; }