Toggling fader functions with automated faders

I’m trying to think of a good way to toggle a fader’s function on the Qu16…

 

My current Qu16 set-up has all 16 faders controlling whatever I like (as set / non adjustable values) – I’d ideally like to create a second layer to allow adjustment of each channel’s data by pressing a “toggle” button. There’s 3 buttons per channel available; so I’d be able to use one of those – e.g. press the Channel 1 toggle button; and the faders now jump to the values that are sent by the channel one fader (when not toggled).

I’m finding this hard to explain, and have tried typing this up a few times now! haha... so sincere apologies if this is just waffle… Maybe a specific example:

  • All 16 faders are for FX sends, and each fader can send a chosen amount of send to 4 effects “FX1, FX2, FX3, FX4”
  • I have things set so that e.g. fader 1 at max value 127 sends the following amounts: FX1=30; FX2=50; FX3=0; FX4=100 [This step I can do, but only as fixed / permanent values]
  • *hit toggle* the first four channel faders now jump to the FX1-FX4 values of 30; 50; 0; 100 (and maybe lets say, all other fader are “inactive” and snap to zero)
  • I can now adjust these FX1-FX4 values… e.g. 0; 0; 100; 0…
  • *hit toggle* ALL faders snap back to their actual settings – whatever I left them at pre-toggle…
  • now when I move the Channel 1 fader to max 127, it sends FX1=0; FX2=0; FX3=100; FX4=0, as was set up in the toggle layer…

So I have some ideas of how to do this… but I’m not sure if they’re too complicated or could be better OR won’t even work!... Part of the headache is having the faders automated between these layers… I’m also wondering if I’m just burning through too many global variables with my “newbie” programming style!?

My thoughts are:

I currently have my faders set to a unique global variable per fader… ga-gp… These control actual outgoing message values at the moment too… but I now think I’ll need to separate these out to ONLY control the fader location, and use another set of variables for actual parameter control. Hmm.. Or maybe I can even ditch “fader position” as a global variable… and just trigger “Move Fader” timers based on toggle settings…? That could work…?! Anyway… Let’s assume I chew up a global variable for fader position – I could maybe then have:

  • ga-gp for fader tracking values only (to tell each of the faders where it needs to go when toggled on or off);
  • ha-hp for telling the “master layer” what fader value to use in the performance layer;
  • ia-ip for telling the Ch 1 “toggle layer” what values to use for variables (maybe just the first four faders as per my example; with all other faders receiving a fixed “00” value message to snap to zero). I code into the master layer to allow the ia-ip values to be the individual translator variables used for a given fader in the “master layer”;
  • I then use separate globals for the Channel 2 toggle layer; and the Ch3 toggle layer etc etc etc…
  • For fader position of e.g. channel 1 bewteen toggles: the fader recieves ia-ip OR ha-hp to relay their value to ga-gp for fader tracking depending on whether the toggle is on or off… (I’ve checked that fader position CAN be controlled via midi)

I’m happy to start mucking around in that space… But don’t want to jump down the deep dark rabbit hole if the whole methodology is a bit silly…

Using this integrated approach to “faders send values defined elsewhere” is also possible very cool, as it could enable me to develop presets. E.g. use a launchpad to send 64 different preset variables used in my project (rather than relying on programmed static values, like “Ok – Channel 1 ALWAYS sends FX1 amount 30”)… The thought of also having access to those on automated faders is… epic.

I greatly appreciate any thoughts…

Hi,

Without digging too much into the details of your question, maybe a basic strategy would help.

As you say, you define global variable to each fader for each layer. If you are concerned about chewing up too many global variables, keep in mind that a global variable consumes 32 bits of data but MIDI 7 bit encoders only  use (you guessed it 7 bits).  If you want to play around with bit-mapping, this means you can get up to 4 layers (with 4 bits to spare) of fader position data with a single global variable by using different bit positions for each layer.  If this is too much to handle, lets just assume you will use 1 global variable per 4 layers so a total of 4x16 orr 64 global variables for fader positions.

Normally I set this all up so that either the application or the user can update the value of the global variables. I do this from incoming actions from the controller or the DAW.  Usually the controller (users) only handles values on the current layer but the DAW could actually still send values to a currently "hidden" layer.

You put each layer under a different preset and then with your buttons you simply switch active presets. You set up an "On Activate" incoming action on each preset so that when the preset is activated, you start a repeating timer to update the viewable position of all of the faders in the new current layer. You deactivate your other layer presets so that when you move the fader, the fader updates from the user are only recognized for faders you are moving on the current layer (preset).

On each layer if you want to assign different outgoing CC's and/or MIDI Channels to the DAW, you can also do this with global variables as you switch layers.

All of this might be a bit complex for a new user and doing it for you would be beyond the scope of this free support, but hopefully I gave you enough information so that you can grasp the concept and move foreward if you want to do it yourself.  As always, I'm always availabe for paid support if you really don't have the time or desire to do it yourself.  Just drop me an email if interested.

