BASIC INFO
-MIDIL Musical Instrument Digital Interface
-Its a protocol
-Both for hardware and software
-Before MIDI, there were problems with incompatibility between synths
-MIDI proposed by Dave Smith at 1982 NAMM show
-Manufactures specified the actual MIDI stuff in 1983, showed up in gear in 84
-A lot of MIDI devices today are in software with just a USB interface, but the principles are still the same

HARDWARE
-Five pin connectors are the standard cable.  4-5 for digital, 2 is ground, others unconnected
-MIDI is serial, info only goes in one direction
-MIDI thru passes data from MIDI in directly to MIDI out with no internally generated info
-Devices can be chained together, but this produces delay
-Central hubs for devices are more efficient

ELECTRICAL SPECS
-MIDI is asynchronous, doesn't require a clock signal to transmit data
-rate is 31.25 kbit/sec
-a 0 turns current on, 1 off
-opto-isolator used to prevent ground loops.  Uses a light emitting diode and photo sensitive transistor

DATA FORMAT
-MIDI data flows in one direction and is binary data
-since MIDI is asynchronous, data is only transmitted when something is played, triggered, etc
-320 ms to send a MIDI byte, most messages have 3 bytes.
-therefore about 1000 messages can be sent per second.
-Messages can either be channel or system messages

BYTES
-Two types: Status and data
-Status always has 1 in MSB
	-next three bits determine what type of message it is.
	-last four bytes determine the channel number (1-16)
-Data byte starts with zero
	-uses all 8 spots, goes 1-128
	-simply determines the level of whatever type of message it is

CHANNEL MESSAGES
1000 - 0x8 - Note off (2 data, note & velocity)
1001 - 0x9 - Note on (2 data, note & velocity)
1010 - 0xA - Polyphonic Key Pressure (2 data, note and pressure)
1011 - 0xB - Control Change (2 data, controller number and controller value)
1100 - 0xC - Program Change (1 data, new program number)
1101 - 0xD - Channel Pressure (1 data, pressure value)
1110 - 0xE - Pitch Wheel Change (2 data, 14 bit pitch value)
1111 - 0xF - System Messages

CONTROLLER MESSAGES
-called real time controllers.
-allow data values to alter parameters in real time
-a dozen were assigned by MIDI 1.0, but users can choose ones for the other available 128 controllers
-16-19, 22-31 are usually empty

-0: Bank Select
-1: Mod wheel
-2: Breath controller
-3: Foot controller
-5: Portamento TIme
-6: Data Entry
-7: Channel Volume
-8: Balance
-10: Channel Pan
-11: Expression
-32: Bank Select (LSB)
-64: Sustain Pedal
-65: Portamento Switch
-66: Sostenuto
-67: Soft Pedal
-75: Legato
-91: FX Depth 1
-92: FX Depth 2
-96: Data Increment
-97: Data Decrement
-120-127: Reserved For Channel Mode

USING REALTIME CONTROLLERS
-map control number to a parameter to control different sound aspects
-There's a modulation source and modulation destination
-Source says where will the control come from, choose a # 1-128
-Destination says what the values are changing, such as what parameters
-Most of these parameters can be edited non-realtime as well in software (eg. Logic)

BANK SELECT
--only 128 possible program selections per channel
-control 0 or 32 switches to another bank of programs

sySEX
-sysex messages allow for individual manufacturers to send their message
-start; 0xF0 end:0xF7
-lets you fuck with the patches and all that shit