Bitwig 3.2.5 API 12 Released

RELATED
PRODUCTS

Post

Creating this thread for possible discussion around version 12 API...
Bitwig Updates

What's New in Bitwig Studio 3.2.5 [released 17 July 2020]
IMPROVEMENTS
Extension API is now at version 12, allowing finer control of specific devices and plug-ins
Looking to see what the updates are! but it seems the help is truncated in the manual. I emailed tech support.

From the API Manual...

Code: Select all

API version 12
The following classes have been updated or added in API version 12.

ControllerHost
The following methods have been added to the ControllerHost class in API version 12.

createActiveDeviceMatcher (): com.bitwig.extension.controller.api.DeviceMatcher
Creates a DeviceMatcher that will only match devices that are currently active.
createAndDeviceMatcher (/*...
---------------------------------------------------------------
http://kirkwoodwest.com/

Post

Looking forward to someone clever than I am explaining what this means in real terms!
X32 and 24C mixers, S88MK3, Live + PUSH 3, Osmose, RedShift 6, Pro3, S4, Tempera, Syntakt, Digitone, OP1-F, OPXY, TR-1000, Eurorack, TD27 Drums, Guitars, Basses, Amps and of course lots of pedals!

Post

The documentation generator cannot handle "...", therefore the history page is broken :-/
I searched all pages for "version 12" and this is the new stuff:
  • ControllerHost
    • DeviceMatcher createAudioEffectMatcher ()
    • DeviceMatcher createInstrumentMatcher ()
    • DeviceMatcher createNoteEffectMatcher ()
    • DeviceMatcher createBitwigDeviceMatcher (UUID id)
    • DeviceMatcher createVST2DeviceMatcher (int id)
    • DeviceMatcher createVST3DeviceMatcher (String id)
    • DeviceMatcher createFirstDeviceInChainMatcher ()
    • DeviceMatcher createLastDeviceInChainMatcher ()
    • DeviceMatcher createActiveDeviceMatcher ()
    • DeviceMatcher createOrDeviceMatcher (DeviceMatcher ... deviceMatchers)
    • DeviceMatcher createAndDeviceMatcher (DeviceMatcher ... deviceMatchers)
  • DeviceBank
    • void setDeviceMatcher (DeviceMatcher matcher)
  • Device
    • SpecificBitwigDevice createSpecificBitwigDevice (UUID deviceId)
    • SpecificPluginDevice createSpecificVst2Device (int deviceId)
    • SpecificPluginDevice createSpecificVst2Device (int ... deviceIds)
    • SpecificPluginDevice createSpecificVst3Device (String deviceId)
    • SpecificPluginDevice createSpecificVst3Device (String ... deviceIds)
    • EnumValue deviceType ()
  • SpecificBitwigDevice
    • Parameter createParameter (String id)
    • IntegerValue createIntegerOutputValue (String id)
  • SpecificPluginDevice
    • Parameter createParameter (int parameterId)
This provides 2 things:
1) You can filter (and therefore search) for specific devices. Create a DeviceMatcher and use it with DeviceBank.setDeviceMatcher
2) Access specific parameters of devices (this replaces the DirectParameter API, which is broken and hard to use).

To find out about the device and parameter IDs add to config.json (the same file which is used to activate the device simulator) the following line:

Code: Select all

can-copy-device-and-param-ids : true
This adds new commands to the context menu (when right-clicking on a device or parameter).

Post

very cool! thanks moss.

was trying to think of a way to connect some of my custom vst lemur templates for devices. looks like this would work perfectly in this way.
---------------------------------------------------------------
http://kirkwoodwest.com/

Post

I still ask myself what the best usecase is for these new options.

Is it for controllers that have a very specific layout? And you can do things like Spectrasonics did with their Omnisphere 2.6 Hardware integration? So that you can make sure that for each plugin/device you e.g. get the cutoff control on your hardware synth always mapped to the cutoff of your software synths? Or more that you can build a custom MIDI controller that is specific to a certain VST plugin or Bitwig device (like a Polysynth hardware controller)?

I mean there also is the option to use the tags on the remote control pages for each device in Bitwig. And in the API you can set it up to filter for those specific tagged pages. This way a lot of things can be done already - like building a custom channel strip preset and having the MIDI controller controlling it if it is loaded to the currently selected track. Though it's still difficult to filter all devices on a track for specific presets from the API, isn't it?

So what is the difference between using tagged remote control pages and the Device/Plugin matchers (and using parameter ID's to find specific ones)?

Post

After installing this update, the script of the MIDI controller AKAI MPK261 stopped working correctly. The drum machine does not respond to the controller pads. I had to choose a standard Flexi script from the default sets. Also, there was a delay in loading plugins, which was not there before. Rollback to 3.2.4. solved a problem. It's a pity, but this update is not entirely successful.

Post

u-u-u wrote: Mon Jul 20, 2020 3:16 am I still ask myself what the best usecase is for these new options.
1) Gives you the option to find specific devices (and insert them). This was simply not possible so far. E.g. I have now a stable way to find the drum machine on a channel. Also you could think e.g. if you would want to have always an EQ on your channel.

This is also new but was not tagged as API12:

Code: Select all

InsertionPoint.insertBitwigDevice (UUID id)
2) Yes, creating individual controllers for devices (as mentioned above e.g. with OSC templates) is the main idea.

Post

Thank you for the insight! :)
moss wrote: Mon Jul 20, 2020 8:16 am
u-u-u wrote: Mon Jul 20, 2020 3:16 am I still ask myself what the best usecase is for these new options.
1) Gives you the option to find specific devices (and insert them). This was simply not possible so far. E.g. I have now a stable way to find the drum machine on a channel. Also you could think e.g. if you would want to have always an EQ on your channel.
This is also new but was not tagged as API12:

Code: Select all

InsertionPoint.insertBitwigDevice (UUID id)
Ah, that't interesting!
I think, also for the layer devices that's a cool option. This way setting up a controller for switching Instrument selector layers for different songs/song parts should become more easy. Though it was possible before with setting up a template and hard-mapping the controller (but this is tedious).
Logically there also could be an option to insert VST plugins.
moss wrote: Mon Jul 20, 2020 8:16 am 2) Yes, creating individual controllers for devices (as mentioned above e.g. with OSC templates) is the main idea.
Very cool! Also doing custom graphics for certain devices that mirror E.Q. curves etc. could become reality. Just someone had to figure out how to calculate the EQ curve out of the EQ params. Or Bitwig adds something to the API that provides device-specific visuals to devices that e.g. have an OLED screen.

Post

u-u-u wrote: Mon Jul 20, 2020 9:09 am I think, also for the layer devices that's a cool option. This way setting up a controller for switching Instrument selector layers for different songs/song parts should become more easy. Though it was possible before with setting up a template and hard-mapping the controller (but this is tedious).
Logically there also could be an option to insert VST plugins.
That was already possible (insertVST2Device, insertVST3Device) but you didn't know the necessary IDs to use it.
moss wrote: Mon Jul 20, 2020 8:16 am Very cool! Also doing custom graphics for certain devices that mirror E.Q. curves etc. could become reality. Just someone had to figure out how to calculate the EQ curve out of the EQ params. Or Bitwig adds something to the API that provides device-specific visuals to devices that e.g. have an OLED screen.
Interesting idea but I guess a big pile of work...

Post

moss wrote: Sun Jul 19, 2020 8:01 am To find out about the device and parameter IDs add to config.json (the same file which is used to activate the device simulator) the following line:

Code: Select all

can-copy-device-and-param-ids : true
This adds new commands to the context menu (when right-clicking on a device or parameter).
Where do I find the config.json ? I'm on OSX, and I can't seem to find this file. I'm trying to find the ID's of some devices to test out these devicematchers.
Thanks
Anders

Post

andersskibsted wrote: Mon Jul 20, 2020 10:15 pm Where do I find the config.json ? I'm on OSX, and I can't seem to find this file. I'm trying to find the ID's of some devices to test out these devicematchers.
See the description of the class HardwareSurface in the API docs or watch my tutorial videos about the new Hardware API.

Post

moss wrote: Mon Jul 20, 2020 8:16 am
u-u-u wrote: Mon Jul 20, 2020 3:16 am I still ask myself what the best usecase is for these new options.
1) Gives you the option to find specific devices (and insert them). This was simply not possible so far. E.g. I have now a stable way to find the drum machine on a channel. Also you could think e.g. if you would want to have always an EQ on your channel.

This is also new but was not tagged as API12:

Code: Select all

InsertionPoint.insertBitwigDevice (UUID id)
2) Yes, creating individual controllers for devices (as mentioned above e.g. with OSC templates) is the main idea.
This is gonna be dope. i'm looking forward to being able to try this out when my schedule clears up!
---------------------------------------------------------------
http://kirkwoodwest.com/

Post

Thank you Moss for the info above about enabling can-copy-device-and-param-ids in config JSON.

I'm now trying to use createBitwigDeviceMatcher() with a UUID I've copied from the Bitwig UI, but I'm getting a runtime error because that function actually requires a UUID object (not a string). The actual error says it requires a java.util.uuid as argument, but I am coding in Javascript and there is no language built-in or Bitwig API function or class for creating a UUID object as far as I am aware.

Any ideas on how to get this to work?

Post

Sam_K wrote: Sun Jul 26, 2020 5:29 am Thank you Moss for the info above about enabling can-copy-device-and-param-ids in config JSON.

I'm now trying to use createBitwigDeviceMatcher() with a UUID I've copied from the Bitwig UI, but I'm getting a runtime error because that function actually requires a UUID object (not a string). The actual error says it requires a java.util.uuid as argument, but I am coding in Javascript and there is no language built-in or Bitwig API function or class for creating a UUID object as far as I am aware.

Any ideas on how to get this to work?
I am afraid you can't. You would need to have an instance of UUID, which is currently not possible to get from JavaScript. I had the same issue with creating a Color instance for the hardware API, which I also reported but I guess it got drowend in other TODOs.
Report and complain (nicely) to Bitwig :-)

Post

Hi,
I'm trying to enable my clickable knob as a min to max toggle for a device/vst parameter (in Java).
If I use the createHardwareButton and the pressedAction and addBinding, I can't bind it to the Parameter I create for my vst's.
If I use the AbsoluteHardwareKnob the parameter goes to maximum when I push down and goes back to zero when I releases the clickable knob, as my midi controller sends 127 on push down, and then 0 on release. But what I want is a toggle between maximum and minimum on each press down (and nothing on each of the releases).
Is there any way to bind a "parameter toggle" or something like that to the pressAction()?
Or should I look into something else?
I'm new to Java so I might be overlooking something obvious...
Thank you Moss for the tutorials and the help provided so far. It's very much appreciated!

Post Reply

Return to “Controller Scripting”