Oberheim MATRIX-6/MATRIX-6R MIDI SPECIFICATION Introduction This document describes the MIDI implementation of the Matrix-6 6-Voice Polyphonic Synthesizer keyboard unit and Matrix-6R rack mount unit. This document assumes that the reader is familiar with both the Matrix-6 or Matrix-6R and the MIDI 1.0 Specification. Unless otherwise noted, this description applies equally to the Matrix-6 and Matrix-6R. The abbreviation "M-6" is used to refer to both. This specification applies to those units using software version 2.13 or later. Some simple notation is used as shorthand in this document. Hexadecimal numbers are written as two digits followed by an "H". Binary numbers are written as eight digits followed by a "B". Decimal numbers have no suffix. Thus, 19H = 25 = 00011001B. In addition, in a MIDI status byte, the character "b" stands for any hexadecimal digit 0 thru F, corresponding to the MIDI channel 1 thru 16 on which the status byte is being transmitted. M-6 parameter names are written just as in the Matrix-6 and 6R Owner's Manual, with the addition of an initial letter before the Patch Number to indicate on which page the parameter appears. "P" indicates a Patch parameter which is edited with a particular Patch, "M" indicates a Master parameter which is in the Master Edit section, and "S" indicates a Split parameter that is edited along with Splits. A feature often uses more than one parameter on more than one Page. The user should be careful when setting up the parameters, since the results can be unexpected when one parameter required is a Patch parameter (and thus changes each time a new Patch is selected), and the other is a Master parameter (and thus is constant across all Patches and Splits). ______________________________________________ MIDI Modes The M-6 receives MIDI mode messages as described below. MIDI Messages Recognized Channel Mode messages are received on the Basic Channel. An All Notes Off operation is done and the MIDI mode (parameter M01 OMNI MODE and M18 MIDI MONO) is changed to the proper mode. The All Notes Off message causes all notes which were originally received on the same Channel as the All Notes Off message to have their gates turned off. In the case of the other Mode Change messages, the gates of all Voices will be removed prior to entering the new mode. When a Mono On message is received, all six Voices will always be made available for Mono Mode, regardless of the value of the last byte of the Mono On message. Although the Omni On message is recorded in Mono Mode, Omni Mode is always treated as being off by the M-6 when in Mono Mode. ______________________________________________ Notes and Voice Assignment This section describes how incoming MIDI Note On and Note Off messages are handled, how notes are assigned to Voices, and when and how MIDI Note On/Off messages are generated and sent out the MIDI Out port. MIDI Poly Mode This section describes the handling and generation of MIDI and keyboard Note On and Note Off messages when the synthesizer is in MIDI Poly Mode. The next section describes note handling when the unit is in MIDI Mono Mode. If the parameter M01 OMNI MODE is ON, then the M-6 will respond to any MIDI Note messages on any MIDI Channel, 1-16 inclusive. If M01 OMNI MODE is OFF, then the M-6 responds to MIDI messages only on its Basic Channel. Note On / Key Press Handling Whenever a note comes in, either from MIDI or the keyboard, the M-6 checks to see if there are any ungated internal Voices available to play the note. If there are one or more voices available, then the unit picks one based on the current keyboard assignment mode (P48 KEYBOARD MODE), as follows: P If parameter P48 KEYBOARD MODE is ROTATE, the next ungated Voice in sequence is picked. P If P48 KEYBOARD MODE is REASSIGN, a check is made to see if any of the ungated Voices last played a note of the same pitch as one now being assigned. If so, that Voice receives the note. If no such Voices exist, it proceeds just as with ROTATE. In either case, once we have a Voice to which to assign the note, the Voice's pitch is updated to the new note's value, the Voice is gated, and both a single and multi trigger are generated on the Voice. If the note came from the keyboard, a MIDI Out message for the same note (with appropriate Attack Velocity) is generated. If the note which has been assigned internally came from MIDI, no MIDI Out message is generated. Note that since the only source of notes on the MATRIX-6R is MIDI, MIDI Out messages are never generated for notes which are played by one of the MATRIX-6R's internal Voices. If all of the available internal Voices of the M-6 are gated, then special handling is required. This handling involves two parameters: P48 KEYBOARD MODE and M13 SPILLOVER. There is a variation REASSIGN mode available on P48 KEYBOARD MODE: REAROB (Reassign-Rob). When this is selected, the M-6 is said to be in "rob" mode. This allows already gated internal Voices to be "robbed" of their current note in order to play new notes. M13 SPILLOVER, which is ON or OFF, indicates that any notes which cannot be played by internal Voices should be "spilled-over" out MIDI: that is, MIDI Out messages should be generated, on the Basic Channel of the unit + 2, to allow an external synthesizer to play the notes. This allows, for example, a MATRIX-6 and a Matrix-6R to be used together as a single, 12-Voice synthesizer. The interaction between these two parameters, and what MIDI Output results is as follows: If Rob Is On, a Voice is picked as the rob "victim." A Voice already playing a note with the same pitch as the one we are trying to assign is selected, if any. If not, the "victim" is picked just as in ROTATE. Once we have a "victim," its pitch is updated to the new note's value, and a multi (but not single) trigger is generated. If the note being assigned came from the local keyboard, then a Note Off MIDI Out message is generated for the note being robbed, with the "default" Release Velocity of 64, and a Note On MIDI Out message is generated for the new note that "robbed" the previous note. If the note came from MIDI, then no MIDI messages are generated. If Rob Is Off, we know that we cannot assign the note internally. The value of M13 SPILLOVER is then checked. If spillover is ON, then a Note On message is generated for the note, but it is transmitted on the MIDI Channel two higher than the unit's Basic Channel. If the Basic Channel is 15 or 16, the output Channel wraps around to 1 or 2, respectively. If spillover is OFF, then the Note On message is generated on the unit's Basic Channel. The message is generated whether or not the note came from the keyboard or from MIDI. This allows units to be cascaded to add more Voices to the Spillover chain. Note Off / Key Release Handling When a MIDI Note Off message is received or a key is released on the keyboard, the unit finds the matching Note On message or key press. From this table, it determines where the note was assigned either an internal Voice, or a MIDI Channel. If the note was assigned to an internal Voice, the gate is removed from the Voice and its Release Velocity updated. If the note originally came from the keyboard, then a MIDI Note Off message is generated to match the previously sent MIDI Note On message. If the note was assigned to MIDI, then a matching Note Off message is generated on the appropriate MIDI Channel (the Basic Channel if the note was not spilled over, or the Basic Channel + 2 if it was spilled over). MIDI Mono Mode In Mono Mode, individual Voices are assigned directly to particular MIDI Channels. This effectively divides up the M-6 into multiple monophonic synthesizers, one per Voice. The Voices are assigned one-to-one with MIDI channels starting at the Basic Channel. Assuming all six Voices are available (if we are in Split Mode, there may be fewer), notes on the Basic Channel would be assigned to Voice 1, notes on the Basic Channel +1 would be assigned to Voice 2, etc. Thus, the unit is receiving on a "band" of Channels six wide. If the Basic Channel selection reaches the end (Channel 16), it wraps around and starts again on Channel 1. Even if the parameter M01 OMNI MODE is ON, the unit will only respond to messages on the appropriate Channel, as described above. Mode3: Omni On/Mono is not supported. If, while in Mono Mode, a second Note On message is received on the Channel which a Voice is monitoring, and the Voice is already playing a note for which a Note Off has not yet been received, the new note will "rob" the Voice from the old note, and a multi (but not single) trigger will be generated. The Note Off message for the old note will not ungate the Voice. Only the Note Off message which matches the new note will remove the gate. In Mono Mode, notes played on the keyboard are assigned to internal Voices in exactly the same way they are in Poly Mode. Mono Mode only affects the way that MIDI note messages are assigned to Voices, and the way in which MIDI Out messages for notes played on the keyboard are generated. Note On / Key Press Handling When a Note On message is received from MIDI, the Channel on which it was received determines exactly which Voice is to play it. If the Voice is ungated, then the note is assigned to it, the Voice is gated, and a single and multi trigger is generated. If the Voice is currently gated, then the old note is "robbed," the Voice is reassigned to the new note, and a multi (but not single) trigger is generated. Since the note originated with MIDI, no MIDI Out message is generated. When a key is pressed on the keyboard, it is assigned to internal Voices as described above for Poly mode. If it was successfully assigned to an internal Voice (either through Voices being free or through Rob mode being ON), and we are in Mono/Omni Off, then a MIDI Note On message is generated for the note on the MIDI Channel to which that Voice is assigned (remember that in Mono Mode, every Voice has a Channel assigned to it). If we are in Mono/Omni On mode, or the note was not assigned to an internal Voice, then the Note On is sent on the Basic Channel. M13 SPILLOVER has no effect in Mono Mode. Note Off / Key Release Handling When a MIDI Note Off message is received on a particular MIDI Channel, the gate is removed from the Voice and its Release Velocity and pitch are updated as appropriate. No MIDI out message is generated. When a key is released, and the matching Note On was assigned to an internal Voice, that Voice becomes ungated. A MIDI Note Off message is generated on the Channel assigned to the Voice. In Mono Mode, the M-6 supports multiple Note Off messages for a single Note On message; this allows multiple updates of the Release Velocity, as is often done by guitar controllers. The Note Off updates the pitch and Release Velocity of the note, and generates a multi trigger. Unison Mode The M-6 has a Unison Mode in which all of the internal Voices (or, if we are in Split mode, all of the Voices assigned to the side of the keyboard which is in Unison Mode) play each note played. Thus, the M-6 is effectively a monophonic synthesizer using six Voices and 12 oscillators. Unison Mode is controlled by parameter P48 KEYBOARD MODE. If this parameter is set to UNISON, all of the Voices will play any incoming note. The Unison Mode priority is strictly Low Note Priority: the lowest note received, on either MIDI or from the keyboard, will be assigned to the Voices, robbing the Voices from the previous note, if any. If a note is robbed, a multi trigger but not a single trigger will be generated. When in Unison Mode, the unit effectively behaves as if it had only one internal Voice. Thus, Spillover (if parameter M13 SPILLOVER is ON) will occur after the first, not the sixth, note is assigned to internal Voices. Note that while Unison Mode affects the way in which notes are assigned to Voices, it does not affect the way that incoming MIDI messages are recognized. Thus, if the unit (in addition to being in Unison Mode) is in MIDI Mono/Omni Off mode, note messages on the Basic Channel will be recognized, and assigned to Voices using Last Note Priority. In Mono/Omni On mode, the unit will assign the first MIDI note received on any Channel to all Voices, and will then continue to monitor that channel alone until a matching Note Off message is received, at which point it will revert to monitoring all Channels. If, while in Mono Mode, a second Note On message is received on the Channel which the Voices are monitoring, and the Voices are already playing a note for which a Note Off has not yet been received, the new note will "rob" the Voices from the old note, and a multi (but not single) trigger will be generated. The Note Off message for the old note will not ungate the Voices; only the Note Off message which matches the new note will remove the gate. Usually, Unison Mode is used with MIDI Poly mode, with either Omni Off or On. _____________________________________________ Controllers Controllers, from the point of view of the M-6, are internal "registers" which hold values put into them. Controllers can be set by one of two sources: a hardware device, such as the lever labelled "1" on the Matrix- 6, or via a MIDI controller change message sent by some other device. Some controllers can only be set by MIDI. For example, the logical controller Lever 2 exists on the Matrix-6R, although it has no physical Lever 2. It is set by another device sending a MIDI controller change message to the appropriate controller number. Local controllers are always summed with controller values received from MIDI. With the exception of lever 1, all of the controllers in the M-6 have associated controller numbers which can be changed by the user and their defaults are given on the next page under the heading Using Controllers. Local and Global Controllers Controllers can be either Local or Global. A Global Controller is one which same value at all times for all of the Voices of the unit. A Local Controller is one where a separate value is maintained for each Voice. This distinction is only important when Controller values are changed via MIDI. When a Local Controller is changed by its corresponding hardware Controller, the value for all of the Voices is updated. When a MIDI Controller change message is received on a particular MIDI Channel for a Local Controller, the values which are updated are those which belong to Voices which are receiving on that Channel. When a MIDI Controller change message is received for a Global Controller on any Channel which the unit is listening to, the value for the parameter is updated for all six Voices in the instrument. Local Controllers are useful for guitar controllers, which can send separate Pitch Bend messages for each string on separate Channels. The M- 6 can properly respond to such messages. In the M-6, Lever 1, Pedal 1, and Pressure are Local. All other Controllers are Global. Controller Parameters The parameter M02 CONTROLLERS controls the handling of MIDI Controller change messages. When M02 CONTROLLERS is ON, Controller messages are generated whenever the hardware Controllers on the M-6 are changed, and Controller change messages via MIDI are recognized and used to update the internal Controller values. When M02 CONTROLLERS is OFF, Controller messages are not generated, and no Controller change message are recognized from MIDI. Using Controllers Controllers are used by the M-6 as modulation sources for its Voices. Controller information can be received over MIDI from specified Controller numbers, and changes to the M-6's own hardware Controllers can be sent over MIDI as Controller change messages. The Controllers on the M-6 are: Controller Name Controller Number Comments (default Value) Pedal 1 7 Continuous, range 0 through 127 Pedal 2 64 Switch, either 0 or 127 Lever 1 BENDER Cannot be reassigned; range 0 through 255 (8 bits) Lever 2 1 Controls both lever 2 and 3 Lever 3 2 The "away" half of lever 2 These Controllers are available as modulation sources on both the Matrix- 6 and Matrix-6R. On the Matrix-6, Pedal 1 and Pedal 2 correspond to the hardware footpedals and Lever 1 and Lever 2 correspond to the hardware levers. These Controllers produce numeric values as their output which are used to modulate the Voices in the M-6. Pedal 1, in hardware, is a continuous controller with range 0 through 127. Pedal 2, in hardware, is a switch and is either open or closed. The M-6 automatically adapts to the type of footswitch (normally open or normally closed) when it is first turned on. The "normal" position corresponds to a numeric value of 0; the "active" position always corresponds to a numeric value of 127. Although Pedal 2 is a switch in hardware, and is always transmitted as either 0 or 127, it can be set to any of its 128 possible values by a Controller change command from MIDI. Lever 1 (the Pitch Bender) produces a continuous range of values, with the lowest value (0) being generated when Lever 1 is pulled all the way towards the user, the median value (127) being generated when the lever is at the center position, and the highest value (255) being generated when the lever is pushed all the way away from the user. Lever 1 on both MIDI transmit and receive is permanently assigned to the Channel Pitch Bend function. Lever 2 generates its lowest value (0) when at center position, and its largest value when it is pulled all the way towards the user. When it is pushed away from the user, the value of Lever 2 stays at 0, but the value of Lever 3 increases as the physical lever is pushed away. Thus, Lever 3 does not correspond to an actual hardware lever but to the "other half" of the throw of Lever 2. On the Matrix-6R, all of the Levers and Pedals still exist as modulation sources, but only the Pedals exist in hardware; in order to use the Levers, Controller Change Messages must be received by the Matrix-6R from MIDI. Pedal 1, Pedal 2, Lever 2 and Lever 3 can be reassigned to different MIDI Channels, although the same Channel is always used for both send and receive; Lever 1 is always assigned to MIDI Channel Pitch Bend on both send and receive. MIDI Messages Sent Assuming that parameter M02 CONTROLLERS is ON, a MIDI message for a Controller is sent whenever one of the hardware controllers is changed. The message is always sent on the Basic Channel of the unit, and includes the new Controller value (even in Split mode). The Controller Number can be set by the user, using Master parameters M06 P M09. The default values of these parameters are given in the table on the previous page. Lever 1 is always sent using MIDI Channel Pitch Bend message, with eight bits. MIDI Messages Recognized Assuming that parameter M02 CONTROLLERS is ON, MIDI Controller Change messages which apply to a Controller Number to which an internal M- 6 Controller is assigned are recognized and updated. Controller change messages are recognized on any of the MIDI channels to which the M-6 is listening. If the Controller being changed is specific to particular Voices rather than Global to the entire instrument, then the Controller Change message will only update the Controller values for those Voices which are listening to the MIDI Channel on which it was received. Split Mode The M-6 supports a Split Mode, where the unit can play two Patches simultaneously. The Patches are assigned to the Upper and Lower areas of the keyboard (with a programmable Split Point dividing the keyboard in two). The Patches are called the "Upper" and "Lower" Patches. When in Split, the unit's six Voices can be assigned as: 6/0 (all Lower, none Upper), 4/2, 2/4, or 0/6 (all Upper, none Lower). Thus, Split mode effectively divides the unit up into two independent synthesizers, each with a certain number of the M-6's six Voices. When in Split mode, the unit has two Basic Channels: the Basic Channel for the overall unit (Channel N) is the Channel on which the Lower keyboard responds to MIDI commands, and the Upper keyboard responds on the next higher MIDI Channel, N + 1. MIDI Output generated by the Lower section goes out on Channel N, and that generated by the Upper area goes out on channel N + 1. Spillover works similarly: Spillover from the Lower goes out on Channel N + 2, and from the Upper on N + 1 + 2, or Channel N + 3. Controller messages, both primary and secondary, are recognized and transmitted on both Channels. Local Controller messages affect only the Voices assigned to the keyboard on whose MIDI Channel the message was received. Global Controller changes affect all Voices. If the Splits of the keyboard overlap, notes played in the overlapping section will be treated exactly as two independent notes: one on the Upper Channel, and one on the Lower. If a keyboard half has no Voices assigned to it (a 6/0 or 0/6 Split), then that section of the keyboard is used only as a controller keyboard generating MIDI Out messages. All key messages from a keyboard section with no Voices transmit on the Channel for that section (N or N + 1). A keyboard area with no Voices never spills over. Remember that Master Edit parameters affect both Patches in Split mode, since Master Edit parameters affect all Patches. This includes many important MIDI settings, such as M01 OMNI MODE, M18 MIDI MONO and M13 SPILLOVER. _____________________________________________ System Exclusive The M-6 uses System Exclusive messages to send Patches from one unit to another and to allow one M-6 to be the "front panel" for another when editing Patches and setting parameters. This section describes the System Exclusive message functions and formats. General Format All System Exclusive messages generated and recognized by the M-6 have the same general structure. This structure consists of three parts: a Lead-In, which starts and identifies the System Exclusive sequence, an Operation, which contains an opcode and data bytes, and an End of Exclusive status byte. There can only be one operation in the System Exclusive message. There are two valid formats of the Lead-In sequence. Once is specific to the Matrix-6 and Matrix-6R, and one is a special message used for compatability with the Matrix-12 and Xpander synthesizers. They differ only in the device ID (06H for the M-6, 02H for the Matrix-12 and Xpander). Unless otherwise noted, the M-6 will recognize System Exclusive messages sent with either Lead-In, and will always generate the M-6 specific format on transmission. The format of an entire System Exclusive message is: Byte Function F0H System Exclusive byte 10H Oberheim ID code dd Device ID, 06H for M-6 specific format, 02H for Matrix-12/Xpander Opcodes are always in the range 0 through 127, inclusive. The number of data bytes is defined by the . The data bytes are always in the range 0 through 7FH. F7H End of System Exclusive (EOX) The M-6 always generates an EOX byte to end its System Exclusive transmissions, and will recognize any Status message except Real-time messages as ending a received System Exclusive message. Any System Exclusive message which contains a manufacturer ID other than 10H, or a device ID other than 06H or 02H, or an illegal opcode, is ignored. In addition, the M-6 will always wait 20 mSec after sending an EOX byte before sending any other data. Conversely, System Exclusive data sent to the M6 P particularly Patch dumps P should be separated by at least 20 mSec. The individual operations are described below. Patch Transmission The M-6 can both send and receive Patches, Split Patches, and Master Edit parameters via MIDI. Patch transmission can be triggered from the front panel or by a MIDI request for a Patch Dump. The M-6 can also be requested to send all of its Single Patches, Splits and Master parameters at once. The operations are: Request Patch Dump This message is used by an external device to request the M-6 to dump one or all of its Patches via MIDI. This is usually used in a "closed loop" MIDI configuration: the MIDI Out of the M-6 goes to the MIDI In of the other device, and the MIDI Out of the other device goes to the MIDI In of the M-6. The format of a Request Patch Dump operation is listed at the top of the following page. Byte Function 04H Opcode xx Code indicating what to transmit: 0: Transmit all Single Patches, Splits, and Master parameters 1: Transmit a Single Patch 2: Transmit a Split 3: Transmit Master parameters pp Patch Number to transmit, 0 P 99 for Single Patches, 0 P 49 for Splits. This byte is ignored for Transmit Master Parameters and Transmit All requests, but but must be included to pad out the fixed-length message. When a DUMP ALL command is received (Code 0), the M-6 will dump all of its internal data as separate Patches, Splits and Master parameter blocks. This means that each patch in the stream will have its own System Exclusive header and EOX command. If it is desired to transfer this data to a remote data storage device, the user should be required to tell the device when the transfer is done (> 1 second after the "10 SEND ALL" message reappears on the M-6's display) or the device should assume more data will be incoming until a timeout of > 500 mSec with no further incoming data has occurred. The total number of bytes transmitted in response to the dump all command is approximately 29K bytes including headers, checksums and EOX marks. It should be noted that all data (excluding headers, checksums and EOX marks) is transmitted nybble-wise, so judicious use of space could store all the transmitted data in as little as 15K bytes. Note that for downward compatibility with version 1.xx, a Single Patch can also be requested by the sequence F0,10,06,00,pp,F7 where pp is the requested Single Patch Number in the range 0 to 99. Single Patch Data This message contains the actual Single Patch data. The opcode is followed by a stream of data bytes containing the Patch information. When more than one Patch is being transmitted at a time (in a "Send All" operation), each Patch is sent as a separate System Exclusive message. The form of a Single Patch dump operation is: Byte Function 01H Opcode pp Single Patch Number from 0 through 99. xx . . . yy Patch or parameter data. Each byte is sent nybble-by-nybble, as follows: Each byte in the (eight bit) Patch data to be transmitted is sent as two bytes. The first sent byte, in its least significant four bits, contains the least significant four bits of the original byte. The second sent byte, also in its least significant four bits, contains the most significant four bits of the original byte. See Appendix A for the exact format of this data. cc Checksum. The original (not transmitted) data is summed in seven bits ignoring overflows, and the result is put here. If this checksum does not match that calculated while reading the sent Patch, an error has been determined and the Patch is ignored. When the M-6 receives a Patch data message via MIDI, it also checks to see that hardware protect is not on, and the Patch whose number is in the message is not protected. It then replaces the Patch in M-6 Patch storage with the Patch received. Split Patch Data This message contains the actual Split Patch data. The opcode is followed by a stream of data bytes containing the Patch information. The form of a Single Patch Dump operation is: Byte Function 02H Opcode pp Split Patch Number from 0 through 49. xx . . . yy Patch data. Each byte is sent nybble-by- nybble, as above. cc Checksum. Master Parameter Data This message contains the actual Master parameter data. The opcode is followed by a stream of data bytes containing the parameter information. The form of a Master Parameter Dump operation is: Byte Function 03H Opcode xx . . . yy Parameter data. Each byte is send nybble-by- nybble, as above. cc Checksum. Remote Editing The M-6 has a set of System Exclusive messages which can be used to edit Patch parameters via MIDI. This is an alternative to transmitting the entire Patch in its edited form. The primary differences are that this editing operation can be performed much more quickly than retransmitting the entire Patch, and any currently gated sounds will continue playing through the remote edit operation. This makes it possible to hear a sound change under remote control without regating the sound after each update. The remote editing System Exclusive messages are: Select Quick Patch Edit This operation selects the Quick mode of the Patch Edit function on the M-6. The M-6 must be in Patch Edit mode in order to act upon parameter change commands. This command should be used as a prefix to any remote editing commands. The select Quick Patch Edit operation has the format: Byte Function 05H Opcode Change Parameter This operation changes the Value of the specified parameter. If the Value specified is out of range for the parameter, the operation is ignored. This operation implicitly selects the specified parameter as the current parameter, just as does the Select Parameter operation. The M-6 must be in QUICK Patch Edit mode to perform this operation. Byte Function 06H Opcode pp Parameter Number to change; must be in range 0 through 99, and specify a parameter in the current Page. vv New parameter Value; must be within correct range for current parameter. This does not support negative Values. Remote Mode Change For compatibility with the Oberheim Xk Keyboard Controller, Matrix-12 and Xpander, the following codes are recognized, although they cannot be generated: Select Single Patch Mode Byte Function F0H Start of System Exclusive 10H Oberheim Mfg. ID 02H Xpander Product Code 0DH Switch Program Mode opcode 01H Select Single Patch Mode F7H End of System Exclusive Select Split Mode Byte Function F0H Start of System Exclusive 10H Oberheim Mfg. ID 02H Xpander Product Code 0DH Switch Program Mode opcode 02H Select "Multi-Patch" (Split) Mode F7H End of System Exclusive Parameters For any System Exclusive messages to be generated or recognized, the parameter M04 SYSTEM EXCLUSIVE must be ON. The Master Edit page parameter M10 SEND DATA is used to send a Single Patch, Split Patch, or the Master Edit parameter set via MIDI to another device. If the M-6 is in Single Patch mode, M10 SEND DATA sends the currently selected Single Patch. If the M-6 is in Split Patch mode, M10 SEND DATA sends the currently selected Split Patch. The parameter M11 SEND ALL sends all of the M-6's 100 Single Patches, 50 Split Patches, and the set of Master Edit parameters to another device. A SEND ALL operation takes about 12 seconds to complete. ______________________________________________ Miscellaneous MIDI Functions Patch Changes The M-6 can both send and receive MIDI Patch Change messages. If parameter M03 PATCH CHANGES is ON, a MIDI Patch Change message will be sent any time the current Patch or current Split is changed, either from the M-6's front panel or via MIDI. The current Patch or Split will also be changed any time a Patch Change message is received via MIDI when M03 PATCH CHANGES is ON. The M-6 ignores commands to change to a Patch Number greater than 99 when in Single mode, and greater than 49 in Split mode. Patch Change messages, both on receive and transmit, are affected by the parameters M15 PATCH MAP and M16 P MAP EDIT. See the next section for details. Patch Mapping The M-6 can translate incoming and outgoing Patch Change messages such that a particular incoming message can select a different Patch on the M- 6, and that selecting a particular Patch on the M-6 can generate a Patch Change message different from the one selected on the sending unit. The parameters which control this feature are M15 PATCH MAP and M16 P MAP EDIT. When M15 PATCH MAP is ON, this feature enables the translating incoming and outgoing Patches through the Patch Map. When off, all incoming and outgoing Patches are acted on and transmitted exactly as they appear. M16 P MAP EDIT is used to change the values of the Patch Map, and is described in more detail in the Matrix-6R Owner's Manual, 1st Edition. Echo If parameter 12 MIDI ECHO is ON, all MIDI data received in the M-6's MIDI In port is immediately retransmitted out the MIDI Out port. MIDI data is retransmitted regardless of what Channel it is being sent on. All of the M-6's internally generated MIDI messages are also transmitted out the MIDI Out port, thus allowing the M-6 to serve as a "MIDI mixer," combining its own data with that from the unit connected to the MIDI In port. System Exclusive data is not retransmitted out the MIDI Out port, whether or not the System Exclusive data is recognized by the M-6 itself. Since MIDI Note messages which are received by the M-6 on the M-6's Basic Channel are never transmitted out MIDI Out by the Voice assignment logic, there is no possibility of multiple Note Ons or Offs being generated on the M-6's Basic Channel from a single Note On or Off message received on the MIDI In port in Echo mode. Only the message generated by the Echo will be sent out the MIDI Out port. If the unit is in Spillover mode, however, there is the possibility that a Note On or Off command will be both echoed out on the Basic Channel and transmitted out the MIDI Out port on the Basic Channel + 2 as part of the Spillover operation. Furthermore, as all MIDI data regardless of Channel is echoed, it is possible that the Spillover messages generated on the Basic Channel + 2 might conflict with other messages if the unit or units plugged into the MIDI In port are also transmitting on the Basic Channnel + 2 of the M-6. To avoid these problems, simply reserve the "band" of four Channels starting with the M-6's Basic Channel to the M-6 and any units set to receive spilled-over notes from it. If Split mode is not going to be used, the band need only be three Channels wide. Running Status The M-6 correctly interprets Running ("Implied") Status on all incoming messages, and generates Running Status on all output Channel Voice Messages when possible. Note Attack/Release Velocity Since the M-6 supports both Attack and Release Velocity on all notes, the M-6 always transmits a Note Off as a separate Note Off message (8bH 0kkkkkkk 0vvvvvvv) rather than as a Note On with zero Velocity (9bH 0kkkkkkk 0). Both forms are correctly handled as MIDI In messages. Local Control Parameter M05 LOCAL CONTROL corresponds to the MIDI Local Control message. If the parameter is ON, then the keyboard on the Matrix-6 sends notes to its own internal Voices as well as out MIDI Out. If the parameter is OFF, then the keyboard only generates MIDI Out notes and does not assign any notes to internal Voices. The internal Voices are controllable only via MIDI. If local control is OFF, then Spillover is disabled as well, regardless of the setting of M13 SPILLOVER. Parameter M05 LOCAL CONTROL is always set to ON upon power-up and reset. Active Sensing The M-6 supports MIDI Active Sensing, both on transmission and reception. If the parameter M14 ACT SENSE is ON, the M-6 does the following: If 240 milliseconds passes with no activity on the M-6's MIDI Out port, the M-6 generates an Active Sense message (status FEH). Once an Active Sense message is received, if 360 milliseconds passes with no activity on the M-6's MIDI In port, the M-6 performs an All Notes Off operation. Any received message on any port counts as "activity" for the purposes of active sensing. If parameter M14 ACT SENSE is OFF, then no Active Sensing messages are generated by the M-6, and the M-6 does not turn off notes until a matching Note On command, or an explicit All Notes Off command, is received. Tune Request The M-6 responds to incoming Tune Request messages by tuning the high frequency oscillators (HFOs). It will transmit a Tune Request message whenever the tune command is given via the second column button in MASTER mode. Note that the Tune Request message is not associated with the M-6's CALIBRATE function. Appendix A: MIDI Implementation Summary Channel Voice Messages Status Data Bytes Description 1000 xxxx 0nnn nnnn Note Off 0vvv vvvv (Release Velocity = 1 P 127) 1001 xxxx 0nnn nnnn Note On 0vvv vvvv (Velocity = 1 P 127, 0 = Note Off: Receive Only) 1011 xxxx 0ccc cccc Controller Change (If Enabled) 0nnn nnnn (Any controller 0 P 121 can be used; all values are 7 bits only) 1100 xxxx 0nnn nnnn Program Select (If Enabled) (Range = 0 P 99) 1110 xxxx 0000 000n Pitch Bend (LSB) 0nnn nnnn Pitch Bend (MSB) Channel Mode Messages 1011 xxxx 7AH Local Control 0ccccccc 0 = Off, 127 = On 1011 xxxx 7BH All Notes Off 00H 1011 xxxx 7CH OMNI Mode Off 00H 1011 xxxx 7DH OMNI Mode On 00H (OMNI is assumed off in MONO ON) 1011 xxxx 7EH Mono Mode On 06H 1011 xxxx 7FH Mono Mode Off 00H System Common Messages 1111 0110 Tune Request 1111 0000 10H System Exclusive P Oberheim ID
Device ID 0F7H End of System Exclusive 1111 0111 End of System Exclusive System Real Time Messages 1111 1110 Active Sensing Appendix B: System Exclusive Data Format Device ID = 06H : Matrix-6 Opcode Byte Description 00H Single Patch Request (Receive Only) 0ppppppp Patch Number (0 P 99) 01H Single Patch Data 0ppppppp Patch Number (0 P 99) See Apendix C 0ccccccc Checksum 02H Split Patch Data 00pppppp Split Number (0 P 49) See Appendix D 0ccccccc Checksum 03H Master Parameter Data See Appendix E 0ccccccc Checksum 04H General Data Request (Receive Only) 000000xx Code For Request Type 0 = Transmit all Single patches, Splits and Master parameters 1 = Transmit a Single Patch 2 = Transmit a Split Patch 3 = Transmit Master Parameters 0ppppppp Patch Number to Transmit 0 P 99 for Single Patches 0 P 49 for Split Patches 0 for Master parameters 05H Enter Remote Edit Mode (Receive Only) 06H Change Parameter (Receive Only) 0ppppppp Parameter to change 0vvvvvvv New Value Device ID = 02H : Xpander (Compatible with Matrix-12, Xk) Opcode Byte Description 0DH Mode Change (Receive Only) 02H Multi Patch Mode (Split Mode) 0DH Mode Change (Receive Only) 01H Single Patch Mode Appendix C: Single Patch Data Format Statistics: 134 Bytes/Single Patch = 268 nybbles transmitted + 5 bytes Header + 1 byte Checksum + 1 byte EOX = 275 total transmitted bytes/Single Patch Byte Parameter # Bits Description 0 - 7 6 each Patch Name Each character is represented by the lower 6 bits of it's ASCII representation. 8 48 2 Keyboard Mode 0 = Reassign 1 = Rotate 2 = Unison 3 = Reassign w/ Rob 9 00 6 DCO 1 Initial Frequency LSB = 1 Semitone 10 05 6 DCO 1 Initial Waveshape 0 = Sawtooth 31 = Triangle 11 03 6 DCO 1 Initial Pulse Width 12 07 2 DCO 1 Fixed Modulations Bit 0 = Lever 1 Bit 1 = Vibrato 13 06 2 DCO 1 Waveform Enable Bit 0 = Pulse Bit 1 = Wave 14 10 6 DCO 2 Initial Frequency LSB = 1 Semitone 15 15 6 DCO 2 Initial Waveshape 0 = Sawtooth 31 = Triangle 16 13 6 DCO 2 Initial Pulse Width 17 17 2 DCO 2 Fixed Modulations Bit 0 = Lever 1 Bit 1 = Vibrato 18 16 3 DCO 1 Waveform Enable Bit 0 = Pulse Bit 1 = Wave Bit 2 = Noise 19 12 6 (signed) DCO 2 Detune Byte Parameter # Bits Description 20 20 6 Mix 21 08 2 DCO 1 Fixed Modulations Bit 0 = Portamento Bit 1 = Not used 22 09 1 DCO 1 Click 23 18 2 DCO 2 Fixed Modulations Bit 0 = Portamento Bit 1 = Keyboard Tracking Enable 24 19 1 DCO 2 Click 25 02 2 DCO Sync Mode 26 21 7 VCF Initial Frequency LSB = 1 Semitone 27 24 6 VCF Initial Resonance 28 25 2 VCF Fixed Modulations Bit 0 = Lever 1 Bit 1 = Vibrato 29 26 2 VCF Keyboard Modulation Bit 0 = Portamento Bit 1 = Keyboard 30 30 6 VCF FM Initial Amount 31 27 6 VCA 1 (Exponential) Initial Amount 32 44 6 Portamento Initial Rate 33 46 2 Lag Mode 0 = Constant Speed 1 = Constant Time 2 = Exponential 3 = Exponential 34 47 1 Legato Portamento Enable 35 80 6 LFO 1 Initial Speed 36 86 2 LFO 1 Trigger 0 = No Trigger 1 = Single Trigger 2 = Multi Trigger 3 = External Trigger 37 87 1 LFO 1 Lag Enable 38 82 3 LFO 1 Waveshape (see Table 1) 39 83 5 LFO 1 Retrigger point 40 88 5 LFO 1 Sampled Source Number 41 84 6 LFO 1 Initial Amplitude Byte Parameter # Bits Description 42 90 6 LFO 2 Initial Speed 43 96 2 LFO 2 Trigger See LFO 1 Triggers above 44 97 1 LFO 2 Lag Enable 45 92 3 LFO 2 Waveshape (see Table 1) 46 93 5 LFO 2 Retrigger point 47 98 5 LFO 2 Sampled Source Number 48 94 6 LFO 2 Initial Amplitude 49 57 3 Env 1 Trigger Mode Bit 0 = Reset Bit 1 = Multi Trigger Bit 2 = External Trigger 50 50 6 Env 1 Initial Delay Time 51 51 6 Env 1 Initial Attack Time 52 52 6 Env 1 Initial Decay Time 53 53 6 Env 1 Sustain Level 54 54 6 Env 1 Initial Release Time 55 55 6 Env 1 Initial Amplitude 56 59 2 Env 1 LFO Trigger Mode Bit 0 = Gated Bit 1 = LFO Trigger 57 58 2 Env 1 Mode Bit 0 = DADR Mode Bit 1 = Free Run 58 67 3 Env 2 Trigger Mode See Env 1 Trigger Mode above 59 60 6 Env 2 Initial Delay Time 60 61 6 Env 2 Initial Attack Time 61 62 6 Env 2 Initial Decay Time 62 63 6 Env 2 Sustain Level 63 64 6 Env 2 Initial Release Time 64 65 6 Env 2 Initial Amplitude 65 69 2 Env 2 LFO Trigger Mode See Env 1 LFO Trigger Mode above 66 68 2 Env 2 Mode See Env 1 Mode above 67 77 3 Env 3 Trigger Mode See Env 1 Trigger Mode above 68 70 6 Env 3 Initial Delay Time 69 71 6 Env 3 Initial Attack Time 70 72 6 Env 3 Initial Decay Time 71 73 6 Env 3 Sustain Level 72 74 6 Env 3 Initial Release Time 73 75 6 Env 3 Initial Amplitude Byte Parameter # Bits Description 74 79 2 Env 3 LFO Trigger Mode (See Env 1 LFO Trigger Mode) 75 78 2 Env 3 Mode (See Env 1 Mode) 76 33 5 Tracking Generator Input Source Code (See Table 2) 77 34 6 Tracking Point 1 78 35 6 Tracking Point 2 79 36 6 Tracking Point 3 80 37 6 Tracking Point 4 81 38 6 Tracking Point 5 82 40 6 Ramp 1 Rate 83 41 2 Ramp 1 Mode 0 = Single Trigger 1 = Multi Trigger 2 = External Trigger 3 = External Gated 84 42 6 Ramp 2 Rate 85 43 2 Ramp 2 Mode (See Ramp 1 Mode) 86 01 7 (Signed) DCO 1 Freq. by LFO 1 Amount 87 04 7 (Signed) DCO 1 PW by LFO 2 Amount 88 11 7 (Signed) DCO 2 Freq. by LFO 1 Amount 89 14 7 (Signed) DCO 2 PW by LFO 2 Amount 90 22 7 (Signed) VCF Freq. by Env 1 Amount 91 23 7 (Signed) VCF Freq. by Pressure Amount 92 28 7 (Signed) VCA 1 by Velocity Amount 93 29 7 (Signed) VCA 2 by Env 2 Amount 94 56 7 (Signed) Env 1 Amplitude by Velocity Amount 95 66 7 (Signed) Env 2 Amplitude by Velocity Amount 96 76 7 (Signed) Env 3 Amplitude by Velocity Amount 97 85 7 (Signed) LFO 1 Amp. by Ramp 1 Amount 98 95 7 (Signed) LFO 2 Amp. by Ramp 2 Amount 99 45 7 (Signed) Portamento Rate by Velocity Amount 100 31 7 (Signed) VCF FM Amount by Env 3 Amount 101 32 7 (Signed) VCF FM Amount by Pressure Amount 102 81 7 (Signed) LFO 1 Speed by Pressure Amount 103 91 7 (Signed) LFO 2 Speed by Keyboard Amount 104 5 Matrix Modulation Bus 0 Source Code (see Table 2) 105 7 (Signed) MM Bus 0 Amount 106 5 MM Bus 0 Destination code (see Table 3) 107 5 Matrix Modulation Bus 1 Source Code (see Table 2) 108 7 (Signed) MM Bus 1 Amount 109 5 MM Bus 1 Destination code (see Table 3) 110 5 Matrix Modulation Bus 2 Source Code (see Table 2) 111 7 (Signed) MM Bus 2 Amount 112 5 MM Bus 2 Destination code (see Table 3) Byte Parameter # Bits Description 113 5 Matrix Modulation Bus 3 Source Code (see Table 2) 114 7 (Signed) MM Bus 3 Amount 115 5 MM Bus 3 Destination code (see Table 3) 116 5 Matrix Modulation Bus 4 Source Code (see Table 2) 117 7 (Signed) MM Bus 4 Amount 118 5 MM Bus 4 Destination code (see Table 3) 119 5 Matrix Modulation Bus 5 Source Code (see Table 2) 120 7 (Signed) MM Bus 5 Amount 121 5 MM Bus 5 Destination code (see Table 3) 122 5 Matrix Modulation Bus 6 Source Code (see Table 2) 123 7 (Signed) MM Bus 6 Amount 124 5 MM Bus 6 Destination code (see Table 3) 125 5 Matrix Modulation Bus 7 Source Code (see Table 2) 126 7 (Signed) MM Bus 7 Amount 127 5 MM Bus 7 Destination code (see Table 3) 128 5 Matrix Modulation Bus 8 Source Code (see Table 2) 129 7 (Signed) MM Bus 8 Amount 130 5 MM Bus 8 Destination code (see Table 3) 131 5 Matrix Modulation Bus 9 Source Code (see Table 2) 132 7 (Signed) MM Bus 9 Amount 133 5 MM Bus 9 Destination code (see Table 3) Table 1 LFO Wave Codes 0 = Triangle 4 = Random 1 = Up Sawtooth 5 = Noise 2 = Down Sawtooth 6 = Sampled Modulation 3 = Square 7 = Not Used Table 2 Modulation Source Codes Tracking Generator Inputs Unused Modulations must have their Sources and Destinations set to 0. 0 = Unused Modulation* 1 = Envelope 1 11 = Tracking Generator 2 = Envelope 2 12 = Keyboard Gate 3 = Envelope 3 13 = Velocity 4 = LFO 1 14 = Release Velocity 5 = LFO 2 15 = Pressure 6 = Vibrato 16 = Pedal 1 7 = Ramp 1 17 = Pedal 2 8 = Ramp 2 18 = Lever 1 9 = Keyboard 19 = Lever 2 10 = Portamento 20 = Lever 3 * The "0 = Unused Modulation" parameter in this Table is found in the Modulation Source list only. This parameter is not a Tracking Generator input and thus will not be displayed in parameter S33 TRACK INPUT. Table 3 Modulation Destination Codes Unused Modulations must have their Sources and Destinations set to 0. 0 = Unused Modulation 1 = DCO 1 Frequency 17 = Envelope 1 Amplitude 2 = DCO 1 Pulse Width 18 = Envelope 2 Delay 3 = DCO 1 Waveshape 19 = Envelope 2 Attack 4 = DCO 2 Frequency 20 = Envelope 2 Decay 5 = DCO 2 Pulse Width 21 = Envelope 2 Release 6 = DCO 2 Waveshape 22 = Envelope 2 Amplitude 7 = Mix Level 23 = Envelope 3 Delay 8 = VCF FM Amount 24 = Envelope 3 Attack 9 = VCF Frequency 25 = Envelope 3 Decay 10 = VCF Resonance 26 = Envelope 3 Release 11 = VCA 1 Level 27 = Envelope 3 Amplitude 12 = VCA 2 Level 28 = LFO 1 Speed 13 = Envelope 1 Delay 29 = LFO 1 Amplitude 13 = Envelope 1 Attack 30 = LFO 2 Speed 15 = Envelope 1 Decay 31 = LFO 2 Amplitude 16 = Envelope 1 Release 32 = Portamento Time Appendix D: Split Patch Data Format Statistics: 18 Bytes/Split Patch = 36 nybbles transmitted + 5 bytes header + 1 byte Checksum + 1 byte EOX = 42 total transmitted bytes/Split Patch Byte Parameter # Bits Description 0 - 5 6 each Split Name Each character is represented by the lower 6 bits of it's ASCII representation. 6 6 Not Used 7 6 Not Used 8 7 Lower Patch Number 9 7 Upper Patch Number 10 0 7 Left Zone Limit 11 1 6 (Signed) Left Zone Transpose 12 2 1 Left Zone MIDI Out Enable 13 3 7 Right Zone Limit 14 4 6 (Signed) Right Zone Transpose 15 5 1 Right Zone MIDI Out Enable 16 6 6 (Signed) Left/Right Balance P31 = Left only +31 = Right only 17 7 2 Voice Configuration 0 = 2/4 1 = 4/2 2 = 6/0 3 = 0/6 Appendix E: Global Parameters Data Format Statistics: 236 bytes/Global Parameters = 472 nybbles transmitted + 4 bytes Header + 1 byte Checksum + 1 byte EOX = 477 total transmitted bytes/Global parameters Byte Parameter # Bits Description 0 Not Used 1 30 6 Vibrato Speed 2 31 3 Vibrato Waveform 3 32 6 Vibrato Amplitude 4 33 2 Vibrato Speed Mod Source Code 5 34 6 Vibrato Speed Modulation Amount 6 35 2 Vibrato Amp Mod Source Code 7 36 6 Vibrato Amp Modulation Amount 8 55 6 (Signed) Master Tune 9 40 2 Velocity Scale Type 10 41 6 Velocity Sensitivity 11 00 4 MIDI Basic Channel 12 01 1 MIDI OMNI Mode Enable 13 02 1 MIDI Controllers Enable 14 03 1 MIDI Patch Changes Enable 15 04 1 MIDI SysX Enable 16 05 1 MIDI Local Control Enable 17 06 7 MIDI Pedal 1 Controller 18 07 7 MIDI Pedal 2 Controller 19 08 7 MIDI Lever 2 Controller 20 09 7 MIDI Lever 3 Controller 21 42 1 Pedal 2 Invert Enable 22 43 1 Levers Invert Enable 23 53 5 Display Brightness 24 56 1 SQUICK Enable 25 17 1 Patch Map Echo Enable 26 57 1 Stereo Output Enable 27 Not Used 28 44 6 Pressure Standoff 29 13 1 Spillover Enable 30 Not Used 31 14 1 MIDI Active Sensing Enable 32 12 1 MIDI Echo Enable 33 15 1 Patch Map Enable 34 Not Used 35 18 1 MIDI Mono Mode Enable 36-135 6 each Input Patch Map 136-235 6 each Output Patch Map ****************************************************************** MIDI Volume for M6 & 6R Use Controller 7 (MIDI Volume) to modulate the amout of Env.2 feeding VCA2 Note: Patch Edits and Matrix Modulation Edits must be done on each program. 1. On MASTER EDIT Parameter 06: Pedal1 = 7 Uses MIDI controller no. 7 as Pedal 1 source 2. On PATCH EDIT Parameter 28: VCA1/VEL +63 (or scale to taste) 29: VCA2/EN2 +63 65: ENV2 AMP 0 66: ENV2/VEL 0 3. On MATRIX MODULATION Source Amount Destination PED1 +63 E2AMP Assigns Pedal 1 to control the Amplitude of Env. 2 ***************************************************************************** *