MIDI 1.0

MIDI ports and cable.

The Musical Instrument Digital Interface (MIDI) specification version 1.0 describes the communications protocol and the message format, as well electrical connector.

MIDI 1.0 is a one-way connection from the MIDI Out connector of the sending device to the MIDI In connector of the receiving device, transmitted serially at a rate of 31.25 kbit/s.

## Contents

* 1 Messages
* 1.1 Channel Voice messages
* 1.2 Registered Parameter Numbers
* 1.3 Channel Mode messages
* 1.4 System Common messages
* 1.5 System Exclusive messages
* 1.5.1 Universal System Exclusive messages
* 1.6 System Real-Time messages
* 1.7 Implementation chart
* 1.8 Bandwidth
* 2 Hardware transport
* 2.1 Connectors
* 2.2 Electrical interface
* 2.3 Signal flow
* 3 See also
* 4 References

## Messages

Each MIDI connection carries a stream of MIDI messages made up of 8-bit bytes. The messages are extremely compact, due to the low bandwidth of the connection and the need for real-time accuracy. Most messages consist of a status byte (channel number in the low 4 bits, for a total of 16 channels, and an opcode in the high 4 bits), followed by one or two data bytes.

The channels are used to control several instruments at once using a single MIDI connection. A multitimbral instrument is capable of producing several independent sounds or "voices" simultaneously on separate MIDI channels.

To further optimize the data stream, "Running status" convention allows the status byte to be omitted if it would be the same as that of the previous message. This is possible since status byte always starts with high bit 1, while all data bytes are encoded as 7-bit values and always start with high bit 0.

MIDI messages can be channel messages sent on only one of the 16 channels and monitored only by devices on that channel, or system messages that all devices can receive.

### Channel Voice messages

Channel Voice messages transmit real-time performance data over a single channel. Most messages represent a common musical performance event or gesture such as note-on, note-off, controller value change (including volume, pedal, modulation signals, etc.), pitch bend, program change, aftertouch, channel pressure.

* Note messages represent notes numbered from 0 to 127) with precision down to the semitone. A note-on message starts a note, and a separate note-off message (or note-on message with the velocity set to zero) is needed to end it.
* Pitch-bend Wheel messages range in ±2 semitones (adjustable with Registered Parameter Number 0x0000), with precision of 1/8192 semitone.
* Control Change messages are usually generated using knobs, sliders, footswitches, or pressure on a physical MIDI controller. They are typically used to change the tone, timbre, or volume of an instrument's sound, and change parameters like pitchbend range and musical tuning.
* Program Change messages recall another patch/program on a particular channel, with additional Bank Select controllers that enable access to 16,384 banks of 128 programs.
* Aftertouch messages include Polyphonic Pressure to indicate pressure changes on each note while it is being played, or Channel Pressure messages that indicate pressure changes on the entire keyboard instead of individual keys.

MIDI 1.0 Channel Voice messages  Event | Status byte | Byte 2 | Byte 3 | Description

|
|
|
|

Note Off  | 0x8= 0b1000 | Channel
0x0..0xF | Note Number | Velocity
Note On  | 0x9= 0b1001 | Note Number | Velocity
Polyphonic Key Pressure (Aftertouch)  | 0xA= 0b1010 | Note Number | Pressure
Control Change  | 0xB= 0b1011 | Controller Number | Value
Program Change  | 0xC= 0b1100 | Program Number | Does not appear
Channel Pressure (Aftertouch)  | 0xD= 0b1101 | Pressure | Does not appear
Pitch Wheel  | 0xE= 0b1110 | LSB | MSB
MIDI 1.0 Controllers[1] CC#
MSB | CC#
LSB | Name | Description

|
|
|

