asked Jun 07 '16 at 16:01 by pplcanfly (31)

Hi, I'm writing controller script for Novation Impulse 49 and I found some disadvantage of Bitwig's API. Impulse 49 has 9 physical tracks in total (8 + 9|Master). Example will describe best what I want to achieve so let's say I have 2 instruments and 1 effect and master. In such setup I'd expect:

  • faders 1 and 2 control instruments 1 and 2 respectively
  • fader 3 controls effect 1
  • faders 4-8 don't control anything
  • fader 9|Master controls master track

All cases above include control of corresponding mute/solo buttons or lack of it.

If I had more than 8 instruments + effects I'd like to access all of them by switching banks but still control master by fader 9|Master on fixed position while any bank is enabled.

Confronting it with API now.

Host#createTrackBank - includes all instruments, effects and master right after them. Using above example when I receive midi signals for fader 4 I need to treat it as empty track (Bitwig reports master on this position) and not modify any state for it. It also applies to corresponding mute/solo buttons. Handling all those if == 'Master' checks is doable but tedious. However TrackBank#addCanScrollChannelsUpObserver is impossible to use since it always assumes presence of master in bank, Results are "off by one" for my needs therefore custom processing is needed for bank switching based on track count which again includes master track and gives result too big by one.

On the other hand using combo of Host#createMasterTrack / Host#createMainTrackBank / Host#createEffectTrackBank also doesn't make things easier. Concatenating two banks of instruments and effects and treating them as one would be even more difficult than skipping master track in case of Host#createTrackBank.

I haven't found anything in API which would return instruments and effects together but -without- master. Maybe you know other way I could achieve behavior from my example using existing API? If not then Host#createTrackBankNoMaster is more then welcome!:)


Hey champ, how'd it turn out?

I'm almost finished re-writing a Livid script for a dedicated touchscreen DAW Controller for BWS. Encountered the same issue with only able to get maximum number of channels from that particular script.

The Solution:

Learnt Java and heavily modified a Livid script. Basically, from a quick run down you need to use multiple tracks. i.e 1 dedicated for master, and X dedicated for your faders etc. Those two are done through trackbank and then using the trackbank function you made you then use an existing device count index to create a for loop which assigns the correct tracks to that control source.

Scrolling is done through a seperate handler which changes the bank number and consequently gives a new midi channel for that track id.

..pretty sure thats ball park anyhow haha.


answered Sep 29 '16 at 23:29 by rewird (46)

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

Markdown Basics

  • *italic* or __italic__
  • **bold** or __bold__
  • link:[text]( "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported



Asked: Jun 07 '16 at 16:01

Seen: 1,862 times

Last updated: Sep 29 '16 at 23:29