Additional MIDI controller as an E1 expander

The Electra One can use other MIDI controllers as expanders.
That in itself is not new. You could foresee a FaderFox for instance that will also control CC values known to the E1, and in such way expand the physical controls of an E1.

But imagine to go beyond that, and use an additional MIDI controller as a generic E1 expander, regardless on what page the E1 is set.
For that purpose I looked, found and acquired an old Behringer BCR2000, which has 32 encoders with light rings for feedback. In total it may control 56 continuous controls and control 64 buttons. That is more than sufficient to test this idea.

Potential set up of BCR2000 as Electra One Expander
If I’d use it as an expander to the E1, this would work as follows:

  • I’d keep the E1 focused on its upper section of each page
  • Page dependent controls: 4 rows of 6 rotary encoders on the BCR2000 would then control the 24 controls for the E1s middle and lower section
  • DAW oriented controls: 8 buttons on the BCR2000 would be reserved for MMC like controls (you know, play, record, fwd, punch in/out
). But that has nothing to do with the E1.
  • PC and BC: 4 buttons and 2 encoders would always be reserved for program and bank change (select a program, ±, -1 
)
  • E1 Page change buttons: 4 of them: go to first, previous, next or performance page (a ‘performance’ page to pe is the page you’d usually want to be during a life performance)
  • Performance: 6 encoders would always be reserved for main performance controls, regardless of the page the E1 is on: for instance cutoff, resonance, attack, decay, lfo speed, lfo depth

Page and preset changes
Everytime you change a page on the E1, the E1 should transmit via SysEx the setup of the 24 Page dependent controls and update the BCR2000 temporary memory. This SysEx defines all the characteristics of each of the controls, including the current value of the control. The BCR2000 would thus also reflect actual state of these 24 controls. However a BCR is not as clever as an E1, so list controls must be defined on the number in the list (0
4 for a list with 5 options), not with the value each option has (the BCR cannot be limited to for instance 0,31,63,95,127). In other words, there is some mapping to be done at the side of the E1 to address the simpler characteristics of external MIDI controllers.

Everytime you change a preset on the E1, some other SysEx preset dumps are needed to ensure:

  • It knows the boundaries for program and bank changes
  • It knows the E1 page number, considered as ‘performance’ page
  • It knows which controls should be assigned to fixed locations on the BCR2000, regardless on the page the E1 is set to.
  • MIDI routing, which is preset dependent:
    • should MIDI data received by the E1 be forwarded to the BCR2000?
    • should any other MIDI data generated by the E1 be forwarded to the BCR2000?
    • should any other MIDI data send by the BCR2000 be ignored by the E1?
    • should any other MIDI data send by the BCR2000 be forwarded to USB port, MIDI 1, MIDI 2?

Bidirectional control
And everytime you tweak a control on or received by the E1 this data should be mapped against the MIDI controller set up, so the E1 could retransmit it when expected, with the correct value to the MIDI controller.
The external MIDI controller , dumb as it is, will always transmit its data changes to the E1, so we must ensure the E1 then knows how to handle that data.
To avoid double transmissions to other MIDI devices, the exchange between E1 and BCR2000 could use a set of dedicated NRPN’s or even Sysex messages to keep them outside of the ranges used by the other MIDI devices.

Can it be done?
By reading the BCR2000 SysEx implementation, it looks like we could do this. And with the extended firmware 3 memory, I also think the E1 is capable of it. However it will be a tedious job, which is to be redone with each of the presets. Tedious because the SysEx language of Behringer’s BCR2000/BCF2000 is quite specific, and will need a lot of translation.
Yet, I may be starting to experiment with this.

Has anyone already tried out the idea of dynamically reassigning controls on an external MIDI controller, based on the E1’s preset or page?
If so has anyone found a way to convert this in a kind of library, so he did not need to reprogram everything again when using the same MIDI controller for a different preset.

9 Likes

I’ve been using this controller as an “expander” for Electra. It controls one page of parameters only, as potentiometers allow me to operate it without looking at the screen when performing.
They are CC-mapped to mirror the controls on a set Electra page.
However, while data is sent smoothly between this controller and the receiving device, the controls’ display on Electra take a while to update.