0 | 32 | Bank Select
1 | 33O | Modulation wheel or lever
2O | 34O | Breath Controller
4 | 36O | Foot Controller
5 | 37O | Portamento Time
6 | 38 | Data Entry
7 | 39O | Channel Volume
8O | 40O | Balance
10 | 42O | Pan
11 | 43O | Expression
12O | 44O | Effect Control 1
13O | 45O | Effect Control 2
16O | 48O | General Purpose Controller 1
17O | 49O | General Purpose Controller 2
18O | 50O | General Purpose Controller 3
19O | 51O | General Purpose Controller 4
98 | 99 | Non-Registered Parameter Number (NRPN)
100 | 101 | Registered Parameter Number (RPN)
CC# | Name | Description
64 | Damper Pedal (Sustain/Hold) On/Off | Value ≤63 Off, ≥64 On
65 | Portamento On/Off
66 | Sostenuto On/Off
67 | Soft Pedal On/Off
68O | Legato Footswitch On/Off
69O | Hold 2 On/Off
70 | Sound Controller 1 (Sound Variation)
71 | Sound Controller 2 (Timbre/Harmonic Intensity)
72 | Sound Controller 3 (Release Time)
73 | Sound Controller 4 (Attack Time)
74 | Sound Controller 5 (Brightness)
75 | Sound Controller 6 (Decay Time)
76 | Sound Controller 7 (Vibrato Rate)
77 | Sound Controller 8 (Vibrato Depth)
78 | Sound Controller 9 (Vibrato Delay)
79 | Sound Controller 10 (undefined)
80O | General Purpose Controller 5
81O | General Purpose Controller 6
82O | General Purpose Controller 7
83O | General Purpose Controller 8
84O | Portamento Control
88O | High Resolution Velocity Prefix
91 | Effects 1 Depth (Reverb Send Level)
92 | Effects 2 Depth (formerly Tremolo Depth)
93 | Effects 3 Depth (Chorus Send Level)
94 | Effects 4 Depth (formerly Celeste [Detune] Depth)
95 | Effects 5 Depth (formerly Phaser Depth)
96 | Data Increment (Data Entry +1)
97 | Data Decrement (Data Entry -1)

O Optional (not widely implemented).

### Registered Parameter Numbers

Registered Parameters provide additional control over instrument setup. Control Changes #101 and #100 select the parameter number, then Control Changes #6 and #38 set the actual data, while #96 and #97 set relative changes. The same approach is used for Non-Registered Parameter Numbers .

MIDI 1.0 Registered Parameter Numbers (RPN)  Parameter Numbers | Function | Data Entry

|
|

CC#101 | CC#100 | CC#6 / CC#38
0x00 | 0x0 | Pitch Bend Sensitivity | +/- semitones, =+/--cents
0x1 | Channel Fine Tuning | 0x4000 = 440 Hz, range +/-100 cents
0x2 | Channel Coarse Tuning | 0x4000 = 440 Hz, resolution 100 cents
0x3 | Tuning Program Change | Tuning Program Number
0x4 | Tuning Bank Select | Tuning Bank Number
0x5 | Modulation Depth Range | Defnined by General MIDI Level 2
0x6 | MPE Configurarion Message | Defined by MIDI Polyphonic Expression
0x3D | 0x0 | Azimuth Angle | Three Dimensional Sound Controllers (RP-049)
0x1 | Elevation Angle
0x2 | Gain
0x3 | Distance Ratio
0x4 | Maximum Distance
0x5 | Gain at Maximum Distance
0x6 | Reference Distance Ratio
0x7 | Pan Spread Angle
0x8 | Roll Angle
0x7F | 0x7F | Null Function Number | Disable the data entry, data increment, and data decrement controllers

### Channel Mode messages

Channel Mode messages are controller changes 120-127 which affect the entire instrument; they include the Omni/mono/poly mode on and off messages, as well as messages to reset all controllers to their default state or to send "note-off" messages for all notes.

MIDI 1.0 Channel Mode Controllers  CC# | Name | Description

|
|

120 | All Sound Off
121 | All Controllers Off
122 | Local Control On/Off | Value ≤63 Off, ≥64 On
123 | All Notes Off
124 | Omni Off
125 | Omni On
126 | Mono On (Poly Off)
127 | Poly On (Mono Off)

### System Common messages

System messages contain meta-data about other MIDI messages. A sequencer, for example, often sends MIDI clock messages during playback that correspond to the MIDI timecode, so the device receiving the messages (usually a synthesizer) will be able to keep time. Also, some devices will send Active Sense messages, used only to keep the connection between the sender and the receiver alive after all MIDI communication has ceased. MIDI time code is an example of a System Common message. System messages do not include channel numbers, and are received by every device in the MIDI chain.

