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
