V3.7 testing

is has been a while since the last update. The reason is that bigger changes were made to allow adding new features and improving stability of the firmware, plus my struggle to get enough time to work on it this summer. Fortunately the summer is almost over…

v3.7 is now available to beta testers. Please use it together with https://beta.electra.one/

firmware file:
firmware-v3.7.0c.srec.zip (1.6 MB)

The change log:

new features:

  • Internal router can be configured to forward MIDI messages between any interface and port
  • Lua formatters are now available for envelopes
  • Presets can be switched using Lua
  • On-screen controls can be mapped and adjusted using MIDI CC (absolute and relative)
  • Hardware buttons can be fully customized using the configuration
  • Knobs provide smoother readings
  • Sensitivity of pots can be temporarily decreased (using the hardware button or a MIDI Control message)
  • “Alt” function can be assigned to the hardware button to allow more buttons functions
  • (almost) All controller functions that can be triggered from the UI can be triggered over MIDI
  • Pages can remember / recall their own active control set
  • Knob touch actions (page, preset, switching, opening detail, cycling through control parameters) can be enabled/disabled
  • Display double-click and long touch actions can be configured and disabled/enabled.
  • Presets can be marked to stay running on background (preset pinning)
  • Lua function preset.onReady() has been added
  • Lua function yield() to run longer non-blocking callbacks has been added
  • AR and ADSSR (slope and breakpoint) have been added
  • Added support for detecting MIDI ports (cables) on devices connected to the USB host
  • Added Lua callback on USB Host device insertion/removal
  • Added possibility to invoke (and pin) a preset upon USB Host device insertion
  • Minor visual tweaks

Fixes:

  • momentary buttons send Off state/message correctly now
  • improved recognition of USB host devices
  • runPotCallback has been fixed to receive correct delta info
  • fixed issues with preset uploads failing occasionally

The main goal of v3.7 is to allow integrating the Electra controller with other MIDI controllers and software. The features are mostly based on the feedback collected on the forum.

Many of the new features are managed using the Electra configuration. The web app does not support many of those. They can be, however, fully tested using the Development sandbox.

There is a lot to explain and document. For now, the starting point is the new config file JSON schema and series of example files (see below) that can be edited and uploaded using the Development sandbox. Note, A lot has been done to keep the firmware compatible with the original and the new config format. As this is a beta release, some compatibility issues may show up.

Examples:

The default config
Brings default configuration based on the original v3.6 default config.

Router:

The new format allows a freestyle configuration of routes between any source and destination for all ports and interfaces.

One rule is a simple example of one routing rule.
Cross interface sets up 1:1 routes between all interfaces.
Midi thru show the thru function on a MIDI IO port.
Loopback forwards MIDI messages back to the originating USB device port.
Cross port forwards data from MIDI IO 1 in to MIDI IO 2 out.

UI Features:

A few new UI features options have been added.

All features demonstrates all the new features.

USB Host assignments:

The format has been extended to allow assignment of detected MIDI device ports to Electra One ports as well as invoking custom presets upon the USB device insertion.

Device assignment assigns all device ports to given Electra One port. Identical with the original config.
Device preset invokes preset in given bank / slot when the device is matched.
Port assignment assigns individual USB device ports to Electra One internal ports.

MIDI Control:

Number of actions that can be executed has been greatly extended. Configuration of the MIDI control interface and port has been moved from the router to the MIDI control JSON object.

Event examples demonstrates most (not all) available events without additional parameters.
Events with parameters demonstrates events with parameters, such as switching to particular page, preset, and control set

Remote:

A new option that allows to change values of on-screen controls using the MIDI CC. The feature follows the idea that on-screen controls can be identified with a slot id (1 … 36). This will work perfectly for regular presets. Presets that are using non-standard layout still need some thinking and doing. The config establishes a simple relationship between the incoming MIDI CC message and the destination control slot.

Absolute CCs shows how to use standard 7-bit CC (absolute) messages.
Relative CCs demonstrates use of relative CC messages (only one type of relative CCs supported for now)

Hardware:

The hardware is a new configuration section that is intended to configure function of the buttons (and other hardware means in the future). There is a switch between the original layout and the new custom layouts (“useDefaultLayout”). Each button can be configured separately for its primary function, alternative function, and a function that is triggered by the button and knob touch combo.

Default layout forces the original layout of button functions.
Primary functions only maps primary functions only.
Alt functions demonstrates use of the alt button.
Knob combos is an example of button and knob combos. Note, there is a lot to improve here.
Safe pot sensitivity shows how to handle knob sensitivity changes safely - using the hardware button.