MIDI 1.0 System Common messages  Event | Status byte | Byte 2 | Byte 3 | Description

|
|
|
|

MIDI Time Code  | 0xF= 0b1111 | 0x1= 0b0001 | Timecode Piece  | Does not appear
Song Position Pointer | 0x2= 0b0010 | LSB | MSB | 14-bit number of beats (​1⁄16 notes)
Song Select  | 0x3= 0b0011 | Song Number  | Does not appear
Tune request  | 0x6= 0b0110  | Does not appear

### System Exclusive messages

System Exclusive (SysEx) messages are proprietary manufacturer's defined control data. SysEx messages are addressed to a specific device in a system. Each manufacturer has a unique identifier and instruments also include a SysEx ID setting, to address two devices of the same model independently.

Manufacturer's System Exclusive messages (also known as Manufacturer SysEx, Manuf Sysx, etc.) are defined by the manufacturer of the sequencer/synthesizer and can be any length. These messages are commonly used to send non-MIDI data over a MIDI connection, such as patch settings, a sound sample, or a sequencer's memory dump. Because they are defined by the device's manufacturer, they are mainly used for backup purposes and rarely (if ever) useful in another MIDI device.

MIDI 1.0 System Exclusive messages  Event | Status byte | Description

|
|

System Exclusive  | 0xF= 0b1111 | 0x0= 0b0000
End System Exclusive  | 0x7= 0b0111

Start of SysEx is followed by either a Manufacturer ID byte, or three Manufacturer ID bytes when the first byte is zero:

`F0 <ID number> <data Bytes>... F7`
`F0 00 <ID number> <ID number> <data Bytes>... F7`

ID number and data bytes use 7-bit values and their high bit is always set to 0.

#### Universal System Exclusive messages

