The best MIDI controller in the world

I sat for a while last night after work and started building a preset for Strymon BigSky. I saw right away that it’s not going the way I want. There are 12 types of reverb. When I choose type 1 Room, for example, you can choose certain decay values. When you choose type 2 Hall, the decay have other values (but the same CC number 17). This is a typical example of when you need dynamic lists. I look forward to the day when this is done in Electra (in a graphical way). When that day comes, there is no better MIDI controller in the world. Thank you Martin and your whole team.

You could also, already now, define a different control for each list, and only make the control relevant for the current reverb type visible. Different controls can actually share the same MIDI CC and location in the preset (although the latter is not supported by the editor; you need to move the controls from a hidden page all to the same location using LUA. Latest firmware supports that.)

1 Like

Great! Do you know any preset that do that as a starting point for me to learn from?

I believe @Martin made some demo preset. I still have to adapt my Ableton live remote script presets to the new LUA functions that allow moving controls (that already do use setting control visibility depending on other control’s values). See e.g. this Echo preset Electra One App


Thanks a lot for your help. I really appreciate it :slight_smile:

1 Like

There are examples from Martin: Electra One App

Check the Lua code

I actually have to implement this as well for the pioneer SP16 its fx.

1 Like

Thanks Flyweight for the link to the preset :slight_smile:

I’ve made a working preset for my Korg 03R/W, which also had various FX, with changing values and descriptions.
You’ll find it here Electra One App.

The FX parameters are on page 4 ‘FX’, especially the upper and middle section.
Because of the nature of the beast and the need for changing values, most of these parameters are SysEx or Virtual.
The virtual ones have a function sendFX attached , to ensure they work as intended, defined on the FX type.
The FX type parameters sets the right names and ranges, using the function setFX

The dynamic lists were build using 4 arrays:

fxIndirectRef= {1,1,1,1,1,1,1,1,1,2,2,2,3,3,4,5,5,5,6,6,7,7,8,9,10,10,10,11,12,13,13,14,14,15,16,16,17,18,18,19,19,20,21,22,22,21,23}

fxNames = {{"reverb time","pre delay (ms)","earl.refl.time","high damp","eq low"},{"earl.refl.time","pre delay (ms)","eq low"},{"delay L","delay R","feedback","high damp","eq low"},{"delay L (ms)","feedback L","high damp L","delay R (ms)","feedback R","high damp R"},{"delay 1","delay 2","feedback","eq low"},{"delay (ms)","mod speed","mod depth","mod  waveform","eq low"},{"delay l","delay r","mod speed","mod depth","mod shape","eq low"},{"delay l","delay r","mod speed","mod depth","fq split point"},{"mod depth","eq low"},{"delay","mod depth","mod speed","resonance","eq low"},{"blend","emphatic point","eq low"},{"density","hot spot","stereo width","delay time","eq low"},{"drive (edge)","hot spot","resonance","eq low","eq high","out level"},{"manual","mod speed","mod depth","feedback","waveform"},{"vibrato depth","acceleration","slow speed","fast speed"},{"waveform","mod shape","mod speed","lfo depth","eq low"},{"freq low","eq LOW","freq mid","eq mid","width mid","freq high","eq high"},{"ch. delay (ms)","","ch.mod speed","ch.mod depth","delay","feedback"},{"delay (ms)","feedback","high damp","rev time","pre delay (ms)","high damp"},{"delay (ms)","feedback","high damp","mod speed","mod depth","waveform"},{"delay (ms)","feedback","high damp","mod speed","mod depth","feedback"},{"delay (ms)","feedback","drive (edge)","hot spot","resonance","level"},{"delay (ms)","feedback","acceleration","slow speed","fast speed"}}

ctrlMin={{0},{0},{0,0,-99},{0,-99,0,0,-99},{0,0,-99,},{0},{0,0,1,0,-21},{0,0,1},{0},{0,0,1,-99},{-99,1},{1,1,0, 1},{1},{0,0,0,-99},{0,1,1,1},{0, -99},{0},{0, -99, 1, 0,0,-99},{0, -99},{0,-99},{0,-99,0,0,0,-99},{0,-99,1,0,1,1},{0,-99,0,0,0,-99},{0,-99,1,1,1}}

ctrlMax={{99,200},{70,200},{500,500},{500,99,99,500},{500,500},{200,216,99, 1},{250,250,99, 99, 20},{500,500,99, 99, 18},{99},{200},{99, 10},{99, 20},{111},{99, 200, 99, 99, 1},{15, 15},{1, 99, 200},{29, 12, 99, 12, 99, 29},{50, 99, 99, 99, 225},{500, 99, 99, 97, 150},{500, 99, 99, 99, 150, 1},{500, 99, 99, 99, 150},{500, 99, 111},{500, 99, 15}}

These set the right parameters to use, the names to give to those parameters, and their min and max value ranges.
Apart from these 4 arrays, using inside the setFX function, the function also arranges:

  • which parameters to show/hide
  • what colours to give a parameter
  • because there was some logic for certain parameters, like ‘eq high’ and ‘eq low’, I did some of the logic based on those names, instead of properly doing it in arrays. So ignore these parts in the lua for your proper understanding.

All fx-related lua, you will find in lines 1-14 and 273-340.

Good luck!

1 Like

Thanks. Very interesting. I will look as soon I am at home :slight_smile:

I’ve made a lowcode preset for the strymon timeline.
I simply made a page for each algorithm, works well for me.