Week 6, lesson 4 - controlling Tidal with MIDI

So sorry to keep talking in circles, but if I want to use MIDI input within mini-notation then my understanding from your previous posts is that I can not change the range in Tidal.

There's no mininotation for that, no.

Okay. I'll continue to use OSC for this for now thanks.

I'm a bit confused now - Tidal only accepts OSC. The SC code converts between MIDI and OSC.

1 Like

You mean you're confused by what I said or by what SC/Tidal is doing? hahaha... If it was from me then I suggest we keep this going as long as possible ;p

If it was, then what I meant was that now that stuff like this works in mini-notation
d1 $ s "808 808bd ^miniName" # note "0 0 ^miniPitch1"
I can limit what I'm sending into Tidal's using OSC and MaxMSP easily (as I know it well), but not using MIDI under the one package of Tidal/SC as it is because the values get converted to 0-1 and there's no way to rescale them while still using mini-notation.

I feel like we might be a part of this thread now though, and I'm happy to drop this soon as well lol.

yes, i'd be very interested in this, too! is there a way to have a keyboard controller alter the contents of a mininotation sequence? :slight_smile:

A post was split to a new topic: Using cP

It is, and I made a video explaining how to to so about a year ago! I've fast-forwarded to the explanation of how to use Tidal's cP function along /w some SuperCollider code to do this, and there's a little demo at the end.

(wow playing around with this now and I forgot how much fun this is!)


Hello Tidal users,

according to Alex above tutorial I tried to control Tidal with midi. But it doesnt work. My setup is TC and Supercollider running on Macos 10.15, for the audio routing I now use Blackhole with the multichannel configuration for routing to Ableton Live. My hardware controller is a Novation LaunchControl XL. It automattically connects to Live and it works with Live. So I disconnected it manually from Live. Then I got the cc numbers from the Novation website. And I run the controller script. But it doesnt work.

What is my mistake? Do I habe to add some code inside BootTidal.hs? And what is the meaning of


That configuration looks good as far as I can tell. Do you see any useful messages in the supercollider post window when you run that?

One thing you could try is adding/removing 1 from the CC number, in case it's counting from 0 rather than 1.

Another is to find a midisnoop program to doublecheck the midi looks OK, but as it finds its way to ableton live, I don't see why it should make it to supercollider.

Unfortunately I have no real experience with MacOS midi, hopefully a fellow mac traveller will pass by with some better advice..

Thank you, Alex. But I already tried out other CC numbers. That doesn`t seem to be the reason.

I went with the Pd alternative to send OSC from the TidalCycles userbase and it was very straightforward to use.

One issue tho, is that there is some latency (I'm guessing about 700-900 ms) from the moment the MIDI is triggered to when Tidal catches up.

This is not a MIDI-Controller to Pd issue, because there is no latency from the [ctlin] object to a number box. It is not related to the [netsend] object either, as I'm able to receive the values in Max from Pd with high time precision.

So that leads me to the possibility of changing the default delay value on SC that handles OSC, how can this be achieved?

The latency is probably mostly on the tidal side. By default it calculates events in 50ms (1/20 seconds) frames, and adds an additional 100ms latency on top. You can configure these in your BootTidal.hs file as cFrameTimespan and oLatency respectively.

1 Like

Thanks! Adjusting these does improve the response from Tidal to the MIDI-Controller. :smile:

Hey @yaxu (or anyone else to be honest.) I was just wondering how to just send midi clock to tidal from external gear? I don't want to control tidal externally other than CLOCK Thanks!! :slight_smile:

Hi @leomallock2, it's more or less the same as sending any other midi, you send a clock message 48 times per measure or cycle d1 $ midicmd "midiClock*48" # s "midi" There's some information here: https://tidalcycles.org/index.php/MIDI_Clock

Thanks Alex!

1 Like

I'm looking for a way to have MIDI CC inputs into Tidal only respond to cc's from certain channels. It seems like I need to modify the SC OSC/MIDI code to have it send over the channel number to Tidal but I'm having a hard time figuring it out.

@yaxu suggested this modification to SC on discord:

osc.sendMsg("/ctrl", chan.asString + "-" + num.asString, val/127); 

then access it like cF 1 "0-7" from within Tidal.

I'm not able to get Tidal patches to react to the CC's however.
Let me know if anyone has come across this or has any ideas thanks.

I'm also trying to control fast with a midi controller. Any idea why this isn't working?

fast (floor <$> (range 2 1 (cF 1 "20")))

The first parameter to fast is of type Rational with alias Time, so you'll need to use cR or its alias cT instead of cF. You'll also need to remove the 'floor <$>`, which converts it to an integer.

1 Like