Twister Sister - MIDI Fighter Twister controller extension

User avatar
KVRian
917 posts since 26 Oct, 2005 from Canada City

Post Thu Mar 18, 2021 3:21 pm

Not satisfied with existing extensions and having a general interest in learning the API, I decided to set out creating my own extension for the MIDI Fighter Twister. This is the result.

A TLDR of the features:
  • 1 bank for track/device control and navigation
  • 3 user mappable banks with user settable light colors that get saved with the project
For the most part it's straight forward stuff, but there is one feature that I think is novel. There are two controls on the "track & device" bank that can be configured to control specific parameters on any number of specific devices. For example, you could have all your reverb plugins map their mix and decay parameters to these knobs.

This is configured using an external TOML file and is pretty flexible. The code that does this is also fairly generic and could be used in other extensions rather easily.

For more detailed info about features, see the docs linked below.

Source: https://github.com/dozius/TwisterSister
Docs: https://github.com/dozius/TwisterSister/tree/main/docs
Downloads: https://github.com/dozius/TwisterSister/releases

KVRer
1 posts since 22 Jul, 2003 from Los Angeles

Post Sun Apr 11, 2021 9:06 pm

Thanks for sharing, I need to try this.

KVRist
162 posts since 18 Sep, 2020

Post Sun Apr 18, 2021 4:53 am

This is odd:
image_2021-04-18_145226.png
But:

Code: Select all

% ls ~/Documents/Bitwig\ Studio/Extensions
DrivenByMoss.bwextension  SpecificDeviceSettings.toml  TwisterSister.bwextension
You do not have the required permissions to view the files attached to this post.

User avatar
KVRian

Topic Starter

917 posts since 26 Oct, 2005 from Canada City

Post Sun Apr 18, 2021 6:34 am

That does seems strange. Maybe Java doesn't resolve "~" and needs the full user directory instead. I'll try to see if I can find some documentation for this.

Unfortunately, I don't have anything that runs MacOS to test on.

KVRist
162 posts since 18 Sep, 2020

Post Sun Apr 18, 2021 10:12 am

Code: Select all

      case MAC:
        return System.getProperty("user.home") + "/Documents/Bitwig Studio/Extensions/" + file;
Seems to have done the trick. Can make a PR if you like.

User avatar
KVRian

Topic Starter

917 posts since 26 Oct, 2005 from Canada City

Post Sun Apr 18, 2021 11:45 am

Cool, I had just come back here to offer a test build that did exactly this. Good to know it actually works. Thanks for letting me know. No need for a PR, I already have a local branch with a similar change in it. I'll put up a release later tonight.

KVRist
162 posts since 18 Sep, 2020

Post Sun Apr 18, 2021 12:09 pm

Thanks!

KVRist
162 posts since 18 Sep, 2020

Post Fri Apr 23, 2021 2:29 pm

I'm enjoying this, thank you.

In my limited API poking I haven't seen it, but maybe there is a way to decouple a controller from an active selected track? Like, Track 1 is selected (and being controlled by another controller) while MFT controls track 2. If so, would be a great addition, for example: push-turn knob 1 "selects" another track for the MFT without changing track focus, long push resets.

User avatar
KVRian

Topic Starter

917 posts since 26 Oct, 2005 from Canada City

Post Fri Apr 23, 2021 3:51 pm

Good news, this is already available. If you open the "Studio I/O" panel, the track cursor and device cursor are available there. If you "pin" the cursor using the little push pin icon then the cursor will stop following the selection.

I didn't think to include this in the documentation because this isn't specific to this extension. It's how the cursors in the API work in general. Discoverability is pretty poor though. Maybe it warrants a short blurb in the docs.

KVRist
162 posts since 18 Sep, 2020

Post Sun Apr 25, 2021 6:31 am

😲It probably is in the docs and I just didn't remember seeing it. Ok then! Thank you for pointing that out, that's amazing news.

Wonder if the pinning of the track is API accessible...

User avatar
KVRian

Topic Starter

917 posts since 26 Oct, 2005 from Canada City

Post Sun Apr 25, 2021 7:37 am

It should be accessible. Anything that inherits the PinnableCursor interface will have "isPinned()" which is a settable boolean value.

KVRer
1 posts since 2 Apr, 2021

Post Thu Apr 29, 2021 10:12 am

Hello
I really like the track/device bank!Thanks!
Is there currently a way to select tracks in a group track with the track selection knob?
It skips them in my project (3.3.7).

User avatar
KVRian

Topic Starter

917 posts since 26 Oct, 2005 from Canada City

Post Thu Apr 29, 2021 11:47 am

No, you have to manually select into/out of groups.

edit: I was trying to remember exactly what stopped me from pursuing this further, so I played around a bit this evening. Then I ran into it again. It was the folding/unfolding of groups that killed it. If you navigate into a group that is folded, it does not unfold automatically. Your cursor gets lost inside the folded group. This is pretty unexpected and can get pretty disorienting if you aren't sure which group the cursor is hidden inside. I suppose you could always manually click select a visible track to reorient, but it just felt too broken.

If Bitwig was smart enough to unfold the groups automatically when you navigate into them or if there was a way to programmatically force them to unfold when you navigate into them, then I would add this feature. If someone knows a way to do this, let me know!

KVRist
162 posts since 18 Sep, 2020

Post Mon May 03, 2021 2:27 pm

Found a small issue with the controller extension: when a device knob was moved by automation the LED ring reflects that but the knob remembers its previous position — so moving the knob jumps to the value it had before automation happened and goes from there. Interestingly this doesn't happen when just moving the control with the mouse, both the ring and knob value get updated correctly.

To reproduce (on 3.3.7): create parameter automation with a single point, play, move the knob, restore automation, move knob again.

User avatar
KVRian

Topic Starter

917 posts since 26 Oct, 2005 from Canada City

Post Tue May 04, 2021 5:30 am

The knobs are set to relative and don't store any kind of position state. All Bitwig sees from the controller is increment/decrement pulses, so I don't see how this could be coming from the extension side. Seems like the issue is with Bitwig. Maybe try reporting the bug to the Bitwig team and see what they say.

Return to “Controller Scripting”