Content on this site is accessible to all versions of every browser. However, your browser may not be able to experience the full visual design of this website.

MIDI Specification Info

(MIDI) MIDI 1.0
(GM) General MIDI
(DLS)Downloadable Sounds
(SP-MIDI) Scalable Polyphony MIDI
(MDLS/XMF) Mobile DLS & Mobile XMF
(SMF) Standard MIDI Files
(XMF) eXtensible Music File
MIDI Tuning
(MMC) MIDI Machine Control
(MSC) MIDI Show Control

Specifications Index
Ordering Instructions

MIDI TUNING Extensions (CA-020)

Also see:
Complete MIDI 1.0 Detailed Specification
MIDI Tuning
Scale/Octave Tuning

Bank and Dump Extensions

The first three messages in these extensions are based on existing MIDI Tuning messages, with the addition of the bank select byte. In the MIDI Spec V4.2, document version 96.1, page 50, a Tuning Bank Select Registered Parameter Number (RPN) is defined for choosing among banks of tuning programs. However, no way to store a tuning message in a specific bank is defined, because the messages do not include a bank number in addition to the tuning program number. These extensions correct that oversight.

The next new message provides a non real-time version of the Single Note Tuning message. The intent of a non-real time message is that it should specifically be sent as a setup message. If it is NOT sent as a setup message (that is, if it is sent during performance), it is assumed that the message will be ignored for notes that are already sounding. However, certain Recommended Practices, (RPs), may implement this differently. Manufacturers should therefore consult the specific RP for the required response and should document the device’s response in the user manual.

The last two messages are new dump messages for supporting Scale/Octave tables (see Scale/Octave Tuning).

Message #1

BULK TUNING DUMP REQUEST (BANK)

F0 7E <device ID> 08 03 bb tt F7

    F0 7E          Universal Non-Real Time SysEx header

    <device ID>    ID of target device (7F=all devices)

    08             sub-ID#1 = "MIDI tuning standard"

    03             sub-ID#2 = "BULK TUNING DUMP REQUEST (BANK)"

    bb             bank: 0-127
                  (described as 1-128 in MIDI Tuning Specification)

    tt             tuning preset number: 0-127

    F7             EOX

This message is identical to the BULK TUNING DUMP REQUEST except for the addition of the bank select byte (bb). The receiving device will send back a Tuning Dump message which will vary depending on which tables, (key-based or scale/octave), are supported by the instrument.

Message #2

KEY-BASED TUNING DUMP

F0 7E <device ID> 08 04 bb tt <tuning name> [xx yy zz] ... chksum F7

    F0 7E         Universal Non-Real Time SysEx header

    <device ID>   ID of target device (7F=all devices)

    08            sub-ID#1 = "MIDI tuning standard"

    04            sub-ID#2 = "KEY-BASED TUNING DUMP"

    bb            bank: 0-127
                  (described as 1-128 in MIDI Tuning Specification)

    tt            tuning preset number: 0-127

    <tuning name> 16 ASCII characters

    [xx yy zz]    frequency data for one note (repeated 128 times)

    checksum      see "Checksum calculation", below

    F7            EOX

This message is identical to the current BULK TUNING DUMP except for the addition of the bank select byte (bb). The message was renamed KEY-BASED TUNING DUMP to differentiate between it and the new scale/octave tuning messages. (See below)

Message #3

SINGLE NOTE TUNING CHANGE (REAL-TIME) (BANK)

F0 7F <device ID> 08 07 bb tt ll [kk xx yy zz] ... F7

    F0 7F         Universal Real Time SysEx header

    <device ID>   ID of target device (7F=all devices)

    08            sub-ID#1 = "MIDI tuning standard"

    07            sub-ID#2 = "SINGLE NOTE TUNING CHANGE (REAL-TIME)(BANK)"

    bb            bank: 0-127
                  (described as 1-128 in MIDI Tuning Specification)

    tt            tuning preset number: 0-127

    ll            number of changes
                  (1 change = 1 set of [kk xx yy zz])
                       [kk          MIDI key number
                       xx yy zz]    frequency data for that key
                                    (repeated 'll' number of times)

    F7            EOX