3 Likes

Exciting about this product is its limited size

So I understand the knobs do not follow the pages of the E1, but instead you chose them to control specific parameters, regardless of the page the E1 is on?
that is sensible as well
 but does this mean you need to reprogram them every time you go to a different preset on the E1?

Do you happen to know if they can be configured into using NRPN messages, instead of CC?

2 Likes

yes, my use case is as you describe - i needed a “global” controller regardless of page - and it needs to be reconfigured per preset, yes.
This are the config options for each pot (it’s running Arduino Leonardo inside so I guess you could tweak it
) - it also allows to use as HCI device (e.g. to control systemwide functions like volume or display brightness)

Hello ! I am unshure to understand . Could i control parameters not controlled by the E1 Knobs with an external controller that let us change “other” E1 Parameters displayed on the screen ? And it will change dynamicaly the “other” parameters controlled regarding the page we are on ?
Or is it just that the other controller is assigned to the same CC as the E1 is assigned and the E1 routes thoses ?

in my case, the latter - in @NewIgnis, the former.
I find it for live performance having potentiometers with a beginning and end helps me not having to look at the electra, while being able to look to have a glance of how they are set - so my template for live performance has common controls displayed on the bottom row for every page of the preset, and mirrored in the external controller.

@NewIgnis approach would be more like a “meta-controller” that controls the whole electra 6x2x3 pots while also controlling the DAW directly. If I understand well :slight_smile:

I used the two styles of display to distinguish between what’s mapped to my controller and (thin) and what’s not (classic)

Ah, good that you created this topic, otherwise I would have started one today. :slight_smile:

I was looking at fader controllers like the Sparrow 8x100mm MIDI controller – The MIDI Maker, and wondering what would it take to use it as an Electra 1 extension.

I’m thinking especially on the DrivenByMoss for Bitwig and Reaper extension, where the mixer is already organized in blocks of 8 channels.

I wonder whether an 8 faders controller could be used here. Bonus points if there is a way to use a 4 faders or smaller numbers and have a way to jump to the next/previous bank. I was even thinking about the possibility to plug a top quality 1-fader controller and use it in combination with whatever is active on the E1. :slight_smile:

For what I have seen, these dedicated fader controllers tend to have some way to configure their MIDI signals in detail.

1 Like

Can we please get this feature? MIDI merging is not enough for me. The “expander” midi controllers I have only send out MIDI. I am using Electra to send out Sysex. I would like the midi controllers to tell Electra to send out the sysex parameters
 essentially turning the Electra into a very powerful translator and generic midi controller interface where the expander controllers do not need to concern themselves with any implementation details. You can also then switch between banks and your expander controllers will just continue to work (just on a different bank
 or not, who knows!). On top of this, it could auto switch to the pages that you are turning the parameter knob for so you will always have visual feedback of what knob is what.

It looks like Electra has some very basic midi control support already
 now please let us control the parameters via external midi controllers too, please. :slight_smile: :

https://docs.electra.one/extcontrol.html

1 Like

That definitively would be a huge improvement to have the Possibility to extend the E1 with additional Pots!

The suggested Solution from Ignis is like the dream solution, but a lot of work to implement. But there would also be a easier Solution by just extending the Extcontrol-Possibilities :

Just define 36 CC which correspond to the Slots on the Active page, accepting relative Values. Like this we could easly extend the E1 with every simple Controller witch supports Relative CCs (like Intech EN16, Faderfox aso) without the need to have two-way communication. So basically the external Ports would act like the internal Pots.

I thought about implementing that myself with Lua, but there are missing Lua Functions like getControlBySlot or the possibility to get the parameterType of a Control which i would need for Parameter Map Actions.

If somebody has another solution: i would be really happy the get some infos!

1 Like

