I am following the example OSC | Tidal Cycles to send OSC messages to tidal to control playback.
I modified the example to react on CC messages which should not cause any problem I guess.
playbackControl = MIDIFunc.cc({ |val, num, chan, src|
var patID;
if (mutes.at(num) !== nil, {
patID = mutes.at(num);
if (val == 0, {
osc.sendMsg("/mute", patID);
}, {
osc.sendMsg("/unmute", patID);
});
});
});
I am using Protokol | hexler.net to inspect the OSC messages that are out from tidal and forwarding them to dirt. When mute
works, then tidal just does not send any more /dirt/play
messages such as (receiving from tidal on 6060
and forwarding to the dirt at 57120
)
10:01:09.602 | RECEIVE | ENDPOINT([::ffff:127.0.0.1]:6060) ADDRESS(/dirt/play) STRING(_id_) STRING(1) STRING(cps) FLOAT(0.5625) STRING(cycle) FLOAT(149) STRING(delta) FLOAT(1.777776) STRING(n) FLOAT(0) STRING(orbit) INT32(0) STRING(s) STRING(superpiano)
10:01:09.606 | SEND | ENDPOINT(127.0.0.1:57120) ADDRESS(/dirt/play) STRING(_id_) STRING(1) STRING(cps) FLOAT(0.5625) STRING(cycle) FLOAT(149) STRING(delta) FLOAT(1.777776) STRING(n) FLOAT(0) STRING(orbit) INT32(0) STRING(s) STRING(superpiano)
However, in regular scenarios, instead of muting, a /dirt/handshake
happens, and the respective pattern keeps playing. The handshake looks like this:
10:16:25.181 | RECEIVE | ENDPOINT([::ffff:127.0.0.1]:6060) ADDRESS(/dirt/handshake)
10:16:25.213 | SEND | ENDPOINT(127.0.0.1:57120) ADDRESS(/dirt/handshake)
10:16:25.213 | RECEIVE | ENDPOINT([::ffff:127.0.0.1]:57120) ADDRESS(/dirt/handshake/reply) STRING(&serverHostname) STRING(127.0.0.1) STRING(&serverPort) INT32(57110) STRING(&controlBusIndices) INT32(0) INT32(1) INT32(2) INT32(3) INT32(4) INT32(5) INT32(6) INT32(7) INT32(8) INT32(9) INT32(10) INT32(11) INT32(12) INT32(13) INT32(14) INT32(15) INT32(16) INT32(17) INT32(18) INT32(19) INT32(20) INT32(21) INT32(22) INT32(23) INT32(24) INT32(25) INT32(26) INT32(27) INT32(28) INT32(29) INT32(30) INT32(31) INT32(32) INT32(33) INT32(34) INT32(35) INT32(36) INT32(37) INT32(38) INT32(39) INT32(40) INT32(41) INT32(42) INT32(43) INT32(44) INT32(45) INT32(46) INT32(47) INT32(48) INT32(49) INT32(50) INT32(51) INT32(52) INT32(53) INT32(54) INT32(55) INT32(56) INT32(57) INT32(58) INT32(59) INT32(60) INT32(61) INT32(62) INT32(63) INT32(64) INT32(65) INT32(66) INT32(67) INT32(68) INT32(69) INT32(70) INT32(71) INT32(72) INT32(73) INT32(74) INT32(75) INT32(76) INT32(77) INT32(78) INT32(79) INT32(80) INT32(81) INT32(82) INT32(83) INT32(84) INT32(85) INT32(86) INT32(87) INT32(88) INT32(89) INT32(90) INT32(91) INT32(92) INT32(93) INT32(94) INT32(95) INT32(96) INT32(97) INT32(98) INT32(99) INT32(100) INT32(101) INT32(102) INT32(103) INT32(104) INT32(105) INT32(106) INT32(107) INT32(108) INT32(109) INT32(110) INT32(111) INT32(112) INT32(113) INT32(114) INT32(115) INT32(116) INT32(117) INT32(118) INT32(119) INT32(120) INT32(121) INT32(122) INT32(123) INT32(124) INT32(125) INT32(126) INT32(127)
10:16:25.230 | SEND | ENDPOINT(127.0.0.1:57120) ADDRESS(/dirt/handshake/reply) STRING(&serverHostname) STRING(127.0.0.1) STRING(&serverPort) INT32(57110) STRING(&controlBusIndices) INT32(0) INT32(1) INT32(2) INT32(3) INT32(4) INT32(5) INT32(6) INT32(7) INT32(8) INT32(9) INT32(10) INT32(11) INT32(12) INT32(13) INT32(14) INT32(15) INT32(16) INT32(17) INT32(18) INT32(19) INT32(20) INT32(21) INT32(22) INT32(23) INT32(24) INT32(25) INT32(26) INT32(27) INT32(28) INT32(29) INT32(30) INT32(31) INT32(32) INT32(33) INT32(34) INT32(35) INT32(36) INT32(37) INT32(38) INT32(39) INT32(40) INT32(41) INT32(42) INT32(43) INT32(44) INT32(45) INT32(46) INT32(47) INT32(48) INT32(49) INT32(50) INT32(51) INT32(52) INT32(53) INT32(54) INT32(55) INT32(56) INT32(57) INT32(58) INT32(59) INT32(60) INT32(61) INT32(62) INT32(63) INT32(64) INT32(65) INT32(66) INT32(67) INT32(68) INT32(69) INT32(70) INT32(71) INT32(72) INT32(73) INT32(74) INT32(75) INT32(76) INT32(77) INT32(78) INT32(79) INT32(80) INT32(81) INT32(82) INT32(83) INT32(84) INT32(85) INT32(86) INT32(87) INT32(88) INT32(89) INT32(90) INT32(91) INT32(92) INT32(93) INT32(94) INT32(95) INT32(96) INT32(97) INT32(98) INT32(99) INT32(100) INT32(101) INT32(102) INT32(103) INT32(104) INT32(105) INT32(106) INT32(107) INT32(108) INT32(109) INT32(110) INT32(111) INT32(112) INT32(113) INT32(114) INT32(115) INT32(116) INT32(117) INT32(118) INT32(119) INT32(120) INT32(121) INT32(122) INT32(123) INT32(124) INT32(125) INT32(126) INT32(127)
So it looks like that instead of just muting the pattern, the effect of the mute
command is to initiate a handshake.
What is the cause for the handshake?
When I send another mute right after a handshake, then the mute works. I would like to make the mute
work all the time