public void Transpose() { for (int steps = -7; steps <= 7; steps++) { MidiSequence seq1 = CreateScaleSequence(); MidiSequence seq2 = new MidiSequence(seq1); seq2.Transpose(steps); var onEvents1 = seq1.SelectMany(t => t.Events).OfType <OnNoteVoiceMidiEvent>().ToArray(); var offEvents1 = seq1.SelectMany(t => t.Events).OfType <OffNoteVoiceMidiEvent>().ToArray(); var onEvents2 = seq2.SelectMany(t => t.Events).OfType <OnNoteVoiceMidiEvent>().ToArray(); var offEvents2 = seq2.SelectMany(t => t.Events).OfType <OffNoteVoiceMidiEvent>().ToArray(); Assert.AreEqual(onEvents1.Length, onEvents2.Length); Assert.AreEqual(offEvents1.Length, offEvents2.Length); Assert.AreEqual(onEvents1.Length, offEvents1.Length); for (int i = 0; i < onEvents1.Length; i++) { Assert.AreEqual(onEvents1[i].Note + steps, onEvents2[i].Note); Assert.AreEqual(offEvents1[i].Note + steps, offEvents2[i].Note); } } }