You might miss the full list of the “list values” for some of the options. They are all listed in the config JSON schema. I will keep adding info to this thread as we discuss stuff. It is a beta and some things may change based on your feedback. I want to write the docs for the final documentation.

Brief info on AR and ADSSR:

AR envelope preset
ADSSR envelope preset

I will also post more info about other features that are not related to the config.

13 Likes

Cool! Looking forward to test it soon (currently in Sweden away from my E1).

1 Like

Whoho!!! The list reads like my Christmas Wishlist :heart_eyes::heart_eyes: Can‘t wait to get back home and try it out, thanks@Martin for your Work!

1 Like

Congratulations!!! Never struggle against holidays :heart_eyes:. You totally deserve it!! We can wait…

1 Like

Amazing work @martin , I have been really looking forward to this.

I just installed the new 3.7.0c firmware on my Electra One MkII, and tested the new uiFeatures.controlDoubleClickAction property setting = “none” which I needed to clean up the operation of my work-in-progress VCVRack preset. Very happy to report that it seems to be working as advertised. :slight_smile:

I ran out of time this evening to test anything else new, but a quick regression test of my patches look good so far, no issues.

This is what I tried in the development sandbox, then switched back and forwards with the “resetToDefault” setting to show the altered behaviour, which worked nicely:

{
  "version": 2,
  "uiFeatures": {
    "controlDoubleClickAction": "none",
    "controlLongTouchAction": "openDetail",
    "activeControlSetMode": "local",
    "touchSwitchControlSets": true,
    "activeControlSetType": "dim",
    "usePotTouchSelections": true
  }
}
1 Like

Sweet! Perfect timing as well - two days earlier I was wondering if I can route Midi2In to Midi1Out and thanks to the new Beta, it works like a charm.

1 Like

HI @martin . With the enhanced configurability of the six hardware buttons, does v3.7 also give LUA script access to the hardware buttons ? Either to register a callback when a hardware button is pressed / released, or to inspect if a particular hardware button is being held down right now.

My use case is implementing a “shift” hardware button along with multi-pot touches to trigger additional preset actions (but to prevent inadvertent multi-pot touch actions from being triggered by requiring the user also hold down a “shift” hardware button)

1 Like

firmware-v3.7.0d.srec.zip (1.6 MB)

  • the snapshot bank selection issue fixed
  • AHDSR envelope added - example
1 Like

@martin Looks like the perfect time to ask (again) for the Korg DW-8000 era A(ttack)D(ecay)B(reakpoint)S(lope)S(ustain)R(elease) envelopes… :grin:

I have to be careful with this. So far, the button configuration is on the “controller” level, ie. for all presets. I want to prevent situation when each preset would come with different button functions. It would be confusing. The idea of a “shift” key + knob touch to trigger Lua functions is one of the options to make it possible.

1 Like

it it a feature especially for you… :slight_smile:

2 Likes

Maybe, but I don’t personally felt a special DX-7 envelope set useful either! :upside_down_face:
But honestly if there was a more flexible way of adjusting the parts in the envelope settings (like we discussed a while ago) that would help me already. :wink:

Anyway, just doing my squeaky wheel thing here!

…and me :slight_smile:

1 Like

Actually, that would be cool for the Ableton remote script too :wink:

1 Like

Thank you @NewIgnis and @jhh for your support! :smiley:

1 Like

a few new v3.7 features combined together (@markus.schloesser):

  • Yamaha FB-01 connected to the MIDI IO port of the controller
  • LaunchKey connected to the USB Host port
  • Midi Remote feature configured to map LaunchKey’s knobs to the preset controls
  • Controllers knobs configured to send additional automation CCs
  • Router set up to forward messages between the LaunchKey, FB-01, and the Logic Pro

The result: Sysex parameter automation recorded in the DAW (via CCs).

Automation recording:

Playback of recorded automation:

5 Likes

Some cool developments. Is this MKII only?

Hi - I have just noticed a new buggy behaviour in the 3.7x firmware (c and d) vs the 3.6.1 firmware.

It seems that turning one control knob is also intermittently changing the value of another knob in the same control set. I confirmed that switching back to 3.6.1, exactly the same preset and knobs do not show (and have never shown) this behaviour before. For example, turning control id 4 is also intermittently changing the displayed value of control 11 also.

The preset is my (currently private) VCVRack preset patch. The knobs are Virtual controls, Min (0) , MAX (16383). The LUA code uses an onParameterChange to detect knob movement and transmit custom sysex MIDI. I will try and see if I can create a simple-as-possible preset to reproduce the issue. I have a short video demoing the issue, maybe I can upload it here too.

