midi 1.0 specification

status data byte(s) description
d7----d0 d7----d0
channel voice messages
1000cccc 0nnnnnnn note off event.
0vvvvvvv this message is sent when a
note is released (ended).
(nnnnnnn) is the note number.
(vvvvvvv) is the velocity.

1001cccc 0nnnnnnn note on event.
0vvvvvvv this message is sent when a
note is depressed (start).
(nnnnnnn) is the note number.
(vvvvvvv) is the velocity.

1010cccc 0nnnnnnn polyphonic key pressure (after-touch).
0vvvvvvv this message is sent when the pressure
(velocity) of a previously
triggered note changes.
(nnnnnnn) is the note number.
(vvvvvvv) is the new velocity.

1011cccc 0ccccccc control change.
0vvvvvvv this message is sent when a controller
value changes. controllers include devices
such as pedals and levers.
certain controller numbers are reserved
for specific purposes. see channel mode messages.
(ccccccc) is the controller number.
(vvvvvvv) is the new value.

1100cccc 0ppppppp program change.
this message sent when the patch number changes.
(ppppppp) is the new program number.

1101nnnn 0ccccccc channel pressure (after-touch).
this message is sent when the channel pressure
changes. some velocity-sensing keyboards do not
support polyphonic after-touch. use this
message to send the single greatest velocity
(of all te current depressed keys).
(ccccccc) is the channel number.

1110nnnn 0lllllll pitch wheel change.
0mmmmmmm this message is sent to indicate a change in the
pitch wheel. the pitch wheel is measured by a
fourteen bit value. center (no pitch change) is
2000h. sensitivity is a function of the
(llllll) are the least significant 7 bits.
(mmmmmm) are the most significant 7 bits.
channel mode messages (see also control change, above)
1011nnnn 0ccccccc channel mode messages.
0vvvvvvv this the same code as the control
change (above), but implements mode
control by using reserved controller
numbers. the numbers are:

local control.
when local control is off, all devices
on a given channel will respond only to
data received over midi. played data, etc.
will be ignored. local control on
restores the functions of the normal
c = 122, v = 0: local control off
c = 122, v = 127: local control on

all notes off.
when an all notes off is received,
all oscillators will turn off.
c = 123, v = 0: all notes off

(see text for description of actual
mode commands.)
c = 124, v = 0: omni mode off
c = 125, v = 0: omni mode on
c = 126, v = m: mono mode on (poly off)
where m is the number of channels
(omni off) or 0 (omni on)
c = 127, v = 0: poly mode on (mono off)
(note: these four messages also cause
all notes off)
system common messages
11110000 0iiiiiii system exclusive.
0ddddddd this message makes up for all that midi
.. doesn't support. (iiiiiii) is a seven
.. bit manufacturer's i.d. code. if the
0ddddddd synthesizer recognizes the i.d. code as
11110111 its own, it will listen to the rest of
the message (ddddddd). otherwise, the
message will be ignored. system exclusive
is used to send bulk dumps such as patch
parameters and other non-spec data.
(note: real-time messages only may be
interleaved with a system exclusive.)

11110001 undefined.

11110010 0lllllll song position pointer.
0mmmmmmm this is an internal 14 bit register that
holds the number of midi beats (1 beat=
six midi clocks) since the start of
the song. l is the lsb, m the msb.

11110011 0sssssss song select.
the song select specifies which sequence
or song is to be played.

11110100 undefined.

11110101 undefined.

11110110 tune request.
upon receiving a tune request, all analog
sythesizers should tune their oscillators.

11110111 end of exclusive.
used to terminate a system exclusive
dump (see above).
system real-time messages
11111000 timing clock.
sent 24 times per quarter note when
synchronization is required (see text).

11111001 undefined.

11111010 start.
start the current sequence playing.
(this message will be followed with
timing clocks).

11111011 continue.
continue at the point the sequence was

11111100 stop.
stop the current sequence.

11111101 undefined.

11111110 active sensing.
use of this message is optional. when
initially sent, the receiver will expect
to receive another active sensing message
each 300ms (max), or it will be assume
that the connection has been terminated.
at termination, the receiver will turn off
all voices and return to normal (non-
active sensing) operation.

11111111 reset.
reset all receivers in the system to
power-up status. this should be used
sparingly, preferably under manual
control. in particular, it should not
be sent on power-up.

-- greg, lee@uhccux.uhcc.hawaii.edu