Musical Data

A computer is an ideal device for storing a musical performance in the form of a sequence of events, usually in the form of a pattern of notes. Each of these notes has a particular timing, note length and pitch, and must be directed to play a specific instrument or voice.

A sequence can be played through an electronic musical instrument, such as an external synthesiser or software within the machine itself. In many instances, real sounds in the form of audio samples are used as an instrument. These can be pitched by ‘clocking out’ a sample at different rates, although better results are obtained by using separate samples for different pitches.

Various systems have been used to store musical data, although the most common format is MIDI, related to the Musical Instrument Digital Interface used on many electronic instruments. Although the interface itself is old-fashioned, its data structure is highly efficient and expandable.

Introduction to MIDI

The usual MIDI messages can be divided in the following groups:-

Voice Messages

These include the most common type of message, such as Note On or Note Off. Each instruction of this kind refers to a MIDI channel, identified by a channel number which is assigned to a specific voice in a musical device. Any track that;s created in a sequence can be used to play the required voice by sending a message to the appropriate MIDI channel.

Voice Modes

Each musical instrument can often be set up to respond in one of several modes:-

Monophonic Mode (Mono)

In this mode a single voice is triggered using one MIDI channel and no further sounds can play until this first note has ceased. This unusual and archaic mode is sometimes used to control an elderly analogue synthesiser, as connected to a MIDI system via a MIDI to analogue converter.

Polyphonic Mode (Poly)

Poly is a modern mode in which polyphonic sounds of the same voice are triggered using one MIDI channel whilst non-voice messages are sent via a special channel known as the basic channel. The latter channel can default to channel 1 or can be selected using the instrument’s master controls.

Omniphonic Mode (Omni)

Omni on mode, which can sometimes be switched on or off in both Poly and Mono modes, allows a single voice to be triggered by all MIDI channels. For polyphonic operation, where more than one note is played at a time, several channels are needed, which means this mode is often best turned off.


Control Change messages are generated by the switches, foot pedals, or other controllers fitted on some MIDI devices, and can be used to adjust other devices whilst playing a sequence. Typically, such controls employ 14-bit resolution, stretching the capacity of MIDI to the limit. However, the transmitted data can be thinned, usually with little audible effect, or the receiving device can be programmed to do the job itself on receipt of a simple MIDI command.

System Exclusive Messages

These messages, also known as Sysex messages, often contain manufacturer’s proprietary codes for controlling or editing data in their products. Although details for System Exclusive codes are usually supplied, you’ll often encounter special software that obviates any need to understand them.


Several different types of message are used for synchronising other devices to a sequencer. Initially, the sequencer should send a Song Select message to indicate which song it’s about to play. A Start message should then be sent to the sequencer to initiate playback of the song.

Once it’s running, the sequencer sends regular Timing Clock messages at a rate of 96 clocks per whole note (semi-breve). By using these clocks to modify a Song Position Pointer register, each MIDI device knows how far the sequence has progressed. To return to a particular point in the sequence the sequencer must send a Song Position Pointer message to all devices.

In addition to the above messages, it’s also possible to convey timecode, the actual time of day of a recording in hours, minutes, seconds and frames. These messages allow other devices such as video and audio equipment to be synchronised to a sequencer. Two systems are used:-

MIDI Timecode (MTC)

This is the standard system for synchronisation. A Full MIDI Timecode message, also known as a Full Frame message, is sent when the source of timecode starts, stops or ‘drops out’. This is often followed by Quarter Frame messages, as sent during a continuous run of timecode.

Direct Time Lock (DTL) and Direct Time Lock enhanced (DTLe)

Both of these systems, devised by Mark of the Unicorn, are highly reliable alternatives to MTC that only employ System Exclusive messages. A full set of time information is sent at the start of a ‘run’ of timecode, which is then followed by up or down clock messages as timecode progresses.

Channel Numbers and GM

MIDI requires every voice or sound in a device to be assigned a MIDI channel number. The table below shows examples of such assignments:-

3Brass or Sax
4Guitar or Clavinet
5Ensemble String
6Human Voice

However, a drum kit only uses one MIDI channel for all the sounds in the kit, which is useful when you’re short of MIDI channels. Each sound is assigned to a different note, which is only possible because percussion sounds aren’t normally played at a particular pitch. Here are some examples:-

36 (C)Bass Drum
40Rim Shot
41Lo Tom
43Mid Tom
45Hi Tom
42Closed High-Hat
44Half-closed High-Hat
46Open High-Hat
51Ride Cymbal
54Crash Cymbal

