Adding patch parsing to a preset. Step by step

good question. I resolve this via a MioXL router:

  • the direct USB connection between E1 and PC is solely used for editing presets.
  • all MIDI-traffic to and from the E1 is done via port 1 DIN MIDI into the MioXL MIDI router
  • that router is connected to the rest of the gear but also to the PC via RTP MIDI 1 and 2.
  • The Electra 1 (connected to MioXL DIN MIDI 2 here) routes its info not only to the synths and the second and third MioXL (via RTP Midi 9, and eventually 11), but also but to the PC on RTP Midi 2.
  • any other synth, such as the Matrix 1000, is not only routed to the E1, but also to the PC via
    RTP MIDI 1.

In other words: while the synths and the E1 are talking to each other, they also sent the same info to the synth for Midix-Ox to witness. But as this happens on a different port than the E1 programming port, I circumvent the lack of “multi-client” mode a PC has.

1 Like

Yeah Mac users have had the multi client driver support for a while now, not just for midi but for audio with the aggregate something something (I’m on windows, obviously) that lets one combine soundcards into one mega-card as seen from the application using the driver. Luckily my soundcard has more I/o than I’ll ever need… But also forces me to stick to windows :confused:

My Motu midi XT can only rename it’s I/o on mac’s, another stupid windows USB limitation. Honestly a big inspiration for swapping it for a mioxl, along with all the usb-host capabilities.
Eager to see what CME comes up with their 19" interface under planning. I have a bunch of their u6 pro, and they are super flexible, good drivers and very low cost.

1 Like

But if you have a mioxl and their drivers installed you DO have multi client capability

Via USB , you mean? I’m no longer USB to PC connections on the Mio but RTP-Midi: the Mio’s interconnect as well when the PC is down (my PC not always turned on when making music).

But I do recall when I used USB it did show as multiple MIDI devices in my DAW too.

I can confirm that the MioXL MIDI ports in Windows 10, both RTP and USB, are multi-client capable. It was the first thing I tested when they arrived.

1 Like

All endpoints on the Mio are multi client capable, rtp, din and usb, but you have to use their driver

That’s good news. The good thing: I’m using themxfor many years now and it has a certain stability so what the underlying capabilities are, I already forgot :flushed:

@NewIgnis : Will to try to follow the whole tutorial more but so far I was able to create a momentary patch request button for the Korg EX-8000.

As I’m on a Mac I checked with SysEx Librarian that the EX-8000 responds with a dump of the recent patch.

Would you now recommend trying to include the routine you mentioned to make sure any MIDI channel will work?

Sorry for being at the very beginning of things here!

No, I would not.

I found that the listening function has a hard time to detect the right SysEX question and Response if they contain variables. Add the variables only at the end.

What I would propose: keep both questio sysex and reply header hardcoded (as in your example), check that the synth does respond, and now make sure via the listening function in the E1 editor, you see the reply coming in, ready to be parsed.

You then choose a patch for which you set up at least 3 parameters on 3 different values, known to you (for instance put VCO1 level on 3, VCO2 on 6 and Noise level on 9).

Then request that patch and in the webeditor check for yourself if you find those 3 values on the places you expect.

1 Like

Thank you so much! Appreciate it!

I managed to find changes with three parameters so far using the Sysex Librarian… Will now try to see how to proceed with the receiving and sorting in the E One.

1 Like

Trying to wade back into programming the Electra One mk.II (hereafter referred to as the EO2) by modifying a preset that I created some time ago for the Emu Morpheus.

I’m new to the ‘Patch’ menu in the web editor - my LUA skills are non-existent, it scares me and also I can’t seem to get it to show/receive any dumps from the Morpheus, even though I can capture the same dumps on the EO2 hardware at the same time.

I want to add patch parsing so that I can synchronise the EO2 Morpheus preset control values with the sound preset currently selected on the Morpheus.

