let pi = 3.14159265359
let sr = 44100.0
fn phasor(freq){
(self + freq/sr)%1.0
}
fn osc(freq){
sin(phasor(freq)*pi*2.0)
}
fn cascade(n,gen:()->(float)->float){
let g = gen()
if (n>0.0){
let c = cascade(n - 1.0 ,gen)
|rate| rate + g(rate/2.)* 0.5* rate*(1.0-(1.0/(n*2.0))) |> c
}else{
|rate| g(rate)
}
}
let n =40.0
let myosc = cascade(n, | | osc);
fn dsp(){
let r = myosc(200.0)
(r,r)
}