You are not recognized as the original poster of this topic.
let arr0=l=>new Array(l).fill(0),
delay=length=>{
let a=arr0(length),i=0;
return x=>{
a[i]=x;
i=(i+1)%length;
return a[i];
};
},
reverb=()=>{
let s=72,d=[],init=()=>{
let p=300+(random()*5000);
for(let i=0;i<s;i++){
d[i]=[
delay(4+floor(random()*p)),
(.1+(random()*.23))*(random()<.5?1:-1)
];
}
};init();
return{
p:x=>{
let o=x;
for(let i=0;i<s;i++){
o+=d[i][0](i===0?x:o)*d[i][1];
}
return o;
},
i:init
};
};
let c={c:5e3,t:0,a:0,ar:true},r=reverb(),a=arr0(c.c);
c.c2=c.c;
return t=>{
let m=0;
c.t++;
if(c.t>=c.c2){c.t=0;
r.i();
m++;
c.c2=c.c/(1+floor(random()*2));
}
c.a++;
if(c.a>=c.c*4){c.a=0;
c.ar=random()<.3;
}
m=r.p(m);
if(c.ar){a[c.a]=m;}else{
m=a[c.a%c.c]+a[floor(c.a/2)%c.c]+a[floor(c.a/4)];
}
return m;
};