tooll3 / t3

Tooll 3 is an open source software to create realtime motion graphics.
MIT License
3.38k stars 186 forks source link

Ideas for improving the Midi workflow. #108

Open ScreenDream opened 1 year ago

ScreenDream commented 1 year ago

This is intended as a basis for discussion for improvements to the Midi side of things as recently discussed on Discord:

At the moment (as of 16.9.2022) there is only one Midi Input operator, it only supports Midi learn to set it up and it only receives Midi CCs AFAICS.

I see quite some potential in this area so I want to lay out some possible directions here.

On the technical side, this discussion brought up the current limitation to Midi learn as the only (?) way to select the intended input device. While this works well enough if there is only one or a limited number of controllers attached, in more busy environments, this is a serious limitation, since it may be hard to only have one single signal. For instance the Roli Seaboard Block sends Pressure, Timbre (CC 74), Note and Pitchbend more or less at the same time continuously...

Another issue with the current limitation is, that on Windows, many Midi controllers only allow one application to use the Midi port and throw a rather cryptic error about "Not enough Memory" if a second app tries to access it. Since tooll 3 listens to all controllers in the system, it also has to open all ports, which then leads to the situation that the app first started wins - not a good thing in a live setup.

Sense mentioned workarounds via LoopMidi and MidiOx, but I personally think those are problematic in a production environment, where there may be other constraints to the setup and t3 shouldn't require these.

The common practice in all audio applications I use is, to have some kind of preferences where one can select what Midi devices should be used. This has several advantages:

Now there is an interesting issue with this, since every project in t3 can have it's own setup, one global preference isn't really cutting it.

So I came up with a couple of ideas for discussion what makes sense and is feasible in the context of t3:

All these would allow Midi learn as well as selecting devices, CCs etc. manually.

A complicated topic with Midi is, that for instance with Notes you do not want one node for every individual Note you want to react to or create, that would make working with a melody rather tedious. So you need something like a list, where you can get at all notes and their current state and velocity at once. This needs some good planning in the context of t3 to make it as easy to use as possible.

So there you have it. Became a bit more involved than the initial "can we have a Midi output too"... ;-)

Looking forward to learn how this can be implemented!

Cheers,

Tom

pixtur commented 1 year ago

Also support Midi Notes

Midi-Notes are already supported. But it's kind of hidden and probably needs a better / clearer user interface.

... in more busy environments, this is a serious limitation, since it may be hard to only have one single signal. For instance the Roli Seaboard Block sends Pressure, Timbre (CC 74), Note and Pitchbend more or less at the same time continuously...

Agreed. We have the same problem with [OscInput]

Some thoughts on that:

ScreenDream commented 1 year ago

Interesting - thank you for the feedback and thoughts!

Yeah, I think even the most modular environments I've used (Usine Hollyhock etc.) always had a static Midi/Audio base setup, so it may boil down to that, if a more modular setup is too complicated.

This may actually make the most sense in the end, since usually you have one set of audio interface(s) and one set of midi controllers on a given machine and especially midi devices normally aren't exchangeable for others 1:1 anyway. I personally would be fine with one global setup for audio and midi - that also would give you one central place to set up your gear instead of having to re-do it for each project.

From there on the modular concept should hold though, although the concept of no out-of-chain modules will make it less visibly obvious than a structure where you have several outputs for graphics, midi and audio. But maybe this could be solved with something like a multi-input node with separate inputs for these kinds of protocol layers (Audio, Midi, OSC, DMX...)? Would that make sense? Or at least the artist could use an execute node to simulate separate ports and in such a way have the visual representation of separate lines for the protocols.

As for the notes: Searching for "Midi" brought up only one node and that seemed to support only CCs - I'm all ears if there are more options ;-)

Cheers,

Tom

marcus-universe commented 1 year ago

Is there a way to use the midi clock for actions? đŸ˜…