What is MIDI?
MIDI stands for Musical Instrument Digital Interface. It was a standard that came out in the early 1980's for the simple purpose of allowing electronic musical instruments of different manufacture to be able to communicate.
In a nutshell, MIDI is serial communication, over a single cable, that carries 16 channels of musical data. MIDI has nothing to do with sound, that is the purpose of the Sound Module / keyboard / computer sound card. All MIDI does, is transmit a series of numbers that tells the instrument what note to play, how hard to play it, controller information, and when to turn the note off.
As a side note, MIDI does not state how long to play a note. It sends a "NOTE ON / VELOCITY" statement, then when the note is to be stopped, MIDI sends a "NOTE OFF". This is very important to remember. If your sequencer is playing a large number of notes, and the MIDI connections gets disconnected or something similar, your sound module will never recieve a note off command. So, it will just sit there, playing all those notes. ARRRRGH!!! PANIC BUTTON!!!
What is a sequencer?
A sequencer is a device (Alesis MMT-8 or similar (wow, am I old or what?)) or program (CakeWalk or similar) that transmits MIDI information the way is was recorded or programmed. A sequencer normally has nothing to do with the actual sound that is heard (certain exceptions do apply, the Roland PMA-5 for example) with the exception of what voice to assign to a particular channel.
Why does a MIDI sound different between my computer and my friends?
The differences in sound you are hearing, is the difference between the sound cards. MIDI is nothing but notes, the sound is generated by the sound card in the computer. Different makes, and manufactures, will cause different sound synthesis.
So, what exactly is the format of MIDI?
Their is several types of data in MIDI ver 1.0.
Message types:
Channel: Channel messages contain a four-bit number in the Status byte which addresses the message specifically to one of sixteen channels. Their are two types of Channel messages.
Voice: to control the instrument's voices.
Mode: To define the instruments response to voice messages.
System: System messages are not encoded with channel numbers. Their are three types of system messages.
Common: Common messages are intended for all units in the system.
Real-Time: Real-Time messages are intended for all units in the system. They contain Status bytes only.
Exclusive: Exclusive messages can contain any number of Data Bytes, and are terminated by an End Of Exclusive (EOX) or any other status byte. These messages include a Manufacturer's Identification (ID) code. If the receiver does not recognise the ID code, it should ignore the following data.
Data Types:
Status Bytes: Status Bytes are eight bit binary numbers in which the Most Signicant Bit (MSB) is set (binary 1). Status bytes serve to identify the message type, the purpose of the data bytes which follow the status byte.
Running Status: For voice and mode messages only, when a status byte is received and processed, the receiver will remain in that status until a different status byte is received.
Unimplemented Status: Any status bytes received for functions which the receiver has not implemented should be ignored, and subsequent data bytes should be ignored.
Undefined Status: Undefined status bytes must not be used. Care should be taken to prevent illegal messages from being sent during power-up and power-down. If undefined states bytes are received, they should be ignored, along with the following data.
Data Bytes: Following the status byte, there are (except for real-time messages) one of two data bytes which carry the content of the message. Data bytes are eight-bit binary numbers in which the MSB is clear (binary 0). The number and range of the data bytes which must follow each status byte are various, and normally found on the MIDI Implementation chart for your instrument.
Summary Of Status Bytes Status # of Bytes Description 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 1011nnnn 2 Selects Channel Mode 11110000 ****** System Exclusive 11110sss 0 to 2 System Common 11111ttt 0 System Real Time
Notes:
nnnn: Channel Number. 0000=Channel 1, 0001=Channel 2, 1111=Channel 16
******: Manufactures ID#, Data, ......, EOX
sss: 1 to 7
ttt: 0 to 7
Channel Voice Messages Status Data Bytes Description 1000nnnn
0kkkkkkk
0vvvvvvv Note Off (see notes)
vvvvvvv: Note Off Velocity
1001nnnn
0kkkkkkk
0vvvvvvv Note On (see notes)
vvvvvvv>0:Note Velocity
vvvvvvv=0:Note Off
1010nnnn
0kkkkkkk
0vvvvvvv Polyphonic Key Pressure (After touch)
vvvvvvv: Pressure Value
1011nnnn
0ccccccc
0vvvvvvv Control Change
ccccccc: control # (0-121, 122-127 reserved)
vvvvvvv: Control Value
1100nnnn 0ppppppp Program Change
ppppppp: Program Number (0-127)
1101nnnn 0vvvvvvv Channel Pressure (After touch)
vvvvvvv: Pressure Value
1110nnnn
0vvvvvvv
0vvvvvvv Pitch Wheel Change LSB
Pitch Wheel Change MSB
Notes:
nnnn: Voice Channel # (1-16)
kkkkkkk: Note # (1-127) Middle C=60
vvvvvvv: Note Velocity (1-127)
ccccccc: Controller Number, total varies from module to module. Some common controllers are:
01 Modulation Wheel 02 Breath Controller 04 Foot Controller 05 Portamento Time 06 Data Entry Slider 07 Volume 08 Balance 10 Pan 11 Expression Controller 64 Damper (sustain) Pedal 65 Portamento 66 Sustenuto 67 Soft Pedal 69 Hold Pedal 91 External FX Depth 92 Tremelo Depth 93 Chorus Depth 94 Detune Depth 95 Phaser Depth
Reserved Controller Messages 121 Reset All Controllers 122 Local Control 123 All Notes On 124 OMNI Off 125 OMNI On 126 Mono On (Poly Off) 127 Poly On (Mono Off)