[Preset] Waldorf Pulse with Patch parsing: new version

V1.0 WALDORF Pulse with Patch Parsing Electra One App


1996 Vintage Synth

New in V1.0

  • 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.


Pulse’s preset design now makes use of the firmware 3 esthetic capability and is more condensed to reduce page changes.


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 :slightly_smiling_face:


Look for the control:setVisible() function in the developer section of the manual.


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 ?

1 Like

thanks @nuipb

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)

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)

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.

Does this makes sense to you? Let me know please.

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…

No I don’t (yet). Will have to discuss it with Martin on a later date.

1 Like

OK, thanks again then.

The quote from Martin you mentioned, it dates from when?

May 2021. If you click on the link it should open the post into that thread…

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.

1 Like

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?

It’s one of the very first lines of the code you must change:

As for the loop, this isn’t anything specific for this preset. How do you currently route MIDI?

Great stuff as usual, thanks ! Note however that I’m getting an odd display behaviour as you can see on the video available here :

Any idea how to solve this ?