var e=class{n;m;factors=[];wc;ws;cos;sin;leaf=/* @__PURE__ */ new Map;xr;xi;yr;yi;tr;ti;ur;ui;vr;vi;constructor(e){if(this.n=e,!Number.isInteger(e)||e<2||e%2)throw Error(`irfft: n=${e} must be even`);let t=this.m=e/2,n=t;for(let e of[2,3])for(;n%e===0;)this.factors.push(e),n/=e;for(let e=5;n>1;e+=2)for(;n%e===0;)this.factors.push(e),n/=e;this.factors.sort((e,t)=>e-t),this.wc=new Float64Array(t),this.ws=new Float64Array(t),this.cos=new Float64Array(t),this.sin=new Float64Array(t);for(let n=0;n>1;this.ur=new Float64Array(i),this.ui=new Float64Array(i),this.vr=new Float64Array(i),this.vi=new Float64Array(i)}exec(e,t,n){let{n:r,m:i,xr:a,xi:o,yr:s,yi:c,wc:l,ws:u}=this;for(let t=0;tthis.data.length){let t=new Float32Array(Math.max(e,2*this.data.length));t.set(this.data.subarray(0,this.len)),this.data=t}else e>this.len&&this.data.fill(0,this.len,e);this.len=e}erase(e){this.data.copyWithin(0,e,this.len),this.len-=e}clear(){this.len=0}},n=class{nFft;hop;windows;mixer;fir;maxLogMag;irfft;hc;buf;ola=[new t,new t];env=[new t,new t];olaBase=[0,0];mixIn=[new t,new t];mixAvail=[0,0];mixBase=0;mixNext=0;headFrames=0;headDone=!1;constructor(t){if(this.nFft=t.nFft,this.hop=t.hop,this.fir=t.mixer.length/2,!Number.isInteger(this.fir)||this.fir%2!=1)throw Error(`istft: mixer has ${t.mixer.length} taps, expected 2 x odd`);for(let e=0;e<2;e++)if(t.windows[e].length!==t.nFft[e])throw Error(`istft: window ${e} has ${t.windows[e].length} taps, expected ${t.nFft[e]}`);this.windows=t.windows,this.mixer=t.mixer,this.maxLogMag=t.maxLogMag,this.irfft=[new e(t.nFft[0]),new e(t.nFft[1])],this.hc=[new Float64Array(t.nFft[0]),new Float64Array(t.nFft[1])],this.buf=[new Float32Array(t.nFft[0]),new Float32Array(t.nFft[1])]}get frames(){return this.headFrames}reset(){for(let e=0;e<2;e++)this.ola[e].clear(),this.env[e].clear(),this.mixIn[e].clear(),this.olaBase[e]=0,this.mixAvail[e]=0;this.mixBase=0,this.mixNext=0,this.headFrames=0,this.headDone=!1}push(e,t,n){if(this.headDone)throw Error(`istft: push after flush`);this.headFrames===0&&this.init();let r=[e,t],i=this.hop;for(let e=0;e<2;e++){let t=this.nFft[e],a=t/2+1;if(r[e].lengthMath.exp(Math.min(l[p+e],u));s[0]=h(0)*Math.cos(l[m]);for(let e=1;ethis.mixBase&&this.mixIn[e].erase(this.mixNext-this.mixBase);return this.mixBase=this.mixNext,r}},r=class{kernel;orig;nw;width;buf=/* @__PURE__ */ new Float32Array;len=0;base=0;inCount=0;nextBlock=0;kl;lo;hi;constructor(e,t=736,n=735,r=17){if(this.kernel=e,this.orig=t,this.nw=n,this.width=r,this.kl=2*r+t,e.length!==n*this.kl)throw Error(`resampler: kernel has ${e.length} taps, expected ${n*this.kl}`);this.lo=new Int32Array(n),this.hi=new Int32Array(n);for(let t=0;tr&&e[n+i-1]===0;)i--;this.lo[t]=r,this.hi[t]=i}}push(e){if(this.len+e.length>this.buf.length){let t=new Float32Array(Math.max(this.len+e.length,2*this.buf.length));t.set(this.buf.subarray(0,this.len)),this.buf=t}return this.buf.set(e,this.len),this.len+=e.length,this.inCount+=e.length,this.run(!1)}flush(){return this.run(!0)}reset(){this.len=0,this.base=0,this.inCount=0,this.nextBlock=0}run(e){let{orig:t,nw:n,width:r,kl:i,kernel:a,lo:o,hi:s}=this,c=e?Math.floor((n*this.inCount+t-1)/t):-1,l=[],u=new Float32Array(i);for(;;this.nextBlock++){let d=this.nextBlock,f=d*t-r;if(e?d*n>=c:f+i>this.inCount)break;for(let e=0;e=this.inCount?0:this.buf[t-this.base]}let p=e?Math.min(n,c-d*n):n,m=new Float32Array(p);for(let e=0;ethis.base){let e=d-this.base;this.buf.copyWithin(0,e,this.len),this.len-=e,this.base=d}let f=new Float32Array(l.reduce((e,t)=>e+t.length,0)),p=0;for(let e of l)f.set(e,p),p+=e.length;return f}},i=class{istft;rs;constructor(e){this.istft=new n(e),this.rs=new r(e.resampleKernel)}async push(e,t,n){return this.rs.push(this.istft.push(e,t,n))}async flush(){let e=this.rs.push(this.istft.flush()),t=this.rs.flush(),n=new Float32Array(e.length+t.length);return n.set(e),n.set(t,e.length),n}reset(){this.istft.reset(),this.rs.reset()}};function a(e){let t=null,n=`not initialized`,r=Promise.resolve(),a=(t,n=[])=>e.postMessage(t,n),o=async e=>{if(e.type===`init`)try{t=new i(e)}catch(e){t=null,n=e instanceof Error?e.message:String(e)}else if(e.type===`reset`)t?.reset();else try{if(!t)throw Error(n);let r=e.type===`push`?await t.push(e.s0,e.s1,e.cols):await t.flush();a({type:`pcm`,pcm:r},[r.buffer])}catch(e){a({type:`error`,message:e instanceof Error?e.message:String(e)})}};e.onmessage=e=>{let t=e.data;r=r.then(()=>o(t))}}self.onmessage=e=>{e.data.type===`port`&&e.ports[0]&&a(e.ports[0])};