General MIDI (GM)

The MIDI Program Change message contains a program number that determines the voice to be used for a particular MIDI channel. As already mentioned, any instrument can be used with any channel, which can cause a sequence to be played with an ridiculous set of voices.

In 1991 the Japanese MIDI Standards Committee (JMSC) and the American Manufacturers’ Association agreed on Level 1 of the new General MIDI (GM) standard. This specified standardised program numbers for common sounds. A GM instrument, which must contain 128 standard GM sounds, complete with 24-note polyphony and 16-voice multitimbral operation, can then play sequences without the user having to worry about voice assignments.

General MID1 2 (GM 2) appeared in 1999. Instruments that confirm to this standard can play 32 sounds simultaneously, with support for two drum kits, whilst additional banks of instruments are accommodated via the GM Bank Select message. GM 2 also assigns specific tasks to formerly unassigned controllers and registered parameter numbers (RPNs) (see below).

GM Lite, introduced in 2001, accommodates those more modest instruments that can’t support the full panoply of GM 2 messages. Other extensions to the GM standard include:-


This system was developed by Roland to overcome the limit of 128 sounds imposed by GM. It uses the GM Bank Select message to select alternative sets of sounds known as variations.

These variations are organised rather cleverly. For example, a Program Change message of decimal 14 normally causes a GM device to select the Tubular Bells sound. However, if you precede this message by a GM Bank Select message (in the MSB, as described below) you’ll select Church Bell in a GS device. Fortunately, both these sounds are quite similar, which means that almost any kind of MIDI sequence should sound acceptable, even on a synthesiser that doesn’t support GS.

GS also uses non-registered parameter numbers (NRPNs) for controlling special functions, including reverberation and chorus effects. Although only GS-compatible synthesisers recognise these instructions, a sequence created on a GS device can still be played on a non-GS instrument.


Devised by Yamaha, this version of GM also provides its own kind of variations, as well as giving extra control over sounds and effects. Although sequences can be interchanged between GS and XG devices, each kind of device normally only recognises its own instructions, ignoring other types.

GM gives access to a drum kit on MIDI channel 10, with each note activating a different sound, as shown in the following example:-

35Acoustic Bass Drum
36Bass Drum 1
60High Bongo
61Low Bongo
80Mute Triangle
81Open Triangle

The following drum kits are normally provided:-

1Standard Kit
9Room Kit
17Power Kit
25Electronic Kit
26Analog Kit
33Jazz Kit
41Brush Kit
49Orchestra Kit
57SFX Kit

MIDI Messages in Detail

This section provides an overview of MIDI messages, although General MIDI (GM) and its GS and XG variants aren’t included. For further details you should refer to the latest MIDI Specification, as published by the MIDI User Group. Also, to find how your devices respond to MIDI messages you should refer to the MIDI implementation chart provided with each product.

Hexadecimal Notation

Hexadecimal (hex) values are shown in the following information, except where a single-digit value is given without a preceding zero: hence 0A is a hex value but 3 is a decimal number.

In hex notation each byte consists of two characters, each representing half a byte, otherwise known as a nibble. The most significant (MS) nibble is given by the left-hand character whilst the least significant (LS) nibble is to the right. Each digit can contain characters such as 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, or F, accommodating numbers from 0 to 15.

A variable value can be expressed in hex using notation such as nn or vv, with any fixed nibbles shown directly, as in 8n or 0g (containing a fixed MS nibble of 8 and 0 respectively).

Message Types

All MIDI messages begin with a status byte, with a value of between hex 80 and hex FF. Some status bytes are followed by one or more data bytes, with values of 00 to 7F, conveying extra information relating to the preceding status byte. For example, when a musical note is played, data bytes are used to convey its note number and the pressure applied to the key.

Status bytes are divided into Channel messages, transporting data over a particular MIDI channel, and System messages, which can be received by all devices on a MIDI circuit. The latter also include System Exclusive messages that are often only understood by special devices or equipment produced by a certain manufacturer. These categories are illustrated in the following diagram:-

The Channel messages all have status bytes in the range of 80 to EF. The various types of message, shown complete with mnemonics, are as follows:-

CodeChannel ​MessageHex
NOFNote ​Off8n
NONNote ​On9n
PKPPolyphonic ​Key ​PressureAn
CCHControl ​ChangeBn
PCHProgram ​ChangeCn
MCPMonophonic ​Channel ​PressureDn
PWLPitch ​WheelEn

