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 amosc(freq,rate){
osc(freq + osc(rate)*4000.0)
}
fn replicate(n,gen:()->(float,float)->float){
let g = gen()
if (n>0.0){
let c = replicate(n - 1.0,gen)
|x,rate| g(x,rate) + c(x+100.0,rate+0.1)
}else{
|x,rate| 0.0
}
}
let n = 40.0
let mycounter = replicate(n,| |amosc);
fn dsp(){
let res = mycounter(4000.0,0.5) / n
(res,res)
}