Hi @Torsten,
Firstly, just to set expectations, this is all forward planning. I’m in the middle of a non-trival reworking some core engine internals which needs to be finished and stabilized before I move onto this.
I think we’re thinking in a similar vein, except I’m also trying to make it that the mapping from hardware is handled more automatically by a script.
Let me layout what I’m thinking - I think it does line up with what you’re describing.
I’ve struggled to come up with a system for this in the past because I was trying to do everything through the one mechanism. Things became a lot clearer for me when I decided to split this into two distinct areas - mixers and parameters.
Mixer Panel
My thoughts here are to introduce a typical mixer panel GUI - a horizontal stack of N vertical slots each with fader, knobs and buttons. Each would be specific to the kind of object they’re connected to (plugin, rack, etc…)
To add something to the mixer panel, you right click on an object, choose “Add to Mixer” and then choose a mixer slot number.
This both selects and flattens the mixer settings you want direct control over and there’s no bindings involved yet.
On top of this, there would be bindings so you can map controllers to Mixer Slot N Fader, Mixer Slot N Knob 1, Mixer Slot N Button 1 etc… and you could create a whole stack of bindings to control it.
However, an integration script could automatically map all these mixer slots to a known piece of hardware - this could be a hi-end MIDI control surface, a Stream Deck+ or a simple macro keypad with a couple of knobs. It’s up to the script to decide how these are mapped, provide paging across the entire set of mixer slots etc…
With an appropriate integration script installed, all you need to do is choose what things going in which mixer slots and you can control it from your control surface. No bindings, it just works.
Parameters
The approach with parameters is similar but a bit more complex, and also not completely clear in my mind yet. The complexity here is because parameter editing on controllers is far less standardized than mixer panels.
For example:
- I have a Novation SL MkII and the parameter editing area is eight strips, each with LCD, 2x lightable buttons, 1x rotary encoder with led ring, 1x pot and 1x velocity sensitive drum pad.
- A StreamDeck+ can be thought of as 4 strips each with 2x display buttons, 1x display area and 1 rotary encoder.
What I want to do is provide similar automatic mapping by the integration script as what I’ve described for mixers.
Best idea so far is to allow songs/racks to define “parameter strips”. A parameter strip would be a pre-canned arrangement of controls - perhaps 2x text, 3x knobs, 4x buttons.
Each of these parameter controls could be used as binding source/targets, or I’ll probably also provide some more direct 2-way mapping to plugin parameters and other common settings to avoid cluttering the bindings panel.
By grouping parameters into strips it gives a bit more organization than individual parameters. eg: you can group parameters for a single plugin into one strip, perhaps group the parameters for a single oscillator etc… This makes them easier to position and move around than individual parameters.
From here a similar approach to the mixer slots - user can assign a parameter strips a slot index and it appears in a parameter panel in that position. You can create bindings to/from these slots - or better use an integration script that can automatically map them to hardware.
What I haven’t work out is how to better handle controls that aren’t in a parameter type grid. For these I’m wondering about named (rather than indexed) parameter slots - not sure.
Again the goal is to select what you want controllable from hardware and the integration script makes it just work - it maps what it can to the hardware, provides paging over the full set of parameters strips etc…
Slot Indices
For both mixer panels and parameter strips I said you assign them a slot index to control where they appear.
Originally I was going to just have them stack left to right in the order of the song/racks, but that means things can shift around from song to song. By setting a particular slot number, that set of controls will always be in the same place.
This however makes it possible to have conflicts (two objects assigned to the same mixer slot). I think the best approach here is to simply error out and leave it to the user to resolve.
I could also have a slot index option of “Auto” where it just uses the next available slot, but I don’t think I like this idea.
Anyway, as mentioned I haven’t started coding any of this and I too am just thinking out loud… and very open to feedback and suggestions.