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)
            });
        }