Introductory Guide to MIDI
- What is MIDI ?
- Quick History
- Basic MIDI
- Computer Control
- MIDI Files
- General MIDI (GM)
- GS and XG
- Down-Loadable Sounds (DLS)
- MIDI Specification
What is MIDI ?
MIDI is an acronym for Musical Instrument Digital Interface. It is both a hardware and software specification.
It allows electronic musical instruments (synthesizers, samplers, drum machines, etc) and MIDI-capable computers to be connected to one another, and for musical performance related data to be communicated between them.
The hardware aspect of the specification defines a serial type of interface, similar to RS232, though with a fixed data transfer rate of 31250 baud (which equates to approximately 3000 bytes/sec), and using 5-pin DIN connectors, and lacking the handshaking control signals of RS232. Separate connectors are needed for input and output signal paths. These are the MIDI IN and MIDI OUT ports.
It is important to use the correct type of leads for MIDI connections, ie
only those designated as 'MIDI cables'.
The DIN - DIN type of leads intended for connecting audio signals are NOT suitable.
There may optionally also be a MIDI THRU port, which provides a copy of data arriving at the IN port. It is intended to be used to chain devices in series. However, delays to the signal incurred at each IN-THRU stage puts a limit to the number of devices that can be connected in this way, beyond which the cumulative effect of these delays becomes noticeable.
Another aspect of the hardware specification is the use of opto-isolators at the input and output stages, to help prevent the generation of earth loops (which can cause undesirable hum). A further aid to reduce the likelihood of earth loops is the requirement that pin 2 (Earth) of any MIDI IN sockets is not connected to the chassis; only pin 2 of MIDI OUT sockets is connected to the chassis.
The software aspect of the specification is essentially the language of the data, in that it specifies the structure and interpretation of the data. It enables a wide range of musical information to be conveyed via MIDI.
It is important to realise that MIDI data is not a type of encoded sound, as with samples. Instead it is a series of commands or instructions which represent musical performance-related events. Eg 'select voice number 5', 'start playing note C4', 'bend the pitch', 'change the volume level', 'stop playing note C4', etc.
MIDI originated in the mid-1980s, and has since proved to be a fairly effective solution to the problem of that time of connecting synthesizers together.
In the pre-MIDI days, virtually every manufacturer had their own way of interfacing various devices (from within their own product range, of course), and as most of these methods were analogue, things got very messy when you considered polyphonic devices (which at the time were few in number and expensive).
With the advent of cheap digital electronics, a system such as MIDI was made possible. And because the facilities it provides are defined in software, the system is extendable. So, 20+ years on from its inception, MIDI is still with us, though in that time it has grown to include many new features — MIDI Time code, General MIDI, MIDI Machine Control, and Down-Loadable Sounds, to name a few.
MIDI data is a serial stream of bytes representing MIDI commands. A MIDI command comprises a status byte followed by a variable number of data bytes (possibly none).
Status bytes are identified due to their top bit being set. Consequently data bytes contain 7-bit values (0-127).
Summary of Status Bytes
|Status byte||Number of
|Channel Voice Messages|
|9n||1001nnnn||2||Note On (a velocity of zero = Note Off)|
|An||1010nnnn||2||Polyphonic Key Pressure (Aftertouch)|
|Bn||1011nnnn||2||Controller. First data byte = 0-119|
|Cn||1100nnnn||1||Program Change (ie instrument/voice selection)|
|Dn||1101nnnn||1||Channel Pressure (Aftertouch)|
|Channel Mode Messages|
|Bn||1011nnnn||2||Select Channel Mode. First data byte = 120-127|
|F1-F7||11110xxx||0 to 2||System Common (xxx = 1-7)|
|F8-FF||11111xxx||0||System Real Time (xxx = 0-7)|
|nnnn||0-15 = MIDI channel 1-16.|
MIDI provides control over a 10 octave (+) range of pitches – refer to this ready reckoner table of MIDI note numbers for the complete mapping.
Once synthesizers could talk to each other digitally via MIDI, it wasn't long before some bright spark realised that a computer could be used to record a stream of MIDI data along a timebase, in much the same way that a tape recorder can record sound. And just as it is possible to record multiple parallel tracks on a suitably capable tape recorder, so too with computer software. And so the MIDI sequencer was born.
A sequencer enables a multi-part performance to be recorded and played back, building it up track by track. Even a basic sequencer will provide 16 independant tracks, with top of the range sequencers providing an unlimited number of tracks (within the limits of available computer memory).
A sequencer has a number of advantages over a tape recorder :
- Extensive editing facilities, including facilities not possible with tape recorders.
- No loss of sound quality in the recording process, as it is the performance instructions, not the sounds themselves, which are recorded. The instruments are essentially played live by the sequencer.
- By editing the contents of a MIDI file, different sounds can be used to those used during the recording process. Thus it is easy to alter the final arrangement.
Apart from the sequencer, other computer based MIDI applications include : synthesizer voice editors and librarians; sample editors (for use with samplers or wavetable based synthesizers); and numerous compositional aids. Also, MIDI Time Code messages can be used to synchronise a sequencer with various hardware devices (eg tape recorders) and/or Hard Disc Recorder software.
Current top of the line sequencers — eg Logic (Mac), Cubase (Mac/PC), Sonar (PC) and Pro Tools (Mac/PC) — have matured to a point where they are each a complete music production environment, incorporating audio tracks alongside any MIDI tracks.
The MIDI Standard Files specification defines a distribution format, used to provide a common format for sequencer type data.
It differs slightly from the standard MIDI protocol in that individual events are, by necessity, time-stamped.
The use of MIDI files has become widespread, and there are many sources of such files on the internet.
General MIDI (GM)
With the advent of MIDI files, it soon became apparent that a way of standardising voice assignments was necessary, ie the mapping of particular instrument voices to Program Change numbers.
A MIDI file doesn't contain any information about instrumentation, ie which instrument sounds correspond to particular Program Change numbers (although there may possibly be some embedded textual comments advising of the intended voice assignments). Consequently, playing a MIDI file on a system other than the one it was composed on, would most likely sound completely different, due to the different voice mapping.
Enter General MIDI ...
To qualify for the label GM, a device must have the following minimum specification :
- A minimum polyphony either of 24 dynamically allocated voices for both melodic and percussive sounds, or 16 dynamically allocated voices for melodic plus 8 for percussive sounds. Either way, all voices should respond to velocity information.
- 16 part multi-timbral (ie simultaneous support for all 16 MIDI channels, with a different voice (sound) and variable polyphony on each channel). Channel 10 is used as the drum channel.
- A minimum of 128 different melodic voices and 47 drum sounds which conform to the standard GM voice allocation.
- Support for Channel Pressure (Aftertouch) and Pitch Bend messages.
- Support for Channel Mode messages : Reset All Controllers (121) and All Notes Off (123).
- Support for Controller messages : Modulation (1), Channel Volume (7), Pan (10), Expression (11) and Sustain Pedal (64).
- Support for RPNs : Pitch Bend Sensitivity (0), Fine Tuning (1), and Coarse Tuning (2).
- Initial default values : Channel Volume should be set to 90; all other controllers (inc Pitch Bend offset) should be set to 0; Pitch Bend range should be +/- 2 semitones; all effects should be off, and initial tuning should be standard A440 reference (when playing MIDI note 69, ie A4).
By providing this minimum specification along with its standardised set of melodic and drum sounds, the use of GM goes some way to ensuring that a composition is heard as it was intended to be heard.
GS and XG
Some manufacturers consider the GM standard to be too limiting, and have taken it upon themselves to provide enhanced GM synthesizer modules. First Roland with their GS standard, and then Yamaha with their XG standard.
GS and XG are both supersets of the GM standard, ie they have all the features of GM, though provide additional sound banks which are accessed using Bank Select messages.
The voices in the extra banks align with those in the standard GM bank, thus providing variants on the standard voices. This means that a MIDI file composed for use with a GS or XG device will sound okay when played using a standard GM device (because a GM device will ignore any Bank Select messages and just respond to the Program Change messages).
And obviously, as they both provide supersets of GM, either type of device will sound okay when playing MIDI files composed for use with a GM device.
Compatibility both ways, admirably following the spirit of General MIDI.
Down-Loadable Sounds (DLS)
This is one of the more recent additions to the MIDI specification. It provides a scheme whereby sounds (in the form of instrument wavetables) can be downloaded into specific memory locations (corresponding to specific Program Change numbers) within a synthesizer or other sound generating device.
DLS Level 1 devices must support MIDI Program Change messages (and, optionally Bank Select messages) in the usual way, as the means of selecting the instrument to be played on each channel. They need only provide a single bank for downloadable melodic instruments, and when in DLS mode, they may virtualise (ie map) incoming Bank Select messages so that they point to the device's actual DLS bank.
Although GM (and hence GS and XG) go some way towards standardising voice allocations, they do not precisely define a sound. The use of DLS ensures (by incorporating voice definitions within a MIDI file) that a composition is played back exactly as the composer intended.
The full MIDI specification is available from the MIDI Manufacturers Association (MMA) and covers the following :
- MIDI 1.0
- General MIDI
- Standard MIDI files
- MIDI Show Control
- MIDI Machine Control
- MIDI Time Code
The MMA is the source for all the latest additions to the standard.
The first and last of that list (ie basic MIDI and MTC) are covered in my MIDI Software Specification document. There's also a document covering MIDI files, and another listing the General MIDI voice map.