Note: this specification came to me in the form of some photocopied pages kindly provided by Marc Camp @ E-MU Systems. He also gave me permission to publish this specification. This was in ... 1994 or 1995, I think. Since then, e-mu has made the complete SoundEngine Manual available as a .PDF-file, so if you want to print it, you should have a look at E-MU's site (I hope that they won't silenty discard it...).
About this MIDI Specification
This section of the manual is included to provide a complete MIDI specification for programmers or MIDI power users. Most of the Music Module's sound programming functions are only available via MIDI SysEx. The Edit One program by Opcode (AFAIK only available for the Apple MacIntosh - H. Seib) allows access to all of the synthesizer parameters.
Dual MIDI Modes
The SoundEngine Music Module incorporates two MIDI modes which affect the way the Music Module responds to incoming MIDI messages.
Mode 1 - General MIDI Mode - F0 7E 00 09 01 F7
The Music Module responds according to the General MIDI spec. On power-up, this mode is automatically invoked and both banks of General MIDI presets are loaded into RAM. General MIDI mode has several features that differ from Non-General MIDI mode.
Mode 2 - Proteus Mode - F0 7E 00 09 02 F7
In this mode, the Music Module behaves in a manner very similar to the Proteus line of sample players, with the addition of digital effects. (Proteus is E-mu's line of professional sound modules utilizing technology and architecture very similar to the Sound Engine Music Module.)
Received Channel Commands
Channels number (n) = 0-15. Message bytes are represented in hex. All other numbers are decimal. Running status is supported. kk = keynumber, vv = velocity / value.
* Proteus Mode Only
** forces all notes & controls off
Special Notes: see following table
Special Notes in Proteus Mode:
All other changes have no effect.
General Information For Sound Engine Music Module SysEx
MIDI SysEx commands
For system exclusive commands, the following format is used:
Preset and setup parameters may be edited individually using system exclusive commands. The preset being edited is the active preset (the preset on the basic or global channel). The value of a given parameter may be changed by sending a parameter value command. The value of a parameter may be read by sending a parameter value request, to which the machine will respond by sending back the parameter value. Please note that there is only one edit buffer.
Two MIDI bytes (lsb, msb) are required for each 14 bit data word. Bits 0-6 are sent first, followed by bits 7-13 in the next MIDI byte. All data words are signed 2's complement values with sign-extension out to the most significant bit (bit 13). This convention applies to all data words, regardless of the parameter's value range.
Preset data may also be transmitted or received in a single block (one complete preset) using system exclusive commands. A preset data request may be issued by a host computer, to which the machine will respond by sending the data block for the requested preset. Conversely, the computer may send new preset data which will replace the specified preset.
The preset memory on the Music Module is volatile, meaning that any changes made to presets will be lost unless the data is saved to the host computer. The factory ROM presets are automatically downloaded into RAM at power-up.
The editor package supplied with the Music Module contains a full-featured librarian which makes it easy to build a custom library of sounds. (Definitely NOT the software that comes with the WaveBlaster - H. Seib)
Warning: When transferring preset banks and tuning table data back and forth from the Music Module to a computer, the data should be recorded as you would a regular sequence. Sending the data in one huge chunk will clog the input buffer on the Music Module unless a time period of approximately 100mS is inserted between each preset.
Received System Exclusive Commands
Transmitted System Exclusive Commands
Note 1 - Version Request
This command allows identification of machine type and software revision. The Music Module ill respond to the request with the version data:
F0 18 04 00 0B 01 r1 r2 r3 F7
r1, r2, r3 = software revision # in ASCII (decimal point between r1 and r2).
Note 2 - Configuration Message
This MIDI command is used to identify the sound sets in a given Music Module. The configuration request command is:
F0 18 04 00 0C F7
The Music Module will respond to this command with the configuration message:
F0 18 04 00 0D pl pm s1 l1 m1 s2 l2 m2 F7
where pl and pm are the lsb and msb of the total number of presets, s1 and s2 are the ID numbers of the sound sets contained in this unit, and n1=l1, m1 and n2=l2, m2 represent the lsb and msb of the number of instruments in each sound set. If no expansion set is present, s2 will be 7F and n2 will be zero.
Sound Engine General MIDI Sound Set = 5.
Note 3 - Instrument List
This MIDI command allows external software to upload the instrument list as an array of ASCII strings. The instrument list request command is:
F0 18 04 00 0E F7
The Music Module will respond to this command with the instrument list message:
F0 18 04 00 0F (14 bytes/instrument) ... F7
The instruments are transmitted in the same order they appear to the user of the music module. Note that a given instrument's position in this list may be different from its actual number within the sound set.
instrument entry: il im (11 ASCII bytes) 00
Each instrument entry in the list consists of the actual instrument number (as defined in "Sound Sets" - see note 12) in lsb, msb format, followed by the instrument name (11 ASCII characters plus a zero terminator) for a total of 14 (decimal) bytes. The first instrument is #1 as displayed on the Music Module. The total number of instrument names is equal to (n1+n2) in the configuration message above.
Note 4 - Preset List
This MIDI command allows external software to upload all preset names as an array of ASCII strings. The preset list request command is:
F0 18 04 00 12 F7
The Music Module will respond to this command with the preset list message:
F0 18 04 13 (13 bytes per preset) ... ... F7
Each preset name is 12 ASCII characters, plus a zero terminator, for a total of 13 (decimal) bytes. The first preset is #0. The total number of preset names is equal to pp in the configuration message above.
Note 6 - Preset Data Request
Music Module presets are organized into ranges. Each range consists of 64 presets. The Music Module has three ranges of presets (0-191). Ranges may be requested using the preset request command and the appropriate preset code listed below. The two codes for ranges 0-63, 64-127 are functionally identical.
Note 7 - Alternate Tuning
The "user tuning table" allows any key to be tuned to an arbitrary pitch over an 8 octave range. If selected in the preset, an alternate tuning may be achieved by modifying the tuning values from the front panel or downloading a new table into the machine. The table consists of 128 words, corresponding to the MIDI key range. Each word is a pitch value expressed in 1/64 semitones, offset from key number 0 (c-2). Therefore, for equal temperament, each entry in the table would be equal to its key number times 64.
Note 8 - Program Mapping (Proteus Mode Only)
MIDI program changes will normally correspond to internal preset numbers 0-127. However, the user may "re-map" any MIDI program number, assigning it to an arbitrary internal preset. This feature allows any of the internal presets to be selected from a MIDI keyboard controller.
Note 9 - Front Panel Data
The front panel request uploads the ASCII text data that would normally be displayed on the LCD of a standard Proteus. The request message is:
F0 18 04 00 17 F7
The Sound Engine Music Module responds with:
F0 18 04 00 18 aa...aa cc 0l F7
Where aa=32 ASCII bytes representing the text on the screen, starting in the top left hand corner of the LCD and moving to the bottom right. cc=LCD cursor position (0 to 1F, 0=top left, 10=bottom left, 1F=bottom right). If a cursor position is specified that exceeds 32, then the cursor will disappear from the screen. This condition is called "Cursor at Rest" and is used for a one way system dialog to the user.
0l=LED status bits (1=on, 0=off)
Switch Press command is:
F0 18 04 00 19 0s F7, where s is the switch number defined below.
Note 10 - User Definable Options
Several options can be enabled or disabled via SysEx messages. These options apply only to General MIDI mode. Upon exiting General MIDI mode options will be restored to default settings.
Option 0 - MPC Map (default on)
All incoming MIDI data on channels 13-16 is ignored. This option maintains compatibility with the MPC extended model.
Option 1 - MIDI Channel Prioritization (default on)
This option enables and disables the General MIDI channel prioritization and minimum/maximum polyphony scheme. The default minimums are: Channel 1:8, channels 2-3:4, channels 4-9:2, channel 10:4, channels 11-16:0. The default maximums are all 32, except for the percussion channel which defaults to 16. When Off, channel priority reverts to a circular assignment mode.
Option 2 - Exclusive Drums (default off)
Exclusive Drums prevents percussion and instrument parts from ever stealing voices from each other. This works by limiting the non-percussion polyphony to 32-n, where n is the maximum polyphony assigned to the non-percussion channel. For example, if the maximum number of percussion voices is 8, there will be a maximum of 24 voices available for other instruments. When this option is selected, the individual maximum-voice settings for the non-percussion channels will not be in effect. Option 1 must be turned on for this option to have any effect.
Option 3 - Single Assign Drums (default off)
This option causes new notes on the percussion channel to mute any of the currently sounding voice channels having the same MIDI note number. Option 1 must be turned on for this option to have any effect.
Option 4 - Show Preset Plus One (default on)
Whenever a preset is displayed, an offset of one is added to the number. This means that the presets correspond to the General MIDI numbering scheme (1-128). With this option off, the numbering scheme becomes 0-127.
Note 11 - Save Edit Buffer
The Save Edit Buffer command causes the contents of the edit buffer to be sent to the designated preset number.
Preset Data Format
Preset data is transmitted and received using the following format: The standard system exclusive header is followed by the preset number (lsb, msb), a 14 bit word for each parameter value (lsb, msb) starting at parameter #0 and continuing upward, a one-byte checksum, and the end-of-exclusive byte (F7). The checksum is the modulo 128 sum of all the parameter value bytes; that is, all of the data bytes following the preset number and before the checksum.
Global / Setup Parameters
Note 12 - Sound Sets
A Music Module sound set consists of sample data (sound ROMs), plus additional instrument data in the program ROMs. Each sound set has a unique ID number. The sound set for the Music Module is #5.
It is necessary to include the sound set number as part of the instrument number when exchanging data. The complete instrument number contains two fields: bits 8-12 specify the sound set (0-31) and bits 0-7 specify the instrument within the sound set (0-255).
With any given sound set, the first instrument is #1 and #0 selects "None".
The "magic number" 1280 represents the start number for the standard Music Module instruments. To calculate the complete instrument number, follow the instructions below:
SysEx Instr.No. = 1280 + Music Module Instr. No.
Next you must convert the SysEx Instr. No. to a 14-bit MIDI number. See the information in the following pages.
Suppose we want to change the instrument to I002 Piano Pad.:
The complete message number to change the primary instrument to #002:
F0 18 04 00 03 17 00 02 0A F7
14-bit Signed 2's Complement Numbers
If the data value is negative, you must first take the 2's complement of the number: In case of a 14-bit number, this is equivalent to adding 16384 to the original negative value. To fit the 7 bit MIDI protocol, numbers must be "nibble-ized".
To get the 14-bit nibble-ized value (of a positive value or a 2's complemented negative value):
msb = value DIV 128 (divide and ignore the remainder)
lsb = value MOD 128 (divide and use only the remainder)
To go the other way (convert 14 bit signed 2's complement to a signed real number)
Raw Value = (msb*128)+lsb (gives you the unsigned raw value)
if Raw Value ³ 8192 (1292 = 2^13)
then Signed Value = Raw Value - 16384 (16384 = 2^14)
Example: To find the "nibble-ized" Hex value of -127:
1) -127 + 16384 = 16252
2) 16252 ÷ 128 = 126 r-124
3) 126 in Hex = 7E = msb
4) 124 in Hex = 7C = lsb
5) Parameter value would be transmitted as 7C 7E
Example: To find the "nibble-ized" Hex value of parameter #257:
1) 257 ÷ 128 = 2 r-1
2) 2 in Hex = 02 = msb
3) 1 in Hex = 01 = lsb
4) Parameter number would be transmitted as 01 02
Note 13 - Patchcord Destinations
The order in which patchcord destinations appear on the screen does not necessarily match the SysEx ordering.