-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathStereo delay test.js
38 lines (38 loc) · 1.03 KB
/
Stereo delay test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
importScripts("https://rawgit.com/AnastasiaDunbar/d75e19d93a5c439d8185343f1fd54da1/raw/e2618269295dbac54cd8dfa941f9a06b42e76bcd/TinyRave%2520functions.js");
var SAMPLE_RATE=48000; //SAMPLE_RATE is undefined outside of buildSample().
function inputSample(time){
var m=[0,0];
m[0]+=sin(1500*time)*pow(fract(-time*1.2),9);
m[1]+=sin(2700*time)*pow(fract(-time*1.4),9);
return m.mult(0.6);
}
function arrayMix(a,b,c){
var n=[];
for(var i=0;i<a.length;i++){
n.push(mix(a[i],b[i],c));
}
return n;
}
function stereoDelay(time){
var t=0;
var m=createArray(time*SAMPLE_RATE,[0,0]);
return function(input,feedback,pingpong){
if(t>=m.length){
m=m.map(function(e){
var n=e.mult(feedback);
if(pingpong){
n=arrayMix(n,n.slice(0).reverse(),pingpong);
}
return n;
});
t=0;
}
m[t]=m[t].add(input);
t++;
return m[t-1];
};
}
var myDelay=stereoDelay(0.1);
function buildSample(time){
return myDelay(inputSample(time),0.6,(pow2(sin(time/3),0.2)+1)/2).mult(0.6);
}