More than 8 project remote controls at once possible? many cursor devices?

Post Reply New Topic
RELATED
PRODUCTS

Post

Hi :-)

I have a controller with 32 knobs/buttons and want them all to controll project remote controls.

I just manage to get 8 at a time even when passed in 32 as the amout of controls, like this:

Code: Select all

Project project = host.getProject();
Track rootTrackGroup = project.getRootTrackGroup();
remoteControls1 = rootTrackGroup.createCursorRemoteControlsPage(32);
I read somewhere by @mossgraber in a youtube reply (dont know the place anymore) than one can use multiply cursor-devices but when I try to instatiate a second rootTrackGroup.createCursorRemoteControlsPage than Bitwig complains in the console that there can only be one main remote control..

With just 8 knobs each bank it is working but all 32 would be super cool. Has anybody an Idea?

Here is my working version with 8 knobs, bidirectional Led-Feedback so on but how to make it work with 32 knobs?

https://github.com/systemexklusiv/proje ... nsion.java

thank you david :-)

Post

It was sort of doable with page tags on devices. Never tried it with track/project level remotes though yet, but I guess it would work the same way too.
So yeah, you'll first have to assign each remote controls page a different tag in the remote controls editor UI. Let's say the tags would be '1', '2', '3', and so on.
Then create a list with as many pages as you want to have. Fill it in for loop with code like this (the excerpt from my controller script project, replace 'cursorDevice' with your track variable):

Code: Select all

pages.add(cursorDevice.createCursorRemoteControlsPage("deviceMode" + pageIndex, 8, String.valueOf(pageIndex + 1)));
So each page gets its unique name (the first parameter) and filter expression (the last parameter).
Then assign remote controls to your hardware knobs as usual. Something like:

Code: Select all

pages.get(0).getParameter(0).addBinding(/*knob1*/);
pages.get(0).getParameter(1).addBinding(/*knob2*/);
..
pages.get(2).getParameter(4).addBinding(/*knob20*/);
..
Of course it should be done inside a nested loop. Just iterate over all the pages and in each page iterate over all the 8 remotes.

This solution works even if you switch devices as long as the device you just selected has remote contols set up with the same tags ('1', '2', '3', so on).

Post

Wow thank you that actually worked very well! what I missed was, that one don't get the error with having to have just one Main-RemoteControl totally. if you use the constructor with name and filer-expression its obviously OK to have more! Nice!

Bassicaly by invoking f.i. 2 times the constructor like this:

Code: Select all

        CursorRemoteControlsPage remoteControls1 = rootTrackGroup
                .createCursorRemoteControlsPage("1", PARAMTERS_SIZE, "1");
        CursorRemoteControlsPage remoteControls2 = rootTrackGroup
                .createCursorRemoteControlsPage("2", PARAMTERS_SIZE, "2");
I could get hold of 2 Pages with 8 remote controls each! Each of them gets value listeners linked to my hardware controls 8) Super nice this fixed my issue yes :phew: I am no ready to fully celebrate this long awaited global remotes feature with my Livid Code which was collecting dust over the years :love: !!!

Post

@catzilla

Yes I did it in a loop but took care about the bindings manually. The addbindings-way swould be more elegant I guess? Here is what I came up with for a Controller with 32 knobs, controlling 4 Project remote pages at once (176, data1/CcCnum = 1 to 32 is my Code sending)

https://github.com/systemexklusiv/proje ... nsion.java

Most of the logic is here

https://github.com/systemexklusiv/proje ... sPage.java

Do you have your code somewhere to see it in greater context?

Thanks a bunch for the inspiration :love: !

Post

Thanks for that! I have to study this, it opens up a way to finally get a useful script for something like the Beatstep or a Console 1 into place… There is also my Skulpt synth waiting for being a universal plugin controller.
Most of my controllers have more than 8 controls…

Post

Tj Shredder wrote: Thu Aug 24, 2023 4:39 am Thanks for that! I have to study this, it opens up a way to finally get a useful script for something like the Beatstep or a Console 1 into place… There is also my Skulpt synth waiting for being a universal plugin controller.
Most of my controllers have more than 8 controls…
Oh, how much i hate the limitation of 8...

