public MinorKey(ToneClass Tone, Scale Scale) { this.Scale = Scale; SortedSet <int> tonesInKey = new SortedSet <int>(); int toneIndex = Scale.ToneIndex(Tone); TonePattern.ForEach((index) => tonesInKey.Add((toneIndex + index) % 12)); for (int i = 0; i < TonePattern.Count; i++) { Map[Scale.ToneAtIndex(BaseTonePattern[i])] = Scale.ToneAtIndex(tonesInKey.Min); tonesInKey.Remove(tonesInKey.Min); } Scale.ToneAtIndex(toneIndex + 2); }
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)); }