The EX5 MIDI System Exclusive (SYSEX) implementation has a few bugs in it that can cause data corruption both when reading Voices from the EX via MIDI and when writing Voices to the EX via MIDI.
This section describes those issues, and also describes how ex.factory gets around those issues.
These are the EX MIDI SYSEX problems that I am aware of:
When you request a dump of a Voice from either the Edit Buffer or from a Memory Location via MIDI, there is a problem when the Voice being requested has an Element active in Element slot four. Voices that do not have Element 4 active (i.e. they can have any of the other Elements active) are fine.
The symptoms of this problem are that the end of the SYSEX message is corrupted, which manifests itself as corruption in the Static Control Filter settings for Element 4 and corruption of the Element Insert Effect Switches (all Elements).
The problem is in the EX SYSEX data encoding scheme that is used to squeeze eight bit data values into seven bit values (the MIDI standard only allows seven bit data values).
The EX (and some other synths) transfers eight bit data by stripping off the Most Significant Bits (MSBs) from a block of seven bytes and then combines and sends the MSBs in an extra byte (that I call an MSB Encoding byte). So for every seven bytes in a Voice an additional byte is sent. If ever you've looked in the EX data list manual and wondered why they talk about Gross and Net sizes in the Sysex dumps, the Net size of a message is for an unencoded message, and the Gross size is for an encoded message inclusive of the MSB Encoding Bytes.
What happens when there is a Voice with Element 4 active being transferred is that a byte is lost from the message, which happens to be the MSB Encoding byte from the penultimate seven bit data block.
The impact of this missing byte is that:
The message checksum appears to be calculated after this byte is "dropped" as it is correct for the message contents.
The net result is the SCF filter settings for Element four and the Insert Effect switches can become corrupted.
Whilst the Bulk Voice dump messages from both the EX Edit Buffer and Memory Locations suffer from this bug, the MIDI dumps that read individual Elements from the EX Edit buffer work OK.
So ex.factory ignores the data in a Voice Bulk dump for Element 4 and instead obtains the data for Element 4 from the edit buffer.
When a Voice is read from the EX via MIDI, ex.factory performs the following:
When writing Voices to an EX memory location, if the Voice being replaced does not have the same Elements as the Voice being written then the Voice being written will lose the Elements where there is a mismatch.
For example, assume you wish to write a Voice to EX memory that has Elements 1,2,3 and 4 active:
As this is an internal problem with the EX I cannot be sure as to what is going on, but I would hazard a guess and say that when the Voice is written, the EX is not checking the active Elements in the new Voice and is thus not "allocating" additional Elements from its supply of free Elements where required.
Fortunately, sending a Voice to the EX edit buffer works OK, and the EX has MIDI SYSEX commands to represent the front panel buttons. So the workaround is to:
Note. This "simulated store" operation needs to wait for periods of time between the steps above to ensure the EX has time to carry them out.
You can tune the time delays by altering the values in the Advanced MIDI Preferences Tab in the Preferences Dialog to get the optimum speed for your system, but it is still faster to load complete Voice sets via disk. Having said that, the ability to transfer Voices via MIDI is a bonus if, for example, you want to load in few Voices from your PC into a Voice set that is already loaded in the EX.
The EX does not transmit Drum Voices with more than 106 Elements via MIDI. Strange but true!
As this is an internal EX issue there is nothing much I can do about this.
ex.factory will report a MIDI timeout error if it does not receive a Voice within a defined period of time.
So the effect is that such large drum Voices are not received, but all other Voices are correctly received.
If you write a drum Voice to the EX via MIDI and it has more than 46 Elements in it then the Voice is not correctly received.
The EX reports a MIDI Buffer Overflow error.
I've been unable to find a workaround for this, so ex.factory does not transmit drum Voices larger than 46 Elements, instead it provides a warning message that the transmission didn't take place.