RFC: Mixer Panel, User Control Panels and Dynamic Global Bindings

v3
rfc
Tags: #<Tag:0x00007f0f4c911e48> #<Tag:0x00007f0f4c911d08>

#1

Hey Guys,

I’m about to dive back into the OS X port of Cantabile for probably a month or so. But…

In parallel I’ve started thinking about a couple of long standing bigger tasks that I’d like to attack after this next sprint. Since these things need to simmer in the back of my mind for a while I thought I’d write up what I’m thinking and open it to discussion.

These are the Trello cards for the tasks at hand:

The point of this post is to try to bring all of the above into a very high-level abstract design (albeit with many details still unresolved).

The Problem with Free Form User Control Panels

The ability to design a custom control panel surface for a rack was originally raised a long time ago and while I like the idea, the problem is that by allowing the user to design an arbitrarily shaped control surface it’s difficult to integrate that with the main window in a consistent and space efficient manner.

Such a design could work well as a separate popup window (like a plugin editor) but I think the more important goal here is to lift important controls from inside the rack to the main window where they’re at the finger tips.

Also, a generically editable “form” is a tedious thing for the user to setup, and difficult to design well. So…

A Deliberately Limited UI Builder

Rather than provide a completely free form UI designer I’m thinking a better approach might be the ability to design custom “Mixer Slots”. Each slot would be a tall UI area divided into say 6 sections. Within each section you could choose the kinds of controls you want.

Something like this:

The Mixer Panel would then be a horizontal stack of mixer slots.

Standard Mixer Slots

Besides custom mixer slots, there would also be standard mixer slots for:

  • Plugins
  • Racks
  • Media Players

Creating a Custom Mixer Slot

Each rack and song will be able to define a set of Mixer Slots. These slots would be stored in the rack and shared across any song that uses the rack. Each slot would have a name which is used to reference it.

Each control in a mixer slot would be bound directly to any of the currently available binding targets. Configuration would be done on the control itself - not in the bindings panel and in most cases would be automatically a two way binding - ie: moving the control updates the setting, updating the setting elsewhere updates the control in the mixer slot.

Possibly the configuration of the slot could be state-controllable, but that might be overly complex.

User Parameters

User parameters are intended as a way to define a set of named parameters on a rack or song. Each named parameter would be bound either directly to a rack setting, or available as a binding point for use in bindings (both as a source and/or a target).

The primary purpose of user parameters are:

  1. to provide a single edit point for connected parameters
  2. to provide a way to provide formatting (via an attached format string/expression on the property) for incoming MIDI data. ie: by binding a MIDI CC to a user parameter the value can be converted into a human friendly display value.

Any setting in a custom mixer slot can be bound to a rack’s user parameter.

Setting up the Mixer Panel

The mixer panel would be a new panel near the bottom of Cantabile’s main window. In would consist of a horizontal stack of slots where the content of each slot can be selected - either the built-in slot for a plugin, rack etc… or any of the custom mixer slots defined by the rack.

It would also be feasible to have multiple mixer panels that can be cycled through.

Dyamic Global Bindings

The final piece to all this is that the controls in each mixer slot would be available as binding points for the background rack, but rather than binding to a specific mixer panel the bindings would be to mixer panel currently in particular slot position.

eg: you could bind 4 sliders on your MIDI control surface to main slider of mixer slots 1 through 4. Now whatever the song loads into those mixer slots would:

  1. be controllable from the MIDI control surface
  2. automatically reconfigure the MIDI control surface as different songs are loaded (eg: update motorized faders, update the text label on an OLED display on the slider, LED ring updates etc…)

Bringing It All Together

So this is how you’d generally use all this:

  1. You’d create global bindings in the background racks to/from the mixer slots. These would be setup once and then used across all songs
  2. In each rack you define whatever custom mixer slots you need. These would be available to all songs that use that rack.
  3. In each song you’d drop the required mixer slots into whichever slot you like.
  4. As you switch songs the mixer slots would be replaced with those for that song, outgoing MIDI bindings from those mixer slots would immediately fire (thereby reflecting the state o the Mixer Panel onto the external MIDI control surface) and any incoming MIDI for those mixer slots would be automatically mapped to whatever is loaded into the slot.

Thoughts?

So that’s roughtly what I’m thinking. Obviously there are holes in the design and details to be fleshed out, but curious what everyone thinks.


