コード例 #1
0
 /// <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;
 }