context aware midi bindings

Official support for: bitwig.com
RELATED
PRODUCTS

Post

I own a korg microkontrol midi keyboard with 8 knobs and 8 sliders.
When playing around with software synths I prefer to assign knobs in the soft-synth to my midi controller rather than fiddling around with a clunky mouse. However, it gets a bit tedious assigning the midi controls to the same knobs each time I open a new soft-synth.

I don't know if this is already supported in Bitwig; But I would love to be able to set up some sort of midi-binding-template for each type of soft synth (eg. one template for polysynth, one for phaser-4, one for the sampler, one for NI-Massive, etc.) -and then be able to click a button that says something like 'Use context aware midi bindings' which would use my template for the synth I have currently selected.... And ofcourse it should automatically switch to the correct template when I click on another synth... And to get out of the context-detection-mode I simply click the 'Use context aware midi bindings' button again to de-toggle it.

Does Bitwig already have this kind of feature? Or is there a place where I can make a suggestion?
.. and if they don't have this feature right now, is there then another way to achieve said functionality?

Post

There was a way do bind to macros in context of selected device/track, like in ableton live. Then you make marco controls for each plugin in Device page (Not preset one), that will stay there across all instances of a plugin, after you load it in future as well. And you could swich pages too. I think you need appropriate controller script added for that in settings

Post

Yes, they're called Remote Controls, and they're accessible through the 6-dot icon on any Device. You can make Remote Control pages for any Device, and they can be saved as that Device's default, or in a specific Preset (which would allow you to make Remote Controls control Modulators!). You can have many Remote Controls organized however you'd like, in batches of 8 (or 10) settings.

The idea is that your 8 knobs will automatically be in control of those visible Remote Controls on the currently selected Device, but they can also be 'pinned' to a Device through the MIDI IO Panel on the right. There's never any binding or learning of MIDI messages, it just automatically controls the Remote Controls.

Now, some of this is done with a Controller Script, so I don't know exactly how it works if you're already using a specific or generic Controller Script that may not have this feature. What Controller Script are you using?
Creator of Bitwiggers, the place to share Bitwig Presets.
Advocate for Bitwish, the place to vote on Feature Requests and discuss Bitwig.

Post

Yes, the remote controls are excellent! However, is there a way to assign knobs say 9 to 16 of a MIDI controller to always control page 2 (or the page after the visible one) of the remote controls of the currently selected device? That would be so cool for those of us with controllers with more than 8 knobs ... I cannot find a way to do that ...

Post

I'm guessing that it should be possible with appropriate controller script.

Post

kvrsw2424 wrote: Tue Apr 16, 2019 8:43 pm Yes, the remote controls are excellent! However, is there a way to assign knobs say 9 to 16 of a MIDI controller to always control page 2 (or the page after the visible one) of the remote controls of the currently selected device? That would be so cool for those of us with controllers with more than 8 knobs ... I cannot find a way to do that ...
Yeah, definitely possible to do with a simple javascript controller script.
It interested me, so I tested it out:
You have to use a controller script for this.
I attached one to this post.
You have to copy it into the Bitwig Controller Scripts folder.
Add it in the Controller Settings in Bitwig Studio (you find it under "Trinitou"-->"16 RemoteControls") and select your MIDI controller as input.
Then open it in a text editor (like Notepad++) and change the CC values in the onMidi0 function to assign the CC values of the knobs to the remoteControls.
Also you can replace the 2 CCs for buttons to select previous/next remote control page.
If you don't know your CC's: open the control script console for the script - it displays all incoming MIDI messages:
display MIDI messages.PNG
In the script I use 2 remote control pages. Each has a tag ("a" and "b") assigned to it. So in the remote control mapping in Bitwig Studio you have to tag all the remote control pages for all devices with those tags like this:
remote control tags.PNG
Hope this is not too complicated :) Have fun!
You do not have the required permissions to view the files attached to this post.

Post

Hey thanks a million u-u-u, I will try your script as soon as I am back home (travelling right now) - very much appreciated!

Post

So I am back home again now and have tried the script - works like a charm! (I only had to change the API version that is loaded from 7 to 2 since I am still on Bitwig 2.3.). Using tags on the remote controller pages is a really clever idea, I did not even know it was possible to assign tags to these pages. I suppose one can use other tags as well, so they can nicely be used to designate which part of the controller is supposed to control a particular page. Effectively this means one can turn e.g. any hardware synth with different sections and knobs into a custom controller for any Bitwig device or VST very easily and can even modify the assignments (once one gets the cc's right) in Bitwig - so cooool!! I will now try to turn my Bass Station 2 into a custom controller for Polysynth ...

So big thanks again, u-u-u!

Post

Hey kvrsw ;) Great that it works out for you!
Some time ago I tried to write a script for another Bitwig user who wanted to get more out of a Midi Fighter Twister. This tag thing is exactly what we would have needed back then.
But it was in version 1 of Bitwig where we didn't even have remote controls but only 8 macros per device. So we tried to nest multiple Chain devices to get more than 8 macro knobs. And in the end it was almost not possible. So I can say for sure that Bitwig has evolved really great since then! :D

Great thought about that hardware synth -> custom controller thing :) Haven't even thought in that direction. Very nice to meet people with that kind of mindset here. :tu:

Post

But do you even need controlled script in that case? I have mini MS-20 controller (for the VST) and I think I could just make a container for synth with CC modulators assigned to it's parameters, and save it as preset. Then I could independently select preset for a synth while retaining CC bindings.

Post

I think I could just make a container for synth with CC modulators assigned to it's parameters, and save it as preset. Then I could independently select preset for a synth while retaining CC bindings.
Thanks x.iso! Are you referring to assignments made by right-clicking on a parameter or remote control and selecting "Map to Controller or Key"?

AFAIK this will indeed control your VST, but I think CCs assigned that way are global, i.e., they stick around and stay no matter which track or device is selected. So independent of where you are and what you are focusing on in Bitwig, the knob you have mapped will always control that one device instance (which is great for certain purposes). The controller script solution makes the knobs always control the currently selected device (on the track currently armed for recording), each time using that device's individual knob mappings.

(Or maybe you were thinking of some other way to assign CCs using a container? The way I understand it, creating controls that survive preset switching can be done w/o a container by creating device remote control pages and mapping controllers there?)

Post

kvrsw2424 wrote: Thu May 02, 2019 7:34 am
I think I could just make a container for synth with CC modulators assigned to it's parameters, and save it as preset. Then I could independently select preset for a synth while retaining CC bindings.
[...]
AFAIK this will indeed control your VST, but I think CCs assigned that way are global, i.e., they stick around and stay no matter which track or device is selected. So independent of where you are and what you are focusing on in Bitwig, the knob you have mapped will always control that one device instance (which is great for certain purposes). The controller script solution makes the knobs always control the currently selected device (on the track currently armed for recording), each time using that device's individual knob mappings.
[...]
The CC modulator solution works so that when you have the track with that device record-armed, you can control this device because all incoming MIDI data (including CCs) go through the device chain (and this way also reach the desired device).
You are right concerning the controller script solution.

Just to extend this: in the script you can define the CursorDevice (a device representation which follows the current device selection in the BwS gui) as pinnable. This way you can right click a device in the device panel in BwS and pin the CursorDevice to this device. Now, when you select another device, the MIDI controller will stay linked to that pinned device until you unpin it again.

Post

Yeah, I meant CC modulators, they should be working only when track is armed.

Post

Just to extend this: in the script you can define the CursorDevice (a device representation which follows the current device selection in the BwS gui) as pinnable. This way you can right click a device in the device panel in BwS and pin the CursorDevice to this device. Now, when you select another device, the MIDI controller will stay linked to that pinned device until you unpin it again.
Hey, that means we could get the best of both worlds - dynamically follow chosen track/device by default, but pinnable if we so wish, perfect! So that means one would have to change these lines

Code: Select all

cTrack = host.createCursorTrack(0,0); //create a cursor track
cDevice = cTrack.createCursorDevice(); //create a cursor device on the cursor track
in the script somehow to make it pinnable?

Post

kvrsw2424 wrote: Thu May 02, 2019 6:39 pm
[..]
Hey, that means we could get the best of both worlds - dynamically follow chosen track/device by default, but pinnable if we so wish, perfect! So that means one would have to change these lines

Code: Select all

cTrack = host.createCursorTrack(0,0); //create a cursor track
cDevice = cTrack.createCursorDevice(); //create a cursor device on the cursor track
in the script somehow to make it pinnable?
You don't have to change a line. Have look into the Controller Surface API yourself: a CursorTrack itself is a PinnableCursor. This means you can use .isPinned().set(true/false); or .isPinned().toggle(); on it.
And the .createCursorDevice() methods on a CursorTrack always return a PinnableCursorDevice. This means that you can use the .isPinned() options here, too.
You do not have the required permissions to view the files attached to this post.

Post Reply

Return to “Bitwig”