packages feed

tidal 0.4 → 0.4.1

raw patch · 5 files changed

+37/−36 lines, 5 files

Files

Sound/Tidal/Context.hs view
@@ -10,3 +10,4 @@ import Sound.Tidal.Dirt as C import Sound.Tidal.Strategies as C import Sound.Tidal.Tempo as C+import Sound.Tidal.Time as C
Sound/Tidal/Stream.hs view
@@ -39,7 +39,7 @@  type OscPattern = Pattern OscMap -latency = 0.06+latency = 0.04  defaultDatum :: Param -> Maybe Datum defaultDatum (S _ (Just x)) = Just $ string x@@ -69,17 +69,12 @@ isSubset :: (Eq a) => [a] -> [a] -> Bool isSubset xs ys = all (\x -> elem x ys) xs -tpb = 1-bpb = 2- toMessage :: UDP -> OscShape -> Tempo -> Int -> (Double, OscMap) -> Maybe (IO ())-toMessage s shape change ticks (o, m) =+toMessage s shape change cycle (o, m) =   do m' <- applyShape' shape m-     let beat = fromIntegral ticks / fromIntegral tpb-         logicalNow = (logicalTime change beat)-         beat' = (fromIntegral ticks + 1) / fromIntegral tpb-         logicalPeriod = (logicalTime change (beat + 1)) - logicalNow-         --logicalOnset = ntpr_to_ut $ logicalNow + (logicalPeriod * o) + latency+     let cycleD = (fromIntegral cycle) :: Double+         logicalNow = (logicalTime change cycleD)+         logicalPeriod = (logicalTime change (cycleD + 1)) - logicalNow          logicalOnset = logicalNow + (logicalPeriod * o) + latency          sec = floor logicalOnset          usec = floor $ 1000000 * (logicalOnset - (fromIntegral sec))@@ -112,7 +107,7 @@ stream :: String -> Int -> OscShape -> IO (OscPattern -> IO ()) stream address port shape    = do patternM <- start address port shape-       return $ \p -> do swapMVar patternM (slow bpb p)+       return $ \p -> do swapMVar patternM p                          return ()  streamcallback :: (OscPattern -> IO ()) -> String -> Int -> OscShape -> IO (OscPattern -> IO ())@@ -123,31 +118,16 @@        return f'  onTick :: UDP -> OscShape -> MVar (OscPattern) -> Tempo -> Int -> IO ()-onTick s shape patternM change beats+onTick s shape patternM change cycles   = do p <- readMVar patternM-       let --tpb' = 2 :: Integer-           tpb' = 1-           beats' = (fromIntegral beats) :: Integer-           a = beats' % tpb'-           b = (beats' + 1) % tpb'+       let cycles' = (fromIntegral cycles) :: Integer+           a = cycles' % 1+           b = (cycles' + 1) % 1            messages = mapMaybe -                      (toMessage s shape change beats) +                      (toMessage s shape change cycles)                        (seqToRelOnsets (a, b) p)-       --putStrLn $ (show a) ++ ", " ++ (show b)-       --putStrLn $ "tick " ++ show ticks ++ " = " ++ show messages        E.catch (sequence_ messages) (\msg -> putStrLn $ "oops " ++ show (msg :: E.SomeException))        return ()--{-ticker :: IO (MVar Rational)-ticker = do mv <- newMVar 0-            --forkIO $ clocked "ticker" "127.0.0.1" "127.0.0.1" tpb (f mv)-            forkIO $ clocked (f mv)-            return mv-  where f mv change ticks = do swapMVar mv ((fromIntegral ticks) / (fromIntegral tpb))-  where f mv ticks = do swapMVar mv (fromIntegral ticks)-                        return ()-        tpb = 32--}  make :: (a -> Datum) -> OscShape -> String -> Pattern a -> OscPattern make toOsc s nm p = fmap (\x -> Map.singleton nParam (defaultV x)) p
Sound/Tidal/Tempo.hs view
@@ -46,7 +46,7 @@  tempoMVar :: IO (MVar (Tempo)) tempoMVar = do now <- getCurrentTime-               mv <- newMVar (Tempo now 0 (126/60))+               mv <- newMVar (Tempo now 0 0.5)                forkIO $ clocked $ f mv                return mv   where f mv change _ = do swapMVar mv change@@ -101,9 +101,17 @@      forkIO $ connectClient False clockip mTempo mBps      return (mTempo, mBps) +bpsUtils :: IO ((Double -> IO (), IO (Rational)))+bpsUtils = do (mTempo, mBps) <- runClient+              let bpsSetter b = putMVar mBps b+                  currentTime = do tempo <- readMVar mTempo+                                   now <- beatNow tempo+                                   return $ toRational now+              return (bpsSetter, currentTime)+ bpsSetter :: IO (Double -> IO ())-bpsSetter = do (_, mBps) <- runClient -               return $ (\b -> putMVar mBps b)+bpsSetter = do (f, _) <- bpsUtils+               return f  clocked :: (Tempo -> Int -> IO ()) -> IO () clocked callback = 
tidal.cabal view
@@ -1,5 +1,5 @@ name:                tidal-version:             0.4+version:             0.4.1 synopsis:            Pattern language for improvised music -- description:          homepage:            http://yaxu.org/tidal/
tidal.el view
@@ -68,7 +68,8 @@   (tidal-send-string "d7 <- dirtStream")   (tidal-send-string "d8 <- dirtStream")   (tidal-send-string "d9 <- dirtStream")-  (tidal-send-string "bps <- bpsSetter")+  (tidal-send-string "(cps, getNow) <- bpsUtils")+  (tidal-send-string "let bps x = cps (x/2)")   (tidal-send-string "let hush = mapM_ ($ silence) [d1,d2,d3,d4,d5,d6,d7,d8,d9]")   (tidal-send-string "let solo = (>>) hush")   (tidal-send-string ":set prompt \"tidal> \"")@@ -126,9 +127,19 @@     (insert "main = do\n")     (insert (if tidal-literate-p (tidal-unlit s) s)))) ++(defun tidal-get-now ()+  "Store the current cycle position in a variable called 'now'."+  (interactive)+  (tidal-send-string "now' <- getNow")+  (tidal-send-string "let now = nextSam now'")+  (tidal-send-string "let retrig = (now ~>)")+  )+ (defun tidal-run-line ()   "Send the current line to the interpreter."   (interactive)+  (tidal-get-now)   (let* ((s (buffer-substring (line-beginning-position) 			      (line-end-position))) 	 (s* (if tidal-literate-p@@ -142,6 +153,7 @@ (defun tidal-run-multiple-lines ()   "Send the current region to the interpreter as a single line."   (interactive)+  (tidal-get-now)   (save-excursion    (mark-paragraph)    (let* ((s (buffer-substring-no-properties (region-beginning)