hsc3-graphs-0.14: gr/shifting-pulses-m.hs
-- shifting pulses (rd)
import Sound.SC3.Monad {- hsc3 -}
wrp :: UGen -> UGen -> UGen -> UGen
wrp i l r = linLin i (-1) 1 l r
prt :: UId m => UGen -> UGen -> m UGen
prt a f = do
r0 <- rand 0.2 0.9
r1 <- rand 0.95 1.05
r2 <- clone 2 (rand 0.95 1.05)
let f' = f * wrp (sinOsc KR r0 0) 1 1.01 * r1
a' = a * r2
o = sinOsc AR (mce2 f f') 0
return (o * a')
-- audition . out 0 =<< prts 2 900 0.002
-- audition . out 0 =<< prts 9 40 0.006
prts :: UId m => UGen -> UGen -> UGen -> m UGen
prts n f a = fmap sum (mapM (prt a) [f,f + f .. f * n])
-- audition . out 0 =<< fmt
fmt :: UId m => m UGen
fmt = do
n <- (lfNoise2 KR 2)
return (formant AR (mce2 20 21) (wrp n 10 100) 200 * 0.35)
-- audition . out 0 =<< pulses
pulses :: UId m => m UGen
pulses = do
n0 <- clone 2 (brownNoise KR)
n1 <- clone 2 (brownNoise KR)
n2 <- clone 2 (brownNoise KR)
t <- dust KR 0.75
let warp i = linLin i (-1) 1
l = latch t t
p = pulse AR (warp n0 2 (mce2 11 15)) 0.01 * 0.1
f = warp n1 300 1800
rq = warp n2 0.01 2
return (mrg2 (l * rlpf p f rq) (sendTrig t 0 t))
shifting_pulses :: UId m => m UGen
shifting_pulses = do
p1 <- prts 2 900 0.008
p2 <- prts 9 40 0.022
f <- fmt
s <- pulses
return (p1 + p2 + f + s)
main :: IO ()
main = audition . out 0 =<< shifting_pulses