-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathanalyzernode.min.js
1 lines (1 loc) · 2.84 KB
/
analyzernode.min.js
1
let t,e=1,s=.025,r=.04,n=50,a=4e3,o=256,l=128,i=[],h=1e3,p=Math.round(10/l),f=parseInt(sampleRate/a*(o-1)),c=-2*Math.PI/f,_=2*Math.PI/1023,u=1024,g=512,M=0,m=[],w=new Float32Array(g),d=new Float32Array(u).fill(0),y=!1,A=0;let I=[],b=null,F=null,P=null;function R(y){r=y.window_width/1e3,s=y.window_step/1e3,u=parseInt(sampleRate*r),g=parseInt(sampleRate*s),n=y.f_min,a=y.f_max,o=y.N_fft_bins,f=parseInt(sampleRate/a*(o-1)),c=-2*Math.PI/f,_=2*Math.PI/(u-1),I=[];for(let t=0;t<o;t+=1)I[t]=Math.round(t*a/o);l=y.N_mel_bins,t=function(t,e,s,r,n){let a=[],o=[],l=N(r),h=(N(n)-l)/(parseInt(s)+1);i=new Array(s);for(let r=0;r<s;r++){let s=(p=l+r*h,700*(Math.exp(p/1127)-1));a[r]=Math.floor(s/(e/t)),i[r]=Math.round(s)}var p;for(let e=0;e<a.length;e++){o[e]=[];var f=e!=a.length-1?a[e+1]-a[e]:a[e]-a[e-1];o[e].filterRange=f;for(let s=0;s<t;s++)s>a[e]+f?o[e][s]=0:s>a[e]?o[e][s]=1-(s-a[e])/f:s==a[e]?o[e][s]=1:s>=a[e]-f?o[e][s]=1-(a[e]-s)/f:o[e][s]=0}return o}(o,a,l,n,a),p=y.high_f_emph,h=y.pre_norm_gain,w=new Float32Array(g),d=new Float32Array(u).fill(0),M=0,m=[],e=y.spec_type,b=null,F=null,P=null,b=new Float32Array(o),F=new Uint32Array(l),P=new Uint32Array(o);var A={bins_Hz:I};return 1==e&&(A={bins_Hz:i}),A}function v(t,e){var s;const r=t.length;for(let n=0;n<o;n+=1){let a=0,l=0;for(let e=0;e<r;e+=1)if(t[e]){const s=c*n*e;a+=Math.cos(s)*t[e],l+=Math.sin(s)*t[e]}s=Math.sqrt(a*a+l*l),s*=e?h/o*100*s:h/100,s*=1+p*n,P[n]=s}return P}function x(t){let e=[];for(let s=0;s<t.length;s+=1)e[s]=(.53836-.46164*Math.cos(_*s))*t[s];return e}function N(t){return 1127*Math.log(1+t/700)}registerProcessor("spectrum-processor",class extends AudioWorkletProcessor{constructor(){super(),y=!0,R({spec_type:1,f_min:50,f_max:4e3,N_fft_bins:256,N_mel_bins:128,window_width:25,window_step:25,pre_norm_gain:1e3,high_f_emph:.05,start_frame:-1,end_frame:-1}),this.port.onmessage=(s=>{if(s.data.spec_type)this.port.postMessage(R(s.data));else if(m.length>0){let s=m[0];m.splice(0,1),1==e?this.port.postMessage(function(e){const s=e.length;for(let t=0;t<o;t+=1){let n=0,a=0;for(let r=0;r<s;r+=1)if(e[r]){const s=c*t*r;n+=Math.cos(s)*e[r],a+=Math.sin(s)*e[r]}var r=Math.sqrt(n*n+a*a);b[t]=h*r*r}return t.forEach(function(t,e){let s=0,r=1+p*e;b.forEach(function(e,r){s+=e*t[r]}),s*=r,F[e]=s}),F}(x(s))):2==e?this.port.postMessage(v(x(s),1)):3==e&&this.port.postMessage(v(x(s),0)),s=null}else 22==s.data?(y=!1,this.port.postMessage(22)):0==s.data?this.port.postMessage(0):1!=s.data&&(console.log("Unrecognized Rx on worklet port"),console.log(s.data))})}process(t,e,s){if(t[0][0]){let e=t[0][0].length,s=A+e;if(s<g)w.set(t[0][0],A),A+=e;else if(s==g)w.set(t[0][0],A),this.create_segment(w),A=0;else{let e=g-A,s=t[0][0].slice(0,e),r=t[0][0].slice(e);w.set(s,A),this.create_segment(w),w.set(r,0),A=r.length}}return!!y}create_segment(t){let e=new Float32Array(u);e.set(d.slice(g),0),e.set(t,u-g),m.push(e),d=e,this.port.postMessage(1)}});