This is identical to the current SINGLE NOTE TUNING CHANGE (REAL-TIME) except for the addition of the bank select byte (bb). This message WILL affect currently sounding notes.

Message #4

SINGLE NOTE TUNING CHANGE (NON REAL-TIME) (BANK)

F0 7E <device ID> 08 07 bb tt ll [kk xx yy zz] ... F7

    F0 7E          Universal Non-Real Time SysEx header

    <device ID>    ID of target device (7F=all devices)

    08             sub-ID#1 = "MIDI tuning standard"

    07             sub-ID#2 = "SINGLE NOTE TUNING CHANGE (NON REAL-TIME)(BANK)"

    bb             bank: 0-127 (described as 1-128 in MIDI Tuning Spec)

    tt             tuning preset number: 0-127

    ll             number of changes (1 change = 1 set of [kk xx yy zz])
                      [kk         MIDI key number
                      xx yy zz]   frequency data for that key
                                  (repeated 'll'number of times)

    F7             EOX

This is identical to the current SINGLE NOTE TUNING CHANGE (REAL-TIME) except for the addition of the bank select byte (bb) and the change to a NON REAL -TIME header. This message allows the sender to specify a new tuning change that will NOT update the currently sounding notes.

Message #5

SCALE/OCTAVE TUNING DUMP, 1 byte format

F0 7E <device ID> 08 05 bb tt <tuning name> [xx] ... chksum F7

    F0 7E          Universal Non-Real Time SysEx header

    <device ID>    ID of target device (7F=all devices)

    08             sub-ID#1 = "MIDI tuning standard"

    05             sub-ID#2 = "SCALE/OCTAVE TUNING DUMP, 1 byte format"

    bb             bank: 0-127
                   (described as 1-128 in MIDI Tuning Specification)

    tt             tuning preset number: 0-127

    <tuning name>  16 ASCII characters

    [xx]           frequency data for C,C#,... B (12 bytes total)
                     00H means -64 Cent
                     40H means +/- 0 Cent
                     7FH means +63 Cent

    chksum         see "Checksum calculation", below

    F7             EOX

Message #6

SCALE/OCTAVE TUNING DUMP, 2 byte format

F0 7E <device ID> 08 06 bb tt <tuning name> [xx yy] ... chksum F7

    F0 7E          Universal Non-Real Time SysEx header

    <device ID>    ID of target device (7F=all devices)

    08             sub-ID#1 = "MIDI tuning standard"

    06             sub-ID#2 = "SCALE/OCTAVE TUNING DUMP, 2 byte format"

    bb             bank: 0-127
                   (described as 1-128 in MIDI Tuning Specification)

    tt             tuning preset number: 0-127

    <tuning name>  16 ASCII characters

    [xx yy]        frequency data for C,C#,... B (24 bytes total)
                      00H 00H means -100 cents (8,192 steps of .012207 cents)
                      40H 00H means 0 cents (equal temperament)
                      7FH 7FH means +100 cents (8,191 steps of .012207 cents)

    chksum         see "Checksum calculation", below

    F7             EOX

The minimum and maximum offsets are approximately 100 cents.

Checksum calculation:

The checksum field, where present, is calculated by successively XOR'ing the bytes in the message, excluding the F0, F7, and the checksum field. The resulting value is then AND'ed with 7F, to create a 7 bit value.

Notes:

Subsequent to approval of these message by MMA members in January 1999, the names of these messages were changed for clarity, and the <device id> definition was changed to be consistent.


Approved by MMA 02/99 / Approved by AMEI 05/99
Contents Copyright 1999-2004 MIDI Manufacturers Association Incorporated