|
|
There are 2 tables below, one for Channel Messages and the other for System Messages. All values are shown in hex format unless stated otherwise. Each MIDI message consists of a status byte (value from 80 to FF) which defines the meaning of the following data bytes. Most messages consist of a status byte followed by zero, one or two data bytes (each having a value of 00 to 7F).
| |||||||||||||
| Note Events | ||
|---|---|---|
| 8n kk vv | Note OFF | kk=00-7F key vv=00-7F release velocity |
| 9n kk 00 | Alternative Note OFF | |
| 9n kk vv | Note ON | kk=00-7F key vv=01-7F attack velocity* |
| An kk pp | Polyphonic Key Pressure | kk=00-7F key pp=00-7F key pressure |
| Controllers | ||
| Bn 00 xx | 0 - Bank Select MSB* (GS) | xx=00-7F controller value |
| Bn 01 xx | 1 - Modulation Depth (GM) | |
| Bn 02 xx | 2 - Breath Control | |
| Bn 04 xx | 4 - Foot Pedal | |
| Bn 05 xx | 5 - Portamento Time (GM) | Glissando Time |
| Bn 06 xx | 6 - Data Entry MSB (GM) | |
| Bn 07 xx | 7 - Volume* (GM) | |
| Bn 08 xx | 8 - Balance (GM) | |
| Bn 0A xx | 10 - Pan (GM) | xx=40 for centre |
| Bn 0B xx | 11 - Expression* (GM) | |
| Bn 10-13 xx | 16-19 - GP Control #1 - #4 | |
| Bn 20-3F xx | 32-63 - Data LSB* for controllers 0-31 | |
| Bn 20 xx | 32 - Bank Select LSB (GS) | |
| Bn 26 xx | 38 - Data Entry LSB (GM) | |
| Bn 40 xx | 64 - Hold Pedal #1* (GM) | |
| Bn 41 xx | 65 - Portamento (GS) | |
| Bn 42 xx | 66 - Sostenuto (GS) | |
| Bn 43 xx | 67 - Soft Pedal (GS) | |
| Bn 44 xx | 68 - Legato Pedal | |
| Bn 45 xx | 69 - Hold Pedal #2 | |
| Bn 46 xx | 70 - Sound Variation | |
| Bn 47 xx | 71 - Sound Timbre | |
| Bn 48 xx | 72 - Sound Release Time | |
| Bn 49 xx | 73 - Sound Attack Time | |
| Bn 4A xx | 74 - Sound Brightness | |
| Bn 4B-4F xx | 75-79 - Sound Control #6 - #10 | |
| Bn 50-53 xx | 80-83 - GP Control #5 - #8 | |
| Bn 54 xx | 84 - Portamento Control (GS) | |
| Bn 5B xx | 91 - Reverb Level (GS) | |
| Bn 5C xx | 92 - Tremolo Depth | |
| Bn 5D xx | 93 - Chorus Level (GS) | |
| Bn 5E xx | 94 - Celeste Depth | |
| Bn 5F xx | 95 - Phaser Depth | |
| Bn 60 xx | 96 - Data Increment | |
| Bn 61 xx | 97 - Data Decrement | |
| Bn 62 xx | 98 - Non-RPN* Parameter LSB (GS) | |
| Bn 63 xx | 99 - Non-RPN Parameter MSB (GS) | |
| Bn 64 xx | 100 - RPN* Parameter LSB (GM) | |
| Bn 65 xx | 101 - RPN Parameter MSB (GM) | |
| Bn 78 00 | 120 - All Sound Off* (GS) | |
| Bn 79 00 | 121 - Reset All Controllers (GM) | Varies between manufacturers, but typically Pitch Bend, Polyphonic & Channel Pressure, Modulation all set to 0, Expression set to 7F, Hold #1, Portamento, Sostenuto & Soft all set OFF, RPN/NRPN reset |
| Bn 7A 00 | 122 - Local On/Off | |
| Bn 7B 00 | 123 - All Notes Off* (GM) | |
| Bn 7C 00 | 124 - Omni Mode Off | responds only to specified MIDI channel |
| Bn 7D 00 | 125 - Omni Mode On | responds to any MIDI channel |
| Bn 7E mm | 126 - Mono Mode On | mm sets the number of individual mono sounds available, typically 0 to 16, default 1 |
| Bn 7F 00 | 127 - Poly Mode On | |
| Other Channel Messages | ||
| Cn pp | Program Change | |
| Dn vv | Channel Pressure | |
| En ll mm | Pitch Bend* | ll=LSB, mm=MSB, each 00-7F ll=00, mm=40 for centre |
|
|
Realtime Parameter Number (RPN) Settings: Non RPN (NRPN) messages are used in different ways by different manufacturers, so you will need to consult the user manuals. For example, Roland use NRPN message in GS mode to change vibrato, filter and volume envelope settings, as well as fine tuning individual percussion sounds. Here are some common RPN messages, with the MIDI data shown in bold (and in hex!). Remember, Bn means a channel controller message on channel n, where n is 0 to F for channels 1 to 16. Pitch Bend Range:
Coarse Tuning:
RPN & NRPN Reset:
|
| System Common | ||
|---|---|---|
| F1 vv | MIDI Time Code (MTC) | vv=00-7F for MIDI quarter frame time code value |
| F2 ll mm | Song Position Pointer | ll=LSB, mm=MSB both 00-7F |
| F3 ss | Song Select | ss=song number 00-7F |
| F6 | Tuning Request | |
| System Realtime | ||
| F8 | Timing Clock | |
| FA | Song Start | |
| FB | Song Continue | |
| FC | Song Stop | |
| FE | Active Sensing | |
| FF | System Reset | |
| System Exclusive | ||
| F0 | Start of Exclusive | followed by a variable amount of data |
| F7 | End of Exclusive | |
|
|
Structure of a System Exclusive Message
Here are some common system exclusive messages:
|
|
|
To guarantee a 'clean' startup on every song, I start my MIDI sequences with a 2/4 bar at 180bpm of MIDI initialisation messages.
The first beat is used for system exclusive messages, and the 2nd beat for the controller messages.
As a double guarantee, I also finish the song with a less stringent reset (importantly, All Note Off messages to catch any stuck notes). The overall sound of songs will vary between different sound modules due to varying quality of individual sounds, and also due to the different interpretation of 'enhancements' to the General MIDI specification. The Roland Sound Canvas sound module was one of the first GM modules used commonly by sequenced bands, and is considered as something of a benchmark for song sequences. Of course, newer modules (including those by Roland) have now surpassed this original module in terms of both sound quality and features. Use of 'non-GM/GS' controller messages is particularly haphazard between different manufacturers, and bank messages can also be troublesome. If you are writing sequences for an unknown range of sound modules, my advice is to use only the GM/GS controllers, and to avoid bank messages altogether (don't even send bank 0, because some manufacturers use that bank for the sound module default mode, which is often not even General MIDI, let alone similar patch sounds!).
Initialisation - Start of Every Song
Reset - End of Every Song
|
| MIDI Guide | ||
Channel Messages System Messages Initialisation Examples | ||
| Technical Info | ||
| Music Topics | Home Page | Email GM Arts |