hsc3-0.16: Help/UGen/dbufwr.help.lhs
> Sound.SC3.UGen.Help.viewSC3Help "Dbufwr"
> Sound.SC3.UGen.DB.ugenSummary "Dbufwr"
> import Sound.SC3 {- hsc3 -}
allocate buffer
> withSC3 (async (b_alloc_setn1 0 0 (replicate 24 210)))
monadic graph constructor (type `C-cM-a` at g_01 to hear, `C-cM-g` to see)
> g_01 :: UId m => m UGen
> g_01 = do
> s1 <- dseriesM 30 0 3
> s2 <- dseriesM 30 0 1
> s3 <- dseriesM 16 1 1
> s4 <- dwhiteM 8 1 16
> s5 <- dseqM dinf (mce2 s3 s4)
> wt <- dustM KR 1 {- write trigger -}
> rp <- dseriesM dinf 0 1 {- read pointer -}
> wp <- dseqM dinf (mce2 s1 s2) {- write pointer -}
> r <- dbufrdM 0 rp Loop {- reader -}
> w <- dbufwrM 0 wp (s5 * 60) Loop {- writer -}
> let d = demand wt 0 w
> f = lag (demand (impulse KR 16 0) 0 r) 0.01
> o = sinOsc AR (f * mce2 1 1.01) 0 * 0.1
> return (mrg [d, out 0 o])
variant written using a local buffer and uid ugen forms
> g_02 =
> let b = asLocalBuf 'α' (replicate 24 210)
> s = dseq 'β' dinf (mce2 (dseries 'γ' 16 1 1) (dwhite 'δ' 8 1 16))
> rp = dseries 'ε' dinf 0 1 {- read pointer -}
> wp = dseq 'ζ' dinf (mce2 (dseries 'η' 30 0 3) (dseries 'θ' 30 0 1)) {- write pointer -}
> r = dbufrd 'ι' b rp Loop {- reader -}
> w = dbufwr 'κ' b wp (s * 60) Loop {- writer -}
> d = demand (dust 'λ' KR 1) 0 w
> f = lag (demand (impulse KR 16 0) 0 r) 0.01
> o = sinOsc AR (f * mce2 1 1.01) 0 * 0.1
> in mrg2 d (out 0 o)
demand rate single memory recurrence relation.
> rec1 z k t f =
> let b = asLocalBuf z [k]
> r = dbufrd z b 0 Loop {- reader -}
> w = dbufwr z b 0 (f r) Loop {- writer -}
> in mrg2 (demand t 0 r) (demand t 0 w)
simple counter, written in terms of rec1.
> g_03 =
> let f = rec1 'α' 0 (impulse KR 6 0) (\r -> (r + 1) `modE` 24)
> in sinOsc AR (midiCPS (60 + f)) 0 * 0.1