packages feed

hsc3-graphs-0.15: gr/shifting-pulses-m.hs

-- shifting pulses (rd)

import Sound.SC3 {- hsc3 -}

prt :: UId m => UGen -> UGen -> m UGen
prt a f = do
  r0 <- randM 0.2 0.9
  r1 <- randM 0.95 1.05
  r2 <- clone 2 (randM 0.95 1.05)
  let f' = f * linLin_b (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 <- (lfNoise2M KR 2)
  return (formant AR (mce2 20 21) (linLin_b n 10 100) 200 * 0.35)

-- audition . out 0 =<< pulses
pulses :: UId m => m UGen
pulses = do
  n0 <- clone 2 (brownNoiseM KR)
  n1 <- clone 2 (brownNoiseM KR)
  n2 <- clone 2 (brownNoiseM KR)
  t <- dustM 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 90 300
      rq = warp n2 2 9
  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