Specify incoming Midi Channel for CC/cF values

I am trying to set up a midi controller that uses the same cc values for each channel on separate midi channels. Is there a way to specify which midi channel Tidal listens to for a specific declaration ie. |* gain (range 0 1 $ cF 1 "23" # midichan "4")? I have tried numerous iterations and also midichanrecv and midichanbus to no avail. Am hoping it is something that is achievable in Tidal but have a feeling may require some definitions in SuperCollider...

Any help would be greatly appreciated. Have read through numerous threads here but been unable to figure a solution.

Thanks in advance!

Hi @TimPuk,
the control functions like cF are just OSC message receivers which TidalCycles can listen. That's why you need to map your midi messages to OSC messages before. When you use midichan or midichanbus then you are sending OSC messages which can be interpreted as MIDI messages in i.e. SuperCollider. This has nothing to do with your incoming OSC control message. That's why you are correct, when you say

Am hoping it is something that is achievable in Tidal but have a feeling may require some definitions in SuperCollider...

But for the future it could be worthy to have some kind of a generic control message interface (or mapper) for using MIDI with SuperDirt and TidalCycles (because this feels like a common requirement). :thinking:

@mrreason ! Hope you are well. Was afraid it was something that needed doing in SupereCollider. At least I can stop looking on the Tidal side and focus on trying to figure it out in SC. Will have a hunt. Thanks.

Everything is fine by me, thanks for asking :slight_smile: I hope you are doing well too!

I think I'll start a new topic to discuss this idea with a generic MIDI/OSC mapping. I would be interested to know if there are already approaches and what the community thinks about it.

I know that a lot of the community is into the live-coding side of things but I think there is huge value in being able to interact with Tidal in other ways than the keyboard so am all for a discussion about greater integration of MIDI/OSC/Other... Unfortunately my programming skills are limited so not sure how much I can contribute.

1 Like

SuperCollider decleration for adding midi channel number to OSC kindly provided by @mindofmatthew on the Tidal discord in case anyone else is looking. Thanks!


As far as Tidal is concerned, controller inputs are just a name (in this case "23") and a value. Whatever other system is translating MIDI input is in charge of handling any specific details of MIDI, such as channels. Assuming you're using the default SuperCollider code from the Tidal documentation, you could replace the cc function with something like this that adds the channel to the name of the Tidal control:

cc = MIDIFunc.cc({ |val, num, chan, src|
  osc.sendMsg("/ctrl", num.asString ++ "-" ++ chan.asString, val/127);

Then you'd be able to refer to a value as "(ccNum)-(channel)", like |* gain (range 0 1 (cF 1 "23-2")) (edited)