[Class]
midi-program-change

A MIDI control change or mode change event. See General MIDI Level 1 Sound Set for a table listing General MIDI (GM) program change messages.

midi-program-change supports the following slot initializations:

:time number
The start time of the object.
:channel integer
A MIDI channel number, defaults to 0.
:program integer
A MIDI program change value from 0-127. Note that most MIDI documentation lists program changes starting with 1. You must subtract 1 from these values. For example, Grand Piano is 0 (not 1).

Examples:

Example 1. Creating a "Multi" setup.

(define multi (time multi)
  (new seq :time time
     :subobjects
     (loop for x in multi
           collect
           (new midi-program-change :time 0
               :channel (first x) :program (second x)))))

(define (squeek reps)
  ;; assign random notes to instrument channels
  (process repeat reps
           for key = (between 40 80)
           for dur = (pick .5 1 1.5 2)
           for chan = (if (scale<= key 'c4)
                          (pick 0 1) 
                          (pick 2 3))
           output (new midi :time (now)
                       :duration .2
                       :keynum key :channel chan)
           wait (pick 0 .25 .5 .75 1)))

;;; chan 0=bass, chan 1=trombone, 2=violin, 3=flute
(define myins '((0 32) (1 57) (2 40) (3 73)))

(events (list (multi 0 myins) (squeek 30))
        "test.mid")
 "test.mid"

See also: