p "midiclock" $ midicmd "midiClock*48" # s "midi" -- Your MIDI device should then adjust its BPM to Tidal's cps. -- Then it's worth sending a stop message like this: once $ midicmd "stop" # s "midi" -- and then finally a start message to start the MIDI clock at the right time. The following sends a start message every fourth cycle: p "midictl" $ midicmd "start/4" # s "midi" -- Once everything's started and in sync, it's probably best to stop sending the start messages to avoid glitching: p "midictl" $ silence -- However now if you do hush, the midiclock will stop as well as all the other patterns. To avoid this, you can overwrite the hush function with a version that silences particular patterns: let hush = mapM_ ($ silence) [d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16] -- You will probably find that the downbeats for SuperDirt and your MIDI devices don't align. As a starting point, set MIDI latency in supercollider to 0: ~midiOut.latency = 0;