module Sound.SC3.UGen.Utilities where import Sound.SC3.UGen.Enum import Sound.SC3.UGen.UGen (UGen(..)) import Sound.SC3.UGen.UGen.Construct (mkOsc) import Sound.SC3.UGen.Rate (Rate(IR)) fromLoop :: Loop -> UGen fromLoop NoLoop = Constant 0 fromLoop Loop = Constant 1 fromLoop (WithLoop u) = u fromInterpolation :: Interpolation -> UGen fromInterpolation NoInterpolation = Constant 1 fromInterpolation LinearInterpolation = Constant 2 fromInterpolation CubicInterpolation = Constant 4 fromInterpolation (Interpolation u) = u fromDoneAction :: DoneAction -> UGen fromDoneAction DoNothing = Constant 0 fromDoneAction PauseSynth = Constant 1 fromDoneAction RemoveSynth = Constant 2 fromDoneAction (DoneAction u) = u fromWarp :: Warp -> UGen fromWarp Linear = Constant 0 fromWarp Exponential = Constant 1 fromWarp (Warp u) = u env_curve :: EnvCurve -> UGen env_curve EnvStep = Constant 0.0 env_curve EnvLin = Constant 1.0 env_curve EnvExp = Constant 2.0 env_curve EnvSin = Constant 3.0 env_curve EnvCos = Constant 4.0 env_curve (EnvNum _) = Constant 5.0 env_curve EnvSqr = Constant 6.0 env_curve EnvCub = Constant 7.0 env_value :: EnvCurve -> UGen env_value (EnvNum u) = u env_value _ = Constant 0.0 d_dx :: (Num a) => [a] -> [a] d_dx [] = [] d_dx [_] = [] d_dx [x,y] = [y - x] d_dx (x:y:r) = y - x : d_dx (y:r) dbl :: a -> [a] dbl x = [x,x] mkInfoUGen :: String -> UGen mkInfoUGen name = mkOsc IR name [] 1