public void ProgramChange_GeneralMidiProgram() { var program1 = GeneralMidiProgram.Applause; var program2 = GeneralMidiProgram.AltoSax; var eventTime = MusicalTimeSpan.Quarter; var noteNumber = (SevenBitNumber)100; var note = DryWetMidi.MusicTheory.Note.Get(noteNumber); var pattern = new PatternBuilder() .ProgramChange(program1) .Note(note, eventTime) .ProgramChange(program2) .Build(); PatternTestUtilities.TestTimedEventsWithExactOrder(pattern, new[] { new TimedEventInfo(new ProgramChangeEvent(program1.AsSevenBitNumber()) { Channel = PatternTestUtilities.Channel }, new MidiTimeSpan()), new TimedEventInfo(new NoteOnEvent(noteNumber, DryWetMidi.Interaction.Note.DefaultVelocity) { Channel = PatternTestUtilities.Channel }, new MidiTimeSpan()), new TimedEventInfo(new ProgramChangeEvent(program2.AsSevenBitNumber()) { Channel = PatternTestUtilities.Channel }, eventTime), new TimedEventInfo(new NoteOffEvent(noteNumber, SevenBitNumber.MinValue) { Channel = PatternTestUtilities.Channel }, eventTime) }); }