--
-- Send outbound packed NPRN to Orested One if E1 control has been changed
--
function parameterMap.onChange(valueObjects, origin, midiValue) 

  -- If change has come from E1, emit Midi message to Orestes-One in VCVRack
  if (origin ~= INTERNAL) then return end

  local control = valueObjects[1]:getControl()
  local parameter = control:getId() - 2

  -- Build Packed NPRN MIDI message
  --    * [1-3]       0x00 0x7F 0x7F Placeholder MIDI Manufacturer Id
  --    * [4]         0x01 Control update
  --    * [5]         NPRN id MSB (0-127)
  --    * [6]         NPRN id LSB (0-127)
  --    * [7]         Value MSB (0-127)
  --    * [8]         Value LSB (0-127)
  sysexBlock = {}
  table.insert(sysexBlock, 0x00)
  table.insert(sysexBlock, 0x7F)
  table.insert(sysexBlock, 0x7F)
  table.insert(sysexBlock, 0x00)
  table.insert(sysexBlock, parameter >> 7)
  table.insert(sysexBlock, parameter & 0x7F)
  table.insert(sysexBlock, midiValue >> 7)
  table.insert(sysexBlock, midiValue & 0x7F)
  
  midi.sendSysex(PORT_1, sysexBlock)

end
1 Like

I have a small reproducible test case E1 private preset. It has 12 Virtual controls in the first ControlSet (pots 1- 12), each set to MIN MIDI VALUE = 0, MAX MIDI VALUE = 16383.

Just try turning the first knob (on pot 1). The debug console will print when we see a parameter change for a different knob (even though you are only turning the first one). Here’s the LUA code if anyone else wants to try it (I didnt want to make the preset public and pollute everyones presets list).

I noticed that if I added a print statement without the “if” check but with the MIDI sysex sending, the problem disappeared.

I also noticed that if the script sends a MIDI control change instead of the sysex, the problem disappears.

function parameterMap.onChange(valueObjects, origin, midiValue) 
  -- Just turn the first knob (control id = 1)
  
  if (origin ~= INTERNAL) then return end

  local control = valueObjects[1]:getControl()
  local parameter = control:getId()

   -- Build Packed NPRN MIDI message
  --    * [1-3]       0x00 0x7F 0x7F Placeholder MIDI Manufacturer Id
  --    * [4]         0x00 Control update
  --    * [5]         NPRN id MSB (0-127)
  --    * [6]         NPRN id LSB (0-127)
  --    * [7]         Value MSB (0-127)
  --    * [8]         Value LSB (0-127)
  sysexBlock = {}
  table.insert(sysexBlock, 0x00)
  table.insert(sysexBlock, 0x7F)
  table.insert(sysexBlock, 0x7F)
  table.insert(sysexBlock, 0x00)
  table.insert(sysexBlock, parameter >> 7)
  table.insert(sysexBlock, parameter & 0x7F)
  table.insert(sysexBlock, midiValue >> 7)
  table.insert(sysexBlock, midiValue & 0x7F)
  
  midi.sendSysex(PORT_1, sysexBlock)

  -- midi.sendControlChange(PORT_1, 1, parameter, 127)


  if (parameter ~= 1) then
      print (parameter .. "::" .. midiValue)
  end    
 
end  
1 Like

Hi @Martin I played a bit with the new firmware and like the improvements. have to think a bit how to use them properly for the Ableton remote script. Some observations/bugs

  • After uploading firmware 3.7.0c long touch on screen did not open detail by default anymore; it would be good to have the defaults for 3.7 as they are for 3.6 (Update: after updating to 3.7.0d the long touch was still working, so not sure how/when firmware update changes configuration)
  • is it possible to switch configurations per preset? (for the remote scritp it might be useful to have different button assignments for the mixer and the device preset)
  • many new sysex events are sent out by default for UI events; is this configurable?
  • sysex override value text command SysEx implementation | Electra One Documentation not working correctly for ADSR controls
    • the first element of the ADSR has value-id 0 whereas the documentation implies it is 1.
    • when details view is open, incoming override commands are ignored; the latest received value is displayed the next time the details view is openend.
    • it would actually be nice if the value displayed in the ADSR details view could be split in two lines (either at the first space, or by an explicit newline \n in the text); there is space within the round knobs and then “386 ms” could be displayed as
      365
      ms
      

Will 3.7 also be supported by mkI?