And i don't understand why it has been that fundamentally implemented in Bitwigs system, because even 2014 there were enough controllers with more than 8 knobs on the market, lol. Even Touch OSC is out for a while now. On a 24 inch touchscreen i can have about 200 Faders/Knobs. Not being able to see all project remotes and track remotes on one page feels like a april fools joke, haha. But sadly, I'm too inexperienced to even understand how to open and change drivenbymoss' OSC script. *.bwextension isn't easily de-compile-able for a noob like me.
I built a Looper for Bitwig! :) https://www.youtube.com/watch?v=-z5ywDo2bU0

Post

^ Driven By Moss is an open source project, anyone can pull the sources from GitHub and modify them to satisfy their own needs. I actually did that a lot in the past before I dropped the Push 2 and switched to a touch screen instead.
Also, I just want to add, .bwextension files are usually just regular .jar files with a different extension and DrivenbyMoss is no exception. But it's still better to go with the sources way.

@_systemexklusiv no problem! I'm just glad that a hack I've found myself some time ago finally came in handy for somebody else besides me :D
I saw your FR on bitwish where you worried it could be broken in the future.
Now I think it isn't really that much of a hack. We use the API the way it was intended to be used by the Bitwig devs themselves. By specifying different page ids we make each page object independednt of each other. By specifying the filter expression we make them to point to different remote controls pages. I don't think this behaviour will ever change. It that actually happens, we just file a bug report and they fix it.
Regarding the correct way to bind physical knobs to remore parameters you asked. Sort of yes, it's supposed that you define a controller surface object which virtually represents a piece of hardware you have, then define knobs, faders and buttons with their correposnding CCs, and then bind those to remote parameters. But it's just your little personal project, if it already works with the quick way you made it, just go with it. I don't think implementing it 'the right way' worth all the hassle. Could be an exercise in the future for you when you have some spare time.
Unfortunately, I don't have anything uploaded anywhere to show you. You can check out Moss' youtube playlist about the Bitwig controller API. He covered the control surface API in some of the videos, if I'm not mistaken.

Post

catzilla wrote: Fri Aug 25, 2023 8:58 am ^ Driven By Moss is an open source project, anyone can pull the sources from GitHub and modify them to satisfy their own needs. I actually did that a lot in the past before I dropped the Push 2 and switched to a touch screen instead.
Also, I just want to add, .bwextension files are usually just regular .jar files with a different extension and DrivenbyMoss is no exception. But it's still better to go with the sources way.

@_systemexklusiv no problem! I'm just glad that a hack I've found myself some time ago finally came in handy for somebody else besides me :D
I saw your FR on bitwish where you worried it could be broken in the future.
Now I think it isn't really that much of a hack. We use the API the way it was intended to be used by the Bitwig devs themselves. By specifying different page ids we make each page object independednt of each other. By specifying the filter expression we make them to point to different remote controls pages. I don't think this behaviour will ever change. It that actually happens, we just file a bug report and they fix it.
Regarding the correct way to bind physical knobs to remore parameters you asked. Sort of yes, it's supposed that you define a controller surface object which virtually represents a piece of hardware you have, then define knobs, faders and buttons with their correposnding CCs, and then bind those to remote parameters. But it's just your little personal project, if it already works with the quick way you made it, just go with it. I don't think implementing it 'the right way' worth all the hassle. Could be an exercise in the future for you when you have some spare time.
Unfortunately, I don't have anything uploaded anywhere to show you. You can check out Moss' youtube playlist about the Bitwig controller API. He covered the control surface API in some of the videos, if I'm not mistaken.
Oh it seems i have missed your answer.
I ve since made a post describing my current problem with midi scripts: viewtopic.php?p=8739444#p8739444
I m so unexperienced, that i dont even know how to "pull the source" on drivenbymoss github. Because i cant seem to find the full scripts i would need to look into (OSC and Generic Flexi).
I built a Looper for Bitwig! :) https://www.youtube.com/watch?v=-z5ywDo2bU0

Post

The trick with several CursorRemoteControlsPages is genius. But what about projects with less remote pages. How can I get the number of pages? Is there an observer when the user adds a new page? I couldn't find anything in api documentation.

Post

I got it. I didn't realized that the tags for the filter can be set in the bottom bar in the remote controls editor.

Post Reply

Return to “Controller Scripting”