[Preset ] Roland SE-02 (V2)

Is there some quick instructions or video explaining this in more detail?

If it’s already in the docs somewhere, a link will be sufficient. :slight_smile:

I will be in need of this to reverse engineer some undocumented data/commands.

Do install the Electra One editor, so you can get to the details yourself.

Here’s some info:

Value conversion SysEx versus Midi CC

  • most parameters are CC controllable and they are straightforward
  • some selection lists receive their values via SysEx as between 0…x where x equals the amount of options minus 1. Between when sending them via CC, these values are spread over the entire CC range of 0…127. To resolve that , the preset uses the SysEx values (so they can be understood when received via SysEx) to store them, but then multiply the results when changed in real time on the Electra One. This is done with the lua functions in the preset, I called ‘choicen’.
  • there were some other particular conversions to do to keep this concept , i.e. storing values as received in SysEx, but send them converted into CC values when tweaking.
  • the other way around, when CC messages are received by the E1 I had to convert them back into the SysEx values before storing them in the parameterMap. I used “midi.onControlChange” for this purpose. In the preset editor you will find what controls needed what kind of conversion.

Patch Parsing

Each time a Program Change is executed , I sent 4 SysEx messages to collect the current patch dump

   midi.sendSysex (devPort, {0x41,  0x10, 0x00, 0x00, 0x00, 0x44, 0x11, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x3B})
   midi.sendSysex (devPort, {0x41,  0x10, 0x00, 0x00, 0x00, 0x44, 0x11, 0x05, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x7B})
   midi.sendSysex (devPort, {0x41,  0x10, 0x00, 0x00, 0x00, 0x44, 0x11, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x40, 0x3A})
   midi.sendSysex (devPort, {0x41,  0x10, 0x00, 0x00, 0x00, 0x44, 0x11, 0x05, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x30, 0x0A})

The first three messages deliver a response in which parameters are found , necessary for the Patch. The fourth message was obsolote, I found afterwards. That may be for instance because it contained data for the sequencer which I didn’t parse.

The exact parsing can be found back in the json editor of the Electra 1.
Be careful: Roland did not implement anything simple like a 1 byte = 1 parameter philosophy. Very often 1 parameter was composed of bits from 2 different subsequent bytes.

Example: parameter 81 "Contour Sensitivity’

You will find it back as a composition of 7 bits, as a response against the first SysEx request:

  • the first 4 bits are found at position 0 in byte 9
  • the next 3 bits are found at position 0 in byte 8

image

image

Be mindful

  • page 2 “Modulation & FX” page has 4 (hidden) buttons: each of them fires one of the 4 SysEx requests separately. That made it easier during reverse engineering to perform the parse mapping.
  • page 3 “Transpose” of the preset : that is not a SE-02 specific thing, but an add-on to the SE-02 coming from the E1 itself , that controls the SE-02’s transpose setting.

The reverse engineering was done using three - four tools:

  • The SE-02 PC editor, which communicatis with the SE-02 via MIDI, so this had to contain the necessary SysEx and CC traffic. This was necessary to get to know the SysEx commands.
  • Midi-Ox as MIDI monitor tool on the PC so to monitor any in- or outbound traffic. This to make sure responses were indeed delivered, and transmissions were successful.
  • No sure about this one, but I might have used loopbe as well, to allow intercepting the traffic as a kind of man-in-the-middle witness.
  • Last but not least, @martin 's device editor tool inside the E1 editor, that allowed to detect changes on bit level in the SysEx reponses when using “MIDI-learn”. What I did to investigate usually is first request a SysEx response, then set 4 or 5 parameters to very specific settings, and re-request the SysEx response. The E1 editor then shows you what bits in the answers were changed. After a while you get to grasp the logic (if any) in the responses.

Thanks @NewIgnis this is great. I also managed to grab raw JSON from the online editor.

1 Like

That brings me onto an idea. I’m just on the verge of adding patch parsing to a preset (the Novation A-station).

We’ll do it in a separate topic as a kind of tutorial.

BTW the fourth response includes the patch name. When you convert from hex to ASCII letters you get the name.

1 Like