packages feed

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