Emu Morpheus responds to individual patch dump requests, however you have to tell it which patch number - it doesn’t seem to support just dumping its edit buffer, so no ‘request current preset’ option.

However, the way Morpheus responds to parameter requests does relate to the edit buffer - tell it what parm address and it will return a parameter message with the current value in the buffer.

The most practical approach to parsing seems like it would be to just have a momentary button control on the EO2 fire off a shed load of parameter requests for all the parameters supported by the EO2 Morpheus preset, then update the EO2 control values with the received values. Am I right or is this crazy talk?

If I am right, what would this look like in the context of your tutorial, as it doesn’t seem to cover this parsing strategy?

In some cases, it is not bad indeed to retrieve the patch via its patch number and not from the memory buffer. On a Blofeld f.i. when you change a patch and immediately thereafter you request the memory buffer, so sometime end up with the previous patch that is still in memory.

One of the way I resolve what youy just bescribe is by adding a patch request concept in your E1. You’ll find it in most of my presets in a page called ‘MAIN’ or ‘PERFORMANCE’, on the lowest line.After you tweak that lua-function for your synth (typically called ‘requestIt’ or ‘patchSelect’) , add in it after the program change the sendSysex command to request the dump of the patch you look for.

Thanks for this, using a program change could work, although Morpheus decouples PC messages from actual patch numbers by having a ‘program mapping’ feature, which makes things a bit weird.

However, I’m interested to know what you think of my other idea - using parameter requests triggered from a ‘sync’ button? That way I don’t have to worry about programs at all, I just sync parameters with the edit buffer.

Probably there would be about 200 parameters in the EO2 preset for the Morpheus, so it would need to send individual parameter requests for them all and receive the responses without choking.

However the Morpheus UART seems pretty strong - the manual talks about setting the MIDI buffer delay to prevent the host computer from bogging down from the traffic, not the Morpheus itself.

You could do that through some clever set up in lua, so a click on a button would fire a for -loop going through all parameters and firing a sendSysex for each of them. Then , again in lua you’ll have to set up your onSysex callback, and tell the script how to identiy it’s a response your were waiting for, and for those that are expecting tell the script where to find the sysex param address, where to find the sysex value and store them in the rightly mapped E1 parameter and mapped E1 value.

you will need lua for it.

I believe you about needing to use LUA. However, this also requires me to understand LUA whilst also not being a member of that rare fraternity - the “Developer-Musician”.

For my intended purpose, I need my EO2 preset to iterate through all the sysex parameters I have set up within the preset, and for each one:

  1. Look at a specific ls-ms byte pair (i.e., the parm address) within each sysex parameter.
  2. Encapsulate that byte pair within a parameter request message.
  3. Send the parameter request message to the Morpheus.
  4. Receive the corresponding parameter response message and store it in an array.
  5. Find the parameter value ms-ls byte pair from within the response message in the array.
  6. Match the parameter to the corresponding control within the preset.
  7. Update the control value (remembering to correctly parse the ls-ms bytes into a format the EO2 preset control can understand).
  8. Move on to the next parameter.
  9. Stop when reaching the end of the parameters.

I’ve looked over the electra.one LUA tutorial, but it’s incomplete (sections missing) and doesn’t cover what I need to know - it’s not use-case focused, i.e., on how to get LUA functions and Sysex to interact within a script, inside a preset, with the correct formatting & syntax.

Are you actually using the web app to write and test your LUA? Or a third-party tool? My options seem to be - lose myself inside a gigantic JSON script, or try to understand the GUI screens in the online editor, which seem cryptic.

For example - I can’t figure out what the ‘Controls’ window is for. Listing all the controls and their attributes ‘spreadsheet-style’ would make sense, but only if the fields are directly editable. Otherwise it seems a bit pointless.

But mainly it’s the ‘Patch’ window that confuses me the most. It has three tabs - ‘Messages’, ‘Mapping’, and ‘JSON’. Basically this needs a full tutorial in its own right. I have so many questions - but this is not the place for them.