-- \| 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://codeberg.org/uzu/tidal/issues/606#issue-563234396 gain (unwrap $ fmap (["1", "0."] !!) $ "{0 0@7 0 1@7}%16") # s "harmor" # midichan 11, -- The following test is disabled, as it's no longer triggered at 'pattern time', ref https://codeberg.org/uzu/tidal/issues/1221#issuecomment-5791100 -- https://codeberg.org/uzu/tidal/issues/606#issuecomment-598776256 -- superimpose (hurry "<0.5 2?") $ sound "bd", -- https://codeberg.org/uzu/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 ]