where n represents the MIDI channel number.

The System messages have status bytes in the range of F0 and FF, of which the System Common messages occupy F0 to F7, as shown below:-

CodeSystem ​Common ​MessageHex
SOXStart ​of ​ExclusiveF0
MTCMidi ​Time ​Code ​Quarter ​FrameF1
SPPSong ​Position ​PointerF2
SCHSong ​ChangeF3
TRQTuning ​RequestF6
EOXEnd ​of ​ExclusiveF7

whilst F8 to FF are used for System Real Time messages:-

CodeSystem ​Real ​Time ​MessageHex
CLKTiming ​ClockF8
STRSequence ​StartFA
CNTSequence ​ContinueFB
STPSequence ​StopFC
SNSActive ​SensingFE
RSTSystem ​ResetFF

Channel Messages

Each Channel message status byte contains a MIDI channel number in its least significant nibble. This allows the information to be directed to a device or voice in a synthesiser that has a corresponding channel number. The channel numbers in a receiving device can be assigned manually, although General MIDI (GM) equipment normally uses fixed numbers, as described above.

A simple instrument often only needs one channel, whereas a multitimbral synthesiser normally uses as many channels as it can accommodate. In the latter, the lowest numbered channel, known as the basic channel, is used for receiving information that’s not associated with a particular voice.

Channel Voice Messages

A Channel Voice message can be used to directly trigger a voice or instrument within a synthesiser. Only a device or voice with a matching channel will respond to such a message.

All voice messages, except Monophonic Channel Pressure, employ two data bytes. The first of these bytes specifies the note number whilst the second byte gives a velocity value, normally representing the pressure applied to the corresponding key on a keyboard.

The number of bytes to be transmitted are reduced to a minimum by using a mechanism known as running status. This ensures that the timing of musical material is maintained, even though MIDI sends data at a fairly slow rate. In the process, a string of data bytes is allowed to follow a single status byte without any other status bytes being transmitted. Using running status, the Note On status byte can be followed by any number of ‘note on’ or ‘note off’ data bytes. Each ‘note off’ data byte is similar to a ‘note on’ byte but contains a velocity value of zero, effectively switching off the note.

The channel voice messages are detailed below. A typical sequence of a status byte followed by two data bytes is represented in a form of Ss, Dd, Ee, where Ss is the status byte, whilst Dd and Ee are the data bytes. Each letter equals a nibble of data, corresponding to a digit in hex notation.

80 to 8F: Note Off (NOF)

This indicates that a key has been released. The second data byte gives the speed of release or the off velocity but is often unused and set to hex 40. Messages are in the form:-

8n, kk, vv


n = MIDI Channel Number​ between 00 and 15,​ representing channels​ 1 to 16

kk = Note Number in hex​ (see below)

vv = Off Velocity, often​ using a logarithmic scale:

▪ 00 = off

▪ 01 = ppp

▪ 34 = mp

▪ 40 = Mid Position or​ no sensor

▪ 46 = mf

▪ 7F = fff

The following table and diagram should help you find the values of kk on a standard keyboard:-

Note ​Nokk ​(Dec)kk ​(Hex)Freq​(Hz)

Terms such as ppp, mp, mf and fff should be familiar to those of a musical disposition. In the following arrangement a more linear coding method is used:-


90 to 9F: Note On with running status (NON)

This indicates a key has been pressed. The second data byte is the applied pressure or on velocity.

9n, kk, vv, kk, vv, - - -


n = MIDI Channel Number​ between 00 and 15,​ representing channels​ 1 to 16

kk = Note Number

vv = On Velocity or​ Note Off:

▪ 00 = Note Off using​ running status (see above)

▪ 01 to FF = On Velocity​ (see above)

A0 to AF: Polyphonic Key Pressure or After Touch (PKP)

Indicates the pressure applied to an individual key, although Monophonic Channel Pressure is often used in its place (see below).

An, kk, vv


n, kk, vv: see above

D0 to DF: Monophonic Channel Pressure or After Touch (MCP)

Indicates pressure has been applied to the keyboard. This is often used in preference to Polyphonic Key Pressure but isn’t specific to a particular key being pressed.

Dn, vv


n, vv: see above

Channel Mode Messages

A Channel Mode message tells a device how to respond to subsequent voice messages. It can also be used to control parameters that are universal to a device, such as a synthesiser’s volume.

