tidal 0.2.6 → 0.2.7
raw patch · 2 files changed
+23/−14 lines, 2 files
Files
- Sound/Tidal/Parse.hs +22/−13
- tidal.cabal +1/−1
Sound/Tidal/Parse.hs view
@@ -83,33 +83,42 @@ (return $ p s) parseRhythm :: Parser (Pattern a) -> String -> (Pattern a)-parseRhythm f input = either (const silence) id $ parse (pRhythm f') "" input+parseRhythm f input = either (const silence) id $ parse (pSequence f') "" input where f' = f <|> do symbol "~" <?> "rest" return silence -pRhythm :: Parser (Pattern a) -> GenParser Char () (Pattern a)-pRhythm f = do spaces- pSequence f-+pSequenceN :: Parser (Pattern a) -> GenParser Char () (Int, Pattern a)+pSequenceN f = do spaces+ d <- pDensity+ ps <- many $ pPart f+ return $ (length ps, density d $ cat ps)+ pSequence :: Parser (Pattern a) -> GenParser Char () (Pattern a)-pSequence f = do d <- pDensity- ps <- many $ pPart f- return $ density d $ cat ps+pSequence f = do (_, p) <- pSequenceN f+ return p pSingle :: Parser (Pattern a) -> Parser (Pattern a) pSingle f = do part <- f pMult part pPart :: Parser (Pattern a) -> Parser (Pattern a)-pPart f = do part <- parens (pSequence f) <|> pSingle f <|> pPoly f+pPart f = do part <- parens (pSequence f) <|> pSingle f <|> pPolyIn f <|> pPolyOut f spaces return part -pPoly :: Parser (Pattern a) -> Parser (Pattern a)-pPoly f = do ps <- brackets (pRhythm f `sepBy` symbol ",")- spaces- pMult $ mconcat ps+pPolyIn :: Parser (Pattern a) -> Parser (Pattern a)+pPolyIn f = do ps <- brackets (pSequence f `sepBy` symbol ",")+ spaces+ pMult $ mconcat ps++pPolyOut :: Parser (Pattern a) -> Parser (Pattern a)+pPolyOut f = do ps <- braces (pSequenceN f `sepBy` symbol ",")+ spaces+ pMult $ mconcat $ scale ps+ where scale [] = []+ scale ((_,p):[]) = [p]+ scale (ps@((n,_):_)) = map (\(n',p) -> density (fromIntegral n/ fromIntegral n') p) ps pString :: Parser (String) pString = many1 (letter <|> oneOf "0123456789" <|> char '/') <?> "string"
tidal.cabal view
@@ -1,5 +1,5 @@ name: tidal-version: 0.2.6+version: 0.2.7 synopsis: Pattern language for improvised music -- description: homepage: http://yaxu.org/tidal/