The MIDI Tuning Standard was ratified by the MIDI Manufacturers' Association in January 1992. Credit should be given to Robert Rich and Carter Scholz who wrote and lobbied for this addition to the MIDI specification. Manufacturers have the option of supporting the tuning standard partially or in full. It is featured on some Emu and Ensoniq instruments. Currently they implement only the non-realtime features of the standard.
Request a bulk tuning dump from your synthesizer by sending the following codes:
F0 7E id 08 00 tt F7
where
F0 7E = universal non-realtime SysEx header id = target device ID 08 = sub-ID #1 (MIDI tuning standard) 00 = sub-ID #2 (bulk dump request) tt = tuning program number 0 to 127 in hexadecimal F7 = end of SysEx message
for example, request a bulk dump of tuning program 16 from device 1 with the following message:
F0 7E 01 08 00 10 F7
The synthesizer sends the bulk tuning dump in the following format:
F0 7E id 08 01 tt <tn>x16 <xx yy zz>x128 ck F7
where
F0 7E = universal non-realtime SysEx header id = target device ID 08 = sub-ID #1 (MIDI tuning standard) 01 = sub-ID #2 (Bulk dump reply) tt = tuning program number 0 to 127 in hexadecimal tn = tuning name (16 ASCII characters) xx yy zz = frequency data for one note (repeated 128 times) see below for format ck = checksum F7 = end of SysEx message
The following message changes the tuning of one or more notes in realtime. The "preferred" method according to the specification is to change the tuning immediately for any notes currently sounding. The optional method is to change the tuning only for new notes that follow the tuning message. In reality, the preferred method depends on what the composer is trying to accomplish and this author recommends a global parameter on the synthesizer to select between immediate and new note only retuning.
F0 7F id 08 02 tt ll [kk xx yy zz]x(ll) F7
where
F0 7F = universal realtime SysEx header id = target device ID 08 = sub-id #1 (MIDI tuning standard) 02 = sub-id #2 (note change) tt = tuning program number from 0 to 127 ll = number of notes to be changed (sets of [kk xx yy zz]) [kk xx yy zz] = MIDI note number, followed by frequency data for note F7 = end of SysEx message
Tuning programs and banks are changed using registered parameter number controller messages.
Tuning program change
Bn 64 00 65 03 06 tt (data entry) Bn 64 00 65 03 60 7F (data increment) Bn 64 00 65 03 61 7F (data decrement) n = basic channel number tt = tuning program number from 1 to 128
Tuning bank change
Bn 64 00 65 04 06 tt (data entry) Bn 64 00 65 04 60 7F (data increment) Bn 64 00 65 04 61 7F (data decrement) n = basic channel number tt = tuning bank number from 1 to 128
xx = semitone (MIDI note number to retune to, unit is 100 cents) yy = MSB of fractional part (1/128 semitone = 100/128 cents = .78125 cent units) zz = LSB of fractional part (1/16384 semitone = 100/16384 cents = .0061 cent units) 7F 7F 7F is reserved for no change to the existing note tuning