These messages are sent over a device’s basic channel. Usually, there’s only one basic channel, although more can be used, allowing one instrument to act as several independent synthesisers.

The Channel Mode messages are:-

B0 to BF: Control Change with running status (CCH)

This indicates that a control or switch has moved. The pairs of data bytes that follow the status byte can specify which continuous controller or switch has been adjusted and its setting.

The 32 14-bit controllers include GM Bank Select (0 and 32) Modulation Depth (1), Foot Controller (4), Portamento Time (5), Data Entry Slider (6) and Channel Volume (7), although some older instruments confuse 4 and 7. These controller values are normally encoded on a logarithmic scale, using a most significant byte (MSB) and optional least significant byte (LSB). They can be used in a non-standard way with an automated sound mixer, providing 64 faders with 7-bit control (0.8 dB resolution) or 32 faders with 14-bit control, plus switches.

The GM Bank Select message is used by both GS and XG equipment. Although the relevant MSB and LSB components are normally transmitted one after the other, GS devices normally convey useful information in the MSB whilst XG devices often expect the MSB to be 00 or 64. As a result, both GS and XG equipment can usually coexist in the same MIDI system without any problems.

The 32 7-bit controllers include Sustain (Hold 1) Pedal, Portamento Pedal, Sostenuto Pedal and Soft Pedal switches, as well as Sound Variation Controllers, General Purpose Controllers and Effects Depth Controllers and other unassigned controllers.

The numerous switches include Data Increment Button, Data Decrement Button, two 14-bit Parameter Controllers, All Sound Off, Reset All Controllers and Local Control, as well as switches to set an instrument’s Channel Mode and to send an All Notes Off message. The Channel Mode switches are important, since they determine how a device handles Channel messages. In effect, four switches are used: Omni On or Omni Off and a ‘toggle’ action between Poly and Mono modes. This means that switching to Poly mode automatically switches any device out of Mono mode.

For a receiver with a basic channel of N the modes are:-

1OnPolyAll ​channels ​play ​voices ​polyphonically
2OnMonoAll ​channels ​play ​one ​monophonic ​voice
3OffPolyChannel ​N ​plays ​voices ​polyphonically
4OffMonoChannel ​N ​through ​to ​N+M-1 ​assigned ​monophonically ​to ​voices ​1 ​to ​M

For a transmitter with a basic channel of N the modes are:-

1OnPolyAll ​voices ​sent ​to ​channel ​N
2OnMonoMono ​voice ​sent ​to ​channel ​N
3OffPolyAll ​voices ​sent ​to ​channel ​N
4OffMonoSingle ​voices ​1 ​to ​M ​sent ​to ​channels ​N ​through ​to ​N+M-1

If a receiver can’t accept a mode it often ignores the message or may switch to Mode 1. In theory, instruments should also default to Mode 1 at startup, but most devices don’t actually do this.

The Control Change messages are shown below, where indicates a message that’s specific to the GM 2 standard and indicates a message that should be supported by GM Lite devices. The relevant decimal numbers are also shown in blue to assist in controller identification.

Bn, cc, vv, cc, vv, - - -


n = MIDI channel number

cc = controller number, ​followed by vv value unless ​shown otherwise:

00 to 1F = MSB for 14-bit ​controllers 00 to 1F ​(numbered 0 to 31):

0 00 = GM Bank Select•†

1 01 = Modulation Depth​ (Modulation Wheel)†

2 02 = Breath Controller

3 03 = Unassigned

4 04 = Foot Controller

5 05 = Portamento Time

6 06 = Data Entry​ Slider†

7 07 = Channel Volume

8 08 = Channel Balance

9 09 = Unassigned

10 0A = Pan•

11 0B = Expression•†

12 0C = Effect Control 1

13 0D = Effect Control 2

14 0E = Unassigned

15 0F = Unassigned

16 10 = General Purpose​ Controller 1

17 11 = General Purpose​ Controller 2

18 12 = General Purpose​ Controller 3

19 13 = General Purpose​ Controller 4

20 to 31 14 to 1F =​ Unassigned Controllers​ 20 to 31

20-3F = LSB for above controllers ​(not always used):

0/32 20 = GM Bank Select​ (usually 00, except in​ XG devices)•†

1/33 21 = Modulation Depth​ (Modulation Wheel)

2/34 22 = Breath Controller

3/35 23 = Unassigned

4/36 24 = Foot Controller

5/37 25 = Portamento Time

6/38 26 = Data Entry Slider†

7/39 27 = Channel Volume

