Elektron Digitone preset

Hello, one of my first presets. I did learn a lot after few days owning the Electra one.

ELEKTRON Digitone preset


nice work.

I like the idea of showing the envelope graphically only once and then add regular faders for the other ones. I use to give the graphically representation to each of the controls, and that is not needed.

For what it is worth:

  • the graphical envelope control is allways assigned to one of its four parameters. I see control 16 (FM A-envelope) is assigned to Attack. In that case there is no need to add control 17 (A-Attack) as it will do exactly the same when turning its encoder. This might save you a slot.
  • in control 16 you assigned default value 1 to CC77 (release). Yet in control 19 you assign default value 40 to the same CC77. In this case the last one will override the default value of the first control. Nothing will go wrong, but it might explain if you see a control jump to a default value you did not set.
  • Controls 38, 39, 109 and others have a 14 bit resolution. If this is annoying for you and you have enough resolution with 7 bits, try the following: change the control to 7 bits, keep the same CC parameter, remove its formattter and set the midi value range at 0-127. This should work equally when controlling the synth, but the E1 will only transmit the MSB , not the LSB anymore.
1 Like

I’m working on the request/response part of this preset. Thanks to this gitlab page, I moved forward a lot. It was pretty easy to deal with one byte parameters as usual with the mapping feature, but I’m struggling a lot with 3 bytes parameters. I found these informations on that page:

                # Three Byte Parameters
                # This is divided into three different parts.

                # List structure: [ FLAG_BIT, FLAG_LOC, VALUE_MSB, VALUE_LSB]
                # In the following parameters, the sentinal value is used to divide the LSB into two sections, 0-50
                # and 51-99. This maps the value of the LSB from 0-127 to 0-50. The LSB goes after the decimal point as
                # it is displayed on the screen of the digitone.

                'dtun': [4, '0x31', '0x34', '0x35'],
                'filt1_freq': [6, '0x71', '0x76', '0x77'],
                'filt1_reso': [1, '0x78', '0x79', '0x7a'],
                'filt_env': [3, '0x79', '0x7b', '0x7c'],
                'amp_release': [2, '0x91', '0x92', '0x93'],  # Extremely odd. 0x93 does not render on param screen
                'drive': [4, '0x91', '0x94', '0x95'],
                'vol': [1, '0x99', '0x98', '0x9a'],
                'chorus': [7, '0x99', '0x9f', '0xa0'],
                'delay': [5, '0x99', '0x9d', '0x9e'],
                'reverb': [3, '0x99', '0x9b', '0x9c'],
                'lfo1_spd': [4, '0x1', '0x4', '0x5'],
                'lfo2_spd': [6, '0x1', '0x6', '0x7'],
                'harm': [2, '0x31', '0x32', '0x33'],  # maps from -26 to 26. Subtract 63 from MSB

                # FLAG_BIT changes the MSB. If Formula is (2 * MSB) - 128. If MSB is high add 1 to the formula. LSB maps
                # from 0 - 99. Not sure why the wouldn't just make the FLAG_BIT a negative sign. Seems much simpler

                'lfo1_depth': [4, '0x21', '0x24', '0x25'],
                'lfo2_depth': [6, '0x21', '0x26', '0x27'],

                # LSB maps from 0 - 64. The FLAG_BIT doubles the LSB. MSB adds 128 to the total.

                'b': [7, '0x29', '0x2f', '0x30'],

To be honest I do not understand anything :slight_smile: How do you understand the 3 different parts? How would you deal with them? I guess some LUA code would work, and I feel ok to do it, but I would need the math recipes that I don’t get. @NewIgnis ? Your wizardry would be welcome :grimacing: :pray:

Have a nice day!

1 Like

I finally figure it out. Did it by script.

    function threeBytes (flagByte,flagBit,msbByte,lsbByte,paramRef)
        local ValueMSB = sysexBlock:peek (msbByte)
        local ValueLSB = sysexBlock:peek (lsbByte)
        local LSBFlag = (toBits(sysexBlock:peek (flagByte)))
        ValueLSB = ValueLSB * 0.003937
        if (LSBFlag[flagBit] == 1.0) then
            ValueLSB = ValueLSB + 0.5
        ValueMSB =  math.floor((ValueMSB + ValueLSB) * 128 )
        local control = controls.get (paramRef)
        local valueObject = control:getValue ()
        local message = valueObject:getMessage ()


1 Like


  • 04/17/2024: request by track:
    Depending on the current page you are, you can request the values for the track. For instance if you have the page 1 or 2 displayed, you will request the track 1. On page 3 or 4, the track 2, and so on. The group name with the controls “LEVEL” and “MUTE” will display the track’s sound name.

(TO DO: master FX/MIX request/response)

1 Like