MIDI Controllers and OSC Setup

I found this doc page and got input from one of my controllers working, but as far as I understand it this will take input from all connected MIDI controllers. I got tripped up when I tried to guess at how to modify this for only accepting input from a certain controllers.

I thought I might need to do something like the code for MIDI outs in my SuperCollider boot up file:
~midiOut = MIDIOut.newByName("OB-6 Module", "OB-6 Module");

So instead of MIDIIn.connectAll;
Doing: MIDIIn.newByName("KOMPLETE KONTROL S88 MK2", "Port 1");
but I get an error message that 'newByName' not understood

Any tips?
Thanks.

Hiya @ben - I've gotten round this by using different MIDI channels for different controllers - would that not work in your situation?

I started looking at the SuperCollider documentation for this and it recommends not using MIDIIn at all... (love SuperCollider) But you might have some luck with:

MIDIIn.connect(0,MIDIClient.sources[0]) //first number is port number, second is device from sources list

Which I got from this tutorial (thanks Nick Collins!)

If you are familiar with PD you can probably achieve a similar result using the Alternative: pure data instructions on the Tidal website

1 Like

Thanks @heavy.lifting.
I'm very comfortable with Max/MSP so I could try to do the MIDI to OSC conversion in there. I'll download PD and see if I can duplicate that example patch from the docs.

It seems odd to me though that the MIDI input assignment in SuperCollider isn't as easy as the output assignment, which is very straightforward... Or maybe it is and I just need to assign a port number? Ahhh... I'll dig into this more today and report back.

I started pursuing the MaxMSP MIDI to OSC direction. I tried following the docs exactly but Tidal isn't responding.


This patch is sending /ctrl sf hello 0.4 over 127.0.0.1 6010.

In Tidal I have this running but there's no change to the pattern when I send different messages:
d1 $ sound "bd" # speed (cF 1 "hello")

Anything poke out to anyone?

This also goes back to my other question about if we can configure Tidal to post it's output to the console to debug situations like this: Print Values to Console?

Thanks all.

PS: I got this error message below.

Listening for controls on 127.0.0.1:6010
Control listen failed. Perhaps there's already another tidal instance listening on that port?

I tried it on a different port, but Tidal is now giving me error messages that my OSC is not configured correctly.
Unhandled OSC: Message {messageAddress = "/hello", messageDatum = [Float {d_float = 0.54761904}]}

My desktop computer is still having the port issue but I got it working on my laptop.

There was an issue with the message I was sending and the documentation is a bit confusing here I think. It says to send /ctrl sf hello 0.4 but what I had to do was take out the "sf" and make sure that what I was sending WAS a string "hello" and a float "0.4". So the "sf" was redundant.

For those who enjoy working with Javascript and Node.js, you can use my npm package for TidalCycles to listen to OSC messages from Tidal and sending OSC controller input messages: @vliegwerk/tidal. I've updated the library yesterday to include listening to tempo messages (i.e. cps changes)

4 Likes

Instead of doing MIDIIn.connectAll you can do MIDIIn.connect. For some reason this function seems to only take numbers for the 'inport' and 'device'. More or less by trial and error I managed to connect a single device with MIDIIn.connect(2,2)..

1 Like

Ah nice. I assume that those numbers are the index into the array of MIDI sources but I'll give it a try thanks.