I bumped into this topic and think it would be a nice extension to the Ableton Remote script as well. Say you have a 36 knob external control, with fixed CC assignments (ie a very dumb device), if you connect it to the MIDI in of an E1 it would control the 36 parameters in the page currently shown on the E1. This would require some internal mapping of these fixed CCs to the parameters currently shown. I was looking at the parameter map in LUA Preset Lua extension | Electra One Documentation but it is not clear how exactly the parameterNumber in parameterMap.set is assigned to specific parameters shown on the E1. Is this the same as the control-id in a preset? Is it assigned in sequence as a preset is loaded? @Martin is this documented somewhere?

2 Likes

The parameterMap is used to keep state of the MIDI parameters within the preset. On-screen controls do not keep the value, they just have a link to particular entries in the parameterMap.

ie. if you create Fader control with ref id 1, which send/receive CC #12. there will be an entry in the parameterMap with type set to “CC” and parameterNumber set to 12. The Fader control will be linked to that entry.

note, type / parameterNumber entries are always unique. If there are more controls in the preset that receive/send the same MIDI message, they will all link the same entry in the parameterMap.

I like the idea of simple assignment of external controller to E1’s preset control, but using the “slot” number on the page would be quite complicated. Especially with recent changes to the firmware that allow more flexible layout of the pages.

The preset JSON (format) has so called “input” associated with each control value. Currently it is used for pot assignments. One control value may have multiple inputs defined. eg. I want to use it for mapping MIDI 2.0 properties to preset controls. Assigning a CC message is an option too.

1 Like

Ah, thanks. That’s clear (although inconvenient for the use case I had in mind :wink:

@martin The “Slot” Idea was actually only a workaround to get the right ParameterMap-Entry:
From Slot you get the Control, from Control you get the PT and and ParameterID, and with that info, you can use get/set on the ParameterMap. So, that was only a approach i was thinking about. But it would definitely only work on the “classic” layout with 36 fixed Slots, and not with the new, more flexible Controls.

I think at the end, the best Way would be, if every ControlSet/Pot Tuple has a fixed CC Parameter which accepts Relative Values. So CS1/P1 would have CC1, CS1/P7 would have C7, CS2/P1 would have CC13, CS3/P1 would have CC25 aso.

Like this, if you would send a CC Relative Value to CC13, the E1 would behave exactly the same as when you would Select ControlSet2 and Turn Pot1, no matter to which control CS2/P1 would be assigned. Or if you send CC36, it would be the same as selecting ControlSet3 and Turn Pot 6. Relative values would be important, as the E1 would not need to send CC-Updates on Page Change to the Controller and the Controller would not need to keep track of the Values, as the E1 already does that. That would also work for new Controls witch are not bound to the 36-Slot Grid, as you need to assign CS/Pot Tuples to this Controls anyway, to have them working with the E1-Pots.

Like that, you could extend the E1 with a simple 24 Encoder Midi Controller and you could work with the E1, as it would have 36Pots. And to be honest: For me thats the only annoying thing on the E1 to always switch the ControlSet. Im always altering the wrong Conrol, just because i have the Focus on the wrong ControlSet.

1 Like

@busa I like the approach you suggest very much!

1 Like

Hello ! I wanted just to point something else in all those good solutions . user-friendliness ? Like we would have the option to do that without coding ? Just clicking and perhaps writting numbers on the editor ? :see_no_evil: . Because i really enjoy using programs but i am not able to code . I like the idea behind the “ControlSet/Pot Tuple” but i will really appreciate not to program those . just picking them on the editor interface and associate them to my external Midi fighter twister, or Fader port or BCF ? :slight_smile:

1 Like

I think where @busa and @jhh are heading is basically a zero-configuration on E1 side. And I second that. I see it that there could be only a general on/off switch and MIDI channel setting in the controller configuration to enable/disable the feature.

3 Likes

@martin i think that would be super awesome for all the non programmers! sounds exiting!

sorry, just reposting from the other thread:

I for one, would just like a box that has the same width as the E1, same amount of buttons and same amount of encoders. So basically the E1 without the screen.

This way you could add two of them, and have encoder control over every parameter on the selected page.

On second thought, just make the expander into the double version straight away

@martin any news on this Idea? :grimacing: