MIDI Sysex Messages [Topic]

MIDI System Exclusive messages are variable-length messages taking on the general form

F0 id byte-1 ... byte-n F7

where id is either a Manufacturer ID or a public ID indicating a certain general and device-unspecific request.

Manufacturer IDs

The following Manufacturer IDs are defined for use with make-sysex-data and similar functions.

NOTE: Some Manufacturer IDs consume more than one byte.


Japanese Manufacturer IDs
+Akai-ID+[Constant]
+Casio-ID+[Constant]
+Fostex-ID+[Constant]
+Fujitsu-ID+[Constant]
+Hoshino-Gakki-ID+[Constant]
+Japan-Victor-ID+[Constant]
+Kamiya-ID+[Constant]
+Kawai-ID+[Constant]
+Korg-ID+[Constant]
+Matsushita-Communication-ID+[Constant]
+Matsushita-Electric-ID+[Constant]
+Meisosha-ID+[Constant]
+Midori-ID+[Constant](Midori Electronics)
+Moridaira-ID+[Constant]
+Nishin-Onpa-ID+[Constant]
+Roland-ID+[Constant]
+Sony-ID+[Constant]
+Suzuki-ID+[Constant]
+TEAC-ID+[Constant]
+Yamaha-ID+[Constant]
+Zoom-ID+[Constant]

US Manufacturer IDs
+360-ID+[Constant](360 Systems)
+Adams-Smith-ID+[Constant]
+Ad-Lib-ID+[Constant]
+ADA-ID+[Constant]
+AKG-ID+[Constant](AKG Acoustics)
+Alesis-ID+[Constant]
+Allen-Organ-ID+[Constant](Allen Organ Co.)
+Allen-&-Heath-ID+[Constant](Allen & Heath Brenell)
+Aphex-ID+[Constant]
+Apple-ID+[Constant](Apple Computer)
+Artisyn-ID+[Constant]
+ART-ID+[Constant]
+Axxes-ID+[Constant]
+Baldwin-ID+[Constant]
+Blue-Sky-ID+[Constant](Blue Sky Logic)
+Breakaway-ID+[Constant](Breakaway Technologies)
+Broderbund-ID+[Constant](Broderbund Software)
+Cannon-ID+[Constant](Cannon Research Corp.)
+CAE-ID+[Constant]
+Clarity-ID+[Constant]
+CTI-ID+[Constant](CTI Audio)
+Digidesign-ID+[Constant]
+Digital-Music-ID+[Constant](Digital Music Corp.)
+DOD-ID+[Constant](DOD Electronics)
+Encore-ID+[Constant](Encore Electronics)
+Ensoniq-ID+[Constant]
+ETA-ID+[Constant](ETA Lighting)
+Eventide-ID+[Constant]
+E-mu-ID+[Constant](E-mu Systems)
+Fender-ID+[Constant]
+Gallien-Krueger-ID+[Constant]
+Garfield-ID+[Constant](Garfield Electronics)
+Grey-Matter-ID+[Constant]
+GT-Electronics-ID+[Constant](GT Electr./Groove Tubes)
+Gulbransen-ID+[Constant]
+Harmony-ID+[Constant](Harmony Systems)
+Hotz-ID+[Constant](Hotz Instruments Techn.)
+IBM-ID+[Constant]
+IDP-ID+[Constant]
+InterMIDI-ID+[Constant]
+Intone-ID+[Constant]
+Inventronics-ID+[Constant]
+IOTA-ID+[Constant](IOTA Systems)
+IVL-ID+[Constant](IVL Technologies)
+JL-Cooper-ID+[Constant]
+KAT-ID+[Constant]
+Key-Concepts-ID+[Constant]
+KMX-ID+[Constant]
+KTI-ID+[Constant]
+Kurzweil-ID+[Constant]
+Lake-Butler-ID+[Constant](Lake Butler Sound Co.)
+Lexicon-ID+[Constant]
+Lone-Wolf-ID+[Constant]
+Lowrey-ID+[Constant]
+Marquis-Musi-ID+[Constant]
+Microsoft-ID+[Constant]
+Moog-ID+[Constant](Moog Music)
+Music-Quest-ID+[Constant]
+Musonix-ID+[Constant]
+New-England-ID+[Constant](New England Digital)
+NSI-ID+[Constant](NSI Corporation)
+Oberheim-ID+[Constant]
+Opcode-ID+[Constant]
+Orban-ID+[Constant]
+Palm-Tree-ID+[Constant](Palm Tree Instruments)
+Passport-ID+[Constant](Passport Designs)
+Peavey-ID+[Constant](Peavey Electronics)
+Perfect-Fretworks-ID+[Constant]
+PianoDisc-ID+[Constant]
+Rane-ID+[Constant](Rane Corp.)
+Richmond-ID+[Constant](Richmond Sound Design)
+RJMG/Niche-ID+[Constant]
+Rocktron-ID+[Constant](Rocktron Corp.)
+Rogers-ID+[Constant](Rogers Instrument Corp.)
+Sequential-Circuits-ID+[Constant]
+SGI-ID+[Constant]Silicon Graphics, Inc.
+Software-Toolworks-ID+[Constant](The Software Toolworks)
+Southern-Music-ID+[Constant](Southern Music Systems)
+Spatial-Sound-ID+[Constant](Spatial Sound/Anadi Inc.)
+Spectrum-ID+[Constant](Spectrum Design & Dev.)
+Studer-ID+[Constant](Studer Editech)
+S&S-ID+[Constant](S&S Research)
+Uptown-ID+[Constant]
+Voce-ID+[Constant]
+Voyce-ID+[Constant](Voyce Music)
+Voyetra-ID+[Constant](Voyetra/Octave Plateau)
+Warner-ID+[Constant](Warner New Media)
+Waveframe-ID+[Constant]
+Zeta-ID+[Constant](Zeta Systems)

