module Sound.Tidal.SuperCollider where
import Sound.Tidal.Stream
import Sound.Tidal.Pattern
import Sound.Tidal.Parse
import Sound.OSC.FD
import Sound.Tidal.OscStream
supercollider :: [Param] -> Double -> Shape
supercollider ps l = Shape {
  params = ps,
  cpsStamp = False,
  latency = l
  }
scSlang :: String -> OscSlang
scSlang n = OscSlang {
  
  path = "/s_new",
  preamble = [string n, int32 (1), int32 1, int32 1],
  namedParams = True,
  timestamp = BundleStamp
  }
scBackend :: String -> IO (Backend a)
scBackend n = do
  s <- makeConnection "127.0.0.1" 57110 (scSlang n)
  return $ Backend s (\_ _ _ -> return ())
scStream :: String -> [Param] -> Double -> IO (ParamPattern -> IO (), Shape)
scStream n ps l = do let shape = (supercollider ps l)
                     backend <- scBackend n
                     sc <- stream backend shape
                     return (sc, shape)