>
> module HSoM.Examples.Additive where
> import Euterpea
> import FRP.UISF.AuxFunctions
> tab1 = tableSinesN 4096 [1]
> bell1 :: Instr (Mono AudRate)
>
> bell1 dur ap vol [] =
> let f = apToHz ap
> v = fromIntegral vol / 100
> d = fromRational dur
> sfs = map (\p-> constA (f*p) >>> osc tab1 0)
> [4.07, 3.76, 3, 2.74, 2, 1.71, 1.19, 0.92, 0.56]
> in proc () -> do
> aenv <- envExponSeg [0,1,0.001] [0.003,d0.003] -< ()
> a1 <- foldSF (+) 0 sfs -< ()
> outA -< a1*aenv*v/9
> tab1' = tableSines3N 4096 [(4.07,1,0), (3.76,1,0), (3,1,0),
> (2.74,1,0), (2,1,0), (1.71,1,0), (1.19,1,0), (0.92,1,0), (0.56,1,0)]
> bell'1 :: Instr (Mono AudRate)
> bell'1 dur ap vol [] =
> let f = apToHz ap
> v = fromIntegral vol / 100
> d = fromRational dur
> in proc () -> do
> aenv <- envExponSeg [0,1,0.001] [0.003,d0.003] -< ()
> a1 <- osc tab1' 0 -< f
> outA -< a1*aenv*v
> bellTest1 = outFile "bell1.wav" 6 (bell1 6 (absPitch (C,5)) 100 [])
> mySF f d p = proc () -> do
> s <- osc tab1 0 <<< constA (f*p) -< ()
> aenv <- envExponSeg [0,1,0.001] [0.003,d/p0.003] -< ()
> outA -< s*aenv
> bell2 :: Instr (Mono AudRate)
>
> bell2 dur ap vol [] =
> let f = apToHz ap
> v = fromIntegral vol / 100
> d = fromRational dur
> sfs = map (mySF f d)
> [4.07, 3.76, 3, 2.74, 2, 1.71, 1.19, 0.92, 0.56]
> in proc () -> do
> a1 <- foldSF (+) 0 sfs -< ()
> outA -< a1*v/9
> bellTest1' = outFile "bell'1.wav" 6 (bell'1 6 (absPitch (C,5)) 100 [])
> bellTest2 = outFile "bell2.wav" 6 (bell2 6 (absPitch (C,5)) 100 [])
> sineTable :: Table
> sineTable = tableSinesN 4096 [1]
> env1 :: AudSF () Double
> env1 = envExpon 20 10 10000
> good = outFile "good.wav" 10
> (osc sineTable 0 <<< envExpon 20 10 10000 :: AudSF () Double)
> bad = outFile "bad.wav" 10
> (osc sineTable 0 <<< envLine 20 10 10000 :: AudSF () Double)
> sfTest1 :: AudSF (Double,Double) Double -> Instr (Mono AudRate)
>
>
> sfTest1 sf dur ap vol [] =
> let f = apToHz ap
> v = fromIntegral vol / 100
> in proc () -> do
> a1 <- osc sineTable 0 <<< env1 -< ()
> a2 <- sf -< (a1,f)
> outA -< a2*v
> tLow = outFile "low.wav" 10 $
> sfTest1 filterLowPass 10 (absPitch (C,5)) 80 []
> tHi = outFile "hi.wav" 10 $
> sfTest1 filterHighPass 10 (absPitch (C,5)) 80 []
> tLowBW = outFile "lowBW.wav" 10 $
> sfTest1 filterLowPassBW 10 (absPitch (C,5)) 80 []
> tHiBW = outFile "hiBW.wav" 10 $
> sfTest1 filterHighPassBW 10 (absPitch (C,5)) 80 []
> addBandWidth :: AudSF (Double,Double,Double) Double ->
> AudSF (Double,Double) Double
> addBandWidth filter =
> proc (a,f) -> do filter -< (a,f,200)
> tBP = outFile "bp.wav" 10 $
> sfTest1 (addBandWidth (filterBandPass 1)) 10 (absPitch (C,6)) 80 []
> tBS = outFile "bs.wav" 10 $
> sfTest1 (addBandWidth (filterBandStop 1)) 10 (absPitch (C,6)) 80 []
> tBPBW = outFile "bpBW.wav" 10 $
> sfTest1 (addBandWidth filterBandPassBW) 10 (absPitch (C,6)) 80 []
> tBSBW = outFile "bsBW.wav" 10 $
> sfTest1 (addBandWidth filterBandStopBW) 10 (absPitch (C,6)) 80 []
> noise1 :: Instr (Mono AudRate)
>
> noise1 dur ap vol [] =
> let v = fromIntegral vol / 100
> in proc () -> do
> a1 <- noiseWhite 42 -< ()
> outA -< a1*v
> test1 = outFile "noise1.wav" 6 (noise1 6 (absPitch (C,5)) 100 [])
> env2 :: AudSF () Double
> env2 = envExpon 1 10 2000
> sfTest2 :: AudSF (Double,Double,Double) Double -> Instr (Mono AudRate)
>
>
> sfTest2 sf dur ap vol [] =
> let f = apToHz ap
> v = fromIntegral vol / 100
> in proc () -> do
> a1 <- noiseWhite 42 -< ()
> bw <- env2 -< ()
> a2 <- sf -< (a1,f,bw)
> outA -< a2
> tBP' = outFile "bp'.wav" 10 $
> sfTest2 (filterBandPass 1) 10 (absPitch (C,5)) 80 []
> tBS' = outFile "bs'.wav" 10 $
> sfTest2 (filterBandStop 1) 10 (absPitch (C,5)) 80 []
> tBPBW' = outFile "bpBW'.wav" 10 $
> sfTest2 filterBandPassBW 10 (absPitch (C,5)) 80 []
> tBSBW' = outFile "bsBW'.wav" 10 $
> sfTest2 filterBandStopBW 10 (absPitch (C,5)) 80 []
> noise2 :: Instr (Mono AudRate)
> noise2 dur ap vol [] =
> let f = apToHz ap
> v = fromIntegral vol / 100
> in proc () -> do
> a1 <- noiseBLI 42 -< f
> outA -< a1*v
> test2 = outFile "noise2.wav" 6 (noise2 6 (absPitch (C,5)) 100 [])
> ss1 :: Instr (Mono AudRate)
> ss1 dur ap vol [] =
> let v = fromIntegral vol / 100
> in proc () -> do
> a1 <- noiseWhite 42 -< ()
> a2 <- filterBandPass 2 -< (a1, 1000, 200)
> outA -< a2*v/5
> test3 = outFile "ss1.wav" 6 (ss1 6 (absPitch (C,5)) 100 [])
> wind :: Instr (Mono AudRate)
> wind dur ap vol [] =
> let f = apToHz ap
> v = fromIntegral vol / 100
> in proc () -> do
> a1 <- noiseWhite 42 -< ()
> lfo1 <- osc sineTable 0 -< 0.9
> lfo2 <- osc sineTable 0 -< 1.3
> a2 <- filterBandPass 2 -< (a1, f + 100*(lfo1+lfo2), 200)
> outA -< a2*v/5
> test4 = outFile "wind.wav" 6 (wind 6 (absPitch (C,7)) 100 [])
> buzzy :: Instr (Mono AudRate)
> buzzy dur ap vol [] =
> let f = apToHz ap
> v = fromIntegral vol / 100
> in proc () -> do
> a1 <- oscPartials sineTable 0 -< (f,20)
> outA -< a1*v
> test5 = outFile "buzzy.wav" 6 (buzzy 6 (absPitch (C,5)) 100 [])
> buzzy2 :: Instr (Mono AudRate)
> buzzy2 dur ap vol [] =
> let f = apToHz ap
> v = fromIntegral vol / 100
> d = fromRational dur
> in proc () -> do
> a1 <- oscPartials sineTable 0 -< (f,20)
> env <- envExponSeg [0, 1, 0.001] [0.003, d 0.003] -< ()
> a2 <- filterLowPass -< (a1,20000*env)
> outA -< a2*v*env
> test6 = outFile "buzzy2.wav" 6 (buzzy2 6 (absPitch (C,5)) 100 [])
> scifi1 :: Instr (Mono AudRate)
> scifi1 dur ap vol [] =
> let v = fromIntegral vol / 100
> in proc () -> do
> a1 <- noiseBLH 42 -< 8
> a2 <- osc sineTable 0 -< 600 + 200*a1
> outA -< a2*v
> test7 = outFile "scifi1.wav" 10 (scifi1 10 (absPitch (C,5)) 100 [])
> scifi2 :: Instr (Mono AudRate)
> scifi2 dur ap vol [] =
> let v = fromIntegral vol / 100
> in proc () -> do
> a1 <- noiseBLI 44 -< 8
> a2 <- osc sineTable 0 -< 600 + 200*a1
> outA -< a2*v
> test8 = outFile "scifi2.wav" 10 (scifi2 10 (absPitch (C,5)) 100 [])