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 NoNote NameCodekk (Dec)kk (Hex)Frequency (Hz)
1Lowest AA0211527.500
4Lowest CC1241832.703
40Middle CC4603C261.265
49Standard AA46945440.000
88Highest CC81086C4186.000

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

        14 to 1F = Unassigned Controllers 20 to 31

    20 to 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

        34 to 3F = Unassigned Controllers 20 to 31 (codes 52 to 63)

    40 to 5F = 7-bit controllers 40 to 5F (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

        55 to 5A = Unassigned Controllers 21 to 26 (codes 85 to 90)

        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

    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 † ◊

    66 to 77 = Reserved (codes 102 to 119)

    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 = M M 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-frame

        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-frame

        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 byes, 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.