forked from tidalcycles/Tidal
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdontcrash.hs
46 lines (36 loc) · 1.71 KB
/
dontcrash.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
-- | test cases collected from some "Crash bugs"
{-# language OverloadedStrings #-}
import Control.Concurrent (threadDelay)
import Control.Monad (forM_)
import Sound.Tidal.Context
main = do
tidal <- startTidal (superdirtTarget {oLatency = 0.1, oAddress = "127.0.0.1", oPort = 57120}) (defaultConfig)
let p = streamReplace tidal
d1 = p 1 . (|< orbit 0)
-- This will execute patterns-that-crash-tidal one after another,
-- interspersed with a simple pattern.
-- The test is whether we hear that simple pattern each time,
-- indicating that the Tidal main loop is still usable.
let go ps = forM_ (zip [0::Int ..] ps) $ \ (k,p) -> do
let wait s = threadDelay $ s * 10^6
simple = s "[bd*4, 808cy*8]"
putStrLn $ "--- playing test pattern " ++ show k ++ " -----"
d1 $ p ; wait 2
putStrLn $ "---------------- playing simple pattern"
d1 $ simple ; wait 2
go [ "cr"
-- https://github.com/tidalcycles/Tidal/issues/606#issue-563234396
, gain (unwrap $ fmap (["1", "0."]!!) $ "{0 0@7 0 1@7}%16") # s "harmor" # midichan 11
-- https://github.com/tidalcycles/Tidal/issues/606#issuecomment-598776256
, superimpose (hurry "<0.5 2?") $ sound "bd"
-- https://github.com/tidalcycles/Tidal/issues/477#issue-411754641
, let mkpat name pattern = (name,pattern)
mkfx name fx = (name,fx)
structure = cat [
"kicks@8 [kicks,snares]@7 kicks:backrush"
, "[kicks@3 [kicks@3 kicks(3,8,1):r]]@4 [kicks]@4 [kicks]@7 kicks:r"
]
pats = [ mkpat "kicks" $ sometimes ghost $ s "bd(<4 5 3 6>,16,<0 1 0 3>)" ]
fx = [ mkfx "r" (# speed "-1") ]
in ur 16 structure pats fx
]