First of all, thank you for your amazing work on DrivenByMoss. I'm a programmer myself diving into your code, and I really have to applaud how organized, structured and well-designed your framework is. Your YouTube tutorials are very good also.
I'm a newbie when it comes to Bitwig controller development though; I have a couple of questions I was hoping to ask you. It's basic stuff, I'm sure, but honestly Google doesn't help much and the official Bitwig API documentation could be a bit clearer when it comes to laying out foundations and core concepts. And since a lot of the functionality comes already encapsulated, abstracted or interfaced in your framework, I thought I would ask you.
- Am I right to understand that the Bitwig API doesn't offer any functionality at all to access a simple collection of all tracks currently present in a project? From what I gather, the only way to do this is to initialize an arbitrarily huge track bank when the controller is starting up, and then iterate through it, ignoring "empty" tracks. Is this right? It seems like such a weird way to work. If so, is there an "easy" way to achieve this within your framework without messing with abstract model implementations and so on, to initialize such a trackbank and expose it?
- A lot of the functionality in your framework depends directly on trackbank pages; however, the pages are "rigid", in the sense that the controller mappings scroll in full "steps" of 8 tracks, no matter what. This didn't fit the workflow I was hoping for, so I made a modification so that the Bank Select arrows in my APC40 MK2 can scroll the trackbank forwards or backwards one track at a time. This is working correctly, but I'm afraid it breaks a lot of other functionality (for example, the sequencer or drum sequencer don't ever know what track they're on, their pads are always off). Is such a modification viable? Meaning, will I necessarily, 100% break a lot of stuff by doing this, or did I just do something wrong?
- Finally, since you probably know the Bitwig API inside out: do you happen to know of any way to access from the Bitwig API the latency information of an active device/instrument/VST plugin? I was hoping to implement functionality to instantly deactivate/reactivate every latency-causing plugin with a single button press, in order to jam around without latency and then reactivate everything after I'm done, but I don't see it anywhere on the API.