[net.music.synth] MIDI codes

chriss@midas.UUCP (Chris Shirkoff) (03/19/85)

Just received my copy of the Roland Users Group (vol 3, No. 1 available 
by writing to RolandCorp US, 7200 Dominion Circle, Los Angeles, CA 90040)
As usual, it has some useful information along with the obligatory marketing 
hype.

Of interest to probably all MIDI users was the detailed description of MIDI. --
but first, one last comment on the subject of interfaces:  MIDI is a current-
loop interface with opto-isolators used in all the implementations I am 
familiar with.  

I saw a posting recently on net.micro.mac stating that the transfer rate for
MIDI was 32000 baud.   Not so -- I have seen it mentioned enough times in
KEYBOARD and other sources -- yes folks, it's 31,250 bits per second.

Now for the good stuff: (paraphrasing Roland, of course)

GENERAL

Any group of eight bits that starts with 1 is a "what to do" byte.  In 
MIDI this is called status since it tells the sythesizer what it should 
be doing currently.

A byte that begins with 0 is used by the synthesizer as data.  It tells 
"how much" of the current status to do.  If we send a status byte that 
says a key has been pressed, we follow that with information that tells 
which key and how fast.  That is the data.

The simple act of pushing a key will require three bytes:
	1. The status byte to say that a note is being played;
	2. The first data byte to say which note it is;
	3. The second data byte to say how hard the key was hit.
	   (if your synth doesn't have a velocity sensitive keyboard,
	   default values are used for note-on and note-off velocity)

SUMMARY OF MIDI STATUS BYTES

Status	   No. of Data	Description
D7 to D0      Bytes
--------   -----------	------------------------------------
Channel Voice Messages
----------------------
1000nnnn	2	Note-off event
1001nnnn	2	Note-on event (velocity=0: note off)
1010nnnn	2	Polyphonic key pressure/aftertouch
1011nnnn	2	Control change
1100nnnn	1	Program change
1101nnnn	1	Channel pressure/aftertouch
1110nnnn	2	Pitch wheel change

Channel Mode Messages
---------------------
1011nnnn	2	Selects channel mode

System Messages
---------------
11110000       ****	System exclusive
11110sss      0 to 2	System common
11111ttt	0	System real time

Notes:
	nnnn:	N-1, where N = channel number
		(i.e., 0000 = channel 1; 0001 = channel 2 
		... 1111 = channel 16.)
	****:	0iiiiiii, data, ... , EOX
	iiii:	Identification
	sss:	1 to 7
	ttt:	1 to 7

Channel Voice Messages
----------------------
Status		Data Bytes	Description
--------	----------	------------------------------------
1000nnnn	0kkkkkkk	Note off
		0vvvvvvv	vvvvvvv: note-off velocity

1001nnnn	0kkkkkkk	Note on
		0vvvvvvv	vvvvvvv <> 0: velocity
				vvvvvvv = 0: note off

1010nnnn	0kkkkkkk	Polyphonic key pressure (aftertouch)
		0vvvvvvv	vvvvvvv: pressure value

1011nnnn	0ccccccc	Control change
		0vvvvvvv	ccccccc: control number (0 to 121)
				vvvvvvv: control value
				ccccccc = 122 through 127: reserved.

1100nnnn	0ppppppp	Program change
				ppppppp: program number (0 to 127)

1101nnnn	0vvvvvvv	Channel pressure (aftertouch)
				vvvvvvv: pressure value

1110nnnn	0vvvvvvv	Pitch wheel change LSB
		0vvvvvvv	Pitch wheel change MSB
---------------------------------------------------------------------------

Stay tuned for further updates.

________________________________________________________________________________
 Chris Shirkoff                         USENET   :  ...!tektronix!midas!chriss 
 Tektronix, Inc.                        CSnet    : chriss.midas.tektronix
 PO Box 9600 MS 94-442                  
 Beaverton, Oregon  97075               Tel      : (503) 629-1157


	
-- 

---------------------------------------
UUCP:	tektronix!midas!chriss
USMAIL:	Chris Shirkoff
	Tektronix, Inc.,
	PO Box 4600  MS 94-442
	Beaverton, Oregon  97075