At the very least, I'd love to see cP
make a comeback so that it's possible to send Pattern
data from SuperDirt. The old implementation looked like this:
_cP :: (Enumerable a, Parseable a) => [Pattern a] -> String -> Pattern a
_cP ds s = innerJoin $ _cX f ds s
where f a (VI v) = [Event a a (parseBP_E $ show v)]
f a (VF v) = [Event a a (parseBP_E $ show v)]
f a (VS v) = [Event a a (parseBP_E v)]
cP :: (Enumerable a, Parseable a) => Pattern a -> String -> Pattern a
cP d = _cP [d]
cP_ :: (Enumerable a, Parseable a) => String -> Pattern a
cP_ = _cP []
I've been looking at the new implementation of cF
and trying to figure out how to port this to modern TidalCycles, but so far no dice.
Once upon a time I used a keyboard, along with the following code, to create arp Pattern
s and chords in TidalCycles based on the keys that were held down. Would be nice to be able to do that again- it seems my TidalCycle MIDI video is a bit out of date.
(
// here's the bit that sends MIDI data from all controllers to TidalCycles via OSC
MIDIClient.init;
MIDIIn.connectAll;
~tidalSocket = NetAddr("127.0.0.1", 6010);
e.notes=[];
MIDIFunc.cc({|val, num, chan, src| ~tidalSocket.sendMsg('/ctrl', num, val/127.0);}, nil, nil, nil);
MIDIFunc.noteOn({|veloc, num, chan, src| e.notes=e.notes.add(num); e.notes=e.notes.sort({|a,b| a>b}).reverse; ~tidalSocket.sendMsg('/ctrl', "notes", format("%", e.notes-60)); e.notes.postln;});
MIDIFunc.noteOff({|veloc, num, chan, src| e.notes=e.notes.takeThese({|x| x==num}); ~tidalSocket.sendMsg('/ctrl', "notes", format("%", e.notes-60)); e.notes.postln;});
);