8/40 28 = Channel Balance

9/41 29 = Unassigned

10/42 2A = Pan•

11/43 2B = Expression•

12/44 2C = Effect Control 1

13/45 2D = Effect Control 2

14/46 2E = Unassigned

15/47 2F = Unassigned

16/48 30 = General Purpose​ Controller 1

17/49 31 = General Purpose​ Controller 2

18/50 32 = General Purpose​ Controller 3

19/51 33 = General Purpose​ Controller 4

20/52 to 31/63 34 to 3F =​ Unassigned Controllers​ 20 to 31

40 to 5F = 7-bit controllers ​(numbered 0 to 31):

(vv = 00 to 3F for ‘off’, ​40 to 7F for ‘on’)

0/64 40 = Sustain​ (Hold 1 or Damper) Pedal†

1/65 41 = Portamento Pedal

2/66 42 = Sostenuto Pedal

3/67 43 = Soft Pedal

4/68 44 = Legato​ Foot Switch

5/69 45 = Hold 2 Pedal

6/70 46 = Sound Variation​ Controller 1•

7/71 47 = Sound Variation​ Controller 2​ (Harmonic Intensity)•

8/72 48 = Sound Variation​ Controller 3​ (Release Time)•

9/73 49 = Sound Variation​ Controller 4​ (Attack Time)•

10/74 4A = Sound Variation​ Controller 5​ (Brightness)•

11/75 4B = Sound Variation​ Controller 6​ (Decay Time)•

12/76 4C = Sound Variation​ Controller 7​ (Vibrato Rate)•

13/77 4D = Sound Variation​ Controller 8​ (Vibrato Depth)•

14/78 4E = Sound Variation​ Controller 9​ (Vibrato Delay)•

15/79 4F = Sound Variation​ Controller 10•

16/80 50 = General Purpose​ Controller 5

17/81 51 = General Purpose​ Controller 6

18/82 52 = General Purpose​ Controller 7

19/83 53 = General Purpose​ Controller 8

20/84 54 = General​ Portamento Control

21/85 to 26/90 55 to 5A =​ Unassigned Controllers​ 21 to 26

27/91 5B = Effects 1 Depth​ (Reverb Send Level)

28/92 5C = Effects 2 Depth

29/93 5D = Effects 3 Depth​ (Chorus Send Level)

30/94 5E = Effects 4 Depth

31/95 5F = Effects 5 Depth

60 to 7F = Switches

96 60 = Data Increment​ Button (vv = 7F)

97 61 = Data Decrement​ Button (vv = 7F)

98 62 = Non-Registered​ Parameter Number (NRPN),​ LSB*

99 63 = Non-Registered​ Parameter Number (NRPN),​ MSB*

100 64 = Registered​ Parameter Number (RPN),​ LSB†◊

101 65 = Registered​ Parameter Number (RPN),​ MSB†◊

102 to 119 66 to 77 =​ Reserved

120 78 = All Sound Off•†

121 79 = Reset All​ Controllers (vv = 7F)†

122 7A = Local Control​ (vv = 00 for ‘off’,​ 7F for ‘on’)

123 7B = All Notes Off​ (vv = 00)†

124 7C = Omni Mode Off/All​ Notes Off (vv = 00)

125 7D = Omni Mode On/All​ Notes Off (vv = 00)

126 7E = Mono Mode On/All​ Notes Off

vv = MM channels used​ starting with the Basic​ Channel

vv = 0 all available​ channels to be used

127 7F = Poly Mode On/All​ Notes Off (vv = 00)

• Specific to the GM 2​ standard

† Should be supported by​ GM Lite devices

* Not specific to any​ manufacturer

◊ Often specific to​ manufacturers: in GM 2 these are used for​ Pitch Bend Sensitivity†,​ Channel Fine Tune,​ Channel Coarse Tune,​ Vibrato Depth Range​ and Null.

C0 to CF: Program Change (PCH)

Indicates that a voice or patch has been selected.

Cn, pp


n = MIDI Channel Number

pp = Program Number

E0 to EF: Pitch Wheel (PWL)

Indicates the pitch bend controller has moved, using two data bytes for the 14-bit data. The sensitivity to the pitch bend control is determined within the receiver itself.

En, vv, VV


n = MIDI Channel Number

vv, VV = Pitch Bend​ LSB, MSB

System Messages

A System message is designed to be sent and received irrespective of the MIDI channel or channels used by a device. Each message is available to all devices in a MIDI system, although some devices don’t actually understand every kind of message.

