everything, the preset isn’t thoroughly tested yet
Used MIDI settings in the Pulse
MIDI channel = 14
Device ID = 0 (needed for SysEx, another ID will not yield expected results)
Highlights / attention points
The first 3 pages are the sound and ARP parameters
The 4th page is the Globals monitoring page. To get the current settings, press the ‘Glob.Request’ pad. Be aware, it only reads the global settings from the Pulse, it won’t change them.
The Performance Page (nr 6) has the program change buttons on the last line. I have added artificial banks to limit selection to user patches , preset patches or the random generator. A program change will visualise the settings of the selected patch.
The rest are the main parameters repeated here for live use.
You don’t need to parse SysEx for the Pulse, it has a “Controllers Request” message – 0x3E 0x0B 0x00 0x4B – which causes it to dump CCs for all patch values, which in turn updates all controls on E1.
Thanks for this excellent update. Many things there that I’d be curious to understand how you did them, but mostly the fields that show up or disappear depending on the Modulation selected on the left, Page 3. Would it be possible to point me at the page in the manual where it is explained how to do that please ?
Also, great choice of colours that makes me feel like this is a new Electra screen
Thanks. Looks very technical, I will try to understand how it’s built but not sure I will succeed.
Martin, is there a chance this feature might be available in the online Preset editor at some point ?
For the modulation, observe that each of the modulation source controls have gotten a function ‘hideMod’. You find that?
Its function of course is that, when no source is chosen, the other two controls belonging to that modulation disappear from the screen. this to make the understanding of the patch easier.
How this is done, is via an interplay of the CC numbers (stored as parameter numbers) versus the reference numbers of each control (visible in the editor as #ref).
First notice all 12 controls of the modulation area have consecutive CC numbers, from 108 up to 119.
Then observe all 12 controls also have a consecutive reference number, starting at #61 until #72.
Thus each CC number equals the reference number + 47: for instance 108 = 61+47. I did this sequence on purpose for the code to work!
Now go into the lua code and look for the hideMod function:
function hideMod(valueObject,value,fxNum) ---- hides the non used modulation matrices
local message = valueObject:getMessage ()
local bool=true
if value==0 then bool=false end
local paramNum = message:getParameterNumber()
if fxNum~=nil then paramNum = fxNum end
local offset =45
if paramNum < 100 then offset=3 end
local control = controls.get (paramNum-offset )
control:setVisible (bool)
local control = controls.get (paramNum -offset -1)
control:setVisible (bool)
end
For now, forget about the fxNum part, so the code looks simplified like:
function hideMod(valueObject,value) ---- hides the non used modulation matrices
local message = valueObject:getMessage ()
local bool=true
if value==0 then bool=false end
local paramNum = message:getParameterNumber()
local control = controls.get (paramNum-45)
control:setVisible (bool)
local control = controls.get (paramNum -46)
control:setVisible (bool)
end
What the code does when a Source control is changed: it first looks for the value of the Source control. If it is 0 (or “Off”) it sets a flag called ‘bool’ to false, else this flag remains true.
Then the function checks the CC number (which is the control’s paramNum, which you will find in the message of the control that called the function), and sets the visibility of the controls whose reference number is 45 or 46 below the CC number to the value of ‘bool’.
So if the source of modulation 2 (= CC number 111) is set to ‘Off’, then ‘bool’ is set to false and the controls with reference numbers equalling to 111-45 = 66 and 111-46= 65 will be set to invisible. These numbers concide with the controls Amount and Destination of Modulation 2.
Thanks a lot for your detailed explanation. Yes, I believe I understand how it’s built, but then I think I also understand that I would need to know all this vocabulary and syntax to build my own which I don’t. So I guess I will have to copy your code and adapt to future needs.
By the way, taking this opportunity to know if you have any idea how Martin built this :
It’s a variant of what we just discussed. The same thing except that it displays different faders depending on the first fader’s position. Like different menus. Typically useful for different FX for example…
New version for the Pulse.
I’ve spread the parameters over 3 rather than 2 pages and added hide functions for all modulations and for PW control to make a patch more understandable.
Sync and Keytrack pads for OSC2 are in an unsual place and not locked to the 6 by 6 grid, once you upload it in the E1. https://app.electra.one/preset/kEi0mtjYLPgksMuNl8bS
Thank you!
I’ve been using this for a while and it is a joyful experience!
I just gotta figure out how to route midi into the Electra One again without causing midi loops.
It works fine for the maxforlive device I’m using additionally, but haven’t managed to get it working with your preset.
To confirm: I have a different ID but the only place I need to change it is on the Electra?