I think there might be some examples that could also help you here on this board.   If I can find one, I will point it out to you. If I remember, I helped someone with a MIDIMIX controller do something similar.  

I hope this helps!

 

Steve Caldwell
Bome Q and A Moderator and
Independent Bome Consultant/Specialist
bome@sniz.biz

 

Hey Steve... Thanks man... as always, great insight... and that\'s great to know about 32 bit variables being able to be split to effectively become multiple variables. I\'ve seen you use that in a few threads now, but didn\'t really understand what was going on... it\'s all starting to make sense now lol... Well.. \"slowly\"... :)

I do wonder if I\'ll call on your services at some point - for now, as I think I\'ve mentioned a few times... I\'m actually just enjoying the platform!... That said, I\'ve had a look at some of your work in various threads, and it\'s all very tidy guru stuff; as opposed to my Frankenstein beast I\'m slapping together... haha eiher way, for now: the crazy good news is:

I\'ve... well \"I think I may have\" got this working already :)

*I\'ve set up a Ch1 button as a toggle (ia=ia^1) and a light on / off to suit (with that same pesky \"63\" off value!)...

*I\'ve set up a full run of translators for \"recieve fader value\" upon fader movement as ja-jp (for \"normal\" default layer) with input simply set as Midi Message when fader moves. This also has some rules about what values it uses and what happens dpending on the toggle... if ia<1 then ja=pp (pp is the fader value); if ia==1 then exit rules, skip Outgoing Action (skips a timer going out for other purposes);

*I\'ve also set up a second full run of translators for \"recieve fader value\" upon fader movement as jq-j5 (for toggle layer)... same input settings, but opposite rules...

I\'ve tested this for Channel 1 only, but it does work perfectly (despite what seems to be a slightly clunky approach - I\'m sure I can tidy it up)... when I hit the toggle button, the fader jumps bewteen two values that I\'ve manually set: ja for master layer; and jq for the toggle layer...

[Edit - I\'ve also setup the sequence of presets to make sure the button press is above the \"move the fader\" which is above the \"recieve fader value\" in presets, just in case they go whacky with some kind of loop... not sure if this will matter, but it\'s been confusing and concerning me as a theory, so I\'ve tried to write that out via this sequence of events]

So now I have two independent values on the one fader... Or a whole new set of 16 faders via button press... Things are getting interesting :)))))

Looks like you are making good progress. Thanks for the update! You can always reach me via email if interested in paid services.

Steve

So - further update... This is really working well now... Still haven\'t used the toggle layer\'s values to control anything; but just getting each toggle layer to work correctly has been tricky enough for now!... AND getting the lights / toggle state to turn off when ANY other button is pressed was confusing haha... I solved that with a a lazy but effective translator at the start of the toggle button preset just running through \"Any toggle button hit?... ok: if I didn\'t hit button 1, then button 1\'s counter = zero; if I didn\'t hit button 2, then button 2\'s toggle counter = 0;...\" etc etc for all 16 toggle buttons. As all lights and functions are driven directly from this toggle state (0 or 1), it works well enough, so I\'m cool with that...

So yeah - I have it all working now... 16 automated \"master faders\", who\'s values are retained when not on a toggle layer... and 16 new layers of unique fader values with full automation to and from their user selected values.

I\'m a bit dizzy now though haha... and... I\'m running out of globals very quickly (256 unique globals are chewed up with the faders alone + 16 toggle buttons + other functions... Yikes...).

I\'m going to start looking into splitting up globals into multiple variables... e.g. with 32 bits, I\'m kind of assuming I can actually use only one global for the 16 toggle buttons...? Hmm... well, hopefully?... I\'m constantly confused to be honest, but feel like I\'m doing some really cool stuff here... Will undoubtably post a question on splitting globals when my brain melts again, but will do a decent search around and read of posts / docs before then :)

Thanks so much for your help though Steve... you\'re a total champion!...

Hi, it looks like you are having too much fun. Using bit manipulation you would get up to 32 button on/off states with a single global variable. It takes a bit of work to get set up but I find once you have set it up, it is a quite efficient way of handling things. Check the section on bit operators in the manual (F1)

bitwise or is |

bitwise and is &

bitwise exclusive or is ^

shift right is >>

shift left is <<

I put together a small text guide that I often refer back to when setting up bit manipulation. See attached

 

Steve Caldwell
Bome Q and A Moderator and
Independent Bome Consultant/Specialist
bome@sniz.biz

 


Attachments:
1591277155472_bitwise.txt

Great - many thanks for the guide!... I'm going to look into using this for all button presses... Seems more logical to do it that way to be honest... ALL Select Buttons: one variable; ALL Mute Buttons: another...

 

Very tidy (unlike my current beast of a MT project!!)...

Yes, I also learned this from the School of Hard Knocks (where I still study sometimes these days). Experience is a great teacher.