>
> module HSoM.Examples.PhysicalModeling where
> import Euterpea
> import FRP.UISF.AuxFunctions
> sineTable441 :: Table
> sineTable441 = tableSinesN 100 [1]
> s441 :: AudSF () Double
> s441 = proc () -> do
> rec s <- delayLineT 100 sineTable441 -< s
> outA -< s
> ts441 = outFile "s441.wav" 5 s441
> echo :: AudSF Double Double
> echo = proc s -> do
> rec fb <- delayLine 0.5 -< s + 0.7*fb
> outA -< fb/3
> modVib :: Double -> Double -> AudSF Double Double
> modVib rate depth =
> proc sin -> do
> vib <- osc sineTable 0 -< rate
> sout <- delayLine1 0.2 -< (sin,0.1+0.005*vib)
> outA -< sout
> tModVib = outFile "modvib.wav" 6 $
> constA 440 >>> osc sineTable 0 >>> modVib 5 0.005
> sineTable :: Table
> sineTable = tableSinesN 4096 [1]
> flute :: Time -> Double -> Double -> Double -> Double
> -> AudSF () Double
> flute dur amp fqc press breath =
> proc () -> do
> env1 <- envLineSeg [0, 1.1*press, press, press, 0]
> [0.06, 0.2, dur0.16, 0.02] -< ()
> env2 <- envLineSeg [0, 1, 1, 0]
> [0.01, dur0.02, 0.01] -< ()
> envib <- envLineSeg [0, 0, 1, 1]
> [0.5, 0.5, dur1] -< ()
> flow <- noiseWhite 42 -< ()
> vib <- osc sineTable 0 -< 5
> let emb = breath*flow*env1 + env1 + vib*0.1*envib
> rec flute <- delayLine (1/fqc) -< out
> x <- delayLine (1/fqc/2) -< emb + flute*0.4
> out <- filterLowPassBW -< (xx*x*x + flute*0.4, 2000)
> outA -< out*amp*env2
> tFlute = outFile "tFlute.wav" 5 $ flute 5 0.3 440 0.99 0.2
> tFlute2 = outFileNorm "tFlute2.wav" 5 $ flute 5 0.7 440 0.99 0.2