Oberheim Xpander MIDI SPECIFICATION Part Number 950038 Oberheim A Division of ECC Development 2230 South Barrington Avenue Los Angeles, California 9006 This document assumes familiarity with the MIDI 1.0 specification and the operation of the Xpander (or Matrixx-12). Unless otherwise stated, all specifications and references to Xpander apply to both Xpander and Matrix-12. For further information on the Xpander refer to the 0berheim Xpander Owner's Manual (Part number 950036). Xpander Overview The Xpander is an unusual musical instrument both in operation and in its MIDI implementation. To understand some of the ramifications of MIDI applied to the Xpander it is necessary to understand certain terms and concepts. This section discusses some of the important concepts and features of the Xpander. MIDI Control It should be mentioned at the start that at the present time almost all functions of the Xpander which are accessible from the front panel may be controlled via MIDI system exclusive data. In addition, every button-press and knob-turn may be transmitted to MIDI. This means that almost every feature described in this document is controllable from MIDI. Page Editing The Xpander differs from most synthesizers in the fact that it's voices are separately programmable. This means that there are six independent monophonic synthesizers in one package (twelve in the Matrix-1 2) that share a common front panel and MIDI interface. More than l200 controls share the same set of six front panel knobs and switches. This is accomplished by grouping the controls into units called pages. For example, all of the controls for Oscillator 1 are displayed at once when the 'VCO 1 page select" button is pressed. The controls in the PAGE MODIFIER section allow editing of the frequency, detune, pulse width and volume of Oscillator 1. Other pages allow control of the VCF, FM, envelopes, LFOS, transpositions, the MIDI and cassette interfaces, and many other aspects of the Xpander's sound and operation. Edit Modes The Xpander's voices can be operated in several different modes. In Single Patch mode all voices play the same sound. The page select buttons select pages which pertain to the sound of a voice and any modification of the sound is played by all voices. There are 1 00 single patch programs for storing sounds. Each stores all information needed to play a sound on one voice. When a single patch is recalled, that sound is copied to all voices. Single patch mode emulates a normal homogenous synthesizer and may be used to create sounds to be used in a multi patch. When using the Xpander merely to double another synthesizer, single patch mode is normally used. In Multi Patch mode, a different single patch sound can be assigned to each voice. The page select buttons select pages which affect this collection of sounds. Each of the 1 00 multi patch programs will remember the assignment of patches to voices as well as the relative transpositions, panning, volume, and control sources of each voice. So in effect, a single patch remembers a sound, while a multi patch remembers information about a collection of sounds but not the sounds themselves. Multi patch mode must be used when voices are to play different sounds. A multi patch, unlike a single patch, remembers keyboard assignment modes, and must be used when creating patches that play all voices in unison. A submode of multi patch mode is Patch Edit mode where the Xpander still plays separate sounds on each voice, but the controls affect the sound of one or more voices as though in single patch mode. This submode is useful for editing one or more voices in the context of an entire multi patch. Voice Assignment It is desirable to have completely independent control of each voice by assigning each voice to its own MIDI channel. But it is also necessary to be able to do polyphonic voice assignment so that a note stream may be sent on one channel and the machine will assign voices to those notes as available. The Xpander provides the flexibility to operate in both modes simultaneously and even makes the configuration programmable with a multi patch. This is accomplished by allowing independent assignment of the control source for each voice. Options for control sources are any of the six Control voltage/Gate inputs on the rear panel (Xpander only), any one of the sixteen MIDI channels, or one of three Zones (six Zones on the Matrix-12). These Zones, an Oberheim innovation, are polyphonic note assignment modules. For each Zone, its control source (one of the sixteen MIDI channels or OMNI) , the range of notes over which it is active (MIDI notes 1 through 127), and the method by which it should assign notes to voices (including Rotate, Reassign, Reset, and three unison modes) may be specified. The following additional parameters apply only to Matrix-12 Zones: The built in keyboard may be used as a control source, MIDI IN and MIDI OUT may be enabled or disabled separately, and the VOICE ROB feature may been enabled or disabled. When MIDI OUT is enabled, notes played on the keyboard will also go to MIDI OUT on the selected Basic Channel. If the CONTROLLERS option is enabled, the levers, pressure and pedal inputs will also be transmitted to MIDI OUT. Master MIDI Page Accessing the master MIDI page allows further control of the MIDI configuration. These parameters are not programmable. The Xpander's Basic Channel is the MIDI channel which is used when addressing the machine as a whole, i.e. program changes, global controllers and "All Notes Off" commands. The Basic Channel may be set to any one of the sixteen MIDI channels. The controller assignment page is used to define what MIDI data is used when a patch refers to "Lever 1", "Lever 2", "Pedal 1', or "Pedal 2". The defaults are: -Lever 1 is assigned to MIDI "Channel Pitch Bend". -Lever 2 is assigned to MIDI Continuous Controller #1 which is commonly the modulation lever or wheel. -Pedal 1 is assigned to the Xpander's Pedal 1 jack. -Pedal 2 is assigned to the Xpanders Pedal 2 jack. - Pressure is assigned to MIDI "Channel Pressure". Any of these may be assigned to any of the MIDI controllers (O - 121). In addition, Lever 2 may be assigned to "Channel Pitch Bend". There is a fundamental difference between Lever 1/Pedal 1 and Lever 2/ Pedal 2. The difference is that while Lever 1 and Pedal 1 are separate for each channel, Lever 2 and Pedal 2 are only received on the Basic Channel and sent to all voices. An example of this practice is using the default assignments given above, modulate the pitch of each voice with Lever 1, and modulate the amount of vibrato on each voice with Lever 2. If each voice is receiving notes from a different channel, this will allow independent pitch bends on each voice while Controller #1 data received on the Basic Channel will affect all voices in parallel. The MIDI Enables page allows selection of which information is transmitted and received via MIDI. The SYSTEMX option controls flow of system exclusive information which includes all page editing and patch transfer. The XMITCV option (Xpander only), when selected, converts all Control voltage/Gate information received at the back of the Xpander into MIDI Note On/Note Off information. When CV POLY is selected, the CV information is transmitted on the Basic Channel. When CV MONO is selected, the CV information is transmitted on consecutive MIDI channels starting with the Basic Channel. The ECHO option allows the Xpander to function as a mixer, accumulating commands appearing at its MIDI input (excepting system exclusive commands), combining them with locally generated data (including system exclusive and converted CVs), and re-transmitting them to its MIDI output. The CONTROL option determines whether "Channel Pitch Bend", "Channel Pressure", and "Channel Controller" information is accepted from MIDI. The PATCH option enables recognition and transmission of "Channel Patch Change" commands. The MIDI Enables page also allows selection of the scaling of the velocity in Note On and Note Off commands. The choices are: LINEAR - the velocity is not modified before application as a modulation amount. EXPO 1 - the velocity is passed through an exponential table where an input of 1 corresponds to an output of 1 and an input of 127 corresponds to an output of 255. EXPO 2 - the same as EXPO 1 except the input range for maximum output range is 16 to 120. This is primarily for machines which are capable of sending only a limited range of velocity values. EXPO 3 (Matrix-1 2 only) - Similar to the other EXPO modes with linear response in the normal playing range. The final control on this page is the DEFAULTS option (Xpander Main Processor Software Version 1.1 and earlier only), which when in the NO DEFAULTS mode leaves the MIDI configuration intact when power is cycled. The DEFAULTS ON selection will reset the MIDI configuration at power up (see below). The SEND subpage (one of the few not accessible from MIDI) allows the user to send the contents of the current edit buffer to MIDI. There is a separate protocol for requesting patches from and sending patches to an Xpander which is under external control. The MIDI RESET subpage allows the user to reset all MIDI parameters to the default status. That is: - Basic Channel = 1 -All options on the MIDI Enables page OFF. -All notes off The MIDI MUTE key allows the user to clear the gates of all voices as though an All Notes Off command had been received. Alternatively, selecting the TUNE page will both remove the gates of all voices and reset all envelopes. Triggers and Gates Traditionally, triggers have been used to start the attack phase of an envelope. On monophonic synthesizers, a single trigger is generated by playing a key while no other keys are down, and a multi trigger is generated by playing a new key, regardless of whether the voice is already playing. In other words, one single trigger is generated when the gate becomes active, and multi triggers are generated by changing the note while the gate is not changing. The gate is active as long as the key is down. In the Xpander, the envelopes may be triggered independently from either the single or multi trigger sources as well as from an external signal or any of the LFOS. In addition, the LFOs themselves may be reset to a programmable point in their cycle by the single or multi triggers, an external source, or any of the LFOS. In general, when a voice is not gated and it receives a Note On command, both a multi and a single trigger are generated and its gate is set active. Successive Note On commands to that voice while it is still gated only generate new multi triggers. When a voice is not gated, successive Note Off commands will also generate multi triggers. However, Zones will not pass Note On commands to already gated voices, but instead turn off an already playing voice and re-gate it. When the XMITCV option (Xpander only) is selected, a back panel gate which becomes active will generate a MIDI Note On command with a velocity of 40H and the associated CV as the note. If the CV changes while the gate is active, a Note Off for the old CV followed by a Note On with the updated CV will be sent. Internally, however, the CV which changes while the gate is active will generate a multi trigger, but not a single trigger. IMPLEMENTATION NOTES This section discusses the specifics of the data actually transmitted and received via MIDI. There is also discussion of how ambiguous aspects of the MIDI specification 1.0 were interpreted. Status Bytes -Running status is implemented. Data bytes -No action is taken on a command until all status and data bytes for that command have been received correctly. This includes patch transfers. - When the ECHO option is on, a received message is not transmitted until all of the corresponding data bytes have been received and the message has been determined valid. When retransmitted, a complete message, including status byte, is always sent. All Notes Off On machines with Main Processor software versions 1.4 and later (both Xpander and Matrix-12), an All Notes Off command received on a given MIDI channel will only turn off notes that were turned on from the same channel. On units with earlier software versions, an All Notes Off command will turn off all notes that were turned on by MIDI commands. Turning a note off involves removing the gate from a voice and starting the release phase of the envelopes. Modes The Xpander does = respond to Mode Change messages because the POLY/MONO and OMN I ON/OFF status is programmable with each mufti patch and the Xpander is capable of operating in more than one mode simultaneously. The only response to Mode Change messages is to perform an All Notes Off operation for the specified channel. There are, however, some similarities between voice configurations and normal MIDI modes. Assigning a voice directly to a MIDI channel (or CV) effectively puts that voice in MONO/OMNI OFF mode. Using a Zone is the same as putting the voices assigned to that Zone into POLY mode. If the Zone input is specified as OMNI, then those voices are in POLY/OMNI ON mode, otherwise they are in POLY/OMNI OFF mode. Thus a single Xpander multi patch can, for example, be simultaneously run from a CV/Gate input, a single MIDI channel in MONO/OMNI OFF, one Zone in POLY/OMNI ON, and another Zone in POLY/OMNI OFF. This configuration, complete with channel assignments, is programmable with the patch. Power On Defaults (Xpander Main Processor software version 1.1 and earlier only) If the 'DEFAULTS ON' option is selected, when power is applied the Xpander will reset to Basic channel one- (1), with all voice messages disabled except Note On/Note Off. If the "NO DEFAULTS" option is selected, the state of the MIDI parameters at power-up will be the same as it was before power down. Note: the DEFAULTS ON/NO DEFAULTS option has been eliminated starting with Xpander Main Processor software version 1.2 ; the Matrix-1 2 will always be in NO DEFAULTS mode. Note Off (Status = 1000nnnn) Any voice which is both playing the specified note and listening to the specified channel (directly or through a Zone) will have its gate removed. If any voice is assigned directly to the specified channel, but is not currently gated, reception of a note off event will generate a multi trigger ( but not a single trigger) on the voice, and its pitch will be updated to the value specified in the Note Off event. In addition, that voice's release velocity will be updated. Note On (Status = 1 001 nnnn) Any voice assigned directly to the specified channel will have its pitch and velocity assigned to those specified in the Note On event. A multi trigger will be generated for that voice and, if the voice was not already gated, a single trigger will be generated as well. If a Zone is listening to the specified channel and the note value is within the limits specified for the Zone, the note and corresponding velocity will be assigned according to the assignment mode to voices in that Zone. A new single and multi trigger will be generated for the affected voices. If there are no un-gated voices in the Zone, the next voice in the rotation will be "robbed" of its gate and the new note will be played on that voice as though the voice had been free. Control Change (Status = 1011nnnn) All controllers are received as seven bit values, that is, no distinction is made between MSB and LSB controllers (controllers #0 - 31 and #32 - 63) and values from 1 through 126 are not ignored for switches (controllers 64 - 95). Channel mode messages are only received on the Basic channel and are ignored except that they perform an All Notes Off command. Control changes which are received for controllers assigned to Pressure, Lever 1, or Pedal 1 are maintained separately for each MIDI channel. Control changes which are received on any channel to which any voice or Zone is assigned will, if the specified controller is assigned to Lever 2 or Pedal 2, update the global Lever 2 or Pedal 2 values respectively. Program Change (Status = 1100nnnn) Program change messages received on the Basic channel will select that patch number. If the machine is in Multi patch mode, a multi patch will be selected. If in Single mode, a single patch will be selected. If in Patch edit mode, all selected voices will receive that single patch. Channel Pressure (Status = 1101nnnn) The pressure values used in voice modulation are separate for each channel and are only updated by the channel pressure message. This means that when a key is released, a pressure value of zero should be sent, since a Note Off does not automatically clear-the pressure. Pitch Wheel Change (Status = 1110nnnn) Only eight bits of pitch bend are used. A Pitch Wheel Change message can be assigned to either the Lever 1 or Lever 2 modulation sources (or both). Data sent to lever 1 is kept separate for each channel. If a pitch wheel change message comes in on any channel to which a voice or Zone is assigned and Lever 2 is assigned to BENDER, the Lever 2 value used by all voices will be updated. The intended use for this difference is to make ft possible to run the voices "monophonically" and have separate pitch bends or to have all voices respond to a pitch bend on any of the channels. System Exclusive (Status = 1111 0000) The Xpander/Matrix-12 uses the system exclusive format extensively to allow exhaustive control from external sources. Patch request and send, page select, edit mode select, and edit value are some of the commands. For more detail on system exclusive formats see Appendix B. Tune Request (Status = 1111 0110) The Xpander does not transmit this message, but will respond to a received Tune Request by selecting the TUNE page and auto-calibrating the VCO frequency and pulse width and the VCF frequency and resonance. EOX (Status = 1111 0111) The Xpander expects incoming system exclusive transmissions to contain a known amount of information. Thus, the command byte will define the amount of information to be received. When that number of data bytes has been received, the transmission is considered to be complete. The machine then waits for the next status byte. The EOX (End of transmission) message is therefore considered a No-op by the Xpander, although is transmitted as the last byte of every system exclusive message generated. Edit page commands, however, may contain up to six consecutive updates in one transmission. These are processed three bytes at a time. APPENDIX A - MIDI IMPLEMENTATION SUMMARY Transmitted Data - Channel Voice messages Status Data bytes Description 1100 xxxx 0nnn nnnn Program select. (if enabled) 0nnn nnnn = 0 through 99 Recognized Receive Data - Channel Voice Messages Status Data bytes Description 1000 xxxx 0kkk kkkk Note Off (See notes 1,2) 0vvv vvvv 0vvv vvvv = note off velocity 1001 xxxx 0kkk kkkk Note On (See notes 1,2) 0vvv vvvv 0vvv vvvv - 0 Note Off 0wv vvvv > 0 note on velocity 1011 xxxx 0ccc cccc Control Change (if enabled) 0nnn nnnn 0ccc cccc = control number 0nnn nnnn = control value 1100 xxxx 0nnn nnnn Program Select (If enabled) 0nnn nnnn = 0 through 99 1110 xxxx 0nnn nnnn Pitch Bend Change LSB 0nnn nnnn Pitch Bend Change MSB Recognized Receive Data - Channel Mode Messages Status Data bytes Description 1011 xxxx 7BH All Notes Off command. 00H The Xpander turns off all notes that were turned on by MIDI. 1011 xxxx 7CH OMNI mode off 00H The Xpander turns off all notes that were turned on by MIDI. 1011 xxxx 7DH OMNI mode on. 00H The Xpander turns off all notes that were turned on by MIDI. 1011 xxxx 7EH MONO mode on 00H The Xpander turns off all notes that were turned on by MIDI. 1011 xxxx 7FH POLY mode on 00H The Xpander turns off all notes that were turned on by MIDI. Recognized Receive Data - System messages 1111 0110 System Common Message: Tune request Transmitted Data - Channel Voice messages Status Data bytes Description 11l1 0000 10H System exclusive. Oberheim I.D. number. 0ddd dddd Device number: Xpander = 02H (See note 3) Matrix-12 = 04H (Multi patch dump only) 01H Command byte 1 Program data dump follows. 0ccc cccc Command byte 2: Program type 0ccc cccc = 0 :voice data 0ccc cccc = 1: multi patch data 0ppp pppp Command byte 3: Program number data Program data F7H End of System Exclusive status byte (EOX) 111l 0000 10H System exclusive. Oberheim I.D. number 02H Device number: Xpander = 2 04H Command byte 1 : Copy 0xxx xxxx Data : Lower 7 bits first followed by 0000 000x most significant bit. F7H End of System Exclusive status byte (EOX) 11l1 0000 10H System exclusive. Oberheim I.D. number 02H Device number: Xpander = 2 07H Command byte 1 : Store 0xxx xxxx Data: program number. F7H End of System Exclusive status byte (EOX) 1111 0000 10H System exclusive. Oberheim I.D. number 02H Device number: Xpander = 2 0AH Command byte 1 : Page edit follows 00H data. F7H End of System Exclusive status byte (EOX) 111l 0000 10H System exclusive. Oberheim I.D. number 02H Device number: Xpander = 2 0BH Command byte 1 : Page and subpage select 0ppp pppp Page number 0ppp pppp Subpage number F7H End of System Exclusive status byte (EOX) 11l1 0000 10H System exclusive. Oberheim I.D. number 02H Device number: Xpander = 2 0DH Command byte 1 : Programmer Mode Switches 0xxx xxxx Data : Lower 7 bits first followed by 0000 000x most significant bit. F7H End of System Exclusive status byte (EOX) 1111 0000 10H System exclusive. Oberheim I.D. number 02H Device number: Xpander = 2 0EH Command byte 1 : Up/Down 0000 0xx0 Data: Format = Set bit 3 = + key Set bit 2 = key F7H End of System Exclusive status byte (EOX) 1111 0000 10H System exclusive. Oberheim I.D. number 02H Device number: Xpander = 2 0FH Command byte 1 : Modulation Edit follows data F7H End of System Exclusive status byte (EOX) Recognized Received Data Status Data bytes Description 1111 0000 10H System exclusive. Oberheim I.D. number 0ddd dddd Device number - Xpander = 02H (See note 3) 00H Command byte 1 : Program data dump request 0ccc cccc Command byte 2: Program type 0ccc cccc = 0 voice data 0ccc cccc > 0 multi patch data 0ppp pppp Command byte 3: Program number F7H End of System Exclusive status byte (EOX) 1111 0000 10H System exclusive. Oberheim I.D. number 0ddd dddd Device number: Xpander = 02H (See note 3) Matrix-12 = 04H (Multi patch dump only) 01H Command byte 1 Program data dump follows. 0ccc cccc Command byte 2: Program type 0ccc cccc = 0 voice data , 0ccc cccc = 1 multi patch data 0ppp pppp Command byte 3: Program number data Program data F7H End of System Exclusive status byte (EOX) 1111 0000 10H System exclusive. Oberheim I.D. number 0ddd dddd Device number: Xpander = 02H 02H Command byte 1 : All data dump request 00H Command byte 2: voice data F7H End of System Exclusive status byte (EOX) 1111 0000 10H System exclusive. Oberheim I.D. number 0ddd dddd Device number: Xpander = 02H 02H Command byte 1: All data dump request 01H Command byte 2 Multi patch data (Matrix-12) F7H End of System Exclusive status byte (EOX 1111 0000 10H System exclusive. Oberheim I.D. number 0dd dddd Device number: Xpander = 02H 04H Command byte 1 : Copy 0xxx xxxx Data : Lower 7 bits first followed by 0000 000x most significant bit. F7H End of System Exclusive status byte (EOX) 1111 0000 10H System exclusive. Oberheim I.D. number 0ddd dddd Device number: Xpander = 02H 0ccc cccc Command byte 1 : Display control command 05H = Xpander 06H = Matrix-12 data 00H = display control off 01H = 80 bytes of ASCII data follows 02H = display on F7H End of System Exclusive status byte (EOX) 1111 0000 10H System exclusive. Oberheim I.D. number 0ddd dddd Device number: Xpander = 02H 07H Command byte 1 : Store 0xxx xxxx Data: Program number F7H End of System Exclusive status byte (EOX) 1111 0000 10H System exclusive. Oberheim I.D. number 0ddd dddd Device number: Xpander = 02H 0AH Command byte .1 : Page edit follows 00H data F7H End of System Exclusive status byte (EOX) 1111 0000 10H System exclusive. Oberheim I.D. number 0ddd dddd Device number: Xpander = 02H 0BH Command byte 1 : Page and Subpage select 0ppp pppp Page number 0ppp pppp Subpage number F7H End of System Exclusive status byte (EOX) 1111 0000 10H System exclusive. Oberheim I.D. number 0ddd dddd Device number: Xpander = 02H 0DH Command byte 1 : Programmer mode switches 0xxx xxxx Data : Lower 7 bits first followed by 0000 000x most significant bit. F7H End of System Exclusive status byte (EOX) 1111 0000 10H System exclusive. Oberheim I.D. number 0ddd dddd Device number: Xpander = 02H 0EH Command byte 1 : Up/Down 0000 0xx0 Data Format: Set bit 3 = + key Set bit 2 = - key F7H End of System Exclusive status byte (EOX 1111 0000 10H System exclusive. Oberheim I.D. number 0ddd dddd Device number: Xpander = 02H 0FH Command byte 1 : Modulation edit follows data F7H End of System Exclusive status byte (EOX) 1111 0000 10H System exclusive. Oberheim I.D. number 0ddd dddd Device number: Xpander = 02H 10H Command byte 1 : Card select (Matrix-12 only) 0nnn nnnn Voice Card number( 0,l ) F7H End of System Exclusive status byte (EOX) Notes: 1.xxxx: Basic Channel number minus one. I.E. 0000 is Ch. 1 and 0001 is Ch.2 2.kkkkkkk = Note number. 3.The Xpander and Matrix-12 both use system exclusive device number 02H except during multi patch data dumps when the Matrix-12 uses 04H. Xpander/Matrix-12 Specification