Step 3A. The regulars - the first 2 mappings
Regular parameters are problaby all those parameters that just have their name mentioned. I expect all these go from 0…127, but we’ll have to see if that is consistent.
The order I’ll go through them is the order of the Program Data block: we’ll start at novation byte 0, end at 127, and parse all those parameters that seem to be ‘regular’.
First one (and since it’s the first one, the most exciting one ) on the list is byte 1 UNISON DETUNE:
Remember we expect byte 1 of the manual to find it in our parsed SysEx as byte 1+4 = byte 5 (because we fooled the E1 into believing the last 4 bytes of the response header are part of the payload).
In preset V2c, you’ll find Unison Detune on page 2 “Osc Advanced” with the original name “UNISON DETUNE”. It has been assigned CC #68 with the normal format of 7 bits. Be sure you find back all of the above.
Now let’s check if we can make the E1’s device editor help us in our reverse engineering, and get the answer to the following questions:
- is byte 5 indeed the byte changing the Unison Detune ?
- If yes, what bits of the byte are relevant ?
- And what do they mean?
For this to work, we first set the control on our E1 on a very specific value.This detune goes from 0…127, but I will set it manually on 59. Remember my preset already controls the synth, so by setting CC #68 to value 59 on the E1, I actually set it to value 59 as well in the edit buffer of the current sound in the Novation… So when we request the sound dump, we should get back a SysEx message reflecting our value somehow, somewhere.
As explained before, go into the Mappings page of the Device Editor and Enable MIDI Learn with the right most mic-symbol. The editor will tell you it is waiting for MIDI messages…
Now press the upper right E1 button, and see what happens on the Device Editor:
- Upper right, in blue; the editor indicates it has received a message
- In the middle part you now see the SysEx response message appear, divided in bytes. Each byte has 8 bits to them, but the most significant one (the one on the left) is blanked out, as you cannot control this. The MIDI protocol only allows you to use the 7 least significant bits of a byte for payload purposes.
Let’s take a closer look on such a byte info line:
From left ot right , you’ll see the following:
- a byte ID
- the value of the full byte in hex (two digits, followed by ‘h’)
- the value of the full byte numerically (0…255, but in payloads limited to 0…127)
- the value of the full byte in ASCII, as interpreted by the E1
- the greyed out bit number 7
- in descending order: bits 6…0 (always an encircled 0 or 1)
Let’s look at our byte 5: it has returned us a string of 0111011, which corresponds to our value 59!! We seem to have a match, but we must be sure.
I will now set the value of Unison Detune to the maximum (=127) on the E1, and request the Sysex again. This is the response:
I now set the value of Unison Detune to the minimum (=0) on the E1, and request the Sysex again. This is the response:
Can you see how the SysEx byte 5 is nicely following the values I gave the Unison Detune on my E1. You can be pretty damn sure now (forgive me the language), I’m looking at the right 7 bits, that gives me the value corresponding my CC #68 in a 1-to-1 fashion. Yoohoo
Time to map the two byte and the E1 parameter together.
In the upper left selection field, let’s enter the first characters on the control name. After having entered ‘unis’, the editor already filters the potential control candidates to only 2.
By checking the name and the CC-number, it’s easy to establish it’s the first of those two we are after.
Click on that control: a rectangle will appear saying ‘RULE MAPPING no mappings found’:
For reasons of clarity, I’ve now set my Control on the E1 to value 95, and requested the sound dump again.
Now click on the leftmost bit of the 7 bits we want to assign and observe:
- the chosen bit wil be encircled in blue, to indicated it is mapped with a parameter
- the rectangle now says it has a RULE MAPPING: we’ve mapped bit 6 (“6…6”) of the byte on position 5 to bit 0 of our desired CC #68, which gives us… a parsed value of 1, where we want to get 95. Oh no, that is not okay yet!!!
But you guessed already; we have to map all 7 bits of that byte 5 to obtain the full range 0…127.
Do this by holding Shift, and then click subsequently through all remaining 6 bits, until the RULE MAPPING shows you:
Now you see all 7 bits are considered as one mapped block, and the mapping states you have parsed a value of 95 using bits 0…6 of the byte on position 5.
Congratulations, you’ve done your first mapping.
Let’s see how it looks like in the json tab:
You read this as follows:
Take byte 5 of the response, start at the bit at position 0 (the rightmost) of the byte, and take a width of 7 bits to the left, and put these 7 bits in the value of CC (the 7bits version) #68, starting the bit on position 0 of that parameter.
So value 0…127 of byte 5 will be mapped onto values 0…127 of Cc #68. Exactly what we want.
I now repeated the same exercise for Glide time CC #5, which is called Portamento time by Novation.
See for yourself if you can find these two mappings back in the preset.Electra One App