public ISingleSound RaiseSemitones(int Semitones, Scale scale) { int octave = Octave; int toneIndex = scale.ToneIndex(ToneClass); int newToneIndex = toneIndex + Semitones; while (newToneIndex < 0) { newToneIndex += scale.ToneCount(); octave--; } while (newToneIndex > scale.ToneCount()) { newToneIndex -= scale.ToneCount(); octave++; } return(new Tone(scale.ToneAtIndex(newToneIndex), octave)); }