packages feed

CCA-0.1: test/Sample.as

module Sample where

import Control.CCA
import Prelude hiding (init, exp)
import Language.Haskell.TH

sr = 44100 :: Int
dt = 1 / (fromIntegral sr)

exp :: ArrowInit a => a () Double
exp = proc () -> do
  rec let e = 1 + i
      i <- integral -< e
  returnA -< e

integral :: ArrowInit a => a Double Double
integral = proc x -> do
  rec let i' = i + x * dt
      i <- init 0 -< i'
  returnA -< i

sineA :: ArrowInit a => Double -> a () Double
sineA freq = proc _ -> do
              rec 
               d2o <- init (sin omh) -< r
               d1o <- init 0 -< d2o
               let r = 2 * cos(omh) * d2o - d1o
              returnA -< r
  where 
    omh = 2*pi/(fromIntegral sr)*freq

sine :: ArrowInit a => Double -> a () Double
sine freq = proc _ -> do
  rec x <- init i -< r
      y <- init 0 -< x 
      let r = c * x - y
  returnA -< r
  where
    omh = 2 * pi / (fromIntegral sr) * freq
    i = sin omh
    c = 2 * cos omh