Universal System Exclusive messages are formed from Manufacturer ID number 0x7E for non-realtime and 0x7F for realtime messages, a SysEx 'Device ID' (SysEx 'channel' set in each instrument's settings) or 0x7F to broadcast to all devices, then one or two Sub-ID bytes to indicate function then data bytes:

`F0 <7E or 7F> <device ID> <sub ID#1> ... <data Bytes> ... F7`

They include the significant MIDI Machine Control and MIDI Show Control extensions which enable all types of equipment to easily communicate with each other, as well as MIDI Time Code and MIDI tuning standard.

MIDI 1.0 Universal System Exclusive - Non-Realtime (7E) messages[2] SUB-ID1#
MSB | SUB-ID2
LSB | Name | Description

|
|
|

0x1 |  | Sample Dump Header
0x2 |  | Sample Data Packet
0x3 |  | Sample Dump Reqest
0x4 |  | MIDI Time Code
0x0 | Special
0x1 | Punch In Points
0x2 | Punch Out Points
0x3 | Delete Punch In Point
0x4 | Delete Punch Out Point
0x5 | Event Start Point
0x6 | Event Stop Point
0x7 | Event Start Points with additional info
0x8 | Event Stop Points with additional info
0x9 | Delete Event Start Point
0xA | Delete Event Stop Point
0xB | Cue Points
0xC | Cue Points with additional info
0xD | Delete Cue Point
0xE | Event Name in additional info
0x5 |  | Sample Dump Extensions
0x1 | Loop Points Transmission
0x2 | Loop Points Request
0x3 | Sample Name Transmission
0x4 | Sample Name Request
0x5 | Extended Dump Header
0x6 | Extended Loop Points Transmission
0x7 | Extended Loop Points Request
0x6 |  | General Information
0x1 | Identity Request
0x2 | Identity Reply
0x7 |  | File Dump
0x1 | Header
0x2 | Data Packet
0x3 | Header
0x4 | Request
0x8 |  | MIDI Tuning Standard (Non-Real Time)
0x0 | Bulk Dump Request
0x1 | Bulk Dump Reply
0x2 | reserved
0x3 | Tuning Dump Request
0x4 | Key-Based Tuning Dump
0x5 | Scale/Octave Tuning Dump, 1 byte format
0x6 | Scale/Octave Tuning Dump, 2 byte format
0x7 | Single Note Tuning Change with Bank Select
0x8 | Scale/Octave Tuning, 1 byte format
0x9 | Scale/Octave Tuning, 2 byte format
0x9 |  | General MIDI
0x1 | General MIDI 1 System On
0x2 | General MIDI 1 System Off
0x3 | General MIDI 2 System On
0xA |  | Downloadable Sounds
0x1 | Turn DLS On
0x2 | Turn DLS Off
0x3 | Turn DLS Voice Allocation Off
0x4 | Turn DLS Voice Allocation On
0xB |  | File Reference Message
0x1 | Open File
0x2 | Select or Reselect Contents
0x3 | Open File and Select Contents
0x4 | Close File
0xC |  | MIDI Visual Control
0xD |  | MIDI Capability Inquiry
0x7B |  | End of File
0x7C |  | Wait
0x7D |  | Cancel
7E |  | NAK
7F |  | ACK
MIDI 1.0 Universal System Exclusive - Realtime (7F) messages[2] SUB-ID1#
MSB | SUB-ID2
LSB | Name | Description

|
|
|

0x1 |  | MIDI Time Code
0x2 |  | MIDI Show Control
0x3 |  | Notation Information
0x1 | Bar Number
0x2 | Time Signature (Immediate)
0x42 | Time Signature (Delayed)
0x4 |  | Device Control
0x1 | Master Volume
0x2 | Master Balance
0x3 | Master Fine Tuning
0x4 | Master Coarse Tuning
0x5 | Global Parameter Control
0x5 |  | Real Time MTC Cueing
0x0 | Special
0x1 | Punch In Points
0x2 | Punch Out Points
0x3 | reserved
0x4 | reserved
0x5 | Event Start points
0x6 | Event Stop points
0x7 | Event Start points with additional info
0x8 | Event Stop points with additional info
0x9 | reserved
0xA | reserved
0xB | Cue points
0xC | Cue points with additional info
0xD | reserved
0xE | Event Name in additional info.
0x6 |  | MIDI Machine Control Commands
0x7 |  | MIDI Machine Control Responses
0x8 |  | MIDI Tuning Standard (Real Time)
0x2 | Single Note Tuning Change
0x7 | Single Note Tuning Change with Bank Select
0x8 | Scale/Octave Tuning, 1 byte format
0x9 | Scale/Octave Tuning, 2 byte format
0x9 |  | Controller Destination Setting (GM2)
0x1 | Channel Pressure (Aftertouch)
0x2 | Polyphonic Key Pressure (Aftertouch)
0x3 | Controller (Control Change)
0xA | 0x1 | Key-based Instrument Control
0xB | 0x1 | Scalable Polyphony MIDI MIP Message
0xC | 0x0 | Mobile Phone Control Message

### System Real-Time messages

System Real-Time messages provide means for synchronization, and include MIDI clock and Active Sensing.

MIDI 1.0 System Realtime messages  Event | Status byte | Description

|
|

Timing clock | 0xF= 0b1111 | 0x8= 0b1000
MIDI tick  | 0x9= 0b1001
Start  | 0xA= 0b1010
Continue  | 0xB= 0b1011
Stop  | 0xC= 0b1100
Active Sensing  | 0xE= 0b1110
Reset  | 0xF= 0b1111

### Implementation chart

Devices typically do not respond to every type of message defined by the MIDI specification. A device can be configured to only listen to specific channels and to ignore the messages sent on other channels ("Omni Off" mode), or it can listen to all channels, effectively ignoring the channel address ("Omni On").

An individual device may be monophonic (the start of a new "note-on" MIDI command implies the termination of the previous note), or polyphonic (multiple notes may be sounding at once, until the polyphony limit of the instrument is reached, or the notes reach the end of their decay envelope, or explicit "note-off" MIDI commands are received). Receiving devices can typically be set to all four combinations of "omni off/on" versus "mono/poly" modes.

The MIDI implementation chart was standardized by the MMA as a way for users to see what specific capabilities an instrument has, and how it responds to messages. A specific MIDI Implementation Chart is usually published for each MIDI device within the device documentation.

### Bandwidth

The serial nature of MIDI messages means that long strings of MIDI messages take an appreciable time to send, at times even causing audible delays, especially when dealing with dense musical information or when many channels are particularly active.

## Hardware transport

### Connectors

MIDI connectors are standard 5-pin 180° DIN connectors. Only two of the five pins (pins 4 and 5) are used for MIDI signal transmission.

Most MIDI capable instruments feature a MIDI IN, MIDI OUT, and occasionally a MIDI THRU connection in the form of five-pin DIN connectors. In order to build a two-way physical connection between two devices, a pair of cables must be used. The MIDI THRU jack simply echoes the signal entering the device at MIDI-IN. This makes it possible to control several devices from a single source.

Computer sound cards included a game ports with 15-pin D-subminiature connectors that provides MIDI IN/MIDI OUT- a short adapter cable can converts the D-subminiature pinout into standard DIN connectors.[3]

### Electrical interface

An electrical schematic of the MIDI electrical/optical interconnection.

The MIDI specification for the electrical interface is based on a fully isolated current loop. It provides a one-way (simplex) digital current loop electrical connection sending asynchronous serial communication data at 31,250 bits per second. The serial transmission comes in 8-N-1 format, i.e. one start bit (must be 0), eight data bits, no parity bit and one stop bit (must be 1), so up to 3,125 bytes per second can be sent

The current loop on the transmitter side drives the LED of an opto-isolator on the receiver side. The MIDI Out port nominally provides a +5 volt source through a 220 ohm resistor out through pin 4 on the DIN connector, in on pin 4 of the receiving device's MIDI In connector, through a 220 ohm protection resistor and the LED of an opto-isolator. The current then returns via pin 5 on the MIDI In port to the originating device's MIDI Out port pin 5, again with a 220 ohm resistor in the path, giving a nominal current of about 5 milliamperes.

Only one end of the loop is referenced to ground, with the other end "floating", to prevent ground loops which may otherwise cause interference and hum in analog audio signals. The MIDI specification provides for a ground "wire" and a braid or foil shield, connected on pin 2, protecting the two signal-carrying conductors on pins 4 and 5. However to improve EMI/EMC performance and filtering of RF noise, shield can be connected to ground directly or through a small ceramic capacitors and ferrite beads can be installed in the signal path.[4] The maximum distance is specified at 15 meters (50 feet), although it can normally go much farther.[5]

### Signal flow

The opto-isolator must be a high-speed type, with less than 2 μs risetime. As most opto-isolators have asymmetrical positive-going and negative-going slew rates, they slightly alter the signal's duty cycle. If several MIDI devices are connected in series by daisy-chaining the MIDI THRU to the next device's MIDI-IN, the signal gets more and more distorted, until receive errors occur due to pulse narrowing.

At the physical layer (MIDI cable), a pair of wires carry the MIDI signal. The voltage difference is normally 0 volts (both at positive potential referenced to ground) in the idle state, which is seen as a '1' at the MIDI receiver due to logic inversion by the Opto-isolator. A MIDI message start bit (0) causes a voltage differential on the wire pair (current loop) which is seen at the MIDI receiver as a '0'. The 8 data bits can be either '0' (low) or '1' (high) with the stop bit (1) seen at the MIDI receiver as a '1'. To summarize:

* Logic 1 → High → no current flow → Opto-isolator LED off → MIDI receiver sees High, logic '1' (data bits, stop bit or idle)
* Logic 0 → Low → current loop flow → Opto-isolator LED on → MIDI receiver sees Low, logic '0' (data bits, start bit)

## See also

* MIDI Machine Control
* MIDI Show Control
* MIDI timecode
* MIDI controller
* MIDI mockup
* MIDI usage and applications
* MIDI Tuning Standard
* MIDI beat clock
* Midiboard
* General MIDI
* Comparison of MIDI standards

## References

1. ↑ https://www.midi.org/specifications-old/item/table-3-control-change-messages-data-bytes-2
2. ↑ 2.0 2.1 https://www.midi.org/specifications-old/item/table-4-universal-system-exclusive-messages
3. ↑ MIDI DIN Electrical Specification - MIDI.org
4. ↑ MMA. "MIDI DIN Electrical Specification". Archived from the original on 22 December 2015. https://web.archive.org/web/20151222120442/http://www.midi.org/techspecs/ca33.pdf. Retrieved 31 August 2016.
5. ↑ http://www.richmondsounddesign.com/faq.html#midilen

0.00

(0 votes)

|

Retrieved from "https://handwiki.org/wiki/index.php?title=MIDI_1.0&oldid=246567"