-- feedr (rd)
-- warning: input/output feedback loop
import Sound.OSC.FD {- hosc -}
import Sound.SC3.Monad.FD {- hsc3 -}
delayWr :: UGen -> UGen -> UGen
delayWr b = recordBuf AR b 0 1 0 1 Loop 0 DoNothing
tap :: Int -> UGen -> UGen -> UGen
tap nc b dt = playBuf nc AR b 1 0 (dt * (- sampleRate)) Loop DoNothing
type State = (UGen,Double)
feedr :: (UId m) => State -> Int -> m UGen
feedr (ch,dl) n = do
t <- sequence (replicate n (rand 0.0 (constant dl)))
g <- sequence (replicate n (rand 0.4 1.0))
f <- sequence (replicate n (rand 0.9 0.95))
let d = zipWith (\p q -> tap 2 10 p * q) t g
x = mouseX KR 0.02 1.0 Exponential 0.1
s = clip2 (leakDC (hpf (sum d) 20) 0.995) 1
i = soundIn ch
r = i + sum (map (* x) (zipWith (*) d f))
return (mrg [out 0 s, delayWr 10 r])
run :: Transport t => State -> t -> IO ()
run (ch,dl) fd = do
nf <- fmap (* dl) (serverSampleRateActual fd)
send fd (b_alloc 10 (floor nf) 2)
audition =<< feedr (ch,dl) 18
main :: IO ()
main = withSC3 (run (mce2 4 5,6))
-- withSC3 (\fd -> send fd (b_zero 10))