Sending MIDI / Creating Custom CC Mappings

I want to use Tidal to sequence some MIDI synths. I know that this is probably fast-forwarding quite a bit, but I'm trying to learn and wrap my head around the best way to do it. I've watched this video, but I noticed that it's from 2017 and seems to reference Tidal-MIDI. Does this same process apply to Dirt-MIDI?


PS: I know that I don't have to make a package like this to get CC's working, but I will want to keep reusing the same few synths so not having to do that seems useful. But again, I have no idea if things have evolved since then.

Hey !
A couple of links. First, an update on that very topic by Kindohm, on Tidal blog : SuperDirt MIDI – TidalCycles blog

And a Toplap topic I've created to discuss that :

Let me know if I can help any further. Not that I'm an authority here, but I'm investigating CCs for my own tunes as well.

Cheers !


@ben as you say this video is a few years old, and the tidal-midi module that Mike talks about in it no longer works.

SuperDirt-midi is the good stuff and Mike's blog post that @nilhartman points at is pretty much current.

The difference is that things are a bit more flexible. At the time of this blog post, you had to specify e.g. notes and cc messages separately, which is why Mike puts them in different patterns. Now you can do things like d1 $ n "c e f g" # sound "midi" # ccv "0 1 2 3" # ccn 30 and it'll work fine.


Thanks @yaxu and @nilhartman !
That clears some things up, and SuperDirt-MIDI does indeed seem way cleaner and easier. I have a few remaining questions though:

  1. The blog post and video by Mike explains how to get going with midi note and cc's (which is great) but it doesn't duplicate the functionality of the package he made for his Rytm (i.e.: being able to address cc's by name 'globally' and not having to duplicate that code over and over). So how do we go about duplicating the functionality of the package but for another synth while using SuperDirt-MIDI? Do we create those custom functions and place them in our Atom startup file? Or should we follow the format of the Rytm file that's included with Tidal? (this leads me to the next question).

  2. Is the Rytm custom mapping that I found in the Tidal package still up-to-date with SuperDirt-midi? I assume so, but just checking... If it is that leads me back to question number 1.

Thank you again!

No there aren't custom mapping files for superdirt-midi.

I guess you could do something like this as an alias for cc number 30:

let someeffect value = ccn 30 # ccv value 

then you could do d1 $ n "0 2 5 7" # sound "midi" # someeffect "30 20"


Okay thank you.

And therefore are the files in "tidal-midi/Sound/Tidal/MIDI" like the Rytm one below also depreciated and no longer used?

Yes anything involving Sound.Tidal.MIDI won't work with recent versions of Tidal.

Okay got it. Thank you.

Sorry, one more question @yaxu.
I'm guessing no, but can Tidal send NRPN midi messages?

Yes, you should be able to do e.g. d1 $ nrpn "10:200" # sound "midi", or separately as d1 $ nrpnn "10" # nrpnv "200" # s "midi". I got it working with my novation drumstation and haven't tested it beyond that so let me know how it goes!


Oh amazing! Your response was so quick I couldn't edit my original question in time, ha...
Can it also do MSB and LSB CC? This is less important now that I know that NRPN can work, but...

Hmm I'm not familiar with that so probably not..

K. No worries thanks.
NRPN will cover my needs anyhow cheers.

i have a doubt about SuperDirt MIDI

i have a drum machine on channel 10, and i am able to play the kick (note 36) with using this command:

d1 $ n "[-24]*4" # sound "midi" # midichan 9

i used -24, since 0 in this notation is middle C 60, but i rather use 36, i tried the following commands but none of them worked, any idea about how to use the MIDI range between 0-127 for notes, instead of the middle-C centric one?

d1 $ midinote "36" # sound "midi" # midichan 9

d1 $ note "36" # sound "midi" # midichan 9

thank you! :slight_smile:

I know that you can also use octave and note name. I found this in the MIDI Tutorial:

You can also use the note-name and octave notation:
d1 $ n "c4 d4 e5 g3" # s "midi"

1 Like

thank yo @ben that works but i still wish i was able to specify note numbers and velocities in a consistent way, from 0-127, maybe it is still not implemented :confused:

1 Like

I’ve been confused as to why MIDI velocities are represented as floats instead of integers myself. My only guess is that maybe it has to do with the precision of modulators like LFO’s, but I’d love to hear the answer as well.

1 Like

For me these are the same:

d1 $ n "-24" # s "midi"
d1 $ midinote "36" # s "midi"

If that doesn't work for you, please the output of this command (which shows the versions you're working with): Quarks.installed


Yes midi velocity needs cleaning up. # gain maps to velocity in a nonlinear way, which doesn't make too much sense (see issue here:

amp maps 0 .. 1 to 0 .. 127, e.g. once $ sound "midi" # n 0 # amp 0.5 would be velocity of 63.

To make a function midiamp with a range of 0 .. 127 you could run midiamp = amp . (/127)


So amp is linear then ? It'll make my life much easier then :smiley: