Week 6, lesson 4 - controlling Tidal with MIDI

Here's the basics covered with controlling Tidal from MIDI. There's a bit more to cover here in terms of tips and tricks, so I think I'll do another video soon.. In the meantime feel free to ask questions, as it'll help me decide what to cover, thanks!


Thanks @yaxu.

Can you give an example on how to set up a singular controller for input into Tidal, and not all connected controllers? I expected this to be as easy as assigning MIDI outputs but it doesn't seem to be.

Also, can you give an example on how to use a cc number inside of mini-notation while limiting it's incoming range?

This connects my device:


However I can't immediately work out what these numbers correspond too.. :confused:

There's not a way to put ranges on things inside the mininotation. What problem do you have in mind?

Is there somewhere in the docs that outlines how to send note data to Tidal? I know we got this working once upon a time, but it's been quite some time since I tried to get this working and I don't know if the utils necessary survived the rework.

1 Like

Like if you want a controller (that goes from 0-127) to control a pitch in mini-notation that’d you’d like to go from 0-7, for instance.

PS: Limiting the range on the sending side is trivial with OSC, or with a MIDI controller that's easy to configure, but it would be really nice to be able to limit the range of incoming MIDI for mini-notation on the Tidal side as well, in situations where the controllers are hard to re-configure.

Is there a way with an function that lives outside the mini-notation maybe?

Is it possible to use cc values in the same mini notation pattern as other values?
For intstance: d1 $ n " 1 5 ^41 6" # s "bd"

Yes. And it’s very cool.

The only issue I’m running into is limiting the range to only the desired values, otherwise it can be hard to control.

If you want to stop a pattern going over a certain amount you can use e.g. min 0.5 <$> to limit to 0.5. Does that help?

I'm wondering if you can filter a CC stream into another one like this:

setF "maxed" $ min 0.8 <$> "^33"
d1 $ sound "bd" # speed ("^maxed" + 1) 

My initial experiments say no, but I'm not sure why..

1 Like

The superdirt code already scales the 0 - 127 CC values so they go to 0-1. So to go from there to 0 - 7 you'd do e.g. "^33" * 7 or range 0 7 "^33"

I hadn't thought about the automatic range reduction to 0-1 but that makes sense.

But say I wanted the CC value to be one amongst others in mini-notation. So something like:
"0 1 ^33 7"
What would be the best way to limit its range in this case, since the setF function isn't working?

Thanks @yaxu

That's awesome. Not sure which controllers you have access to but some midi controllers have the ability to set the range, the Novation sl series does this if I remember correctly (the one Alex shows in his setup in the video).

I'll try to look into the issue with state, but otherwise, you can't do things like that in the mini-notation - it's designed for sequencing really. You can do stuff like fastcat [0, 1, min 0.5 <$> cF_ "33", 7] outside of the mininotation though


Is there any way to record the movement of the knobs/keys ?
It's pretty awesome getting them in, but it would be even cooler if we could store sweeps/etc. into a value, either in tidal or in supercollider so that we could reference it during, or potentially save the motion for a composed piece ?

I've been investigating that today, so this is a very relevant topic!

1 Like

Thanks @yaxu.

For now I'll limit the values on the incoming side (and experiment with fastcat), but let us know if you ever find a way to alter them on the Tidal side. Cheers.

Actually now that I think about it I'm confused by this @yaxu:
The superdirt code already scales the 0 - 127 CC values so they go to 0-1

If the values get automatically scaled to 0-1 then limiting the MIDI range that's incoming into Tidal wouldn't help much. With no way to scale the incoming MIDI from within Tidal then MIDI control is only currently useful for control values (or maybe in binary struct type patterns). Is that correct?

It's normalised to 0..1, but you can change that in tidal with range.

To correct myself, it isn't really superdirt handling midi input.. The code you paste in to enable midi input is a standalone piece of supercollider code that takes MIDI as input and sends the messages to Tidal as OSC network messages. If you want supercollider to send 0..127, then in you can edit that code, changing instances of val/127 to val.

1 Like

Not currently, it'd be nice to explore though!