Reusing the same controls or control slots for multiple tones?

Imagine each voice on your synth has 4 tones
All tones have the same sysex address structure, and their address values are exactly 512 apart for the same parameter.

Now imagine there are too many controls to show all tones at once on the Electra One, but we’ve managed to parse all tone parameters in a virtual parameter map starting at 8192 until 10239:

  • the parameters for tone 1 then start at 8192 until 8703
  • The parameters for tone 2 then start at 8704 (= 8192+512) and run until 9215
  • Tone 3 starts at 9216
  • Tone 4 starts at 9728.

What if I now want to add one “select tone” control to the E1, with which I select the tone to change:

  • When tone 1 is chosen, the parameters to control should be the ones between 8192 and 8703.
  • When tone 2 is chosen, the parameters to control in exactly the same slots as tone 1 should be the ones between 8704 and 9215.
  • etc

What would be an esthetical way to program this?

I’m working on the same Problem right now. My Plan to implement it (Just a plan, did not test it yet :slight_smile: )

Creating the “Frontend Controls” for the User

  • Creating a VT Control “Param1” 7192
  • Creating a VT Control “Param2” 7193
  • Creating a Control “Tone” Range 0-3

Crating the Backend Controls for the effective Parameters

  • Creating A VT Control “Tone1Param1” ID 8192
  • Creating A VT Control “Tone1Param2” ID 8193
  • Creating A VT Control “Tone2Param1” ID 8704
  • Creating A VT Control “Tone2Param1” ID 8705
  • Creating A VT Control “Tone3Param1” ID 9728

then Adding Code (Pseudo only, but you should get the idea):

# If the Frontend Control for Paramterer X is changing, 
# then updating the corresponding Tone-Parameter Control by using 
# - ID of the Changed Parameter to Identify the ToneParameter (ParamX.getID() + 1000)
# - Tone * ToneOffset(512) to identify the ToneParameter Offset
On ParamX-Change do
  Set Value of Control ID (ParamX.getID() + 1000 +(Tone.Value*512)) to ParamX.Value
# If the Tone Control Changes
# Iterating over all the frontend Controls and update the values 
# to reflect the Parameter Values of the selected Tone
On Tone-Change do
 for i from 0 to numberOfParametersPerTone do
    Set Value of control ID (7192 + i) to Value of Control ID (8192 + i + (Tone.Value*512))

I think that could work - will try it myself as soon as i find some time :smiley:



I ripped part of one of my presets and adjusted that to the Tone parameter group idea. The preset is meant to suggest one of many possible ways of doing such thing. I did not have a chance to test it on mk1, I guess it will work just fine.

You can see it at: Lua Tabs.

EDIT: my suggestion pretty much reflects @busa’s idea. I just use Lua tables to map parameter values to visual controls.

1 Like

Thanks, that was my idea as well, just needed a nudge in the right direction.
With separate visual controls we can do even more, for instance use it to offset the values of multiple tones at once, and why not even in opposite directions.

The trick to find is to avoid loops between visual controls and their tone parameters. If the visual control changes trigger a tone parameter change, then this tone change should not in turn change the visual control.

Here’s how I think to deal with this:

  • Any SysEx change from outside the E1 should be flagged as a 'parsing’state. This should set the tone parameter, and also the visual control in case it relates to the tone in question. The visual control should not change the tone parameter as long as the parsing state is ‘on’.
  • Any CC change from outside that coincides with a predefined tone SysEx, should be treated as a parsing event, as the above.
  • Only when the parsing state is 'off", a change to a visual control should then be applied to all related tone parameters.
  • For tone parameters, there should be no other controls on the E1, except for those visual controls.
1 Like

Have you tried my example preset? It is set up so that messages are safely processed - I mean changes made by the user as well as data coming over MIDI.

1 Like