Allow routing between preset devices and MIDI ports/channels on presets slots screen

Issue

Currently each preset has 32 devices, and each device in this preset has a hard-set MIDI port and channel. This can be problematic since it can make presets unusable without manual editing. If I want to use a preset from someone else, but my hardware uses different channels or ports, I will need to clone, open, and edit the preset.

This in itself is not as much an issue in a hardware configuration, since is pretty static. However for software/DAW instrument control it is especially problematic since different projects may have multiple copies of the same instrument, and per project that requires a completely different electra preset setup with a lot of preset clones etc, and switching to a different project renders all presets and Electra setup unusable again.

Basically the current setup with devices works well to have a single preset address different hardware instruments, but it does not work for having a single preset address multiple copies of the same instrument, or for working with rapidly changing setups (which is the case if you load a different project in a DAW for example).

Solution proposal:

Have the preset device to MIDI routing be configurable outside of presets. This could be done on the preset configuration screen on the Electra website.

Keep the 32 devices in the preset editor, but treat the MIDI port and channel selection for the device as a default value.

Update the preset configuration screen on the Electra website so that each preset shows the devices it uses with their configured names. For each exposed device, show and let the user set the MIDI port and channel. By default, it uses the values as configured in the preset. This will keep presets backwards compatible. This allows us to load multiple copies of a preset in preset slots on the Electra, and then route the preset devices to hardware or software devices via MIDI.

Finally, let the user name and save the full Electra preset configuration, and recall configurations. This allows for switching a project or hardware layout and have the Electra adapt by choosing the matching earlier saved preset.

3 Likes

I would love to be able to set the port and midi channel within each preset… the fact that I cannot makes the Electra One far less useable and I’ve honesly ignored it now for 2 weeks and I just bought it. Can’t say I’m a coding type of person and rolling up the sleeves and learning is not what I’m about. I want this thing to be a tool to help me make music… I wish I had more time to learn this but there is not enough time in the day.

1 Like

We are working on the feature that will allow users to set port / channel for each device in the preset. To keep backward compatibility, the option will act as an override of settings in the preset.

2 Likes

I’ve been doing it the manual way - on my config / save page I’ll try to put a control to select the MIDI channel and the DIN port (1 or 2). That way a user can set that and then be fine.

There’s some nuances with switching the ports while using the same preset, but in general, if the users are careful, it works well.

2 Likes

That’s fantastic to hear!

2 Likes

This could be a temp solution for me until the feature @martin mentioned is implemented. Can you point to a preset you made so I can peek how you did it? :slight_smile:

2 Likes

One example is on the Config/save page (7) of the Korg DL8000R I just published.
Code, screenshot below.

-- add to channel control as a function
function setChannel(valueObject, value)
   midiChan = value - 1
end

-- add to port control as a formatter
--
function fmtPort(valueObject,value)
   if (value == 1) then 
      portNum = PORT_2
      return("Port 2")
   else
      portNum = PORT_1
      return("Port 1")
   end
end

channel_port

2 Likes

Ah that’s pretty straightforward. Thank you! I’ll see if that makes for a workaround for now.

Note that you have to use those globals midiChan, portNum everywhere in your code of course

Ah I see… if I read your plugin code correctly, you do the following to make this work:

  1. set control types to virtual, so they don’t send out midi by themselves automatically
  2. override function parameterMap.onChange(valueObjects, origin, midiValue)
  3. have this map call midi instead, using the portNum and midiChan you described using above

Yes, sorry - I always make a lot of assumptions …

Since this is just to set the internals, you never need to send it out to the target device.
What I typically do is use parameter numbers higher than the target gear (usually start at 900) and then in onChange() I ignore anything with a parameter number greater than or equal to 900.

There might be more modern/updated approaches using the PT_NONE (maybe?), but since I tend to do a lot inside the onChange() because not much of anything is easy and straightforward when it comes to MIDI sysex, that’s the most central location to handle the exceptions.

1 Like