This version of the MMA Web Site is not current. Please click here for the current version.

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 - Scale Octave Tuning (CA-021/RP-020)

Also see:
Complete MIDI 1.0 Detailed Specification
MIDI Tuning
Bank and Dump Extensions

Scale/Octave Tuning (CA-021)

Scale/Octave Tuning is micro-tuning that is automatically repeated in every octave by calibrating a single octave of notes in small fractions of an equal-tempered half-step.  The original MIDI tuning dump message had to define a frequency to each of 128 keys. This proposal defines an easier micro tuning that sets offsets from an equal-tempered half-step by the cent.

If the instrument has a selectable octave tuning presets, this message will offset the tuning from the currently selected preset. The default behavior is to assume that the instrument is set to an equal temperment, and the message will offset from that. Each message that is received will offset from the original preset, not from the modified tuning.

Scale/Octave Tuning consists of the following four messages (plus two new dump messages found under Bank & Dump Extensions). The first and second messages will offset the tuning of each note in cents. The range is -64/+63 cents. The first message is a real time version. Notes that are already sounding should be updated after receiving this message, and future notes will be tuned to the new offsets. The second message is non-real time. The third and fourth messages will offset the tuning of each note using a 2 byte encoding, which allows greater range and resolution. With two tuning bytes, the tuning range can be expanded to approximately +/-100 cents with a resolution of .012207 cents (200 cents divided by 16,384 = .012207 cents). The third message is a real time message. Notes that are already sounding should be updated after receiving this message, and future notes will be tuned to the new offsets. The fourth message is non real-time.

A message can update multiple MIDI channels simultaneously. This is achieved by using a 3 byte channel field in the SysEx message, with 1 bit representing each MIDI channel. There are 5 additional bits in one of the channel bytes, which must be set to 0. These bits are reserved for future expansion of the tuning messages. They are NOT to be used in any proprietary fashion.

MESSAGE #1 [UNIVERSAL REAL-TIME SYSEX]

Scale/Octave Tuning 1-Byte Form (Real-Time)

F0 7F <device ID> 08 08 ff gg hh [ss] ... F7

	F0 7F 		Universal Real-Time SysEx header

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

	08 		sub-ID#1 = "MIDI Tuning Standard"
	
	08 		sub-ID#2 = "scale/octave tuning 1-byte form (Real-Time)"

	ff 		channel/options byte 1
			bits 0 to 1 = channel 15 to 16
			bit 2 to 6 = reserved for future expansion

	gg 		channel byte 2 - bits 0 to 6 = channel 8 to 14

	hh		channel byte 3 - bits 0 to 6 = channel 1 to 7

	[ss]		12 byte tuning offset of 12 semitones from C to B
				00H means -64 cents
				40H means 0 cents (equal temperament)
				7FH means +63 cents

	F7		EOX

MESSAGE #2 [UNIVERSAL NON REAL-TIME SYSEX]

Scale/Octave Tuning 1-Byte Form (Non Real-Time)

F0 7E <device ID> 08 08 ff gg hh [ss] ... 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"

	08		sub-ID#2 = "scale/octave tuning 1-byte form (Non Real-Time)"

	ff		channel/options byte 1
				bits 0 to 1 = channel 15 to 16
				bit 2 to 6 = reserved for future expansion

	gg		channel byte 2 - bits 0 to 6 = channel 8 to 14
	hh		channel byte 3 - bits 0 to 6 = channel 1 to 7
	[ss] 		12 byte tuning offset of 12 semitones from C to B
				00H means -64 cents
				40H means 0 cents (equal temperament)
				7FH means +63 cents

	F7		EOX

MESSAGE #3 [UNIVERSAL REAL-TIME SYSEX]

Scale/Octave Tuning 2-Byte Form (Real-Time)

F0 7F <device ID> 08 09 ff gg hh [ss tt] ... F7

	F0 7F		Universal Real-Time SysEx header

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

	08		sub-ID#1 = "MIDI Tuning Standard"

	09		sub-ID#2 = "scale/octave tuning 2-byte form (Real-Time)"

	ff		channel/options byte 1
				bits 0 to 1 = channel 15 to 16
				bit 2 to 6 = reserved for future expansion
				
	gg		channel byte 2 - bits 0 to 6 = channel 8 to 14
	hh		channel byte 3 - bits 0 to 6 = channel 1 to 7

	[ss tt] 	24 byte tuning offset of 2 bytes per semitone from C to B
				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)
				
	F7 		EOX

MESSAGE #4 [UNIVERSAL NON REAL-TIME SYSEX]

Scale/Octave Tuning 2-Byte Form (Non Real-Time)

F0 7E <device ID> 08 09 ff gg hh [ss 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"

	09		sub-ID#2 = "scale/octave tuning 2-byte form (Non Real-Time)"

	ff		channel/options byte 1
				bits 0 to 1 = channel 15 to 16
				bit 2 to 6 = reserved for future expansion

	gg		channel byte 2 - bits 0 to 6 = channel 8 to 14

	hh		channel byte 3 - bits 0 to 6 = channel 1 to 7

	[ss tt] 	24 byte tuning offset of 2 bytes per semitone from C to B
				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)

	F7		EOX

Notes:

Using a channel bitmap scheme in a system exclusive message is unconventional, but this ability is really necessary for the computer based tuning schemes, in order to change intonation identically on several channels quickly. (Ed: This text was amended 12/2000 by RP-025/amd1)

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.

Defaults for Scale/Octave Tuning (RP-020)

If tuning presets are not supported by the instrument, it is assumed that the initial tuning of the instrument is equal temperament. If presets are supported, it is suggested that the first preset, selected by Bank 0H and Preset 0H, would be equal temperament. Tuning adjusters should begin by selecting Bank 0H, Preset 0H in order to start from equal temperament, if that is the desired behavior.


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