packages feed

csound-expression-dynamic 0.0.0 → 0.0.1

raw patch · 6 files changed

+39/−16 lines, 6 files

Files

csound-expression-dynamic.cabal view
@@ -1,5 +1,5 @@ Name:          csound-expression-dynamic-Version:       0.0.0+Version:       0.0.1 Cabal-Version: >= 1.6 License:       BSD3 License-file:  LICENSE
src/Csound/Dynamic/Build.hs view
@@ -5,9 +5,6 @@     toExp, onExp,       -- * Rates-    -- | Updating rates-    setRate, -       -- * Queries     getRates, isMultiOutSignature, getPrimUnsafe, @@ -136,10 +133,6 @@                        select cellId rate expr = withRate rate $ Select rate cellId (PrimOr $ Right expr) --- rate coversion--setRate :: Rate -> E -> E-setRate r a = Fix $ (\x -> x { ratedExpRate = Just r }) $ unFix a  getRates :: MainExp a -> [Rate] getRates (Tfm info _) = case infoSignature info of
src/Csound/Dynamic/Render/Instr.hs view
@@ -132,13 +132,13 @@ rateExp :: Rate -> Exp Int -> Exp RatedVar  rateExp curRate expr = case expr of     ExpPrim (P n) | curRate == Sr -> ExpPrim (PString n)-    Tfm i xs -> Tfm i $ mergeWithPrimOrBy (flip ratedVar) xs (ratesFromSignature curRate (infoSignature i))+    Tfm i xs -> Tfm i $ mergeWithPrimOr (ratesFromSignature curRate (infoSignature i)) xs     Select rate pid a -> Select rate pid (fmap (ratedVar Xr) a)         If p t e -> If (rec2 condRate p) (rec1 curRate t) (rec1 curRate e)      ExpNum _ -> rec2 curRate expr         ReadVar v -> ReadVar v     WriteVar v a -> WriteVar v $ rec1 (varRate v) a-    InitVar v a -> InitVar v $ rec1 (varRate v) a+    InitVar v a -> InitVar v $ rec1 Ir a -- rec1 (varRate v) a     ExpPrim p -> ExpPrim p     IfBegin _ -> rec2 condRate expr     ElseIfBegin _ -> rec2 condRate expr@@ -160,10 +160,15 @@           rec1 r = fmap (ratedVar r)            msg txt = "Csound.Dynamic.Render.Instr.rateExp: " ++ txt -           --mergeWithPrimOrBy :: (a -> b -> c) -> [PrimOr a] -> [b] -> [PrimOr c]-mergeWithPrimOrBy cons = zipWith (\primOr b -> fmap (flip cons b) primOr)+mergeWithPrimOr :: [Rate] -> [PrimOr Int] -> [PrimOr (Var Rate)]+mergeWithPrimOr = zipWith phi+    where +        phi r (PrimOr x) = PrimOr $ case x of+            Left  p -> Left $ updateVarTargetRate r p +            Right n -> Right $ ratedVar r n+        updateVarTargetRate r p = case p of+            PrimVar _ v -> PrimVar r v+            _           -> p  
src/Csound/Dynamic/Render/Pretty.hs view
@@ -58,6 +58,22 @@     PrimInt n -> int n     PrimDouble d -> double d     PrimString s -> dquotes $ text s+    PrimVar targetRate v -> ppConverter targetRate (varRate v) $ ppVar v+    where+        ppConverter dst src t +            | dst == src = t            +            | dst == Ar && src == Kr = a(t) +            | dst == Ar && src == Ir = a(k(t))            +            | dst == Kr  = k(t)+            | dst == Ir && src == Kr = i(t)+            | dst == Ir && src == Ar = i(k(t))+            | otherwise = t+            where +                tfm ch v = hcat [char ch, parens v]    +                a = tfm 'a'+                k = tfm 'k'+                i = tfm 'i'+      ppGen :: Int -> Gen -> Doc ppGen tabId ft = char 'f' 
src/Csound/Dynamic/Types/Dep.hs view
@@ -111,7 +111,7 @@ readOnlyVar v = noRate $ ReadVar v  initVar :: Monad m => Var -> E -> DepT m ()-initVar v x = depT_ $ noRate $ InitVar v $ toPrimOr x+initVar v x = depT_ $ setRate Ir $ noRate $ InitVar v $ toPrimOr x  appendVarBy :: Monad m => (E -> E -> E) -> Var -> E -> DepT m () appendVarBy op v x = writeVar v . op x =<< readVar v
src/Csound/Dynamic/Types/Exp.hs view
@@ -2,7 +2,7 @@ {-# Language DeriveFunctor, DeriveFoldable, DeriveTraversable #-} module Csound.Dynamic.Types.Exp(     E, RatedExp(..), isEmptyExp, RatedVar, ratedVar, ratedVarRate, ratedVarId, -    ratedExp, noRate, withRate,+    ratedExp, noRate, withRate, setRate,     Exp, toPrimOr, PrimOr(..), MainExp(..), Name,      InstrId(..), intInstrId, ratioInstrId, stringInstrId,     VarType(..), Var(..), Info(..), OpcFixity(..), Rate(..), @@ -86,7 +86,11 @@ withRate :: Rate -> Exp E -> E withRate r = ratedExp (Just r) +-- rate coversion +setRate :: Rate -> E -> E+setRate r a = Fix $ (\x -> x { ratedExpRate = Just r }) $ unFix a+ -- | It's a primitive value or something else. It's used for inlining -- of the constants (primitive values). newtype PrimOr a = PrimOr { unPrimOr :: Either Prim a }@@ -98,7 +102,9 @@ toPrimOr a = PrimOr $ case ratedExpExp $ unFix a of     ExpPrim (PString _) -> Right a     ExpPrim p -> Left p+    ReadVar v | noDeps -> Left (PrimVar (varRate v) v)     _         -> Right a+    where noDeps = isNothing $ ratedExpDepends $ unFix a  -- Expressions with inlining. type Exp a = MainExp (PrimOr a)@@ -208,6 +214,9 @@     | PrimDouble Double      | PrimString String      | PrimInstrId InstrId+    | PrimVar +        { primVarTargetRate :: Rate +        , primVar           :: Var }     deriving (Show, Eq, Ord)  -- Gen routine.