import Sound.Tidal.ParVagues.Control -- Gauche si+mi/sol+re/la+fa/si+sol -- Droite whatever autour ;) resetCycles do setcps (60/60/4) let mel = "<e3 [g3 <a3 f3>] e3 b3>" let prog = "<e3 [g3'maj7'2 f3'min'2] e3 <b3'min7'2 b3'maj7'2>>" let modIndex = pF "modIndex" let gDJF = (midiDJF "^49" 0 10000 0 10000) let gFreqL = (# lpq (range 0 0.25 "^29")) let gFreqH = (# hpq (range 0 0.25 "^30")) let gFreqs = (gFreqH . gFreqL) let g = (gDJF . gFreqs) d1 $ g -- BEAT $ fast 2 $ midiOn "^41" (<| "k k k <k [<~ k> k]>") $ midiOff "^41" (<| "k . ~ k ~ ~ ") $ "[jazz,cpu2,hh27:6]" # release "<0.7!3 1>" # midiG' "^78" 0 1.8 d3 $ g -- Snare contretemps rushé $ whenmod 4 3 (ply "2 4") $ midiOn "^43" (fast 2) $ fast "<1!4 2!10 4 [4 8]>" $ "~ snare" # room 0.2 # dry 1 # speed (range 0.5 1.5 "^51") # n "[11,25]" # midiG' "^79" 0 1.5 d2 $ g -- BREAK $ degradeBy (range 0.1 0.99 "0 ^32!15") $ whenmod 32 16 (# djf (slow 32 (cosine + 0.5))) $ slice 8 ( fast "<8 [8 16] 8 [16 <8 4>]>" -- "<0!4 [0 1]!4 <0 1 2 3 4 5 6 7>!4>" "<0 2 0 7 5 5 0 7>" ) $ loopAt 2 $ "break:3" # speed (range 0.5 1.5 "^52") # midiG' "^80" 0 2 # cut 2 d6 $ g -- Nappes Rhodes $ note ( prog + "0 12" ) # "FMRhodes1" # pan 0.2 # modIndex (range 0 100 "^54") # midiG' "^82" 0 1.8 d7 $ g -- Hello PWM! $ (|* gain "<1!15 0.8>") $ midiOn "^57" (chop "<[8 <4 16>]!15 1>") $ midiOn "^89" (superimpose $ segment 16) $ note (mel - 12) # "superpwm" # semitone "<7!3 5>" -- 2nd Oscillator quinte/quarte # accelerate "<0!7 <6 12>>" # rate "<1!5 2 4 <1 4>>" # resonance (slow 32 $ range 0.2 0.6 sine) # crush (range 10 3 "^53") # midiG' "^81" 0 2 -- TODO MidiCloud 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