Performance view - like MainStage?
Large visual indication of the state of bindings
#2

I really like it. I particularly like the way global bindings could be set up to always connect to certain slots, so you could have an easy way to interface control surfaces to different parameters in songs. However, I wonder whether binding to a named slot might be a better idea, rather than a specific slot index? I’m just thinking that if you find you need to reorganise your global bindings, add a new one or whatever, you may need to go through all your songs editing the slot configuration. Making it target a named slot in a song (or leave it unbound if that slot doesn’t exist) feels more flexible to me, and of course you could just name your slots 1, 2, 3, 4 if you want to simulate the slot position approach.

One small concern related to the UI layout. Currently I make heavy use of the control bar, and the smaller version of the on-screen keyboard for zone display, which together eat up quite a lot of vertical space, thus limiting the length of show notes I can include. I’m finding I need to drop the font size smaller than I’d like, or put more stuff horizontally across the page in the show notes which is harder to read in quick glances in gig conditions. So another panel docked to the bottom is going to exacerbate this, and may limit how much I can use it. It might also be worse for me because I have a widescreen display.

So I’d like to see the option for other UI arrangements of the slots too. For example horizontal slots (instead of vertical) docked in a panel on the left or right.

Also having a mode where the existing control bar could be docked on the left or right, would be useful, for the same reason. Actually, thinking about it, the existing control bar could hook into the same mechanism, become a number of “global slots” or something…

I also wonder how easy it’s going to be to determine what a particular control does, particularly for the knobs. Perhaps each control in a slot should have a tiny space at the top for small font text or something?


#3

Thanks @Neil_Durant - you’ve raised some good points. I’ll take all that into consideration.


#4

This<<<<<<<<


#5

Hi Brad,

I read through your explanation and I understand the principles of the design, but would ask some of the following questions and maybe in the process ask about some possible options.

  • can the mixer have transparency control and layering (to see through to what’s on the panel under it)?

  • could we add a ‘show mixer on controller change’ and ‘fade out on timer’ option (to say, show in front of notes when turned and auto faded after adjustment is made)?

  • if it is limited to one horizontal mixer panel could we make so it docks to top or bottom?

  • if there will be multiple horizontal changeable mixer panels then could there also be an option of stacking these mixer panels (say a three high limit made to fit the existing Notes/Routing/Bindings panel window or something like the grid panel) instead of cycling through them as a separate panel below the other panels mentioned?

Thanks for taking comments … oh and I see you are making good headway on OSX development, I know the users over there will love this app as much as all of us PC users do!!

All the Best,

Dave


#6

I would love to see enhancements like these. I’m sure you’re aware of MainStage but nevertheless I want to point out again how well done their implementation of “global controllers” is. You add a physical controller (like a slider or a foot pedal) to the main UI screen and then you can assign it per patch. But the point is you can always see it and its position too. You can also add a dynamic text screen that displays what it does.

As for the custom UIs, again MainStage does this well but if you’re going for a “purposely limited UI” Cakewalk Sonar does this really well with FX chains (basically their equivalent of your “rack” except it’s only FX and always linear). You can have sliders, knobs and switches. You can give them a name and you can set the minimum and maximum values. I think an enhanced version of this would be a great solution. I would however suggest the possibility of making it dockable and allowing some leeway in the width. 9 faders for a drawbar organ and a main volume, drive control and leslie slow/fast/stop would be nice. I know you can still use the actual organ GUI of course but that gets more complicated when you have a separate leslie plugin or multiple plugins in the rack.

I would also love it if these controls could be macros.


#7

I love this idea. I’ve been trying to use third party plugins for some of this with little luck. An integrated solution would be amazing!

Will there be a stable release with the latest features before you refocus on the Apple side though? I’m itching to play with them, but can’t use a non-stable version for performances.


#8

I’ve just retagged 3266 to stable (and released 3267 experimental).


#9

Awesome! I have a big (for me) festival gig on Friday, so I’ll dig in this weekend. As always, I love how responsive you are sir.


#10

I would readily use a totally free form user designed control panel in a separate pop up window. I have a keyboard controller with 8 pads and I’m using these as switches for various vst effects and rack states etc. The keyboard controller has no display that’s useable so I am currently using Reaktor Panels to display images of the Pads with labels for what each one does Very clumsy solution. There aren’t any usable vst midi control panel plug ins that I can find.

Would dearly love a Cantabile solution.