System Common Messages

A System Common message is available to all devices but doesn’t have any particular timing priority. The types of messages used are as follows:-

F1: MIDI Timecode Quarter Frame Message (MTC)

Indicates the current position within a current run of timecode. At the start of a run a Full MIDI Timecode message must be sent (see Real Time System Exclusive messages below).

One hundred messages are sent per second, although this only uses 7.5% of MIDI’s total bandwidth. Timecode is contained in a data byte spread over 8 messages. Hence a full update of timing data only occurs on every second frame of timecode.

F1, nd


n = Timecode Message Type

00 = Frames LS Nibble

01 = Frames MS Nibble

02 = Seconds LS Nibble

03 = Seconds MS Nibble

04 = Minutes LS Nibble

05 = Minutes MS Nibble

06 = Hours LS Nibble

07 = Hours MS Nibble

d = Timecode nibbles​ assembled by the receiver​ into data bits:

▪ Frame Count: xxxyyyyy:

xxx = Reserved

yyyyy = Frame Number​ (0 to 29)

▪ Seconds Count: xxyyyyyy:

xx = Reserved

yyyyyy = Seconds Count​ (0 to 59)

▪ Minutes Count: xxyyyyyy:

xx = Reserved

yyyyyy = Minutes Count​ (0 to 59)

▪ Hours Count: xyyzzzzz:

x = reserved

yy = SMPTE Timecode Type:

0 = 24 frm/s

1 = 25 frm/s

2 = 30 frm/s Drop-frame

3 = 30 frm/s Non Drop

zzzzz = Hours Count​ (0 to 23)

F2: Song Position Pointer (SPP)

This is count of MIDI beats elapsed during a song, where one beat equals 6 MIDI clocks.

F2, pp, PP


pp, PP = Pointer LSB, MSB

F3: Song Change or Song Select (SCH)

Selects the song to be played by a sequencer following a Sequence Start message (see below).

F3, ss


ss = Song Number

F3: Reserved

F5: Reserved

These two codes should be avoided to ensure future compatibility.

F6: Tuning Request (TRQ)

This is rarely used and doesn’t employ any data bytes.

F7: End of System Exclusive (EOX)

Indicates that System Exclusive data has ended (see below). No data bytes are used.

System Real Time Messages

A System Real Time message is sent and received irrespective of MIDI channels but has the highest timing priority. These messages can be interposed between any bytes, separating other status bytes from their data, and can even be inserted in the middle of running status information.

These messages don’t have any accompanying data bytes.The following messages are used:-

F8: Timing Clock

A ‘pulsed’ message that drives a sequencer at a rate of six MIDI clocks per MIDI beat. Each device uses a song position pointer register to count these beats during a sequence.

There are 16 beats or 96 clocks per whole note. The relationship between note lengths, beats and clocks is given in the table below:-

Note ​LengthBeatsClocks
Semibreve ​(whole ​note)1696
Minim ​(half ​note)848
Crotchet ​(quarter ​note)424
Quaver ​(eighth ​note)212
Semiquaver ​(sixteenth ​note)16

FA: Sequence Start (STR)

FB: Sequence Continue (CNT)

FC: Sequence Stop (STP)

These three messages are used to give instructions to a sequencer.

FD: Reserved

FE: Active Sensing (SNS)

Accommodates an optional feature that silences an instrument if its MIDI cables are accidentally disconnected. Any device that receives this signal will expect another every 300 milliseconds (ms). If this fails to appear the receiver then defaults to non-sensing mode and turns off all voices.

FF: System Reset (RST)

This lets you restore all instruments to normal. It shouldn’t be sent automatically at startup.

System Exclusive Messages

A System Exclusive message is a System message that’s only recognised by a particular kind of device. There are two types of message in this category:-

Manufacturer’s System Exclusive Message

This is identified by a manufacturer’s identification number (ID) and only works with appropriate equipment produced by the manufacturer. Such messages, using protocols set by the manufacturer, are often used for voice editing or remote control of a synthesiser.

Universal System Exclusive Message

This has a special ID instead of a manufacturer’s ID, so the message can be understood by any device. Unlike other System messages this is sent to a specific piece of equipment, which means that each device in a MIDI system must have a unique device ID. In practice, this usually corresponds to the basic channel number, as used for Channel Mode messages.

All of these messages begin with hex F0, used for the Start of Exclusive (SOX) status byte.

Manufacturer’s System Exclusive Message