European Manufacturer IDs
+ADB-ID+[Constant]
+AMEK-ID+[Constant](AMEK Systems & Controls)
+Audiomatica-ID+[Constant]
+Audio-Architecture-ID+[Constant]
+Audio-Vertrieb-ID+[Constant]
+Avab-ID+[Constant](Avab Electronik)
+Bontempi-ID+[Constant](Bontempi/Farfisa)
+Clavia-ID+[Constant](Clavia Digital Instr.)
+DDA-ID+[Constant]
+Digigram-ID+[Constant]
+Dream-ID+[Constant]
+Dr.Boehm-ID+[Constant](Dr Böhm/Musician Int'l)
+Dynachord-ID+[Constant]
+Elka-ID+[Constant]
+FBT-ID+[Constant](F.B.T. Electronica)
+Forefront-ID+[Constant](Forefront Technology)
+Hinton-ID+[Constant](Hinton Instruments)
+Hohner-ID+[Constant]
+Jellinghaus-ID+[Constant]
+JEN-ID+[Constant]
+Kenton-ID+[Constant](Kenton Electronics)
+Larking-ID+[Constant](Larking Audio)
+Marshall-ID+[Constant](Jim Marshall Products)
+Micon-ID+[Constant](Micon Audio Electronics)
+Passac-ID+[Constant]
+PPG-ID+[Constant]
+Quasimidi-ID+[Constant]
+Real-World-ID+[Constant](Real World Design)
+SIEL-ID+[Constant]
+Solid-State-ID+[Constant](Solid Stat Logic)
+Solton-ID+[Constant]
+Soundcraft-ID+[Constant](Soundcraft Electronics)
+Soundtracs-ID+[Constant]
+Southworth-ID+[Constant]
+Stepp-ID+[Constant]
+Strand-ID+[Constant](Strand Lighting)
+Synthaxe-ID+[Constant]
+TC-ID+[Constant](TC Electronic)
+Trident-ID+[Constant]
+Twister-ID+[Constant]
+Waldorf-ID+[Constant](Waldorf Electronics)
+Wersi-ID+[Constant]
+Yes-ID+[Constant](Yes Technology)
+Zero-88-ID+[Constant](Zero 88 Lighting)

Manufacturer-Unspecific ID
+Non-Commercial-ID+[Constant]

+Non-Commercial-ID+ is a non-proprietary ID that may be used by anyone for non-commercial purposes.

Public IDs

+Real-Time-ID+[Constant]
+Non-Real-Time-ID+[Constant]

These IDs are used for certain predefined public messages. Messages using these universal IDs have the form

F0 id device-id sub-id byte-1 ... byte-n F7

where id is either +Real-Time-ID+ or +Non-Real-Time-ID+ and sub-id a secondary ID specifying the type of the particular message. The constant +Real-Time-ID+ is used for messages that need a device's immediate attention, whereas messages flagged with +Non-Real-Time-ID+ may be dealt with at a later point in time.

device-ID is the particular ID of the target device, or

+All-Device-IDs+[Constant]

indicating a broadcast message. Some public messages define further sub-sub-IDs as needed. The following sub-IDs and sub-sub-IDs are defined.


Real-Time Universal Sysex Message Sub-IDs
+Long-Form-MTC-Sub-ID+[Constant]
   +SMPTE-Full-Frame-Sub-ID-2+[Constant]
   +SMPTE-User-Bits-Sub-ID-2+[Constant]
+MIDI-Show-Control-Sub-ID+[Constant]
+Notation-Information-Sub-ID+[Constant]
   +Bar-Marker-Sub-ID-2+[Constant]
   +Time-Signature-Now-Sub-ID-2+[Constant]
   +Time-Signature-Next-Measure-Sub-ID-2+[Constant]
+Device-Control-Sub-ID+[Constant]
   +Master-Volume-Sub-ID-2+[Constant]
+Real-Time-MTC-Cueing-Sub-ID+[Constant]
+MIDI-Machine-Control-Command-Sub-ID+[Constant]
+MIDI-Machine-Control-Response-Sub-ID+[Constant]
+Single-Note-Retune-Sub-ID+[Constant]

Non-Real-Time Universal Sysex Message Sub-IDs
+Sample-Dump-Header-Sub-ID+[Constant]
+Sample-Dump-Packet-Sub-ID+[Constant]
+Dump-Request-Sub-ID+[Constant]
+MIDI-Time-Code-Setup-Sub-ID+[Constant]
   +Setup-Special-Sub-ID-2+[Constant]
   +Setup-Punch-In-Point-Sub-ID-2+[Constant]
   +Setup-Punch-Out-Point-Sub-ID-2+[Constant]
   +Setup-Delete-Punch-In-Point-Sub-ID-2+[Constant]
   +Setup-Delete-Punch-Out-Point-Sub-ID-2+[Constant]
   +Setup-Event-Start-Point-Sub-ID-2+[Constant]
   +Setup-Event-Stop-Point-Sub-ID-2+[Constant]
   +Setup-Xtnd-Event-Start-Point-Sub-ID-2+[Constant]
   +Setup-Xtnd-Event-Stop-Point-Sub-ID-2+[Constant]
   +Setup-Delete-Event-Start-Point-Sub-ID-2+[Constant]
   +Setup-Delete-Event-Stop-Point-Sub-ID-2+[Constant]
   +Setup-Cue-Point-Sub-ID-2+[Constant]
   +Setup-Xtnd-Cue-Point-Sub-ID-2+[Constant]
   +Setup-Delete-Cue-Point-Sub-ID-2+[Constant]
   +Setup-Event-Name-Sub-ID-2+[Constant]
+Sample-Dump-Extensions-Sub-ID+[Constant]
+Inquiry-Message-Sub-ID+[Constant]
+File-Dump-Sub-ID+[Constant]
+MIDI-Tuning-Standard-Sub-ID+[Constant]
+General-MIDI-Message-Sub-ID+[Constant]
+End-of-File-Sub-ID+[Constant]
+Wait-Sub-ID+[Constant]
+Cancel-Sub-ID+[Constant]
+NAK-Sub-ID+[Constant]
+Ack-Sub-ID+[Constant]

System Exclusive Message Utilities

Some functions are provided to help construct data for these predefined sysex messages.

Miscellaneous System Exclusive Messages

make-GM-mode-sysex-data gm-on? &key (device-id +All-Device-IDs+) [Function]

Enable or disable General MIDI System on device device-ID.

make-master-volume-sysex-data &key coarse fine (device-id +All-Device-IDs+) [Function]

Set a device's master volume. The volume may be either specified as a coarse value in the range from 0 to 127, or as a fine value from 0 to 16,383.

make-measure-number-sysex-data num &key (countoff nil) (device-id +All-Device-IDs+) [Function]

The Bar Marker message indicates the start of a musical measure. It can also be used to setup and mark off bars of an introductory "count down" if countoff is t or if num is negative.

make-time-signature-sysex-data numerators denominators &key (32nds 8) (defer nil) (device-id +All-Device-IDs+) [Function]

Specify a time signature. As with MIDI File time signature, 32nds specifies the number of 32nd-notes per "quater note". defer, if nil, puts the signature in effect immediately, or after the current measure has finished, otherwise. In contrast to MIDI File time signatures, however, this device-independent real-time system exclusive message allows the user to specify arbitrary compound meters by passing a sequence of numbers in numerators and denominators. Any numbers passed in denominators, however, must be a power of 2. If the sequences passed in numerators and denominators are of different length, the last element is "sticky". I.e., 3+3+2/8 may be passed as (3 3 2) and 8, and 3/4 + 3/16 as (3 3) (4 16).

SMPTE System Exclusive Messages

SMPTE Format

In each frame, 26 of the 80 bits carry the SMPTE time or "address", in binary coded decimal (BCD) notation. 32 bits are assigned as 8 groups of 4 USER BITS. This capacity is generally used to carry extra info such as reel number and date. Bits 43 and 59 are assigned as the Binary Group Flag Bits BGFB and are used to indicate when a standard character set is used to format the User Bits data. The Binary Group Flag Bits should be used only as shown in the truth table below. The "Unassigned" entries in the table should not be used, as they may be allocated specific meanings in the future.

Bit 43Bit 59
No User Bits format specified 0 0
Eight-bit character set 1 0
Unassigned (Reserved) 0 1
Unassigned (Reserved) 1 1

Accordingly, the following two constants are defined:

+SMPTE-User-Bits-Raw+[Constant]
+SMPTE-User-Bits-Chars+[Constant]

The last sixteen Bits make up the Sync Word. A timecode reader uses these bits to find the frame boundary, the tape direction, and the bit-rate of the sync tone. These bits are fixed and will always be 0011 1111 1111 1101 (0x3FFD).

Bits 40-79
	  7         6         5         4
 9876543210987654321098765432109876543210
 ----------------                           Sync Word
		 ----                       User Bits 8
		     -                      BGFB
		      -                     <Reserved>
		       --                   Hours Tens
			 ----               User Bits 7
			     ----           Hours Ones
				 ----       User Bits 6
				     -      BGFB
				      ---   Minutes Tens
Bits 0-39
	  3         2         1         0
 9876543210987654321098765432109876543210
 ----                                       User Bits 5
     ----                                   Minutes Ones
	 ----                               User Bits 4
	     -                              Bi-Phase Corr.
	      ---                           Seconds Tens
		 ----                       User Bits 3
		     ----                   Seconds Ones
			 ----               User Bits 2
			     -              Drop-Frame Flag
			      -             Color Frame Flag
			       --           Frames Tens
				 ----       User Bits 1
				     ----   Frames Ones

To indicate SMPTE Time Code formats, the following constants are defined:

+SMPTE-Format-24fps+[Constant]
+SMPTE-Format-25fps+[Constant]
+SMPTE-Format-30fps-drop+[Constant]
+SMPTE-Format-30fps+[Constant]
Functions
encode-SMPTE-data hr mn sc fr &key subframes format [Function]

Returns a list of bytes representing the SMPTE hours, minutes, seconds, frames and optional subframes with the time code format properly encoded in the hours byte.

make-SMPTE-full-frame-sysex-data hr mn sc fr &key (format +SMPTE-Format-30fps+) (device-id +All-Device-IDs+) [Function]

The SMPTE Full Frame Message simply cues a slave to a particular SMPTE time. The slave doesn't actually start running until it starts receiving Quarter Frame messages. (Which implies that a slave is stopped whenever it is not receiving Quarter Frame messages). The master should pause after sending a Full Frame, and before sending a Quarter Frame, in order to give the slave time to cue to the desired SMPTE time.

make-SMPTE-user-bits-sysex-data format data &key (device-id +All-Device-IDs+) [Function]

SMPTE also provides for 32 "user bits", information for special functions which vary with each product. Up to 4 characters or 8 digits can be written. Examples of use are adding a date code or reel number to a tape. The user bits tend not to change throughout a run of time code, so rather than stuffing this information into a Quarter Frame, MTC provides a separate SysEx message to transmit this info.

MIDI Time Code Setup System Exclusive Messages

A Setup message can be used to implement one of 19 defined events or messages. A master device uses this message to tell slave units what event to perform, and when to perform those events.

If a Setup message refers to a point in time, it is expressed in SMPTE-fashion, with an additional ff parameter denoting the fractional frames from 0 to 99. Some messages may be extended, i.e. contain additional data bytes.

make-Time-Code-Offset-sysex-data hr mn sc fr ff &key (format +SMPTE-Format-30fps+) (device-id +All-Device-IDs+) [Function]

This message assigns a client a time code offset (typically needed to synchronize different devices or media).

make-Enable-Event-List-sysex-data &key (device-id +All-Device-IDs+) [Function]
make-Disable-Event-List-sysex-data &key (device-id +All-Device-IDs+) [Function]
make-Clear-Event-List-sysex-data &key (device-id +All-Device-IDs+) [Function]

Enable Event List means for a slave to enable execution of events in its internal "list of events" when each one's respective SMPTE time occurs. Disable Event List means for a slave to disable execution of events in its internal "list of events", but not to erase the list. Clear Event List means for a slave to erase all events in its internal list.

make-System-Stop-sysex-data hr mn sc fr ff &key (format +SMPTE-Format-30fps+) (device-id +All-Device-IDs+) [Function]

System Stop refers to a time when the slave may shut down. This serves as a protection against Event Starts without Event Stops, tape machines running past the end of a reel, etc.

make-Event-List-Request-sysex-data hr mn sc fr ff &key (format +SMPTE-Format-30fps+) (device-id +All-Device-IDs+) [Function]

Event List Request is sent by the master, and requests the slave to send all events in its list as a series of Setup messages, starting from the SMPTE time in this message.

make-Punch-In-Point-sysex-data track hr mn sc fr ff &key (format +SMPTE-Format-30fps+) (device-id +All-Device-IDs+) [Function]
make-Punch-Out-Point-sysex-data track hr mn sc fr ff &key (format +SMPTE-Format-30fps+) (device-id +All-Device-IDs+) [Function]
make-Delete-Punch-In-Point-sysex-data track hr mn sc fr ff &key (format +SMPTE-Format-30fps+) (device-id +All-Device-IDs+) [Function]
make-Delete-Punch-Out-Point-sysex-data track hr mn sc fr ff &key (format +SMPTE-Format-30fps+) (device-id +All-Device-IDs+) [Function]

Punch In and Punch Out refer to the enabling and disabling of record mode on a unit. track refers to the track to be recorded. Multiple punch in/punch out points (and any of the other event types below) may be specified by sending multiple Set-Up messages with different times. Delete Punch In or Out deletes the matching point (time and track) from the Cue List.

make-Event-Start-Point-sysex-data event-nr hr mn sc fr ff &key (format +SMPTE-Format-30fps+) (device-id +All-Device-IDs+) [Function]
make-Event-Stop-Point-sysex-data event-nr hr mn sc fr ff &key (format +SMPTE-Format-30fps+) (device-id +All-Device-IDs+) [Function]
make-Xtnd-Event-Start-Point-sysex-data event-nr hr mn sc fr ff data &key (format +SMPTE-Format-30fps+) (device-id +All-Device-IDs+) [Function]
make-Xtnd-Event-Stop-Point-sysex-data event-nr hr mn sc fr ff data &key (format +SMPTE-Format-30fps+) (device-id +All-Device-IDs+) [Function]
make-Delete-Event-Start-Point-sysex-data event-nr hr mn sc fr ff &key (format +SMPTE-Format-30fps+) (device-id +All-Device-IDs+) [Function]
make-Delete-Event-Stop-Point-sysex-data event-nr hr mn sc fr ff &key (format +SMPTE-Format-30fps+) (device-id +All-Device-IDs+) [Function]

Event Start and Stop refer to the running or playback of an event, and imply that a large sequence of events or a continuous event is to be started or stopped. event-nr refers to which event on the targeted slave is to be played. A single event (ie. playback of a specific sample, a fader movement on an automated console, etc.) may occur several times throughout a given list of cues. These events will be represented by the same event number, with different start and stop times.

Event Start and Stop with Additional Information refer to an event (as above) with additional parameters transmitted in data. The additional parameters may take the form of an effects unit's internal parameters, the volume level of a sound effect, etc.

Delete Event Start/Stop means to delete the matching (event number and time) event (with or without additional information) from the Cue List.

make-Cue-Point-sysex-data cue-nr hr mn sc fr ff &key (format +SMPTE-Format-30fps+) (device-id +All-Device-IDs+) [Function]
make-Xtnd-Cue-Point-sysex-data cue-nr hr mn sc fr ff data &key (format +SMPTE-Format-30fps+) (device-id +All-Device-IDs+) [Function]
make-Delete-Cue-Point-sysex-data cue-nr hr mn sc fr ff &key (format +SMPTE-Format-30fps+) (device-id +All-Device-IDs+) [Function]

Cue Point refers to individual event occurences, such as marking "hit" points for sound effects, reference points for editing, and so on. Each cue-nr may be assigned to a specific reaction, such as a specific one-shot sound event (as opposed to a continuous event, which is handled by Start/Stop). A single cue may occur several times throughout a given list of cues. These events will be represented by the same cue number, with different Start and Stop times.

Cue Point with Additional Information is exactly like Event Start/Stop with Additional Information, except that the event represents a Cue Point rather than a Start/Stop Point.

Delete Cue Point means to Delete the matching (cue number and time) Cue Event with or without additional information from the Cue List.

make-Event-Name-sysex-data event-nr hr mn sc fr ff name &key (format +SMPTE-Format-30fps+) (device-id +All-Device-IDs+) [Function]

name merely assigns a name to the given event-nr. It is for human logging purposes.

See Also:

make-sysex-data

Last Modified: 18-Aug-1998