Many sound cards and synthesizers, as well as most audio software, are compatible with one of the three midi norms (GM, GS, XG). Though MIDI has long since proven its utility, the existence of different standards can be confusing, so this article has been put together in order to clarify a few points.
For someone who just wants to listen to music, or for a multimedia developer looking to add background music or sounds to their program, the Midifile format has proven to be a real asset. It allows a user to play a sequence that was written by another person, whatever gear or software they were using. But in the past, only the notes and rhythm of the musician were encoded, which didn’t necessarily guarantee a similar sound. In fact, the sounds coming from each sound card, each synthesizer, were different (different in their sound and in their organization). Patch number 15 could be a piano on synthesizer X, and a trumpet on synthesizer Y. It was sometimes necessary to be an expert in MIDI and/or have a lot of patience to get the right settings in order to listen to a piece written by another musician working on a different synth or platform.
The MMA (Midi Manufacturers Association) fixed this problem in 1991 by creating the GM (General Midi) standard. The goal of this standard has been to unify the behavior of sound generators when playing back a Midifile sequence. In order to be labeled GM, an instrument must be multi-timbral and polyphonic up to at least 24 voices, and include at least 16 families of sounds (pianos, guitars, strings…), each containing 8 variations (for example, for strings: violin cello, double bass, etc…For more info see page 2 of this article "GM Reference Guide")
The main advantage of this standardization is that each patch number now corresponds to a certain instrument no matter what the machine. So, instrument number 71 will always be a bassoon and number 12 a vibraphone. The sound generator must also contain a drum kit, whose mapping (placement of the separate elements on a keyboard) is also standardized. Finally, MIDI controllers must be recognized also.
Some people found that the GM standard wasn’t very precise: describing a sound only with a name of an instrument is rather vague… That’s why the MMA has been pushing two other levels of standardization.
Some considered GM to be too "general", like Roland who presented, at more or less the same time, a similar system: GS or General Standard. Though compatible with GM, it’s not standardized and only concerns Roland instruments. On the other hand, it goes much further, able to contain/host up to 16384 sounds (128 banks of 128 sounds). Also, any missing instruments are automatically replaced by their nearest neighbors (in terms of sound). Many drum kits are also available and its possible, via NRPN messages, to adjust sound parameters: filter resonance, LFO speed, etc… After its creation GS was more or less systematically put into Roland machines (like Sound Canvas). Even though system exclusive messages aren’t standardized in GS, they’re the same for all machines that refer to it.
After that, another Japanese giant, Yamaha, proposed their own version, which went even further in terms of precision and possibilities. This version was called XG, for, you might have guessed, eXtended General Midi. This standard, also compatible with GM, allows more in-depth editing of sound parameters and standardization of system exclusive messages. The first synthesizers that used the XG standard were the QS300 and CS-1x, as well as the MU50, MU80 and other DB50XG cards.
Mirroring MIDI’s story - standardization of communication between electronic instruments - the Midifile has become the universal standard for stocking sequences. All sequencers worth their salt, no matter how complex, should be able to import or export Midifiles.
Even if each sequencer proposes their own format, the Midifile has become the real standard bridging the gap between different software and platforms. This file, with it’s .mid or .smf extension, is organized in the form of a succession of "chunks". A chunk is like a paragraph within which an idea is developed. A chunk always has a header which indicates its name and the size of its contents. The main advantage of this type of format, is that it’s able to be modified or have information added to it without there being any compatibility issues. In fact, thanks to the headers, its easy for a program to skip a chunk that it doesn’t recognize.
So, a Midifile is made up of a header chunk, followed by many track chunks. Even though the file can come in three formats, only the first two are frequently used. A Midifile with a 0 format only has one track that contains all the information relative to midi channels. This format is usually used by midi/multimedia players that don’t offer a lot of editing features. A format 1 Midifile, on the contrary, contains one or more tracks (playing simultaneously), each containing information about its channel. Midifiles of format 2, which are less frequent, don’t have a linear structure: they contain different tracks representing independent patterns.
The header chunk contains just that: the Midfile header. It has a fixed length and specifies the general organization of the file: the type of Midifile, the number of tracks it contains, as well as its temporal resolution (in regards to sequencer ticks, or in SMPTE code or in MIDI Time Code).
After the header, there are one or more track chunks which represent one or more tracks. A track is a succession of events, each preceded by a delta time. A delta time is the temporal reference, which means that it marks the elapsed time since the precedent delta time. Among the events we find conventional MIDI messages (note on, patch change, continuous controller etc…), exclusive messages, and meta-events. Some of these meta-events hold text data (Copyright, name of the sequence, track names or instrument names, song lyrics or comments etc…). Other more important meta-events give the tempo, time signature, and the key signature of the piece ( the default values are 4/4 at 120 BPM). Finally, like exclusive messages, a special code is reserved for meta-events that are specific to the sequencer used.
Because Midifiles are small, complete, and rather developable, they haven’t yet become obsolete in all the time that they’ve existed (since 1987) and are still one of the most downloaded file-types on the internet. Because they’re able to go from one software to another and cross platforms without losing any data or being altered by any conversions whatsoever, they still have a future.
GM Reference Guide
This part of the article is meant as a reference guide when using a MIDI instrument. It groups together detailed information about:
|1||Acoustic Grand Piano||65||Soprano Sax|
|2||Bright Acoustic Piano||66||Alto Sax|
|3||Electric Grand Piano||67||Tenor Sax|
|4||Honky-Tonk Piano||68||Baritone Sax|
|5||Electric Piano 1||69||Oboe|
|6||Electric Piano 2||70||English Horn|
|17||Drawbar Organ||81||Lead 1 (Square)|
|18||Percussive Organ||82||Lead 2 (Sawtooth)|
|19||Rock Organ||83||Lead 3 (Calliope)|
|20||Church Organ||84||Lead 4 (Chiff)|
|21||Reed Organ||85||Lead 5 (Charang)|
|22||Accordion||86||Lead 6 (Voice)|
|23||Harmonica||87||Lead 7 (Fifths)|
|24||Tango Accordion||88||Lead 8 (Bass + Lead)|
|25||Acoustic Guitar (Nylon)||89||Pad 1 (New Age)|
|26||Acoustic Guitar (Steel)||90||Pad 2 (warm)|
|27||Electric Guitar (Jazz)||91||Pad 3 (Polysynth)|
|28||Electric Guitar (Clean)||92||Pad 4 (Choir)|
|29||Electric Guitar (Muted)||93||Pad 5 (Bowed)|
|30||Overdriven Guitar||94||Pad 6 (Metallic)|
|31||Distorsion Guitar||95||Pad 7 (Halo)|
|32||Guitar Harmonics||96||Pad 8 (Sweep)|
|33||Acoustic Bass||97||FX 1 (Rain)|
|34||Electric Bass (Finger)||98||FX 2 (Soundtrack)|
|35||Electric Bass (Pick)||99||FX 3 (Crystal)|
|36||Fretless Bass||100||FX 4 (Atmosphere)|
|37||Slap Bass 1||101||FX 5 (Brightness)|
|38||Slap Bass 2||102||FX 6 (Goblins)|
|39||Synth Bass 1||103||FX 7 (Echoes)|
|40||Synth Bass 2||104||FX 8 (Sci-fi)|
|49||String Ensemble 1||113||Tinkle Bell|
|50||String Ensemble 2||114||Agogo|
|51||Synth Strings 1||115||Steel Drums|
|52||Synth Strings 2||116||Woodblock|
|53||Choir Aahs||117||Taiko Drum|
|54||Voice Oohs||118||Melodic Tom|
|55||Synth Voice||119||Synth Drum|
|56||Orchestra Hit||120||Reverse Cymbal|
|57||Trumpet||121||Guitar Fret Noise|
|60||Muted Trumpet||124||Bird Tweet|
|61||French Horn||125||Telephone Ring|
|63||Synth Brass 1||127||Applause|
|64||Synth Brass 2||128||Gunshot|
|35||Acoustic Bass Drum|
|36||Bass Drum 1|
|41||Low Floor Tom|
|43||High Floor Tom|
|49||Crash Cymbal 1|
|51||Ride Cymbal 1|
|57||Crash Cymbal 2|
|59||Ride Cymbal 2|
|62||Mute Hi Conga|
|63||Open Hi Conga|
|76||Hi Wood Block|
|77||Low Wood Block|