The manufacturer’s System Exclusive message is in the following form:-

F0, ii, xx, - - - xx, F7


ii = manufacturer’s ID:

01 = Sequential Circuits

02 = Big Briar

03 = Octave Plateau

04 = Moog

05 = Passport

06 = Lexicon

07 = Kurzweil

08 = Fender

09 = Gulbransen II

0A = Delta Lab

0B = Sound Composition

0C = General Electro Music

0D = Techmar

0E = Matthews R & D

0F = Ensoniq

10 = Oberheim

11 = PAiA

12 = Simmons

13 = Gentle Electric

14 = Fairlight

15 = J L Cooper

16 = Lowery

17 = Linn

18 = Emu

20 = Bon Tempi

21 = SIEL

22 = IRCAM

23 = Synthaxe

24 = Hohner

25 = Crumar

26 = Solton

27 = Jellinghaus

28 = CTS

29 = PPG

2B = SSL

2F = Elka

40 = Kawai

41 = Roland

42 = Korg

43 = Yamaha

44 = Casio

45 = Akai

xx = System exclusive​ (Sysex) data set by the​ manufacturer

F7 = End Of System​ Exclusive (EOX)

Non Real Time Universal System Exclusive Messages

The following messages are directed to a specific device by using the device’s ID:-

Set Up Message

This message sends instructions to a device that uses MIDI timecode, such as a multi-track tape recorder or a sequencer.

F0, 7E, nn, 04, jj, hh, mm,​ ss, ff, gg, xx, yy, aa, -​ - aa, F7


7E = ID for Non Real​ Time Universal

nn = Device ID

04 = Sub ID 1 for MTC

jj = Sub ID 2:

▪ 00 = Special

▪ 01 = Punch In Point​ (record mode enable)

▪ 02 = Punch Out Point​ (record mode disable)

▪ 03 = Delete Punch In​ Point from cue list

▪ 04 = Delete Punch Out​ Point from cue list

▪ 05 = Event Start Point

▪ 06 = Event Stop Point

▪ 07 = Event Start Point​ with additional info

▪ 08 = Event Stop Point​ with additional info

▪ 09 = Delete Event Start​ Point from cue list

▪ 0A = Delete Event Stop​ Point from cue list

▪ 0B = Cue Point

▪ 0C = Cue Point with​ additional info

▪ 0D = Delete Cue Point

▪ 0E = Event Name In​ Additional Data

hh = Hours and SMPTE type:

Containing bits organised​ as: 0yyzzzzz:

yy = SMPTE Timecode Type:

▪ 00 = 24 frm/s

▪ 01 = 25 frm/s

▪ 02 = 30 frm/s Drop-frame

▪ 03 = 30 frm/s Non Drop

▪ zzzzz = Hours (0 to 23)

mm = Minutes

ss = Seconds

ff = Frames

gg = Fractional Frames​ (0 to 99)

xx = 14-bit Event Number​ LSB: Set to 00 if jj=00​ (Special Mode)

yy = 14-bit Event Number​ MSB: Set to Global Command​ if jj=00 (Special Mode):

▪ 00 = Timecode Offset

▪ 01 = Enable Event List

▪ 02 = Disable Event List

▪ 03 = Clear

▪ 04 = System Stop

▪ 05 = Event List Request•

aa = Additional Info:

MIDI data is sent as​ nibbles with LS nibble​ first. For example, Note​ On of 93, 48, 7F sent as​ 03, 09, 08, 04, 0F, 07.

If jj = 0E (Event Name in​ Additional Data) then​ ASCII data is sent in the​ same form — both CR and LF​ codes must be sent for a​ new line

F7 = End Of System​ Exclusive (EOX)

• Sent by an MTC master​ device to a slave device

All of the following Universal System Exclusive messages are concerned with the transfer of audio samples via MIDI.

For best results MIDI circuits should be connected in both directions, so as to create a closed loop complete with handshaking. After two seconds of waiting for any handshake signals the system should normally default to open loop operation.

Sample Dump Request

This message is sent prior to the transfer of sample data between a controlling device and a sampler.

F0, 7E, nn, 03, ss, SS, F7


7E = ID for Non Real Time​ Universal

nn = Device ID

03 = Sub ID 1 for Sample​ Dump Request

ss, SS = Stored Sample​ Number LSB, MSB

F7 = End of System​ Exclusive (EOX)

Sample Dump Header

This message is transmitted before sending an actual sound sample. Where two or three data bytes are used the LSB is sent first.

