is it possible to control Bitwig anyhow from a standalone application?
-
- KVRer
- Topic Starter
- 9 posts since 1 Dec, 2011
Hello,
I wrote a Linux application to configure the mappings for NI Komplete Kontrol MK2 controllers. While it is already possible to configure the MIDI channels assigned to selected key ranges and which CC codes all the knobs, buttons and connected pedals send, the goal for upcoming versions is to make it also possible to use the buttons on the controller to execute functions in the Bitwig DAW (for example to start playing of the play button on the controller is pushed).
Does anybody know if Bitwig provides something like a network service or DBus service which allows to remote-control a running instance of the program. Alternatively, is there any controller plugin which provides something like this?
I wrote a Linux application to configure the mappings for NI Komplete Kontrol MK2 controllers. While it is already possible to configure the MIDI channels assigned to selected key ranges and which CC codes all the knobs, buttons and connected pedals send, the goal for upcoming versions is to make it also possible to use the buttons on the controller to execute functions in the Bitwig DAW (for example to start playing of the play button on the controller is pushed).
Does anybody know if Bitwig provides something like a network service or DBus service which allows to remote-control a running instance of the program. Alternatively, is there any controller plugin which provides something like this?
Do you want to use NI Komplete Kontrol MK2 controllers on Linux? Then check out the qKontrol project.
- KVRAF
- 4145 posts since 13 May, 2004
Yes, there are lots of possible solutions for this. E.g. you could simply use OSC (e.g. from DrivenByMoss or write you own commands). If you write a Java extension for Bitwig you can also access any Java communication library on the planet (even call into C-code).GoaSkin wrote: ↑Fri Jun 14, 2019 10:23 pm Hello,
I wrote a Linux application to configure the mappings for NI Komplete Kontrol MK2 controllers. While it is already possible to configure the MIDI channels assigned to selected key ranges and which CC codes all the knobs, buttons and connected pedals send, the goal for upcoming versions is to make it also possible to use the buttons on the controller to execute functions in the Bitwig DAW (for example to start playing of the play button on the controller is pushed).
Does anybody know if Bitwig provides something like a network service or DBus service which allows to remote-control a running instance of the program. Alternatively, is there any controller plugin which provides something like this?
-
- KVRer
- Topic Starter
- 9 posts since 1 Dec, 2011
Thanks a lot for your reply.
I already thought about using the OSC protocol. Unfortunately, I use Bitwig 2.3.5 and we currently have no update plan running. Trying with the older "2.0" version of this extension, port 8000 or another specified port remains closed.
The console output is just:
but I will debug this a bit more ASAP
I already thought about using the OSC protocol. Unfortunately, I use Bitwig 2.3.5 and we currently have no update plan running. Trying with the older "2.0" version of this extension, port 8000 or another specified port remains closed.
The console output is just:
Code: Select all
java.net.PortUnreachableException: ICMP Port Unreachable
at java.net.PlainDatagramSocketImpl.receive0(Native Method)
at java.net.AbstractPlainDatagramSocketImpl.receive(AbstractPlainDatagramSocketImpl.java:143)
at java.net.DatagramSocket.receive(DatagramSocket.java:812)
at com.bitwig.flt.control_surface.opensoundcontrol.ESQ.MlO(SourceFile:60)
at java.lang.Thread.run(Thread.java:745)
Do you want to use NI Komplete Kontrol MK2 controllers on Linux? Then check out the qKontrol project.
-
- KVRist
- 41 posts since 23 Dec, 2012
I send sysex messages to pass code to my script, maybe this would be a solution if OSC is not available for you?
I'm sure there is a better way to code this:
I'm sure there is a better way to code this:
Code: Select all
function hex_to_ascii(str1)
{
var hex = str1.toString();
var str = '';
for (var n = 0; n < hex.length; n += 2) {
str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));
}
return str;
}
function onSysex0(data) {
data=data.substr(2).slice(0,-2)
data=hex_to_ascii(data)
firstWord = data.split(" ")[0]
content = data.split(" ")
content = content.slice(1,content.length).join(" ")
//Display custom string notification
if (firstWord == 'disp'){host.showPopupNotification(content)}
}
-
- KVRist
- 138 posts since 20 Oct, 2015
I actually have a working solution to this, using a UDP socket, ( which is available from controller scripts) I made a webapp that behaves as a touchscreen controller for bitwig macros... it's done using node.js as a server that acts as a communication bridge between the browser and bitwig...
here's the code for the server: https://github.com/brunomolteni/overwig ... er.js#L111
and here's the code for the controller script:
https://github.com/brunomolteni/overwig ... ol.js#L155
I had to actually figure out how to encode the data when sent through the socket ( String.getBytes and bytesToString in the controller script, ReadBytes and GetBytes in the server), and added a JSON polyfill to use JSON.stringify inside the controller script.
On the server side I just do a JSON.parse on the data recieved ( I had to actually implement a splitting logic because sometimes the socket would send several messages all together )
hope this helps...
here's the code for the server: https://github.com/brunomolteni/overwig ... er.js#L111
and here's the code for the controller script:
https://github.com/brunomolteni/overwig ... ol.js#L155
I had to actually figure out how to encode the data when sent through the socket ( String.getBytes and bytesToString in the controller script, ReadBytes and GetBytes in the server), and added a JSON polyfill to use JSON.stringify inside the controller script.
On the server side I just do a JSON.parse on the data recieved ( I had to actually implement a splitting logic because sometimes the socket would send several messages all together )
hope this helps...