F0, 7E, nn, 01, ss, SS, bb,​ pp, pp, PP, mm, mm, MM,​ xx, xx, XX, yy, yy, YY,​ tt, F7


7E = ID for Non Real Time​ Universal

nn = Device ID

01 = Sub ID 1 for Dump​ Header

ss, SS = Stored Sample​ Number

bb = Number of Bits​ (8 to 28) — number in​ each sample

pp, pp, PP = Sample Period​ — in nanoseconds

mm, mm, MM = Sample​ Length — as number of​ sample words

xx, xx, XX = Sustain Loop​ Start Point — in words​ from start of sample

yy, yy, YY = Sustain Loop​ End — in words from end​ of sample

tt = Loop Type:

▪ 00 = Forward

▪ 01 = Forward/backward

F7 = End of System​ Exclusive (EOX)

Sample Dump Handshake

This indicates if a device can accept the data as defined in the Sample Dump Header message.

F0, 7E, nn, mm, pp, F7


7E = ID for Non Real Time​ Universal

nn = Device ID

mm = Handshake Mode:

▪ 7C = Wait — further​ handshake message to​ follow

▪ 7D = Cancel — device​ can’t accept the data

▪ 7E = Not Acknowledged​ (NAK) — awaiting​ retransmission of faulty​ packet

▪ 7F = Acknowledged (ACK)​ — packet received

pp = Packet Number

F7 = End of System​ Exclusive (EOX)

Sample Dump Packet

This message is used for the actual process of dumping a sample. The time taken for a transfer can be up to ten times the sample’s real duration or even longer.

F0, 7E, nn, 02, pp, dd, dd,​ -- dd, cc, F7


7E = ID for Non Real Time​ Universal

nn = Device ID

02 = Sub ID 1 for Sample​ Dump Packet

pp = Packet Number​ — restarting from zero​ as necessary

dd = Data Packets​ — each containing 120​ bytes

cc = Checksum — of all​ bytes, excluding status​ bytes

F7 = End of Exclusive (EOX)

Each data packet of 120 bytes is organised as follows:-

Sample ​BitsBytes/​sampleWords/​packet
8 to 14260
15 to 21340
22 to 28430

Real Time Universal System Exclusive

The following messages contain time-related information for a device with a matching device ID:-

Full MIDI Timecode Message

This message should always be sent at the beginning of a run of timecode.

F0, 7F, nn, 01, 01, hh, mm,​ ss, ff, F7


7F = ID for Real Time​ Universal

nn = Device ID (7F to​ select entire system)

01 = Sub ID 1 for MIDI​ Timecode

01 = Sub ID 2 for Full​ Timecode message

hh, mm, ss, ff = Timecode​ — as in MIDI Cueing​ Setup Message (see above)

F7 = End of System​ Exclusive (EOX)

User Bits

These bits are usually fixed throughout a run of timecode, although they don’t have to be. The information should correspond to that contained in the user bits of SMPTE timecode.

F0, 7F, nn, 01, 02, 0W, 0w,​ 0X, 0x, 0Y, 0y, 0Z, 0z,​ 0g, F7


7F = ID for Real Time​ Universal

nn = Device ID (7F to​ select entire system)

01 = Sub ID 1 for MIDI​ Timecode

02 = Sub ID 2 for User Bits

W, w = User Byte 1​ MS Nibble, LS Nibble

X, x = User Byte 2​ MS Nibble, LS Nibble

Y, y = User Byte 3​ MS Nibble, LS Nibble

Z, z = User Byte 4​ MS Nibble, LS Nibble

g = SMPTE Binary Group​ Flag Bits (2 bits only)

F7 = End of System​ Exclusive (EOX)

GM 2 Universal System Exclusive

These messages are used in GM 2 equipment. They include Master Fine Tuning, Master Coarse Tuning, Reverb Type, Reverb Time, Chorus Type, Chorus Modulation Rate, Chorus Modulation Depth, Chorus Feedback, Chorus Send to Reverb, Controller Destination Setting, Scale/Octave Tuning Adjust and GM System On.

Text System Exclusive

This is a special message that conveys text, as required when sending MIDI information over the Internet via an application such as Midi Phone.

F0, 00, cc, F7


00 = ID for Text

cc = ASCII code for single​ character with the top bit​ removed.

This method of coding can only be used with real ASCII characters whose codes are in the range of 00 to 7F, not special symbols represented by higher codes from 80 to FF.

©Ray White 2004.