spessasynth_lib 4.3.13 → 4.3.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
var gs="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dCIBBEAgB0EAIAH8CwALIABBAWoiACACKAIESA0ACwsgAkEAIAIoAnAQJUUNCyACQQEgAigCdBAlRQ0LIAIgAigCcDYCaCACIAIoAnQiADYCbCACIABBAXRB/v///wdxIgUgAigCiAIiB0EATAR/QQQFIABBAm0hAUEAIQAgAigCjAMhCEEAIQQDQCAIIARBGGxqIgMoAgQiBiABIAEgBksbIAMoAgAiBiABIAEgBksbayADKAIIbiIDIAAgACADSBshACAEQQFqIgQgB0cNAAsgAEECdEEEagsgAigCBGwiACAAIAVJGyIBNgIMAkACQCACKAJQIgBFDQAgAigCXCIDIAIoAlRHDQEgASACKAJYakHoC2ogA00NACACQQM2AmQMDQsgAiACKALkCkF/RgR/QQAgAigCICACKAIkayACLQAwGwVBAAs2AjQgAiACKAIIQegLajYCCAJ/IAAEQCACKAJYIgFB6AtqIgMgAigCXEoNDiACIAM2AlggACABagwBC0HoCxAJCyINRQ0MIA0gAkHoC/wKAAAgDSACQfALaiACQewLaiACQdwTahARBEAgDSACKALwCyACKALsCyACKALcExAXGgsgFyANKAIEIgE2AgwgFyANKAIANgIIAkACQCABQQ10EAkiAARAIA1B4AZqIREgDUGgBmohFSANKAIEIQggAUEMdCIaIQRBACEBDAELIA0QGEF+IQEgDSgCUEUNAQwQCwNAIAAhECAEIQ4DQCAOIBlrIQcgECAZQQF0aiEDAkACQAJAAn8CQCAIQQFGBEAgDS0AMARAIA1BAjYCZAwCCyANIAIgAkHcE2ogAkHwC2oQEUUEQCANQgA3AuALDAILIA0gAigCACACKALcEyIIIAIoAvALEBchBQJAIA0oAgQiBkEATA0AIAZBA3EhC0EAIQRBACEAIAZBBE8EQCAGQfz///8HcSEKA0AgESAAQQJ0IgZqIAhBAnQiCSAGIBVqKAIAajYCACARIAZBBHIiD2ogDyAVaigCACAJajYCACARIAZBCHIiD2ogDyAVaigCACAJajYCACARIAZBDHIiBmogBiAVaigCACAJajYCACAAQQRqIgAgCkcNAAsgC0UNAQsDQCARIABBAnQiBmogBiAVaigCACAIQQJ0ajYCACAAQQFqIQAgBEEBaiIEIAtHDQALCyANIAg2AuAL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AAAwQKIhAQJAIAdBAWoiByAMQZAEamtBAUcNACABRAAAAAAAAAAAYSAIcQ0AIAVBLjoAASAFQQJqIQcLIAFEAAAAAAAAAABiDQALQX8hCiADQfv///8HIA8gECALayIIamtKDQAgAEEgIAIgA0ECaiAHIAxBkARqIgZrIg0gDUECayADSBsgDSADGyIFIAggD0ECciIDamoiByAEEDggACAJIAMQNCAAQTAgAiAHIARBgIAEcxA4IAAgBiANEDQgAEEwIAUgDWtBAEEAEDggACALIAgQNCAAQSAgAiAHIARBgMAAcxA4IAIgByACIAdKGyEKCyAMQbAEaiQAIAoLsgUCBn4DfyABIAEoAgBBB2pBeHEiAUEQajYCACAAIAEpAwAhAiABKQMIIQYjAEEgayIAJAAgBkL///////8/gyEDAn4gBkIwiEL//wGDIgSnIghBgfgAa0H9D00EQCADQgSGIAJCPIiEIQMgCEGA+ABrrSEEAkAgAkL//////////w+DIgJCgYCAgICAgIAIWgRAIANCAXwhAwwBCyACQoCAgICAgICACFINACADQgGDIAN8IQMLQgAgAyADQv////////8HViIBGyECIAGtIAR8DAELAkAgAiADhFANACAEQv//AVINACADQgSGIAJCPIiEQoCAgICAgIAEhCECQv8PDAELIAhB/ocBSwRAQgAhAkL/DwwBC0GA+ABBgfgAIARQIgkbIgogCGsiAUHwAEoEQEIAIQJCAAwBCyADIANCgICAgICAwACEIAkbIQNBACEJIAggCkcEQCACIQQgAyEFAkBBgAEgAWsiCEHAAHEEQCACIAhBQGqthiEFQgAhBAwBCyAIRQ0AIAUgCK0iB4YgBEHAACAIa62IhCEFIAQgB4YhBAsgACAENwMQIAAgBTcDGCAAKQMQIAApAxiEQgBSIQkLAkAgAUHAAHEEQCADIAFBQGqtiCECQgAhAwwBCyABRQ0AIANBwAAgAWuthiACIAGtIgSIhCECIAMgBIghAwsgACACNwMAIAAgAzcDCCAAKQMIQgSGIAApAwAiA0I8iIQhAgJAIAmtIANC//////////8Pg4QiA0KBgICAgICAgAhaBEAgAkIBfCECDAELIANCgICAgICAgIAIUg0AIAJCAYMgAnwhAgsgAkKAgICAgICACIUgAiACQv////////8H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YXJ0AG5leHRfc2VnbWVudABmLT5hbGxvYy5hbGxvY19idWZmZXJfbGVuZ3RoX2luX2J5dGVzID09IGYtPnRlbXBfb2Zmc2V0AGNvZGVib29rX2RlY29kZV9kZWludGVybGVhdmVfcmVwZWF0AGdldF9iaXRzAGYtPnRlbXBfb2Zmc2V0ID09IGYtPmFsbG9jLmFsbG9jX2J1ZmZlcl9sZW5ndGhfaW5fYnl0ZXMAayA9PSBjLT5zb3J0ZWRfZW50cmllcwAhYy0+c3BhcnNlIHx8IHogPCBjLT5zb3J0ZWRfZW50cmllcwBjb21wdXRlX2NvZGV3b3JkcwBzdGFydF9kZWNvZGVyAGltZGN0X3N0ZXAzX2l0ZXIwX2xvb3AAbmFuAGNvbXB1dGVfc29ydGVkX2h1ZmZtYW4AZi0+dmFsaWRfYml0cyA+PSBuAHZvcmJpc19kZWNvZGVfaW5pdGlhbABpbmYAIWMtPnNwYXJzZQBjLT5zb3J0ZWRfY29kZXdvcmRzW3hdID09IGNvZGUAY29udmVydF9jaGFubmVsc19zaG9ydF9pbnRlcmxlYXZlZAAvaG9tZS9ydW5uZXIvd29yay9zdGItdm9yYmlzL3N0Yi12b3JiaXMvd2FzbS9zdGJfdm9yYmlzLmMATkFOAElORgBsZW4gIT0gTk9fQ09ERQB6IDwgMzIAbGVuW2tdIDwgMzIAYnVmX2MgPT0gMgBmLT5ieXRlc19pbl9zZWcgPiAwAGMtPnNvcnRlZF9lbnRyaWVzID09IDAAZi0+Ynl0ZXNfaW5fc2VnID09IDAAYXZhaWxhYmxlW3ldID09IDAAKG4gJiAzKSA9PSAwAC4AKG51bGwpAEFzc2VydGlvbiBmYWlsZWQ6ICVzICglczogJXM6ICVkKQoAAAAAAAD+gitlRxVnQAAAAAAAADhDAAD6/kIudr86O568mvcMvb39/////98/PFRVVVVVxT+RKxfPVVWlPxfQpGcREYE/AAAAAAAAyELvOfr+Qi7mPyTEgv+9v84/tfQM1whrrD/MUEbSq7KDP4Q6Tpvg11U/AEG2DwvCEPA/br+IGk87mzw1M/upPfbvP13c2JwTYHG8YYB3Pprs7z/RZocQel6QvIV/bugV4+8/E/ZnNVLSjDx0hRXTsNnvP/qO+SOAzou83vbdKWvQ7z9hyOZhTvdg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",Fa=0,Ra=4,ba=8,Pa=12,Na="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function Ga(A){if(A=A.replaceAll(/[\t\n\f\r ]/g,""),A.length%4===1)throw new Error("Invalid base64 string");let e="",t=0,s=0;for(let n of A){if(n==="=")break;let a=Na.indexOf(n);if(a===-1)throw new Error("Invalid base64 character");t=t<<6|a,s+=6,s>=8&&(s-=8,e+=String.fromCharCode(t>>s&255))}return e}var Ta={env:{emscripten_notify_memory_growth:()=>{}},wasi_snapshot_preview1:{fd_close:()=>0,fd_write:()=>0,fd_seek:()=>0}},kA=class Is{static exports;static ready=(async()=>{let e="atob"in globalThis?atob(gs):Ga(gs),t=Uint8Array.from(e,n=>n.charCodeAt(0)),{instance:s}=await WebAssembly.instantiate(t,Ta);Is.exports=s.exports})();static decode(e,t={}){if(!this.exports)throw new Error("Vorbis decoder not ready");let s=e instanceof Uint8Array?e:new Uint8Array(e),n=this.exports,a=n.memory,i=n.malloc(s.byteLength);if(i===0)throw new Error("Failed to allocate WASM memory for Vorbis input");try{new Uint8Array(a.buffer,i,s.byteLength).set(s);let r=n.vorbis_decode(i,s.byteLength);if(r===0)throw new Error("Failed to decode Ogg Vorbis stream");try{let o=new DataView(a.buffer),g=o.getInt32(r+Fa,!0),C=o.getInt32(r+Ra,!0),l=o.getInt32(r+ba,!0);if(g<=0||l<=0||C<=0)throw new Error("Invalid Vorbis decoder result");let h=new Int16Array(a.buffer,r+Pa,g*l);if(t?.sampleType==="s16"){let B=new Array(g);for(let m=0;m<g;m++){let u=new Int16Array(l);for(let w=0;w<l;w++)u[w]=h[w*g+m];B[m]=u}return{sampleRate:C,channels:B}}let d=new Array(g);for(let B=0;B<g;B++){let m=new Float32Array(l);for(let u=0;u<l;u++){let w=h[u*g+B];m[u]=w/32768}d[B]=m}return{sampleRate:C,channels:d}}finally{n.vorbis_free(r)}}finally{n.free(i)}}};function cA(A,e,t=0){let s=0;for(let n=0;n<e;n++)s=s<<8|A[t+n];return s>>>0}function rA(A,e){let t=cA(A,e,A.currentIndex);return A.currentIndex+=e,t}function SA(A,e){let t=new Array(e).fill(0);for(let s=e-1;s>=0;s--)t[s]=A&255,A>>=8;return t}function xa(A,e){let t=Ka(A,e,A.currentIndex);return A.currentIndex+=e,t}function Ka(A,e,t=0){let s=0n;for(let n=0;n<e;n++)s|=BigInt(A[t+n])<<BigInt(n*8);return Number(s)}function q(A,e){let t=xt(A,e,A.currentIndex);return A.currentIndex+=e,t}function xt(A,e,t=0){let s=0;for(let n=0;n<e;n++)s|=A[t+n]<<n*8;return s>>>0}function Kt(A,e,t){for(let s=0;s<t;s++)A[A.currentIndex++]=e>>s*8&255}function X(A,e){A[A.currentIndex++]=e&255,A[A.currentIndex++]=e>>8}function te(A,e){Kt(A,e,4)}function ct(A,e){let t=BigInt(e);for(let s=0n;s<8n;s++)A[A.currentIndex++]=Number(t>>s*8n&255n)}function Ut(A,e){let t=e<<8|A;return t>32767?t-65536:t}function Ua(A){return A>127?A-256:A}var j=class extends Uint8Array{currentIndex=0;slice(A,e){let t=super.slice(A,e);return t.currentIndex=0,t}};function ve(A,e=A.length,t=0){let s="";for(let n=0;n<e;n++){let a=A[t+n];if(a===0)return s;s+=String.fromCharCode(a)}return s}function ie(A,e){let t=A.currentIndex;return A.currentIndex+=e,ve(A,e,t)}function Pe(A,e=!1,t=!1){let s=A.length;e&&s++,t&&s%2!==0&&s++;let n=new j(s);return pe(n,A),n}function pe(A,e,t=0){t>0&&e.length>t&&(e=e.slice(0,t));for(let s=0;s<e.length;s++)A[A.currentIndex++]=e.charCodeAt(s);if(t>e.length)for(let s=0;s<t-e.length;s++)A[A.currentIndex++]=0;return A}function Ie(A){let e=0;for(;A;){let t=A[A.currentIndex++];if(e=e<<7|t&127,t>>7!==1)break}return e}function Ct(A){let e=[A&127];for(A>>=7;A>0;)e.unshift(A&127|128),A>>=7;return e}function Ja(A){return function(){A|=0,A=A+2654435769|0;let e=A^A>>>16;return e=Math.imul(e,569420461),e=e^e>>>15,e=Math.imul(e,1935289751),((e^e>>>15)>>>0)/4294967296}}var cs=Ja(81572);function Dt(A){A=Math.floor(A);let e=Math.floor(A/60),t=Math.round(A-e*60);return{minutes:e,seconds:t,time:`${e.toString().padStart(2,"0")}:${t.toString().padStart(2,"0")}`}}function Ts(A){let e="";for(let t=0;t<A.length;t++){let s=A[t].toString(16).padStart(2,"0").toUpperCase();e+=s,t<A.length-1&&(e+=" ")}return e}var E={warn:"color: orange;",unrecognized:"color: red;",info:"color: aqua;",recognized:"color: lime",value:"color: yellow; background-color: black;"},xs;(()=>{var A=Uint8Array,e=Uint16Array,t=Int32Array,s=new A([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),n=new A([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),a=new A([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),i=function(G,P){for(var f=new e(31),M=0;M<31;++M)f[M]=P+=1<<G[M-1];for(var b=new t(f[30]),M=1;M<30;++M)for(var V=f[M];V<f[M+1];++V)b[V]=V-f[M]<<5|M;return{b:f,r:b}},r=i(s,2),o=r.b,g=r.r;o[28]=258,g[258]=28;var C=i(n,0),l=C.b;C.r;var h=new e(32768);for(w=0;w<32768;++w)d=(w&43690)>>1|(w&21845)<<1,d=(d&52428)>>2|(d&13107)<<2,d=(d&61680)>>4|(d&3855)<<4,h[w]=((d&65280)>>8|(d&255)<<8)>>1;var d,w,B=function(G,P,f){for(var M=G.length,b=0,V=new e(P);b<M;++b)G[b]&&++V[G[b]-1];var W=new e(P);for(b=1;b<P;++b)W[b]=W[b-1]+V[b-1]<<1;var z;if(f){z=new e(1<<P);var O=15-P;for(b=0;b<M;++b)if(G[b])for(var Z=b<<4|G[b],$=P-G[b],H=W[G[b]-1]++<<$,ee=H|(1<<$)-1;H<=ee;++H)z[h[H]>>O]=Z}else for(z=new e(M),b=0;b<M;++b)G[b]&&(z[b]=h[W[G[b]-1]++]>>15-G[b]);return z},m=new A(288);for(w=0;w<144;++w)m[w]=8;var w;for(w=144;w<256;++w)m[w]=9;var w;for(w=256;w<280;++w)m[w]=7;var w;for(w=280;w<288;++w)m[w]=8;var w,u=new A(32);for(w=0;w<32;++w)u[w]=5;var w,L=B(m,9,1),k=B(u,5,1),S=function(G){for(var P=G[0],f=1;f<G.length;++f)G[f]>P&&(P=G[f]);return P},v=function(G,P,f){var M=P/8|0;return(G[M]|G[M+1]<<8)>>(P&7)&f},x=function(G,P){var f=P/8|0;return(G[f]|G[f+1]<<8|G[f+2]<<16)>>(P&7)},y=function(G){return(G+7)/8|0},p=function(G,P,f){return(P==null||P<0)&&(P=0),(f==null||f>G.length)&&(f=G.length),new A(G.subarray(P,f))},D=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],U=function(G,P,f){var M=new Error(P||D[G]);if(M.code=G,Error.captureStackTrace&&Error.captureStackTrace(M,U),!f)throw M;return M},T=function(G,P,f,M){var b=G.length,V=M?M.length:0;if(!b||P.f&&!P.l)return f||new A(0);var W=!f,z=W||P.i!=2,O=P.i;W&&(f=new A(b*3));var Z=function(is){var rs=f.length;if(is>rs){var os=new A(Math.max(rs*2,is));os.set(f),f=os}},$=P.f||0,H=P.p||0,ee=P.b||0,Ee=P.l,ye=P.d,re=P.m,ue=P.n,Ne=b*8;do{if(!Ee){$=v(G,H,1);var lA=v(G,H+1,3);if(H+=3,lA)if(lA==1)Ee=L,ye=k,re=9,ue=5;else if(lA==2){var eA=v(G,H,31)+257,_t=v(G,H+10,15)+4,$t=eA+v(G,H+5,31)+1;H+=14;for(var hA=new A($t),nt=new A(19),Re=0;Re<_t;++Re)nt[a[Re]]=v(G,H+Re*3,7);H+=_t*3;for(var es=S(nt),ka=(1<<es)-1,Sa=B(nt,es,1),Re=0;Re<$t;){var As=Sa[v(G,H,ka)];H+=As&15;var Te=As>>4;if(Te<16)hA[Re++]=Te;else{var AA=0,wA=0;for(Te==16?(wA=3+v(G,H,3),H+=2,AA=hA[Re-1]):Te==17?(wA=3+v(G,H,7),H+=3):Te==18&&(wA=11+v(G,H,127),H+=7);wA--;)hA[Re++]=AA}}var ts=hA.subarray(0,eA),qe=hA.subarray(eA);re=S(ts),ue=S(qe),Ee=B(ts,re,1),ye=B(qe,ue,1)}else U(1);else{var Te=y(H)+4,it=G[Te-4]|G[Te-3]<<8,rt=Te+it;if(rt>b){O&&U(0);break}z&&Z(ee+it),f.set(G.subarray(Te,rt),ee),P.b=ee+=it,P.p=H=rt*8,P.f=$;continue}if(H>Ne){O&&U(0);break}}z&&Z(ee+131072);for(var Ma=(1<<re)-1,La=(1<<ue)-1,ot=H;;ot=H){var AA=Ee[x(G,H)&Ma],tA=AA>>4;if(H+=AA&15,H>Ne){O&&U(0);break}if(AA||U(2),tA<256)f[ee++]=tA;else if(tA==256){ot=H,Ee=null;break}else{var ss=tA-254;if(tA>264){var Re=tA-257,BA=s[Re];ss=v(G,H,(1<<BA)-1)+o[Re],H+=BA}var gt=ye[x(G,H)&La],It=gt>>4;gt||U(3),H+=gt&15;var qe=l[It];if(It>3){var BA=n[It];qe+=x(G,H)&(1<<BA)-1,H+=BA}if(H>Ne){O&&U(0);break}z&&Z(ee+131072);var as=ee+ss;if(ee<qe){var ns=V-qe,va=Math.min(qe,as);for(ns+ee<0&&U(3);ee<va;++ee)f[ee]=M[ns+ee]}for(;ee<as;++ee)f[ee]=f[ee-qe]}}P.l=Ee,P.p=ot,P.b=ee,P.f=$,Ee&&($=1,P.m=re,P.d=ye,P.n=ue)}while(!$);return ee!=f.length&&W?p(f,0,ee):f.subarray(0,ee)},K=new A(0);function J(G,P){return T(G,{i:2},P&&P.out,P&&P.dictionary)}var Ae=typeof TextDecoder<"u"&&new TextDecoder;try{Ae.decode(K,{stream:!0})}catch{}xs=J})();var Ks=xs,N=class Us{header;size;data;headerSize;constructor(e,t,s,n=8){this.header=e,this.size=t,this.data=s,this.headerSize=n}static read(e,t=!1,s=!0){let n=ie(e,4),a=t?xa(e,8):q(e,4);n===""&&(a=0);let i=s?e.slice(e.currentIndex,e.currentIndex+a):new j(0);return s&&(e.currentIndex+=a,a%2!==0&&e.currentIndex++),new Us(n,a,i,t?12:8)}static write(e,t,s=!1,n=!1){if(e.length!==4)throw new Error(`Invalid header length: ${e}`);let a=s?12:8,i=e,r=t.length,o=r;n&&(a+=4,o+=4,i="LIST");let g=a+r;g%2!==0&&g++;let C=new j(g);return pe(C,i),s?ct(C,o):te(C,o),n&&pe(C,e),C.set(t,a),C}static getParts(e,t,s=!1,n=!1){let a=e,i=t.reduce((g,C)=>C.length+g,0);n&&(i+=4,a="LIST");let r;s?(r=new j(8),ct(r,i)):(r=new j(4),te(r,i));let o=[Pe(a),r];return n&&o.push(Pe(e)),o.push(...t),i%2!==0&&o.push(new Uint8Array(1)),o}static writeParts(e,t,s=!1,n=!1){let a=s?12:8,i=e,r=t.reduce((l,h)=>h.length+l,0),o=r;n&&(a+=4,o+=4,i="LIST");let g=a+r;g%2!==0&&g++;let C=new j(g);pe(C,i),s?ct(C,o):te(C,o),n&&pe(C,e);for(let l of t)C.set(l,a),a+=l.length;return C}static findListType(e,t){return e.find(s=>s.header!=="LIST"?!1:(s.data.currentIndex=4,ve(s.data,4)===t))}};function pA(A,e){return{...e,...A}}var c=class yt{static infoEnabled=!1;static warnEnabled=!0;static groupEnabled=!1;static logFunctions={info:console.info.bind(console),warn:console.warn.bind(console),group:console.group.bind(console),groupEnd:console.groupEnd.bind(console),groupCollapsed:console.groupCollapsed.bind(console)};static setLogLevel(e,t,s){this.infoEnabled=e,this.warnEnabled=t,this.groupEnabled=s}static info(...e){this.infoEnabled&&this.logFunctions.info(...e)}static warn(...e){this.warnEnabled&&this.logFunctions.warn(...e)}static group(...e){this.groupEnabled&&this.logFunctions.group(...e)}static groupCollapsed(...e){this.groupEnabled&&this.logFunctions.groupCollapsed(...e)}static groupEnd(){this.groupEnabled&&this.logFunctions.groupEnd()}static unsupported(e,t,s=""){this.infoEnabled&&this.info(`%cUnsupported %c${e}%c message: %c${Ts(t)}%c. ${s}`,E.warn,E.recognized,E.warn,E.unrecognized,E.warn)}static gmInfo(e,t,s=""){this.infoEnabled&&this.coolInfo(`General MIDI ${e}`,t,s)}static gmFail(e,t){this.infoEnabled&&this.unsupported(`General MIDI ${e}`,t)}static gsInfo(e,t,s=""){this.infoEnabled&&this.coolInfo(`Roland GS ${e}`,t,s)}static gsFail(e,t,s=""){this.infoEnabled&&this.unsupported(`Roland GS ${e}`,t,s)}static xgInfo(e,t,s=""){this.infoEnabled&&this.coolInfo(`Yamaha XG ${e}`,t,s)}static xgFail(e,t,s=""){this.infoEnabled&&this.unsupported(`Yamaha XG ${e}`,t,s)}static coolInfo(e,t,s=""){this.infoEnabled&&(s?yt.info(`%c${e}%c is now set to %c${t}%c ${s}.`,E.recognized,E.info,E.value,E.info):yt.info(`%c${e}%c is now set to %c${t}%c.`,E.recognized,E.info,E.value,E.info))}},Js={ConsoleColors:E,readBigEndian:cA,readLittleEndian:xt,readLittleEndianIndexed:q,readBinaryString:ve,readBinaryStringIndexed:ie,readVariableLengthQuantity:Ie,inflateSync:Ks},R={noteOff:128,noteOn:144,polyPressure:160,controllerChange:176,programChange:192,channelPressure:208,pitchWheel:224,systemExclusive:240,timecode:241,songPosition:242,songSelect:243,tuneRequest:246,clock:248,start:250,continue:251,stop:252,activeSensing:254,reset:255,sequenceNumber:0,text:1,copyright:2,trackName:3,instrumentName:4,lyric:5,marker:6,cuePoint:7,programName:8,midiChannelPrefix:32,midiPort:33,endOfTrack:47,setTempo:81,smpteOffset:84,timeSignature:88,keySignature:89,sequenceSpecific:127},Q={bankSelect:0,modulationWheel:1,breathController:2,undefinedCC3:3,footController:4,portamentoTime:5,dataEntryMSB:6,mainVolume:7,balance:8,undefinedCC9:9,pan:10,expression:11,effectControl1:12,effectControl2:13,undefinedCC14:14,undefinedCC15:15,generalPurposeController1:16,generalPurposeController2:17,generalPurposeController3:18,generalPurposeController4:19,undefinedCC20:20,undefinedCC21:21,undefinedCC22:22,undefinedCC23:23,undefinedCC24:24,undefinedCC25:25,undefinedCC26:26,undefinedCC27:27,undefinedCC28:28,undefinedCC29:29,undefinedCC30:30,undefinedCC31:31,bankSelectLSB:32,modulationWheelLSB:33,breathControllerLSB:34,undefinedCC3LSB:35,footControllerLSB:36,portamentoTimeLSB:37,dataEntryLSB:38,mainVolumeLSB:39,balanceLSB:40,undefinedCC9LSB:41,panLSB:42,expressionLSB:43,effectControl1LSB:44,effectControl2LSB:45,undefinedCC14LSB:46,undefinedCC15LSB:47,undefinedCC16LSB:48,undefinedCC17LSB:49,undefinedCC18LSB:50,undefinedCC19LSB:51,undefinedCC20LSB:52,undefinedCC21LSB:53,undefinedCC22LSB:54,undefinedCC23LSB:55,undefinedCC24LSB:56,undefinedCC25LSB:57,undefinedCC26LSB:58,undefinedCC27LSB:59,undefinedCC28LSB:60,undefinedCC29LSB:61,undefinedCC30LSB:62,undefinedCC31LSB:63,sustainPedal:64,portamentoOnOff:65,sostenutoPedal:66,softPedal:67,legatoFootswitch:68,hold2Pedal:69,soundVariation:70,filterResonance:71,releaseTime:72,attackTime:73,brightness:74,decayTime:75,vibratoRate:76,vibratoDepth:77,vibratoDelay:78,soundController10:79,generalPurposeController5:80,generalPurposeController6:81,generalPurposeController7:82,generalPurposeController8:83,portamentoControl:84,undefinedCC85:85,undefinedCC86:86,undefinedCC87:87,undefinedCC88:88,undefinedCC89:89,undefinedCC90:90,reverbDepth:91,tremoloDepth:92,chorusDepth:93,variationDepth:94,phaserDepth:95,dataIncrement:96,dataDecrement:97,nonRegisteredParameterLSB:98,nonRegisteredParameterMSB:99,registeredParameterLSB:100,registeredParameterMSB:101,undefinedCC102LSB:102,undefinedCC103LSB:103,undefinedCC104LSB:104,undefinedCC105LSB:105,undefinedCC106LSB:106,undefinedCC107LSB:107,undefinedCC108LSB:108,undefinedCC109LSB:109,undefinedCC110LSB:110,undefinedCC111LSB:111,undefinedCC112LSB:112,undefinedCC113LSB:113,undefinedCC114LSB:114,undefinedCC115LSB:115,undefinedCC116LSB:116,undefinedCC117LSB:117,undefinedCC118LSB:118,undefinedCC119LSB:119,allSoundOff:120,resetAllControllers:121,localControlOnOff:122,allNotesOff:123,omniModeOff:124,omniModeOn:125,monoModeOn:126,polyModeOn:127},Le={pitchWheelRange:0,fineTuning:1,coarseTuning:2,modulationDepth:5,resetParameters:16383},le={partParameter:1,drumPitch:24,drumPitchFine:25,drumLevel:26,drumPan:28,drumReverb:29,drumChorus:30,drumDelay:31,awe32:127,SF2:120},De={vibratoRate:8,vibratoDepth:9,vibratoDelay:10,tvfCutoffFrequency:32,tvfResonance:33,envelopeAttackTime:99,envelopeDecayTime:100,envelopeReleaseTime:102},oe=class xe{ticks;statusByte;data;constructor(e,t,s){this.ticks=e,this.statusByte=t,this.data=s}static pitchWheel(e,t,s){return new xe(e,R.pitchWheel|t%16,new Uint8Array([s&127,s>>7&127]))}static channelPressure(e,t,s){return new xe(e,R.channelPressure|t%16,new Uint8Array([s]))}static programChange(e,t,s){return new xe(e,R.programChange|t%16,new Uint8Array([s]))}static controllerChange(e,t,s,n){return new xe(e,R.controllerChange|t%16,new Uint8Array([s,n]))}static systemExclusive(e,t){return new xe(e,R.systemExclusive,new Uint8Array(t))}static registeredParameter(e,t,s,n){if(s>16383||s<0||n>16383||n<0)throw new Error("Parameter and value must be between 0 and 16383.");return[xe.controllerChange(e,t,Q.registeredParameterMSB,s>>7),xe.controllerChange(e,t,Q.registeredParameterLSB,s&127),xe.controllerChange(e,t,Q.dataEntryMSB,n>>7),xe.controllerChange(e,t,Q.dataEntryLSB,n&127)]}},Cs=(A,e)=>{for(let t=0;t<A.length;t++)e.push(A.charCodeAt(t))};function Oa(A){if(!A.tracks)throw new Error("MIDI has no tracks!");let e=[];for(let s of A.tracks){let n=[],a=0,i;for(let r of s.events){let o=Math.max(0,r.ticks-a);if(r.statusByte===R.endOfTrack){a+=o;continue}let g;r.statusByte<=R.sequenceSpecific?(g=[255,r.statusByte,...Ct(r.data.length),...r.data],i=void 0):r.statusByte===R.systemExclusive?(g=[240,...Ct(r.data.length),...r.data],i=void 0):(g=[],i!==r.statusByte&&(i=r.statusByte,g.push(r.statusByte)),g.push(...r.data)),n.push(...Ct(o),...g),a+=o}n.push(0,255,R.endOfTrack,0),e.push(n)}let t=[];Cs("MThd",t),t.push(...SA(6,4),0,A.format,...SA(A.tracks.length,2),...SA(A.timeDivision,2));for(let s of e)Cs("MTrk",t),t=t.concat(SA(s.length,4),s);return new Uint8Array(t).buffer}var MA=`SPESSASYNTH_EMBEDDED_BANK_${Math.random()}_DO_NOT_DELETE`,Ha=32767,Ya={time:0},qa=.03,za=.07,Va=.6;var GA=1/Math.cos(Math.PI/4)**2;var ls=121,he=class{static getDefaultBank(A){return A==="gm2"?ls:0}static getDrumBank(A){switch(A){default:throw new Error(`${A} doesn't have a bank MSB for drums.`);case"gm2":return 120;case"xg":return 127}}static isXGDrum(A){return A===120||A===127}static isValidXGMSB(A){return this.isXGDrum(A)||A===64||A===ls}static isSystemXG(A){return A==="gm2"||A==="xg"}static addBankOffset(A,e,t){return this.isXGDrum(A)&&t?A:Math.min(A+e,127)}static subtractBankOffset(A,e,t){return this.isXGDrum(A)&&t?A:Math.max(0,A-e)}},be=class wt{static toMIDIString(e){return e.isGMGSDrum?`DRUM:${e.program}`:`${e.bankLSB}:${e.bankMSB}:${e.program}`}static fromMIDIString(e){let t=e.split(":");if(t.length>3||t.length<2)throw new Error(`Invalid MIDI string: ${e}`);return e.startsWith("DRUM")?{bankMSB:0,bankLSB:0,program:Number.parseInt(t[1]),isGMGSDrum:!0}:{bankLSB:Number.parseInt(t[0]),bankMSB:Number.parseInt(t[1]),program:Number.parseInt(t[2]),isGMGSDrum:!1}}static toFullMIDIString(e){return`${this.toMIDIString(e)} ${e.isDrum?"D":"M"} ${e.name}`}static fromFullMIDIString(e){let t=e.indexOf(" "),s=e.indexOf(" ",t+1);if(t===-1||s===-1)throw new Error(`Invalid named MIDI string: ${e}`);let n=e.slice(0,Math.max(0,t)),a=e.slice(t+1,s),i=e.slice(Math.max(0,s+1));return{...wt.fromMIDIString(n),isDrum:a==="D",name:i}}static matches(e,t){return e.isGMGSDrum||t.isGMGSDrum?e.isGMGSDrum===t.isGMGSDrum&&e.program===t.program:e.program===t.program&&e.bankLSB===t.bankLSB&&e.bankMSB===t.bankMSB}static compare(e,t){return e.isGMGSDrum&&!t.isGMGSDrum?1:!e.isGMGSDrum&&t.isGMGSDrum?-1:e.program!==t.program?e.program-t.program:e.bankMSB!==t.bankMSB?e.bankMSB-t.bankMSB:e.bankLSB-t.bankLSB}static isXGDrum(e){return e.isDrum&&!e.isGMGSDrum}static selectPatch(e,t,s){if(e.length===0)throw new Error("No presets!");t.isGMGSDrum&&he.isSystemXG(s)&&(t={...t,isGMGSDrum:!1,bankLSB:0,bankMSB:he.getDrumBank(s)});let{isGMGSDrum:n,bankLSB:a,bankMSB:i,program:r}=t,o=he.isSystemXG(s),g=he.isXGDrum(i)&&o,C=e.find(d=>this.matches(d,t));if(C&&(!g||g&&this.isXGDrum(C)))return C;let l=d=>{c.info(`%cPreset %c${wt.toMIDIString(t)}%c not found. (${s}) Replaced with %c${this.toFullMIDIString(d)}`,E.warn,E.unrecognized,E.warn,E.value)};if(n){let d=e.find(B=>B.isGMGSDrum&&B.program===r);return d||(d=e.find(B=>B.isDrum&&B.program===r),d)?(l(d),d):(d=this.getAnyDrums(e,!1),l(d),d)}if(g){let d=e.find(B=>B.program===r&&B.isDrum&&!B.isGMGSDrum);return d||(d=e.find(B=>B.isDrum&&B.program===r),d&&d.program<49)?(l(d),d):(d=this.getAnyDrums(e,!0),l(d),d)}let h=e.filter(d=>d.program===r&&!d.isDrum);if(h.length===0)return l(e[0]),e[0];if(C=o?h.find(d=>d.bankLSB===a):h.find(d=>d.bankMSB===i),C)return l(C),C;if(a!==64||!o){let d=Math.max(i,a);if(C=h.find(B=>B.bankLSB===d||B.bankMSB===d),C)return l(C),C}return l(h[0]),h[0]}static getAnyDrums(e,t){let s=t?e.find(n=>this.isXGDrum(n)):e.find(n=>n.isGMGSDrum);return s||(e.find(n=>n.isDrum)??e[0])}},ge=Object.freeze({type:"Other"}),_=class ae{static analyzeSysEx(e){if(e.length<3)return ge;switch(e[0]){default:return ge;case 126:case 127:return this.analyzeGM(e);case 65:return this.analyzeGS(e);case 67:return this.analyzeXG(e)}}static analyzeRPN(e,t,s){switch(t){default:return ge;case Le.pitchWheelRange:return{type:"Channel MIDI Param",channel:e,parameter:"pitchWheelRange",value:s/128};case Le.fineTuning:return{type:"Channel MIDI Param",channel:e,parameter:"fineTune",value:(s-8192)/81.92};case Le.coarseTuning:return{type:"Channel MIDI Param",channel:e,parameter:"keyShift",value:(s>>7)-64};case Le.modulationDepth:return{type:"Channel MIDI Param",channel:e,parameter:"modulationDepth",value:s/1.28}}}static analyzeNRPN(e,t,s){let n=t>>7,a=t&127;switch(n){default:return ge;case le.partParameter:switch(a){default:return ge;case De.vibratoRate:return{type:"Controller Change",channel:e,controller:Q.vibratoRate,value:s>>7};case De.vibratoDepth:return{type:"Controller Change",channel:e,controller:Q.vibratoDepth,value:s>>7};case De.vibratoDelay:return{type:"Controller Change",channel:e,controller:Q.vibratoDelay,value:s>>7};case De.tvfCutoffFrequency:return{type:"Controller Change",channel:e,controller:Q.brightness,value:s>>7};case De.tvfResonance:return{type:"Controller Change",channel:e,controller:Q.filterResonance,value:s>>7};case De.envelopeAttackTime:return{type:"Controller Change",channel:e,controller:Q.attackTime,value:s>>7};case De.envelopeDecayTime:return{type:"Controller Change",channel:e,controller:Q.decayTime,value:s>>7};case De.envelopeReleaseTime:return{type:"Controller Change",channel:e,controller:Q.releaseTime,value:s>>7}}case le.drumPitch:case le.drumPitchFine:case le.drumLevel:case le.drumPan:case le.drumReverb:case le.drumChorus:case le.drumDelay:return{type:"Drum Setup"}}}static setGlobalMIDIParameter(e,t,s,n){switch(s){case"system":return[ae.reset(e,n)];case"keyShift":switch(t){default:return[ae.deviceControlMessage(e,4,[0,n+64])];case"xg":return[ae.xgMessage(e,0,0,6,[n+64])];case"gs":return[ae.gsMessage(e,64,0,5,[n+64])]}case"fineTune":switch(t){default:{let a=Math.floor(n*81.92+8192);return[ae.deviceControlMessage(e,3,[a&127,a>>7&127])]}case"xg":{let a=Math.floor(n*10+1024);return[ae.xgMessage(e,0,0,0,[a>>12&15,a>>8&15,a>>4&15,a&15])]}case"gs":{let a=Math.floor(n*10+1024);return[ae.gsMessage(e,64,0,0,[a>>12&15,a>>8&15,a>>4&15,a&15])]}}case"volume":switch(t){default:{let a=Math.floor(n*16383);return[ae.deviceControlMessage(e,1,[a&127,a>>7&127])]}case"xg":{let a=Math.floor(n*127);return[ae.xgMessage(e,0,0,4,[a])]}case"gs":{let a=Math.floor(n*127);return[ae.gsMessage(e,64,0,4,[a])]}}case"pan":if(t==="gs"){let a=Math.floor(n*63)+64;return[ae.gsMessage(e,64,0,6,[a])]}else{let a=Math.floor(n*8192)+8192;return[ae.deviceControlMessage(e,2,[a&127,a>>7&127])]}}}static setChannelMIDIParameter(e,t,s,n,a){t%=16;let i=ae.channelToSyx(t);switch(n){case"pressure":return[oe.channelPressure(e,t,a)];case"pitchWheel":return[oe.pitchWheel(e,t,a)];case"pitchWheelRange":return oe.registeredParameter(e,t,Le.pitchWheelRange,Math.floor(a*128));case"modulationDepth":return oe.registeredParameter(e,t,Le.modulationDepth,Math.floor(a*1.28));case"rxChannel":return s==="xg"?[ae.xgMessage(e,8,t,4,[a])]:[ae.gsMessage(e,64,16|i,2,[a])];case"polyMode":return a?[oe.controllerChange(e,t,Q.polyModeOn,0)]:[oe.controllerChange(e,t,Q.monoModeOn,0)];case"keyShift":return oe.registeredParameter(e,t,Le.coarseTuning,a+64<<7);case"fineTune":return oe.registeredParameter(e,t,Le.fineTuning,Math.floor(a*81.92+8192));case"randomPan":return s==="xg"?[ae.xgMessage(e,8,t,14,[0])]:[ae.gsMessage(e,64,16|i,28,[0])];case"assignMode":switch(s){default:case"gs":return[ae.gsMessage(e,64,16|i,20,[a])];case"xg":return[ae.xgMessage(e,8,t,6,[a])]}case"efxAssign":return[ae.gsMessage(e,64,64|i,34,[a?1:0])];case"cc1":return[ae.gsMessage(e,64,16|i,31,[a])];case"cc2":return[ae.gsMessage(e,64,16|i,32,[a])];case"drumMap":return[ae.gsMessage(e,64,16|i,21,[a])];case"velocitySenseDepth":return s==="xg"?[ae.xgMessage(e,8,t,12,[a])]:[ae.gsMessage(e,64,16|i,26,[a])];case"velocitySenseOffset":return s==="xg"?[ae.xgMessage(e,8,t,13,[a])]:[ae.gsMessage(e,64,16|i,27,[a])]}}static syxToChannel(e){return[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][e%16]}static channelToSyx(e){return[1,2,3,4,5,6,7,8,9,0,10,11,12,13,14,15][e%16]}static gs(e,t,s,n){let a=128-(e+t+s+n.reduce((i,r)=>i+r,0))%128&127;return[65,16,66,18,e,t,s,...n,a,247]}static gsMessage(e,t,s,n,a){return oe.systemExclusive(e,this.gs(t,s,n,a))}static xg(e,t,s,n){return[67,16,76,e,t,s,...n,247]}static xgMessage(e,t,s,n,a){return oe.systemExclusive(e,this.xg(t,s,n,a))}static deviceControl(e,t){return[127,127,4,e,...t,247]}static deviceControlMessage(e,t,s){return oe.systemExclusive(e,this.deviceControl(t,s))}static reset(e,t){switch(t){case"gs":return this.gsMessage(e,64,0,127,[0]);case"xg":return this.xgMessage(e,0,0,126,[0]);case"gm":return oe.systemExclusive(e,[126,127,9,1,127]);case"gm2":return oe.systemExclusive(e,[126,127,9,3,127])}}static analyzeGM(e){if(e.length<4)return ge;if(e[2]===4)switch(e[3]){default:return ge;case 1:{let t=(e[5]<<7|e[4])/16383;return{type:"Global MIDI Param",parameter:"volume",value:Math.pow(t,2)}}case 2:return{type:"Global MIDI Param",parameter:"pan",value:((e[5]<<7|e[4])-8192)/8192};case 3:return{type:"Global MIDI Param",parameter:"fineTune",value:((e[5]<<7|e[4])-8192)/81.92};case 4:return{type:"Global MIDI Param",parameter:"keyShift",value:e[5]-64};case 5:if(e[4]!==1||e[5]!==1||e[6]!==1||e[7]!==1)return ge;switch(e[8]){default:return ge;case 1:switch(e[9]){default:return ge;case 0:case 1:return{type:"Reverb Param"}}case 2:switch(e[9]){default:return ge;case 0:case 1:case 2:case 3:case 4:return{type:"Chorus Param"}}}}if(e[2]!==9)return ge;switch(e[3]){default:return ge;case 1:return{type:"Global MIDI Param",parameter:"system",value:"gm"};case 2:return{type:"Global MIDI Param",parameter:"system",value:"gm"};case 3:return{type:"Global MIDI Param",parameter:"system",value:"gm2"}}}static analyzeXG(e){if(e[2]!==76||e.length<7)return ge;let t=e[3],s=e[4],n=e[5],a=e[6];if(t===6||t===7)return{type:"Display Data"};if(t===0&&s===0)switch(n){default:return ge;case 0:return{type:"Global MIDI Param",parameter:"fineTune",value:(((e[6]&15)<<12|(e[7]&15)<<8|(e[8]&15)<<4|e[9]&15)-1024)/10};case 6:return{type:"Global MIDI Param",parameter:"keyShift",value:a-64};case 126:case 127:return{type:"Global MIDI Param",parameter:"system",value:"xg"}}if(t===2&&s===1)return n<=21?{type:"Reverb Param"}:n<=53?{type:"Chorus Param"}:{type:"Variation Param"};if(t===3&&s===0)return{type:"Variation Param"};if(t===8){let i=s;switch(n){default:return ge;case 1:return{type:"Controller Change",channel:i,controller:Q.bankSelect,value:a};case 2:return{type:"Controller Change",channel:i,controller:Q.bankSelectLSB,value:a};case 3:return{type:"Program Change",channel:i,value:a};case 5:return{type:"Controller Change",channel:i,controller:a===1?Q.polyModeOn:Q.monoModeOn,value:0};case 6:return{type:"Channel MIDI Param",channel:i,parameter:"assignMode",value:a};case 7:return{type:"Drums On",channel:i,isDrum:a>0};case 8:return{type:"Channel MIDI Param",channel:i,parameter:"keyShift",value:a-64};case 11:return{type:"Controller Change",channel:i,controller:Q.mainVolume,value:a};case 14:return a===0?{type:"Channel MIDI Param",channel:i,parameter:"randomPan",value:!0}:{type:"Controller Change",channel:i,controller:Q.pan,value:a};case 18:return{type:"Controller Change",channel:i,controller:Q.chorusDepth,value:a};case 19:return{type:"Controller Change",channel:i,controller:Q.reverbDepth,value:a};case 21:return{type:"Controller Change",channel:i,controller:Q.vibratoRate,value:a};case 22:return{type:"Controller Change",channel:i,controller:Q.vibratoDepth,value:a};case 23:return{type:"Controller Change",channel:i,controller:Q.vibratoDelay,value:a};case 24:return{type:"Controller Change",channel:i,controller:Q.brightness,value:a};case 25:return{type:"Controller Change",channel:i,controller:Q.filterResonance,value:a};case 26:return{type:"Controller Change",channel:i,controller:Q.attackTime,value:a};case 27:return{type:"Controller Change",channel:i,controller:Q.decayTime,value:a};case 12:return{type:"Controller Change",channel:i,controller:Q.releaseTime,value:a}}}return t>>4===3?{type:"Drum Setup"}:ge}static analyzeGS(e){if(e.length<10||e[3]!==18)return ge;if(e[2]===69)return{type:"Display Data"};if(e[2]!==66)return ge;let t=e[4],s=e[5],n=e[6],a=e[7];if((t===0||t===64)&&s===0)switch(n){case 0:return{type:"Global MIDI Param",parameter:"fineTune",value:((a<<12|e[8]<<8|e[9]<<4|e[10])-1024)/10};case 4:return{type:"Global MIDI Param",parameter:"volume",value:a/127};case 5:return{type:"Global MIDI Param",parameter:"keyShift",value:a-64};case 6:return{type:"Global MIDI Param",parameter:"pan",value:(a-64)/63};case 127:switch(a){case 0:case 1:return{type:"Global MIDI Param",parameter:"system",value:"gs"};case 127:return{type:"Global MIDI Param",parameter:"system",value:"gm"}}return ge}if(t===65)return{type:"Drum Setup"};if(t!==64&&t!==80)return ge;let i=t===80?16:0;if(s===1){if(n>=48&&n<=55)return{type:"Reverb Param"};if(n>=56&&n<=64)return{type:"Chorus Param"};if(n>=80&&n<=90)return{type:"Delay Param"}}if(s===3&&n>=0&&n<=127)return{type:"Insertion Param"};if(s>>4===1){let r=ae.syxToChannel(s&15)+i;switch(n){default:return ge;case 0:return{type:"Program Change",channel:r,value:a};case 19:return{type:"Channel MIDI Param",channel:r,parameter:"polyMode",value:a===1};case 20:return{type:"Channel MIDI Param",channel:r,parameter:"assignMode",value:a};case 21:return{type:"Drums On",channel:r,isDrum:a>0};case 22:return{type:"Channel MIDI Param",channel:r,parameter:"keyShift",value:a-64};case 25:return{type:"Controller Change",channel:r,controller:Q.mainVolume,value:a};case 26:return{type:"Channel MIDI Param",channel:r,parameter:"velocitySenseDepth",value:a};case 27:return{type:"Channel MIDI Param",channel:r,parameter:"velocitySenseOffset",value:a};case 28:return a===0?{type:"Channel MIDI Param",channel:r,parameter:"randomPan",value:!0}:{type:"Controller Change",channel:r,controller:Q.pan,value:a};case 31:return{type:"Channel MIDI Param",channel:r,parameter:"cc1",value:a};case 32:return{type:"Channel MIDI Param",channel:r,parameter:"cc2",value:a};case 33:return{type:"Controller Change",channel:r,controller:Q.chorusDepth,value:a};case 34:return{type:"Controller Change",channel:r,controller:Q.reverbDepth,value:a};case 42:return{type:"Channel MIDI Param",channel:r,parameter:"fineTune",value:((a<<7|e[8])-8192)/81.92};case 44:return{type:"Controller Change",channel:r,controller:Q.variationDepth,value:a};case 48:return{type:"Controller Change",channel:r,controller:Q.vibratoRate,value:a};case 49:return{type:"Controller Change",channel:r,controller:Q.vibratoDepth,value:a};case 50:return{type:"Controller Change",channel:r,controller:Q.brightness,value:a};case 51:return{type:"Controller Change",channel:r,controller:Q.filterResonance,value:a};case 52:return{type:"Controller Change",channel:r,controller:Q.attackTime,value:a};case 53:return{type:"Controller Change",channel:r,controller:Q.decayTime,value:a};case 54:return{type:"Controller Change",channel:r,controller:Q.releaseTime,value:a};case 55:return{type:"Controller Change",channel:r,controller:Q.vibratoDelay,value:a}}}if(s>>4===4){let r=ae.syxToChannel(s&15)+i;switch(n){default:return ge;case 0:case 1:return{type:"Controller Change",channel:r,controller:Q.bankSelectLSB,value:a};case 34:return{type:"Channel MIDI Param",channel:r,parameter:"efxAssign",value:a===1}}}return ge}},Wa="Created using SpessaSynth";function ja(A,e,t){let s="gm",n=[],a=new Array(A.tracks.length).fill(0),i=16+Math.max(...A.portChannelOffsetMap),r=[];for(let o=0;o<i;o++)r.push({program:0,isDrum:o%16===9,lastBank:void 0,lastBankLSB:void 0,hasBankSelect:!1,programChangeTrack:void 0,programChangeIndex:void 0});A.iterate((o,g,C)=>{let l=A.portChannelOffsetMap[a[g]];if(o.statusByte===R.midiPort){a[g]=o.data[0];return}let h=o.statusByte&240;if(h!==R.controllerChange&&h!==R.programChange&&h!==R.systemExclusive)return;if(h===R.systemExclusive){let u=_.analyzeSysEx(o.data);switch(u.type){default:return;case"Drums On":{let w=u.channel+l;if(!r[w])return;r[w].isDrum=u.isDrum;return}case"Global MIDI Param":u.parameter==="system"&&(s=u.value,u.value==="gm"&&n.push({tNum:g,e:o}));break;case"Controller Change":{let w=A.tracks[g];if(u.channel>=16)return;let L=oe.controllerChange(o.ticks,u.channel,u.controller,u.value);w.events[C[g]]=L,o=L,c.info("%cReplaced a system exclusive with controller change!",E.info);break}case"Program Change":{if(u.channel>=16)return;let w=A.tracks[g],L=oe.programChange(o.ticks,u.channel,u.value);w.events[C[g]]=L,o=L,c.info("%cReplaced a system exclusive with program change!",E.info);break}}}h=o.statusByte&240;let d=(o.statusByte&15)+l,B=r[d];if(h===R.programChange){let u={program:o.data[0],bankLSB:B.lastBankLSB?.data?.[1]??0,bankMSB:he.subtractBankOffset(B.lastBank?.data?.[1]??0,A.bankOffset,s==="xg"),isGMGSDrum:B.isDrum},w=t.getPreset(u,s);if(c.info(`%cInput patch: %c${be.toMIDIString(u)}%c. Channel %c${d}%c. Changing patch to ${w.toString()}.`,E.info,E.unrecognized,E.info,E.recognized,E.info),o.data[0]=w.program,B.program=w.program,B.programChangeTrack??=g,B.programChangeIndex??=C[g],w.isGMGSDrum&&he.isSystemXG(s)||B.lastBank===void 0||(B.lastBank.data[1]=he.addBankOffset(w.bankMSB,e,s==="xg"),B.lastBankLSB===void 0))return;B.lastBankLSB.data[1]=w.bankLSB;return}let m=o.data[0]===Q.bankSelectLSB;o.data[0]!==Q.bankSelect&&!m||(B.hasBankSelect=!0,m?B.lastBankLSB=o:B.lastBank=o)});for(let o=0;o<r.length;o++){let g=r[o];if(g.hasBankSelect)continue;let C=o%16,l=Math.floor(o/16)*16,h=A.portChannelOffsetMap.indexOf(l),d=A.tracks.filter(k=>k.port===h&&k.channels.has(C));if(d.length===0)continue;let B=g.programChangeTrack?A.tracks[g.programChangeTrack]:void 0,m=g.programChangeIndex??-1;if(!B){let k=d[0],S=k.events.findIndex(y=>y.statusByte>=128&&y.statusByte<240&&(y.statusByte&15)===C);if(S===-1)continue;let v=k.events[S].ticks,x=t.getPreset({bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1},s).program;c.info(`%cAdding default program change for %c${o}`,E.info,E.recognized),k.addEvents(S,oe.programChange(v,C,x)),m=S,B=k}let u=B.events[m].ticks,w=t.getPreset({bankLSB:0,bankMSB:0,program:g.program,isGMGSDrum:g.isDrum},s);c.info(`%cAdding bank select for %c${o}%c Targeting preset: %c${w.toString()}`,E.info,E.recognized,E.info,E.recognized);let L=he.addBankOffset(w.bankMSB,e,s==="xg");B.addEvents(m,oe.controllerChange(u,C,Q.bankSelect,L))}if(s==="gm"&&!he.isSystemXG(s)){for(let g of n){let C=A.tracks[g.tNum];C.deleteEvent(C.events.indexOf(g.e))}let o=0;A.tracks[0].events[0].statusByte===R.trackName&&o++,A.tracks[0].addEvents(o,_.reset(0,"gs"))}A.flush()}var hs={bankOffset:0,metadata:{},correctBankOffset:!0,soundBank:void 0};function Za(A,e,t){let s=t.metadata;if(c.group("%cWriting the RMIDI File...",E.info),c.info("metadata",s),c.info("Initial bank offset",A.bankOffset),t.correctBankOffset){if(!t.soundBank)throw new Error("Sound bank must be provided if correcting bank offset.");ja(A,t.bankOffset,t.soundBank)}let n=new j(A.writeMIDI());s.name??=A.getName(),s.creationDate??=new Date,s.copyright??=Wa,s.software??="SpessaSynth",Object.entries(s).forEach(o=>{let g=o;g[1]&&A.setRMIDInfo(g[0],g[1])});let a=[],i=(o,g)=>{a.push(N.write(o,g))};for(let o of Object.entries(A.rmidiInfo)){let g=o[0],C=o[1];switch(g){case"album":i("IALB",C),i("IPRD",C);break;case"software":i("ISFT",C);break;case"infoEncoding":i("IENC",C);break;case"creationDate":i("ICRD",C);break;case"picture":i("IPIC",C);break;case"name":i("INAM",C);break;case"artist":i("IART",C);break;case"genre":i("IGNR",C);break;case"copyright":i("ICOP",C);break;case"comment":i("ICMT",C);break;case"engineer":i("IENG",C);break;case"subject":i("ISBJ",C);break;case"midiEncoding":i("MENC",C);break}}let r=new j(2);return Kt(r,t.bankOffset,2),a.push(N.write("DBNK",r)),c.info("%cFinished!",E.info),c.groupEnd(),N.writeParts("RIFF",[Pe("RMID"),N.write("data",n),N.writeParts("INFO",a,!1,!0),new j(e)]).buffer}var HA=class{rpnMSB={v:127,track:0,event:0};rpnLSB={v:127,track:0,event:0};nrpnMSB={v:0,track:0,event:0};nrpnLSB={v:0,track:0,event:0};dataMSB={v:0,track:0,event:0};dataLSB={v:0,track:0,event:0};channel;isRegistered=!0;constructor(A){this.channel=A}get paramMSB(){return this.isRegistered?this.rpnMSB:this.nrpnMSB}get paramLSB(){return this.isRegistered?this.rpnLSB:this.nrpnLSB}reset(){this.isRegistered=!0,this.rpnLSB.v=127,this.rpnMSB.v=127,this.nrpnMSB.v=0,this.nrpnLSB.v=0,this.resetData()}controllerChange(A,e,t,s){switch(A){case Q.registeredParameterMSB:this.resetData(),this.isRegistered=!0,this.rpnMSB={v:e,track:t,event:s};break;case Q.registeredParameterLSB:this.resetData(),this.isRegistered=!0,this.rpnLSB={v:e,track:t,event:s};break;case Q.nonRegisteredParameterMSB:this.resetData(),this.isRegistered=!1,this.nrpnMSB={v:e,track:t,event:s};break;case Q.nonRegisteredParameterLSB:this.resetData(),this.isRegistered=!1,this.nrpnLSB={v:e,track:t,event:s};break;case Q.dataEntryMSB:return this.dataMSB={v:e,track:t,event:s},this.analyze();case Q.dataEntryLSB:return this.dataLSB={v:e,track:t,event:s},this.analyze()}}resetData(){this.dataLSB.v=0,this.dataMSB.v=0}analyze(){let A=this.dataMSB.v<<7|this.dataLSB.v;return this.isRegistered?_.analyzeRPN(this.channel,this.rpnMSB.v<<7|this.rpnLSB.v,A):_.analyzeNRPN(this.channel,this.nrpnMSB.v<<7|this.nrpnLSB.v,A)}};function Xa(A,e){c.groupCollapsed("%cSearching for all used programs and keys...",E.info);let t=16+Math.max(...A.portChannelOffsetMap),s=[],n="gs",a=0,i=h=>{n=h,a=0;for(let d=0;d<t;d++){let B=s[d];B.isDrum=d%16===9,B.bankMSB=he.getDefaultBank(h),B.bankLSB=0,B.keyShift=0,B.param.reset()}};for(let h=0;h<t;h++){let d=h%16===9;s.push({preset:e.getPreset({bankLSB:0,bankMSB:0,isGMGSDrum:d,program:0},n),bankMSB:0,bankLSB:0,param:new HA(h),isDrum:d,keyShift:0})}let r=new Map,o=A.tracks.map(h=>h.port),g=A.portChannelOffsetMap,{timeline:C,tracks:l}=A;for(let h of C){let d=h.tr,B=h.ev,m=l[d].events[B];if(m.statusByte===R.midiPort&&A.tracks[d].channels.size>0){let L=m.data[0];g[L]===void 0&&(c.warn(`Invalid port ${L} on track ${d}. (No offset found in the MIDI map.`),L=0),o[d]=L;continue}let u=m.statusByte&240;if(u!==R.noteOn&&u!==R.controllerChange&&u!==R.programChange&&u!==R.systemExclusive)continue;let w=g[o[d]]||0;switch(u){case R.programChange:{let L=s[(m.statusByte&15)+w];L.preset=e.getPreset({bankMSB:L.bankMSB,bankLSB:L.bankLSB,program:m.data[0],isGMGSDrum:L.isDrum},n);break}case R.controllerChange:{let L=s[(m.statusByte&15)+w],k=m.data[0],S=m.data[1];switch(k){case Q.registeredParameterMSB:case Q.registeredParameterLSB:case Q.nonRegisteredParameterLSB:case Q.nonRegisteredParameterMSB:L.param.controllerChange(k,S,d,B);break;case Q.dataEntryMSB:case Q.dataEntryLSB:{let v=L.param.controllerChange(k,S,d,B);v?.type==="Channel MIDI Param"&&v.parameter==="keyShift"&&(L.keyShift=L.isDrum?0:v.value);break}case Q.resetAllControllers:L.param.reset();break;case Q.bankSelect:L.bankMSB=S;break;case Q.bankSelectLSB:L.bankLSB=S;break}break}case R.noteOn:{let L=s[(m.statusByte&15)+w];if(m.data[1]===0||!L.preset)continue;let k=r.get(L.preset);k||(k=new Map,r.set(L.preset,k));let S=m.data[0]+(L.isDrum?0:a)+L.keyShift,v=k.get(S);v||(v=new Set,k.set(S,v)),v.add(m.data[1]);break}case R.systemExclusive:{let L=_.analyzeSysEx(m.data);switch(L.type){default:break;case"Global MIDI Param":L.parameter==="keyShift"?a=L.value:L.parameter==="system"&&(i(L.value),c.info(`%c${L.value.toUpperCase()} on detected!`,E.recognized));break;case"Channel MIDI Param":if(L.parameter==="keyShift"){let k=s[L.channel];if(!k)break;k.keyShift=k.isDrum?0:L.value}break;case"Drums On":{let k=L.channel+w;if(!s[k])break;s[k].isDrum=L.isDrum;break}case"Program Change":{let k=s[L.channel+w];if(!k)break;k.preset=e.getPreset({bankMSB:k.bankMSB,bankLSB:k.bankLSB,program:L.value,isGMGSDrum:k.isDrum},n);break}case"Controller Change":{let k=s[L.channel+w];if(!k)break;L.controller===Q.bankSelectLSB?k.bankLSB=L.value:L.controller===Q.bankSelect&&(k.bankMSB=L.value)}}}}}for(let[h,d]of r.entries())d.size===0&&(c.info(`%cDetected change but no keys for %c${h.name}`,E.info,E.value),r.delete(h));return c.groupEnd(),r}var _a=A=>(A.data=new j(A.data.buffer),6e7/cA(A.data,3));function $a(A,e=0){let t=[];for(let l=0;l<16;l++)t.push([]);let s=0,n=60/(120*A.timeDivision),a=0,i=0,r=[];for(let l=0;l<16;l++)r.push(new Map);let o=(l,h)=>{let d=r[h].get(l);if(d===void 0)return;let B=d.shift();if(B===void 0)return;let m=t[h][B],u=s-m.start;m.length=h===9?Math.max(u,e):u,i--},{timeline:g,tracks:C}=A;for(;a<g.length;){let l=g[a],h=C[l.tr].events[l.ev],d=h.statusByte>>4,B=h.statusByte&15;if(d===8)o(h.data[0],B);else if(d===9){let u=h.data[0],w=h.data[1];if(w===0)o(u,B);else{let L={midiNote:u,start:s,length:-1,velocity:w},k=t[B];k.push(L);let S=r[B];S.has(u)||S.set(u,[]),r[B].get(u)?.push(k.length-1),i++}}else h.statusByte===81&&(n=60/(_a(h)*A.timeDivision));if(++a>=g.length)break;let m=g[a];s+=n*(C[m.tr].events[m.ev].ticks-h.ticks)}if(i>0)for(let l=0;l<r.length;l++)for(let h of r[l].values())for(let d of h){let B=t[l][d];B.length=s-B.start}return t}var en={character:49,preLowpass:50,level:51,time:52,delayFeedback:53,preDelayTime:55},An={preLowpass:57,level:58,feedback:59,delay:60,rate:61,depth:62,sendLevelToReverb:63,sendLevelToDelay:64},tn={preLowpass:81,timeCenter:82,timeRatioLeft:83,timeRatioRight:84,levelCenter:85,levelLeft:86,levelRight:87,level:88,feedback:89,sendLevelToReverb:90};function sn(A,e){c.groupCollapsed("%cApplying changes to the MIDI file...",E.info);let{channels:t,reverbParams:s,chorusParams:n,delayParams:a,insertionParams:i}=e;c.info("Desired channel changes",t),c.info("Desired reverb parameters",s),c.info("Desired chorus parameters",n),c.info("Desired delay parameters",a),c.info("Desired insertion parameters",i);let r=e.drumSetupParams==="clear",o=new Set,g=new Map;if(t)for(let[y,p]of t)p==="clear"?o.add(y):g.set(y,p);let C=(e.midiParams?.system==="clear"?void 0:e.midiParams?.system)??"gs",l=!1,h=0,d=0,B=A.tracks.map(y=>y.port),m={},u=0,w=(y,p)=>{A.tracks[y].channels.size!==0&&(u===0&&(u+=16,m[p]=0),m[p]===void 0&&(m[p]=u,u+=16),B[y]=p)};for(let[y,p]of A.tracks.entries())w(y,p.port);let L=u,k=[];for(let y=0;y<L;y++)k.push({isFirstNoteOn:!0,param:new HA(y),clearedParams:{pLSB:!0,pMSB:!0,data:!0},keyShift:g.get(y)?.keyShift??0,fineTune:g.get(y)?.fineTune??0,currentFineTune:0,currentKeyShift:0});if(A.iterate((y,p,D)=>{let U=A.tracks[p],T=D[p],K=()=>{U.deleteEvent(T),D[p]--},J=z=>{let O=k[z],Z=O.param,$=Z.paramMSB,H=Z.paramLSB;c.info(`%cClearing Non/Registered Parameter on ${z}. Clear MSB: %c${O.clearedParams.pMSB}%c, clear LSB: %c${O.clearedParams.pLSB}%c, clear data: %c${O.clearedParams.data}.`,E.info,E.recognized,E.info,E.recognized,E.info,E.recognized),O.clearedParams.data||(K(),p===$.track&&T<$.event&&$.event--,p===H.track&&T<H.event&&H.event--,O.clearedParams.data=!0),O.clearedParams.pMSB||(A.tracks[$.track].deleteEvent($.event),D[$.track]--,$.track===H.track&&$.event<H.event&&H.event--,O.clearedParams.pMSB=!0),O.clearedParams.pLSB||(A.tracks[H.track].deleteEvent(H.event),D[H.track]--,O.clearedParams.pLSB=!0)},Ae=z=>{U.addEvents(T,z),D[p]++},G=(...z)=>{for(let O=z.length-1;O>=0;O--)Ae(z[O])},P=m[B[p]]||0;if(y.statusByte===R.midiPort){w(p,y.data[0]);return}if(y.statusByte<R.noteOff||y.statusByte>R.systemExclusive)return;let f=y.statusByte&240,M=y.statusByte&15,b=M+P;if(y.statusByte!==R.systemExclusive&&o.has(b)){K();return}let V=k[b],W=g.get(b);switch(f){case R.noteOn:if(!W)break;if(V.isFirstNoteOn){if(V.isFirstNoteOn=!1,W.controllers)for(let[O,Z]of W.controllers)Z!=="clear"&&Ae(oe.controllerChange(y.ticks,M,O,Z));if(W.midiParams?.fineTune!==void 0&&W.midiParams.fineTune!=="clear"){let O=V.fineTune+W.midiParams.fineTune;V.currentKeyShift=Math.trunc(O/100),W.midiParams.fineTune=O%100}else{let O=V.fineTune+V.currentFineTune;V.currentKeyShift=Math.trunc(O/100),W.midiParams??={},W.midiParams.fineTune=O%100}let z=W.patch;if(z&&z!=="clear"){c.info(`%cSetting %c${b}%c to %c${be.toMIDIString(z)}%c. Track num: %c${p}`,E.info,E.recognized,E.info,E.recognized,E.info,E.recognized);let O=z.bankMSB,Z=z.bankLSB,$=z.program;Ae(oe.programChange(y.ticks,M,$));let H=(ee,Ee)=>{Ae(oe.controllerChange(y.ticks,M,ee?Q.bankSelectLSB:Q.bankSelect,Ee))};if(he.isSystemXG(C)&&z.isGMGSDrum&&(c.info(`%cAdding XG Drum change on track %c${p}`,E.recognized,E.value),O=he.getDrumBank(C),Z=0),H(!1,O),H(!0,Z),z.isGMGSDrum&&!he.isSystemXG(C)&&M!==9){c.info(`%cAdding GS Drum change on track %c${p}`,E.recognized,E.value);let ee=16|_.channelToSyx(M);Ae(_.gsMessage(y.ticks,40,ee,21,[1]))}}if(W.midiParams)for(let[O,Z]of Object.entries(W.midiParams))Z!=="clear"&&G(..._.setChannelMIDIParameter(y.ticks,M,C,O,Z))}y.data[0]+=V.keyShift+V.currentKeyShift;break;case R.noteOff:if(!W)break;y.data[0]+=V.keyShift+V.currentKeyShift;break;case R.programChange:if(W?.patch){K();return}break;case R.pitchWheel:W?.midiParams?.pitchWheel&&K();break;case R.channelPressure:W?.midiParams?.pressure&&K();break;case R.controllerChange:{let z=y.data[0],O=y.data[1];if(W?.controllers?.get(z)!==void 0){K();return}switch(z){case Q.bankSelect:case Q.bankSelectLSB:W?.patch&&K();return;case Q.registeredParameterLSB:case Q.registeredParameterMSB:case Q.nonRegisteredParameterMSB:case Q.nonRegisteredParameterLSB:z===Q.nonRegisteredParameterLSB||z===Q.registeredParameterLSB?V.clearedParams.pLSB=!1:V.clearedParams.pMSB=!1,V.param.controllerChange(z,O,p,T);return;case Q.dataEntryMSB:case Q.dataEntryLSB:{V.clearedParams.data=!1;let Z=V.param.controllerChange(z,O,p,T);if(!Z)return;switch(Z.type){case"Drum Setup":r&&J(b);return;case"Controller Change":{let $=Z.controller,H=Z.channel;if(W?.controllers?.get($)!==void 0){J(H);return}($===Q.bankSelect||$===Q.bankSelectLSB)&&W?.patch&&J(H);break}case"Channel MIDI Param":if(Z.parameter==="fineTune"&&V.fineTune){V.currentFineTune=Z.value;let $=V.fineTune+Z.value;V.currentKeyShift=Math.trunc($/100);let H=$%100;c.info(`%cFine tuning already present on ${b}%c (${Z.value})%c, new relative tune: %c${$}%c cents. Key shift: %c${V.currentKeyShift}%c semitones. Actual RPN value to set: %c${H} cents.`,E.info,E.recognized,E.info,E.value,E.info,E.value,E.info,E.value);let ee=Math.floor(H*81.92)+8192;y.data[1]=z===Q.dataEntryMSB?ee>>7:ee&127}else W?.midiParams?.[Z.parameter]&&J(b);break}V.clearedParams.pLSB=!0,V.clearedParams.pMSB=!0;return}default:return}}case R.systemExclusive:{let z=_.analyzeSysEx(y.data);switch(z.type){default:return;case"Drum Setup":r&&K();return;case"Reverb Param":s&&K();return;case"Chorus Param":n&&K();return;case"Delay Param":a&&K();return;case"Insertion Param":i&&K();return;case"Program Change":g.get(z.channel+P)?.patch&&K();return;case"Global MIDI Param":if(e.midiParams?.[z.parameter]){K();return}if(z.parameter==="system")switch(z.value){case"xg":c.info("%cXG system on detected",E.info),C="xg",l=!0,h=p,d=T;for(let O of k)O.param.reset(),O.clearedParams={pLSB:!0,pMSB:!0,data:!0};return;case"gm2":c.info("%cGM2 system on detected",E.info),C="gm2",l=!0,h=p,d=T;for(let O of k)O.param.reset(),O.clearedParams={pLSB:!0,pMSB:!0,data:!0};return;case"gs":c.info("%cGS on detected!",E.recognized),l=!0,h=p,d=T;for(let O of k)O.param.reset(),O.clearedParams={pLSB:!0,pMSB:!0,data:!0};return;case"gm":c.info("%cGM on detected, removing!",E.info),K(),l=!1;return}break;case"Channel MIDI Param":{let O=g.get(z.channel+P);if(O?.midiParams?.[z.parameter]){K();return}if(z.parameter==="fineTune"){let Z=k[z.channel+P];if(Z&&Z.isFirstNoteOn&&O){let $=Z.fineTune+z.value;Z.currentKeyShift=Math.trunc($/100),Z.fineTune=$%100,c.info(`%cFine tuning already present on ${z.channel+P}, new relative tune: %c${$} cents`,E.info,E.recognized),K()}break}break}case"Controller Change":{let O=z.controller,Z=g.get(z.channel+P);if(Z?.controllers?.get(O)!==void 0){K();return}(O===Q.bankSelect||O===Q.bankSelectLSB)&&Z?.patch&&K();return}}}}}),!l&&[...g.values()].some(y=>y.patch&&y.patch!=="clear")){let y=0;A.tracks[0].events[0].statusByte===R.trackName&&y++;let p=(e.midiParams?.system==="clear"?void 0:e.midiParams?.system)??"gs";A.tracks[0].addEvents(y,_.reset(0,p)),h=0,d=y,C=p,c.info(`%c${p} reset on not detected. Adding it.`,E.info)}let S=Math.max(0,A.firstNoteOn),v=A.tracks[h],x=d+1;for(let y of Object.keys(e.midiParams??{})){if(y==="system")continue;let p=e.midiParams?.[y];!p||p==="clear"||v.addEvents(x,..._.setGlobalMIDIParameter(S,C,y,p))}if(s&&s!=="clear"){let y=en,p=s;v.addEvents(x,_.gsMessage(S,64,1,y.level,[p.level]),_.gsMessage(S,64,1,y.preLowpass,[p.preLowpass]),_.gsMessage(S,64,1,y.character,[p.character]),_.gsMessage(S,64,1,y.time,[p.time]),_.gsMessage(S,64,1,y.delayFeedback,[p.delayFeedback]),_.gsMessage(S,64,1,y.preDelayTime,[p.preDelayTime]))}if(n&&n!=="clear"){let y=An,p=n;v.addEvents(x,_.gsMessage(S,64,1,y.level,[p.level]),_.gsMessage(S,64,1,y.preLowpass,[p.preLowpass]),_.gsMessage(S,64,1,y.feedback,[p.feedback]),_.gsMessage(S,64,1,y.delay,[p.delay]),_.gsMessage(S,64,1,y.rate,[p.rate]),_.gsMessage(S,64,1,y.depth,[p.depth]),_.gsMessage(S,64,1,y.sendLevelToReverb,[p.sendLevelToReverb]),_.gsMessage(S,64,1,y.sendLevelToDelay,[p.sendLevelToDelay]))}if(a&&a!=="clear"){let y=tn,p=a;v.addEvents(x,_.gsMessage(S,64,1,y.level,[p.level]),_.gsMessage(S,64,1,y.preLowpass,[p.preLowpass]),_.gsMessage(S,64,1,y.timeCenter,[p.timeCenter]),_.gsMessage(S,64,1,y.timeRatioLeft,[p.timeRatioLeft]),_.gsMessage(S,64,1,y.timeRatioRight,[p.timeRatioRight]),_.gsMessage(S,64,1,y.levelCenter,[p.levelCenter]),_.gsMessage(S,64,1,y.levelLeft,[p.levelLeft]),_.gsMessage(S,64,1,y.levelRight,[p.levelRight]),_.gsMessage(S,64,1,y.feedback,[p.feedback]),_.gsMessage(S,64,1,y.sendLevelToReverb,[p.sendLevelToReverb]))}if(i&&i!=="clear"){let y=i;for(let p=0;p<y.params.length;p++){let D=y.params[p];D!==255&&v.addEvents(x,_.gsMessage(S,64,3,p+3,[D]))}v.addEvents(x,_.gsMessage(S,64,3,0,[y.type>>8,y.type&127]))}A.flush(),c.groupEnd()}var _A=class Os{name="";port=0;channels=new Set;events=[];static copyFrom(e){let t=new Os;return t.copyFrom(e),t}copyFrom(e){this.name=e.name,this.port=e.port,this.channels=new Set(e.channels),this.events=e.events.map(t=>new oe(t.ticks,t.statusByte,new j(t.data)))}addEvent(e,t){this.events.splice(t,0,e)}addEvents(e,...t){this.events.splice(e,0,...t)}deleteEvent(e){this.events.splice(e,1)}pushEvent(e){this.events.push(e)}},an={8:2,9:2,10:2,11:2,12:1,13:1,14:2};function Jt(A,e,t){c.groupCollapsed("%cParsing MIDI File...",E.info),A.fileName=t;let s=i=>{let r=ie(i,4),o=rA(i,4),g={type:r,size:o,data:new j(o)},C=i.slice(i.currentIndex,i.currentIndex+g.size);return g.data.set(C,0),i.currentIndex+=g.size,g},n=s(e);if(n.type!=="MThd")throw c.groupEnd(),new SyntaxError(`Invalid MIDI Header! Expected "MThd", got "${n.type}"`);if(n.size!==6)throw c.groupEnd(),new RangeError(`Invalid MIDI header chunk size! Expected 6, got ${n.size}`);A.format=rA(n.data,2);let a=rA(n.data,2);A.timeDivision=rA(n.data,2);for(let i=0;i<a;i++){let r=new _A,o=s(e);if(o.type!=="MTrk")throw c.groupEnd(),new SyntaxError(`Invalid track header! Expected "MTrk" got "${o.type}"`);let g,C=0;A.format===2&&i>0&&(C+=A.tracks[i-1].events[A.tracks[i-1].events.length-1].ticks);let l=o.data;for(;l.currentIndex<o.size;){C+=Ie(l);let h=l[l.currentIndex],d;if(g!==void 0&&h<128)d=g;else{if(h<128)throw c.groupEnd(),new SyntaxError(`Unexpected byte with no running byte. (${h})`);d=h,l.currentIndex++}let B;d>=R.noteOff&&d<R.systemExclusive?(B=an[d>>4],g=d):d===R.systemExclusive?B=Ie(l):d===255?(d=l[l.currentIndex++],B=Ie(l)):B=0;let m=new j(B);m.set(l.slice(l.currentIndex,l.currentIndex+B)),r.pushEvent(new oe(C,d,m)),l.currentIndex+=B}A.tracks.push(r),c.info(`%cParsed %c${A.tracks.length}%c / %c${A.tracks.length}`,E.info,E.value,E.info,E.value)}c.info("%cAll tracks parsed correctly!",E.recognized),A.flush(!1),c.groupEnd()}function Ot(A){return A.toISOString().split(".")[0]+"Z"}var nn=[new Map([["domingo","Sunday"],["segunda-feira","Monday"],["ter\xE7a-feira","Tuesday"],["quarta-feira","Wednesday"],["quinta-feira","Thursday"],["sexta-feira","Friday"],["s\xE1bado","Saturday"],["janeiro","January"],["fevereiro","February"],["mar\xE7o","March"],["abril","April"],["maio","May"],["junho","June"],["julho","July"],["agosto","August"],["setembro","September"],["outubro","October"],["novembro","November"],["dezembro","December"]])];function rn(A){for(let e of nn){let t=A;for(let[n,a]of e.entries()){let i=new RegExp(n,"gi");t=t.replace(i,a)}let s=new Date(t);if(!Number.isNaN(s.getTime()))return s}}function on(A){let e=/^(\d{2})\.(\d{2})\.(\d{4})$/.exec(A);if(e){let t=Number.parseInt(e[1]),s=Number.parseInt(e[2])-1,n=Number.parseInt(e[3]),a=new Date(n,s,t);if(!Number.isNaN(a.getTime()))return a}}function gn(A){let e=/^(\d{1,2})\s{1,2}(\d{1,2})\s{1,2}(\d{2})$/.exec(A);if(e){let t=e[1],s=(Number.parseInt(e[2])+1).toString(),n=e[3],a=new Date(`${s}/${t}/${n}`);if(!Number.isNaN(a.getTime()))return a}}function In(A){let e=/\b\d{4}\b/.exec(A);return e?new Date(e[0]):void 0}function Ht(A){if(A=A.trim(),A.length===0)return new Date;let e=A.replaceAll(/\b(\d+)(st|nd|rd|th)\b/g,"$1").replace(/\s+at\s+/i," "),t=new Date(e);if(Number.isNaN(t.getTime())){let s=rn(A);if(s)return s;let n=on(A);if(n)return n;let a=gn(A);if(a)return a;let i=In(A);return i||(c.warn(`Invalid date: "${A}". Replacing with the current date!`),new Date)}return t}function cn(A,e,t){e.currentIndex+=8;let s=ie(e,4);if(s!=="RMID")throw c.groupEnd(),new SyntaxError(`Invalid RMIDI Header! Expected "RMID", got "${s}"`);let n=N.read(e);if(n.header!=="data")throw c.groupEnd(),new SyntaxError(`Invalid RMIDI Chunk header! Expected "data", got "${n.header}"`);let a=n.data,i=!1,r=!1;for(;e.currentIndex<e.length;){let o=e.currentIndex,g=N.read(e);if(g.header==="RIFF"){let C=ie(g.data,4).toLowerCase();C==="sfbk"||C==="sfpk"||C==="dls "?(c.info("%cFound embedded soundbank!",E.recognized),A.embeddedSoundBank=e.slice(o,o+g.size).buffer):c.warn(`Unknown RIFF chunk: "${C}"`),C==="dls "?A.isDLSRMIDI=!0:i=!0}else if(g.header==="LIST"&&ie(g.data,4)==="INFO")for(c.info("%cFound RMIDI INFO chunk!",E.recognized);g.data.currentIndex<g.size;){let C=N.read(g.data),l=C.header,h=C.data;switch(l){default:c.warn(`Unknown RMIDI Info: ${l}`);break;case"INAM":A.rmidiInfo.name=h;break;case"IALB":case"IPRD":A.rmidiInfo.album=h;break;case"ICRT":case"ICRD":A.rmidiInfo.creationDate=h;break;case"IART":A.rmidiInfo.artist=h;break;case"IGNR":A.rmidiInfo.genre=h;break;case"IPIC":A.rmidiInfo.picture=h;break;case"ICOP":A.rmidiInfo.copyright=h;break;case"ICMT":A.rmidiInfo.comment=h;break;case"IENG":A.rmidiInfo.engineer=h;break;case"ISFT":A.rmidiInfo.software=h;break;case"ISBJ":A.rmidiInfo.subject=h;break;case"IENC":A.rmidiInfo.infoEncoding=h;break;case"MENC":A.rmidiInfo.midiEncoding=h;break;case"DBNK":A.bankOffset=xt(h,2),r=!0;break}}}i&&!r&&(A.bankOffset=1),A.isDLSRMIDI&&(A.bankOffset=0),A.embeddedSoundBank===void 0&&(A.bankOffset=0),Jt(A,a,t)}var lt={XMFFileType:0,nodeName:1,nodeIDNumber:2,resourceFormat:3,filenameOnDisk:4,filenameExtensionOnDisk:5,macOSFileTypeAndCreator:6,mimeType:7,title:8,copyrightNotice:9,comment:10,autoStart:11,preload:12,contentDescription:13,ID3Metadata:14},sA={inLineResource:1,inFileResource:2,inFileNode:3,externalFile:4,externalXMF:5,XMFFileURIandNodeID:6},ht={StandardMIDIFile:0,StandardMIDIFileType1:1,DLS1:2,DLS2:3,DLS22:4,mobileDLS:5,unknown:-1,folder:-2},Cn={standard:0,MMA:1,registered:2,nonRegistered:3},LA={none:0,MMAUnpacker:1,registered:2,nonRegistered:3},ln=class Hs{length;itemCount;metadataLength;metadata={};nodeData;innerNodes=[];packedContent=!1;nodeUnpackers=[];resourceFormat="unknown";referenceTypeID;constructor(e){let t=e.currentIndex;this.length=Ie(e),this.itemCount=Ie(e);let s=Ie(e),n=s-(e.currentIndex-t),a=e.slice(e.currentIndex,e.currentIndex+n);e.currentIndex+=n,this.metadataLength=Ie(a);let i=a.slice(a.currentIndex,a.currentIndex+this.metadataLength);a.currentIndex+=this.metadataLength;let r,o;for(;i.currentIndex<i.length;){i[i.currentIndex]===0?(i.currentIndex++,r=Ie(i),Object.values(lt).includes(r)?o=Object.keys(lt).find(d=>lt[d]===r)??"":(c.info(`Unknown field specifier: ${r}`),o=`unknown_${r}`)):(r=ie(i,Ie(i)),o=r);let h=Ie(i);if(h===0){let d=Ie(i),B=i.slice(i.currentIndex,i.currentIndex+d);i.currentIndex+=d;let m=Ie(B);this.metadata[o]=m<4?ie(B,d-1):B.slice(B.currentIndex)}else c.info(`International content: ${h}`),i.currentIndex+=Ie(i)}let g=a.currentIndex,C=Ie(a),l=a.slice(a.currentIndex,g+C);if(a.currentIndex=g+C,C>0)for(this.packedContent=!0;l.currentIndex<C;){let h={id:Ie(l)};switch(h.id){case LA.nonRegistered:case LA.registered:throw c.groupEnd(),new Error(`Unsupported unpacker ID: ${h.id}`);default:throw c.groupEnd(),new Error(`Unknown unpacker ID: ${h.id}`);case LA.none:h.standardID=Ie(l);break;case LA.MMAUnpacker:{let d=l[l.currentIndex++];d===0&&(d<<=8,d|=l[l.currentIndex++],d<<=8,d|=l[l.currentIndex++]);let B=Ie(l);h.manufacturerID=d,h.manufacturerInternalID=B}break}h.decodedSize=Ie(l),this.nodeUnpackers.push(h)}switch(e.currentIndex=t+s,this.referenceTypeID=Ie(e),this.nodeData=e.slice(e.currentIndex,t+this.length),e.currentIndex=t+this.length,this.referenceTypeID){case sA.inLineResource:break;case sA.externalXMF:case sA.inFileNode:case sA.XMFFileURIandNodeID:case sA.externalFile:case sA.inFileResource:throw c.groupEnd(),new Error(`Unsupported reference type: ${this.referenceTypeID}`);default:throw c.groupEnd(),new Error(`Unknown reference type: ${this.referenceTypeID}`)}if(this.isFile){if(this.packedContent){let d=this.nodeData.slice(2);c.info(`%cPacked content. Attempting to deflate. Target size: %c${this.nodeUnpackers[0].decodedSize}`,E.warn,E.value);try{this.nodeData=new j(Ks(d).buffer)}catch(B){if(c.groupEnd(),B instanceof Error)throw new Error(`Error unpacking XMF file contents: ${B.message}.`,{cause:B})}}let h=this.metadata.resourceFormat;if(h===void 0)c.warn("No resource format for this file node!");else{h[0]!==Cn.standard&&(c.info(`Non-standard formatTypeID: ${h.toString()}`),this.resourceFormat=h.toString());let d=h[1];Object.values(ht).includes(d)?this.resourceFormat=Object.keys(ht).find(B=>ht[B]===d):c.info(`Unrecognized resource format: ${d}`)}}else for(this.resourceFormat="folder";this.nodeData.currentIndex<this.nodeData.length;){let h=this.nodeData.currentIndex,d=Ie(this.nodeData),B=this.nodeData.slice(h,h+d);this.nodeData.currentIndex=h+d,this.innerNodes.push(new Hs(B))}}get isFile(){return this.itemCount===0}};function hn(A,e,t){A.bankOffset=0;let s=ie(e,4);if(s!=="XMF_")throw c.groupEnd(),new SyntaxError(`Invalid XMF Header! Expected "_XMF", got "${s}"`);c.group("%cParsing XMF file...",E.info);let n=ie(e,4);if(c.info(`%cXMF version: %c${n}`,E.info,E.recognized),n==="2.00"){let g=rA(e,4),C=rA(e,4);c.info(`%cFile Type ID: %c${g}%c, File Type Revision ID: %c${C}`,E.info,E.recognized,E.info,E.recognized)}Ie(e);let a=Ie(e);e.currentIndex+=a,e.currentIndex=Ie(e);let i=new ln(e),r,o=g=>{let C=(l,h)=>{g.metadata[l]!==void 0&&typeof g.metadata[l]=="string"&&(A.rmidiInfo[h]=Pe(g.metadata[l]))};if(C("nodeName","name"),C("title","name"),C("copyrightNotice","copyright"),C("comment","comment"),g.isFile)switch(g.resourceFormat){default:return;case"DLS1":case"DLS2":case"DLS22":case"mobileDLS":c.info("%cFound embedded DLS!",E.recognized),A.embeddedSoundBank=g.nodeData.buffer;break;case"StandardMIDIFile":case"StandardMIDIFileType1":c.info("%cFound embedded MIDI!",E.recognized),r=g.nodeData;break}else for(let l of g.innerNodes)o(l)};if(o(i),c.groupEnd(),!r)throw new Error("No MIDI data in the XMF file!");Jt(A,r,t)}function Bn(A,e){let t=new Map,s=e.systemParameters.keyShift,n=e.systemParameters.fineTune;for(let i=0;i<e.midiChannels.length;i++){let r=e.midiChannels[i];if(r.systemParameters.isMuted){t.set(i,"clear");continue}let o=r.systemParameters.keyShift+(r.drumChannel?0:s),g=r.systemParameters.fineTune+(r.drumChannel?0:n),C;r.systemParameters.presetLock&&r.patch&&(C={...r.patch});let l=new Map;for(let d=0;d<128;d++){if(!r.lockedControllers[d]||d===Q.bankSelect)continue;let B=r.midiControllers[d]>>7;l.set(d,B)}let h={};for(let[d,B]of Object.entries(r.midiParameters))r.lockedMIDIParameters[d]&&(h[d]=B);t.set(i,{keyShift:o,fineTune:g,patch:C,controllers:l,midiParams:h})}let a={};for(let[i,r]of Object.entries(e.midiParameters))e.lockedMIDIParameters[i]&&(a[i]=r);A.modify({channels:t,drumSetupParams:e.systemParameters.drumLock?"clear":void 0,reverbParams:e.systemParameters.reverbLock?e.reverbProcessor:void 0,chorusParams:e.systemParameters.chorusLock?e.chorusProcessor:void 0,delayParams:e.systemParameters.delayLock?e.delayProcessor:void 0,insertionParams:e.systemParameters.insertionEffectLock?e.insertionProcessor:void 0,midiParams:a})}var $e=class kt{tracks=[];timeline=[];timeDivision=480;duration=0;tempoChanges=[{ticks:0,tempo:120}];extraMetadata=[];lyrics=[];firstNoteOn=0;keyRange={min:0,max:127};lastVoiceEventTick=0;portChannelOffsetMap=[0];loop={start:0,end:0,type:"hard"};fileName;format=0;rmidiInfo={};bankOffset=0;isKaraokeFile=!1;isMultiPort=!1;isDLSRMIDI=!1;embeddedSoundBank;binaryName;get infoEncoding(){let e=this.rmidiInfo.infoEncoding;if(!e)return;let t=e.byteLength;return e[e.byteLength-1]===0&&t--,ve(e,t)}static fromArrayBuffer(e,t=""){let s=new kt,n=new j(e);switch(ve(n,4)){case"RIFF":cn(s,n,t);break;case"XMF_":hn(s,n,t);break;default:Jt(s,n,t);break}return s}static async fromFile(e){return this.fromArrayBuffer(await e.arrayBuffer(),e.name)}static copyFrom(e){let t=new kt;return t.copyFrom(e),t}copyFrom(e){this.copyMetadataFrom(e),this.embeddedSoundBank=e?.embeddedSoundBank?.slice(0)??void 0,this.tracks=e.tracks.map(t=>_A.copyFrom(t)),this.timeline=e.timeline.map(t=>({...t}))}midiTicksToSeconds(e){if(e=Math.max(e,0),this.tempoChanges.length===0)throw new Error("There are no tempo changes in the sequence. At least one is needed.");if(this.tempoChanges[this.tempoChanges.length-1].ticks!==0)throw new Error(`The last tempo change is not at 0 ticks. Got ${this.tempoChanges[this.tempoChanges.length-1].ticks} ticks.`);let t=this.tempoChanges.findIndex(n=>n.ticks<=e),s=0;for(;t<this.tempoChanges.length;){let n=this.tempoChanges[t++],a=e-n.ticks;s+=a*60/(n.tempo*this.timeDivision),e=n.ticks}return s}secondsToMIDITicks(e){if(e=Math.max(e,0),e===0)return 0;if(this.tempoChanges.length===0)throw new Error("There are no tempo changes in the sequence. At least one is needed.");if(this.tempoChanges[this.tempoChanges.length-1].ticks!==0)throw new Error(`The last tempo change is not at 0 ticks. Got ${this.tempoChanges[this.tempoChanges.length-1].ticks} ticks.`);let t=e,s=0;for(let n=this.tempoChanges.length-1;n>=0;n--){let a=this.tempoChanges[n],i=this.tempoChanges[n-1],r=i?i.ticks-a.ticks:1/0,o=60/(a.tempo*this.timeDivision),g=r*o;if(t<=g)return s+=Math.round(t/o),s;s+=r,t-=g}return s}getUsedProgramsAndKeys(e){return Xa(this,e)}preloadSynth(e){c.groupCollapsed("%cPreloading samples...",E.info);let t=this.getUsedProgramsAndKeys(e.soundBankManager);for(let[s,n]of t.entries()){c.info(`%cPreloading used samples on %c${s.name}%c...`,E.info,E.recognized,E.info);for(let[a,i]of n.entries())for(let r of i)e.getVoicesForPreset(s,a,r)}c.groupEnd()}flush(e=!0){if(e)for(let t of this.tracks)t.events.sort((s,n)=>s.ticks-n.ticks);this.parseInternal()}getNoteTimes(e=0){return $a(this,e)}writeMIDI(){return Oa(this)}writeRMIDI(e,t=hs){return Za(this,e,pA(t,hs))}modify(e){sn(this,e)}applySnapshot(e){Bn(this,e)}getName(e="Shift_JIS"){let t="",s=this.getRMIDInfo("name");if(s)return s.trim();if(this.binaryName){e=this.getRMIDInfo("midiEncoding")??e;try{t=new TextDecoder(e).decode(this.binaryName).trim()}catch(n){c.warn(`Failed to decode MIDI name: ${n}`)}}return t||this.fileName}getExtraMetadata(e="Shift_JIS"){e=this.infoEncoding??e;let t=new TextDecoder(e);return this.extraMetadata.map(s=>t.decode(s.data).replaceAll(/@T|@A/g,"").trim())}setRMIDInfo(e,t){if(this.rmidiInfo.infoEncoding=Pe("utf-8",!0),e==="picture")this.rmidiInfo.picture=new Uint8Array(t);else if(e==="creationDate")this.rmidiInfo.creationDate=Pe(Ot(t),!0);else{let s=new TextEncoder().encode(t);this.rmidiInfo[e]=new Uint8Array([...s,0])}}getRMIDInfo(e){if(!this.rmidiInfo[e])return;let t=this.infoEncoding??"UTF-8";if(e==="picture")return this.rmidiInfo[e].buffer;if(e==="creationDate")return Ht(ve(this.rmidiInfo[e]));try{let s=new TextDecoder(t),n=this.rmidiInfo[e];return n[n.length-1]===0&&(n=n?.slice(0,-1)),s.decode(n.buffer).trim()}catch(s){c.warn(`Failed to decode ${e} name: ${s}`);return}}iterate(e){let t=new Array(this.tracks.length).fill(0),s=this.tracks.length;for(;s>0;){let n=0,a=1/0;for(let o=0;o<this.tracks.length;o++){let g=this.tracks[o].events;t[o]>=g.length||g[t[o]].ticks<a&&(n=o,a=g[t[o]].ticks)}let i=this.tracks[n].events;if(t[n]>=i.length){s--;continue}let r=t[n];e(i[r],n,t),t[n]++}}copyMetadataFrom(e){this.fileName=e.fileName,this.timeDivision=e.timeDivision,this.duration=e.duration,this.firstNoteOn=e.firstNoteOn,this.lastVoiceEventTick=e.lastVoiceEventTick,this.format=e.format,this.bankOffset=e.bankOffset,this.isKaraokeFile=e.isKaraokeFile,this.isMultiPort=e.isMultiPort,this.isDLSRMIDI=e.isDLSRMIDI,this.isDLSRMIDI=e.isDLSRMIDI,this.tempoChanges=[...e.tempoChanges],this.extraMetadata=e.extraMetadata.map(t=>new oe(t.ticks,t.statusByte,new j(t.data))),this.lyrics=e.lyrics.map(t=>new oe(t.ticks,t.statusByte,new j(t.data))),this.portChannelOffsetMap=[...e.portChannelOffsetMap],this.binaryName=e?.binaryName?.slice(),this.loop={...e.loop},this.keyRange={...e.keyRange},this.rmidiInfo={};for(let t of Object.entries(e.rmidiInfo)){let s=t[0],n=t[1];this.rmidiInfo[s]=new Uint8Array(n)}}parseInternal(){c.group("%cInterpreting MIDI events...",E.info);let e=!1;this.tempoChanges=[{ticks:0,tempo:120}],this.extraMetadata=[],this.lyrics=[],this.firstNoteOn=0,this.keyRange={max:0,min:127},this.lastVoiceEventTick=0,this.portChannelOffsetMap=[0],this.loop={start:0,end:0,type:"hard"},this.isKaraokeFile=!1,this.isMultiPort=!1;let t=!1;this.rmidiInfo.name!==void 0&&(t=!0);let s=null,n=null,a="hard";for(let g of this.tracks){let C=new Set,l=!1;for(let d=0;d<g.events.length;d++){let B=g.events[d];if(B.statusByte>=128&&B.statusByte<240)switch(l=!0,B.ticks>this.lastVoiceEventTick&&(this.lastVoiceEventTick=B.ticks),B.statusByte&240){case R.controllerChange:switch(B.data[0]){case Q.breathController:case Q.undefinedCC111LSB:B.data[1]===0&&(s=B.ticks);break;case Q.undefinedCC116LSB:s=B.ticks;break;case Q.footController:case Q.undefinedCC117LSB:n===null&&(B.data[0]!==4||B.data[0]===4&&B.data[1]===0)?(a="soft",n=B.ticks):(n=0,a="hard");break;case Q.bankSelect:this.isDLSRMIDI&&B.data[1]!==0&&B.data[1]!==127&&(c.info("%cDLS RMIDI with offset 1 detected!",E.recognized),this.bankOffset=1)}break;case R.noteOn:{C.add(B.statusByte&15);let u=B.data[0];this.keyRange.min=Math.min(this.keyRange.min,u),this.keyRange.max=Math.max(this.keyRange.max,u);break}}let m=ve(B.data);switch(B.statusByte){case R.endOfTrack:d!==g.events.length-1&&(g.deleteEvent(d),d--,c.warn("Unexpected EndOfTrack. Removing!"));break;case R.setTempo:this.tempoChanges.push({ticks:B.ticks,tempo:6e7/cA(B.data,3)});break;case R.marker:switch(m.trim().toLowerCase()){default:break;case"start":case"loopstart":s=B.ticks;break;case"loopend":n=B.ticks}break;case R.copyright:this.extraMetadata.push(B);break;case R.lyric:m.trim().startsWith("@KMIDI KARAOKE FILE")&&(this.isKaraokeFile=!0,c.info("%cKaraoke MIDI detected!",E.recognized)),this.isKaraokeFile?B.statusByte=R.text:this.lyrics.push(B);case R.text:{let u=m.trim();u.startsWith("@KMIDI KARAOKE FILE")?(this.isKaraokeFile=!0,c.info("%cKaraoke MIDI detected!",E.recognized)):this.isKaraokeFile&&(u.startsWith("@T")||u.startsWith("@A")?e?this.extraMetadata.push(B):(this.binaryName=B.data.slice(2),e=!0,t=!0):u.startsWith("@")||this.lyrics.push(B));break}}}g.channels=C,g.name="";let h=g.events.find(d=>d.statusByte===R.trackName);h&&this.tracks.indexOf(g)>0&&(g.name=ve(h.data),!l&&!g.name.toLowerCase().includes("setup")&&this.extraMetadata.push(h))}this.tempoChanges.reverse(),c.info("%cCorrecting loops, ports and detecting notes...",E.info);let i=[];for(let g of this.tracks){let C=g.events.find(l=>(l.statusByte&240)===R.noteOn);C&&i.push(C.ticks)}this.firstNoteOn=Math.min(...i),c.info(`%cFirst note-on detected at: %c${this.firstNoteOn}%c ticks!`,E.info,E.recognized,E.info),s??=this.firstNoteOn,(n===null||n===0)&&(n=this.lastVoiceEventTick),this.loop={start:s,end:n,type:a},this.lastVoiceEventTick=Math.max(this.lastVoiceEventTick,this.loop.end),c.info(`%cLoop points: start: %c${this.loop.start}%c end: %c${this.loop.end}`,E.info,E.recognized,E.info,E.recognized);let r=0;this.portChannelOffsetMap=[];for(let g of this.tracks)if(g.port=-1,g.channels.size!==0)for(let C of g.events){if(C.statusByte!==R.midiPort)continue;let l=C.data[0];g.port=l,this.portChannelOffsetMap[l]===void 0&&(this.portChannelOffsetMap[l]=r,r+=16)}this.portChannelOffsetMap=[...this.portChannelOffsetMap].map(g=>g??0);let o=1/0;for(let g of this.tracks)g.port!==-1&&o>g.port&&(o=g.port);o===1/0&&(o=0);for(let g of this.tracks)(g.port===-1||g.port===void 0)&&(g.port=o);if(this.portChannelOffsetMap.length===0&&(this.portChannelOffsetMap=[0]),this.portChannelOffsetMap.length<2?c.info("%cNo additional MIDI Ports detected.",E.info):(this.isMultiPort=!0,c.info("%cMIDI Ports detected!",E.recognized)),!t)if(this.tracks.length>1){if(!this.tracks[0].events.some(g=>g.statusByte>=R.noteOn&&g.statusByte<R.polyPressure)){let g=this.tracks[0].events.find(C=>C.statusByte===R.trackName);g&&(this.binaryName=g.data)}}else{let g=this.tracks[0].events.find(C=>C.statusByte===R.trackName);g&&(this.binaryName=g.data)}if(this.extraMetadata=this.extraMetadata.filter(g=>g.data.length>0),this.lyrics.sort((g,C)=>g.ticks-C.ticks),!this.tracks.some(g=>g.events[0].ticks===0)){let g=this.tracks[0],C=this?.binaryName?.buffer;C||(C=new Uint8Array(0).buffer),g.addEvents(0,new oe(0,R.trackName,new j(C)))}this.duration=this.midiTicksToSeconds(this.lastVoiceEventTick),this.timeline.length=0,this.iterate((g,C,l)=>{this.timeline.push(Object.freeze({ev:l[C],tr:C}))}),this.binaryName?.length===0&&(this.binaryName=void 0),c.info(`%cMIDI file parsed. Total tick time: %c${this.lastVoiceEventTick}%c, total seconds time: %c${Dt(Math.ceil(this.duration)).time}`,E.info,E.recognized,E.info,E.recognized),c.groupEnd()}};function dn(A,e){if(this.externalMIDIPlayback&&A.statusByte>=128){this.sendMIDIMessage([A.statusByte,...A.data]);return}let t=this._midiData.tracks[e],s,n=0;A.statusByte>=128&&A.statusByte<240?(s=A.statusByte&240,n=A.statusByte&15):s=A.statusByte;let a=this.midiPortChannelOffsets[this.currentMIDIPorts[e]]||0;switch(n+=a,s){case R.noteOn:{let i=this.playingNotes[n];if(!i){for(;this.playingNotes.length<=n;)this.playingNotes.push(new Map);i=this.playingNotes[n]}let r=A.data[1];r>0?(this.synth.noteOn(n,A.data[0],r),i.set(A.data[0],r)):(this.synth.noteOff(n,A.data[0]),i.delete(A.data[0]));break}case R.noteOff:{let i=this.playingNotes[n];if(!i){for(;this.playingNotes.length<=n;)this.playingNotes.push(new Map);i=this.playingNotes[n]}this.synth.noteOff(n,A.data[0]),i.delete(A.data[0]);break}case R.pitchWheel:this.synth.pitchWheel(n,A.data[1]<<7|A.data[0]);break;case R.controllerChange:if(this._midiData.isMultiPort&&t.channels.size===0)return;this.synth.controllerChange(n,A.data[0],A.data[1]);break;case R.programChange:if(this._midiData.isMultiPort&&t.channels.size===0)return;this.synth.programChange(n,A.data[0]);break;case R.polyPressure:this.synth.polyPressure(n,A.data[0],A.data[1]);break;case R.channelPressure:this.synth.channelPressure(n,A.data[0]);break;case R.systemExclusive:this.synth.systemExclusive(A.data,a);break;case R.setTempo:{let i=6e7/cA(A.data,3);this.oneTickToSeconds=60/(i*this._midiData.timeDivision),this.oneTickToSeconds===0&&(this.oneTickToSeconds=60/(120*this._midiData.timeDivision),c.info("invalid tempo! falling back to 120 BPM"));break}case R.timeSignature:case R.endOfTrack:case R.midiChannelPrefix:case R.songPosition:case R.activeSensing:case R.keySignature:case R.sequenceNumber:case R.sequenceSpecific:case R.text:case R.lyric:case R.copyright:case R.trackName:case R.marker:case R.cuePoint:case R.instrumentName:case R.programName:break;case R.midiPort:this.assignMIDIPort(e,A.data[0]);break;case R.reset:this.synth.stopAllChannels(),this.synth.reset();break;default:c.info(`%cUnrecognized Event: %c${A.statusByte}%c status byte: %c${Object.keys(R).find(i=>R[i]===s)}`,E.warn,E.unrecognized,E.warn,E.value);break}s>=0&&s<128&&this.callEvent("metaEvent",{event:A,trackIndex:e})}function En(){if(this.paused||!this._midiData)return;let A=this.currentTime;for(;this.playedTime<A;){let{timeline:e,tracks:t,lastVoiceEventTick:s,loop:n}=this._midiData,a=e[this.index++],i=t[a.tr].events[a.ev];if(this.processEvent(i,a.tr),this.loopCount>0&&n.end<=i.ticks){this.loopCount!==1/0&&(this.loopCount--,this.callEvent("loopCountChange",{newCount:this.loopCount})),n.type==="soft"?this.jumpToTick(n.start):this.setTimeTicks(n.start);return}if(this.index>=e.length||i.ticks>=s){this.songIsFinished();return}let r=e[this.index],o=t[r.tr].events[r.ev];this.playedTime+=this.oneTickToSeconds*(o.ticks-i.ticks)}}function Qn(A,e){this._midiData.tracks[A].channels.size!==0&&(this.midiPortChannelOffset===0&&(this.midiPortChannelOffset+=16,this.midiPortChannelOffsets[e]=0),this.midiPortChannelOffsets[e]===void 0&&(this.synth.midiChannels.length<this.midiPortChannelOffset+15&&this.addNewMIDIPort(),this.midiPortChannelOffsets[e]=this.midiPortChannelOffset,this.midiPortChannelOffset+=16),this.currentMIDIPorts[A]=e)}function fn(A){if(!A.tracks)throw new Error("This MIDI has no tracks!");if(A.duration===0){c.warn("This MIDI file has a duration of exactly 0 seconds."),this.pausedTime=0,this.isFinished=!0;return}this.oneTickToSeconds=60/(120*A.timeDivision),this._midiData=A,this.isFinished=!1,this.synth.clearEmbeddedSoundBank(),this._midiData.embeddedSoundBank!==void 0&&(c.info("%cEmbedded soundbank detected! Using it.",E.recognized),this.synth.setEmbeddedSoundBank(this._midiData.embeddedSoundBank,this._midiData.bankOffset),this.preload&&this._midiData.preloadSynth(this.synth)),this.currentMIDIPorts=this._midiData.tracks.map(e=>e.port),this.midiPortChannelOffset=0,this.midiPortChannelOffsets={};for(let[e,t]of this._midiData.tracks.entries())this.assignMIDIPort(e,t.port);this.firstNoteTime=this._midiData.midiTicksToSeconds(this._midiData.firstNoteOn),c.info(`%cTotal song time: ${Dt(Math.ceil(this._midiData.duration)).time}`,E.recognized),this.callEvent("songChange",{songIndex:this._songIndex}),this._midiData.duration<=.2&&(c.warn(`%cVery short song: (${Dt(Math.round(this._midiData.duration)).time}). Disabling loop!`,E.warn),this.loopCount=0),this.currentTime=0}var We=new Int16Array(128).fill(0),fe=(A,e)=>We[A]=e<<7;fe(Q.mainVolume,100);fe(Q.balance,64);fe(Q.expression,127);fe(Q.pan,64);fe(Q.filterResonance,64);fe(Q.releaseTime,64);fe(Q.attackTime,64);fe(Q.brightness,64);fe(Q.decayTime,64);fe(Q.vibratoRate,64);fe(Q.vibratoDepth,64);fe(Q.vibratoDelay,64);fe(Q.generalPurposeController6,64);fe(Q.generalPurposeController8,64);fe(Q.registeredParameterLSB,127);fe(Q.registeredParameterMSB,127);fe(Q.nonRegisteredParameterLSB,0);fe(Q.nonRegisteredParameterMSB,0);var YA=new Int8Array(128).fill(127);YA[35]=0;YA[36]=0;function un(A=!0){for(let e=0;e<128;e++){if(this.lockedControllers[e]){this.synthCore.callEvent("controllerChange",{channel:this.channel,controller:e,value:this._midiControllers[e]>>7});continue}let t=We[e];this._midiControllers[e]!==t&&e!==Q.portamentoControl&&e!==Q.dataEntryMSB&&e!==Q.registeredParameterMSB&&e!==Q.registeredParameterLSB&&e!==Q.nonRegisteredParameterMSB&&e!==Q.nonRegisteredParameterLSB&&this.controllerChange(e,t>>7,A)}this.setMIDIParameter("pressure",0),this.setMIDIParameter("pitchWheelRange",2),this.setMIDIParameter("modulationDepth",50),this.setMIDIParameter("rxChannel",this.channel),this.setMIDIParameter("efxAssign",!1),this.setMIDIParameter("polyMode",!0),this.setMIDIParameter("keyShift",0),this.setMIDIParameter("fineTune",0),this.setMIDIParameter("assignMode",2),this.setMIDIParameter("randomPan",!1),this.setMIDIParameter("cc1",16),this.setMIDIParameter("cc2",17),this.setMIDIParameter("drumMap",this.channel%16===9?1:0),this.setMIDIParameter("velocitySenseOffset",64),this.setMIDIParameter("velocitySenseDepth",64),this.pitchWheel(8192),this.octaveTuning.fill(0),this.lastPortamentoNote=this.channelSystem==="xg"?60:-1,this.resetDrumParams(),this.resetGeneratorOverrides(),this.resetGeneratorOffsets(),this.dynamicModulators.resetModulators(),this.sf2NRPNGeneratorLSB=0,this.playingNotes.fill(!1),this.lastParameterIsRegistered=!0,this._midiControllers[Q.nonRegisteredParameterLSB]=0,this._midiControllers[Q.nonRegisteredParameterMSB]=0,this._midiControllers[Q.registeredParameterLSB]=16256,this._midiControllers[Q.registeredParameterMSB]=16256,this._midiControllers[Q.dataEntryMSB]=0,this._midiControllers[Q.dataEntryLSB]=0,this.setBankMSB(he.getDefaultBank(this.channelSystem)),this.setBankLSB(0),this.setGSDrums(!1),this.setDrums(this.channel%16===9),this.programChange(0)}var Ys=[Q.modulationWheel,Q.expression,Q.sustainPedal,Q.portamentoOnOff,Q.sostenutoPedal,Q.softPedal,Q.registeredParameterMSB,Q.registeredParameterLSB];function mn(){this.pitchWheel(8192),this.setMIDIParameter("pressure",0);for(let A of Ys){let e=We[A];e!==this._midiControllers[A]&&this.controllerChange(A,e>>7)}}var vA=new Set([Q.dataDecrement,Q.dataIncrement,Q.dataEntryMSB,Q.dataEntryLSB,Q.registeredParameterLSB,Q.registeredParameterMSB,Q.nonRegisteredParameterLSB,Q.nonRegisteredParameterMSB,Q.bankSelect,Q.bankSelectLSB,Q.resetAllControllers,Q.monoModeOn,Q.polyModeOn]);function pn(A,e=void 0){if(!this._midiData)return!1;this.oneTickToSeconds=60/(120*this._midiData.timeDivision),this.sendMIDIReset(),this.playedTime=0,this.index=0;let t=this.synth.midiChannels.length,s=[];for(let g=0;g<t;g++)s.push({pitchWheel:8192,controllers:new Int16Array(We),param:new HA(g),portamentoNote:-1});let n,a=0;function i(g){let C=s[g];C.pitchWheel=8192,C.param.reset();for(let l of Ys)C.controllers[l]=We[l]}let{timeline:r,tracks:o}=this._midiData;for(;;){let g=r[this.index],C=g.tr,l=o[C],h=l.events[g.ev];if(e===void 0){if(this.playedTime>=A)break}else if(h.ticks>=e)break;let d,B=0;h.statusByte>=128&&h.statusByte<240?(d=h.statusByte&240,B=h.statusByte&15):d=h.statusByte;let m=B+(this.midiPortChannelOffsets[l.port]||0);s[m]??={pitchWheel:8192,controllers:new Int16Array(We),param:new HA(m),portamentoNote:-1};let u=s[m];switch(d){case R.noteOn:u.portamentoNote=h.data[0];break;case R.noteOff:break;case R.pitchWheel:u.pitchWheel=h.data[1]<<7|h.data[0];break;case R.systemExclusive:{let k=_.analyzeSysEx(h.data);switch(k.type){default:this.processEvent(h,C);break;case"Controller Change":{let{controller:S,value:v,channel:x}=k;if(x>=t||this._midiData.isMultiPort&&l.channels.size===0)break;if(S===Q.resetAllControllers){i(x);break}vA.has(S)?this.sendMIDICC(x,S,v):s[x].controllers[S]=v<<7}}break}case R.controllerChange:{if(this._midiData.isMultiPort&&l.channels.size===0)break;let k=h.data[0],S=h.data[1];switch(k){default:if(k===Q.resetAllControllers){i(m);break}vA.has(k)?this.sendMIDICC(m,k,S):u.controllers[k]=S<<7;break;case Q.registeredParameterMSB:case Q.registeredParameterLSB:case Q.nonRegisteredParameterLSB:case Q.nonRegisteredParameterMSB:u.param.controllerChange(k,S,0,0),this.sendMIDICC(m,k,S);break;case Q.dataEntryMSB:case Q.dataEntryLSB:{let v=u.param.controllerChange(k,S,0,0);this.sendMIDICC(m,k,S),v.type==="Controller Change"&&(vA.has(v.controller)?this.sendMIDICC(m,v.controller,v.value):u.controllers[v.controller]=v.value<<7);break}}break}case R.setTempo:{let k=6e7/cA(h.data,3);this.oneTickToSeconds=60/(k*this._midiData.timeDivision),n=h,a=C;break}default:this.processEvent(h,C);break}let w=r[++this.index],L=o[w.tr].events[w.ev];if(L===void 0)return this.stop(),!1;this.playedTime+=this.oneTickToSeconds*(L.ticks-h.ticks)}for(let g=0;g<t;g++){let C=s[g];this.sendMIDIPitchWheel(g,C.pitchWheel),C.portamentoNote>=0&&(this.externalMIDIPlayback?this.sendMIDICC(g,Q.portamentoControl,C.portamentoNote):this.synth.midiChannels[g].setLastNote(C.portamentoNote));for(let l=0;l<128;l++){let h=C.controllers[l];h!==We[l]&&!vA.has(l)&&this.sendMIDICC(g,l,h>>7)}}return n&&this.callEvent("metaEvent",{event:n,trackIndex:a}),this.paused&&(this.pausedTime=this.playedTime),!0}var qs=class{songs=[];shuffledSongIndexes=[];synth;externalMIDIPlayback=!1;retriggerPausedNotes=!0;loopCount=0;skipToFirstNoteOn=!0;isFinished=!1;preload=!0;onEventCall;processTick=En.bind(this);firstNoteTime=0;oneTickToSeconds=0;index=0;playedTime=0;pausedTime=-1;absoluteStartTime=0;playingNotes=[];currentMIDIPorts=[];midiPortChannelOffset=0;midiPortChannelOffsets={};assignMIDIPort=Qn.bind(this);loadNewSequence=fn.bind(this);processEvent=dn.bind(this);setTimeTo=pn.bind(this);constructor(A){this.synth=A,this.absoluteStartTime=this.synth.currentTime,this.playingNotes=this.synth.midiChannels.map(()=>new Map)}_midiData;get midiData(){return this._midiData}get duration(){return this._midiData?.duration??0}_songIndex=0;get songIndex(){return this._songIndex}set songIndex(A){this._songIndex=A,this._songIndex=Math.max(0,A%this.songs.length),this.loadCurrentSong()}_shuffleMode=!1;get shuffleMode(){return this._shuffleMode}set shuffleMode(A){this._shuffleMode=A}_playbackRate=1;get playbackRate(){return this._playbackRate}set playbackRate(A){let e=this.currentTime;this._playbackRate=A,this.recalculateStartTime(e)}get currentTime(){return this.pausedTime!==void 0?this.pausedTime:(this.synth.currentTime-this.absoluteStartTime)*this._playbackRate}set currentTime(A){if(this._midiData)if(this.paused&&(this.pausedTime=A),A>this._midiData.duration||A<0)this.skipToFirstNoteOn?this.setTimeTicks(this._midiData.firstNoteOn-1):this.setTimeTicks(0);else if(this.skipToFirstNoteOn&&A<this.firstNoteTime){this.setTimeTicks(this._midiData.firstNoteOn-1);return}else{for(let e of this.playingNotes)e.clear();this.callEvent("timeChange",{newTime:A}),this.setTimeTo(A),this.recalculateStartTime(A)}}get paused(){return this.pausedTime!==void 0}play(){if(!this._midiData){c.warn("No songs loaded in the sequencer. Ignoring the play call.");return}if(this.currentTime>=this._midiData.duration&&(this.currentTime=0),this.paused&&this.recalculateStartTime(this.pausedTime??0),this.retriggerPausedNotes&&!this.externalMIDIPlayback)for(let A=0;A<this.playingNotes.length;A++){let e=this.playingNotes[A];for(let[t,s]of e)this.sendMIDINoteOn(A,t,s)}this.pausedTime=void 0}pause(){this.pauseInternal(!1)}loadNewSongList(A){if(this.songs=A,this.songs.length!==0){if(this._songIndex=0,this.shuffleSongIndexes(),this.callEvent("songListChange",{newSongList:[...this.songs]}),this.preload){c.group("%cPreloading all songs...",E.info);for(let e of this.songs)e.embeddedSoundBank===void 0&&e.preloadSynth(this.synth);c.groupEnd()}this.loadCurrentSong()}}callEvent(A,e){this?.onEventCall?.({type:A,data:e})}pauseInternal(A){this.paused||(this.stop(),this.callEvent("pause",{isFinished:A}),A&&this.callEvent("songEnded",{}))}songIsFinished(){if(this.isFinished=!0,this.songs.length===1){this.pauseInternal(!0);return}this._songIndex++,this._songIndex%=this.songs.length,this.loadCurrentSong()}stop(){this.pausedTime=this.currentTime,this.sendMIDIAllOff()}addNewMIDIPort(){for(let A=0;A<16;A++)this.synth.createMIDIChannel(),this.playingNotes.push(new Map)}sendMIDIMessage(A){if(!this.externalMIDIPlayback){c.warn(`Attempting to send ${Ts(A)} to the synthesizer via sendMIDIMessage. This shouldn't happen!`);return}this.callEvent("midiMessage",{message:A,time:this.synth.currentTime})}sendMIDIAllOff(){for(let A=0;A<16;A++)this.sendMIDICC(A,Q.sustainPedal,0);if(!this.externalMIDIPlayback){this.synth.stopAllChannels();return}for(let A=0;A<this.playingNotes.length;A++){let e=this.playingNotes[A];for(let t of e.keys())this.sendMIDINoteOff(A,t)}for(let A=0;A<16;A++)this.sendMIDICC(A,Q.allNotesOff,0)}sendMIDIReset(){if(this.sendMIDIAllOff(),!this.externalMIDIPlayback){this.synth.reset();return}this.sendMIDISysEx(_.gs(64,0,127,[0]))}loadCurrentSong(){let A=this._songIndex;this._shuffleMode&&(A=this.shuffledSongIndexes[this._songIndex]),this.loadNewSequence(this.songs[A])}shuffleSongIndexes(){let A=this.songs.map((e,t)=>t);for(this.shuffledSongIndexes.length=0;A.length>0;){let e=A[Math.floor(Math.random()*A.length)];this.shuffledSongIndexes.push(e),A.splice(A.indexOf(e),1)}}setTimeTicks(A){if(!this._midiData)return;for(let s of this.playingNotes)s.clear();let e=this._midiData.midiTicksToSeconds(A);this.callEvent("timeChange",{newTime:e});let t=this.setTimeTo(0,A);this.recalculateStartTime(this.playedTime)}recalculateStartTime(A){this.absoluteStartTime=this.synth.currentTime-A/this._playbackRate}jumpToTick(A){if(!this._midiData)return;this.sendMIDIAllOff();let e=this._midiData,t=e.midiTicksToSeconds(A);this.callEvent("timeChange",{newTime:t}),this.recalculateStartTime(t),this.playedTime=t;let s=e.timeline.findIndex(a=>e.tracks[a.tr].events[a.ev].ticks>=A);this.index=s===-1?e.timeline.length:s;let n=e.tempoChanges.find(a=>a.ticks<=A);this.oneTickToSeconds=60/(n.tempo*e.timeDivision)}sendMIDINoteOn(A,e,t){if(!this.externalMIDIPlayback){this.synth.noteOn(A,e,t);return}A%=16,this.sendMIDIMessage([R.noteOn|A,e,t])}sendMIDINoteOff(A,e){if(!this.externalMIDIPlayback){this.synth.noteOff(A,e);return}A%=16,this.sendMIDIMessage([R.noteOff|A,e,64])}sendMIDICC(A,e,t){if(!this.externalMIDIPlayback){this.synth.controllerChange(A,e,t);return}A%=16,this.sendMIDIMessage([R.controllerChange|A,e,t])}sendMIDISysEx(A){if(!this.externalMIDIPlayback){this.synth.systemExclusive(A);return}this.sendMIDIMessage([R.systemExclusive,...A])}sendMIDIPitchWheel(A,e){if(!this.externalMIDIPlayback){this.synth.pitchWheel(A,e);return}A%=16,this.sendMIDIMessage([R.pitchWheel|A,e&127,e>>7])}},Dn={linear:0,nearestNeighbor:1,hermite:2},yn={effectsEnabled:!0,maxBufferSize:128,initialTime:0,eventsEnabled:!0};var wn=class{keyMappings=[];addMapping(A,e,t){this.keyMappings[A]??=[],this.keyMappings[A][e]=t}deleteMapping(A,e){this.keyMappings[A]?.[e]!==void 0&&(this.keyMappings[A][e]=void 0)}clearMappings(){this.keyMappings=[]}setMappings(A){this.keyMappings=A}getMappings(){return this.keyMappings}getVelocity(A,e){return this.keyMappings[A]?.[e]?.velocity??-1}getGain(A,e){return this.keyMappings[A]?.[e]?.gain??1}hasOverridePatch(A,e){let t=this.keyMappings[A]?.[e]?.patch?.bankMSB;return t!==void 0&&t>=0}getPatch(A,e){let t=this.keyMappings[A]?.[e];if(t)return t.patch;throw new Error("No modifier.")}};function kn(A){for(this.keyModifierManager.setMappings(A.keyMappings);this.midiChannels.length<A.midiChannels.length;)this.createMIDIChannel(!0);for(let t=0;t<A.midiChannels.length;t++)this.midiChannels[t].applySnapshot(A.midiChannels[t]);for(let[t,s]of Object.entries(A.reverbProcessor))this.reverbProcessor[t]=s;for(let[t,s]of Object.entries(this.chorusProcessor))this.chorusProcessor[t]=s;for(let[t,s]of Object.entries(this.delayProcessor))this.delayProcessor[t]=s;let e=A.insertionProcessor;this.systemExclusive(_.gs(64,3,0,[e.type>>8,e.type&127]));for(let t=0;t<e.params.length;t++)e.params[t]!==255&&this.systemExclusive(_.gs(64,3,3+t,[e.params[t]]));for(let t of Object.keys(A.lockedMIDIParameters))this.lockMIDIParameter(t,!1);for(let[t,s]of Object.entries(A.midiParameters))this.setMIDIParameter(t,s);for(let[t,s]of Object.entries(A.lockedMIDIParameters))this.lockMIDIParameter(t,s);for(let[t,s]of Object.entries(A.systemParameters))this.setSystemParameter(t,s);this.updateActiveEffects()}function Sn(){return{midiParameters:{...this.midiParameters},lockedMIDIParameters:{...this.lockedMIDIParameters},systemParameters:{...this.systemParameters},midiChannels:this.midiChannels.map(A=>A.getSnapshot()),keyMappings:this.keyModifierManager.getMappings(),reverbProcessor:this.reverbProcessor.getSnapshot(),chorusProcessor:this.chorusProcessor.getSnapshot(),delayProcessor:this.delayProcessor.getSnapshot(),insertionProcessor:this.getInsertionSnapshot()}}var zs={effectsEnabled:!0,eventsEnabled:!0,voiceCap:350,autoAllocateVoices:!1,reverbGain:1,reverbLock:!1,chorusGain:1,chorusLock:!1,delayGain:1,delayLock:!1,insertionEffectLock:!1,drumLock:!1,blackMIDIMode:!1,deviceID:-1,gain:1,pan:0,keyShift:0,fineTune:0,interpolationType:Dn.hermite,nrpnParamLock:!1,monophonicRetrigger:!1};function Mn(A,e){if(this.systemParameters[A]===e)return;let t=this.systemParameters[A];this.systemParameters[A]=e;for(let s of this.midiChannels)s.updateInternalParams();switch(A){default:break;case"voiceCap":{let s=Math.min(e,1e6);this.systemParameters.voiceCap=s;for(let n=s;n<this.voices.length;n++)this.voices[n].isActive=!1;s>this.voices.length&&(c.warn(`Allocating ${s-this.voices.length} new voices!`),this.allocateNewVoices(s-this.voices.length));break}case"keyShift":t!==e&&this.stopAllChannels(!0)}}var Yt=-15e3,St=new Float32Array(15e3-Yt+1);for(let A=0;A<St.length;A++){let e=Yt+A;St[A]=Math.pow(2,e/1200)}function qA(A){return A<=-32767?0:St[A-Yt]}var zA=-2e4,Vs=16500,Mt=new Float32Array(Vs-zA+1);for(let A=0;A<Mt.length;A++){let e=zA+A;Mt[A]=440*Math.pow(2,(e-6900)/1200)}function Lt(A){return A<zA||A>Vs?440*Math.pow(2,(A-6900)/1200):Mt[A-zA|0]}var oA=-16600,gA=new Float32Array(16e3-oA+1);for(let A=0;A<gA.length;A++){let e=oA+A;gA[A]=Math.pow(10,-e/200)}function VA(A){return gA[A-oA|0]}var Ln=.03,qt=class EA{static smoothingConstant=1;static cachedCoefficients=new Map;resonanceCb=0;currentInitialFc=13500;a0=0;a1=0;a2=0;a3=0;a4=0;x1=0;x2=0;y1=0;y2=0;lastTargetCutoff=1/0;initialized=!1;sampleRate;maxCutoff;constructor(e){this.sampleRate=e,this.maxCutoff=e*.45}static initCache(e){EA.smoothingConstant=Ln*(44100/e);let t=new EA(e);t.resonanceCb=0;for(let s=8e3;s<13500;s++)t.currentInitialFc=s,t.calculateCoefficients(s)}init(){this.lastTargetCutoff=1/0,this.resonanceCb=0,this.currentInitialFc=13500,this.a0=0,this.a1=0,this.a2=0,this.a3=0,this.a4=0,this.x1=0,this.x2=0,this.y1=0,this.y2=0,this.initialized=!1}calculateCoefficients(e){e=e|0;let t=this.resonanceCb,s=EA.cachedCoefficients.get(t+e*961);if(s!==void 0){this.a0=s.a0,this.a1=s.a1,this.a2=s.a2,this.a3=s.a3,this.a4=s.a4;return}let n=Lt(e);n=Math.min(n,this.maxCutoff);let a=VA(-(t-3.01)),i=1/Math.sqrt(VA(-t)),r=2*Math.PI*n/this.sampleRate,o=Math.cos(r),g=Math.sin(r)/(2*a),C=(1-o)*i,l=C/2,h=l,d=1+g,B=-2*o,m=1-g,u={a0:l/d,a1:C/d,a2:h/d,a3:B/d,a4:m/d};this.a0=u.a0,this.a1=u.a1,this.a2=u.a2,this.a3=u.a3,this.a4=u.a4,EA.cachedCoefficients.set(t+e*961,u)}},I=Object.freeze({invalid:-1,startAddrsOffset:0,endAddrOffset:1,startloopAddrsOffset:2,endloopAddrsOffset:3,startAddrsCoarseOffset:4,modLfoToPitch:5,vibLfoToPitch:6,modEnvToPitch:7,initialFilterFc:8,initialFilterQ:9,modLfoToFilterFc:10,modEnvToFilterFc:11,endAddrsCoarseOffset:12,modLfoToVolume:13,chorusEffectsSend:15,reverbEffectsSend:16,pan:17,delayModLFO:21,freqModLFO:22,delayVibLFO:23,freqVibLFO:24,delayModEnv:25,attackModEnv:26,holdModEnv:27,decayModEnv:28,sustainModEnv:29,releaseModEnv:30,keyNumToModEnvHold:31,keyNumToModEnvDecay:32,delayVolEnv:33,attackVolEnv:34,holdVolEnv:35,decayVolEnv:36,sustainVolEnv:37,releaseVolEnv:38,keyNumToVolEnvHold:39,keyNumToVolEnvDecay:40,instrument:41,keyRange:43,velRange:44,startloopAddrsCoarseOffset:45,keyNum:46,velocity:47,initialAttenuation:48,endloopAddrsCoarseOffset:50,coarseTune:51,fineTune:52,sampleID:53,sampleModes:54,scaleTuning:56,exclusiveClass:57,overridingRootKey:58,endOper:60,amplitude:61,vibLfoRate:62,vibLfoAmplitudeDepth:63,vibLfoToFilterFc:64,modLfoRate:65,modLfoAmplitudeDepth:66}),Ws=Math.max(...Object.values(I)),Xe=Ws+1,Fe=Object.freeze({[I.invalid]:{min:0,max:0,def:0,nrpn:0},[I.endOper]:{min:0,max:0,def:0,nrpn:0},[I.instrument]:{min:0,max:0,def:0,nrpn:0},[I.sampleID]:{min:0,max:0,def:0,nrpn:0},[I.keyRange]:{min:0,max:0,def:0,nrpn:0},[I.velRange]:{min:0,max:0,def:0,nrpn:0},[I.startAddrsOffset]:{min:0,max:32768,def:0,nrpn:1},[I.endAddrOffset]:{min:-32768,max:32768,def:0,nrpn:1},[I.startloopAddrsOffset]:{min:-32768,max:32768,def:0,nrpn:1},[I.endloopAddrsOffset]:{min:-32768,max:32768,def:0,nrpn:1},[I.startAddrsCoarseOffset]:{min:0,max:32768,def:0,nrpn:1},[I.modLfoToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[I.vibLfoToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[I.modEnvToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[I.initialFilterFc]:{min:1500,max:13500,def:13500,nrpn:2},[I.initialFilterQ]:{min:0,max:960,def:0,nrpn:1},[I.modLfoToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[I.modEnvToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[I.endAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[I.modLfoToVolume]:{min:-960,max:960,def:0,nrpn:1},[I.chorusEffectsSend]:{min:0,max:1e3,def:0,nrpn:1},[I.reverbEffectsSend]:{min:0,max:1e3,def:0,nrpn:1},[I.pan]:{min:-500,max:500,def:0,nrpn:1},[I.delayModLFO]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[I.freqModLFO]:{min:-16e3,max:4500,def:0,nrpn:4},[I.delayVibLFO]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[I.freqVibLFO]:{min:-16e3,max:4500,def:0,nrpn:4},[I.delayModEnv]:{min:-32768,max:5e3,def:-32768,nrpn:2},[I.attackModEnv]:{min:-32768,max:8e3,def:-32768,nrpn:2},[I.holdModEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[I.decayModEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[I.sustainModEnv]:{min:0,max:1e3,def:0,nrpn:1},[I.releaseModEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[I.keyNumToModEnvHold]:{min:-1200,max:1200,def:0,nrpn:1},[I.keyNumToModEnvDecay]:{min:-1200,max:1200,def:0,nrpn:1},[I.delayVolEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[I.attackVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[I.holdVolEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[I.decayVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[I.sustainVolEnv]:{min:0,max:1440,def:0,nrpn:1},[I.releaseVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[I.keyNumToVolEnvHold]:{min:-1200,max:1200,def:0,nrpn:1},[I.keyNumToVolEnvDecay]:{min:-1200,max:1200,def:0,nrpn:1},[I.startloopAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[I.keyNum]:{min:-1,max:127,def:-1,nrpn:1},[I.velocity]:{min:-1,max:127,def:-1,nrpn:1},[I.initialAttenuation]:{min:0,max:1440,def:0,nrpn:1},[I.endloopAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[I.coarseTune]:{min:-120,max:120,def:0,nrpn:1},[I.fineTune]:{min:-12700,max:12700,def:0,nrpn:1},[I.scaleTuning]:{min:0,max:1200,def:100,nrpn:1},[I.exclusiveClass]:{min:0,max:99999,def:0,nrpn:0},[I.overridingRootKey]:{min:-1,max:127,def:-1,nrpn:0},[I.sampleModes]:{min:0,max:3,def:0,nrpn:0},[I.amplitude]:{min:-1e3,max:1e3,def:0,nrpn:1},[I.vibLfoRate]:{min:-1e3,max:1e3,def:0,nrpn:1},[I.vibLfoToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[I.vibLfoAmplitudeDepth]:{min:0,max:1e3,def:0,nrpn:1},[I.modLfoRate]:{min:-1e3,max:1e3,def:0,nrpn:1},[I.modLfoAmplitudeDepth]:{min:0,max:1e3,def:0,nrpn:1}}),Se=960,FA=900,vn=class{outputGain=0;attenuationCb=Se;state=0;sampleRate;updateInterval;sampleTime=0;releaseStartCb=Se;releaseStartTimeSamples=0;attackDuration=0;decayDuration=0;releaseDuration=0;sustainCb=0;delayEnd=0;attackEnd=0;holdEnd=0;decayEnd=0;enteredRelease=!1;canEndOnSilentSustain=!1;constructor(A,e){this.sampleRate=A,this.updateInterval=e}startRelease(A){this.releaseStartTimeSamples=this.sampleTime;let e=A.overrideReleaseVolEnv||A.modulatedGenerators[I.releaseVolEnv];if(this.releaseDuration=this.timecentsToSamples(Math.max(-7200,e)),this.enteredRelease)this.releaseStartCb=this.attenuationCb;else{let s=Math.max(0,Math.min(Se,this.sustainCb)),n=s/Se,a=(60-A.targetKey)*A.modulatedGenerators[I.keyNumToVolEnvDecay];switch(this.decayDuration=this.timecentsToSamples(A.modulatedGenerators[I.decayVolEnv]+a)*n,this.state){case 0:this.releaseStartCb=Se;break;case 1:{let i=1-(this.attackEnd-this.releaseStartTimeSamples)/this.attackDuration;this.releaseStartCb=200*Math.log10(i)*-1;break}case 2:this.releaseStartCb=0;break;case 3:this.releaseStartCb=(1-(this.decayEnd-this.releaseStartTimeSamples)/this.decayDuration)*s;break;case 4:this.releaseStartCb=s;break}this.releaseStartCb=Math.max(0,Math.min(this.releaseStartCb,Se)),this.attenuationCb=this.releaseStartCb}this.enteredRelease=!0;let t=(Se-this.releaseStartCb)/Se;this.releaseDuration*=t,this.releaseStartCb>=FA&&(A.isActive=!1)}init(A){this.enteredRelease=!1,this.state=0,this.sampleTime=0,this.outputGain=0,this.canEndOnSilentSustain=A.modulatedGenerators[I.sustainVolEnv]>=FA,this.sustainCb=Math.min(Se,A.modulatedGenerators[I.sustainVolEnv]),this.attackDuration=this.timecentsToSamples(A.modulatedGenerators[I.attackVolEnv]);let e=(60-A.targetKey)*A.modulatedGenerators[I.keyNumToVolEnvDecay],t=this.sustainCb/Se;this.decayDuration=this.timecentsToSamples(A.modulatedGenerators[I.decayVolEnv]+e)*t,this.delayEnd=this.timecentsToSamples(A.modulatedGenerators[I.delayVolEnv]),this.attackEnd=this.attackDuration+this.delayEnd;let s=(60-A.targetKey)*A.modulatedGenerators[I.keyNumToVolEnvHold];this.holdEnd=this.timecentsToSamples(A.modulatedGenerators[I.holdVolEnv]+s)+this.attackEnd,this.decayEnd=this.decayDuration+this.holdEnd,this.attackEnd<=this.updateInterval&&(this.state=2)}process(A,e){let{releaseStartTimeSamples:t,releaseStartCb:s,releaseDuration:n,delayEnd:a,attackEnd:i,attackDuration:r,holdEnd:o,decayEnd:g,decayDuration:C,sustainCb:l}=this,h=this.sampleTime+=A;if(this.enteredRelease){let d=h-t,B=Se-s;return this.attenuationCb=d/n*B+s,this.outputGain=gA[this.attenuationCb-oA|0]*e,this.attenuationCb<FA}switch(this.state){case 0:if(h<a)return this.attenuationCb=Se,this.outputGain=0,!0;this.state++;case 1:if(h<i){this.attenuationCb=0;let d=1-(i-h)/r;return this.outputGain=d*e,!0}this.state++;case 2:if(h<o)return this.attenuationCb=0,this.outputGain=e,!0;this.state++;case 3:if(h<g)return this.attenuationCb=(1-(g-h)/C)*l,this.outputGain=e*gA[this.attenuationCb-oA|0],!0;this.state++;case 4:return this.canEndOnSilentSustain&&l>=FA?(this.attenuationCb=Se,this.outputGain=0,!1):(this.attenuationCb=l,this.outputGain=e*gA[l-oA|0],!0)}}timecentsToSamples(A){return Math.max(0,Math.floor(qA(A)*this.sampleRate))}},Qe={monoSample:1,rightSample:2,leftSample:4,linkedSample:8,romMonoSample:32769,romRightSample:32770,romLeftSample:32772,romLinkedSample:32776},se={noController:0,noteOnVelocity:2,noteOnKeyNum:3,polyPressure:10,channelPressure:13,pitchWheel:14,pitchWheelRange:16,link:127},ne={linear:0,concave:1,convex:2,switch:3};var we=16384,WA=Object.keys(ne).length,He=new Float32Array(we+1),Ze=new Float32Array(we+1);He[0]=0;He[He.length-1]=1;Ze[0]=0;Ze[Ze.length-1]=1;for(let A=1;A<we-1;A++){let e=-.4166666666666667*Math.log(A/(He.length-1))/Math.LN10;Ze[A]=1-e,He[He.length-1-A]=e}function js(A,e,t){let s=!!(A&2);switch(A&1&&(t=1-t),e){case ne.linear:return s?t*2-1:t;case ne.switch:return t=t>.5?1:0,s?t*2-1:t;case ne.concave:return s?(t=t*2-1,t<0?-He[Math.trunc(t*-we)]:He[Math.trunc(t*we)]):He[Math.trunc(t*we)];case ne.convex:return s?(t=t*2-1,t<0?-Ze[Math.trunc(t*-we)]:Ze[Math.trunc(t*we)]):Ze[Math.trunc(t*we)]}}var Bt=1,vt=new Float32Array(1e3);for(let A=0;A<vt.length;A++)vt[A]=js(0,ne.convex,A/1e3);var Fn=class{attackDuration=0;decayDuration=0;holdDuration=0;releaseDuration=0;sustainLevel=0;delayEnd=0;attackEnd=0;holdEnd=0;releaseStartLevel=0;currentValue=0;enteredRelease=!1;decayEnd=0;process(A,e){return this.enteredRelease?this.releaseStartLevel===0?0:Math.max(0,(1-(e-A.releaseStartTime)/this.releaseDuration)*this.releaseStartLevel):(e<this.delayEnd?this.currentValue=0:e<this.attackEnd?this.currentValue=vt[~~((1-(this.attackEnd-e)/this.attackDuration)*1e3)]:e<this.holdEnd?this.currentValue=Bt:e<this.decayEnd?this.currentValue=(1-(this.decayEnd-e)/this.decayDuration)*(this.sustainLevel-Bt)+Bt:this.currentValue=this.sustainLevel,this.currentValue)}startRelease(A){this.releaseStartLevel=this.currentValue,this.enteredRelease=!0;let e=this.tc2Sec(Math.max(A.modulatedGenerators[I.releaseModEnv],-7200));this.releaseDuration=e*this.releaseStartLevel}init(A){this.enteredRelease=!1,this.sustainLevel=1-A.modulatedGenerators[I.sustainModEnv]/1e3,this.attackDuration=this.tc2Sec(A.modulatedGenerators[I.attackModEnv]);let e=(60-A.targetKey)*A.modulatedGenerators[I.keyNumToModEnvDecay],t=this.tc2Sec(A.modulatedGenerators[I.decayModEnv]+e);this.decayDuration=t*(1-this.sustainLevel);let s=(60-A.targetKey)*A.modulatedGenerators[I.keyNumToModEnvHold];this.holdDuration=this.tc2Sec(s+A.modulatedGenerators[I.holdModEnv]),this.delayEnd=A.startTime+this.tc2Sec(A.modulatedGenerators[I.delayModEnv]),this.attackEnd=this.delayEnd+this.attackDuration,this.holdEnd=this.attackEnd+this.holdDuration,this.decayEnd=this.holdEnd+this.decayDuration}tc2Sec(A){return A<=-10114?0:qA(A)}},zt=class{isLooping=!1;sampleData;playbackStep=0;loopStart=0;loopEnd=0;loopLength=0;end=0;cursor=0},Rn=class extends zt{process(A,e,t){let s=e*this.playbackStep,n=this.sampleData,{loopEnd:a,loopLength:i,end:r}=this,o=this.cursor;if(this.isLooping)for(let g=0;g<A;g++){for(;o>=a;)o-=i;let C=o|0,l=C+1;l>=a&&(l-=i);let h=o-C,d=n[l],B=n[C];t[g]=B+(d-B)*h,o+=s}else for(let g=0;g<A;g++){let C=o|0,l=C+1;if(l>=r)return t.fill(0,g,A),!1;let h=o-C,d=n[l],B=n[C];t[g]=B+(d-B)*h,o+=s}return this.cursor=o,!0}},bn=class extends zt{process(A,e,t){let s=e*this.playbackStep,n=this.sampleData,{loopEnd:a,loopLength:i,end:r}=this,o=this.cursor;if(this.isLooping)for(let g=0;g<A;g++){for(;o>=a;)o-=i;t[g]=n[o|0],o+=s}else for(let g=0;g<A;g++){if(o>=r)return t.fill(0,g,A),!1;t[g]=n[o|0],o+=s}return this.cursor=o,!0}},Pn=class extends zt{process(A,e,t){let s=e*this.playbackStep,n=this.sampleData,{loopEnd:a,loopLength:i,end:r}=this,o=this.cursor;if(this.isLooping)for(let g=0;g<A;g++){for(;o>=a;)o-=i;let C=o|0,l=C+1,h=C+2,d=C+3,B=o-C;l>=a&&(l-=i),h>=a&&(h-=i),d>=a&&(d-=i);let m=n[C],u=n[l],w=n[h],L=n[d],k=(w-m)*.5,S=u-w,v=k+S,x=v+S+(L-u)*.5,y=v+x;t[g]=((x*B-y)*B+k)*B+u,o+=s}else for(let g=0;g<A;g++){let C=o|0,l=C+1,h=C+2,d=C+3,B=o-C;if(d>=r)return t.fill(0,g,A),!1;let m=n[C],u=n[l],w=n[h],L=n[d],k=(w-m)*.5,S=u-w,v=k+S,x=v+S+(L-u)*.5,y=v+x;t[g]=((x*B-y)*B+k)*B+u,o+=s}return this.cursor=o,!0}},Nn=-2320,Gn=class{oscillators=[new Rn,new bn,new Pn];wavetable=this.oscillators[zs.interpolationType];filter;generators=new Int16Array(Xe);modulatedGenerators=new Int16Array(Xe);modulators=new Array;modulatorValues=new Int16Array(64);modEnv=new Fn;volEnv;resonanceOffset=0;priority=0;isActive=!1;hasRendered=!1;isInRelease=!1;isHeld=!1;channel=0;noteID=0;midiNote=0;targetKey=0;velocity=0;rootKey=0;pressure=0;gainModifier=1;loopingMode=0;startTime=0;releaseStartTime=1/0;tuningCents=0;tuningRatio=1;currentPan=0;portamentoFromKey=-1;portamentoDuration=0;overridePan=0;pitchOffset=0;reverbSend=1;chorusSend=1;delaySend=1;exclusiveClass=0;overrideReleaseVolEnv=0;vibLfoPhase=0;vibLfoStartTime=0;modLfoPhase=0;modLfoStartTime=0;constructor(A,e){this.volEnv=new vn(A,e),this.filter=new qt(A)}exclusiveRelease(A,e=za){this.overrideReleaseVolEnv=Nn,this.isInRelease=!1,this.releaseVoice(A,e)}releaseVoice(A,e=qa){this.releaseStartTime=A,this.releaseStartTime-this.startTime<e&&(this.releaseStartTime=this.startTime+e)}setup(A,e,t,s){this.isActive=!0,this.isInRelease=!1,this.hasRendered=!1,this.isHeld=!1,this.releaseStartTime=1/0,this.pressure=0,this.overrideReleaseVolEnv=0,this.portamentoDuration=0,this.portamentoFromKey=-1,this.vibLfoPhase=.25,this.modLfoPhase=.25,this.startTime=A,this.channel=e,this.midiNote=t,this.noteID=s}};function je(A,e){return(A>>e&1)>0}function dt(A){return A?1:0}var Ge=class Ft{isBipolar;isNegative;index;isCC;curveType;constructor(e=se.noController,t=ne.linear,s=!1,n=!1,a=!1){this.isBipolar=n,this.isNegative=a,this.index=e,this.isCC=s,this.curveType=t}get sourceName(){return this.isCC?Object.keys(Q).find(e=>Q[e]===this.index)??this.index.toString():Object.keys(se).find(e=>se[e]===this.index)??this.index.toString()}get curveTypeName(){return Object.keys(ne).find(e=>ne[e]===this.curveType)??this.curveType.toString()}static fromSourceEnum(e){let t=je(e,9),s=je(e,8),n=je(e,7);return new Ft(e&127,e>>10&3,n,t,s)}static copyFrom(e){return new Ft(e.index,e.curveType,e.isCC,e.isBipolar,e.isNegative)}toString(){return`${this.sourceName} ${this.curveTypeName} ${this.isBipolar?"bipolar":"unipolar"} ${this.isNegative?"negative":"positive"}`}toSourceEnum(){return this.curveType<<10|dt(this.isBipolar)<<9|dt(this.isNegative)<<8|dt(this.isCC)<<7|this.index}isIdentical(e){return this.index===e.index&&this.isNegative===e.isNegative&&this.isCC===e.isCC&&this.isBipolar===e.isBipolar&&this.curveType===e.curveType}getValue(e,t,s){let n;if(this.isCC)n=e.midiControllers[this.index];else switch(this.index){default:case se.noController:n=16383;break;case se.noteOnVelocity:n=s.velocity<<7;break;case se.noteOnKeyNum:n=s.targetKey<<7;break;case se.polyPressure:n=s.pressure<<7;break;case se.channelPressure:n=e.midiParameters.pressure<<7;break;case se.pitchWheel:n=t;break;case se.pitchWheelRange:n=Math.floor(e.midiParameters.pitchWheelRange*128)}let a=(this.isBipolar?2:0)|(this.isNegative?1:0);return Zs[we*(this.curveType*WA+a)+n]}},Zs=new Float32Array(we*4*WA);for(let A=0;A<WA;A++)for(let e=0;e<4;e++){let t=we*(A*WA+e);for(let s=0;s<we;s++)Zs[t+s]=js(e,A,s/we)}function Je(A,e,t,s,n){return new Ge(n,A,s,e,t).toSourceEnum()}var Xs=Je(ne.linear,!0,!1,!0,Q.filterResonance),Be=class Rt{destination=I.initialAttenuation;transformAmount=0;transformType=0;primarySource;secondarySource;constructor(e=new Ge,t=new Ge,s=I.invalid,n=0,a=0){this.primarySource=e,this.secondarySource=t,this.destination=s,this.transformAmount=n,this.transformType=a}get destinationName(){return Object.keys(I).find(e=>I[e]===this.destination)}static isIdentical(e,t,s=!1){return e.primarySource.isIdentical(t.primarySource)&&e.secondarySource.isIdentical(t.secondarySource)&&e.destination===t.destination&&e.transformType===t.transformType&&(!s||e.transformAmount===t.transformAmount)}static copyFrom(e){return new Rt(Ge.copyFrom(e.primarySource),Ge.copyFrom(e.secondarySource),e.destination,e.transformAmount,e.transformType)}toString(){return`Source: ${this.primarySource.toString()}
|
|
1
|
+
var gs="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ASAALQDgCiIBRQ0DCyAAIAFBAWsiAToA4AogACAAKAL4CkEBajYC+AogACgCICIDIAAoAihPBEAgAEEBNgJgBSAAIANBAWo2AiALDAELCwwBC0H6DEGhDEGdCBAFAAsgAkEANgLkByACKAIIQQBKBEAgAkHoB2ohBCACQaQHaiEHIAJBpAZqIQZBACEBA0AgBiABQQJ0IgBqIgUgAkEEaiIDIAIoAnhBAnQQIDYCACAAIAdqIgkgAyACKAJ4QQF0Qf7///8HcRAgNgIAIAAgBGogAyAMECAiADYCAAJAAkAgBSgCACIDRQ0AIAkoAgBFDQAgAA0BCyACQQM2AmgMEQsgAigCeEECdCIABEAgA0EAIAD8CwALIAFBAWoiASACKAIISA0ACwsgAkEEaiIAQQAgAigCdBAlRQ0OIABBASACKAJ4ECVFDQ4gAiACKAJ0NgJsIAIgAigCeCIANgJwIAIgAEEBdEH+////B3EiBCACKAKMAiIHQQBMBH9BBAUgAEECbSEAQQAhASACKAKQAyEGQQAhCANAIAYgCEEYbGoiAygCBCIFIAAgACAFSxsgAygCACIFIAAgACAFSxtrIAMoAghuIgMgASABIANIGyEBIAhBAWoiCCAHRw0ACyABQQJ0QQRqCyACKAIIbCIAIAAgBEkbIgE2AhACQCACKAJUIgBFDQAgAigCYCIDIAIoAlhHDQMgASACKAJcakHoC2ogA00NACACQQM2AmgMDwsgAiACKALoCkF/RgR/QQAgAigCJCACKAIoayACLQA0GwVBAAs2AjggAiACKAIMQegLajYCDAJ/IAAEQCACKAJcIgFB6AtqIgMgAigCYEoNECACIAM2AlwgACABagwBC0HoCxAJCyIERQ0OIAQgAkEEakHoC/wKAAAgBCACQfALaiACQewLaiACQdwTahARBEAgBCACKALwCyACKALsCyACKALcExAXGgsgBCgCACEWIAQoAgQiCkEOdBAJIQAgCkEATA0GIABFDQYgFkEATA0GIApBAnQhGSAEQeAGaiEPIARBoAZqIQ4gCkEMdCERAkADQCAAIQMDQCAKIAQoAgQiECAKIAogEEobIgBBAWoiASABIApIGyIBQQJ0IRogASAAa0ECdCEXIBEgCiAUbCINayAKbSELIAMgDUECdGohByAAQfz///8HcSEbIABBA3EhGEEA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kARqIQcDQCAHIgUgAfwCIgZBwOwAai0AACANcjoAACABIAa3oUQAAAAAAAAwQKIhAQJAIAdBAWoiByAMQZAEamtBAUcNACABRAAAAAAAAAAAYSAIcQ0AIAVBLjoAASAFQQJqIQcLIAFEAAAAAAAAAABiDQALQX8hCiADQfv///8HIA8gECALayIIamtKDQAgAEEgIAIgA0ECaiAHIAxBkARqIgZrIg0gDUECayADSBsgDSADGyIFIAggD0ECciIDamoiByAEEDggACAJIAMQNCAAQTAgAiAHIARBgIAEcxA4IAAgBiANEDQgAEEwIAUgDWtBAEEAEDggACALIAgQNCAAQSAgAiAHIARBgMAAcxA4IAIgByACIAdKGyEKCyAMQbAEaiQAIAoLsgUCBn4DfyABIAEoAgBBB2pBeHEiAUEQajYCACAAIAEpAwAhAiABKQMIIQYjAEEgayIAJAAgBkL///////8/gyEDAn4gBkIwiEL//wGDIgSnIghBgfgAa0H9D00EQCADQgSGIAJCPIiEIQMgCEGA+ABrrSEEAkAgAkL//////////w+DIgJCgYCAgICAgIAIWgRAIANCAXwhAwwBCyACQoCAgICAgICACFINACADQgGDIAN8IQMLQgAgAyADQv////////8HViIBGyECIAGtIAR8DAELAkAgAiADhFANACAEQv//AVINACADQgSGIAJCPIiEQoCAgICAgIAEhCECQv8PDAELIAhB/ocBSwRAQgAhAkL/DwwBC0GA+ABBgfgAIARQIgkbIgogCGsiAUHwAEoEQEIAIQJCAAwBCyADIANCgICAgICAwACEIAkbIQNBACEJIAggCkcEQCACIQQgAyEFAkBBgAEgAWsiCEHAAHEEQCACIAhBQGqthiEFQgAhBAwBCyAIRQ0AIAUgCK0iB4YgBEHAACAIa62IhCEFIAQgB4YhBAsgACAENwMQIAAgBTcDGCAAKQMQIAApAxiEQgBSIQkLAkAgAUHAAHEEQCADIAFBQGqtiCECQgAhAwwBCyABRQ0AIANBwAAgAWuthiACIAGtIgSIhCECIAMgBIghAwsgACACNwMAIAAgAzcDCCAAKQMIQgSGIAApAwAiA0I8iIQhAgJAIAmtIANC//////////8Pg4QiA0KBgICAgICAgAhaBEAgAkIBfCECDAELIANCgICAgICA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QCADIQIDQCAGIAIiBEEDdGogACAGQeADaiACQQJ0aigCALeiOQMAIAJBAWshAiAARAAAAAAAAHA+oiEAIAQNAAsgAyEFA0ACQCAHIAMgBWsiBCAEIAdKGyIJQQBIBEBEAAAAAAAAAAAhAAwBCyAGIAVBA3RqIQxBACECRAAAAAAAAAAAIQADQCACQQN0IggrA7CCASAIIAxqKwMAoiAAoCEAIAIgCUchCCACQQFqIQIgCA0ACwsgBkGgAWogBEEDdGogADkDACAFQQBKIQIgBUEBayEFIAINAAsLRAAAAAAAAAAAIQAgA0EATgRAIAMhAgNAIAIiBEEBayECIAAgBkGgAWogBEEDdGorAwCgIQAgBA0ACwsgCiAAmiAAIAsbOQMAIAYrA6ABIAChIQBBASECIANBAEoEQANAIAAgBkGgAWogAkEDdGorAwCgIQAgAiADRyEEIAJBAWohAiAEDQALCyAKIACaIAAgCxs5AwggBkGwBGokACANQQdxDAILQQEhAgNAIAIiBEEBaiECIAZB4ANqIAcgBGtBAnRqKAIARQ0ACyADIARqIQQDQCAGQcACaiADIAhqIgVBA3RqIBIgA0EBaiIDQQJ0aigCALc5AwBBACECRAAAAAAAAAAAIQAgCEEASgRAA0AgDyACQQN0aisDACAGQcACaiAFIAJrQQN0aisDAKIgAKAhACACQQFqIgIgCEcNAAsLIAYgA0EDdGogADkDACADIARIDQALIAQhAwwACwALIQMgCisDACEAIBhCAFMEQCABIACaOQMAIAEgCisDCJo5AwhBACADayEDDAELIAEgADkDACABIAorAwg5AwgLIApBMGokACADC5kBAQN8IAAgAKIiAyADIAOioiADRHzVz1o62eU9okTrnCuK5uVavqCiIAMgA0R9/rFX4x3HPqJE1WHBGaABKr+gokSm+BARERGBP6CgIQUgACADoiEEIAJFBEAgBCADIAWiRElVVVVVVcW/oKIgAKAPCyAAIAMgAUQAAAAAAADgP6IgBCAFoqGiIAGhIARESVVVVVVVxT+ioKELC+V2lAEAQYAIC/gGLSsgICAwWDB4AC0wWCswWCAwWC0weCsweCAweABnZXQ4X3BhY2tldF9yYXcAY29kZWJvb2tfZGVjb2RlX3NjYWxhcl9yYXcAdm9yYmlzX2RlY29kZV9wYWNrZXRfcmVzdABpbmNsdWRlX2luX3NvcnQAY29kZWJvb2tfZGVjb2RlX3N0YXJ0AG5leHRfc2VnbWVudABmLT5hbGxvYy5hbGxvY19idWZmZXJfbGVuZ3RoX2luX2J5dGVzID09IGYtPnRlbXBfb2Zmc2V0AGNvZGVib29rX2RlY29kZV9kZWludGVybGVhdmVfcmVwZWF0AGdldF9iaXRzAGYtPnRlbXBfb2Zmc2V0ID09IGYtPmFsbG9jLmFsbG9jX2J1ZmZlcl9sZW5ndGhfaW5fYnl0ZXMAayA9PSBjLT5zb3J0ZWRfZW50cmllcwAhYy0+c3BhcnNlIHx8IHogPCBjLT5zb3J0ZWRfZW50cmllcwBjb21wdXRlX2NvZGV3b3JkcwBzdGFydF9kZWNvZGVyAGltZGN0X3N0ZXAzX2l0ZXIwX2xvb3AAbmFuAGNvbXB1dGVfc29ydGVkX2h1ZmZtYW4AZi0+dmFsaWRfYml0cyA+PSBuAHZvcmJpc19kZWNvZGVfaW5pdGlhbABpbmYAIWMtPnNwYXJzZQBjLT5zb3J0ZWRfY29kZXdvcmRzW3hdID09IGNvZGUAL2hvbWUvcnVubmVyL3dvcmsvc3RiLXZvcmJpcy9zdGItdm9yYmlzL3dhc20vc3RiX3ZvcmJpcy5jAE5BTgBJTkYAbGVuICE9IE5PX0NPREUAeiA8IDMyAGxlbltrXSA8IDMyAGYtPmJ5dGVzX2luX3NlZyA+IDAAYy0+c29ydGVkX2VudHJpZXMgPT0gMABmLT5ieXRlc19pbl9zZWcgPT0gMABhdmFpbGFibGVbeV0gPT0gMAAobiAmIDMpID09IDAALgAobnVsbCkAQXNzZXJ0aW9uIGZhaWxlZDogJXMgKCVzOiAlczogJWQpCgAAAAD+gitlRxVnQAAAAAAAADhDAAD6/kIudr86O568mvcMvb39/////98/PFRVVVVVxT+RKxfPVVWlPxfQpGcREYE/AAAAAAAAyELvOfr+Qi7mPyTEgv+9v84/tfQM1whrrD/MUEbSq7KDP4Q6Tpvg11U/AEGGDwvCEPA/br+IGk87mzw1M/upPfbvP13c2JwTYHG8YYB3Pprs7z/RZocQel6QvIV/bugV4+8/E/ZnNVLSjDx0hRXTsNnvP/qO+SOAzou83vbdKWvQ7z9hyOZhTvdgPMibdRhF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",Fa=0,Ra=4,ba=8,Pa=12,Na="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function Ga(A){if(A=A.replaceAll(/[\t\n\f\r ]/g,""),A.length%4===1)throw new Error("Invalid base64 string");let e="",t=0,s=0;for(let n of A){if(n==="=")break;let a=Na.indexOf(n);if(a===-1)throw new Error("Invalid base64 character");t=t<<6|a,s+=6,s>=8&&(s-=8,e+=String.fromCharCode(t>>s&255))}return e}var Ta={env:{emscripten_notify_memory_growth:()=>{}},wasi_snapshot_preview1:{fd_close:()=>0,fd_write:()=>0,fd_seek:()=>0}},wA=class Is{static exports;static ready=(async()=>{let e="atob"in globalThis?atob(gs):Ga(gs),t=Uint8Array.from(e,n=>n.charCodeAt(0)),{instance:s}=await WebAssembly.instantiate(t,Ta);Is.exports=s.exports})();static decode(e){if(!this.exports)throw new Error("Vorbis decoder not ready");let t=e instanceof Uint8Array?e:new Uint8Array(e),s=this.exports,n=s.memory,a=s.malloc(t.byteLength);if(a===0)throw new Error("Failed to allocate WASM memory for Vorbis input");try{new Uint8Array(n.buffer,a,t.byteLength).set(t);let r=s.vorbis_decode(a,t.byteLength);if(r===0)throw new Error("Failed to decode Ogg Vorbis stream");try{let i=new DataView(n.buffer),o=i.getInt32(r+Fa,!0),g=i.getInt32(r+Ra,!0),l=i.getInt32(r+ba,!0);if(o<=0||l<=0||g<=0)throw new Error("Invalid Vorbis decoder result");let C=new Float32Array(n.buffer,r+Pa,o*l),h=new Array(o);for(let d=0;d<o;d++){let B=new Float32Array(l);for(let p=0;p<l;p++)B[p]=C[p*o+d];h[d]=B}return{sampleRate:g,channels:h}}finally{s.vorbis_free(r)}}finally{s.free(a)}}};function cA(A,e,t=0){let s=0;for(let n=0;n<e;n++)s=s<<8|A[t+n];return s>>>0}function iA(A,e){let t=cA(A,e,A.currentIndex);return A.currentIndex+=e,t}function SA(A,e){let t=new Array(e).fill(0);for(let s=e-1;s>=0;s--)t[s]=A&255,A>>=8;return t}function xa(A,e){let t=Ua(A,e,A.currentIndex);return A.currentIndex+=e,t}function Ua(A,e,t=0){let s=0n;for(let n=0;n<e;n++)s|=BigInt(A[t+n])<<BigInt(n*8);return Number(s)}function q(A,e){let t=xt(A,e,A.currentIndex);return A.currentIndex+=e,t}function xt(A,e,t=0){let s=0;for(let n=0;n<e;n++)s|=A[t+n]<<n*8;return s>>>0}function Ut(A,e,t){for(let s=0;s<t;s++)A[A.currentIndex++]=e>>s*8&255}function X(A,e){A[A.currentIndex++]=e&255,A[A.currentIndex++]=e>>8}function te(A,e){Ut(A,e,4)}function ct(A,e){let t=BigInt(e);for(let s=0n;s<8n;s++)A[A.currentIndex++]=Number(t>>s*8n&255n)}function Kt(A,e){let t=e<<8|A;return t>32767?t-65536:t}function Ka(A){return A>127?A-256:A}var j=class extends Uint8Array{currentIndex=0;slice(A,e){let t=super.slice(A,e);return t.currentIndex=0,t}};function ve(A,e=A.length,t=0){let s="";for(let n=0;n<e;n++){let a=A[t+n];if(a===0)return s;s+=String.fromCharCode(a)}return s}function re(A,e){let t=A.currentIndex;return A.currentIndex+=e,ve(A,e,t)}function Pe(A,e=!1,t=!1){let s=A.length;e&&s++,t&&s%2!==0&&s++;let n=new j(s);return pe(n,A),n}function pe(A,e,t=0){t>0&&e.length>t&&(e=e.slice(0,t));for(let s=0;s<e.length;s++)A[A.currentIndex++]=e.charCodeAt(s);if(t>e.length)for(let s=0;s<t-e.length;s++)A[A.currentIndex++]=0;return A}function Ie(A){let e=0;for(;A;){let t=A[A.currentIndex++];if(e=e<<7|t&127,t>>7!==1)break}return e}function lt(A){let e=[A&127];for(A>>=7;A>0;)e.unshift(A&127|128),A>>=7;return e}function Oa(A){return function(){A|=0,A=A+2654435769|0;let e=A^A>>>16;return e=Math.imul(e,569420461),e=e^e>>>15,e=Math.imul(e,1935289751),((e^e>>>15)>>>0)/4294967296}}var cs=Oa(81572);function Dt(A){A=Math.floor(A);let e=Math.floor(A/60),t=Math.round(A-e*60);return{minutes:e,seconds:t,time:`${e.toString().padStart(2,"0")}:${t.toString().padStart(2,"0")}`}}function Ts(A){let e="";for(let t=0;t<A.length;t++){let s=A[t].toString(16).padStart(2,"0").toUpperCase();e+=s,t<A.length-1&&(e+=" ")}return e}var E={warn:"color: orange;",unrecognized:"color: red;",info:"color: aqua;",recognized:"color: lime",value:"color: yellow; background-color: black;"},xs;(()=>{var A=Uint8Array,e=Uint16Array,t=Int32Array,s=new A([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),n=new A([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),a=new A([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),r=function(G,P){for(var f=new e(31),M=0;M<31;++M)f[M]=P+=1<<G[M-1];for(var b=new t(f[30]),M=1;M<30;++M)for(var V=f[M];V<f[M+1];++V)b[V]=V-f[M]<<5|M;return{b:f,r:b}},i=r(s,2),o=i.b,g=i.r;o[28]=258,g[258]=28;var l=r(n,0),C=l.b;l.r;var h=new e(32768);for(w=0;w<32768;++w)d=(w&43690)>>1|(w&21845)<<1,d=(d&52428)>>2|(d&13107)<<2,d=(d&61680)>>4|(d&3855)<<4,h[w]=((d&65280)>>8|(d&255)<<8)>>1;var d,w,B=function(G,P,f){for(var M=G.length,b=0,V=new e(P);b<M;++b)G[b]&&++V[G[b]-1];var W=new e(P);for(b=1;b<P;++b)W[b]=W[b-1]+V[b-1]<<1;var z;if(f){z=new e(1<<P);var J=15-P;for(b=0;b<M;++b)if(G[b])for(var Z=b<<4|G[b],$=P-G[b],H=W[G[b]-1]++<<$,ee=H|(1<<$)-1;H<=ee;++H)z[h[H]>>J]=Z}else for(z=new e(M),b=0;b<M;++b)G[b]&&(z[b]=h[W[G[b]-1]++]>>15-G[b]);return z},p=new A(288);for(w=0;w<144;++w)p[w]=8;var w;for(w=144;w<256;++w)p[w]=9;var w;for(w=256;w<280;++w)p[w]=7;var w;for(w=280;w<288;++w)p[w]=8;var w,D=new A(32);for(w=0;w<32;++w)D[w]=5;var w,L=B(p,9,1),k=B(D,5,1),S=function(G){for(var P=G[0],f=1;f<G.length;++f)G[f]>P&&(P=G[f]);return P},v=function(G,P,f){var M=P/8|0;return(G[M]|G[M+1]<<8)>>(P&7)&f},x=function(G,P){var f=P/8|0;return(G[f]|G[f+1]<<8|G[f+2]<<16)>>(P&7)},y=function(G){return(G+7)/8|0},u=function(G,P,f){return(P==null||P<0)&&(P=0),(f==null||f>G.length)&&(f=G.length),new A(G.subarray(P,f))},m=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],K=function(G,P,f){var M=new Error(P||m[G]);if(M.code=G,Error.captureStackTrace&&Error.captureStackTrace(M,K),!f)throw M;return M},T=function(G,P,f,M){var b=G.length,V=M?M.length:0;if(!b||P.f&&!P.l)return f||new A(0);var W=!f,z=W||P.i!=2,J=P.i;W&&(f=new A(b*3));var Z=function(rs){var is=f.length;if(rs>is){var os=new A(Math.max(is*2,rs));os.set(f),f=os}},$=P.f||0,H=P.p||0,ee=P.b||0,Ee=P.l,ke=P.d,ie=P.m,ue=P.n,Ne=b*8;do{if(!Ee){$=v(G,H,1);var CA=v(G,H+1,3);if(H+=3,CA)if(CA==1)Ee=L,ke=k,ie=9,ue=5;else if(CA==2){var eA=v(G,H,31)+257,_t=v(G,H+10,15)+4,$t=eA+v(G,H+5,31)+1;H+=14;for(var hA=new A($t),nt=new A(19),Re=0;Re<_t;++Re)nt[a[Re]]=v(G,H+Re*3,7);H+=_t*3;for(var es=S(nt),wa=(1<<es)-1,Sa=B(nt,es,1),Re=0;Re<$t;){var As=Sa[v(G,H,wa)];H+=As&15;var Te=As>>4;if(Te<16)hA[Re++]=Te;else{var AA=0,kA=0;for(Te==16?(kA=3+v(G,H,3),H+=2,AA=hA[Re-1]):Te==17?(kA=3+v(G,H,7),H+=3):Te==18&&(kA=11+v(G,H,127),H+=7);kA--;)hA[Re++]=AA}}var ts=hA.subarray(0,eA),qe=hA.subarray(eA);ie=S(ts),ue=S(qe),Ee=B(ts,ie,1),ke=B(qe,ue,1)}else K(1);else{var Te=y(H)+4,rt=G[Te-4]|G[Te-3]<<8,it=Te+rt;if(it>b){J&&K(0);break}z&&Z(ee+rt),f.set(G.subarray(Te,it),ee),P.b=ee+=rt,P.p=H=it*8,P.f=$;continue}if(H>Ne){J&&K(0);break}}z&&Z(ee+131072);for(var Ma=(1<<ie)-1,La=(1<<ue)-1,ot=H;;ot=H){var AA=Ee[x(G,H)&Ma],tA=AA>>4;if(H+=AA&15,H>Ne){J&&K(0);break}if(AA||K(2),tA<256)f[ee++]=tA;else if(tA==256){ot=H,Ee=null;break}else{var ss=tA-254;if(tA>264){var Re=tA-257,BA=s[Re];ss=v(G,H,(1<<BA)-1)+o[Re],H+=BA}var gt=ke[x(G,H)&La],It=gt>>4;gt||K(3),H+=gt&15;var qe=C[It];if(It>3){var BA=n[It];qe+=x(G,H)&(1<<BA)-1,H+=BA}if(H>Ne){J&&K(0);break}z&&Z(ee+131072);var as=ee+ss;if(ee<qe){var ns=V-qe,va=Math.min(qe,as);for(ns+ee<0&&K(3);ee<va;++ee)f[ee]=M[ns+ee]}for(;ee<as;++ee)f[ee]=f[ee-qe]}}P.l=Ee,P.p=ot,P.b=ee,P.f=$,Ee&&($=1,P.m=ie,P.d=ke,P.n=ue)}while(!$);return ee!=f.length&&W?u(f,0,ee):f.subarray(0,ee)},U=new A(0);function O(G,P){return T(G,{i:2},P&&P.out,P&&P.dictionary)}var Ae=typeof TextDecoder<"u"&&new TextDecoder;try{Ae.decode(U,{stream:!0})}catch{}xs=O})();var Us=xs,N=class Ks{header;size;data;headerSize;constructor(e,t,s,n=8){this.header=e,this.size=t,this.data=s,this.headerSize=n}static read(e,t=!1,s=!0){let n=re(e,4),a=t?xa(e,8):q(e,4);n===""&&(a=0);let r=s?e.slice(e.currentIndex,e.currentIndex+a):new j(0);return s&&(e.currentIndex+=a,a%2!==0&&e.currentIndex++),new Ks(n,a,r,t?12:8)}static write(e,t,s=!1,n=!1){if(e.length!==4)throw new Error(`Invalid header length: ${e}`);let a=s?12:8,r=e,i=t.length,o=i;n&&(a+=4,o+=4,r="LIST");let g=a+i;g%2!==0&&g++;let l=new j(g);return pe(l,r),s?ct(l,o):te(l,o),n&&pe(l,e),l.set(t,a),l}static getParts(e,t,s=!1,n=!1){let a=e,r=t.reduce((g,l)=>l.length+g,0);n&&(r+=4,a="LIST");let i;s?(i=new j(8),ct(i,r)):(i=new j(4),te(i,r));let o=[Pe(a),i];return n&&o.push(Pe(e)),o.push(...t),r%2!==0&&o.push(new Uint8Array(1)),o}static writeParts(e,t,s=!1,n=!1){let a=s?12:8,r=e,i=t.reduce((C,h)=>h.length+C,0),o=i;n&&(a+=4,o+=4,r="LIST");let g=a+i;g%2!==0&&g++;let l=new j(g);pe(l,r),s?ct(l,o):te(l,o),n&&pe(l,e);for(let C of t)l.set(C,a),a+=C.length;return l}static findListType(e,t){return e.find(s=>s.header!=="LIST"?!1:(s.data.currentIndex=4,ve(s.data,4)===t))}};function pA(A,e){return{...e,...A}}var c=class yt{static infoEnabled=!1;static warnEnabled=!0;static groupEnabled=!1;static logFunctions={info:console.info.bind(console),warn:console.warn.bind(console),group:console.group.bind(console),groupEnd:console.groupEnd.bind(console),groupCollapsed:console.groupCollapsed.bind(console)};static setLogLevel(e,t,s){this.infoEnabled=e,this.warnEnabled=t,this.groupEnabled=s}static info(...e){this.infoEnabled&&this.logFunctions.info(...e)}static warn(...e){this.warnEnabled&&this.logFunctions.warn(...e)}static group(...e){this.groupEnabled&&this.logFunctions.group(...e)}static groupCollapsed(...e){this.groupEnabled&&this.logFunctions.groupCollapsed(...e)}static groupEnd(){this.groupEnabled&&this.logFunctions.groupEnd()}static unsupported(e,t,s=""){this.infoEnabled&&this.info(`%cUnsupported %c${e}%c message: %c${Ts(t)}%c. ${s}`,E.warn,E.recognized,E.warn,E.unrecognized,E.warn)}static gmInfo(e,t,s=""){this.infoEnabled&&this.coolInfo(`General MIDI ${e}`,t,s)}static gmFail(e,t){this.infoEnabled&&this.unsupported(`General MIDI ${e}`,t)}static gsInfo(e,t,s=""){this.infoEnabled&&this.coolInfo(`Roland GS ${e}`,t,s)}static gsFail(e,t,s=""){this.infoEnabled&&this.unsupported(`Roland GS ${e}`,t,s)}static xgInfo(e,t,s=""){this.infoEnabled&&this.coolInfo(`Yamaha XG ${e}`,t,s)}static xgFail(e,t,s=""){this.infoEnabled&&this.unsupported(`Yamaha XG ${e}`,t,s)}static coolInfo(e,t,s=""){this.infoEnabled&&(s?yt.info(`%c${e}%c is now set to %c${t}%c ${s}.`,E.recognized,E.info,E.value,E.info):yt.info(`%c${e}%c is now set to %c${t}%c.`,E.recognized,E.info,E.value,E.info))}},Os={ConsoleColors:E,readBigEndian:cA,readLittleEndian:xt,readLittleEndianIndexed:q,readBinaryString:ve,readBinaryStringIndexed:re,readVariableLengthQuantity:Ie,inflateSync:Us},R={noteOff:128,noteOn:144,polyPressure:160,controllerChange:176,programChange:192,channelPressure:208,pitchWheel:224,systemExclusive:240,timecode:241,songPosition:242,songSelect:243,tuneRequest:246,clock:248,start:250,continue:251,stop:252,activeSensing:254,reset:255,sequenceNumber:0,text:1,copyright:2,trackName:3,instrumentName:4,lyric:5,marker:6,cuePoint:7,programName:8,midiChannelPrefix:32,midiPort:33,endOfTrack:47,setTempo:81,smpteOffset:84,timeSignature:88,keySignature:89,sequenceSpecific:127},Q={bankSelect:0,modulationWheel:1,breathController:2,undefinedCC3:3,footController:4,portamentoTime:5,dataEntryMSB:6,mainVolume:7,balance:8,undefinedCC9:9,pan:10,expression:11,effectControl1:12,effectControl2:13,undefinedCC14:14,undefinedCC15:15,generalPurposeController1:16,generalPurposeController2:17,generalPurposeController3:18,generalPurposeController4:19,undefinedCC20:20,undefinedCC21:21,undefinedCC22:22,undefinedCC23:23,undefinedCC24:24,undefinedCC25:25,undefinedCC26:26,undefinedCC27:27,undefinedCC28:28,undefinedCC29:29,undefinedCC30:30,undefinedCC31:31,bankSelectLSB:32,modulationWheelLSB:33,breathControllerLSB:34,undefinedCC3LSB:35,footControllerLSB:36,portamentoTimeLSB:37,dataEntryLSB:38,mainVolumeLSB:39,balanceLSB:40,undefinedCC9LSB:41,panLSB:42,expressionLSB:43,effectControl1LSB:44,effectControl2LSB:45,undefinedCC14LSB:46,undefinedCC15LSB:47,undefinedCC16LSB:48,undefinedCC17LSB:49,undefinedCC18LSB:50,undefinedCC19LSB:51,undefinedCC20LSB:52,undefinedCC21LSB:53,undefinedCC22LSB:54,undefinedCC23LSB:55,undefinedCC24LSB:56,undefinedCC25LSB:57,undefinedCC26LSB:58,undefinedCC27LSB:59,undefinedCC28LSB:60,undefinedCC29LSB:61,undefinedCC30LSB:62,undefinedCC31LSB:63,sustainPedal:64,portamentoOnOff:65,sostenutoPedal:66,softPedal:67,legatoFootswitch:68,hold2Pedal:69,soundVariation:70,filterResonance:71,releaseTime:72,attackTime:73,brightness:74,decayTime:75,vibratoRate:76,vibratoDepth:77,vibratoDelay:78,soundController10:79,generalPurposeController5:80,generalPurposeController6:81,generalPurposeController7:82,generalPurposeController8:83,portamentoControl:84,undefinedCC85:85,undefinedCC86:86,undefinedCC87:87,undefinedCC88:88,undefinedCC89:89,undefinedCC90:90,reverbDepth:91,tremoloDepth:92,chorusDepth:93,variationDepth:94,phaserDepth:95,dataIncrement:96,dataDecrement:97,nonRegisteredParameterLSB:98,nonRegisteredParameterMSB:99,registeredParameterLSB:100,registeredParameterMSB:101,undefinedCC102LSB:102,undefinedCC103LSB:103,undefinedCC104LSB:104,undefinedCC105LSB:105,undefinedCC106LSB:106,undefinedCC107LSB:107,undefinedCC108LSB:108,undefinedCC109LSB:109,undefinedCC110LSB:110,undefinedCC111LSB:111,undefinedCC112LSB:112,undefinedCC113LSB:113,undefinedCC114LSB:114,undefinedCC115LSB:115,undefinedCC116LSB:116,undefinedCC117LSB:117,undefinedCC118LSB:118,undefinedCC119LSB:119,allSoundOff:120,resetAllControllers:121,localControlOnOff:122,allNotesOff:123,omniModeOff:124,omniModeOn:125,monoModeOn:126,polyModeOn:127},Le={pitchWheelRange:0,fineTuning:1,coarseTuning:2,modulationDepth:5,resetParameters:16383},Ce={partParameter:1,drumPitch:24,drumPitchFine:25,drumLevel:26,drumPan:28,drumReverb:29,drumChorus:30,drumDelay:31,awe32:127,SF2:120},De={vibratoRate:8,vibratoDepth:9,vibratoDelay:10,tvfCutoffFrequency:32,tvfResonance:33,envelopeAttackTime:99,envelopeDecayTime:100,envelopeReleaseTime:102},oe=class xe{ticks;statusByte;data;constructor(e,t,s){this.ticks=e,this.statusByte=t,this.data=s}static pitchWheel(e,t,s){return new xe(e,R.pitchWheel|t%16,new Uint8Array([s&127,s>>7&127]))}static channelPressure(e,t,s){return new xe(e,R.channelPressure|t%16,new Uint8Array([s]))}static programChange(e,t,s){return new xe(e,R.programChange|t%16,new Uint8Array([s]))}static controllerChange(e,t,s,n){return new xe(e,R.controllerChange|t%16,new Uint8Array([s,n]))}static systemExclusive(e,t){return new xe(e,R.systemExclusive,new Uint8Array(t))}static registeredParameter(e,t,s,n){if(s>16383||s<0||n>16383||n<0)throw new Error("Parameter and value must be between 0 and 16383.");return[xe.controllerChange(e,t,Q.registeredParameterMSB,s>>7),xe.controllerChange(e,t,Q.registeredParameterLSB,s&127),xe.controllerChange(e,t,Q.dataEntryMSB,n>>7),xe.controllerChange(e,t,Q.dataEntryLSB,n&127)]}},ls=(A,e)=>{for(let t=0;t<A.length;t++)e.push(A.charCodeAt(t))};function Ja(A){if(!A.tracks)throw new Error("MIDI has no tracks!");let e=[];for(let s of A.tracks){let n=[],a=0,r;for(let i of s.events){let o=Math.max(0,i.ticks-a);if(i.statusByte===R.endOfTrack){a+=o;continue}let g;i.statusByte<=R.sequenceSpecific?(g=[255,i.statusByte,...lt(i.data.length),...i.data],r=void 0):i.statusByte===R.systemExclusive?(g=[240,...lt(i.data.length),...i.data],r=void 0):(g=[],r!==i.statusByte&&(r=i.statusByte,g.push(i.statusByte)),g.push(...i.data)),n.push(...lt(o),...g),a+=o}n.push(0,255,R.endOfTrack,0),e.push(n)}let t=[];ls("MThd",t),t.push(...SA(6,4),0,A.format,...SA(A.tracks.length,2),...SA(A.timeDivision,2));for(let s of e)ls("MTrk",t),t=t.concat(SA(s.length,4),s);return new Uint8Array(t).buffer}var MA=`SPESSASYNTH_EMBEDDED_BANK_${Math.random()}_DO_NOT_DELETE`,Ha=32767,Ya={time:0},qa=.03,za=.07,Va=.6;var GA=1/Math.cos(Math.PI/4)**2;var Cs=121,he=class{static getDefaultBank(A){return A==="gm2"?Cs:0}static getDrumBank(A){switch(A){default:throw new Error(`${A} doesn't have a bank MSB for drums.`);case"gm2":return 120;case"xg":return 127}}static isXGDrum(A){return A===120||A===127}static isValidXGMSB(A){return this.isXGDrum(A)||A===64||A===Cs}static isSystemXG(A){return A==="gm2"||A==="xg"}static addBankOffset(A,e,t){return this.isXGDrum(A)&&t?A:Math.min(A+e,127)}static subtractBankOffset(A,e,t){return this.isXGDrum(A)&&t?A:Math.max(0,A-e)}},be=class kt{static toMIDIString(e){return e.isGMGSDrum?`DRUM:${e.program}`:`${e.bankLSB}:${e.bankMSB}:${e.program}`}static fromMIDIString(e){let t=e.split(":");if(t.length>3||t.length<2)throw new Error(`Invalid MIDI string: ${e}`);return e.startsWith("DRUM")?{bankMSB:0,bankLSB:0,program:Number.parseInt(t[1]),isGMGSDrum:!0}:{bankLSB:Number.parseInt(t[0]),bankMSB:Number.parseInt(t[1]),program:Number.parseInt(t[2]),isGMGSDrum:!1}}static toFullMIDIString(e){return`${this.toMIDIString(e)} ${e.isDrum?"D":"M"} ${e.name}`}static fromFullMIDIString(e){let t=e.indexOf(" "),s=e.indexOf(" ",t+1);if(t===-1||s===-1)throw new Error(`Invalid named MIDI string: ${e}`);let n=e.slice(0,Math.max(0,t)),a=e.slice(t+1,s),r=e.slice(Math.max(0,s+1));return{...kt.fromMIDIString(n),isDrum:a==="D",name:r}}static matches(e,t){return e.isGMGSDrum||t.isGMGSDrum?e.isGMGSDrum===t.isGMGSDrum&&e.program===t.program:e.program===t.program&&e.bankLSB===t.bankLSB&&e.bankMSB===t.bankMSB}static compare(e,t){return e.isGMGSDrum&&!t.isGMGSDrum?1:!e.isGMGSDrum&&t.isGMGSDrum?-1:e.program!==t.program?e.program-t.program:e.bankMSB!==t.bankMSB?e.bankMSB-t.bankMSB:e.bankLSB-t.bankLSB}static isXGDrum(e){return e.isDrum&&!e.isGMGSDrum}static selectPatch(e,t,s){if(e.length===0)throw new Error("No presets!");t.isGMGSDrum&&he.isSystemXG(s)&&(t={...t,isGMGSDrum:!1,bankLSB:0,bankMSB:he.getDrumBank(s)});let{isGMGSDrum:n,bankLSB:a,bankMSB:r,program:i}=t,o=he.isSystemXG(s),g=he.isXGDrum(r)&&o,l=e.find(d=>this.matches(d,t));if(l&&(!g||g&&this.isXGDrum(l)))return l;let C=d=>{c.info(`%cPreset %c${kt.toMIDIString(t)}%c not found. (${s}) Replaced with %c${this.toFullMIDIString(d)}`,E.warn,E.unrecognized,E.warn,E.value)};if(n){let d=e.find(B=>B.isGMGSDrum&&B.program===i);return d||(d=e.find(B=>B.isDrum&&B.program===i),d)?(C(d),d):(d=this.getAnyDrums(e,!1),C(d),d)}if(g){let d=e.find(B=>B.program===i&&B.isDrum&&!B.isGMGSDrum);return d||(d=e.find(B=>B.isDrum&&B.program===i),d&&d.program<49)?(C(d),d):(d=this.getAnyDrums(e,!0),C(d),d)}let h=e.filter(d=>d.program===i&&!d.isDrum);if(h.length===0)return C(e[0]),e[0];if(l=o?h.find(d=>d.bankLSB===a):h.find(d=>d.bankMSB===r),l)return C(l),l;if(a!==64||!o){let d=Math.max(r,a);if(l=h.find(B=>B.bankLSB===d||B.bankMSB===d),l)return C(l),l}return C(h[0]),h[0]}static getAnyDrums(e,t){let s=t?e.find(n=>this.isXGDrum(n)):e.find(n=>n.isGMGSDrum);return s||(e.find(n=>n.isDrum)??e[0])}},ge=Object.freeze({type:"Other"}),_=class ae{static analyzeSysEx(e){if(e.length<3)return ge;switch(e[0]){default:return ge;case 126:case 127:return this.analyzeGM(e);case 65:return this.analyzeGS(e);case 67:return this.analyzeXG(e)}}static analyzeRPN(e,t,s){switch(t){default:return ge;case Le.pitchWheelRange:return{type:"Channel MIDI Param",channel:e,parameter:"pitchWheelRange",value:s/128};case Le.fineTuning:return{type:"Channel MIDI Param",channel:e,parameter:"fineTune",value:(s-8192)/81.92};case Le.coarseTuning:return{type:"Channel MIDI Param",channel:e,parameter:"keyShift",value:(s>>7)-64};case Le.modulationDepth:return{type:"Channel MIDI Param",channel:e,parameter:"modulationDepth",value:s/1.28}}}static analyzeNRPN(e,t,s){let n=t>>7,a=t&127;switch(n){default:return ge;case Ce.partParameter:switch(a){default:return ge;case De.vibratoRate:return{type:"Controller Change",channel:e,controller:Q.vibratoRate,value:s>>7};case De.vibratoDepth:return{type:"Controller Change",channel:e,controller:Q.vibratoDepth,value:s>>7};case De.vibratoDelay:return{type:"Controller Change",channel:e,controller:Q.vibratoDelay,value:s>>7};case De.tvfCutoffFrequency:return{type:"Controller Change",channel:e,controller:Q.brightness,value:s>>7};case De.tvfResonance:return{type:"Controller Change",channel:e,controller:Q.filterResonance,value:s>>7};case De.envelopeAttackTime:return{type:"Controller Change",channel:e,controller:Q.attackTime,value:s>>7};case De.envelopeDecayTime:return{type:"Controller Change",channel:e,controller:Q.decayTime,value:s>>7};case De.envelopeReleaseTime:return{type:"Controller Change",channel:e,controller:Q.releaseTime,value:s>>7}}case Ce.drumPitch:case Ce.drumPitchFine:case Ce.drumLevel:case Ce.drumPan:case Ce.drumReverb:case Ce.drumChorus:case Ce.drumDelay:return{type:"Drum Setup"}}}static setGlobalMIDIParameter(e,t,s,n){switch(s){case"system":return[ae.reset(e,n)];case"keyShift":switch(t){default:return[ae.deviceControlMessage(e,4,[0,n+64])];case"xg":return[ae.xgMessage(e,0,0,6,[n+64])];case"gs":return[ae.gsMessage(e,64,0,5,[n+64])]}case"fineTune":switch(t){default:{let a=Math.floor(n*81.92+8192);return[ae.deviceControlMessage(e,3,[a&127,a>>7&127])]}case"xg":{let a=Math.floor(n*10+1024);return[ae.xgMessage(e,0,0,0,[a>>12&15,a>>8&15,a>>4&15,a&15])]}case"gs":{let a=Math.floor(n*10+1024);return[ae.gsMessage(e,64,0,0,[a>>12&15,a>>8&15,a>>4&15,a&15])]}}case"volume":switch(t){default:{let a=Math.floor(n*16383);return[ae.deviceControlMessage(e,1,[a&127,a>>7&127])]}case"xg":{let a=Math.floor(n*127);return[ae.xgMessage(e,0,0,4,[a])]}case"gs":{let a=Math.floor(n*127);return[ae.gsMessage(e,64,0,4,[a])]}}case"pan":if(t==="gs"){let a=Math.floor(n*63)+64;return[ae.gsMessage(e,64,0,6,[a])]}else{let a=Math.floor(n*8192)+8192;return[ae.deviceControlMessage(e,2,[a&127,a>>7&127])]}}}static setChannelMIDIParameter(e,t,s,n,a){t%=16;let r=ae.channelToSyx(t);switch(n){case"pressure":return[oe.channelPressure(e,t,a)];case"pitchWheel":return[oe.pitchWheel(e,t,a)];case"pitchWheelRange":return oe.registeredParameter(e,t,Le.pitchWheelRange,Math.floor(a*128));case"modulationDepth":return oe.registeredParameter(e,t,Le.modulationDepth,Math.floor(a*1.28));case"rxChannel":return s==="xg"?[ae.xgMessage(e,8,t,4,[a])]:[ae.gsMessage(e,64,16|r,2,[a])];case"polyMode":return a?[oe.controllerChange(e,t,Q.polyModeOn,0)]:[oe.controllerChange(e,t,Q.monoModeOn,0)];case"keyShift":return oe.registeredParameter(e,t,Le.coarseTuning,a+64<<7);case"fineTune":return oe.registeredParameter(e,t,Le.fineTuning,Math.floor(a*81.92+8192));case"randomPan":return s==="xg"?[ae.xgMessage(e,8,t,14,[0])]:[ae.gsMessage(e,64,16|r,28,[0])];case"assignMode":switch(s){default:case"gs":return[ae.gsMessage(e,64,16|r,20,[a])];case"xg":return[ae.xgMessage(e,8,t,6,[a])]}case"efxAssign":return[ae.gsMessage(e,64,64|r,34,[a?1:0])];case"cc1":return[ae.gsMessage(e,64,16|r,31,[a])];case"cc2":return[ae.gsMessage(e,64,16|r,32,[a])];case"drumMap":return[ae.gsMessage(e,64,16|r,21,[a])];case"velocitySenseDepth":return s==="xg"?[ae.xgMessage(e,8,t,12,[a])]:[ae.gsMessage(e,64,16|r,26,[a])];case"velocitySenseOffset":return s==="xg"?[ae.xgMessage(e,8,t,13,[a])]:[ae.gsMessage(e,64,16|r,27,[a])]}}static syxToChannel(e){return[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][e%16]}static channelToSyx(e){return[1,2,3,4,5,6,7,8,9,0,10,11,12,13,14,15][e%16]}static gs(e,t,s,n){let a=128-(e+t+s+n.reduce((r,i)=>r+i,0))%128&127;return[65,16,66,18,e,t,s,...n,a,247]}static gsMessage(e,t,s,n,a){return oe.systemExclusive(e,this.gs(t,s,n,a))}static xg(e,t,s,n){return[67,16,76,e,t,s,...n,247]}static xgMessage(e,t,s,n,a){return oe.systemExclusive(e,this.xg(t,s,n,a))}static deviceControl(e,t){return[127,127,4,e,...t,247]}static deviceControlMessage(e,t,s){return oe.systemExclusive(e,this.deviceControl(t,s))}static reset(e,t){switch(t){case"gs":return this.gsMessage(e,64,0,127,[0]);case"xg":return this.xgMessage(e,0,0,126,[0]);case"gm":return oe.systemExclusive(e,[126,127,9,1,127]);case"gm2":return oe.systemExclusive(e,[126,127,9,3,127])}}static analyzeGM(e){if(e.length<4)return ge;if(e[2]===4)switch(e[3]){default:return ge;case 1:{let t=(e[5]<<7|e[4])/16383;return{type:"Global MIDI Param",parameter:"volume",value:Math.pow(t,2)}}case 2:return{type:"Global MIDI Param",parameter:"pan",value:((e[5]<<7|e[4])-8192)/8192};case 3:return{type:"Global MIDI Param",parameter:"fineTune",value:((e[5]<<7|e[4])-8192)/81.92};case 4:return{type:"Global MIDI Param",parameter:"keyShift",value:e[5]-64};case 5:if(e[4]!==1||e[5]!==1||e[6]!==1||e[7]!==1)return ge;switch(e[8]){default:return ge;case 1:switch(e[9]){default:return ge;case 0:case 1:return{type:"Reverb Param"}}case 2:switch(e[9]){default:return ge;case 0:case 1:case 2:case 3:case 4:return{type:"Chorus Param"}}}}if(e[2]!==9)return ge;switch(e[3]){default:return ge;case 1:return{type:"Global MIDI Param",parameter:"system",value:"gm"};case 2:return{type:"Global MIDI Param",parameter:"system",value:"gm"};case 3:return{type:"Global MIDI Param",parameter:"system",value:"gm2"}}}static analyzeXG(e){if(e[2]!==76||e.length<7)return ge;let t=e[3],s=e[4],n=e[5],a=e[6];if(t===6||t===7)return{type:"Display Data"};if(t===0&&s===0)switch(n){default:return ge;case 0:return{type:"Global MIDI Param",parameter:"fineTune",value:(((e[6]&15)<<12|(e[7]&15)<<8|(e[8]&15)<<4|e[9]&15)-1024)/10};case 6:return{type:"Global MIDI Param",parameter:"keyShift",value:a-64};case 126:case 127:return{type:"Global MIDI Param",parameter:"system",value:"xg"}}if(t===2&&s===1)return n<=21?{type:"Reverb Param"}:n<=53?{type:"Chorus Param"}:{type:"Variation Param"};if(t===3&&s===0)return{type:"Variation Param"};if(t===8){let r=s;switch(n){default:return ge;case 1:return{type:"Controller Change",channel:r,controller:Q.bankSelect,value:a};case 2:return{type:"Controller Change",channel:r,controller:Q.bankSelectLSB,value:a};case 3:return{type:"Program Change",channel:r,value:a};case 5:return{type:"Controller Change",channel:r,controller:a===1?Q.polyModeOn:Q.monoModeOn,value:0};case 6:return{type:"Channel MIDI Param",channel:r,parameter:"assignMode",value:a};case 7:return{type:"Drums On",channel:r,isDrum:a>0};case 8:return{type:"Channel MIDI Param",channel:r,parameter:"keyShift",value:a-64};case 11:return{type:"Controller Change",channel:r,controller:Q.mainVolume,value:a};case 14:return a===0?{type:"Channel MIDI Param",channel:r,parameter:"randomPan",value:!0}:{type:"Controller Change",channel:r,controller:Q.pan,value:a};case 18:return{type:"Controller Change",channel:r,controller:Q.chorusDepth,value:a};case 19:return{type:"Controller Change",channel:r,controller:Q.reverbDepth,value:a};case 21:return{type:"Controller Change",channel:r,controller:Q.vibratoRate,value:a};case 22:return{type:"Controller Change",channel:r,controller:Q.vibratoDepth,value:a};case 23:return{type:"Controller Change",channel:r,controller:Q.vibratoDelay,value:a};case 24:return{type:"Controller Change",channel:r,controller:Q.brightness,value:a};case 25:return{type:"Controller Change",channel:r,controller:Q.filterResonance,value:a};case 26:return{type:"Controller Change",channel:r,controller:Q.attackTime,value:a};case 27:return{type:"Controller Change",channel:r,controller:Q.decayTime,value:a};case 12:return{type:"Controller Change",channel:r,controller:Q.releaseTime,value:a}}}return t>>4===3?{type:"Drum Setup"}:ge}static analyzeGS(e){if(e.length<10||e[3]!==18)return ge;if(e[2]===69)return{type:"Display Data"};if(e[2]!==66)return ge;let t=e[4],s=e[5],n=e[6],a=e[7];if((t===0||t===64)&&s===0)switch(n){case 0:return{type:"Global MIDI Param",parameter:"fineTune",value:((a<<12|e[8]<<8|e[9]<<4|e[10])-1024)/10};case 4:return{type:"Global MIDI Param",parameter:"volume",value:a/127};case 5:return{type:"Global MIDI Param",parameter:"keyShift",value:a-64};case 6:return{type:"Global MIDI Param",parameter:"pan",value:(a-64)/63};case 127:switch(a){case 0:case 1:return{type:"Global MIDI Param",parameter:"system",value:"gs"};case 127:return{type:"Global MIDI Param",parameter:"system",value:"gm"}}return ge}if(t===65)return{type:"Drum Setup"};if(t!==64&&t!==80)return ge;let r=t===80?16:0;if(s===1){if(n>=48&&n<=55)return{type:"Reverb Param"};if(n>=56&&n<=64)return{type:"Chorus Param"};if(n>=80&&n<=90)return{type:"Delay Param"}}if(s===3&&n>=0&&n<=127)return{type:"Insertion Param"};if(s>>4===1){let i=ae.syxToChannel(s&15)+r;switch(n){default:return ge;case 0:return{type:"Program Change",channel:i,value:a};case 19:return{type:"Channel MIDI Param",channel:i,parameter:"polyMode",value:a===1};case 20:return{type:"Channel MIDI Param",channel:i,parameter:"assignMode",value:a};case 21:return{type:"Drums On",channel:i,isDrum:a>0};case 22:return{type:"Channel MIDI Param",channel:i,parameter:"keyShift",value:a-64};case 25:return{type:"Controller Change",channel:i,controller:Q.mainVolume,value:a};case 26:return{type:"Channel MIDI Param",channel:i,parameter:"velocitySenseDepth",value:a};case 27:return{type:"Channel MIDI Param",channel:i,parameter:"velocitySenseOffset",value:a};case 28:return a===0?{type:"Channel MIDI Param",channel:i,parameter:"randomPan",value:!0}:{type:"Controller Change",channel:i,controller:Q.pan,value:a};case 31:return{type:"Channel MIDI Param",channel:i,parameter:"cc1",value:a};case 32:return{type:"Channel MIDI Param",channel:i,parameter:"cc2",value:a};case 33:return{type:"Controller Change",channel:i,controller:Q.chorusDepth,value:a};case 34:return{type:"Controller Change",channel:i,controller:Q.reverbDepth,value:a};case 42:return{type:"Channel MIDI Param",channel:i,parameter:"fineTune",value:((a<<7|e[8])-8192)/81.92};case 44:return{type:"Controller Change",channel:i,controller:Q.variationDepth,value:a};case 48:return{type:"Controller Change",channel:i,controller:Q.vibratoRate,value:a};case 49:return{type:"Controller Change",channel:i,controller:Q.vibratoDepth,value:a};case 50:return{type:"Controller Change",channel:i,controller:Q.brightness,value:a};case 51:return{type:"Controller Change",channel:i,controller:Q.filterResonance,value:a};case 52:return{type:"Controller Change",channel:i,controller:Q.attackTime,value:a};case 53:return{type:"Controller Change",channel:i,controller:Q.decayTime,value:a};case 54:return{type:"Controller Change",channel:i,controller:Q.releaseTime,value:a};case 55:return{type:"Controller Change",channel:i,controller:Q.vibratoDelay,value:a}}}if(s>>4===4){let i=ae.syxToChannel(s&15)+r;switch(n){default:return ge;case 0:case 1:return{type:"Controller Change",channel:i,controller:Q.bankSelectLSB,value:a};case 34:return{type:"Channel MIDI Param",channel:i,parameter:"efxAssign",value:a===1}}}return ge}},Wa="Created using SpessaSynth";function ja(A,e,t){let s="gm",n=[],a=new Array(A.tracks.length).fill(0),r=16+Math.max(...A.portChannelOffsetMap),i=[];for(let o=0;o<r;o++)i.push({program:0,isDrum:o%16===9,lastBank:void 0,lastBankLSB:void 0,hasBankSelect:!1,programChangeTrack:void 0,programChangeIndex:void 0});A.iterate((o,g,l)=>{let C=A.portChannelOffsetMap[a[g]];if(o.statusByte===R.midiPort){a[g]=o.data[0];return}let h=o.statusByte&240;if(h!==R.controllerChange&&h!==R.programChange&&h!==R.systemExclusive)return;if(h===R.systemExclusive){let D=_.analyzeSysEx(o.data);switch(D.type){default:return;case"Drums On":{let w=D.channel+C;if(!i[w])return;i[w].isDrum=D.isDrum;return}case"Global MIDI Param":D.parameter==="system"&&(s=D.value,D.value==="gm"&&n.push({tNum:g,e:o}));break;case"Controller Change":{let w=A.tracks[g];if(D.channel>=16)return;let L=oe.controllerChange(o.ticks,D.channel,D.controller,D.value);w.events[l[g]]=L,o=L,c.info("%cReplaced a system exclusive with controller change!",E.info);break}case"Program Change":{if(D.channel>=16)return;let w=A.tracks[g],L=oe.programChange(o.ticks,D.channel,D.value);w.events[l[g]]=L,o=L,c.info("%cReplaced a system exclusive with program change!",E.info);break}}}h=o.statusByte&240;let d=(o.statusByte&15)+C,B=i[d];if(h===R.programChange){let D={program:o.data[0],bankLSB:B.lastBankLSB?.data?.[1]??0,bankMSB:he.subtractBankOffset(B.lastBank?.data?.[1]??0,A.bankOffset,s==="xg"),isGMGSDrum:B.isDrum},w=t.getPreset(D,s);if(c.info(`%cInput patch: %c${be.toMIDIString(D)}%c. Channel %c${d}%c. Changing patch to ${w.toString()}.`,E.info,E.unrecognized,E.info,E.recognized,E.info),o.data[0]=w.program,B.program=w.program,B.programChangeTrack??=g,B.programChangeIndex??=l[g],w.isGMGSDrum&&he.isSystemXG(s)||B.lastBank===void 0||(B.lastBank.data[1]=he.addBankOffset(w.bankMSB,e,s==="xg"),B.lastBankLSB===void 0))return;B.lastBankLSB.data[1]=w.bankLSB;return}let p=o.data[0]===Q.bankSelectLSB;o.data[0]!==Q.bankSelect&&!p||(B.hasBankSelect=!0,p?B.lastBankLSB=o:B.lastBank=o)});for(let o=0;o<i.length;o++){let g=i[o];if(g.hasBankSelect)continue;let l=o%16,C=Math.floor(o/16)*16,h=A.portChannelOffsetMap.indexOf(C),d=A.tracks.filter(k=>k.port===h&&k.channels.has(l));if(d.length===0)continue;let B=g.programChangeTrack?A.tracks[g.programChangeTrack]:void 0,p=g.programChangeIndex??-1;if(!B){let k=d[0],S=k.events.findIndex(y=>y.statusByte>=128&&y.statusByte<240&&(y.statusByte&15)===l);if(S===-1)continue;let v=k.events[S].ticks,x=t.getPreset({bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1},s).program;c.info(`%cAdding default program change for %c${o}`,E.info,E.recognized),k.addEvents(S,oe.programChange(v,l,x)),p=S,B=k}let D=B.events[p].ticks,w=t.getPreset({bankLSB:0,bankMSB:0,program:g.program,isGMGSDrum:g.isDrum},s);c.info(`%cAdding bank select for %c${o}%c Targeting preset: %c${w.toString()}`,E.info,E.recognized,E.info,E.recognized);let L=he.addBankOffset(w.bankMSB,e,s==="xg");B.addEvents(p,oe.controllerChange(D,l,Q.bankSelect,L))}if(s==="gm"&&!he.isSystemXG(s)){for(let g of n){let l=A.tracks[g.tNum];l.deleteEvent(l.events.indexOf(g.e))}let o=0;A.tracks[0].events[0].statusByte===R.trackName&&o++,A.tracks[0].addEvents(o,_.reset(0,"gs"))}A.flush()}var hs={bankOffset:0,metadata:{},correctBankOffset:!0,soundBank:void 0};function Za(A,e,t){let s=t.metadata;if(c.group("%cWriting the RMIDI File...",E.info),c.info("metadata",s),c.info("Initial bank offset",A.bankOffset),t.correctBankOffset){if(!t.soundBank)throw new Error("Sound bank must be provided if correcting bank offset.");ja(A,t.bankOffset,t.soundBank)}let n=new j(A.writeMIDI());s.name??=A.getName(),s.creationDate??=new Date,s.copyright??=Wa,s.software??="SpessaSynth",Object.entries(s).forEach(o=>{let g=o;g[1]&&A.setRMIDInfo(g[0],g[1])});let a=[],r=(o,g)=>{a.push(N.write(o,g))};for(let o of Object.entries(A.rmidiInfo)){let g=o[0],l=o[1];switch(g){case"album":r("IALB",l),r("IPRD",l);break;case"software":r("ISFT",l);break;case"infoEncoding":r("IENC",l);break;case"creationDate":r("ICRD",l);break;case"picture":r("IPIC",l);break;case"name":r("INAM",l);break;case"artist":r("IART",l);break;case"genre":r("IGNR",l);break;case"copyright":r("ICOP",l);break;case"comment":r("ICMT",l);break;case"engineer":r("IENG",l);break;case"subject":r("ISBJ",l);break;case"midiEncoding":r("MENC",l);break}}let i=new j(2);return Ut(i,t.bankOffset,2),a.push(N.write("DBNK",i)),c.info("%cFinished!",E.info),c.groupEnd(),N.writeParts("RIFF",[Pe("RMID"),N.write("data",n),N.writeParts("INFO",a,!1,!0),new j(e)]).buffer}var HA=class{rpnMSB={v:127,track:0,event:0};rpnLSB={v:127,track:0,event:0};nrpnMSB={v:0,track:0,event:0};nrpnLSB={v:0,track:0,event:0};dataMSB={v:0,track:0,event:0};dataLSB={v:0,track:0,event:0};channel;isRegistered=!0;constructor(A){this.channel=A}get paramMSB(){return this.isRegistered?this.rpnMSB:this.nrpnMSB}get paramLSB(){return this.isRegistered?this.rpnLSB:this.nrpnLSB}reset(){this.isRegistered=!0,this.rpnLSB.v=127,this.rpnMSB.v=127,this.nrpnMSB.v=0,this.nrpnLSB.v=0,this.resetData()}controllerChange(A,e,t,s){switch(A){case Q.registeredParameterMSB:this.resetData(),this.isRegistered=!0,this.rpnMSB={v:e,track:t,event:s};break;case Q.registeredParameterLSB:this.resetData(),this.isRegistered=!0,this.rpnLSB={v:e,track:t,event:s};break;case Q.nonRegisteredParameterMSB:this.resetData(),this.isRegistered=!1,this.nrpnMSB={v:e,track:t,event:s};break;case Q.nonRegisteredParameterLSB:this.resetData(),this.isRegistered=!1,this.nrpnLSB={v:e,track:t,event:s};break;case Q.dataEntryMSB:return this.dataMSB={v:e,track:t,event:s},this.analyze();case Q.dataEntryLSB:return this.dataLSB={v:e,track:t,event:s},this.analyze()}}resetData(){this.dataLSB.v=0,this.dataMSB.v=0}analyze(){let A=this.dataMSB.v<<7|this.dataLSB.v;return this.isRegistered?_.analyzeRPN(this.channel,this.rpnMSB.v<<7|this.rpnLSB.v,A):_.analyzeNRPN(this.channel,this.nrpnMSB.v<<7|this.nrpnLSB.v,A)}};function Xa(A,e){c.groupCollapsed("%cSearching for all used programs and keys...",E.info);let t=16+Math.max(...A.portChannelOffsetMap),s=[],n="gs",a=0,r=h=>{n=h,a=0;for(let d=0;d<t;d++){let B=s[d];B.isDrum=d%16===9,B.bankMSB=he.getDefaultBank(h),B.bankLSB=0,B.keyShift=0,B.param.reset()}};for(let h=0;h<t;h++){let d=h%16===9;s.push({preset:e.getPreset({bankLSB:0,bankMSB:0,isGMGSDrum:d,program:0},n),bankMSB:0,bankLSB:0,param:new HA(h),isDrum:d,keyShift:0})}let i=new Map,o=A.tracks.map(h=>h.port),g=A.portChannelOffsetMap,{timeline:l,tracks:C}=A;for(let h of l){let d=h.tr,B=h.ev,p=C[d].events[B];if(p.statusByte===R.midiPort&&A.tracks[d].channels.size>0){let L=p.data[0];g[L]===void 0&&(c.warn(`Invalid port ${L} on track ${d}. (No offset found in the MIDI map.`),L=0),o[d]=L;continue}let D=p.statusByte&240;if(D!==R.noteOn&&D!==R.controllerChange&&D!==R.programChange&&D!==R.systemExclusive)continue;let w=g[o[d]]||0;switch(D){case R.programChange:{let L=s[(p.statusByte&15)+w];L.preset=e.getPreset({bankMSB:L.bankMSB,bankLSB:L.bankLSB,program:p.data[0],isGMGSDrum:L.isDrum},n);break}case R.controllerChange:{let L=s[(p.statusByte&15)+w],k=p.data[0],S=p.data[1];switch(k){case Q.registeredParameterMSB:case Q.registeredParameterLSB:case Q.nonRegisteredParameterLSB:case Q.nonRegisteredParameterMSB:L.param.controllerChange(k,S,d,B);break;case Q.dataEntryMSB:case Q.dataEntryLSB:{let v=L.param.controllerChange(k,S,d,B);v?.type==="Channel MIDI Param"&&v.parameter==="keyShift"&&(L.keyShift=L.isDrum?0:v.value);break}case Q.resetAllControllers:L.param.reset();break;case Q.bankSelect:L.bankMSB=S;break;case Q.bankSelectLSB:L.bankLSB=S;break}break}case R.noteOn:{let L=s[(p.statusByte&15)+w];if(p.data[1]===0||!L.preset)continue;let k=i.get(L.preset);k||(k=new Map,i.set(L.preset,k));let S=p.data[0]+(L.isDrum?0:a)+L.keyShift,v=k.get(S);v||(v=new Set,k.set(S,v)),v.add(p.data[1]);break}case R.systemExclusive:{let L=_.analyzeSysEx(p.data);switch(L.type){default:break;case"Global MIDI Param":L.parameter==="keyShift"?a=L.value:L.parameter==="system"&&(r(L.value),c.info(`%c${L.value.toUpperCase()} on detected!`,E.recognized));break;case"Channel MIDI Param":if(L.parameter==="keyShift"){let k=s[L.channel];if(!k)break;k.keyShift=k.isDrum?0:L.value}break;case"Drums On":{let k=L.channel+w;if(!s[k])break;s[k].isDrum=L.isDrum;break}case"Program Change":{let k=s[L.channel+w];if(!k)break;k.preset=e.getPreset({bankMSB:k.bankMSB,bankLSB:k.bankLSB,program:L.value,isGMGSDrum:k.isDrum},n);break}case"Controller Change":{let k=s[L.channel+w];if(!k)break;L.controller===Q.bankSelectLSB?k.bankLSB=L.value:L.controller===Q.bankSelect&&(k.bankMSB=L.value)}}}}}for(let[h,d]of i.entries())d.size===0&&(c.info(`%cDetected change but no keys for %c${h.name}`,E.info,E.value),i.delete(h));return c.groupEnd(),i}var _a=A=>(A.data=new j(A.data.buffer),6e7/cA(A.data,3));function $a(A,e=0){let t=[];for(let C=0;C<16;C++)t.push([]);let s=0,n=60/(120*A.timeDivision),a=0,r=0,i=[];for(let C=0;C<16;C++)i.push(new Map);let o=(C,h)=>{let d=i[h].get(C);if(d===void 0)return;let B=d.shift();if(B===void 0)return;let p=t[h][B],D=s-p.start;p.length=h===9?Math.max(D,e):D,r--},{timeline:g,tracks:l}=A;for(;a<g.length;){let C=g[a],h=l[C.tr].events[C.ev],d=h.statusByte>>4,B=h.statusByte&15;if(d===8)o(h.data[0],B);else if(d===9){let D=h.data[0],w=h.data[1];if(w===0)o(D,B);else{let L={midiNote:D,start:s,length:-1,velocity:w},k=t[B];k.push(L);let S=i[B];S.has(D)||S.set(D,[]),i[B].get(D)?.push(k.length-1),r++}}else h.statusByte===81&&(n=60/(_a(h)*A.timeDivision));if(++a>=g.length)break;let p=g[a];s+=n*(l[p.tr].events[p.ev].ticks-h.ticks)}if(r>0)for(let C=0;C<i.length;C++)for(let h of i[C].values())for(let d of h){let B=t[C][d];B.length=s-B.start}return t}var en={character:49,preLowpass:50,level:51,time:52,delayFeedback:53,preDelayTime:55},An={preLowpass:57,level:58,feedback:59,delay:60,rate:61,depth:62,sendLevelToReverb:63,sendLevelToDelay:64},tn={preLowpass:81,timeCenter:82,timeRatioLeft:83,timeRatioRight:84,levelCenter:85,levelLeft:86,levelRight:87,level:88,feedback:89,sendLevelToReverb:90};function sn(A,e){c.groupCollapsed("%cApplying changes to the MIDI file...",E.info);let{channels:t,reverbParams:s,chorusParams:n,delayParams:a,insertionParams:r}=e;c.info("Desired channel changes",t),c.info("Desired reverb parameters",s),c.info("Desired chorus parameters",n),c.info("Desired delay parameters",a),c.info("Desired insertion parameters",r);let i=e.drumSetupParams==="clear",o=new Set,g=new Map;if(t)for(let[y,u]of t)u==="clear"?o.add(y):g.set(y,u);let l=(e.midiParams?.system==="clear"?void 0:e.midiParams?.system)??"gs",C=!1,h=0,d=0,B=A.tracks.map(y=>y.port),p={},D=0,w=(y,u)=>{A.tracks[y].channels.size!==0&&(D===0&&(D+=16,p[u]=0),p[u]===void 0&&(p[u]=D,D+=16),B[y]=u)};for(let[y,u]of A.tracks.entries())w(y,u.port);let L=D,k=[];for(let y=0;y<L;y++)k.push({isFirstNoteOn:!0,param:new HA(y),clearedParams:{pLSB:!0,pMSB:!0,data:!0},keyShift:g.get(y)?.keyShift??0,fineTune:g.get(y)?.fineTune??0,currentFineTune:0,currentKeyShift:0});if(A.iterate((y,u,m)=>{let K=A.tracks[u],T=m[u],U=()=>{K.deleteEvent(T),m[u]--},O=z=>{let J=k[z],Z=J.param,$=Z.paramMSB,H=Z.paramLSB;c.info(`%cClearing Non/Registered Parameter on ${z}. Clear MSB: %c${J.clearedParams.pMSB}%c, clear LSB: %c${J.clearedParams.pLSB}%c, clear data: %c${J.clearedParams.data}.`,E.info,E.recognized,E.info,E.recognized,E.info,E.recognized),J.clearedParams.data||(U(),u===$.track&&T<$.event&&$.event--,u===H.track&&T<H.event&&H.event--,J.clearedParams.data=!0),J.clearedParams.pMSB||(A.tracks[$.track].deleteEvent($.event),m[$.track]--,$.track===H.track&&$.event<H.event&&H.event--,J.clearedParams.pMSB=!0),J.clearedParams.pLSB||(A.tracks[H.track].deleteEvent(H.event),m[H.track]--,J.clearedParams.pLSB=!0)},Ae=z=>{K.addEvents(T,z),m[u]++},G=(...z)=>{for(let J=z.length-1;J>=0;J--)Ae(z[J])},P=p[B[u]]||0;if(y.statusByte===R.midiPort){w(u,y.data[0]);return}if(y.statusByte<R.noteOff||y.statusByte>R.systemExclusive)return;let f=y.statusByte&240,M=y.statusByte&15,b=M+P;if(y.statusByte!==R.systemExclusive&&o.has(b)){U();return}let V=k[b],W=g.get(b);switch(f){case R.noteOn:if(!W)break;if(V.isFirstNoteOn){if(V.isFirstNoteOn=!1,W.controllers)for(let[J,Z]of W.controllers)Z!=="clear"&&Ae(oe.controllerChange(y.ticks,M,J,Z));if(W.midiParams?.fineTune!==void 0&&W.midiParams.fineTune!=="clear"){let J=V.fineTune+W.midiParams.fineTune;V.currentKeyShift=Math.trunc(J/100),W.midiParams.fineTune=J%100}else{let J=V.fineTune+V.currentFineTune;V.currentKeyShift=Math.trunc(J/100),W.midiParams??={},W.midiParams.fineTune=J%100}let z=W.patch;if(z&&z!=="clear"){c.info(`%cSetting %c${b}%c to %c${be.toMIDIString(z)}%c. Track num: %c${u}`,E.info,E.recognized,E.info,E.recognized,E.info,E.recognized);let J=z.bankMSB,Z=z.bankLSB,$=z.program;Ae(oe.programChange(y.ticks,M,$));let H=(ee,Ee)=>{Ae(oe.controllerChange(y.ticks,M,ee?Q.bankSelectLSB:Q.bankSelect,Ee))};if(he.isSystemXG(l)&&z.isGMGSDrum&&(c.info(`%cAdding XG Drum change on track %c${u}`,E.recognized,E.value),J=he.getDrumBank(l),Z=0),H(!1,J),H(!0,Z),z.isGMGSDrum&&!he.isSystemXG(l)&&M!==9){c.info(`%cAdding GS Drum change on track %c${u}`,E.recognized,E.value);let ee=16|_.channelToSyx(M);Ae(_.gsMessage(y.ticks,64,ee,21,[1]))}}if(W.midiParams)for(let[J,Z]of Object.entries(W.midiParams))Z!=="clear"&&G(..._.setChannelMIDIParameter(y.ticks,M,l,J,Z))}y.data[0]+=V.keyShift+V.currentKeyShift;break;case R.noteOff:if(!W)break;y.data[0]+=V.keyShift+V.currentKeyShift;break;case R.programChange:if(W?.patch){U();return}break;case R.pitchWheel:W?.midiParams?.pitchWheel&&U();break;case R.channelPressure:W?.midiParams?.pressure&&U();break;case R.controllerChange:{let z=y.data[0],J=y.data[1];if(W?.controllers?.get(z)!==void 0){U();return}switch(z){case Q.bankSelect:case Q.bankSelectLSB:W?.patch&&U();return;case Q.registeredParameterLSB:case Q.registeredParameterMSB:case Q.nonRegisteredParameterMSB:case Q.nonRegisteredParameterLSB:z===Q.nonRegisteredParameterLSB||z===Q.registeredParameterLSB?V.clearedParams.pLSB=!1:V.clearedParams.pMSB=!1,V.param.controllerChange(z,J,u,T);return;case Q.dataEntryMSB:case Q.dataEntryLSB:{V.clearedParams.data=!1;let Z=V.param.controllerChange(z,J,u,T);if(!Z)return;switch(Z.type){case"Drum Setup":i&&O(b);return;case"Controller Change":{let $=Z.controller,H=Z.channel;if(W?.controllers?.get($)!==void 0){O(H);return}($===Q.bankSelect||$===Q.bankSelectLSB)&&W?.patch&&O(H);break}case"Channel MIDI Param":if(Z.parameter==="fineTune"&&V.fineTune){V.currentFineTune=Z.value;let $=V.fineTune+Z.value;V.currentKeyShift=Math.trunc($/100);let H=$%100;c.info(`%cFine tuning already present on ${b}%c (${Z.value})%c, new relative tune: %c${$}%c cents. Key shift: %c${V.currentKeyShift}%c semitones. Actual RPN value to set: %c${H} cents.`,E.info,E.recognized,E.info,E.value,E.info,E.value,E.info,E.value);let ee=Math.floor(H*81.92)+8192;y.data[1]=z===Q.dataEntryMSB?ee>>7:ee&127}else W?.midiParams?.[Z.parameter]&&O(b);break}V.clearedParams.pLSB=!0,V.clearedParams.pMSB=!0;return}default:return}}case R.systemExclusive:{let z=_.analyzeSysEx(y.data);switch(z.type){default:return;case"Drum Setup":i&&U();return;case"Reverb Param":s&&U();return;case"Chorus Param":n&&U();return;case"Delay Param":a&&U();return;case"Insertion Param":r&&U();return;case"Program Change":g.get(z.channel+P)?.patch&&U();return;case"Global MIDI Param":if(e.midiParams?.[z.parameter]){U();return}if(z.parameter==="system")switch(z.value){case"xg":c.info("%cXG system on detected",E.info),l="xg",C=!0,h=u,d=T;for(let J of k)J.param.reset(),J.clearedParams={pLSB:!0,pMSB:!0,data:!0};return;case"gm2":c.info("%cGM2 system on detected",E.info),l="gm2",C=!0,h=u,d=T;for(let J of k)J.param.reset(),J.clearedParams={pLSB:!0,pMSB:!0,data:!0};return;case"gs":c.info("%cGS on detected!",E.recognized),C=!0,h=u,d=T;for(let J of k)J.param.reset(),J.clearedParams={pLSB:!0,pMSB:!0,data:!0};return;case"gm":c.info("%cGM on detected, removing!",E.info),U(),C=!1;return}break;case"Channel MIDI Param":{let J=g.get(z.channel+P);if(J?.midiParams?.[z.parameter]){U();return}if(z.parameter==="fineTune"){let Z=k[z.channel+P];if(Z&&Z.isFirstNoteOn&&J){let $=Z.fineTune+z.value;Z.currentKeyShift=Math.trunc($/100),Z.fineTune=$%100,c.info(`%cFine tuning already present on ${z.channel+P}, new relative tune: %c${$} cents`,E.info,E.recognized),U()}break}break}case"Controller Change":{let J=z.controller,Z=g.get(z.channel+P);if(Z?.controllers?.get(J)!==void 0){U();return}(J===Q.bankSelect||J===Q.bankSelectLSB)&&Z?.patch&&U();return}}}}}),!C&&[...g.values()].some(y=>y.patch&&y.patch!=="clear")){let y=0;A.tracks[0].events[0].statusByte===R.trackName&&y++;let u=(e.midiParams?.system==="clear"?void 0:e.midiParams?.system)??"gs";A.tracks[0].addEvents(y,_.reset(0,u)),h=0,d=y,l=u,c.info(`%c${u} reset on not detected. Adding it.`,E.info)}let S=Math.max(0,A.firstNoteOn),v=A.tracks[h],x=d+1;for(let y of Object.keys(e.midiParams??{})){if(y==="system")continue;let u=e.midiParams?.[y];!u||u==="clear"||v.addEvents(x,..._.setGlobalMIDIParameter(S,l,y,u))}if(s&&s!=="clear"){let y=en,u=s;v.addEvents(x,_.gsMessage(S,64,1,y.level,[u.level]),_.gsMessage(S,64,1,y.preLowpass,[u.preLowpass]),_.gsMessage(S,64,1,y.character,[u.character]),_.gsMessage(S,64,1,y.time,[u.time]),_.gsMessage(S,64,1,y.delayFeedback,[u.delayFeedback]),_.gsMessage(S,64,1,y.preDelayTime,[u.preDelayTime]))}if(n&&n!=="clear"){let y=An,u=n;v.addEvents(x,_.gsMessage(S,64,1,y.level,[u.level]),_.gsMessage(S,64,1,y.preLowpass,[u.preLowpass]),_.gsMessage(S,64,1,y.feedback,[u.feedback]),_.gsMessage(S,64,1,y.delay,[u.delay]),_.gsMessage(S,64,1,y.rate,[u.rate]),_.gsMessage(S,64,1,y.depth,[u.depth]),_.gsMessage(S,64,1,y.sendLevelToReverb,[u.sendLevelToReverb]),_.gsMessage(S,64,1,y.sendLevelToDelay,[u.sendLevelToDelay]))}if(a&&a!=="clear"){let y=tn,u=a;v.addEvents(x,_.gsMessage(S,64,1,y.level,[u.level]),_.gsMessage(S,64,1,y.preLowpass,[u.preLowpass]),_.gsMessage(S,64,1,y.timeCenter,[u.timeCenter]),_.gsMessage(S,64,1,y.timeRatioLeft,[u.timeRatioLeft]),_.gsMessage(S,64,1,y.timeRatioRight,[u.timeRatioRight]),_.gsMessage(S,64,1,y.levelCenter,[u.levelCenter]),_.gsMessage(S,64,1,y.levelLeft,[u.levelLeft]),_.gsMessage(S,64,1,y.levelRight,[u.levelRight]),_.gsMessage(S,64,1,y.feedback,[u.feedback]),_.gsMessage(S,64,1,y.sendLevelToReverb,[u.sendLevelToReverb]))}if(r&&r!=="clear"){let y=r;for(let u=0;u<y.params.length;u++){let m=y.params[u];m!==255&&v.addEvents(x,_.gsMessage(S,64,3,u+3,[m]))}v.addEvents(x,_.gsMessage(S,64,3,0,[y.type>>8,y.type&127]))}A.flush(),c.groupEnd()}var _A=class Js{name="";port=0;channels=new Set;events=[];static copyFrom(e){let t=new Js;return t.copyFrom(e),t}copyFrom(e){this.name=e.name,this.port=e.port,this.channels=new Set(e.channels),this.events=e.events.map(t=>new oe(t.ticks,t.statusByte,new j(t.data)))}addEvent(e,t){this.events.splice(t,0,e)}addEvents(e,...t){this.events.splice(e,0,...t)}deleteEvent(e){this.events.splice(e,1)}pushEvent(e){this.events.push(e)}},an={8:2,9:2,10:2,11:2,12:1,13:1,14:2};function Ot(A,e,t){c.groupCollapsed("%cParsing MIDI File...",E.info),A.fileName=t;let s=r=>{let i=re(r,4),o=iA(r,4),g={type:i,size:o,data:new j(o)},l=r.slice(r.currentIndex,r.currentIndex+g.size);return g.data.set(l,0),r.currentIndex+=g.size,g},n=s(e);if(n.type!=="MThd")throw c.groupEnd(),new SyntaxError(`Invalid MIDI Header! Expected "MThd", got "${n.type}"`);if(n.size!==6)throw c.groupEnd(),new RangeError(`Invalid MIDI header chunk size! Expected 6, got ${n.size}`);A.format=iA(n.data,2);let a=iA(n.data,2);A.timeDivision=iA(n.data,2);for(let r=0;r<a;r++){let i=new _A,o=s(e);if(o.type!=="MTrk")throw c.groupEnd(),new SyntaxError(`Invalid track header! Expected "MTrk" got "${o.type}"`);let g,l=0;A.format===2&&r>0&&(l+=A.tracks[r-1].events[A.tracks[r-1].events.length-1].ticks);let C=o.data;for(;C.currentIndex<o.size;){l+=Ie(C);let h=C[C.currentIndex],d;if(g!==void 0&&h<128)d=g;else{if(h<128)throw c.groupEnd(),new SyntaxError(`Unexpected byte with no running byte. (${h})`);d=h,C.currentIndex++}let B;d>=R.noteOff&&d<R.systemExclusive?(B=an[d>>4],g=d):d===R.systemExclusive?B=Ie(C):d===255?(d=C[C.currentIndex++],B=Ie(C)):B=0;let p=new j(B);p.set(C.slice(C.currentIndex,C.currentIndex+B)),i.pushEvent(new oe(l,d,p)),C.currentIndex+=B}A.tracks.push(i),c.info(`%cParsed %c${A.tracks.length}%c / %c${A.tracks.length}`,E.info,E.value,E.info,E.value)}c.info("%cAll tracks parsed correctly!",E.recognized),A.flush(!1),c.groupEnd()}function Jt(A){return A.toISOString().split(".")[0]+"Z"}var nn=[new Map([["domingo","Sunday"],["segunda-feira","Monday"],["ter\xE7a-feira","Tuesday"],["quarta-feira","Wednesday"],["quinta-feira","Thursday"],["sexta-feira","Friday"],["s\xE1bado","Saturday"],["janeiro","January"],["fevereiro","February"],["mar\xE7o","March"],["abril","April"],["maio","May"],["junho","June"],["julho","July"],["agosto","August"],["setembro","September"],["outubro","October"],["novembro","November"],["dezembro","December"]])];function rn(A){for(let e of nn){let t=A;for(let[n,a]of e.entries()){let r=new RegExp(n,"gi");t=t.replace(r,a)}let s=new Date(t);if(!Number.isNaN(s.getTime()))return s}}function on(A){let e=/^(\d{2})\.(\d{2})\.(\d{4})$/.exec(A);if(e){let t=Number.parseInt(e[1]),s=Number.parseInt(e[2])-1,n=Number.parseInt(e[3]),a=new Date(n,s,t);if(!Number.isNaN(a.getTime()))return a}}function gn(A){let e=/^(\d{1,2})\s{1,2}(\d{1,2})\s{1,2}(\d{2})$/.exec(A);if(e){let t=e[1],s=(Number.parseInt(e[2])+1).toString(),n=e[3],a=new Date(`${s}/${t}/${n}`);if(!Number.isNaN(a.getTime()))return a}}function In(A){let e=/\b\d{4}\b/.exec(A);return e?new Date(e[0]):void 0}function Ht(A){if(A=A.trim(),A.length===0)return new Date;let e=A.replaceAll(/\b(\d+)(st|nd|rd|th)\b/g,"$1").replace(/\s+at\s+/i," "),t=new Date(e);if(Number.isNaN(t.getTime())){let s=rn(A);if(s)return s;let n=on(A);if(n)return n;let a=gn(A);if(a)return a;let r=In(A);return r||(c.warn(`Invalid date: "${A}". Replacing with the current date!`),new Date)}return t}function cn(A,e,t){e.currentIndex+=8;let s=re(e,4);if(s!=="RMID")throw c.groupEnd(),new SyntaxError(`Invalid RMIDI Header! Expected "RMID", got "${s}"`);let n=N.read(e);if(n.header!=="data")throw c.groupEnd(),new SyntaxError(`Invalid RMIDI Chunk header! Expected "data", got "${n.header}"`);let a=n.data,r=!1,i=!1;for(;e.currentIndex<e.length;){let o=e.currentIndex,g=N.read(e);if(g.header==="RIFF"){let l=re(g.data,4).toLowerCase();l==="sfbk"||l==="sfpk"||l==="dls "?(c.info("%cFound embedded soundbank!",E.recognized),A.embeddedSoundBank=e.slice(o,o+g.size).buffer):c.warn(`Unknown RIFF chunk: "${l}"`),l==="dls "?A.isDLSRMIDI=!0:r=!0}else if(g.header==="LIST"&&re(g.data,4)==="INFO")for(c.info("%cFound RMIDI INFO chunk!",E.recognized);g.data.currentIndex<g.size;){let l=N.read(g.data),C=l.header,h=l.data;switch(C){default:c.warn(`Unknown RMIDI Info: ${C}`);break;case"INAM":A.rmidiInfo.name=h;break;case"IALB":case"IPRD":A.rmidiInfo.album=h;break;case"ICRT":case"ICRD":A.rmidiInfo.creationDate=h;break;case"IART":A.rmidiInfo.artist=h;break;case"IGNR":A.rmidiInfo.genre=h;break;case"IPIC":A.rmidiInfo.picture=h;break;case"ICOP":A.rmidiInfo.copyright=h;break;case"ICMT":A.rmidiInfo.comment=h;break;case"IENG":A.rmidiInfo.engineer=h;break;case"ISFT":A.rmidiInfo.software=h;break;case"ISBJ":A.rmidiInfo.subject=h;break;case"IENC":A.rmidiInfo.infoEncoding=h;break;case"MENC":A.rmidiInfo.midiEncoding=h;break;case"DBNK":A.bankOffset=xt(h,2),i=!0;break}}}r&&!i&&(A.bankOffset=1),A.isDLSRMIDI&&(A.bankOffset=0),A.embeddedSoundBank===void 0&&(A.bankOffset=0),Ot(A,a,t)}var Ct={XMFFileType:0,nodeName:1,nodeIDNumber:2,resourceFormat:3,filenameOnDisk:4,filenameExtensionOnDisk:5,macOSFileTypeAndCreator:6,mimeType:7,title:8,copyrightNotice:9,comment:10,autoStart:11,preload:12,contentDescription:13,ID3Metadata:14},sA={inLineResource:1,inFileResource:2,inFileNode:3,externalFile:4,externalXMF:5,XMFFileURIandNodeID:6},ht={StandardMIDIFile:0,StandardMIDIFileType1:1,DLS1:2,DLS2:3,DLS22:4,mobileDLS:5,unknown:-1,folder:-2},ln={standard:0,MMA:1,registered:2,nonRegistered:3},LA={none:0,MMAUnpacker:1,registered:2,nonRegistered:3},Cn=class Hs{length;itemCount;metadataLength;metadata={};nodeData;innerNodes=[];packedContent=!1;nodeUnpackers=[];resourceFormat="unknown";referenceTypeID;constructor(e){let t=e.currentIndex;this.length=Ie(e),this.itemCount=Ie(e);let s=Ie(e),n=s-(e.currentIndex-t),a=e.slice(e.currentIndex,e.currentIndex+n);e.currentIndex+=n,this.metadataLength=Ie(a);let r=a.slice(a.currentIndex,a.currentIndex+this.metadataLength);a.currentIndex+=this.metadataLength;let i,o;for(;r.currentIndex<r.length;){r[r.currentIndex]===0?(r.currentIndex++,i=Ie(r),Object.values(Ct).includes(i)?o=Object.keys(Ct).find(d=>Ct[d]===i)??"":(c.info(`Unknown field specifier: ${i}`),o=`unknown_${i}`)):(i=re(r,Ie(r)),o=i);let h=Ie(r);if(h===0){let d=Ie(r),B=r.slice(r.currentIndex,r.currentIndex+d);r.currentIndex+=d;let p=Ie(B);this.metadata[o]=p<4?re(B,d-1):B.slice(B.currentIndex)}else c.info(`International content: ${h}`),r.currentIndex+=Ie(r)}let g=a.currentIndex,l=Ie(a),C=a.slice(a.currentIndex,g+l);if(a.currentIndex=g+l,l>0)for(this.packedContent=!0;C.currentIndex<l;){let h={id:Ie(C)};switch(h.id){case LA.nonRegistered:case LA.registered:throw c.groupEnd(),new Error(`Unsupported unpacker ID: ${h.id}`);default:throw c.groupEnd(),new Error(`Unknown unpacker ID: ${h.id}`);case LA.none:h.standardID=Ie(C);break;case LA.MMAUnpacker:{let d=C[C.currentIndex++];d===0&&(d<<=8,d|=C[C.currentIndex++],d<<=8,d|=C[C.currentIndex++]);let B=Ie(C);h.manufacturerID=d,h.manufacturerInternalID=B}break}h.decodedSize=Ie(C),this.nodeUnpackers.push(h)}switch(e.currentIndex=t+s,this.referenceTypeID=Ie(e),this.nodeData=e.slice(e.currentIndex,t+this.length),e.currentIndex=t+this.length,this.referenceTypeID){case sA.inLineResource:break;case sA.externalXMF:case sA.inFileNode:case sA.XMFFileURIandNodeID:case sA.externalFile:case sA.inFileResource:throw c.groupEnd(),new Error(`Unsupported reference type: ${this.referenceTypeID}`);default:throw c.groupEnd(),new Error(`Unknown reference type: ${this.referenceTypeID}`)}if(this.isFile){if(this.packedContent){let d=this.nodeData.slice(2);c.info(`%cPacked content. Attempting to deflate. Target size: %c${this.nodeUnpackers[0].decodedSize}`,E.warn,E.value);try{this.nodeData=new j(Us(d).buffer)}catch(B){if(c.groupEnd(),B instanceof Error)throw new Error(`Error unpacking XMF file contents: ${B.message}.`,{cause:B})}}let h=this.metadata.resourceFormat;if(h===void 0)c.warn("No resource format for this file node!");else{h[0]!==ln.standard&&(c.info(`Non-standard formatTypeID: ${h.toString()}`),this.resourceFormat=h.toString());let d=h[1];Object.values(ht).includes(d)?this.resourceFormat=Object.keys(ht).find(B=>ht[B]===d):c.info(`Unrecognized resource format: ${d}`)}}else for(this.resourceFormat="folder";this.nodeData.currentIndex<this.nodeData.length;){let h=this.nodeData.currentIndex,d=Ie(this.nodeData),B=this.nodeData.slice(h,h+d);this.nodeData.currentIndex=h+d,this.innerNodes.push(new Hs(B))}}get isFile(){return this.itemCount===0}};function hn(A,e,t){A.bankOffset=0;let s=re(e,4);if(s!=="XMF_")throw c.groupEnd(),new SyntaxError(`Invalid XMF Header! Expected "_XMF", got "${s}"`);c.group("%cParsing XMF file...",E.info);let n=re(e,4);if(c.info(`%cXMF version: %c${n}`,E.info,E.recognized),n==="2.00"){let g=iA(e,4),l=iA(e,4);c.info(`%cFile Type ID: %c${g}%c, File Type Revision ID: %c${l}`,E.info,E.recognized,E.info,E.recognized)}Ie(e);let a=Ie(e);e.currentIndex+=a,e.currentIndex=Ie(e);let r=new Cn(e),i,o=g=>{let l=(C,h)=>{g.metadata[C]!==void 0&&typeof g.metadata[C]=="string"&&(A.rmidiInfo[h]=Pe(g.metadata[C]))};if(l("nodeName","name"),l("title","name"),l("copyrightNotice","copyright"),l("comment","comment"),g.isFile)switch(g.resourceFormat){default:return;case"DLS1":case"DLS2":case"DLS22":case"mobileDLS":c.info("%cFound embedded DLS!",E.recognized),A.embeddedSoundBank=g.nodeData.buffer;break;case"StandardMIDIFile":case"StandardMIDIFileType1":c.info("%cFound embedded MIDI!",E.recognized),i=g.nodeData;break}else for(let C of g.innerNodes)o(C)};if(o(r),c.groupEnd(),!i)throw new Error("No MIDI data in the XMF file!");Ot(A,i,t)}function Bn(A,e){let t=new Map,s=e.systemParameters.keyShift,n=e.systemParameters.fineTune;for(let r=0;r<e.midiChannels.length;r++){let i=e.midiChannels[r];if(i.systemParameters.isMuted){t.set(r,"clear");continue}let o=i.systemParameters.keyShift+(i.drumChannel?0:s),g=i.systemParameters.fineTune+(i.drumChannel?0:n),l;i.systemParameters.presetLock&&i.patch&&(l={...i.patch});let C=new Map;for(let d=0;d<128;d++){if(!i.lockedControllers[d]||d===Q.bankSelect)continue;let B=i.midiControllers[d]>>7;C.set(d,B)}let h={};for(let[d,B]of Object.entries(i.midiParameters))i.lockedMIDIParameters[d]&&(h[d]=B);t.set(r,{keyShift:o,fineTune:g,patch:l,controllers:C,midiParams:h})}let a={};for(let[r,i]of Object.entries(e.midiParameters))e.lockedMIDIParameters[r]&&(a[r]=i);A.modify({channels:t,drumSetupParams:e.systemParameters.drumLock?"clear":void 0,reverbParams:e.systemParameters.reverbLock?e.reverbProcessor:void 0,chorusParams:e.systemParameters.chorusLock?e.chorusProcessor:void 0,delayParams:e.systemParameters.delayLock?e.delayProcessor:void 0,insertionParams:e.systemParameters.insertionEffectLock?e.insertionProcessor:void 0,midiParams:a})}var $e=class wt{tracks=[];timeline=[];timeDivision=480;duration=0;tempoChanges=[{ticks:0,tempo:120}];extraMetadata=[];lyrics=[];firstNoteOn=0;keyRange={min:0,max:127};lastVoiceEventTick=0;portChannelOffsetMap=[0];loop={start:0,end:0,type:"hard"};fileName;format=0;rmidiInfo={};bankOffset=0;isKaraokeFile=!1;isMultiPort=!1;isDLSRMIDI=!1;embeddedSoundBank;binaryName;get infoEncoding(){let e=this.rmidiInfo.infoEncoding;if(!e)return;let t=e.byteLength;return e[e.byteLength-1]===0&&t--,ve(e,t)}static fromArrayBuffer(e,t=""){let s=new wt,n=new j(e);switch(ve(n,4)){case"RIFF":cn(s,n,t);break;case"XMF_":hn(s,n,t);break;default:Ot(s,n,t);break}return s}static async fromFile(e){return this.fromArrayBuffer(await e.arrayBuffer(),e.name)}static copyFrom(e){let t=new wt;return t.copyFrom(e),t}copyFrom(e){this.copyMetadataFrom(e),this.embeddedSoundBank=e?.embeddedSoundBank?.slice(0)??void 0,this.tracks=e.tracks.map(t=>_A.copyFrom(t)),this.timeline=e.timeline.map(t=>({...t}))}midiTicksToSeconds(e){if(e=Math.max(e,0),this.tempoChanges.length===0)throw new Error("There are no tempo changes in the sequence. At least one is needed.");if(this.tempoChanges[this.tempoChanges.length-1].ticks!==0)throw new Error(`The last tempo change is not at 0 ticks. Got ${this.tempoChanges[this.tempoChanges.length-1].ticks} ticks.`);let t=this.tempoChanges.findIndex(n=>n.ticks<=e),s=0;for(;t<this.tempoChanges.length;){let n=this.tempoChanges[t++],a=e-n.ticks;s+=a*60/(n.tempo*this.timeDivision),e=n.ticks}return s}secondsToMIDITicks(e){if(e=Math.max(e,0),e===0)return 0;if(this.tempoChanges.length===0)throw new Error("There are no tempo changes in the sequence. At least one is needed.");if(this.tempoChanges[this.tempoChanges.length-1].ticks!==0)throw new Error(`The last tempo change is not at 0 ticks. Got ${this.tempoChanges[this.tempoChanges.length-1].ticks} ticks.`);let t=e,s=0;for(let n=this.tempoChanges.length-1;n>=0;n--){let a=this.tempoChanges[n],r=this.tempoChanges[n-1],i=r?r.ticks-a.ticks:1/0,o=60/(a.tempo*this.timeDivision),g=i*o;if(t<=g)return s+=Math.round(t/o),s;s+=i,t-=g}return s}getUsedProgramsAndKeys(e){return Xa(this,e)}preloadSynth(e){c.groupCollapsed("%cPreloading samples...",E.info);let t=this.getUsedProgramsAndKeys(e.soundBankManager);for(let[s,n]of t.entries()){c.info(`%cPreloading used samples on %c${s.name}%c...`,E.info,E.recognized,E.info);for(let[a,r]of n.entries())for(let i of r)e.getVoicesForPreset(s,a,i)}c.groupEnd()}flush(e=!0){if(e)for(let t of this.tracks)t.events.sort((s,n)=>s.ticks-n.ticks);this.parseInternal()}getNoteTimes(e=0){return $a(this,e)}writeMIDI(){return Ja(this)}writeRMIDI(e,t=hs){return Za(this,e,pA(t,hs))}modify(e){sn(this,e)}applySnapshot(e){Bn(this,e)}getName(e="Shift_JIS"){let t="",s=this.getRMIDInfo("name");if(s)return s.trim();if(this.binaryName){e=this.getRMIDInfo("midiEncoding")??e;try{t=new TextDecoder(e).decode(this.binaryName).trim()}catch(n){c.warn(`Failed to decode MIDI name: ${n}`)}}return t||this.fileName}getExtraMetadata(e="Shift_JIS"){e=this.infoEncoding??e;let t=new TextDecoder(e);return this.extraMetadata.map(s=>t.decode(s.data).replaceAll(/@T|@A/g,"").trim())}setRMIDInfo(e,t){if(this.rmidiInfo.infoEncoding=Pe("utf-8",!0),e==="picture")this.rmidiInfo.picture=new Uint8Array(t);else if(e==="creationDate")this.rmidiInfo.creationDate=Pe(Jt(t),!0);else{let s=new TextEncoder().encode(t);this.rmidiInfo[e]=new Uint8Array([...s,0])}}getRMIDInfo(e){if(!this.rmidiInfo[e])return;let t=this.infoEncoding??"UTF-8";if(e==="picture")return this.rmidiInfo[e].buffer;if(e==="creationDate")return Ht(ve(this.rmidiInfo[e]));try{let s=new TextDecoder(t),n=this.rmidiInfo[e];return n[n.length-1]===0&&(n=n?.slice(0,-1)),s.decode(n.buffer).trim()}catch(s){c.warn(`Failed to decode ${e} name: ${s}`);return}}iterate(e){let t=new Array(this.tracks.length).fill(0),s=this.tracks.length;for(;s>0;){let n=0,a=1/0;for(let o=0;o<this.tracks.length;o++){let g=this.tracks[o].events;t[o]>=g.length||g[t[o]].ticks<a&&(n=o,a=g[t[o]].ticks)}let r=this.tracks[n].events;if(t[n]>=r.length){s--;continue}let i=t[n];e(r[i],n,t),t[n]++}}copyMetadataFrom(e){this.fileName=e.fileName,this.timeDivision=e.timeDivision,this.duration=e.duration,this.firstNoteOn=e.firstNoteOn,this.lastVoiceEventTick=e.lastVoiceEventTick,this.format=e.format,this.bankOffset=e.bankOffset,this.isKaraokeFile=e.isKaraokeFile,this.isMultiPort=e.isMultiPort,this.isDLSRMIDI=e.isDLSRMIDI,this.isDLSRMIDI=e.isDLSRMIDI,this.tempoChanges=[...e.tempoChanges],this.extraMetadata=e.extraMetadata.map(t=>new oe(t.ticks,t.statusByte,new j(t.data))),this.lyrics=e.lyrics.map(t=>new oe(t.ticks,t.statusByte,new j(t.data))),this.portChannelOffsetMap=[...e.portChannelOffsetMap],this.binaryName=e?.binaryName?.slice(),this.loop={...e.loop},this.keyRange={...e.keyRange},this.rmidiInfo={};for(let t of Object.entries(e.rmidiInfo)){let s=t[0],n=t[1];this.rmidiInfo[s]=new Uint8Array(n)}}parseInternal(){c.group("%cInterpreting MIDI events...",E.info);let e=!1;this.tempoChanges=[{ticks:0,tempo:120}],this.extraMetadata=[],this.lyrics=[],this.firstNoteOn=0,this.keyRange={max:0,min:127},this.lastVoiceEventTick=0,this.portChannelOffsetMap=[0],this.loop={start:0,end:0,type:"hard"},this.isKaraokeFile=!1,this.isMultiPort=!1;let t=!1;this.rmidiInfo.name!==void 0&&(t=!0);let s=null,n=null,a="hard";for(let g of this.tracks){let l=new Set,C=!1;for(let d=0;d<g.events.length;d++){let B=g.events[d];if(B.statusByte>=128&&B.statusByte<240)switch(C=!0,B.ticks>this.lastVoiceEventTick&&(this.lastVoiceEventTick=B.ticks),B.statusByte&240){case R.controllerChange:switch(B.data[0]){case Q.breathController:case Q.undefinedCC111LSB:B.data[1]===0&&(s=B.ticks);break;case Q.undefinedCC116LSB:case Q.undefinedCC118LSB:s=B.ticks;break;case Q.footController:case Q.undefinedCC117LSB:case Q.undefinedCC119LSB:n===null&&(B.data[0]!==4||B.data[0]===4&&B.data[1]===0)?(a="soft",n=B.ticks):(n=0,a="hard");break;case Q.bankSelect:this.isDLSRMIDI&&B.data[1]!==0&&B.data[1]!==127&&(c.info("%cDLS RMIDI with offset 1 detected!",E.recognized),this.bankOffset=1)}break;case R.noteOn:{l.add(B.statusByte&15);let D=B.data[0];this.keyRange.min=Math.min(this.keyRange.min,D),this.keyRange.max=Math.max(this.keyRange.max,D);break}}let p=ve(B.data);switch(B.statusByte){case R.endOfTrack:d!==g.events.length-1&&(g.deleteEvent(d),d--,c.warn("Unexpected EndOfTrack. Removing!"));break;case R.setTempo:this.tempoChanges.push({ticks:B.ticks,tempo:6e7/cA(B.data,3)});break;case R.marker:switch(p.trim().toLowerCase()){default:break;case"start":case"loopstart":s=B.ticks;break;case"loopend":n=B.ticks}break;case R.copyright:this.extraMetadata.push(B);break;case R.lyric:p.trim().startsWith("@KMIDI KARAOKE FILE")&&(this.isKaraokeFile=!0,c.info("%cKaraoke MIDI detected!",E.recognized)),this.isKaraokeFile?B.statusByte=R.text:this.lyrics.push(B);case R.text:{let D=p.trim();D.startsWith("@KMIDI KARAOKE FILE")?(this.isKaraokeFile=!0,c.info("%cKaraoke MIDI detected!",E.recognized)):this.isKaraokeFile&&(D.startsWith("@T")||D.startsWith("@A")?e?this.extraMetadata.push(B):(this.binaryName=B.data.slice(2),e=!0,t=!0):D.startsWith("@")||this.lyrics.push(B));break}}}g.channels=l,g.name="";let h=g.events.find(d=>d.statusByte===R.trackName);h&&this.tracks.indexOf(g)>0&&(g.name=ve(h.data),!C&&!g.name.toLowerCase().includes("setup")&&this.extraMetadata.push(h))}this.tempoChanges.reverse(),c.info("%cCorrecting loops, ports and detecting notes...",E.info);let r=[];for(let g of this.tracks){let l=g.events.find(C=>(C.statusByte&240)===R.noteOn);l&&r.push(l.ticks)}this.firstNoteOn=Math.min(...r),c.info(`%cFirst note-on detected at: %c${this.firstNoteOn}%c ticks!`,E.info,E.recognized,E.info),s??=this.firstNoteOn,(n===null||n===0)&&(n=this.lastVoiceEventTick),this.loop={start:s,end:n,type:a},this.lastVoiceEventTick=Math.max(this.lastVoiceEventTick,this.loop.end),c.info(`%cLoop points: start: %c${this.loop.start}%c end: %c${this.loop.end}`,E.info,E.recognized,E.info,E.recognized);let i=0;this.portChannelOffsetMap=[];for(let g of this.tracks)if(g.port=-1,g.channels.size!==0)for(let l of g.events){if(l.statusByte!==R.midiPort)continue;let C=l.data[0];g.port=C,this.portChannelOffsetMap[C]===void 0&&(this.portChannelOffsetMap[C]=i,i+=16)}this.portChannelOffsetMap=[...this.portChannelOffsetMap].map(g=>g??0);let o=1/0;for(let g of this.tracks)g.port!==-1&&o>g.port&&(o=g.port);o===1/0&&(o=0);for(let g of this.tracks)(g.port===-1||g.port===void 0)&&(g.port=o);if(this.portChannelOffsetMap.length===0&&(this.portChannelOffsetMap=[0]),this.portChannelOffsetMap.length<2?c.info("%cNo additional MIDI Ports detected.",E.info):(this.isMultiPort=!0,c.info("%cMIDI Ports detected!",E.recognized)),!t)if(this.tracks.length>1){if(!this.tracks[0].events.some(g=>g.statusByte>=R.noteOn&&g.statusByte<R.polyPressure)){let g=this.tracks[0].events.find(l=>l.statusByte===R.trackName);g&&(this.binaryName=g.data)}}else{let g=this.tracks[0].events.find(l=>l.statusByte===R.trackName);g&&(this.binaryName=g.data)}if(this.extraMetadata=this.extraMetadata.filter(g=>g.data.length>0),this.lyrics.sort((g,l)=>g.ticks-l.ticks),!this.tracks.some(g=>g.events[0].ticks===0)){let g=this.tracks[0],l=this?.binaryName?.buffer;l||(l=new Uint8Array(0).buffer),g.addEvents(0,new oe(0,R.trackName,new j(l)))}this.duration=this.midiTicksToSeconds(this.lastVoiceEventTick),this.timeline.length=0,this.iterate((g,l,C)=>{this.timeline.push(Object.freeze({ev:C[l],tr:l}))}),this.binaryName?.length===0&&(this.binaryName=void 0),c.info(`%cMIDI file parsed. Total tick time: %c${this.lastVoiceEventTick}%c, total seconds time: %c${Dt(Math.ceil(this.duration)).time}`,E.info,E.recognized,E.info,E.recognized),c.groupEnd()}};function dn(A,e){if(this.externalMIDIPlayback&&A.statusByte>=128){this.sendMIDIMessage([A.statusByte,...A.data]);return}let t=this._midiData.tracks[e],s,n=0;A.statusByte>=128&&A.statusByte<240?(s=A.statusByte&240,n=A.statusByte&15):s=A.statusByte;let a=this.midiPortChannelOffsets[this.currentMIDIPorts[e]]||0;switch(n+=a,s){case R.noteOn:{let r=this.playingNotes[n];if(!r){for(;this.playingNotes.length<=n;)this.playingNotes.push(new Map);r=this.playingNotes[n]}let i=A.data[1];i>0?(this.synth.noteOn(n,A.data[0],i),r.set(A.data[0],i)):(this.synth.noteOff(n,A.data[0]),r.delete(A.data[0]));break}case R.noteOff:{let r=this.playingNotes[n];if(!r){for(;this.playingNotes.length<=n;)this.playingNotes.push(new Map);r=this.playingNotes[n]}this.synth.noteOff(n,A.data[0]),r.delete(A.data[0]);break}case R.pitchWheel:this.synth.pitchWheel(n,A.data[1]<<7|A.data[0]);break;case R.controllerChange:if(this._midiData.isMultiPort&&t.channels.size===0)return;this.synth.controllerChange(n,A.data[0],A.data[1]);break;case R.programChange:if(this._midiData.isMultiPort&&t.channels.size===0)return;this.synth.programChange(n,A.data[0]);break;case R.polyPressure:this.synth.polyPressure(n,A.data[0],A.data[1]);break;case R.channelPressure:this.synth.channelPressure(n,A.data[0]);break;case R.systemExclusive:this.synth.systemExclusive(A.data,a);break;case R.setTempo:{let r=6e7/cA(A.data,3);this.oneTickToSeconds=60/(r*this._midiData.timeDivision),this.oneTickToSeconds===0&&(this.oneTickToSeconds=60/(120*this._midiData.timeDivision),c.info("invalid tempo! falling back to 120 BPM"));break}case R.timeSignature:case R.endOfTrack:case R.midiChannelPrefix:case R.songPosition:case R.activeSensing:case R.keySignature:case R.sequenceNumber:case R.sequenceSpecific:case R.text:case R.lyric:case R.copyright:case R.trackName:case R.marker:case R.cuePoint:case R.instrumentName:case R.programName:break;case R.midiPort:this.assignMIDIPort(e,A.data[0]);break;case R.reset:this.synth.stopAllChannels(),this.synth.reset();break;default:c.info(`%cUnrecognized Event: %c${A.statusByte}%c status byte: %c${Object.keys(R).find(r=>R[r]===s)}`,E.warn,E.unrecognized,E.warn,E.value);break}s>=0&&s<128&&this.callEvent("metaEvent",{event:A,trackIndex:e})}function En(){if(this.paused||!this._midiData)return;let A=this.currentTime;for(;this.playedTime<A;){let{timeline:e,tracks:t,lastVoiceEventTick:s,loop:n}=this._midiData,a=e[this.index++],r=t[a.tr].events[a.ev];if(this.processEvent(r,a.tr),this.loopCount>0&&n.end<=r.ticks){this.loopCount!==1/0&&(this.loopCount--,this.callEvent("loopCountChange",{newCount:this.loopCount})),n.type==="soft"?this.jumpToTick(n.start):this.setTimeTicks(n.start);return}if(this.index>=e.length||r.ticks>=s){this.songIsFinished();return}let i=e[this.index],o=t[i.tr].events[i.ev];this.playedTime+=this.oneTickToSeconds*(o.ticks-r.ticks)}}function Qn(A,e){this._midiData.tracks[A].channels.size!==0&&(this.midiPortChannelOffset===0&&(this.midiPortChannelOffset+=16,this.midiPortChannelOffsets[e]=0),this.midiPortChannelOffsets[e]===void 0&&(this.synth.midiChannels.length<this.midiPortChannelOffset+15&&this.addNewMIDIPort(),this.midiPortChannelOffsets[e]=this.midiPortChannelOffset,this.midiPortChannelOffset+=16),this.currentMIDIPorts[A]=e)}function fn(A){if(!A.tracks)throw new Error("This MIDI has no tracks!");if(A.duration===0){c.warn("This MIDI file has a duration of exactly 0 seconds."),this.pausedTime=0,this.isFinished=!0;return}this.oneTickToSeconds=60/(120*A.timeDivision),this._midiData=A,this.isFinished=!1,this.synth.clearEmbeddedSoundBank(),this._midiData.embeddedSoundBank!==void 0&&(c.info("%cEmbedded soundbank detected! Using it.",E.recognized),this.synth.setEmbeddedSoundBank(this._midiData.embeddedSoundBank,this._midiData.bankOffset),this.preload&&this._midiData.preloadSynth(this.synth)),this.currentMIDIPorts=this._midiData.tracks.map(e=>e.port),this.midiPortChannelOffset=0,this.midiPortChannelOffsets={};for(let[e,t]of this._midiData.tracks.entries())this.assignMIDIPort(e,t.port);this.firstNoteTime=this._midiData.midiTicksToSeconds(this._midiData.firstNoteOn),c.info(`%cTotal song time: ${Dt(Math.ceil(this._midiData.duration)).time}`,E.recognized),this.callEvent("songChange",{songIndex:this._songIndex}),this._midiData.duration<=.2&&(c.warn(`%cVery short song: (${Dt(Math.round(this._midiData.duration)).time}). Disabling loop!`,E.warn),this.loopCount=0),this.currentTime=0}var We=new Int16Array(128).fill(0),fe=(A,e)=>We[A]=e<<7;fe(Q.mainVolume,100);fe(Q.balance,64);fe(Q.expression,127);fe(Q.pan,64);fe(Q.filterResonance,64);fe(Q.releaseTime,64);fe(Q.attackTime,64);fe(Q.brightness,64);fe(Q.decayTime,64);fe(Q.vibratoRate,64);fe(Q.vibratoDepth,64);fe(Q.vibratoDelay,64);fe(Q.generalPurposeController6,64);fe(Q.generalPurposeController8,64);fe(Q.registeredParameterLSB,127);fe(Q.registeredParameterMSB,127);fe(Q.nonRegisteredParameterLSB,0);fe(Q.nonRegisteredParameterMSB,0);var YA=new Int8Array(128).fill(127);YA[35]=0;YA[36]=0;function un(A=!0){for(let e=0;e<128;e++){if(this.lockedControllers[e]){this.synthCore.callEvent("controllerChange",{channel:this.channel,controller:e,value:this._midiControllers[e]>>7});continue}let t=We[e];this._midiControllers[e]!==t&&e!==Q.portamentoControl&&e!==Q.dataEntryMSB&&e!==Q.registeredParameterMSB&&e!==Q.registeredParameterLSB&&e!==Q.nonRegisteredParameterMSB&&e!==Q.nonRegisteredParameterLSB&&this.controllerChange(e,t>>7,A)}this.setMIDIParameter("pressure",0),this.setMIDIParameter("pitchWheelRange",2),this.setMIDIParameter("modulationDepth",50),this.setMIDIParameter("rxChannel",this.channel),this.setMIDIParameter("efxAssign",!1),this.setMIDIParameter("polyMode",!0),this.setMIDIParameter("keyShift",0),this.setMIDIParameter("fineTune",0),this.setMIDIParameter("assignMode",2),this.setMIDIParameter("randomPan",!1),this.setMIDIParameter("cc1",16),this.setMIDIParameter("cc2",17),this.setMIDIParameter("drumMap",this.channel%16===9?1:0),this.setMIDIParameter("velocitySenseOffset",64),this.setMIDIParameter("velocitySenseDepth",64),this.pitchWheel(8192),this.octaveTuning.fill(0),this.lastPortamentoNote=this.channelSystem==="xg"?60:-1,this.resetDrumParams(),this.resetGeneratorOverrides(),this.resetGeneratorOffsets(),this.dynamicModulators.resetModulators(),this.sf2NRPNGeneratorLSB=0,this.playingNotes.fill(!1),this.lastParameterIsRegistered=!0,this._midiControllers[Q.nonRegisteredParameterLSB]=0,this._midiControllers[Q.nonRegisteredParameterMSB]=0,this._midiControllers[Q.registeredParameterLSB]=16256,this._midiControllers[Q.registeredParameterMSB]=16256,this._midiControllers[Q.dataEntryMSB]=0,this._midiControllers[Q.dataEntryLSB]=0,this.setBankMSB(he.getDefaultBank(this.channelSystem)),this.setBankLSB(0),this.setGSDrums(!1),this.setDrums(this.channel%16===9),this.programChange(0)}var Ys=[Q.modulationWheel,Q.expression,Q.sustainPedal,Q.portamentoOnOff,Q.sostenutoPedal,Q.softPedal,Q.registeredParameterMSB,Q.registeredParameterLSB];function mn(){this.pitchWheel(8192),this.setMIDIParameter("pressure",0);for(let A of Ys){let e=We[A];e!==this._midiControllers[A]&&this.controllerChange(A,e>>7)}}var vA=new Set([Q.dataDecrement,Q.dataIncrement,Q.dataEntryMSB,Q.dataEntryLSB,Q.registeredParameterLSB,Q.registeredParameterMSB,Q.nonRegisteredParameterLSB,Q.nonRegisteredParameterMSB,Q.bankSelect,Q.bankSelectLSB,Q.resetAllControllers,Q.monoModeOn,Q.polyModeOn]);function pn(A,e=void 0){if(!this._midiData)return!1;this.oneTickToSeconds=60/(120*this._midiData.timeDivision),this.sendMIDIReset(),this.playedTime=0,this.index=0;let t=this.synth.midiChannels.length,s=[];for(let g=0;g<t;g++)s.push({pitchWheel:8192,controllers:new Int16Array(We),param:new HA(g),portamentoNote:-1});let n,a=0;function r(g){let l=s[g];l.pitchWheel=8192,l.param.reset();for(let C of Ys)l.controllers[C]=We[C]}let{timeline:i,tracks:o}=this._midiData;for(;;){let g=i[this.index],l=g.tr,C=o[l],h=C.events[g.ev];if(e===void 0){if(this.playedTime>=A)break}else if(h.ticks>=e)break;let d,B=0;h.statusByte>=128&&h.statusByte<240?(d=h.statusByte&240,B=h.statusByte&15):d=h.statusByte;let p=B+(this.midiPortChannelOffsets[C.port]||0);s[p]??={pitchWheel:8192,controllers:new Int16Array(We),param:new HA(p),portamentoNote:-1};let D=s[p];switch(d){case R.noteOn:D.portamentoNote=h.data[0];break;case R.noteOff:break;case R.pitchWheel:D.pitchWheel=h.data[1]<<7|h.data[0];break;case R.systemExclusive:{let k=_.analyzeSysEx(h.data);switch(k.type){default:this.processEvent(h,l);break;case"Controller Change":{let{controller:S,value:v,channel:x}=k;if(x>=t||this._midiData.isMultiPort&&C.channels.size===0)break;if(S===Q.resetAllControllers){r(x);break}vA.has(S)?this.sendMIDICC(x,S,v):s[x].controllers[S]=v<<7}}break}case R.controllerChange:{if(this._midiData.isMultiPort&&C.channels.size===0)break;let k=h.data[0],S=h.data[1];switch(k){default:if(k===Q.resetAllControllers){r(p);break}vA.has(k)?this.sendMIDICC(p,k,S):D.controllers[k]=S<<7;break;case Q.registeredParameterMSB:case Q.registeredParameterLSB:case Q.nonRegisteredParameterLSB:case Q.nonRegisteredParameterMSB:D.param.controllerChange(k,S,0,0),this.sendMIDICC(p,k,S);break;case Q.dataEntryMSB:case Q.dataEntryLSB:{let v=D.param.controllerChange(k,S,0,0);this.sendMIDICC(p,k,S),v.type==="Controller Change"&&(vA.has(v.controller)?this.sendMIDICC(p,v.controller,v.value):D.controllers[v.controller]=v.value<<7);break}}break}case R.setTempo:{let k=6e7/cA(h.data,3);this.oneTickToSeconds=60/(k*this._midiData.timeDivision),n=h,a=l;break}default:this.processEvent(h,l);break}let w=i[++this.index],L=o[w.tr].events[w.ev];if(L===void 0)return this.stop(),!1;this.playedTime+=this.oneTickToSeconds*(L.ticks-h.ticks)}for(let g=0;g<t;g++){let l=s[g];this.sendMIDIPitchWheel(g,l.pitchWheel),l.portamentoNote>=0&&(this.externalMIDIPlayback?this.sendMIDICC(g,Q.portamentoControl,l.portamentoNote):this.synth.midiChannels[g].setLastNote(l.portamentoNote));for(let C=0;C<128;C++){let h=l.controllers[C];h!==We[C]&&!vA.has(C)&&this.sendMIDICC(g,C,h>>7)}}return n&&this.callEvent("metaEvent",{event:n,trackIndex:a}),this.paused&&(this.pausedTime=this.playedTime),!0}var qs=class{songs=[];shuffledSongIndexes=[];synth;externalMIDIPlayback=!1;retriggerPausedNotes=!0;loopCount=0;skipToFirstNoteOn=!0;isFinished=!1;preload=!0;onEventCall;processTick=En.bind(this);firstNoteTime=0;oneTickToSeconds=0;index=0;playedTime=0;pausedTime=-1;absoluteStartTime=0;playingNotes=[];currentMIDIPorts=[];midiPortChannelOffset=0;midiPortChannelOffsets={};assignMIDIPort=Qn.bind(this);loadNewSequence=fn.bind(this);processEvent=dn.bind(this);setTimeTo=pn.bind(this);constructor(A){this.synth=A,this.absoluteStartTime=this.synth.currentTime,this.playingNotes=this.synth.midiChannels.map(()=>new Map)}_midiData;get midiData(){return this._midiData}get duration(){return this._midiData?.duration??0}_songIndex=0;get songIndex(){return this._songIndex}set songIndex(A){this._songIndex=A,this._songIndex=Math.max(0,A%this.songs.length),this.loadCurrentSong()}_shuffleMode=!1;get shuffleMode(){return this._shuffleMode}set shuffleMode(A){this._shuffleMode=A}_playbackRate=1;get playbackRate(){return this._playbackRate}set playbackRate(A){let e=this.currentTime;this._playbackRate=A,this.recalculateStartTime(e)}get currentTime(){return this.pausedTime!==void 0?this.pausedTime:(this.synth.currentTime-this.absoluteStartTime)*this._playbackRate}set currentTime(A){if(this._midiData)if(this.paused&&(this.pausedTime=A),A>this._midiData.duration||A<0)this.skipToFirstNoteOn?this.setTimeTicks(this._midiData.firstNoteOn-1):this.setTimeTicks(0);else if(this.skipToFirstNoteOn&&A<this.firstNoteTime){this.setTimeTicks(this._midiData.firstNoteOn-1);return}else{for(let e of this.playingNotes)e.clear();this.callEvent("timeChange",{newTime:A}),this.setTimeTo(A),this.recalculateStartTime(A)}}get paused(){return this.pausedTime!==void 0}play(){if(!this._midiData){c.warn("No songs loaded in the sequencer. Ignoring the play call.");return}if(this.currentTime>=this._midiData.duration&&(this.currentTime=0),this.paused&&this.recalculateStartTime(this.pausedTime??0),this.retriggerPausedNotes&&!this.externalMIDIPlayback)for(let A=0;A<this.playingNotes.length;A++){let e=this.playingNotes[A];for(let[t,s]of e)this.sendMIDINoteOn(A,t,s)}this.pausedTime=void 0}pause(){this.pauseInternal(!1)}loadNewSongList(A){if(this.songs=A,this.songs.length!==0){if(this._songIndex=0,this.shuffleSongIndexes(),this.callEvent("songListChange",{newSongList:[...this.songs]}),this.preload){c.group("%cPreloading all songs...",E.info);for(let e of this.songs)e.embeddedSoundBank===void 0&&e.preloadSynth(this.synth);c.groupEnd()}this.loadCurrentSong()}}callEvent(A,e){this?.onEventCall?.({type:A,data:e})}pauseInternal(A){this.paused||(this.stop(),this.callEvent("pause",{isFinished:A}),A&&this.callEvent("songEnded",{}))}songIsFinished(){if(this.isFinished=!0,this.songs.length===1){this.pauseInternal(!0);return}this._songIndex++,this._songIndex%=this.songs.length,this.loadCurrentSong()}stop(){this.pausedTime=this.currentTime,this.sendMIDIAllOff()}addNewMIDIPort(){for(let A=0;A<16;A++)this.synth.createMIDIChannel(),this.playingNotes.push(new Map)}sendMIDIMessage(A){if(!this.externalMIDIPlayback){c.warn(`Attempting to send ${Ts(A)} to the synthesizer via sendMIDIMessage. This shouldn't happen!`);return}this.callEvent("midiMessage",{message:A,time:this.synth.currentTime})}sendMIDIAllOff(){for(let A=0;A<16;A++)this.sendMIDICC(A,Q.sustainPedal,0);if(!this.externalMIDIPlayback){this.synth.stopAllChannels();return}for(let A=0;A<this.playingNotes.length;A++){let e=this.playingNotes[A];for(let t of e.keys())this.sendMIDINoteOff(A,t)}for(let A=0;A<16;A++)this.sendMIDICC(A,Q.allNotesOff,0)}sendMIDIReset(){if(this.sendMIDIAllOff(),!this.externalMIDIPlayback){this.synth.reset();return}this.sendMIDISysEx(_.gs(64,0,127,[0]))}loadCurrentSong(){let A=this._songIndex;this._shuffleMode&&(A=this.shuffledSongIndexes[this._songIndex]),this.loadNewSequence(this.songs[A])}shuffleSongIndexes(){let A=this.songs.map((e,t)=>t);for(this.shuffledSongIndexes.length=0;A.length>0;){let e=A[Math.floor(Math.random()*A.length)];this.shuffledSongIndexes.push(e),A.splice(A.indexOf(e),1)}}setTimeTicks(A){if(!this._midiData)return;for(let s of this.playingNotes)s.clear();let e=this._midiData.midiTicksToSeconds(A);this.callEvent("timeChange",{newTime:e});let t=this.setTimeTo(0,A);this.recalculateStartTime(this.playedTime)}recalculateStartTime(A){this.absoluteStartTime=this.synth.currentTime-A/this._playbackRate}jumpToTick(A){if(!this._midiData)return;this.sendMIDIAllOff();let e=this._midiData,t=e.midiTicksToSeconds(A);this.callEvent("timeChange",{newTime:t}),this.recalculateStartTime(t),this.playedTime=t;let s=e.timeline.findIndex(a=>e.tracks[a.tr].events[a.ev].ticks>=A);this.index=s===-1?e.timeline.length:s;let n=e.tempoChanges.find(a=>a.ticks<=A);this.oneTickToSeconds=60/(n.tempo*e.timeDivision)}sendMIDINoteOn(A,e,t){if(!this.externalMIDIPlayback){this.synth.noteOn(A,e,t);return}A%=16,this.sendMIDIMessage([R.noteOn|A,e,t])}sendMIDINoteOff(A,e){if(!this.externalMIDIPlayback){this.synth.noteOff(A,e);return}A%=16,this.sendMIDIMessage([R.noteOff|A,e,64])}sendMIDICC(A,e,t){if(!this.externalMIDIPlayback){this.synth.controllerChange(A,e,t);return}A%=16,this.sendMIDIMessage([R.controllerChange|A,e,t])}sendMIDISysEx(A){if(!this.externalMIDIPlayback){this.synth.systemExclusive(A);return}this.sendMIDIMessage([R.systemExclusive,...A])}sendMIDIPitchWheel(A,e){if(!this.externalMIDIPlayback){this.synth.pitchWheel(A,e);return}A%=16,this.sendMIDIMessage([R.pitchWheel|A,e&127,e>>7])}},Dn={linear:0,nearestNeighbor:1,hermite:2},yn={effectsEnabled:!0,maxBufferSize:128,initialTime:0,eventsEnabled:!0};var kn=class{keyMappings=[];addMapping(A,e,t){this.keyMappings[A]??=[],this.keyMappings[A][e]=t}deleteMapping(A,e){this.keyMappings[A]?.[e]!==void 0&&(this.keyMappings[A][e]=void 0)}clearMappings(){this.keyMappings=[]}setMappings(A){this.keyMappings=A}getMappings(){return this.keyMappings}getVelocity(A,e){return this.keyMappings[A]?.[e]?.velocity??-1}getGain(A,e){return this.keyMappings[A]?.[e]?.gain??1}hasOverridePatch(A,e){let t=this.keyMappings[A]?.[e]?.patch?.bankMSB;return t!==void 0&&t>=0}getPatch(A,e){let t=this.keyMappings[A]?.[e];if(t)return t.patch;throw new Error("No modifier.")}};function wn(A){for(this.keyModifierManager.setMappings(A.keyMappings);this.midiChannels.length<A.midiChannels.length;)this.createMIDIChannel(!0);for(let t=0;t<A.midiChannels.length;t++)this.midiChannels[t].applySnapshot(A.midiChannels[t]);for(let[t,s]of Object.entries(A.reverbProcessor))this.reverbProcessor[t]=s;for(let[t,s]of Object.entries(this.chorusProcessor))this.chorusProcessor[t]=s;for(let[t,s]of Object.entries(this.delayProcessor))this.delayProcessor[t]=s;let e=A.insertionProcessor;this.systemExclusive(_.gs(64,3,0,[e.type>>8,e.type&127]));for(let t=0;t<e.params.length;t++)e.params[t]!==255&&this.systemExclusive(_.gs(64,3,3+t,[e.params[t]]));for(let t of Object.keys(A.lockedMIDIParameters))this.lockMIDIParameter(t,!1);for(let[t,s]of Object.entries(A.midiParameters))this.setMIDIParameter(t,s);for(let[t,s]of Object.entries(A.lockedMIDIParameters))this.lockMIDIParameter(t,s);for(let[t,s]of Object.entries(A.systemParameters))this.setSystemParameter(t,s);this.updateActiveEffects()}function Sn(){return{midiParameters:{...this.midiParameters},lockedMIDIParameters:{...this.lockedMIDIParameters},systemParameters:{...this.systemParameters},midiChannels:this.midiChannels.map(A=>A.getSnapshot()),keyMappings:this.keyModifierManager.getMappings(),reverbProcessor:this.reverbProcessor.getSnapshot(),chorusProcessor:this.chorusProcessor.getSnapshot(),delayProcessor:this.delayProcessor.getSnapshot(),insertionProcessor:this.getInsertionSnapshot()}}var zs={effectsEnabled:!0,eventsEnabled:!0,voiceCap:350,autoAllocateVoices:!1,reverbGain:1,reverbLock:!1,chorusGain:1,chorusLock:!1,delayGain:1,delayLock:!1,insertionEffectLock:!1,drumLock:!1,blackMIDIMode:!1,deviceID:-1,gain:1,pan:0,keyShift:0,fineTune:0,interpolationType:Dn.hermite,nrpnParamLock:!1,monophonicRetrigger:!1};function Mn(A,e){if(this.systemParameters[A]===e)return;let t=this.systemParameters[A];this.systemParameters[A]=e;for(let s of this.midiChannels)s.updateInternalParams();switch(A){default:break;case"voiceCap":{let s=Math.min(e,1e6);this.systemParameters.voiceCap=s;for(let n=s;n<this.voices.length;n++)this.voices[n].isActive=!1;s>this.voices.length&&(c.warn(`Allocating ${s-this.voices.length} new voices!`),this.allocateNewVoices(s-this.voices.length));break}case"keyShift":t!==e&&this.stopAllChannels(!0)}}var Yt=-15e3,St=new Float32Array(15e3-Yt+1);for(let A=0;A<St.length;A++){let e=Yt+A;St[A]=Math.pow(2,e/1200)}function qA(A){return A<=-32767?0:St[A-Yt]}var zA=-2e4,Vs=16500,Mt=new Float32Array(Vs-zA+1);for(let A=0;A<Mt.length;A++){let e=zA+A;Mt[A]=440*Math.pow(2,(e-6900)/1200)}function Lt(A){return A<zA||A>Vs?440*Math.pow(2,(A-6900)/1200):Mt[A-zA|0]}var oA=-16600,gA=new Float32Array(16e3-oA+1);for(let A=0;A<gA.length;A++){let e=oA+A;gA[A]=Math.pow(10,-e/200)}function VA(A){return gA[A-oA|0]}var Ln=.03,qt=class EA{static smoothingConstant=1;static cachedCoefficients=new Map;resonanceCb=0;currentInitialFc=13500;a0=0;a1=0;a2=0;a3=0;a4=0;x1=0;x2=0;y1=0;y2=0;lastTargetCutoff=1/0;initialized=!1;sampleRate;maxCutoff;constructor(e){this.sampleRate=e,this.maxCutoff=e*.45}static initCache(e){EA.smoothingConstant=Ln*(44100/e);let t=new EA(e);t.resonanceCb=0;for(let s=8e3;s<13500;s++)t.currentInitialFc=s,t.calculateCoefficients(s)}init(){this.lastTargetCutoff=1/0,this.resonanceCb=0,this.currentInitialFc=13500,this.a0=0,this.a1=0,this.a2=0,this.a3=0,this.a4=0,this.x1=0,this.x2=0,this.y1=0,this.y2=0,this.initialized=!1}calculateCoefficients(e){e=e|0;let t=this.resonanceCb,s=EA.cachedCoefficients.get(t+e*961);if(s!==void 0){this.a0=s.a0,this.a1=s.a1,this.a2=s.a2,this.a3=s.a3,this.a4=s.a4;return}let n=Lt(e);n=Math.min(n,this.maxCutoff);let a=VA(-(t-3.01)),r=1/Math.sqrt(VA(-t)),i=2*Math.PI*n/this.sampleRate,o=Math.cos(i),g=Math.sin(i)/(2*a),l=(1-o)*r,C=l/2,h=C,d=1+g,B=-2*o,p=1-g,D={a0:C/d,a1:l/d,a2:h/d,a3:B/d,a4:p/d};this.a0=D.a0,this.a1=D.a1,this.a2=D.a2,this.a3=D.a3,this.a4=D.a4,EA.cachedCoefficients.set(t+e*961,D)}},I=Object.freeze({invalid:-1,startAddrsOffset:0,endAddrOffset:1,startloopAddrsOffset:2,endloopAddrsOffset:3,startAddrsCoarseOffset:4,modLfoToPitch:5,vibLfoToPitch:6,modEnvToPitch:7,initialFilterFc:8,initialFilterQ:9,modLfoToFilterFc:10,modEnvToFilterFc:11,endAddrsCoarseOffset:12,modLfoToVolume:13,chorusEffectsSend:15,reverbEffectsSend:16,pan:17,delayModLFO:21,freqModLFO:22,delayVibLFO:23,freqVibLFO:24,delayModEnv:25,attackModEnv:26,holdModEnv:27,decayModEnv:28,sustainModEnv:29,releaseModEnv:30,keyNumToModEnvHold:31,keyNumToModEnvDecay:32,delayVolEnv:33,attackVolEnv:34,holdVolEnv:35,decayVolEnv:36,sustainVolEnv:37,releaseVolEnv:38,keyNumToVolEnvHold:39,keyNumToVolEnvDecay:40,instrument:41,keyRange:43,velRange:44,startloopAddrsCoarseOffset:45,keyNum:46,velocity:47,initialAttenuation:48,endloopAddrsCoarseOffset:50,coarseTune:51,fineTune:52,sampleID:53,sampleModes:54,scaleTuning:56,exclusiveClass:57,overridingRootKey:58,endOper:60,amplitude:61,vibLfoRate:62,vibLfoAmplitudeDepth:63,vibLfoToFilterFc:64,modLfoRate:65,modLfoAmplitudeDepth:66}),Ws=Math.max(...Object.values(I)),Xe=Ws+1,Fe=Object.freeze({[I.invalid]:{min:0,max:0,def:0,nrpn:0},[I.endOper]:{min:0,max:0,def:0,nrpn:0},[I.instrument]:{min:0,max:0,def:0,nrpn:0},[I.sampleID]:{min:0,max:0,def:0,nrpn:0},[I.keyRange]:{min:0,max:0,def:0,nrpn:0},[I.velRange]:{min:0,max:0,def:0,nrpn:0},[I.startAddrsOffset]:{min:0,max:32768,def:0,nrpn:1},[I.endAddrOffset]:{min:-32768,max:32768,def:0,nrpn:1},[I.startloopAddrsOffset]:{min:-32768,max:32768,def:0,nrpn:1},[I.endloopAddrsOffset]:{min:-32768,max:32768,def:0,nrpn:1},[I.startAddrsCoarseOffset]:{min:0,max:32768,def:0,nrpn:1},[I.modLfoToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[I.vibLfoToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[I.modEnvToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[I.initialFilterFc]:{min:1500,max:13500,def:13500,nrpn:2},[I.initialFilterQ]:{min:0,max:960,def:0,nrpn:1},[I.modLfoToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[I.modEnvToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[I.endAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[I.modLfoToVolume]:{min:-960,max:960,def:0,nrpn:1},[I.chorusEffectsSend]:{min:0,max:1e3,def:0,nrpn:1},[I.reverbEffectsSend]:{min:0,max:1e3,def:0,nrpn:1},[I.pan]:{min:-500,max:500,def:0,nrpn:1},[I.delayModLFO]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[I.freqModLFO]:{min:-16e3,max:4500,def:0,nrpn:4},[I.delayVibLFO]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[I.freqVibLFO]:{min:-16e3,max:4500,def:0,nrpn:4},[I.delayModEnv]:{min:-32768,max:5e3,def:-32768,nrpn:2},[I.attackModEnv]:{min:-32768,max:8e3,def:-32768,nrpn:2},[I.holdModEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[I.decayModEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[I.sustainModEnv]:{min:0,max:1e3,def:0,nrpn:1},[I.releaseModEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[I.keyNumToModEnvHold]:{min:-1200,max:1200,def:0,nrpn:1},[I.keyNumToModEnvDecay]:{min:-1200,max:1200,def:0,nrpn:1},[I.delayVolEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[I.attackVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[I.holdVolEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[I.decayVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[I.sustainVolEnv]:{min:0,max:1440,def:0,nrpn:1},[I.releaseVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[I.keyNumToVolEnvHold]:{min:-1200,max:1200,def:0,nrpn:1},[I.keyNumToVolEnvDecay]:{min:-1200,max:1200,def:0,nrpn:1},[I.startloopAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[I.keyNum]:{min:-1,max:127,def:-1,nrpn:1},[I.velocity]:{min:-1,max:127,def:-1,nrpn:1},[I.initialAttenuation]:{min:0,max:1440,def:0,nrpn:1},[I.endloopAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[I.coarseTune]:{min:-120,max:120,def:0,nrpn:1},[I.fineTune]:{min:-12700,max:12700,def:0,nrpn:1},[I.scaleTuning]:{min:0,max:1200,def:100,nrpn:1},[I.exclusiveClass]:{min:0,max:99999,def:0,nrpn:0},[I.overridingRootKey]:{min:-1,max:127,def:-1,nrpn:0},[I.sampleModes]:{min:0,max:3,def:0,nrpn:0},[I.amplitude]:{min:-1e3,max:1e3,def:0,nrpn:1},[I.vibLfoRate]:{min:-1e3,max:1e3,def:0,nrpn:1},[I.vibLfoToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[I.vibLfoAmplitudeDepth]:{min:0,max:1e3,def:0,nrpn:1},[I.modLfoRate]:{min:-1e3,max:1e3,def:0,nrpn:1},[I.modLfoAmplitudeDepth]:{min:0,max:1e3,def:0,nrpn:1}}),ye=960,FA=900,vn=class{outputGain=0;attenuationCb=ye;state=0;sampleRate;updateInterval;sampleTime=0;releaseStartCb=ye;releaseStartTimeSamples=0;attackDuration=0;decayDuration=0;releaseDuration=0;sustainCb=0;delayEnd=0;attackEnd=0;holdEnd=0;decayEnd=0;enteredRelease=!1;canEndOnSilentSustain=!1;constructor(A,e){this.sampleRate=A,this.updateInterval=e}startRelease(A){this.releaseStartTimeSamples=this.sampleTime;let e=A.overrideReleaseVolEnv||A.modulatedGenerators[I.releaseVolEnv];if(this.releaseDuration=this.timecentsToSamples(Math.max(-7200,e)),this.enteredRelease)this.releaseStartCb=this.attenuationCb;else{let s=Math.max(0,Math.min(ye,this.sustainCb)),n=s/ye,a=(60-A.targetKey)*A.modulatedGenerators[I.keyNumToVolEnvDecay];switch(this.decayDuration=this.timecentsToSamples(A.modulatedGenerators[I.decayVolEnv]+a)*n,this.state){case 0:this.releaseStartCb=ye;break;case 1:{let r=1-(this.attackEnd-this.releaseStartTimeSamples)/this.attackDuration;this.releaseStartCb=200*Math.log10(r)*-1;break}case 2:this.releaseStartCb=0;break;case 3:this.releaseStartCb=(1-(this.decayEnd-this.releaseStartTimeSamples)/this.decayDuration)*s;break;case 4:this.releaseStartCb=s;break}this.releaseStartCb=Math.max(0,Math.min(this.releaseStartCb,ye)),this.attenuationCb=this.releaseStartCb}this.enteredRelease=!0;let t=(ye-this.releaseStartCb)/ye;this.releaseDuration*=t,this.releaseStartCb>=FA&&(A.isActive=!1)}init(A){this.enteredRelease=!1,this.state=0,this.sampleTime=0,this.outputGain=0,this.attenuationCb=ye,this.releaseStartCb=ye,this.releaseStartTimeSamples=0,this.releaseDuration=0,this.canEndOnSilentSustain=A.modulatedGenerators[I.sustainVolEnv]>=FA,this.sustainCb=Math.min(ye,A.modulatedGenerators[I.sustainVolEnv]),this.attackDuration=this.timecentsToSamples(A.modulatedGenerators[I.attackVolEnv]);let e=(60-A.targetKey)*A.modulatedGenerators[I.keyNumToVolEnvDecay],t=this.sustainCb/ye;this.decayDuration=this.timecentsToSamples(A.modulatedGenerators[I.decayVolEnv]+e)*t,this.delayEnd=this.timecentsToSamples(A.modulatedGenerators[I.delayVolEnv]),this.attackEnd=this.attackDuration+this.delayEnd;let s=(60-A.targetKey)*A.modulatedGenerators[I.keyNumToVolEnvHold];this.holdEnd=this.timecentsToSamples(A.modulatedGenerators[I.holdVolEnv]+s)+this.attackEnd,this.decayEnd=this.decayDuration+this.holdEnd,this.attackEnd<=this.updateInterval&&(this.state=2)}process(A,e){let{releaseStartTimeSamples:t,releaseStartCb:s,releaseDuration:n,delayEnd:a,attackEnd:r,attackDuration:i,holdEnd:o,decayEnd:g,decayDuration:l,sustainCb:C}=this,h=this.sampleTime+=A;if(this.enteredRelease){let d=h-t,B=ye-s;return this.attenuationCb=d/n*B+s,this.outputGain=gA[this.attenuationCb-oA|0]*e,this.attenuationCb<FA}switch(this.state){case 0:if(h<a)return this.attenuationCb=ye,this.outputGain=0,!0;this.state++;case 1:if(h<r){this.attenuationCb=0;let d=1-(r-h)/i;return this.outputGain=d*e,!0}this.state++;case 2:if(h<o)return this.attenuationCb=0,this.outputGain=e,!0;this.state++;case 3:if(h<g)return this.attenuationCb=(1-(g-h)/l)*C,this.outputGain=e*gA[this.attenuationCb-oA|0],!0;this.state++;case 4:return this.canEndOnSilentSustain&&C>=FA?(this.attenuationCb=ye,this.outputGain=0,!1):(this.attenuationCb=C,this.outputGain=e*gA[C-oA|0],!0)}}timecentsToSamples(A){return Math.max(0,Math.floor(qA(A)*this.sampleRate))}},Qe={monoSample:1,rightSample:2,leftSample:4,linkedSample:8,romMonoSample:32769,romRightSample:32770,romLeftSample:32772,romLinkedSample:32776},se={noController:0,noteOnVelocity:2,noteOnKeyNum:3,polyPressure:10,channelPressure:13,pitchWheel:14,pitchWheelRange:16,link:127},ne={linear:0,concave:1,convex:2,switch:3};var we=16384,WA=Object.keys(ne).length,He=new Float32Array(we+1),Ze=new Float32Array(we+1);He[0]=0;He[He.length-1]=1;Ze[0]=0;Ze[Ze.length-1]=1;for(let A=1;A<we-1;A++){let e=-.4166666666666667*Math.log(A/(He.length-1))/Math.LN10;Ze[A]=1-e,He[He.length-1-A]=e}function js(A,e,t){let s=!!(A&2);switch(A&1&&(t=1-t),e){case ne.linear:return s?t*2-1:t;case ne.switch:return t=t>.5?1:0,s?t*2-1:t;case ne.concave:return s?(t=t*2-1,t<0?-He[Math.trunc(t*-we)]:He[Math.trunc(t*we)]):He[Math.trunc(t*we)];case ne.convex:return s?(t=t*2-1,t<0?-Ze[Math.trunc(t*-we)]:Ze[Math.trunc(t*we)]):Ze[Math.trunc(t*we)]}}var Bt=1,vt=new Float32Array(1e3);for(let A=0;A<vt.length;A++)vt[A]=js(0,ne.convex,A/1e3);var Fn=class{attackDuration=0;decayDuration=0;holdDuration=0;releaseDuration=0;sustainLevel=0;delayEnd=0;attackEnd=0;holdEnd=0;releaseStartLevel=0;currentValue=0;enteredRelease=!1;decayEnd=0;process(A,e){return this.enteredRelease?this.releaseStartLevel===0?0:Math.max(0,(1-(e-A.releaseStartTime)/this.releaseDuration)*this.releaseStartLevel):(e<this.delayEnd?this.currentValue=0:e<this.attackEnd?this.currentValue=vt[~~((1-(this.attackEnd-e)/this.attackDuration)*1e3)]:e<this.holdEnd?this.currentValue=Bt:e<this.decayEnd?this.currentValue=(1-(this.decayEnd-e)/this.decayDuration)*(this.sustainLevel-Bt)+Bt:this.currentValue=this.sustainLevel,this.currentValue)}startRelease(A){this.releaseStartLevel=this.currentValue,this.enteredRelease=!0;let e=this.tc2Sec(Math.max(A.modulatedGenerators[I.releaseModEnv],-7200));this.releaseDuration=e*this.releaseStartLevel}init(A){this.enteredRelease=!1,this.sustainLevel=1-A.modulatedGenerators[I.sustainModEnv]/1e3,this.attackDuration=this.tc2Sec(A.modulatedGenerators[I.attackModEnv]);let e=(60-A.targetKey)*A.modulatedGenerators[I.keyNumToModEnvDecay],t=this.tc2Sec(A.modulatedGenerators[I.decayModEnv]+e);this.decayDuration=t*(1-this.sustainLevel);let s=(60-A.targetKey)*A.modulatedGenerators[I.keyNumToModEnvHold];this.holdDuration=this.tc2Sec(s+A.modulatedGenerators[I.holdModEnv]),this.delayEnd=A.startTime+this.tc2Sec(A.modulatedGenerators[I.delayModEnv]),this.attackEnd=this.delayEnd+this.attackDuration,this.holdEnd=this.attackEnd+this.holdDuration,this.decayEnd=this.holdEnd+this.decayDuration}tc2Sec(A){return A<=-10114?0:qA(A)}},zt=class{isLooping=!1;sampleData;playbackStep=0;loopStart=0;loopEnd=0;loopLength=0;end=0;cursor=0},Rn=class extends zt{process(A,e,t){let s=e*this.playbackStep,n=this.sampleData,{loopEnd:a,loopLength:r,end:i}=this,o=this.cursor;if(this.isLooping)for(let g=0;g<A;g++){for(;o>=a;)o-=r;let l=o|0,C=l+1;C>=a&&(C-=r);let h=o-l,d=n[C],B=n[l];t[g]=B+(d-B)*h,o+=s}else for(let g=0;g<A;g++){let l=o|0,C=l+1;if(C>=i)return t.fill(0,g,A),!1;let h=o-l,d=n[C],B=n[l];t[g]=B+(d-B)*h,o+=s}return this.cursor=o,!0}},bn=class extends zt{process(A,e,t){let s=e*this.playbackStep,n=this.sampleData,{loopEnd:a,loopLength:r,end:i}=this,o=this.cursor;if(this.isLooping)for(let g=0;g<A;g++){for(;o>=a;)o-=r;t[g]=n[o|0],o+=s}else for(let g=0;g<A;g++){if(o>=i)return t.fill(0,g,A),!1;t[g]=n[o|0],o+=s}return this.cursor=o,!0}},Pn=class extends zt{process(A,e,t){let s=e*this.playbackStep,n=this.sampleData,{loopEnd:a,loopLength:r,end:i}=this,o=this.cursor;if(this.isLooping)for(let g=0;g<A;g++){for(;o>=a;)o-=r;let l=o|0,C=l+1,h=l+2,d=l+3,B=o-l;for(;C>=a;)C-=r;for(;h>=a;)h-=r;for(;d>=a;)d-=r;let p=n[l],D=n[C],w=n[h],L=n[d],k=(w-p)*.5,S=D-w,v=k+S,x=v+S+(L-D)*.5,y=v+x;t[g]=((x*B-y)*B+k)*B+D,o+=s}else for(let g=0;g<A;g++){let l=o|0,C=l+1,h=l+2,d=l+3,B=o-l;if(d>=i)return t.fill(0,g,A),!1;let p=n[l],D=n[C],w=n[h],L=n[d],k=(w-p)*.5,S=D-w,v=k+S,x=v+S+(L-D)*.5,y=v+x;t[g]=((x*B-y)*B+k)*B+D,o+=s}return this.cursor=o,!0}},Nn=-2320,Gn=class{oscillators=[new Rn,new bn,new Pn];wavetable=this.oscillators[zs.interpolationType];filter;generators=new Int16Array(Xe);modulatedGenerators=new Int16Array(Xe);modulators=new Array;modulatorValues=new Int16Array(64);modEnv=new Fn;volEnv;resonanceOffset=0;priority=0;isActive=!1;hasRendered=!1;isInRelease=!1;isHeld=!1;channel=0;noteID=0;midiNote=0;targetKey=0;velocity=0;rootKey=0;pressure=0;gainModifier=1;loopingMode=0;startTime=0;releaseStartTime=1/0;tuningCents=0;tuningRatio=1;currentPan=0;portamentoFromKey=-1;portamentoDuration=0;overridePan=0;pitchOffset=0;reverbSend=1;chorusSend=1;delaySend=1;exclusiveClass=0;overrideReleaseVolEnv=0;vibLfoPhase=0;vibLfoStartTime=0;modLfoPhase=0;modLfoStartTime=0;constructor(A,e){this.volEnv=new vn(A,e),this.filter=new qt(A)}exclusiveRelease(A,e=za){this.overrideReleaseVolEnv=Nn,this.isInRelease=!1,this.releaseVoice(A,e)}releaseVoice(A,e=qa){this.releaseStartTime=A,this.releaseStartTime-this.startTime<e&&(this.releaseStartTime=this.startTime+e)}setup(A,e,t,s){this.isActive=!0,this.isInRelease=!1,this.hasRendered=!1,this.isHeld=!1,this.releaseStartTime=1/0,this.pressure=0,this.overrideReleaseVolEnv=0,this.portamentoDuration=0,this.portamentoFromKey=-1,this.tuningCents=0,this.tuningRatio=1,this.vibLfoPhase=.25,this.modLfoPhase=.25,this.startTime=A,this.channel=e,this.midiNote=t,this.noteID=s}};function je(A,e){return(A>>e&1)>0}function dt(A){return A?1:0}var Ge=class Ft{isBipolar;isNegative;index;isCC;curveType;constructor(e=se.noController,t=ne.linear,s=!1,n=!1,a=!1){this.isBipolar=n,this.isNegative=a,this.index=e,this.isCC=s,this.curveType=t}get sourceName(){return this.isCC?Object.keys(Q).find(e=>Q[e]===this.index)??this.index.toString():Object.keys(se).find(e=>se[e]===this.index)??this.index.toString()}get curveTypeName(){return Object.keys(ne).find(e=>ne[e]===this.curveType)??this.curveType.toString()}static fromSourceEnum(e){let t=je(e,9),s=je(e,8),n=je(e,7);return new Ft(e&127,e>>10&3,n,t,s)}static copyFrom(e){return new Ft(e.index,e.curveType,e.isCC,e.isBipolar,e.isNegative)}toString(){return`${this.sourceName} ${this.curveTypeName} ${this.isBipolar?"bipolar":"unipolar"} ${this.isNegative?"negative":"positive"}`}toSourceEnum(){return this.curveType<<10|dt(this.isBipolar)<<9|dt(this.isNegative)<<8|dt(this.isCC)<<7|this.index}isIdentical(e){return this.index===e.index&&this.isNegative===e.isNegative&&this.isCC===e.isCC&&this.isBipolar===e.isBipolar&&this.curveType===e.curveType}getValue(e,t,s){let n;if(this.isCC)n=e.midiControllers[this.index];else switch(this.index){default:case se.noController:n=16383;break;case se.noteOnVelocity:n=s.velocity<<7;break;case se.noteOnKeyNum:n=s.targetKey<<7;break;case se.polyPressure:n=s.pressure<<7;break;case se.channelPressure:n=e.midiParameters.pressure<<7;break;case se.pitchWheel:n=t;break;case se.pitchWheelRange:n=Math.floor(e.midiParameters.pitchWheelRange*128)}let a=(this.isBipolar?2:0)|(this.isNegative?1:0);return Zs[we*(this.curveType*WA+a)+n]}},Zs=new Float32Array(we*4*WA);for(let A=0;A<WA;A++)for(let e=0;e<4;e++){let t=we*(A*WA+e);for(let s=0;s<we;s++)Zs[t+s]=js(e,A,s/we)}function Oe(A,e,t,s,n){return new Ge(n,A,s,e,t).toSourceEnum()}var Xs=Oe(ne.linear,!0,!1,!0,Q.filterResonance),Be=class Rt{destination=I.initialAttenuation;transformAmount=0;transformType=0;primarySource;secondarySource;constructor(e=new Ge,t=new Ge,s=I.invalid,n=0,a=0){this.primarySource=e,this.secondarySource=t,this.destination=s,this.transformAmount=n,this.transformType=a}get destinationName(){return Object.keys(I).find(e=>I[e]===this.destination)}static isIdentical(e,t,s=!1){return e.primarySource.isIdentical(t.primarySource)&&e.secondarySource.isIdentical(t.secondarySource)&&e.destination===t.destination&&e.transformType===t.transformType&&(!s||e.transformAmount===t.transformAmount)}static copyFrom(e){return new Rt(Ge.copyFrom(e.primarySource),Ge.copyFrom(e.secondarySource),e.destination,e.transformAmount,e.transformType)}toString(){return`Source: ${this.primarySource.toString()}
|
|
2
2
|
Secondary source: ${this.secondarySource.toString()}
|
|
3
3
|
to: ${this.destinationName}
|
|
4
|
-
amount: ${this.transformAmount}`+(this.transformType===2?"absolute value":"")}write(e,t){X(e,this.primarySource.toSourceEnum()),X(e,this.destination),X(e,this.transformAmount),X(e,this.secondarySource.toSourceEnum()),X(e,this.transformType),t&&t.mod++}sumTransform(e){let t=Rt.copyFrom(this);return t.transformAmount+=e.transformAmount,t}},Ce=class extends Be{constructor(A,e,t,s,n){super(Ge.fromSourceEnum(A),Ge.fromSourceEnum(e),t,s,n),this.destination>Ws&&(this.destination=I.invalid)}},Tn=[new Ce(Je(ne.concave,!1,!0,!1,se.noteOnVelocity),0,I.initialAttenuation,960,0),new Ce(129,0,I.vibLfoToPitch,50,0),new Ce(Je(ne.concave,!1,!0,!0,Q.mainVolume),0,I.initialAttenuation,960,0),new Ce(13,0,I.vibLfoToPitch,50,0),new Ce(526,16,I.fineTune,12700,0),new Ce(650,0,I.pan,500,0),new Ce(Je(ne.concave,!1,!0,!0,Q.expression),0,I.initialAttenuation,960,0),new Ce(219,0,I.reverbEffectsSend,200,0),new Ce(221,0,I.chorusEffectsSend,200,0)],xn=[new Ce(Je(ne.convex,!0,!1,!0,Q.attackTime),0,I.attackVolEnv,6e3,0),new Ce(Je(ne.linear,!0,!1,!0,Q.releaseTime),0,I.releaseVolEnv,3600,0),new Ce(Je(ne.linear,!0,!1,!0,Q.decayTime),0,I.decayVolEnv,3600,0),new Ce(Je(ne.linear,!0,!1,!0,Q.brightness),0,I.initialFilterFc,9600,0),new Ce(Xs,0,I.initialFilterQ,250,0),new Ce(Je(ne.switch,!1,!1,!0,Q.softPedal),0,I.initialFilterFc,-1200,0)],_s=[...Tn,...xn],me=class{type;value=0;constructor(A,e,t=!0){if(this.type=A,e===void 0)throw new Error("No value provided.");if(this.value=Math.round(e),t){let s=Fe[A];s!==void 0&&(this.value=Math.max(s.min,Math.min(s.max,this.value)))}}write(A){X(A,this.type),X(A,this.value)}toString(){return`${Object.keys(I).find(A=>I[A]===this.type)}: ${this.value}`}},DA=class{velRange={min:-1,max:127};keyRange={min:-1,max:127};generators=[];modulators=[];get hasKeyRange(){return this.keyRange.min!==-1}get hasVelRange(){return this.velRange.min!==-1}get fineTuning(){let A=this.getGenerator(I.coarseTune,0),e=this.getGenerator(I.fineTune,0);return A*100+e}set fineTuning(A){let e=Math.trunc(A/100),t=A%100;this.setGenerator(I.coarseTune,e),this.setGenerator(I.fineTune,t)}addToGenerator(A,e,t=!0){let s=this.getGenerator(A,Fe[A].def);this.setGenerator(A,e+s,t)}setGenerator(A,e,t=!0){switch(A){case I.sampleID:throw new Error("Use setSample()");case I.instrument:throw new Error("Use setInstrument()");case I.velRange:case I.keyRange:throw new Error("Set the range manually")}if(e===null){this.generators=this.generators.filter(n=>n.type!==A);return}let s=this.generators.findIndex(n=>n.type===A);s===-1?this.addGenerators(new me(A,e,t)):this.generators[s]=new me(A,e,t)}addGenerators(...A){for(let e of A)switch(e.type){default:this.generators.push(e);break;case I.sampleID:case I.instrument:break;case I.velRange:this.velRange.min=e.value&127,this.velRange.max=e.value>>8&127;break;case I.keyRange:this.keyRange.min=e.value&127,this.keyRange.max=e.value>>8&127}}addModulators(...A){this.modulators.push(...A)}getGenerator(A,e){return this.generators.find(t=>t.type===A)?.value??e}copyFrom(A){this.generators=A.generators.map(e=>new me(e.type,e.value,!1)),this.modulators=A.modulators.map(Be.copyFrom.bind(Be)),this.velRange={...A.velRange},this.keyRange={...A.keyRange}}getWriteGenerators(A){let e=this.generators.filter(t=>t.type!==I.sampleID&&t.type!==I.instrument&&t.type!==I.keyRange&&t.type!==I.velRange);if(!A)throw new Error("No bank provided! ");return this.hasVelRange&&e.unshift(new me(I.velRange,this.velRange.max<<8|Math.max(this.velRange.min,0),!1)),this.hasKeyRange&&e.unshift(new me(I.keyRange,this.keyRange.max<<8|Math.max(this.keyRange.min,0),!1)),e}},Kn=48e3,$A=class{name;sampleRate;originalKey;pitchCorrection;linkedSample;sampleType;loopStart;loopEnd;linkedTo=[];dataOverridden=!0;compressedData;audioData;constructor(A,e,t,s,n,a,i){this.name=A,this.sampleRate=e,this.originalKey=t,this.pitchCorrection=s,this.loopStart=a,this.loopEnd=i,this.sampleType=n}get isCompressed(){return this.compressedData!==void 0}get isLinked(){return this.sampleType===Qe.rightSample||this.sampleType===Qe.leftSample||this.sampleType===Qe.linkedSample}get useCount(){return this.linkedTo.length}getRawData(A){return this.compressedData&&A&&!this.dataOverridden?this.compressedData:this.encodeS16LE()}resampleData(A){let e=this.getAudioData(),t=A/this.sampleRate,s=new Float32Array(Math.floor(e.length*t));for(let n=0;n<s.length;n++)s[n]=e[Math.floor(n*(1/t))];e=s,this.sampleRate=A,this.loopStart=Math.floor(this.loopStart*t),this.loopEnd=Math.floor(this.loopEnd*t),this.audioData=e}async compressSample(A){if(!this.isCompressed)try{let e=this.getAudioData();(this.sampleRate<8e3||this.sampleRate>96e3)&&(this.resampleData(Kn),e=this.getAudioData());let t=await A(e,this.sampleRate);this.setCompressedData(t)}catch(e){c.warn(`Failed to compress ${this.name}. Leaving as uncompressed!`,e),this.compressedData=void 0}}setSampleType(A){if(this.sampleType=A,this.isLinked||(this.linkedSample&&(this.linkedSample.linkedSample=void 0,this.linkedSample.sampleType=A),this.linkedSample=void 0),(A&32768)>0)throw new Error("ROM samples are not supported.")}unlinkSample(){this.setSampleType(Qe.monoSample)}setLinkedSample(A,e){if(A.linkedSample)throw new Error(`${A.name} is linked tp ${A.linkedSample.name}. Unlink it first.`);if(this===A)throw new Error(`${A.name} cannot be linked to itself.`);switch(this.linkedSample=A,A.linkedSample=this,e){case Qe.leftSample:this.setSampleType(Qe.leftSample),A.setSampleType(Qe.rightSample);break;case Qe.rightSample:this.setSampleType(Qe.rightSample),A.setSampleType(Qe.leftSample);break;case Qe.linkedSample:this.setSampleType(Qe.linkedSample),A.setSampleType(Qe.linkedSample);break;default:throw new Error("Invalid sample type: "+e)}}linkTo(A){this.linkedTo.push(A)}unlinkFrom(A){let e=this.linkedTo.indexOf(A);if(e===-1){c.warn(`Cannot unlink ${A.name} from ${this.name}: not linked.`);return}this.linkedTo.splice(e,1)}getAudioData(){if(this.audioData)return this.audioData;if(this.isCompressed)return this.audioData=this.decodeVorbis(),this.audioData;throw new Error("Sample data is undefined for a BasicSample instance.")}setAudioData(A,e){this.audioData=A,this.sampleRate=e,this.dataOverridden=!0,this.compressedData=void 0}setCompressedData(A){this.audioData=void 0,this.compressedData=A,this.dataOverridden=!1}encodeS16LE(){let A=this.getAudioData(),e=new Int16Array(A.length),t=A.length;for(let s=0;s<t;s++){let n=A[s]*32768;n>32767?n=32767:n<-32768&&(n=-32768),e[s]=n}return new j(e.buffer)}decodeVorbis(){if(this.audioData)return this.audioData;if(!this.compressedData)throw new Error("Compressed data is missing.");try{let A=kA.decode(this.compressedData);if(A.sampleRate!==this.sampleRate&&c.warn(`Sample ${this.name}: Sample rate mismatch. Expected ${this.sampleRate}, got ${A.sampleRate}.`),A.channels.length===0)return c.warn(`Error decoding sample ${this.name}: No channels!`),new Float32Array(this.loopEnd);A.channels.length>1&&c.warn(`Sample ${this.name}: Returned ${A.channels.length} channels instead of mono.`);let e=A.channels[0];for(let t=0;t<e.length;t++)e[t]=Math.max(-1,Math.min(e[t],.999969482421875));return e}catch(A){return c.warn(`Error decoding sample ${this.name}: ${A}`),new Float32Array(this.loopEnd)}}},Un=class extends $A{constructor(){super("",44100,60,0,Qe.monoSample,0,0)}},$s=class extends DA{parentInstrument;useCount;constructor(A,e){super(),this.parentInstrument=A,this._sample=e,e.linkTo(this.parentInstrument),this.useCount=A.useCount}_sample;get sample(){return this._sample}set sample(A){this._sample&&this._sample.unlinkFrom(this.parentInstrument),this._sample=A,A.linkTo(this.parentInstrument)}getWriteGenerators(A){let e=super.getWriteGenerators(A),t=A.samples.indexOf(this.sample);if(t===-1)throw new Error(`${this.sample.name} does not exist in ${A.soundBankInfo.name}! Cannot write sampleID generator.`);return e.push(new me(I.sampleID,t,!1)),e}},ea=class extends DA{parentPreset;constructor(A,e){super(),this.parentPreset=A,this._instrument=e,this._instrument.linkTo(this.parentPreset)}_instrument;get instrument(){return this._instrument}set instrument(A){this._instrument&&this._instrument.unlinkFrom(this.parentPreset),this._instrument=A,this._instrument.linkTo(this.parentPreset)}getWriteGenerators(A){let e=super.getWriteGenerators(A);if(!A)throw new Error("Instrument ID cannot be determined without the sound bank itself.");let t=A.instruments.indexOf(this.instrument);if(t===-1)throw new Error(`${this.instrument.name} does not exist in ${A.soundBankInfo.name}! Cannot write instrument generator.`);return e.push(new me(I.instrument,t,!1)),e}},bt=new Int16Array(Xe);for(let A=0;A<bt.length;A++)Fe[A]&&(bt[A]=Fe[A].def);var uA=class Ke{parentSoundBank;name="";program=0;bankMSB=0;bankLSB=0;isGMGSDrum=!1;zones=[];globalZone;library=0;genre=0;morphology=0;constructor(e,t=new DA){this.parentSoundBank=e,this.globalZone=t}get isDrum(){let e=this.parentSoundBank.isXGBank;return this.isGMGSDrum||e&&he.isXGDrum(this.bankMSB)}static isInRange(e,t){return t>=e.min&&t<=e.max}static addUniqueModulators(e,t){for(let s of t)e.some(n=>Be.isIdentical(s,n))||e.push(s)}static subtractRanges(e,t){return{min:Math.max(e.min,t.min),max:Math.min(e.max,t.max)}}delete(){for(let e of this.zones)e.instrument?.unlinkFrom(this)}deleteZone(e){this.zones[e]?.instrument?.unlinkFrom(this),this.zones.splice(e,1)}createZone(e){let t=new ea(this,e);return this.zones.push(t),t}preload(e,t){for(let s=e;s<t+1;s++)for(let n=0;n<128;n++)for(let a of this.getVoiceParameters(s,n))a.sample.getAudioData()}matches(e){return be.matches(this,e)}getVoiceParameters(e,t){let s=new Array;for(let n of this.zones){if(!Ke.isInRange(n.hasKeyRange?n.keyRange:this.globalZone.keyRange,e)||!Ke.isInRange(n.hasVelRange?n.velRange:this.globalZone.velRange,t))continue;let a=n.instrument;if(!a||a.zones.length===0)continue;let i=new Int16Array(Xe);for(let o of this.globalZone.generators)i[o.type]=o.value;for(let o of n.generators)i[o.type]=o.value;let r=[...n.modulators];Ke.addUniqueModulators(r,this.globalZone.modulators);for(let o of a.zones){if(!Ke.isInRange(o.hasKeyRange?o.keyRange:a.globalZone.keyRange,e)||!Ke.isInRange(o.hasVelRange?o.velRange:a.globalZone.velRange,t))continue;let g=[...o.modulators];Ke.addUniqueModulators(g,a.globalZone.modulators),Ke.addUniqueModulators(g,this.parentSoundBank.defaultModulators);for(let l of r){let h=g.findIndex(d=>Be.isIdentical(l,d));h===-1?g.push(l):g[h]=g[h].sumTransform(l)}let C=new Int16Array(bt);for(let l of a.globalZone.generators)C[l.type]=l.value;for(let l of o.generators)C[l.type]=l.value;for(let l=0;l<C.length;l++)C[l]=Math.max(-32768,Math.min(32767,C[l]+i[l]));C[I.initialAttenuation]=Math.floor(C[I.initialAttenuation]*.4),s.push({sample:o.sample,generators:C,modulators:g})}}return s}toMIDIString(){return be.toMIDIString(this)}toString(){return be.toFullMIDIString(this)}toFlattenedInstrument(){let e=(g,C)=>{g.push(...C.filter(l=>!g.some(h=>h.type===l.type)))},t=(g,C)=>{g.push(...C.filter(l=>!g.some(h=>Be.isIdentical(l,h))))},s=new mA;s.name=this.name;let n=[],a=[],i=this.globalZone;n.push(...i.generators),a.push(...i.modulators);let r=i.keyRange,o=i.velRange;for(let g of this.zones){if(!g.instrument)throw new Error("No instrument in a preset zone.");let C=g.keyRange;g.hasKeyRange||(C=r);let l=g.velRange;g.hasVelRange||(l=o);let h=g.generators.map(v=>new me(v.type,v.value));e(h,n);let d=[...g.modulators];t(d,a);let B=g.instrument,m=B.zones,u=[],w=[],L=B.globalZone;u.push(...L.generators),w.push(...L.modulators);let k=L.keyRange,S=L.velRange;for(let v of m){if(!v.sample)throw new Error("No sample in an instrument zone.");let x=v.keyRange;v.hasKeyRange||(x=k);let y=v.velRange;if(v.hasVelRange||(y=S),x=Ke.subtractRanges(x,C),y=Ke.subtractRanges(y,l),x.max<x.min||y.max<y.min)continue;let p=v.generators.map(J=>new me(J.type,J.value));e(p,u);let D=[...v.modulators];t(D,w);let U=[...D];for(let J of d){let Ae=U.findIndex(G=>Be.isIdentical(J,G));Ae===-1?U.push(J):U[Ae]=U[Ae].sumTransform(J)}let T=p.map(J=>new me(J.type,J.value));for(let J of h){if(J.type===I.velRange||J.type===I.keyRange||J.type===I.instrument||J.type===I.endOper||J.type===I.sampleModes)continue;let Ae=p.findIndex(G=>G.type===J.type);if(Ae===-1){let G=Fe[J.type].def+J.value;T.push(new me(J.type,G))}else{let G=T[Ae].value+J.value;T[Ae]=new me(J.type,G)}}T=T.filter(J=>J.type!==I.sampleID&&J.type!==I.keyRange&&J.type!==I.velRange&&J.type!==I.endOper&&J.type!==I.instrument&&(!(J.type in Fe)||J.value!==Fe[J.type].def));let K=s.createZone(v.sample);K.keyRange=x,K.velRange=y,K.keyRange.min===0&&K.keyRange.max===127&&(K.keyRange.min=-1),K.velRange.min===0&&K.velRange.max===127&&(K.velRange.min=-1),K.addGenerators(...T),K.addModulators(...U)}}return s}write(e,t,s){c.info(`%cWriting ${this.name}...`,E.info),pe(e.pdta,this.name.slice(0,20),20),pe(e.xdta,this.name.slice(20),20),X(e.pdta,this.program);let n=this.bankMSB;s?(n=this.bankMSB&127|(this.bankLSB&127)<<8,this.isGMGSDrum&&(n|=128)):this.isGMGSDrum?n=128:this.bankMSB===0&&(n=this.bankLSB),X(e.pdta,n),e.xdta.currentIndex+=4,X(e.pdta,t&65535),X(e.xdta,t>>16),te(e.pdta,this.library),te(e.pdta,this.genre),te(e.pdta,this.morphology),e.xdta.currentIndex+=12}},Jn=new Set([I.velRange,I.keyRange,I.instrument,I.sampleID,I.exclusiveClass,I.endOper,I.sampleModes,I.startloopAddrsOffset,I.startloopAddrsCoarseOffset,I.endloopAddrsOffset,I.endloopAddrsCoarseOffset,I.startAddrsOffset,I.startAddrsCoarseOffset,I.endAddrOffset,I.endAddrsCoarseOffset,I.initialAttenuation,I.fineTune,I.coarseTune,I.keyNumToVolEnvHold,I.keyNumToVolEnvDecay,I.keyNumToModEnvHold,I.keyNumToModEnvDecay]),mA=class{name="";zones=[];globalZone=new DA;linkedTo=[];get useCount(){return this.linkedTo.length}createZone(A){let e=new $s(this,A);return this.zones.push(e),e}linkTo(A){this.linkedTo.push(A);for(let e of this.zones)e.useCount++}unlinkFrom(A){let e=this.linkedTo.indexOf(A);if(e===-1){c.warn(`Cannot unlink ${A.name} from ${this.name}: not linked.`);return}this.linkedTo.splice(e,1);for(let t of this.zones)t.useCount--}deleteUnusedZones(){this.zones=this.zones.filter(A=>{let e=A.useCount>0;return e||A.sample.unlinkFrom(this),e})}delete(){if(this.useCount>0)throw new Error(`Cannot delete an instrument that is used by: ${this.linkedTo.map(A=>A.name).toString()}.`);for(let A of this.zones)A.sample.unlinkFrom(this)}deleteZone(A,e=!1){let t=this.zones[A];return t.useCount-=1,t.useCount<1||e?(t.sample.unlinkFrom(this),this.zones.splice(A,1),!0):!1}globalize(){let A=this.globalZone;for(let t=0;t<58;t++){if(Jn.has(t))continue;t=t;let s={},n=Fe[t]?.def||0;s[n]=0;for(let a of this.zones){let i=a.getGenerator(t,void 0);i===void 0?s[n]++:s[i]===void 0?s[i]=1:s[i]++;let r;switch(t){default:continue;case I.decayVolEnv:r=I.keyNumToVolEnvDecay;break;case I.holdVolEnv:r=I.keyNumToVolEnvHold;break;case I.decayModEnv:r=I.keyNumToModEnvDecay;break;case I.holdModEnv:r=I.keyNumToModEnvHold}if(a.getGenerator(r,void 0)!==void 0){s={};break}}if(Object.keys(s).length>0){let a=["0",0];for(let[r,o]of Object.entries(s))o>a[1]&&(a=[r,o]);let i=Number.parseInt(a[0]);i!==n&&A.setGenerator(t,i,!1);for(let r of this.zones){let o=r.getGenerator(t,void 0);o===void 0?i!==n&&r.setGenerator(t,n):o===i&&r.setGenerator(t,null)}}}let e=this.zones.length===0?[]:this.zones[0].modulators.map(t=>Be.copyFrom(t));for(let t of e){let s=!0;for(let n of this.zones)s&&(n.modulators.find(a=>Be.isIdentical(a,t))||(s=!1));if(s){A.addModulators(Be.copyFrom(t));for(let n of this.zones){let a=n.modulators.find(i=>Be.isIdentical(i,t));a&&a.transformAmount===t.transformAmount&&n.modulators.splice(n.modulators.indexOf(a),1)}}}}write(A,e){c.info(`%cWriting ${this.name}...`,E.info),pe(A.pdta,this.name.slice(0,20),20),pe(A.xdta,this.name.slice(20),20),X(A.pdta,e&65535),X(A.xdta,e>>>16)}};function On(A,e,t,s,n){let a=0,i=[],r=[];for(let l of A.samples){let h=l.getRawData(!0);a++,n?.(a/A.samples.length),c.info(`%cWrote sample %c${a}. ${l.name}%c of %c${A.samples.length}.`,E.info,E.recognized,E.info,E.recognized),i.push(h),r.push(h.length),l.isCompressed||i.push(new Uint8Array(92))}let o=N.getParts("smpl",i,s),g=N.getParts("sdta",o,s,!0),C=0;for(let[l,h]of A.samples.entries()){let d=r[l],B,m;h.isCompressed?(B=C,m=B+d):(B=C/2,m=B+d/2,C+=92),C+=d,e.push(B),t.push(m)}return g}var Hn=class extends $A{linkedSampleIndex;s16leData;startByteOffset;endByteOffset;sampleID;constructor(A,e,t,s,n,a,i,r,o,g,C,l){let h=(g&16)>0;g&=-17,super(A,a,i,r,g,s-e/2,n-e/2),this.dataOverridden=!1,this.name=A,this.startByteOffset=e,this.endByteOffset=t,this.sampleID=l;let d=C instanceof j?C.currentIndex:0;C instanceof j?h?(this.loopStart+=this.startByteOffset/2,this.loopEnd+=this.startByteOffset/2,this.setCompressedData(C.slice(this.startByteOffset/2+d,this.endByteOffset/2+d))):this.s16leData=C.slice(d+this.startByteOffset,d+this.endByteOffset):this.setAudioData(C.slice(this.startByteOffset/2,this.endByteOffset/2),a),this.linkedSampleIndex=o}getLinkedSample(A){if(this.linkedSample||!this.isLinked)return;let e=A[this.linkedSampleIndex];e?e.linkedSample?(c.info(`%cInvalid linked sample for ${this.name}: ${e.name} is already linked to ${e.linkedSample.name}`,E.warn),this.unlinkSample()):e===this?(c.info(`%cInvalid linked sample for ${this.name}: linked to itself.`,E.warn),this.unlinkSample()):this.setLinkedSample(e,this.sampleType):(c.info(`%cInvalid linked sample for ${this.name}. Setting to mono.`,E.warn),this.unlinkSample())}getAudioData(){if(this.audioData)return this.audioData;if(this.isCompressed)return super.getAudioData();if(!this.s16leData)throw console.error(this),new Error("Unexpected lack of audio data.");let A=this.endByteOffset-this.startByteOffset;if(A<1)return c.warn(`Invalid sample ${this.name}! Invalid length: ${A}`),new Float32Array(1);let e=new Float32Array(A/2),t=new Int16Array(this.s16leData.buffer),s=t.length;for(let n=0;n<s;n++)e[n]=t[n]/32768;return this.audioData=e,e}getRawData(A){return this.dataOverridden||this.compressedData?super.getRawData(A):this.s16leData??new Uint8Array(0)}};function Bs(A,e,t=!0){let s=[],n=0;for(;A.data.length>A.data.currentIndex;){let a=Yn(n,A.data,e);s.push(a),n++}if(s.pop(),t)for(let a of s)a.getLinkedSample(s);return s}function Yn(A,e,t){let s=ie(e,20),n=q(e,4)*2,a=q(e,4)*2,i=q(e,4),r=q(e,4),o=q(e,4),g=e[e.currentIndex++];g>127&&(g=60);let C=Ua(e[e.currentIndex++]),l=q(e,2),h=q(e,2);return new Hn(s,n,a,i,r,o,g,C,l,h,t,A)}function qn(A,e,t,s){let a=46*(A.samples.length+1),i=new j(a),r=new j(a),o=0;for(let[g,C]of A.samples.entries()){pe(i,C.name.slice(0,20),20),pe(r,C.name.slice(20),20);let l=e[g];te(i,l),r.currentIndex+=4;let h=t[g];te(i,h),r.currentIndex+=4;let d=C.loopStart+l,B=C.loopEnd+l;C.isCompressed&&(d-=l,B-=l),te(i,d),te(i,B),te(i,C.sampleRate),i[i.currentIndex++]=C.originalKey,i[i.currentIndex++]=C.pitchCorrection,r.currentIndex+=14;let m=C.linkedSample?A.samples.indexOf(C.linkedSample):0;X(i,Math.max(0,m)&65535),X(r,Math.max(0,m)>>16),o=Math.max(o,m);let u=C.sampleType;C.isCompressed&&(u|=16),X(i,u),r.currentIndex+=2}return pe(i,"EOS",46),pe(r,"EOS",46),{pdta:N.write("shdr",i,s),xdta:N.write("shdr",r,s)}}function ds(A,e,t,s=!1){let n=t?A.presets:A.instruments,a=t?"pgen":"igen",i=t?"pmod":"imod",r=t?"pbag":"ibag",o=t?"phdr":"inst",g=t?38:22,C=0,l=new Array,h=0,d=new Array,B=new Array,m=new Array,u=0,w=new Array,L=D=>{l.push(C);let U=D.getWriteGenerators(A);C+=U.length,B.push(...U),d.push(h);let T=D.modulators;h+=T.length,m.push(...T)};for(let D of n){w.push(u),L(D.globalZone);for(let U of D.zones)L(U);u+=D.zones.length+1}B.push(new me(0,0,!1)),m.push(new Ce(0,0,0,0,0)),l.push(C),d.push(h),w.push(u);let k=new j(B.length*4);for(let D of B)D.write(k);let S=new j(m.length*10);for(let D of m)D.write(S);let v=d.length*4,x={pdta:new j(v),xdta:new j(v)};for(let[D,U]of d.entries()){let T=l[D];X(x.pdta,T&65535),X(x.pdta,U&65535),X(x.xdta,T>>16),X(x.xdta,U>>16)}let y=(n.length+1)*g,p={pdta:new j(y),xdta:new j(y)};for(let[D,U]of n.entries())U.write(p,w[D],s);return t?(pe(p.pdta,"EOP",20),p.pdta.currentIndex+=4,X(p.pdta,u&65535),p.pdta.currentIndex+=12,pe(p.xdta,"",20),p.xdta.currentIndex+=4,X(p.xdta,u>>16),p.xdta.currentIndex+=12):(pe(p.pdta,"EOI",20),X(p.pdta,u&65535),pe(p.xdta,"",20),X(p.xdta,u>>16)),{writeXdta:Math.max(C,h,u)>65535,gen:{pdta:N.write(a,k,e),xdta:N.write(i,new j(4),e)},mod:{pdta:N.write(i,S,e),xdta:N.write(i,new j(10),e)},bag:{pdta:N.write(r,x.pdta,e),xdta:N.write(r,x.xdta,e)},hdr:{pdta:N.write(o,p.pdta,e),xdta:N.write(o,p.xdta,e)}}}var Aa={writeDefaultModulators:!0,writeExtendedLimits:!0,software:"SpessaSynth"},ta={rf64:!0,software:"SpessaSynth"};function zn(A,e){let t=pA(e,Aa);return sa(A,t.software,t.writeDefaultModulators,t.writeExtendedLimits,!1,!1)}function Vn(A,e){return sa(A,pA(e,ta).software,!0,!0,!0,!0)}function sa(A,e,t,s,n,a){c.groupCollapsed("%cSaving soundbank...",E.info),c.group("%cWriting INFO...",E.info);let i=[],r=(k,S)=>{S&&i.push(...N.getParts(k,[Pe(S,!0,!0)],a))},o=A.soundBankInfo;{let k=new j(4);X(k,o.version.major),X(k,o.version.minor),i.push(N.write("ifil",k,a))}if(r("isng",o.soundEngine),r("INAM",o.name),r("irom",o.romInfo),o.romVersion){let k=new j(4);X(k,o.romVersion.major),X(k,o.romVersion.minor),i.push(N.write("iver",k,a))}if(r("ICRD",Ot(o.creationDate)),r("IENG",o.engineer),r("IPRD",o.product),r("ICOP",o.copyright),r("ICMT",o?.subject?(o?.comment?o.comment+`
|
|
5
|
-
`:"")+o.subject:o?.comment),r("ISFT",e),A.defaultModulators.some(k=>!_s.some(S=>Be.isIdentical(S,k,!0)))&&t){let k=A.defaultModulators;c.info(`%cWriting %c${k.length}%c default modulators...`,E.info,E.recognized,E.info);let S=new j(10+k.length*10);for(let v of k)v.write(S);Kt(S,0,10),i.push(...N.getParts("DMOD",[S],a))}c.groupEnd(),c.info("%cWriting SDTA...",E.info);let g=[],C=[],l=On(A,g,C,a);c.info("%cWriting PDTA...",E.info),c.info("%cWriting SHDR...",E.info);let h=qn(A,g,C,a);c.group("%cWriting instruments...",E.info);let d=ds(A,a,!1);c.groupEnd(),c.group("%cWriting presets...",E.info);let B=ds(A,a,!0,n);c.groupEnd();let m=[B.hdr,B.bag,B.mod,B.gen,d.hdr,d.bag,d.mod,d.gen,h],u=N.getParts("pdta",m.map(k=>k.pdta),a,!0);s&&(d.writeXdta||B.writeXdta||A.presets.some(k=>k.name.length>20)||A.instruments.some(k=>k.name.length>20)||A.samples.some(k=>k.name.length>20))&&(c.info("%cWriting the xdta chunk as writeExtendedLimits is enabled and at least one condition was met.",E.info,E.value),i.push(...N.getParts("xdta",m.map(k=>k.xdta),a,!0)));let w=N.getParts("INFO",i,a,!0);c.info("%cWriting the output file...",E.info);let L=N.writeParts(a?"RIFS":"RIFF",[Pe(n?"sfen":"sfbk"),...w,...l,...u],a);return c.info(`%cSaved successfully! Final file size: %c${L.length}`,E.info,E.recognized),c.groupEnd(),L.buffer}var CA=class{static verifyHeader(A,...e){for(let t of e)if(A.header.toLowerCase()===t.toLowerCase())return;this.parsingError(`Invalid DLS chunk header! Expected "${e.join(", or ")}" got "${A.header.toLowerCase()}"`)}static verifyText(A,...e){for(let t of e)if(A.toLowerCase()===t.toLowerCase())return;this.parsingError(`FourCC error: Expected "${e.join(", or ")}" got "${A.toLowerCase()}"`)}static parsingError(A){throw c.groupEnd(),new Error(`DLS parse error: ${A} The file may be corrupted.`)}static verifyAndReadList(A,...e){this.verifyHeader(A,"LIST"),A.data.currentIndex=0,this.verifyText(ie(A.data,4),...e);let t=[];for(;A.data.length>A.data.currentIndex;)t.push(N.read(A.data));return t}},Y={none:0,modLfo:1,velocity:2,keyNum:3,volEnv:4,modEnv:5,pitchWheel:6,polyPressure:7,channelPressure:8,vibratoLfo:9,modulationWheel:129,volume:135,pan:138,expression:139,chorus:221,reverb:219,pitchWheelRange:256,fineTune:257,coarseTune:258},F={none:0,gain:1,reserved:2,pitch:3,pan:4,keyNum:5,chorusSend:128,reverbSend:129,modLfoFreq:260,modLfoDelay:261,vibLfoFreq:276,vibLfoDelay:277,volEnvAttack:518,volEnvDecay:519,reservedEG1:520,volEnvRelease:521,volEnvSustain:522,volEnvDelay:523,volEnvHold:524,modEnvAttack:778,modEnvDecay:779,reservedEG2:780,modEnvRelease:781,modEnvSustain:782,modEnvDelay:783,modEnvHold:784,filterCutoff:1280,filterQ:1281},Es={forward:0,loopAndRelease:1},RA=20,bA=16,IA=class QA extends CA{gain=0;unityNote=60;fineTune=0;loops=new Array;fulOptions=2;static copyFrom(e){let t=new QA;return t.unityNote=e.unityNote,t.gain=e.gain,t.fineTune=e.fineTune,t.loops=e.loops.map(s=>({...s})),t.fulOptions=e.fulOptions,t}static read(e){this.verifyHeader(e,"wsmp");let t=new QA,s=q(e.data,4);if(s!==RA&&c.warn(`Wsmp cbSize mismatch: got ${s}, expected ${RA}.`),t.unityNote=q(e.data,2),t.fineTune=Ut(e.data[e.data.currentIndex++],e.data[e.data.currentIndex++]),t.gain=q(e.data,4)|0,t.fulOptions=q(e.data,4),q(e.data,4)!==0){let n=q(e.data,4);n!==bA&&c.warn(`CbSize for loop in wsmp mismatch. Expected ${bA}, got ${n}.`);let a=q(e.data,4),i=q(e.data,4),r=q(e.data,4);t.loops.push({loopStart:i,loopLength:r,loopType:a})}return t}static fromSFSample(e){let t=new QA;return t.unityNote=e.originalKey,t.fineTune=e.pitchCorrection,(e.loopEnd!==0||e.loopStart!==0)&&t.loops.push({loopStart:e.loopStart,loopLength:e.loopEnd-e.loopStart,loopType:Es.forward}),t}static fromSFZone(e){let t=new QA;t.unityNote=e.getGenerator(I.overridingRootKey,e.sample.originalKey),e.getGenerator(I.scaleTuning,100)===0&&e.keyRange.max-e.keyRange.min===0&&(t.unityNote=e.keyRange.min),t.fineTune=e.fineTuning+e.sample.pitchCorrection,t.gain=-(e.getGenerator(I.initialAttenuation,0)*.4)<<16;let s=e.getGenerator(I.sampleModes,0);if(s!==0){let n=e.sample.loopStart+e.getGenerator(I.startloopAddrsOffset,0)+e.getGenerator(I.startloopAddrsCoarseOffset,0)*32768,a=e.sample.loopEnd+e.getGenerator(I.endloopAddrsOffset,0)+e.getGenerator(I.endloopAddrsCoarseOffset,0)*32768,i;switch(s){case 1:default:i=0;break;case 3:i=1}t.loops.push({loopType:i,loopStart:n,loopLength:a-n})}return t}toSFZone(e,t){let s=0,n=this.loops[0];n&&(s=n.loopType===Es.loopAndRelease?3:1),s!==0&&e.setGenerator(I.sampleModes,s);let a=-(this.gain>>16)/.4;if(a!==0&&e.setGenerator(I.initialAttenuation,a),e.fineTuning=this.fineTune-t.pitchCorrection,this.unityNote!==t.originalKey&&e.setGenerator(I.overridingRootKey,this.unityNote),n){let i=n.loopStart-t.loopStart,r=n.loopStart+n.loopLength-t.loopEnd;if(i!==0){let o=i%32768;e.setGenerator(I.startloopAddrsOffset,o);let g=Math.trunc(i/32768);g!==0&&e.setGenerator(I.startloopAddrsCoarseOffset,g)}if(r!==0){let o=r%32768;e.setGenerator(I.endloopAddrsOffset,o);let g=Math.trunc(r/32768);g!==0&&e.setGenerator(I.endloopAddrsCoarseOffset,g)}}}write(){let e=new j(RA+this.loops.length*bA);te(e,RA),X(e,this.unityNote),X(e,this.fineTune),te(e,this.gain),te(e,this.fulOptions),te(e,this.loops.length);for(let t of this.loops)te(e,bA),te(e,t.loopType),te(e,t.loopStart),te(e,t.loopLength);return N.write("wsmp",e)}},Et={PCM:1,ALAW:6};function Wn(A,e){let t=Math.pow(2,e*8-1),s=Math.pow(2,e*8),n,a=!1;e===1?(n=255,a=!0):n=t;let i=A.length/e,r=new Float32Array(i);if(e===2){let o=new Int16Array(A.buffer),g=o.length;for(let C=0;C<g;C++)r[C]=o[C]/32768}else for(let o=0;o<r.length;o++){let g=q(A,e);a?r[o]=g/n-.5:(g>=t&&(g-=s),r[o]=g/n)}return r}function jn(A,e){let t=A.length/e,s=new Float32Array(t);for(let n=0;n<s.length;n++){let a=q(A,e),i=a^85;i&=127;let r=i>>4,o=i&15;r>0&&(o+=16),o=(o<<4)+8,r>1&&(o=o<<r-1),s[n]=(a>127?o:-o)/32768}return s}var Zn=class extends $A{wFormatTag;bytesPerSample;rawData;constructor(A,e,t,s,n,a,i,r,o){super(A,e,t,s,Qe.monoSample,n,a),this.dataOverridden=!1,this.rawData=i.data,this.wFormatTag=r,this.bytesPerSample=o}getAudioData(){if(!this.rawData)return new Float32Array(0);if(!this.audioData){let A;switch(this.wFormatTag){default:c.warn(`Failed to decode sample. Unknown wFormatTag: ${this.wFormatTag}`),A=new Float32Array(this.rawData.length/this.bytesPerSample);break;case Et.PCM:A=Wn(this.rawData,this.bytesPerSample);break;case Et.ALAW:A=jn(this.rawData,this.bytesPerSample);break}this.setAudioData(A,this.sampleRate)}return this.audioData??new Float32Array(0)}getRawData(A){return this.dataOverridden||this.isCompressed?super.getRawData(A):this.wFormatTag===Et.PCM&&this.bytesPerSample===2?this.rawData:this.encodeS16LE()}},Qs=class Pt extends CA{waveSample=new IA;wFormatTag;bytesPerSample;sampleRate;dataChunk;name="Unnamed sample";constructor(e,t,s,n){super(),this.wFormatTag=e,this.bytesPerSample=t,this.sampleRate=s,this.dataChunk=n}static read(e){let t=this.verifyAndReadList(e,"wave"),s=t.find(h=>h.header==="fmt ");if(!s)throw new Error("No fmt chunk in the wave file!");let n=q(s.data,2),a=q(s.data,2);if(a!==1)throw new Error(`Only mono samples are supported. Fmt reports ${a} channels.`);let i=q(s.data,4);q(s.data,4),q(s.data,2);let r=q(s.data,2)/8,o=t.find(h=>h.header==="data");if(!o)throw new Error("No data chunk in the WAVE chunk!");let g=new Pt(n,r,i,o),C=N.findListType(t,"INFO");if(C){let h=N.read(C.data);for(;h.header!=="INAM"&&C.data.currentIndex<C.data.length;)h=N.read(C.data);h.header==="INAM"&&(g.name=ie(h.data,h.size).trim())}let l=t.find(h=>h.header==="wsmp");return l&&(g.waveSample=IA.read(l)),g}static fromSFSample(e){let t=e.getRawData(!1),s=new Pt(1,2,e.sampleRate,new N("data",t.length,new j(t.buffer)));return s.name=e.name,s.waveSample=IA.fromSFSample(e),s}toSFSample(e){let t=this.waveSample.unityNote,s=this.waveSample.fineTune,n=Math.trunc(s/100);t+=n,s-=n*100;let a=0,i=0,r=this.waveSample.loops?.[0];r&&(a=r.loopStart,i=r.loopStart+r.loopLength);let o=new Zn(this.name,this.sampleRate,t,s,a,i,this.dataChunk,this.wFormatTag,this.bytesPerSample);e.addSamples(o)}write(){let e=this.writeFmt(),t=this.waveSample.write(),s=N.getParts("data",[this.dataChunk.data]),n=N.write("INAM",Pe(this.name,!0)),a=N.write("INFO",n,!1,!0);return c.info(`%cSaved %c${this.name}%c successfully!`,E.recognized,E.value,E.recognized),N.getParts("wave",[e,t,...s,a],!1,!0)}writeFmt(){let e=new j(18);return X(e,this.wFormatTag),X(e,1),te(e,this.sampleRate),te(e,this.sampleRate*2),X(e,2),X(e,this.bytesPerSample*8),N.write("fmt ",e)}},Me=class Nt{source;transform;bipolar;invert;constructor(e=Y.none,t=ne.linear,s=!1,n=!1){this.source=e,this.transform=t,this.bipolar=s,this.invert=n}get sourceName(){return Object.keys(Y).find(e=>Y[e]===this.source)??this.source.toString()}get transformName(){return Object.keys(ne).find(e=>ne[e]===this.transform)??this.transform.toString()}static copyFrom(e){return new Nt(e.source,e.transform,e.bipolar,e.invert)}static fromSFSource(e){let t;if(e.isCC)switch(e.index){case Q.modulationWheel:t=Y.modulationWheel;break;case Q.mainVolume:t=Y.volume;break;case Q.pan:t=Y.pan;break;case Q.expression:t=Y.expression;break;case Q.chorusDepth:t=Y.chorus;break;case Q.reverbDepth:t=Y.reverb;break}else switch(e.index){case se.noController:t=Y.none;break;case se.noteOnKeyNum:t=Y.keyNum;break;case se.noteOnVelocity:t=Y.velocity;break;case se.pitchWheel:t=Y.pitchWheel;break;case se.pitchWheelRange:t=Y.pitchWheelRange;break;case se.polyPressure:t=Y.polyPressure;break;case se.channelPressure:t=Y.channelPressure}if(t!==void 0)return new Nt(t,e.curveType,e.isBipolar,e.isNegative)}toString(){return`${this.sourceName} ${this.transformName} ${this.bipolar?"bipolar":"unipolar"} ${this.invert?"inverted":"positive"}`}toTransformFlag(){return this.transform|(this.bipolar?1:0)<<4|(this.invert?1:0)<<5}toSFSource(){let e,t=!1;switch(this.source){default:case Y.modLfo:case Y.vibratoLfo:case Y.coarseTune:case Y.fineTune:case Y.modEnv:return;case Y.keyNum:e=se.noteOnKeyNum;break;case Y.none:e=se.noController;break;case Y.modulationWheel:e=Q.modulationWheel,t=!0;break;case Y.pan:e=Q.pan,t=!0;break;case Y.reverb:e=Q.reverbDepth,t=!0;break;case Y.chorus:e=Q.chorusDepth,t=!0;break;case Y.expression:e=Q.expression,t=!0;break;case Y.volume:e=Q.mainVolume,t=!0;break;case Y.velocity:e=se.noteOnVelocity;break;case Y.polyPressure:e=se.polyPressure;break;case Y.channelPressure:e=se.channelPressure;break;case Y.pitchWheel:e=se.pitchWheel;break;case Y.pitchWheelRange:e=se.pitchWheelRange;break}if(e!==void 0)return new Ge(e,this.transform,t,this.bipolar,this.invert)}},aa=new Ce(219,0,I.reverbEffectsSend,1e3,0),na=new Ce(221,0,I.chorusEffectsSend,1e3,0);new Ce(129,0,I.vibLfoToPitch,0,0);new Ce(13,0,I.vibLfoToPitch,0,0);var Xn=new Set([I.sampleModes,I.initialAttenuation,I.keyRange,I.velRange,I.sampleID,I.fineTune,I.coarseTune,I.startAddrsOffset,I.startAddrsCoarseOffset,I.endAddrOffset,I.endAddrsCoarseOffset,I.startloopAddrsOffset,I.startloopAddrsCoarseOffset,I.endloopAddrsOffset,I.endloopAddrsCoarseOffset,I.overridingRootKey,I.exclusiveClass]),nA=class Ve{source;control;destination;scale;transform;constructor(e=new Me,t=new Me,s,n,a){this.source=e,this.control=t,this.destination=s,this.transform=n,this.scale=a}get isStaticParameter(){return this.source.source===Y.none&&this.control.source===Y.none}get shortScale(){return this.scale>>16}get transformName(){return Object.keys(ne).find(e=>ne[e]===this.transform)??this.transform.toString()}get destinationName(){return Object.keys(F).find(e=>F[e]===this.destination)??this.destination.toString()}static read(e){let t=q(e,2),s=q(e,2),n=q(e,2),a=q(e,2),i=q(e,4)|0,r=a&15,o=new Me(s,a>>4&15,je(a,8),je(a,9));return new Ve(new Me(t,a>>10&15,je(a,14),je(a,15)),o,n,r,i)}static fromSFModulator(e,t){let s=C=>{c.warn(`Failed converting SF modulator into DLS:
|
|
4
|
+
amount: ${this.transformAmount}`+(this.transformType===2?"absolute value":"")}write(e,t){X(e,this.primarySource.toSourceEnum()),X(e,this.destination),X(e,this.transformAmount),X(e,this.secondarySource.toSourceEnum()),X(e,this.transformType),t&&t.mod++}sumTransform(e){let t=Rt.copyFrom(this);return t.transformAmount+=e.transformAmount,t}},le=class extends Be{constructor(A,e,t,s,n){super(Ge.fromSourceEnum(A),Ge.fromSourceEnum(e),t,s,n),this.destination>Ws&&(this.destination=I.invalid)}},Tn=[new le(Oe(ne.concave,!1,!0,!1,se.noteOnVelocity),0,I.initialAttenuation,960,0),new le(129,0,I.vibLfoToPitch,50,0),new le(Oe(ne.concave,!1,!0,!0,Q.mainVolume),0,I.initialAttenuation,960,0),new le(13,0,I.vibLfoToPitch,50,0),new le(526,16,I.fineTune,12700,0),new le(650,0,I.pan,500,0),new le(Oe(ne.concave,!1,!0,!0,Q.expression),0,I.initialAttenuation,960,0),new le(219,0,I.reverbEffectsSend,200,0),new le(221,0,I.chorusEffectsSend,200,0)],xn=[new le(Oe(ne.convex,!0,!1,!0,Q.attackTime),0,I.attackVolEnv,6e3,0),new le(Oe(ne.linear,!0,!1,!0,Q.releaseTime),0,I.releaseVolEnv,3600,0),new le(Oe(ne.linear,!0,!1,!0,Q.decayTime),0,I.decayVolEnv,3600,0),new le(Oe(ne.linear,!0,!1,!0,Q.brightness),0,I.initialFilterFc,9600,0),new le(Xs,0,I.initialFilterQ,250,0),new le(Oe(ne.switch,!1,!1,!0,Q.softPedal),0,I.initialFilterFc,-1200,0)],_s=[...Tn,...xn],me=class{type;value=0;constructor(A,e,t=!0){if(this.type=A,e===void 0)throw new Error("No value provided.");if(this.value=Math.round(e),t){let s=Fe[A];s!==void 0&&(this.value=Math.max(s.min,Math.min(s.max,this.value)))}}write(A){X(A,this.type),X(A,this.value)}toString(){return`${Object.keys(I).find(A=>I[A]===this.type)}: ${this.value}`}},DA=class{velRange={min:-1,max:127};keyRange={min:-1,max:127};generators=[];modulators=[];get hasKeyRange(){return this.keyRange.min!==-1}get hasVelRange(){return this.velRange.min!==-1}get fineTuning(){let A=this.getGenerator(I.coarseTune,0),e=this.getGenerator(I.fineTune,0);return A*100+e}set fineTuning(A){let e=Math.trunc(A/100),t=A%100;this.setGenerator(I.coarseTune,e),this.setGenerator(I.fineTune,t)}addToGenerator(A,e,t=!0){let s=this.getGenerator(A,Fe[A].def);this.setGenerator(A,e+s,t)}setGenerator(A,e,t=!0){switch(A){case I.sampleID:throw new Error("Use setSample()");case I.instrument:throw new Error("Use setInstrument()");case I.velRange:case I.keyRange:throw new Error("Set the range manually")}if(e===null){this.generators=this.generators.filter(n=>n.type!==A);return}let s=this.generators.findIndex(n=>n.type===A);s===-1?this.addGenerators(new me(A,e,t)):this.generators[s]=new me(A,e,t)}addGenerators(...A){for(let e of A)switch(e.type){default:this.generators.push(e);break;case I.sampleID:case I.instrument:break;case I.velRange:this.velRange.min=e.value&127,this.velRange.max=e.value>>8&127;break;case I.keyRange:this.keyRange.min=e.value&127,this.keyRange.max=e.value>>8&127}}addModulators(...A){this.modulators.push(...A)}getGenerator(A,e){return this.generators.find(t=>t.type===A)?.value??e}copyFrom(A){this.generators=A.generators.map(e=>new me(e.type,e.value,!1)),this.modulators=A.modulators.map(Be.copyFrom.bind(Be)),this.velRange={...A.velRange},this.keyRange={...A.keyRange}}getWriteGenerators(A){let e=this.generators.filter(t=>t.type!==I.sampleID&&t.type!==I.instrument&&t.type!==I.keyRange&&t.type!==I.velRange);if(!A)throw new Error("No bank provided! ");return this.hasVelRange&&e.unshift(new me(I.velRange,this.velRange.max<<8|Math.max(this.velRange.min,0),!1)),this.hasKeyRange&&e.unshift(new me(I.keyRange,this.keyRange.max<<8|Math.max(this.keyRange.min,0),!1)),e}},Un=48e3,$A=class{name;sampleRate;originalKey;pitchCorrection;linkedSample;sampleType;loopStart;loopEnd;linkedTo=[];dataOverridden=!0;compressedData;audioData;constructor(A,e,t,s,n,a,r){this.name=A,this.sampleRate=e,this.originalKey=t,this.pitchCorrection=s,this.loopStart=a,this.loopEnd=r,this.sampleType=n}get isCompressed(){return this.compressedData!==void 0}get isLinked(){return this.sampleType===Qe.rightSample||this.sampleType===Qe.leftSample||this.sampleType===Qe.linkedSample}get useCount(){return this.linkedTo.length}getRawData(A){return this.compressedData&&A&&!this.dataOverridden?this.compressedData:this.encodeS16LE()}resampleData(A){let e=this.getAudioData(),t=A/this.sampleRate,s=new Float32Array(Math.floor(e.length*t));for(let n=0;n<s.length;n++)s[n]=e[Math.floor(n*(1/t))];e=s,this.sampleRate=A,this.loopStart=Math.floor(this.loopStart*t),this.loopEnd=Math.floor(this.loopEnd*t),this.audioData=e}async compressSample(A){if(!this.isCompressed)try{let e=this.getAudioData();(this.sampleRate<8e3||this.sampleRate>96e3)&&(this.resampleData(Un),e=this.getAudioData());let t=await A(e,this.sampleRate);this.setCompressedData(t)}catch(e){c.warn(`Failed to compress ${this.name}. Leaving as uncompressed!`,e),this.compressedData=void 0}}setSampleType(A){if(this.sampleType=A,this.isLinked||(this.linkedSample&&(this.linkedSample.linkedSample=void 0,this.linkedSample.sampleType=A),this.linkedSample=void 0),(A&32768)>0)throw new Error("ROM samples are not supported.")}unlinkSample(){this.setSampleType(Qe.monoSample)}setLinkedSample(A,e){if(A.linkedSample)throw new Error(`${A.name} is linked tp ${A.linkedSample.name}. Unlink it first.`);if(this===A)throw new Error(`${A.name} cannot be linked to itself.`);switch(this.linkedSample=A,A.linkedSample=this,e){case Qe.leftSample:this.setSampleType(Qe.leftSample),A.setSampleType(Qe.rightSample);break;case Qe.rightSample:this.setSampleType(Qe.rightSample),A.setSampleType(Qe.leftSample);break;case Qe.linkedSample:this.setSampleType(Qe.linkedSample),A.setSampleType(Qe.linkedSample);break;default:throw new Error("Invalid sample type: "+e)}}linkTo(A){this.linkedTo.push(A)}unlinkFrom(A){let e=this.linkedTo.indexOf(A);if(e===-1){c.warn(`Cannot unlink ${A.name} from ${this.name}: not linked.`);return}this.linkedTo.splice(e,1)}getAudioData(){if(this.audioData)return this.audioData;if(this.isCompressed)return this.audioData=this.decodeVorbis(),this.audioData;throw new Error("Sample data is undefined for a BasicSample instance.")}setAudioData(A,e){this.audioData=A,this.sampleRate=e,this.dataOverridden=!0,this.compressedData=void 0}setCompressedData(A){this.audioData=void 0,this.compressedData=A,this.dataOverridden=!1}encodeS16LE(){let A=this.getAudioData(),e=new Int16Array(A.length),t=A.length;for(let s=0;s<t;s++){let n=A[s]*32768;n>32767?n=32767:n<-32768&&(n=-32768),e[s]=n}return new j(e.buffer)}decodeVorbis(){if(this.audioData)return this.audioData;if(!this.compressedData)throw new Error("Compressed data is missing.");try{let A=wA.decode(this.compressedData);if(A.sampleRate!==this.sampleRate&&c.warn(`Sample ${this.name}: Sample rate mismatch. Expected ${this.sampleRate}, got ${A.sampleRate}.`),A.channels.length===0)return c.warn(`Error decoding sample ${this.name}: No channels!`),new Float32Array(this.loopEnd);A.channels.length>1&&c.warn(`Sample ${this.name}: Returned ${A.channels.length} channels instead of mono.`);let e=A.channels[0];for(let t=0;t<e.length;t++)e[t]=Math.max(-1,Math.min(e[t],.999969482421875));return e}catch(A){return c.warn(`Error decoding sample ${this.name}: ${A}`),new Float32Array(this.loopEnd)}}},Kn=class extends $A{constructor(){super("",44100,60,0,Qe.monoSample,0,0)}},$s=class extends DA{parentInstrument;useCount;constructor(A,e){super(),this.parentInstrument=A,this._sample=e,e.linkTo(this.parentInstrument),this.useCount=A.useCount}_sample;get sample(){return this._sample}set sample(A){this._sample&&this._sample.unlinkFrom(this.parentInstrument),this._sample=A,A.linkTo(this.parentInstrument)}getWriteGenerators(A){let e=super.getWriteGenerators(A),t=A.samples.indexOf(this.sample);if(t===-1)throw new Error(`${this.sample.name} does not exist in ${A.soundBankInfo.name}! Cannot write sampleID generator.`);return e.push(new me(I.sampleID,t,!1)),e}},ea=class extends DA{parentPreset;constructor(A,e){super(),this.parentPreset=A,this._instrument=e,this._instrument.linkTo(this.parentPreset)}_instrument;get instrument(){return this._instrument}set instrument(A){this._instrument&&this._instrument.unlinkFrom(this.parentPreset),this._instrument=A,this._instrument.linkTo(this.parentPreset)}getWriteGenerators(A){let e=super.getWriteGenerators(A);if(!A)throw new Error("Instrument ID cannot be determined without the sound bank itself.");let t=A.instruments.indexOf(this.instrument);if(t===-1)throw new Error(`${this.instrument.name} does not exist in ${A.soundBankInfo.name}! Cannot write instrument generator.`);return e.push(new me(I.instrument,t,!1)),e}},bt=new Int16Array(Xe);for(let A=0;A<bt.length;A++)Fe[A]&&(bt[A]=Fe[A].def);var uA=class Ue{parentSoundBank;name="";program=0;bankMSB=0;bankLSB=0;isGMGSDrum=!1;zones=[];globalZone;library=0;genre=0;morphology=0;constructor(e,t=new DA){this.parentSoundBank=e,this.globalZone=t}get isDrum(){let e=this.parentSoundBank.isXGBank;return this.isGMGSDrum||e&&he.isXGDrum(this.bankMSB)}static isInRange(e,t){return t>=e.min&&t<=e.max}static addUniqueModulators(e,t){for(let s of t)e.some(n=>Be.isIdentical(s,n))||e.push(s)}static subtractRanges(e,t){return{min:Math.max(e.min,t.min),max:Math.min(e.max,t.max)}}delete(){for(let e of this.zones)e.instrument?.unlinkFrom(this)}deleteZone(e){this.zones[e]?.instrument?.unlinkFrom(this),this.zones.splice(e,1)}createZone(e){let t=new ea(this,e);return this.zones.push(t),t}preload(e,t){for(let s=e;s<t+1;s++)for(let n=0;n<128;n++)for(let a of this.getVoiceParameters(s,n))a.sample.getAudioData()}matches(e){return be.matches(this,e)}getVoiceParameters(e,t){let s=new Array;for(let n of this.zones){if(!Ue.isInRange(n.hasKeyRange?n.keyRange:this.globalZone.keyRange,e)||!Ue.isInRange(n.hasVelRange?n.velRange:this.globalZone.velRange,t))continue;let a=n.instrument;if(!a||a.zones.length===0)continue;let r=new Int16Array(Xe);for(let o of this.globalZone.generators)r[o.type]=o.value;for(let o of n.generators)r[o.type]=o.value;let i=[...n.modulators];Ue.addUniqueModulators(i,this.globalZone.modulators);for(let o of a.zones){if(!Ue.isInRange(o.hasKeyRange?o.keyRange:a.globalZone.keyRange,e)||!Ue.isInRange(o.hasVelRange?o.velRange:a.globalZone.velRange,t))continue;let g=[...o.modulators];Ue.addUniqueModulators(g,a.globalZone.modulators),Ue.addUniqueModulators(g,this.parentSoundBank.defaultModulators);for(let C of i){let h=g.findIndex(d=>Be.isIdentical(C,d));h===-1?g.push(C):g[h]=g[h].sumTransform(C)}let l=new Int16Array(bt);for(let C of a.globalZone.generators)l[C.type]=C.value;for(let C of o.generators)l[C.type]=C.value;for(let C=0;C<l.length;C++)l[C]=Math.max(-32768,Math.min(32767,l[C]+r[C]));l[I.initialAttenuation]=Math.floor(l[I.initialAttenuation]*.4),s.push({sample:o.sample,generators:l,modulators:g})}}return s}toMIDIString(){return be.toMIDIString(this)}toString(){return be.toFullMIDIString(this)}toFlattenedInstrument(){let e=(g,l)=>{g.push(...l.filter(C=>!g.some(h=>h.type===C.type)))},t=(g,l)=>{g.push(...l.filter(C=>!g.some(h=>Be.isIdentical(C,h))))},s=new mA;s.name=this.name;let n=[],a=[],r=this.globalZone;n.push(...r.generators),a.push(...r.modulators);let i=r.keyRange,o=r.velRange;for(let g of this.zones){if(!g.instrument)throw new Error("No instrument in a preset zone.");let l=g.keyRange;g.hasKeyRange||(l=i);let C=g.velRange;g.hasVelRange||(C=o);let h=g.generators.map(v=>new me(v.type,v.value));e(h,n);let d=[...g.modulators];t(d,a);let B=g.instrument,p=B.zones,D=[],w=[],L=B.globalZone;D.push(...L.generators),w.push(...L.modulators);let k=L.keyRange,S=L.velRange;for(let v of p){if(!v.sample)throw new Error("No sample in an instrument zone.");let x=v.keyRange;v.hasKeyRange||(x=k);let y=v.velRange;if(v.hasVelRange||(y=S),x=Ue.subtractRanges(x,l),y=Ue.subtractRanges(y,C),x.max<x.min||y.max<y.min)continue;let u=v.generators.map(O=>new me(O.type,O.value));e(u,D);let m=[...v.modulators];t(m,w);let K=[...m];for(let O of d){let Ae=K.findIndex(G=>Be.isIdentical(O,G));Ae===-1?K.push(O):K[Ae]=K[Ae].sumTransform(O)}let T=u.map(O=>new me(O.type,O.value));for(let O of h){if(O.type===I.velRange||O.type===I.keyRange||O.type===I.instrument||O.type===I.endOper||O.type===I.sampleModes)continue;let Ae=u.findIndex(G=>G.type===O.type);if(Ae===-1){let G=Fe[O.type].def+O.value;T.push(new me(O.type,G))}else{let G=T[Ae].value+O.value;T[Ae]=new me(O.type,G)}}T=T.filter(O=>O.type!==I.sampleID&&O.type!==I.keyRange&&O.type!==I.velRange&&O.type!==I.endOper&&O.type!==I.instrument&&(!(O.type in Fe)||O.value!==Fe[O.type].def));let U=s.createZone(v.sample);U.keyRange=x,U.velRange=y,U.keyRange.min===0&&U.keyRange.max===127&&(U.keyRange.min=-1),U.velRange.min===0&&U.velRange.max===127&&(U.velRange.min=-1),U.addGenerators(...T),U.addModulators(...K)}}return s}write(e,t,s){c.info(`%cWriting ${this.name}...`,E.info),pe(e.pdta,this.name.slice(0,20),20),pe(e.xdta,this.name.slice(20),20),X(e.pdta,this.program);let n=this.bankMSB;s?(n=this.bankMSB&127|(this.bankLSB&127)<<8,this.isGMGSDrum&&(n|=128)):this.isGMGSDrum?n=128:this.bankMSB===0&&(n=this.bankLSB),X(e.pdta,n),e.xdta.currentIndex+=4,X(e.pdta,t&65535),X(e.xdta,t>>16),te(e.pdta,this.library),te(e.pdta,this.genre),te(e.pdta,this.morphology),e.xdta.currentIndex+=12}},On=new Set([I.velRange,I.keyRange,I.instrument,I.sampleID,I.exclusiveClass,I.endOper,I.sampleModes,I.startloopAddrsOffset,I.startloopAddrsCoarseOffset,I.endloopAddrsOffset,I.endloopAddrsCoarseOffset,I.startAddrsOffset,I.startAddrsCoarseOffset,I.endAddrOffset,I.endAddrsCoarseOffset,I.initialAttenuation,I.fineTune,I.coarseTune,I.keyNumToVolEnvHold,I.keyNumToVolEnvDecay,I.keyNumToModEnvHold,I.keyNumToModEnvDecay]),mA=class{name="";zones=[];globalZone=new DA;linkedTo=[];get useCount(){return this.linkedTo.length}createZone(A){let e=new $s(this,A);return this.zones.push(e),e}linkTo(A){this.linkedTo.push(A);for(let e of this.zones)e.useCount++}unlinkFrom(A){let e=this.linkedTo.indexOf(A);if(e===-1){c.warn(`Cannot unlink ${A.name} from ${this.name}: not linked.`);return}this.linkedTo.splice(e,1);for(let t of this.zones)t.useCount--}deleteUnusedZones(){this.zones=this.zones.filter(A=>{let e=A.useCount>0;return e||A.sample.unlinkFrom(this),e})}delete(){if(this.useCount>0)throw new Error(`Cannot delete an instrument that is used by: ${this.linkedTo.map(A=>A.name).toString()}.`);for(let A of this.zones)A.sample.unlinkFrom(this)}deleteZone(A,e=!1){let t=this.zones[A];return t.useCount-=1,t.useCount<1||e?(t.sample.unlinkFrom(this),this.zones.splice(A,1),!0):!1}globalize(){let A=this.globalZone;for(let t=0;t<58;t++){if(On.has(t))continue;t=t;let s={},n=Fe[t]?.def||0;s[n]=0;for(let a of this.zones){let r=a.getGenerator(t,void 0);r===void 0?s[n]++:s[r]===void 0?s[r]=1:s[r]++;let i;switch(t){default:continue;case I.decayVolEnv:i=I.keyNumToVolEnvDecay;break;case I.holdVolEnv:i=I.keyNumToVolEnvHold;break;case I.decayModEnv:i=I.keyNumToModEnvDecay;break;case I.holdModEnv:i=I.keyNumToModEnvHold}if(a.getGenerator(i,void 0)!==void 0){s={};break}}if(Object.keys(s).length>0){let a=["0",0];for(let[i,o]of Object.entries(s))o>a[1]&&(a=[i,o]);let r=Number.parseInt(a[0]);r!==n&&A.setGenerator(t,r,!1);for(let i of this.zones){let o=i.getGenerator(t,void 0);o===void 0?r!==n&&i.setGenerator(t,n):o===r&&i.setGenerator(t,null)}}}let e=this.zones.length===0?[]:this.zones[0].modulators.map(t=>Be.copyFrom(t));for(let t of e){let s=!0;for(let n of this.zones)s&&(n.modulators.find(a=>Be.isIdentical(a,t))||(s=!1));if(s){A.addModulators(Be.copyFrom(t));for(let n of this.zones){let a=n.modulators.find(r=>Be.isIdentical(r,t));a&&a.transformAmount===t.transformAmount&&n.modulators.splice(n.modulators.indexOf(a),1)}}}}write(A,e){c.info(`%cWriting ${this.name}...`,E.info),pe(A.pdta,this.name.slice(0,20),20),pe(A.xdta,this.name.slice(20),20),X(A.pdta,e&65535),X(A.xdta,e>>>16)}};function Jn(A,e,t,s,n){let a=0,r=[],i=[];for(let C of A.samples){let h=C.getRawData(!0);a++,n?.(a/A.samples.length),c.info(`%cWrote sample %c${a}. ${C.name}%c of %c${A.samples.length}.`,E.info,E.recognized,E.info,E.recognized),r.push(h),i.push(h.length),C.isCompressed||r.push(new Uint8Array(92))}let o=N.getParts("smpl",r,s),g=N.getParts("sdta",o,s,!0),l=0;for(let[C,h]of A.samples.entries()){let d=i[C],B,p;h.isCompressed?(B=l,p=B+d):(B=l/2,p=B+d/2,l+=92),l+=d,e.push(B),t.push(p)}return g}var Hn=class extends $A{linkedSampleIndex;s16leData;startByteOffset;endByteOffset;sampleID;constructor(A,e,t,s,n,a,r,i,o,g,l,C){let h=(g&16)>0;g&=-17,super(A,a,r,i,g,s-e/2,n-e/2),this.dataOverridden=!1,this.name=A,this.startByteOffset=e,this.endByteOffset=t,this.sampleID=C;let d=l instanceof j?l.currentIndex:0;l instanceof j?h?(this.loopStart+=this.startByteOffset/2,this.loopEnd+=this.startByteOffset/2,this.setCompressedData(l.slice(this.startByteOffset/2+d,this.endByteOffset/2+d))):this.s16leData=l.slice(d+this.startByteOffset,d+this.endByteOffset):this.setAudioData(l.slice(this.startByteOffset/2,this.endByteOffset/2),a),this.linkedSampleIndex=o}getLinkedSample(A){if(this.linkedSample||!this.isLinked)return;let e=A[this.linkedSampleIndex];e?e.linkedSample?(c.info(`%cInvalid linked sample for ${this.name}: ${e.name} is already linked to ${e.linkedSample.name}`,E.warn),this.unlinkSample()):e===this?(c.info(`%cInvalid linked sample for ${this.name}: linked to itself.`,E.warn),this.unlinkSample()):this.setLinkedSample(e,this.sampleType):(c.info(`%cInvalid linked sample for ${this.name}. Setting to mono.`,E.warn),this.unlinkSample())}getAudioData(){if(this.audioData)return this.audioData;if(this.isCompressed)return super.getAudioData();if(!this.s16leData)throw console.error(this),new Error("Unexpected lack of audio data.");let A=this.endByteOffset-this.startByteOffset;if(A<1)return c.warn(`Invalid sample ${this.name}! Invalid length: ${A}`),new Float32Array(1);let e=new Float32Array(A/2),t=new Int16Array(this.s16leData.buffer),s=t.length;for(let n=0;n<s;n++)e[n]=t[n]/32768;return this.audioData=e,e}getRawData(A){return this.dataOverridden||this.compressedData?super.getRawData(A):this.s16leData??new Uint8Array(0)}};function Bs(A,e,t=!0){let s=[],n=0;for(;A.data.length>A.data.currentIndex;){let a=Yn(n,A.data,e);s.push(a),n++}if(s.pop(),t)for(let a of s)a.getLinkedSample(s);return s}function Yn(A,e,t){let s=re(e,20),n=q(e,4)*2,a=q(e,4)*2,r=q(e,4),i=q(e,4),o=q(e,4),g=e[e.currentIndex++];g>127&&(g=60);let l=Ka(e[e.currentIndex++]),C=q(e,2),h=q(e,2);return new Hn(s,n,a,r,i,o,g,l,C,h,t,A)}function qn(A,e,t,s){let a=46*(A.samples.length+1),r=new j(a),i=new j(a),o=0;for(let[g,l]of A.samples.entries()){pe(r,l.name.slice(0,20),20),pe(i,l.name.slice(20),20);let C=e[g];te(r,C),i.currentIndex+=4;let h=t[g];te(r,h),i.currentIndex+=4;let d=l.loopStart+C,B=l.loopEnd+C;l.isCompressed&&(d-=C,B-=C),te(r,d),te(r,B),te(r,l.sampleRate),r[r.currentIndex++]=l.originalKey,r[r.currentIndex++]=l.pitchCorrection,i.currentIndex+=14;let p=l.linkedSample?A.samples.indexOf(l.linkedSample):0;X(r,Math.max(0,p)&65535),X(i,Math.max(0,p)>>16),o=Math.max(o,p);let D=l.sampleType;l.isCompressed&&(D|=16),X(r,D),i.currentIndex+=2}return pe(r,"EOS",46),pe(i,"EOS",46),{pdta:N.write("shdr",r,s),xdta:N.write("shdr",i,s)}}function ds(A,e,t,s=!1){let n=t?A.presets:A.instruments,a=t?"pgen":"igen",r=t?"pmod":"imod",i=t?"pbag":"ibag",o=t?"phdr":"inst",g=t?38:22,l=0,C=new Array,h=0,d=new Array,B=new Array,p=new Array,D=0,w=new Array,L=m=>{C.push(l);let K=m.getWriteGenerators(A);l+=K.length,B.push(...K),d.push(h);let T=m.modulators;h+=T.length,p.push(...T)};for(let m of n){w.push(D),L(m.globalZone);for(let K of m.zones)L(K);D+=m.zones.length+1}B.push(new me(0,0,!1)),p.push(new le(0,0,0,0,0)),C.push(l),d.push(h),w.push(D);let k=new j(B.length*4);for(let m of B)m.write(k);let S=new j(p.length*10);for(let m of p)m.write(S);let v=d.length*4,x={pdta:new j(v),xdta:new j(v)};for(let[m,K]of d.entries()){let T=C[m];X(x.pdta,T&65535),X(x.pdta,K&65535),X(x.xdta,T>>16),X(x.xdta,K>>16)}let y=(n.length+1)*g,u={pdta:new j(y),xdta:new j(y)};for(let[m,K]of n.entries())K.write(u,w[m],s);return t?(pe(u.pdta,"EOP",20),u.pdta.currentIndex+=4,X(u.pdta,D&65535),u.pdta.currentIndex+=12,pe(u.xdta,"",20),u.xdta.currentIndex+=4,X(u.xdta,D>>16),u.xdta.currentIndex+=12):(pe(u.pdta,"EOI",20),X(u.pdta,D&65535),pe(u.xdta,"",20),X(u.xdta,D>>16)),{writeXdta:Math.max(l,h,D)>65535,gen:{pdta:N.write(a,k,e),xdta:N.write(r,new j(4),e)},mod:{pdta:N.write(r,S,e),xdta:N.write(r,new j(10),e)},bag:{pdta:N.write(i,x.pdta,e),xdta:N.write(i,x.xdta,e)},hdr:{pdta:N.write(o,u.pdta,e),xdta:N.write(o,u.xdta,e)}}}var Aa={writeDefaultModulators:!0,writeExtendedLimits:!0,software:"SpessaSynth"},ta={rf64:!0,software:"SpessaSynth"};function zn(A,e){let t=pA(e,Aa);return sa(A,t.software,t.writeDefaultModulators,t.writeExtendedLimits,!1,!1)}function Vn(A,e){return sa(A,pA(e,ta).software,!0,!0,!0,!0)}function sa(A,e,t,s,n,a){c.groupCollapsed("%cSaving soundbank...",E.info),c.group("%cWriting INFO...",E.info);let r=[],i=(k,S)=>{S&&r.push(...N.getParts(k,[Pe(S,!0,!0)],a))},o=A.soundBankInfo;{let k=new j(4);X(k,o.version.major),X(k,o.version.minor),r.push(N.write("ifil",k,a))}if(i("isng",o.soundEngine),i("INAM",o.name),i("irom",o.romInfo),o.romVersion){let k=new j(4);X(k,o.romVersion.major),X(k,o.romVersion.minor),r.push(N.write("iver",k,a))}if(i("ICRD",Jt(o.creationDate)),i("IENG",o.engineer),i("IPRD",o.product),i("ICOP",o.copyright),i("ICMT",o?.subject?(o?.comment?o.comment+`
|
|
5
|
+
`:"")+o.subject:o?.comment),i("ISFT",e),A.defaultModulators.some(k=>!_s.some(S=>Be.isIdentical(S,k,!0)))&&t){let k=A.defaultModulators;c.info(`%cWriting %c${k.length}%c default modulators...`,E.info,E.recognized,E.info);let S=new j(10+k.length*10);for(let v of k)v.write(S);Ut(S,0,10),r.push(...N.getParts("DMOD",[S],a))}c.groupEnd(),c.info("%cWriting SDTA...",E.info);let g=[],l=[],C=Jn(A,g,l,a);c.info("%cWriting PDTA...",E.info),c.info("%cWriting SHDR...",E.info);let h=qn(A,g,l,a);c.group("%cWriting instruments...",E.info);let d=ds(A,a,!1);c.groupEnd(),c.group("%cWriting presets...",E.info);let B=ds(A,a,!0,n);c.groupEnd();let p=[B.hdr,B.bag,B.mod,B.gen,d.hdr,d.bag,d.mod,d.gen,h],D=N.getParts("pdta",p.map(k=>k.pdta),a,!0);s&&(d.writeXdta||B.writeXdta||A.presets.some(k=>k.name.length>20)||A.instruments.some(k=>k.name.length>20)||A.samples.some(k=>k.name.length>20))&&(c.info("%cWriting the xdta chunk as writeExtendedLimits is enabled and at least one condition was met.",E.info,E.value),r.push(...N.getParts("xdta",p.map(k=>k.xdta),a,!0)));let w=N.getParts("INFO",r,a,!0);c.info("%cWriting the output file...",E.info);let L=N.writeParts(a?"RIFS":"RIFF",[Pe(n?"sfen":"sfbk"),...w,...C,...D],a);return c.info(`%cSaved successfully! Final file size: %c${L.length}`,E.info,E.recognized),c.groupEnd(),L.buffer}var lA=class{static verifyHeader(A,...e){for(let t of e)if(A.header.toLowerCase()===t.toLowerCase())return;this.parsingError(`Invalid DLS chunk header! Expected "${e.join(", or ")}" got "${A.header.toLowerCase()}"`)}static verifyText(A,...e){for(let t of e)if(A.toLowerCase()===t.toLowerCase())return;this.parsingError(`FourCC error: Expected "${e.join(", or ")}" got "${A.toLowerCase()}"`)}static parsingError(A){throw c.groupEnd(),new Error(`DLS parse error: ${A} The file may be corrupted.`)}static verifyAndReadList(A,...e){this.verifyHeader(A,"LIST"),A.data.currentIndex=0,this.verifyText(re(A.data,4),...e);let t=[];for(;A.data.length>A.data.currentIndex;)t.push(N.read(A.data));return t}},Y={none:0,modLfo:1,velocity:2,keyNum:3,volEnv:4,modEnv:5,pitchWheel:6,polyPressure:7,channelPressure:8,vibratoLfo:9,modulationWheel:129,volume:135,pan:138,expression:139,chorus:221,reverb:219,pitchWheelRange:256,fineTune:257,coarseTune:258},F={none:0,gain:1,reserved:2,pitch:3,pan:4,keyNum:5,chorusSend:128,reverbSend:129,modLfoFreq:260,modLfoDelay:261,vibLfoFreq:276,vibLfoDelay:277,volEnvAttack:518,volEnvDecay:519,reservedEG1:520,volEnvRelease:521,volEnvSustain:522,volEnvDelay:523,volEnvHold:524,modEnvAttack:778,modEnvDecay:779,reservedEG2:780,modEnvRelease:781,modEnvSustain:782,modEnvDelay:783,modEnvHold:784,filterCutoff:1280,filterQ:1281},Es={forward:0,loopAndRelease:1},RA=20,bA=16,IA=class QA extends lA{gain=0;unityNote=60;fineTune=0;loops=new Array;fulOptions=2;static copyFrom(e){let t=new QA;return t.unityNote=e.unityNote,t.gain=e.gain,t.fineTune=e.fineTune,t.loops=e.loops.map(s=>({...s})),t.fulOptions=e.fulOptions,t}static read(e){this.verifyHeader(e,"wsmp");let t=new QA,s=q(e.data,4);if(s!==RA&&c.warn(`Wsmp cbSize mismatch: got ${s}, expected ${RA}.`),t.unityNote=q(e.data,2),t.fineTune=Kt(e.data[e.data.currentIndex++],e.data[e.data.currentIndex++]),t.gain=q(e.data,4)|0,t.fulOptions=q(e.data,4),q(e.data,4)!==0){let n=q(e.data,4);n!==bA&&c.warn(`CbSize for loop in wsmp mismatch. Expected ${bA}, got ${n}.`);let a=q(e.data,4),r=q(e.data,4),i=q(e.data,4);t.loops.push({loopStart:r,loopLength:i,loopType:a})}return t}static fromSFSample(e){let t=new QA;return t.unityNote=e.originalKey,t.fineTune=e.pitchCorrection,(e.loopEnd!==0||e.loopStart!==0)&&t.loops.push({loopStart:e.loopStart,loopLength:e.loopEnd-e.loopStart,loopType:Es.forward}),t}static fromSFZone(e){let t=new QA;t.unityNote=e.getGenerator(I.overridingRootKey,e.sample.originalKey),e.getGenerator(I.scaleTuning,100)===0&&e.keyRange.max-e.keyRange.min===0&&(t.unityNote=e.keyRange.min),t.fineTune=e.fineTuning+e.sample.pitchCorrection,t.gain=-(e.getGenerator(I.initialAttenuation,0)*.4)<<16;let s=e.getGenerator(I.sampleModes,0);if(s!==0){let n=e.sample.loopStart+e.getGenerator(I.startloopAddrsOffset,0)+e.getGenerator(I.startloopAddrsCoarseOffset,0)*32768,a=e.sample.loopEnd+e.getGenerator(I.endloopAddrsOffset,0)+e.getGenerator(I.endloopAddrsCoarseOffset,0)*32768,r;switch(s){case 1:default:r=0;break;case 3:r=1}t.loops.push({loopType:r,loopStart:n,loopLength:a-n})}return t}toSFZone(e,t){let s=0,n=this.loops[0];n&&(s=n.loopType===Es.loopAndRelease?3:1),s!==0&&e.setGenerator(I.sampleModes,s);let a=-(this.gain>>16)/.4;if(a!==0&&e.setGenerator(I.initialAttenuation,a),e.fineTuning=this.fineTune-t.pitchCorrection,this.unityNote!==t.originalKey&&e.setGenerator(I.overridingRootKey,this.unityNote),n){let r=n.loopStart-t.loopStart,i=n.loopStart+n.loopLength-t.loopEnd;if(r!==0){let o=r%32768;e.setGenerator(I.startloopAddrsOffset,o);let g=Math.trunc(r/32768);g!==0&&e.setGenerator(I.startloopAddrsCoarseOffset,g)}if(i!==0){let o=i%32768;e.setGenerator(I.endloopAddrsOffset,o);let g=Math.trunc(i/32768);g!==0&&e.setGenerator(I.endloopAddrsCoarseOffset,g)}}}write(){let e=new j(RA+this.loops.length*bA);te(e,RA),X(e,this.unityNote),X(e,this.fineTune),te(e,this.gain),te(e,this.fulOptions),te(e,this.loops.length);for(let t of this.loops)te(e,bA),te(e,t.loopType),te(e,t.loopStart),te(e,t.loopLength);return N.write("wsmp",e)}},Et={PCM:1,ALAW:6};function Wn(A,e){let t=Math.pow(2,e*8-1),s=Math.pow(2,e*8),n,a=!1;e===1?(n=255,a=!0):n=t;let r=A.length/e,i=new Float32Array(r);if(e===2){let o=new Int16Array(A.buffer),g=o.length;for(let l=0;l<g;l++)i[l]=o[l]/32768}else for(let o=0;o<i.length;o++){let g=q(A,e);a?i[o]=g/n-.5:(g>=t&&(g-=s),i[o]=g/n)}return i}function jn(A,e){let t=A.length/e,s=new Float32Array(t);for(let n=0;n<s.length;n++){let a=q(A,e),r=a^85;r&=127;let i=r>>4,o=r&15;i>0&&(o+=16),o=(o<<4)+8,i>1&&(o=o<<i-1),s[n]=(a>127?o:-o)/32768}return s}var Zn=class extends $A{wFormatTag;bytesPerSample;rawData;constructor(A,e,t,s,n,a,r,i,o){super(A,e,t,s,Qe.monoSample,n,a),this.dataOverridden=!1,this.rawData=r.data,this.wFormatTag=i,this.bytesPerSample=o}getAudioData(){if(!this.rawData)return new Float32Array(0);if(!this.audioData){let A;switch(this.wFormatTag){default:c.warn(`Failed to decode sample. Unknown wFormatTag: ${this.wFormatTag}`),A=new Float32Array(this.rawData.length/this.bytesPerSample);break;case Et.PCM:A=Wn(this.rawData,this.bytesPerSample);break;case Et.ALAW:A=jn(this.rawData,this.bytesPerSample);break}this.setAudioData(A,this.sampleRate)}return this.audioData??new Float32Array(0)}getRawData(A){return this.dataOverridden||this.isCompressed?super.getRawData(A):this.wFormatTag===Et.PCM&&this.bytesPerSample===2?this.rawData:this.encodeS16LE()}},Qs=class Pt extends lA{waveSample=new IA;wFormatTag;bytesPerSample;sampleRate;dataChunk;name="Unnamed sample";constructor(e,t,s,n){super(),this.wFormatTag=e,this.bytesPerSample=t,this.sampleRate=s,this.dataChunk=n}static read(e){let t=this.verifyAndReadList(e,"wave"),s=t.find(h=>h.header==="fmt ");if(!s)throw new Error("No fmt chunk in the wave file!");let n=q(s.data,2),a=q(s.data,2);if(a!==1)throw new Error(`Only mono samples are supported. Fmt reports ${a} channels.`);let r=q(s.data,4);q(s.data,4),q(s.data,2);let i=q(s.data,2)/8,o=t.find(h=>h.header==="data");if(!o)throw new Error("No data chunk in the WAVE chunk!");let g=new Pt(n,i,r,o),l=N.findListType(t,"INFO");if(l){let h=N.read(l.data);for(;h.header!=="INAM"&&l.data.currentIndex<l.data.length;)h=N.read(l.data);h.header==="INAM"&&(g.name=re(h.data,h.size).trim())}let C=t.find(h=>h.header==="wsmp");return C&&(g.waveSample=IA.read(C)),g}static fromSFSample(e){let t=e.getRawData(!1),s=new Pt(1,2,e.sampleRate,new N("data",t.length,new j(t.buffer)));return s.name=e.name,s.waveSample=IA.fromSFSample(e),s}toSFSample(e){let t=this.waveSample.unityNote,s=this.waveSample.fineTune,n=Math.trunc(s/100);t+=n,s-=n*100;let a=0,r=0,i=this.waveSample.loops?.[0];i&&(a=i.loopStart,r=i.loopStart+i.loopLength);let o=new Zn(this.name,this.sampleRate,t,s,a,r,this.dataChunk,this.wFormatTag,this.bytesPerSample);e.addSamples(o)}write(){let e=this.writeFmt(),t=this.waveSample.write(),s=N.getParts("data",[this.dataChunk.data]),n=N.write("INAM",Pe(this.name,!0)),a=N.write("INFO",n,!1,!0);return c.info(`%cSaved %c${this.name}%c successfully!`,E.recognized,E.value,E.recognized),N.getParts("wave",[e,t,...s,a],!1,!0)}writeFmt(){let e=new j(18);return X(e,this.wFormatTag),X(e,1),te(e,this.sampleRate),te(e,this.sampleRate*2),X(e,2),X(e,this.bytesPerSample*8),N.write("fmt ",e)}},Me=class Nt{source;transform;bipolar;invert;constructor(e=Y.none,t=ne.linear,s=!1,n=!1){this.source=e,this.transform=t,this.bipolar=s,this.invert=n}get sourceName(){return Object.keys(Y).find(e=>Y[e]===this.source)??this.source.toString()}get transformName(){return Object.keys(ne).find(e=>ne[e]===this.transform)??this.transform.toString()}static copyFrom(e){return new Nt(e.source,e.transform,e.bipolar,e.invert)}static fromSFSource(e){let t;if(e.isCC)switch(e.index){case Q.modulationWheel:t=Y.modulationWheel;break;case Q.mainVolume:t=Y.volume;break;case Q.pan:t=Y.pan;break;case Q.expression:t=Y.expression;break;case Q.chorusDepth:t=Y.chorus;break;case Q.reverbDepth:t=Y.reverb;break}else switch(e.index){case se.noController:t=Y.none;break;case se.noteOnKeyNum:t=Y.keyNum;break;case se.noteOnVelocity:t=Y.velocity;break;case se.pitchWheel:t=Y.pitchWheel;break;case se.pitchWheelRange:t=Y.pitchWheelRange;break;case se.polyPressure:t=Y.polyPressure;break;case se.channelPressure:t=Y.channelPressure}if(t!==void 0)return new Nt(t,e.curveType,e.isBipolar,e.isNegative)}toString(){return`${this.sourceName} ${this.transformName} ${this.bipolar?"bipolar":"unipolar"} ${this.invert?"inverted":"positive"}`}toTransformFlag(){return this.transform|(this.bipolar?1:0)<<4|(this.invert?1:0)<<5}toSFSource(){let e,t=!1;switch(this.source){default:case Y.modLfo:case Y.vibratoLfo:case Y.coarseTune:case Y.fineTune:case Y.modEnv:return;case Y.keyNum:e=se.noteOnKeyNum;break;case Y.none:e=se.noController;break;case Y.modulationWheel:e=Q.modulationWheel,t=!0;break;case Y.pan:e=Q.pan,t=!0;break;case Y.reverb:e=Q.reverbDepth,t=!0;break;case Y.chorus:e=Q.chorusDepth,t=!0;break;case Y.expression:e=Q.expression,t=!0;break;case Y.volume:e=Q.mainVolume,t=!0;break;case Y.velocity:e=se.noteOnVelocity;break;case Y.polyPressure:e=se.polyPressure;break;case Y.channelPressure:e=se.channelPressure;break;case Y.pitchWheel:e=se.pitchWheel;break;case Y.pitchWheelRange:e=se.pitchWheelRange;break}if(e!==void 0)return new Ge(e,this.transform,t,this.bipolar,this.invert)}},aa=new le(219,0,I.reverbEffectsSend,1e3,0),na=new le(221,0,I.chorusEffectsSend,1e3,0);new le(129,0,I.vibLfoToPitch,0,0);new le(13,0,I.vibLfoToPitch,0,0);var Xn=new Set([I.sampleModes,I.initialAttenuation,I.keyRange,I.velRange,I.sampleID,I.fineTune,I.coarseTune,I.startAddrsOffset,I.startAddrsCoarseOffset,I.endAddrOffset,I.endAddrsCoarseOffset,I.startloopAddrsOffset,I.startloopAddrsCoarseOffset,I.endloopAddrsOffset,I.endloopAddrsCoarseOffset,I.overridingRootKey,I.exclusiveClass]),nA=class Ve{source;control;destination;scale;transform;constructor(e=new Me,t=new Me,s,n,a){this.source=e,this.control=t,this.destination=s,this.transform=n,this.scale=a}get isStaticParameter(){return this.source.source===Y.none&&this.control.source===Y.none}get shortScale(){return this.scale>>16}get transformName(){return Object.keys(ne).find(e=>ne[e]===this.transform)??this.transform.toString()}get destinationName(){return Object.keys(F).find(e=>F[e]===this.destination)??this.destination.toString()}static read(e){let t=q(e,2),s=q(e,2),n=q(e,2),a=q(e,2),r=q(e,4)|0,i=a&15,o=new Me(s,a>>4&15,je(a,8),je(a,9));return new Ve(new Me(t,a>>10&15,je(a,14),je(a,15)),o,n,i,r)}static fromSFModulator(e,t){let s=l=>{c.warn(`Failed converting SF modulator into DLS:
|
|
6
6
|
${e.toString()}
|
|
7
|
-
(${
|
|
7
|
+
(${l})`)};if(e.transformType!==0){s("Absolute transform type is not supported");return}if(Be.isIdentical(e,na,!0)||Be.isIdentical(e,aa,!0))return;let n=Me.fromSFSource(e.primarySource);if(!n){s("Invalid primary source");return}let a=Me.fromSFSource(e.secondarySource);if(!a){s("Invalid secondary source");return}let r=Ve.fromSFDestination(e.destination,e.transformAmount);if(r===void 0){s("Invalid destination");return}let i=e.transformAmount,o;if(typeof r=="number")o=r;else if(o=r.destination,i=r.amount,r.source!==Y.none){if(a.source!==Y.none&&n.source!==Y.none){s("Articulation generators with secondary source are not supported");return}n.source!==Y.none&&(a=n),n=new Me(r.source,ne.linear,r.isBipolar)}let g=new Ve(n,a,o,0,i<<16);t.connectionBlocks.push(g)}static copyFrom(e){return new Ve(Me.copyFrom(e.source),Me.copyFrom(e.control),e.destination,e.transform,e.scale)}static fromSFGenerator(e,t){if(Xn.has(e.type))return;let s=o=>{c.warn(`Failed converting SF2 generator into DLS:
|
|
8
8
|
${e.toString()}
|
|
9
|
-
(${o})`)},n=Ve.fromSFDestination(e.type,e.value);if(n===void 0){s("Invalid type");return}let a=new Me,i
|
|
9
|
+
(${o})`)},n=Ve.fromSFDestination(e.type,e.value);if(n===void 0){s("Invalid type");return}let a=new Me,r,i=e.value;typeof n=="number"?r=n:(r=n.destination,i=n.amount,a.source=n.source,a.bipolar=n.isBipolar),t.connectionBlocks.push(new Ve(a,new Me,r,0,i<<16))}static fromSFDestination(e,t){switch(e){default:return;case I.initialAttenuation:return{destination:F.gain,amount:-t,isBipolar:!1,source:Y.none};case I.fineTune:return F.pitch;case I.pan:return F.pan;case I.keyNum:return F.keyNum;case I.reverbEffectsSend:return F.reverbSend;case I.chorusEffectsSend:return F.chorusSend;case I.freqModLFO:return F.modLfoFreq;case I.delayModLFO:return F.modLfoDelay;case I.delayVibLFO:return F.vibLfoDelay;case I.freqVibLFO:return F.vibLfoFreq;case I.delayVolEnv:return F.volEnvDelay;case I.attackVolEnv:return F.volEnvAttack;case I.holdVolEnv:return F.volEnvHold;case I.decayVolEnv:return F.volEnvDecay;case I.sustainVolEnv:return{destination:F.volEnvSustain,amount:1e3-t,isBipolar:!1,source:Y.none};case I.releaseVolEnv:return F.volEnvRelease;case I.delayModEnv:return F.modEnvDelay;case I.attackModEnv:return F.modEnvAttack;case I.holdModEnv:return F.modEnvHold;case I.decayModEnv:return F.modEnvDecay;case I.sustainModEnv:return{destination:F.modEnvSustain,amount:1e3-t,isBipolar:!1,source:Y.none};case I.releaseModEnv:return F.modEnvRelease;case I.initialFilterFc:return F.filterCutoff;case I.initialFilterQ:return F.filterQ;case I.modEnvToFilterFc:return{source:Y.modEnv,destination:F.filterCutoff,amount:t,isBipolar:!1};case I.modEnvToPitch:return{source:Y.modEnv,destination:F.pitch,amount:t,isBipolar:!1};case I.modLfoToFilterFc:return{source:Y.modLfo,destination:F.filterCutoff,amount:t,isBipolar:!0};case I.modLfoToVolume:return{source:Y.modLfo,destination:F.gain,amount:t,isBipolar:!0};case I.modLfoToPitch:return{source:Y.modLfo,destination:F.pitch,amount:t,isBipolar:!0};case I.vibLfoToPitch:return{source:Y.vibratoLfo,destination:F.pitch,amount:t,isBipolar:!0};case I.keyNumToVolEnvHold:return{source:Y.keyNum,destination:F.volEnvHold,amount:t,isBipolar:!0};case I.keyNumToVolEnvDecay:return{source:Y.keyNum,destination:F.volEnvDecay,amount:t,isBipolar:!0};case I.keyNumToModEnvHold:return{source:Y.keyNum,destination:F.modEnvHold,amount:t,isBipolar:!0};case I.keyNumToModEnvDecay:return{source:Y.keyNum,destination:F.modEnvDecay,amount:t,isBipolar:!0};case I.scaleTuning:return{source:Y.keyNum,destination:F.pitch,amount:t*128,isBipolar:!1}}}toString(){return`Source: ${this.source.toString()},
|
|
10
10
|
Control: ${this.control.toString()},
|
|
11
11
|
Scale: ${this.scale} >> 16 = ${this.shortScale},
|
|
12
12
|
Output transform: ${this.transformName}
|
|
13
13
|
Destination: ${this.destinationName}`}write(){let e=new j(12);return X(e,this.source.source),X(e,this.control.source),X(e,this.destination),X(e,this.transform|this.control.toTransformFlag()<<4|this.source.toTransformFlag()<<10),te(e,this.scale),e}toSFGenerator(e){let t=this.destination,s=this.shortScale;switch(t){default:c.info(`%cFailed converting DLS articulator into SF generator: %c${this.toString()}%c
|
|
14
|
-
(invalid destination)`,E.warn,E.value,E.unrecognized);return;case F.keyNum:e.setGenerator(I.keyNum,s);break;case F.pan:e.setGenerator(I.pan,s);break;case F.gain:e.addToGenerator(I.initialAttenuation,-s/.4);break;case F.filterCutoff:e.setGenerator(I.initialFilterFc,s);break;case F.filterQ:e.setGenerator(I.initialFilterQ,s);break;case F.modLfoFreq:e.setGenerator(I.freqModLFO,s);break;case F.modLfoDelay:e.setGenerator(I.delayModLFO,s);break;case F.vibLfoFreq:e.setGenerator(I.freqVibLFO,s);break;case F.vibLfoDelay:e.setGenerator(I.delayVibLFO,s);break;case F.volEnvDelay:e.setGenerator(I.delayVolEnv,s);break;case F.volEnvAttack:e.setGenerator(I.attackVolEnv,s);break;case F.volEnvHold:e.setGenerator(I.holdVolEnv,s);break;case F.volEnvDecay:e.setGenerator(I.decayVolEnv,s);break;case F.volEnvRelease:e.setGenerator(I.releaseVolEnv,s);break;case F.volEnvSustain:e.setGenerator(I.sustainVolEnv,1e3-s);break;case F.modEnvDelay:e.setGenerator(I.delayModEnv,s);break;case F.modEnvAttack:e.setGenerator(I.attackModEnv,s);break;case F.modEnvHold:e.setGenerator(I.holdModEnv,s);break;case F.modEnvDecay:e.setGenerator(I.decayModEnv,s);break;case F.modEnvRelease:e.setGenerator(I.releaseModEnv,s);break;case F.modEnvSustain:e.setGenerator(I.sustainModEnv,1e3-s);break;case F.reverbSend:e.setGenerator(I.reverbEffectsSend,s);break;case F.chorusSend:e.setGenerator(I.chorusEffectsSend,s);break;case F.pitch:e.fineTuning+=s;break}}toSFModulator(e){let t=this.shortScale,s,n,a=new Ge,
|
|
14
|
+
(invalid destination)`,E.warn,E.value,E.unrecognized);return;case F.keyNum:e.setGenerator(I.keyNum,s);break;case F.pan:e.setGenerator(I.pan,s);break;case F.gain:e.addToGenerator(I.initialAttenuation,-s/.4);break;case F.filterCutoff:e.setGenerator(I.initialFilterFc,s);break;case F.filterQ:e.setGenerator(I.initialFilterQ,s);break;case F.modLfoFreq:e.setGenerator(I.freqModLFO,s);break;case F.modLfoDelay:e.setGenerator(I.delayModLFO,s);break;case F.vibLfoFreq:e.setGenerator(I.freqVibLFO,s);break;case F.vibLfoDelay:e.setGenerator(I.delayVibLFO,s);break;case F.volEnvDelay:e.setGenerator(I.delayVolEnv,s);break;case F.volEnvAttack:e.setGenerator(I.attackVolEnv,s);break;case F.volEnvHold:e.setGenerator(I.holdVolEnv,s);break;case F.volEnvDecay:e.setGenerator(I.decayVolEnv,s);break;case F.volEnvRelease:e.setGenerator(I.releaseVolEnv,s);break;case F.volEnvSustain:e.setGenerator(I.sustainVolEnv,1e3-s);break;case F.modEnvDelay:e.setGenerator(I.delayModEnv,s);break;case F.modEnvAttack:e.setGenerator(I.attackModEnv,s);break;case F.modEnvHold:e.setGenerator(I.holdModEnv,s);break;case F.modEnvDecay:e.setGenerator(I.decayModEnv,s);break;case F.modEnvRelease:e.setGenerator(I.releaseModEnv,s);break;case F.modEnvSustain:e.setGenerator(I.sustainModEnv,1e3-s);break;case F.reverbSend:e.setGenerator(I.reverbEffectsSend,s);break;case F.chorusSend:e.setGenerator(I.chorusEffectsSend,s);break;case F.pitch:e.fineTuning+=s;break}}toSFModulator(e){let t=this.shortScale,s,n,a=new Ge,r=this.toCombinedSFDestination();if(r){s=r;let o=this.control.toSFSource();if(!o){this.failedConversion("Invalid control");return}n=o}else{let o=this.toSFDestination();if(!o){this.failedConversion("Invalid destination");return}typeof o=="object"?(t=o.newAmount,s=o.gen):s=o;let g=this.source.toSFSource();if(!g){this.failedConversion("Invalid source");return}n=g;let l=this.control.toSFSource();if(!l){this.failedConversion("Invalid control");return}a=l}this.transform!==ne.linear&&n.curveType===ne.linear&&(n.curveType=this.transform),s===I.initialAttenuation&&((this.source.source===Y.velocity||this.source.source===Y.volume||this.source.source===Y.expression)&&(n.isNegative=!0),t=Math.min(960,Math.max(0,t)));let i=new Be(n,a,s,t,0);e.addModulators(i)}toCombinedSFDestination(){let e=this.source.source,t=this.destination;return e===Y.vibratoLfo&&t===F.pitch?I.vibLfoToPitch:e===Y.modLfo&&t===F.pitch?I.modLfoToPitch:e===Y.modLfo&&t===F.filterCutoff?I.modLfoToFilterFc:e===Y.modLfo&&t===F.gain?I.modLfoToVolume:e===Y.modEnv&&t===F.filterCutoff?I.modEnvToFilterFc:e===Y.modEnv&&t===F.pitch?I.modEnvToPitch:void 0}failedConversion(e){c.info(`%cFailed converting DLS articulator into SF2:
|
|
15
15
|
%c${this.toString()}%c
|
|
16
|
-
(${e})`,E.warn,E.value,E.unrecognized)}toSFDestination(){let e=this.shortScale;switch(this.destination){default:case F.none:return;case F.pan:return I.pan;case F.gain:return{gen:I.initialAttenuation,newAmount:-e};case F.pitch:return I.fineTune;case F.keyNum:return I.keyNum;case F.volEnvDelay:return I.delayVolEnv;case F.volEnvAttack:return I.attackVolEnv;case F.volEnvHold:return I.holdVolEnv;case F.volEnvDecay:return I.decayVolEnv;case F.volEnvSustain:return{gen:I.sustainVolEnv,newAmount:1e3-e};case F.volEnvRelease:return I.releaseVolEnv;case F.modEnvDelay:return I.delayModEnv;case F.modEnvAttack:return I.attackModEnv;case F.modEnvHold:return I.holdModEnv;case F.modEnvDecay:return I.decayModEnv;case F.modEnvSustain:return{gen:I.sustainModEnv,newAmount:1e3-e};case F.modEnvRelease:return I.releaseModEnv;case F.filterCutoff:return I.initialFilterFc;case F.filterQ:return I.initialFilterQ;case F.chorusSend:return I.chorusEffectsSend;case F.reverbSend:return I.reverbEffectsSend;case F.modLfoFreq:return I.freqModLFO;case F.modLfoDelay:return I.delayModLFO;case F.vibLfoFreq:return I.freqVibLFO;case F.vibLfoDelay:return I.delayVibLFO}}},ia=class extends CA{connectionBlocks=new Array;mode="dls2";get length(){return this.connectionBlocks.length}copyFrom(A){this.mode=A.mode;for(let e of A.connectionBlocks)this.connectionBlocks.push(nA.copyFrom(e))}fromSFZone(A){this.mode="dls2";let e=new DA;e.copyFrom(A);for(let t of e.generators){let s;switch(t.type){default:continue;case I.keyNumToVolEnvDecay:s=I.decayVolEnv;break;case I.keyNumToVolEnvHold:s=I.holdVolEnv;break;case I.keyNumToModEnvDecay:s=I.decayModEnv;break;case I.keyNumToModEnvHold:s=I.holdModEnv}let n=e.getGenerator(s,void 0),a=t.value*-128;if(n===void 0)continue;let i=n-60/128*a;e.setGenerator(t.type,a,!1),e.setGenerator(s,i,!1)}for(let t of e.generators)nA.fromSFGenerator(t,this);for(let t of e.modulators)nA.fromSFModulator(t,this)}read(A){let e=N.findListType(A,"lart"),t=N.findListType(A,"lar2");if(e)for(this.mode="dls1";e.data.currentIndex<e.data.length;){let s=N.read(e.data);if(s.header!=="art1"&&s.header!=="art2")continue;let n=s.data,a=q(n,4);a!==8&&c.warn(`CbSize in articulation mismatch. Expected 8, got ${a}`);let i=q(n,4);for(let r=0;r<i;r++)this.connectionBlocks.push(nA.read(n))}else if(t)for(this.mode="dls2";t.data.currentIndex<t.data.length;){let s=N.read(t.data);if(s.header!=="art1"&&s.header!=="art2")continue;let n=s.data,a=q(n,4);a!==8&&c.warn(`CbSize in articulation mismatch. Expected 8, got ${a}`);let i=q(n,4);for(let r=0;r<i;r++)this.connectionBlocks.push(nA.read(n))}}write(){let A=new j(8);te(A,8),te(A,this.connectionBlocks.length);let e=this.connectionBlocks.map(s=>s.write()),t=N.getParts(this.mode==="dls2"?"art2":"art1",[A,...e]);return N.getParts(this.mode==="dls2"?"lar2":"lart",t,!1,!0)}toSFZone(A){let e=(t,s,n,a)=>{let i=t/-128;if(A.setGenerator(s,i),i<=120){let r=Math.round(.46875*t),o=this.connectionBlocks.find(g=>g.isStaticParameter&&g.destination===a);o&&A.setGenerator(n,r+o.shortScale)}};for(let t of this.connectionBlocks){let s=t.shortScale,n=t.source.source,a=t.control.source,i=t.destination;if(t.isStaticParameter){t.toSFGenerator(A);continue}if(a===Y.none)if(n===Y.keyNum){if(i===F.pitch){A.setGenerator(I.scaleTuning,s/128);continue}if(i===F.modEnvHold||i===F.modEnvDecay||i===F.volEnvHold||i===F.volEnvDecay)continue}else{let r=t.toCombinedSFDestination();if(r){A.setGenerator(r,s);continue}}t.toSFModulator(A)}for(let t of this.connectionBlocks){if(t.source.source!==Y.keyNum)continue;let s=t.shortScale;switch(t.destination){default:case F.volEnvHold:e(s,I.keyNumToVolEnvHold,I.holdVolEnv,F.volEnvHold);break;case F.volEnvDecay:e(s,I.keyNumToVolEnvDecay,I.decayVolEnv,F.volEnvDecay);break;case F.modEnvHold:e(s,I.keyNumToModEnvHold,I.holdModEnv,F.modEnvHold);break;case F.modEnvDecay:e(s,I.keyNumToModEnvDecay,I.decayModEnv,F.modEnvDecay);break}}if(this.mode==="dls1"){A.setGenerator(I.delayVibLFO,A.getGenerator(I.delayModLFO,null)),A.setGenerator(I.freqVibLFO,A.getGenerator(I.freqModLFO,null)),A.setGenerator(I.vibLfoToPitch,A.getGenerator(I.modLfoToPitch,null)),A.setGenerator(I.modLfoToPitch,null);for(let t of A.modulators)t.destination===I.modLfoToPitch&&(t.destination=I.vibLfoToPitch)}}},Qt=class TA{channel=1;tableIndex;fusOptions=0;phaseGroup=0;constructor(e){this.tableIndex=e}static copyFrom(e){let t=new TA(e.tableIndex);return t.channel=e.channel,t.phaseGroup=e.phaseGroup,t.fusOptions=e.fusOptions,t}static read(e){let t=q(e.data,2),s=q(e.data,2),n=q(e.data,4),a=new TA(q(e.data,4));return a.channel=n,a.fusOptions=t,a.phaseGroup=s,a}static fromSFZone(e,t){let s=e.indexOf(t.sample);if(s===-1)throw new Error(`Wave link error: Sample ${t.sample.name} does not exist in the sample list.`);let n=new TA(s);switch(t.sample.sampleType){default:case Qe.leftSample:case Qe.monoSample:n.channel=Math.trunc(1);break;case Qe.rightSample:n.channel=2}return n}write(){let e=new j(12);return X(e,this.fusOptions),X(e,this.phaseGroup),te(e,this.channel),te(e,this.tableIndex),N.write("wlnk",e)}},xA=class iA extends CA{articulation=new ia;keyRange={min:0,max:127};velRange={min:0,max:127};keyGroup=0;fusOptions=0;usLayer=0;waveSample;waveLink;constructor(e,t){super(),this.waveSample=t,this.waveLink=e}static copyFrom(e){let t=new iA(Qt.copyFrom(e.waveLink),IA.copyFrom(e.waveSample));return t.keyGroup=e.keyGroup,t.keyRange={...e.keyRange},t.velRange={...e.velRange},t.usLayer=e.usLayer,t.fusOptions=e.fusOptions,t.articulation.copyFrom(e.articulation),t}static read(e,t){let s=this.verifyAndReadList(t,"rgn ","rgn2"),n=s.find(m=>m.header==="wsmp"),a=n?IA.read(n):void 0,i=s.find(m=>m.header==="wlnk");if(!i){c.warn("Invalid DLS region: missing 'wlnk' chunk! Discarding...");return}let r=Qt.read(i),o=s.find(m=>m.header==="rgnh");if(!o){c.warn("Invalid DLS region: missing 'rgnh' chunk! Discarding...");return}let g=e[r.tableIndex];g||iA.parsingError(`Invalid sample index: ${r.tableIndex}. Samples available: ${e.length}`),a??=g.waveSample;let C=new iA(r,a),l=q(o.data,2),h=q(o.data,2),d=q(o.data,2),B=q(o.data,2);return d===0&&B===0&&(B=127,d=0),C.keyRange.max=h,C.keyRange.min=l,C.velRange.max=B,C.velRange.min=d,C.fusOptions=q(o.data,2),C.keyGroup=q(o.data,2),o.data.length-o.data.currentIndex>=2&&(C.usLayer=q(o.data,2)),C.articulation.read(s),C}static fromSFZone(e,t){let s=IA.fromSFZone(e),n=new iA(Qt.fromSFZone(t,e),s);return n.keyRange.min=Math.max(e.keyRange.min,0),n.keyRange.max=e.keyRange.max,n.velRange.min=Math.max(e.velRange.min,0),n.velRange.max=e.velRange.max,n.keyGroup=e.getGenerator(I.exclusiveClass,0),n.articulation.fromSFZone(e),n}write(){let e=[this.writeHeader(),this.waveSample.write(),this.waveLink.write(),...this.articulation.write()];return N.getParts("rgn2",e,!1,!0)}toSFZone(e,t){let s=t[this.waveLink.tableIndex];s||iA.parsingError(`Invalid sample index: ${this.waveLink.tableIndex}`);let n=e.createZone(s);return n.keyRange=this.keyRange,n.velRange=this.velRange,this.keyRange.max===127&&this.keyRange.min===0&&(n.keyRange.min=-1),this.velRange.max===127&&this.velRange.min===0&&(n.velRange.min=-1),this.keyGroup!==0&&n.setGenerator(I.exclusiveClass,this.keyGroup),this.waveSample.toSFZone(n,s),this.articulation.toSFZone(n),n.generators=n.generators.filter(a=>a.value!==Fe[a.type].def),n}writeHeader(){let e=new j(14);return X(e,Math.max(this.keyRange.min,0)),X(e,this.keyRange.max),X(e,Math.max(this.velRange.min,0)),X(e,this.velRange.max),X(e,this.fusOptions),X(e,this.keyGroup),X(e,this.usLayer),N.write("rgnh",e)}},ft=class KA extends CA{articulation=new ia;regions=new Array;name="Unnamed";bankLSB=0;bankMSB=0;isGMGSDrum=!1;program=0;static copyFrom(e){let t=new KA;t.name=e.name,t.isGMGSDrum=e.isGMGSDrum,t.bankMSB=e.bankMSB,t.bankLSB=e.bankLSB,t.program=e.program,t.articulation.copyFrom(e.articulation);for(let s of e.regions)t.regions.push(xA.copyFrom(s));return t}static read(e,t){let s=this.verifyAndReadList(t,"ins "),n=s.find(l=>l.header==="insh");if(!n)throw c.groupEnd(),new Error("No instrument header!");let a="",i=N.findListType(s,"INFO");if(i){let l=N.read(i.data);for(;l.header!=="INAM";)l=N.read(i.data);a=ie(l.data,l.data.length).trim()}a.length===0&&(a="Unnamed Instrument");let r=new KA;r.name=a;let o=q(n.data,4),g=q(n.data,4);r.program=q(n.data,4)&127,r.bankMSB=g>>>8&127,r.bankLSB=g&127,r.isGMGSDrum=g>>>31>0,c.groupCollapsed(`%cParsing %c"${a}"%c...`,E.info,E.recognized,E.info);let C=N.findListType(s,"lrgn");if(!C)throw c.groupEnd(),new Error("No region list!");r.articulation.read(s);for(let l=0;l<o;l++){let h=N.read(C.data);this.verifyHeader(h,"LIST");let d=ie(h.data,4);d!=="rgn "&&d!=="rgn2"&&(c.groupEnd(),this.parsingError(`Invalid DLS region! Expected "rgn " or "rgn2" got "${d}"`));let B=xA.read(e,h);B&&r.regions.push(B)}return c.groupEnd(),r}static fromSFPreset(e,t){let s=new KA;s.name=e.name,s.bankLSB=e.bankLSB,s.bankMSB=e.bankMSB,s.program=e.program,s.isGMGSDrum=e.isGMGSDrum,c.group(`%cConverting %c${e.toString()}%c to DLS...`,E.info,E.value,E.info);let n=e.toFlattenedInstrument();for(let a of n.zones)s.regions.push(xA.fromSFZone(a,t));return c.groupEnd(),s}write(){c.groupCollapsed(`%cWriting %c${this.name}%c...`,E.info,E.recognized,E.info);let e=[this.writeHeader()],t=this.regions.flatMap(n=>n.write());e.push(...N.getParts("lrgn",t,!1,!0)),this.articulation.length>0&&e.push(...this.articulation.write());let s=N.write("INAM",Pe(this.name,!0));return e.push(N.write("INFO",s,!1,!0)),c.groupEnd(),N.writeParts("ins ",e,!1,!0)}toSFPreset(e){let t=new uA(e);t.name=this.name,t.bankMSB=this.bankMSB,t.bankLSB=this.bankLSB,t.isGMGSDrum=this.isGMGSDrum,t.program=this.program;let s=new mA;s.name=this.name,t.createZone(s),this.articulation.toSFZone(s.globalZone);for(let n of this.regions)n.toSFZone(s,e.samples);s.globalize(),s.globalZone.modulators.some(n=>n.destination===I.reverbEffectsSend)||s.globalZone.addModulators(Be.copyFrom(aa)),s.globalZone.modulators.some(n=>n.destination===I.chorusEffectsSend)||s.globalZone.addModulators(Be.copyFrom(na)),s.globalZone.generators=s.globalZone.generators.filter(n=>n.value!==Fe[n.type].def),e.addPresets(t),e.addInstruments(s)}writeHeader(){let e=new j(12);te(e,this.regions.length);let t=(this.bankMSB&127)<<8|this.bankLSB&127;return this.isGMGSDrum&&(t|=1<<31),te(e,t),te(e,this.program&127),N.write("insh",e)}},Gt={software:"SpessaSynth"},ra=class Tt extends CA{samples=new Array;instruments=new Array;soundBankInfo={name:"Unnamed DLS sound bank",creationDate:new Date,software:"SpessaSynth",soundEngine:"DLS Level 2.2",product:"SpessaSynth DLS",version:{major:2,minor:4}};static read(e){if(!e)throw new Error("No data provided!");let t=new j(e);c.group("%cParsing DLS file...",E.info);let s=N.read(t,!1,!1);this.verifyHeader(s,"RIFF"),this.verifyText(ie(t,4).toLowerCase(),"dls ");let n=[];for(;t.currentIndex<t.length;)n.push(N.read(t));let a=new Tt,i=N.findListType(n,"INFO");if(i)for(;i.data.currentIndex<i.data.length;){let B=N.read(i.data),m=B.header,u=ie(B.data,B.size);switch(m){case"INAM":a.soundBankInfo.name=u;break;case"ICRD":a.soundBankInfo.creationDate=Ht(u);break;case"ICMT":a.soundBankInfo.comment=u;break;case"ISBJ":a.soundBankInfo.subject=u;break;case"ICOP":a.soundBankInfo.copyright=u;break;case"IENG":a.soundBankInfo.engineer=u;break;case"IPRD":a.soundBankInfo.product=u;break;case"ISFT":a.soundBankInfo.software=u}}this.printInfo(a);let r=n.find(B=>B.header==="colh");if(!r)return this.parsingError("No colh chunk!"),5;let o=q(r.data,4);c.info(`%cInstruments amount: %c${o}`,E.info,E.recognized);let g=N.findListType(n,"wvpl");if(!g)return this.parsingError("No wvpl chunk!"),5;let C=this.verifyAndReadList(g,"wvpl");for(let B of C)a.samples.push(Qs.read(B));let l=N.findListType(n,"lins");if(!l)return this.parsingError("No lins chunk!"),5;let h=this.verifyAndReadList(l,"lins");c.groupCollapsed("%cLoading instruments...",E.info),h.length!==o&&c.warn(`Colh reported invalid amount of instruments. Detected ${h.length}, expected ${o}`);for(let B of h)a.instruments.push(ft.read(a.samples,B));c.groupEnd();let d=n.find(B=>B.header==="pgal");if(d){c.info("%cFound the instrument aliasing chunk!",E.recognized);let B=d.data;(B[0]!==0||B[1]!==1||B[2]!==2||B[3]!==3)&&(B.currentIndex+=4);let m=a.instruments.find(w=>he.isXGDrum(w.bankMSB)||w.isGMGSDrum);if(!m)return c.warn("MobileBAE aliasing chunk without a drum preset. Aborting!"),a;let u=B.slice(B.currentIndex,B.currentIndex+128);B.currentIndex+=128;for(let w=0;w<128;w++){let L=u[w];if(L===w)continue;let k=m.regions.find(x=>x.keyRange.max===L&&x.keyRange.min===L);if(!k){c.warn(`Invalid drum alias ${w} to ${L}: region does not exist.`);continue}let S=xA.copyFrom(k);S.keyRange.max=w,S.keyRange.min=w;let v=new nA(new Me(Y.none,0,!1,!1),new Me(Y.none,0,!1,!1),F.keyNum,0,L<<16);S.articulation.connectionBlocks.push(v),m.regions.push(S)}for(B.currentIndex+=4;B.currentIndex<B.length;){let w=q(B,2),L=w&127,k=w>>7&127,S=B[B.currentIndex++],v=B[B.currentIndex++];v!==0&&c.warn(`Invalid alias byte. Expected 0, got ${v}`);let x=q(B,2),y=x&127,p=x>>7&127,D=B[B.currentIndex++];v=B[B.currentIndex++],v!==0&&c.warn(`Invalid alias header. Expected 0, got ${v}`);let U=a.instruments.find(K=>K.bankLSB===y&&K.bankMSB===p&&K.program===D&&!K.isGMGSDrum);if(!U){c.warn(`Invalid alias. Missing instrument: ${y}:${p}:${D}`);continue}let T=ft.copyFrom(U);T.bankMSB=k,T.bankLSB=L,T.program=S,a.instruments.push(T)}}return c.info(`%cParsing finished! %c"${a.soundBankInfo.name||"UNNAMED"}"%c has %c${a.instruments.length}%c instruments and %c${a.samples.length}%c samples.`,E.info,E.recognized,E.info,E.recognized,E.info,E.recognized,E.info),c.groupEnd(),a}static fromSF(e,t){c.groupCollapsed("%cSaving SF2 to DLS level 2...",E.info);let s=new Tt;s.soundBankInfo={...e.soundBankInfo};for(let n=0;n<e.samples.length;n++){let a=e.samples[n];s.samples.push(Qs.fromSFSample(a)),t?.(n/e.samples.length)}for(let n of e.presets)s.instruments.push(ft.fromSFPreset(n,e.samples));return c.info("%cConversion complete!",E.recognized),c.groupEnd(),s}static printInfo(e){for(let[t,s]of Object.entries(e.soundBankInfo))if(typeof s=="object"&&"major"in s){let n=s;c.info(`%c${t}: %c"${n.major}.${n.minor}"`,E.info,E.recognized)}else c.info(`%c${t}: %c${s.toLocaleString()}`,E.info,E.recognized)}write(e=Gt){let t=pA(e,Gt);c.groupCollapsed("%cSaving DLS...",E.info);let s=new j(4);te(s,this.instruments.length);let n=N.write("colh",s);c.groupCollapsed("%cWriting instruments...",E.info);let a=N.getParts("lins",this.instruments.map(w=>w.write()),!1,!0);c.info("%cSuccess!",E.recognized),c.groupEnd(),c.groupCollapsed("%cWriting WAVE samples...",E.info);let i=0,r=[],o=[],g=0;for(let w of this.samples){let L=w.write();t.progressFunction?.(g/this.samples.length),c.info(`%cWrote sample %c${g}. ${w.name}%c of %c${this.samples.length}.`,E.info,E.recognized,E.info,E.recognized),r.push(i),i+=L.reduce((k,S)=>k+S.length,0),o.push(...L),g++}let C=N.getParts("wvpl",o,!1,!0);c.info("%cSucceeded!",E.recognized);let l=new j(8+4*r.length);te(l,8),te(l,r.length);for(let w of r)te(l,w);let h=N.write("ptbl",l);this.soundBankInfo.software=t.software;let d=[],B=this.soundBankInfo,m=(w,L)=>{L&&d.push(...N.getParts(w,[Pe(L,!0)]))};m("INAM",B.name),m("ICMT",B.comment),m("ICOP",B.copyright),m("ICRD",Ot(B.creationDate)),m("IENG",B.engineer),m("IPRD",B.product),m("ISFT",t.software),m("ISBJ",B.subject),c.info("%cCombining everything...");let u=N.writeParts("RIFF",[Pe("DLS "),n,...a,h,...C,...N.getParts("INFO",d,!1,!0)]);return c.info("%cSaved successfully!",E.recognized),c.groupEnd(),u.buffer}toSF(){c.group("%cConverting DLS to SF2...",E.info);let e=new Vt("dls");e.soundBankInfo.version.minor=4,e.soundBankInfo.version.major=2,e.soundBankInfo={...this.soundBankInfo};for(let t of this.samples)t.toSFSample(e);for(let t of this.instruments)t.toSFPreset(e);return e.flush(),c.info("%cConversion complete!",E.recognized),c.groupEnd(),e}},Vt=class UA{static isSF3DecoderReady=kA.ready;type;soundBankInfo={name:"Unnamed",creationDate:new Date,software:"SpessaSynth",soundEngine:"E-mu 10K2",version:{major:2,minor:4}};presets=[];samples=[];instruments=[];defaultModulators=_s.map(Be.copyFrom.bind(Be));customDefaultModulators=!1;constructor(e="sf2"){this.type=e}_isXGBank=!1;get isXGBank(){return this._isXGBank}static mergeSoundBanks(...e){let t=e.shift();if(!t)throw new Error("No sound banks provided!");let s=t.presets;for(;e.length>0;){let a=e?.shift()?.presets;if(a)for(let i of a)s.some(r=>i.matches(r))||s.push(i)}let n=new UA;return n.addCompletePresets(s),n.soundBankInfo={...t.soundBankInfo},n}static getSampleSoundBankFile(){let e=new UA,t=new Float32Array(128);for(let i=0;i<128;i++)t[i]=i/128*2-1;let s=new Un;s.name="Saw",s.originalKey=65,s.pitchCorrection=20,s.loopEnd=128,s.setAudioData(t,44100),e.addSamples(s);let n=new mA;n.name="Saw Wave",n.globalZone.addGenerators(new me(I.initialAttenuation,375),new me(I.releaseVolEnv,-1e3),new me(I.sampleModes,1)),n.createZone(s),n.createZone(s).setGenerator(I.fineTune,-9),e.addInstruments(n);let a=new uA(e);return a.name="Saw Wave",a.createZone(n),e.addPresets(a),e.soundBankInfo.name="SpessaSynth Sample Sound Bank",e.flush(),e.writeSF2()}static copyFrom(e){let t=new UA;for(let s of e.presets)t.clonePreset(s);return t.soundBankInfo={...e.soundBankInfo},t}addCompletePresets(e){this.addPresets(...e);let t=[];for(let n of e)for(let a of n.zones)a.instrument&&!t.includes(a.instrument)&&t.push(a.instrument);this.addInstruments(...t);let s=[];for(let n of t)for(let a of n.zones)a.sample&&!s.includes(a.sample)&&s.push(a.sample);this.addSamples(...s)}async setSampleFormat(e){let t=0,s=e.format,n=e.progressFunction;for(let a of this.samples){switch(s){default:case"pcm":a.setAudioData(a.getAudioData(),a.sampleRate);break;case"compressed":{let i=e.compressionFunction;if(!i)throw new Error(`No compression function supplied but '${s}' was requested.`);await a.compressSample(i)}}t++,n?.(t/this.samples.length),c.info(`%cEncoded sample %c${t}. ${a.name}%c of %c${this.samples.length}%c. Compressed: %c${a.isCompressed}%c.`,E.info,E.recognized,E.info,E.recognized,E.info,a.isCompressed?E.recognized:E.unrecognized,E.info)}switch(s){default:case"pcm":this.soundBankInfo.version.major=2,this.soundBankInfo.version.minor=4;break;case"compressed":this.soundBankInfo.version.major=3,this.soundBankInfo.version.minor=0}}writeDLS(e=Gt){let t=e.progressFunction;return ra.fromSF(this,t?s=>t(s/2):void 0).write({...e,progressFunction:t?s=>t(.5+s/2):void 0})}writeSF2(e=Aa){return zn(this,e)}writeSFE(e=ta){return Vn(this,e)}addPresets(...e){this.presets.push(...e)}addInstruments(...e){this.instruments.push(...e)}addSamples(...e){this.samples.push(...e)}cloneSample(e){let t=this.samples.find(n=>n.name===e.name);if(t)return t;let s=new $A(e.name,e.sampleRate,e.originalKey,e.pitchCorrection,e.sampleType,e.loopStart,e.loopEnd);if(e.isCompressed?s.setCompressedData(e.getRawData(!0)):s.setAudioData(e.getAudioData(),e.sampleRate),this.addSamples(s),e.linkedSample){let n=this.cloneSample(e.linkedSample);n.linkedSample||s.setLinkedSample(n,s.sampleType)}return s}cloneInstrument(e){let t=this.instruments.find(n=>n.name===e.name);if(t)return t;let s=new mA;s.name=e.name,s.globalZone.copyFrom(e.globalZone);for(let n of e.zones)s.createZone(this.cloneSample(n.sample)).copyFrom(n);return this.addInstruments(s),s}clonePreset(e){let t=this.presets.find(n=>n.name===e.name);if(t)return t;let s=new uA(this);s.name=e.name,s.bankMSB=e.bankMSB,s.bankLSB=e.bankLSB,s.isGMGSDrum=e.isGMGSDrum,s.program=e.program,s.library=e.library,s.genre=e.genre,s.morphology=e.morphology,s.globalZone.copyFrom(e.globalZone);for(let n of e.zones)s.createZone(this.cloneInstrument(n.instrument)).copyFrom(n);return this.addPresets(s),s}flush(){this.presets.sort(be.compare.bind(be)),this.parseInternal()}trim(e){let t=(s,n)=>{let a=0;for(let i=0;i<s.zones.length;i++){let r=s.zones[i],o=r.keyRange,g=r.velRange,C=!1;for(let[l,h]of n)if(l>=o.min&&l<=o.max&&[...h].some(d=>d>=g.min&&d<=g.max)){C=!0;break}C||(c.info(`%c${r.sample.name}%c removed from %c${s.name}%c.`,E.recognized,E.info,E.recognized,E.info),s.deleteZone(i)&&(a++,i--,c.info(`%c${r.sample.name}%c deleted`,E.recognized,E.info)),r.sample.useCount<1&&this.deleteSample(r.sample))}return a};c.groupCollapsed("%cTrimming sound bank...",E.info),c.info("Combinations to trim for:",e);for(let s=0;s<this.presets.length;s++){let n=this.presets[s],a=e.get(n);if(a===void 0)c.info(`%cDeleting preset %c${n.name}%c and its zones`,E.info,E.recognized,E.info),this.deletePreset(n),s--;else{c.groupCollapsed(`%cTrimming %c${n.name}`,E.info,E.recognized),c.info(`Keys for ${n.name}:`,a);let i=0;for(let r=0;r<n.zones.length;r++){let o=n.zones[r],g=o.keyRange,C=o.velRange,l=!1;for(let[h,d]of a)if(h>=g.min&&h<=g.max&&[...d].some(B=>B>=C.min&&B<=C.max)){l=!0;let B=t(o.instrument,a);c.info(`%cTrimmed off %c${B}%c instrument zones from %c${o.instrument.name}`,E.info,E.recognized,E.info,E.recognized);break}l||(i++,n.deleteZone(r),o.instrument.useCount<1&&this.deleteInstrument(o.instrument),r--)}c.info(`%cTrimmed off %c${i}%c preset zones from %c${n.name}`,E.info,E.recognized,E.info,E.recognized),c.groupEnd()}}this.removeUnusedElements(),c.info("%cSound bank modified!",E.recognized),c.groupEnd()}removeUnusedElements(){this.instruments=this.instruments.filter(e=>{e.deleteUnusedZones();let t=e.useCount<1;return t&&e.delete(),!t}),this.samples=this.samples.filter(e=>{let t=e.useCount<1;return t&&e.unlinkSample(),!t})}deleteInstrument(e){e.delete(),this.instruments.splice(this.instruments.indexOf(e),1)}deletePreset(e){e.delete(),this.presets.splice(this.presets.indexOf(e),1)}deleteSample(e){e.unlinkSample(),this.samples.splice(this.samples.indexOf(e),1)}getPreset(e,t){return be.selectPatch(this.presets,e,t)}destroySoundBank(){this.presets.length=0,this.instruments.length=0,this.samples.length=0}parsingError(e){throw new Error(`SF parsing error: ${e} The file may be corrupted.`)}parseInternal(){this._isXGBank=!1;let e=new Set([0,1,2,3,4,5,6,7,8,9,16,17,24,25,26,27,28,29,30,31,32,33,40,41,48,56,57,58,64,65,66,126,127]);for(let t of this.presets)if(he.isXGDrum(t.bankMSB)&&(this._isXGBank=!0,!e.has(t.program))){this._isXGBank=!1,c.info(`%cThis bank is not valid XG. Preset %c${t.toString()}%c is not a valid XG drum. XG mode will use presets on bank 128.`,E.info,E.value,E.info);break}}printInfo(){for(let[e,t]of Object.entries(this.soundBankInfo))if(typeof t=="object"&&"major"in t){let s=t;c.info(`%c${e}: %c"${s.major}.${s.minor}"`,E.info,E.recognized)}else c.info(`%c${e}: %c${t.toLocaleString()}`,E.info,E.recognized)}},_n=class extends me{constructor(A){let e=A.currentIndex,t=A[e+1]<<8|A[e],s=Ut(A[e+2],A[e+3]);A.currentIndex+=4,super(t,s,!1)}};function fs(A){let e=[];for(;A.data.length>A.data.currentIndex;)e.push(new _n(A.data));return e.pop(),e}function $n(A,e,t,s,n){let a=A.gen,i=A.mod,r=0,o=0;for(let g of n)for(let C=0;C<g.zonesCount;C++){let l=a[o++],h=a[o],d=e.slice(l,h),B=i[r++],m=i[r],u=t.slice(B,m);d.some(w=>w.type===I.instrument)?g.createSoundFontZone(u,d,s):(g.globalZone.addGenerators(...d),g.globalZone.addModulators(...u))}}var ei=class extends uA{zoneStartIndex;zonesCount=0;constructor(A,e){super(e),this.name=ie(A.data,20),this.program=q(A.data,2);let t=q(A.data,2);this.bankMSB=t&127,this.isGMGSDrum=(t&128)>0,this.bankLSB=t>>8,this.zoneStartIndex=q(A.data,2),this.library=q(A.data,4),this.genre=q(A.data,4),this.morphology=q(A.data,4)}createSoundFontZone(A,e,t){let s=e.find(i=>i.type===I.instrument),n;if(s)n=t[s.value];else throw new Error("No instrument ID found in preset zone.");if(!n)throw new Error(`Invalid instrument ID: ${s.value}, available instruments: ${t.length}`);let a=new ea(this,n);return a.addGenerators(...e),a.addModulators(...A),this.zones.push(a),a}};function us(A,e){let t=[];for(;A.data.length>A.data.currentIndex;){let s=new ei(A,e);if(t.length>0){let n=t[t.length-1];n.zonesCount=s.zoneStartIndex-n.zoneStartIndex}t.push(s)}return t.pop(),t}var Ai=class extends mA{zoneStartIndex;zonesCount=0;constructor(A){super(),this.name=ie(A.data,20),this.zoneStartIndex=q(A.data,2)}createSoundFontZone(A,e,t){let s=e.find(i=>i.type===I.sampleID),n;if(s)n=t[s.value];else throw new Error("No sample ID found in instrument zone.");if(!n)throw new Error(`Invalid sample ID: ${s.value}, available samples: ${t.length}`);let a=new $s(this,n);return a.addGenerators(...e),a.addModulators(...A),this.zones.push(a),a}};function ms(A){let e=[];for(;A.data.length>A.data.currentIndex;){let t=new Ai(A);if(e.length>0){let s=e[e.length-1];s.zonesCount=t.zoneStartIndex-s.zoneStartIndex}e.push(t)}return e.pop(),e}function ut(A){let e=[];for(;A.data.length>A.data.currentIndex;){let t=A.data,s=q(t,2),n=q(t,2),a=Ut(t[t.currentIndex++],t[t.currentIndex++]),i=q(t,2),r=q(t,2);e.push(new Ce(s,i,n,a,r))}return e.pop(),e}function ti(A,e,t,s,n){let a=A.gen,i=A.mod,r=0,o=0;for(let g of n)for(let C=0;C<g.zonesCount;C++){let l=a[o++],h=a[o],d=e.slice(l,h),B=i[r++],m=i[r],u=t.slice(B,m);d.some(w=>w.type===I.sampleID)?g.createSoundFontZone(u,d,s):(g.globalZone.addGenerators(...d),g.globalZone.addModulators(...u))}}function PA(A){let e=[],t=[];for(;A.data.length>A.data.currentIndex;)t.push(q(A.data,2)),e.push(q(A.data,2));return{mod:e,gen:t}}var si=class extends Vt{sampleDataStartIndex=0;constructor(A,e){super(e?"sfe":"sf2");let t=new j(A);c.group("%cParsing a SoundFont2 file...",E.info);let s=ve(t,4).toLowerCase();this.verifyTexts(s,["riff","rifs"]);let n=s==="rifs";n&&c.info("%cRIFF64 Detected!",E.recognized),N.read(t,n,!1);let a=ie(t,4).toLowerCase();this.verifyTexts(a,["sfbk","sfpk","sfen"]);let i=a==="sfpk",r=N.read(t,n);this.verifyHeader(r,"list");let o=ie(r.data,4);this.verifyText(o,"info");let g;for(;r.data.length>r.data.currentIndex;){let f=N.read(r.data,n),M=ve(f.data,f.data.length),b=f.header;switch(b){case"ifil":case"iver":{let V=q(f.data,2),W=q(f.data,2);b==="ifil"?this.soundBankInfo.version={major:V,minor:W}:this.soundBankInfo.romVersion={major:V,minor:W};break}case"DMOD":this.defaultModulators=ut(f),this.customDefaultModulators=!0;break;case"LIST":ie(f.data,4)==="xdta"&&(c.info("%cExtended SF2 found!",E.recognized),g=f);break;case"ICRD":this.soundBankInfo.creationDate=Ht(ie(f.data,f.data.length));break;case"ISFT":this.soundBankInfo.software=M;break;case"IPRD":this.soundBankInfo.product=M;break;case"IENG":this.soundBankInfo.engineer=M;break;case"ICOP":this.soundBankInfo.copyright=M;break;case"INAM":this.soundBankInfo.name=M;break;case"ICMT":this.soundBankInfo.comment=M;break;case"irom":this.soundBankInfo.romInfo=M;break;case"isng":this.soundBankInfo.soundEngine=M}}this.printInfo();let C={};g!==void 0&&(C.phdr=N.read(g.data,n),C.pbag=N.read(g.data,n),C.pmod=N.read(g.data,n),C.pgen=N.read(g.data,n),C.inst=N.read(g.data,n),C.ibag=N.read(g.data,n),C.imod=N.read(g.data,n),C.igen=N.read(g.data,n),C.shdr=N.read(g.data,n));let l=N.read(t,n,!1);this.verifyHeader(l,"list"),this.verifyText(ie(t,4),"sdta"),c.info("%cVerifying smpl chunk...",E.warn);let h=N.read(t,n,!1);this.verifyHeader(h,"smpl");let d;if(i){c.info("%cSF2Pack detected, attempting to decode the smpl chunk...",E.info);let f;try{f=kA.decode(t.buffer.slice(t.currentIndex,t.currentIndex+l.size-4-l.headerSize))}catch(M){throw c.groupEnd(),new Error(`SF2Pack Ogg Vorbis decode error: ${M}`,{cause:M})}if(f.channels.length!==1)throw new Error(`The encoded sample data must be mono, received ${f.channels.length} channels.`);d=f.channels[0],c.info(`%cDecoded the smpl chunk! Length: %c${d.length}`,E.info,E.value)}else d=t,this.sampleDataStartIndex=t.currentIndex;c.info(`%cSkipping sample chunk, length: %c${l.size-4-l.headerSize}`,E.info,E.value),t.currentIndex+=l.size-4-l.headerSize,c.info("%cLoading preset data chunk...",E.warn);let B=N.read(t,n);this.verifyHeader(B,"list"),ie(B.data,4);let m=N.read(B.data,n);this.verifyHeader(m,"phdr");let u=N.read(B.data,n);this.verifyHeader(u,"pbag");let w=N.read(B.data,n);this.verifyHeader(w,"pmod");let L=N.read(B.data,n);this.verifyHeader(L,"pgen");let k=N.read(B.data,n);this.verifyHeader(k,"inst");let S=N.read(B.data,n);this.verifyHeader(S,"ibag");let v=N.read(B.data,n);this.verifyHeader(v,"imod");let x=N.read(B.data,n);this.verifyHeader(x,"igen");let y=N.read(B.data,n);this.verifyHeader(y,"shdr"),c.info("%cParsing samples...",E.info),t.currentIndex=this.sampleDataStartIndex;let p=Bs(y,d,g===void 0);if(g&&C.shdr){let f=Bs(C.shdr,new Float32Array(1),!1);if(f.length===p.length)for(let[M,b]of p.entries())b.name+=f[M].name,b.linkedSampleIndex|=f[M].linkedSampleIndex<<16}for(let f of p)f.name=f.name.trim();this.samples.push(...p);let D=fs(x),U=ut(v),T=ms(k);if(g&&C.inst){let f=ms(C.inst);if(f.length===T.length){for(let[M,b]of T.entries())b.name+=f[M].name,b.zoneStartIndex|=f[M].zoneStartIndex<<16;for(let[M,b]of T.entries())M<T.length-1&&(b.zonesCount=T[M+1].zoneStartIndex-b.zoneStartIndex)}}for(let f of T)f.name=f.name.trim();this.instruments.push(...T);let K=PA(S);if(g&&C.ibag){let f=PA(C.ibag);for(let M=0;M<K.mod.length;M++)K.mod[M]|=f.mod[M]<<16;for(let M=0;M<K.gen.length;M++)K.gen[M]|=f.gen[M]<<16}ti(K,D,U,this.samples,T);let J=fs(L),Ae=ut(w),G=us(m,this);if(g&&C.phdr){let f=us(C.phdr,this);if(f.length===G.length){for(let[M,b]of G.entries())b.name+=f[M].name,b.zoneStartIndex|=f[M].zoneStartIndex<<16;for(let[M,b]of G.entries())M<G.length-1&&(b.zonesCount=G[M+1].zoneStartIndex-b.zoneStartIndex)}}for(let f of G)f.name=f.name.trim();this.addPresets(...G);let P=PA(u);if(g&&C.pbag){let f=PA(C.pbag);for(let M=0;M<P.mod.length;M++)P.mod[M]|=f.mod[M]<<16;for(let M=0;M<P.gen.length;M++)P.gen[M]|=f.gen[M]<<16}$n(P,J,Ae,this.instruments,G),this.flush(),c.info(`%cParsing finished! %c"${this.soundBankInfo.name}"%c has %c${this.presets.length}%c presets,
|
|
17
|
-
%c${this.instruments.length}%c instruments and %c${this.samples.length}%c samples.`,E.info,E.recognized,E.info,E.recognized,E.info,E.recognized,E.info,E.recognized,E.info),c.groupEnd()}verifyHeader(A,e){A.header.toLowerCase()!==e.toLowerCase()&&(c.groupEnd(),this.parsingError(`Invalid chunk header! Expected "${e.toLowerCase()}" got "${A.header.toLowerCase()}"`))}verifyText(A,e){A.toLowerCase()!==e.toLowerCase()&&(c.groupEnd(),this.parsingError(`Invalid FourCC: Expected "${e.toLowerCase()}" got "${A.toLowerCase()}"\``))}verifyTexts(A,e){e.includes(A.toLowerCase())||(c.groupEnd(),this.parsingError(`Invalid FourCC: Expected ${e.map(t=>`"${t}"`).join(", ")} but got "${A.toLowerCase()}"`))}},yA=class{static fromArrayBuffer(A){let e=ie(new j(A.slice(0,4)),4);if(e!=="RIFF"&&e!=="RIFS")throw new Error(`Expected 'RIFF' or 'RIFS' header, got '${e}'`);let t=ie(new j(e==="RIFS"?A.slice(12,16):A.slice(8,12)),4).toLowerCase();return t==="dls "?this.loadDLS(A):new si(A,t==="sfen")}static loadDLS(A){return ra.read(A).toSF()}},jA=class oa extends Be{isEffectModulator;isDefaultResonantModulator;isModWheelModulator;constructor(e,t,s,n,a,i,r,o){super(e,t,s,n,a),this.isEffectModulator=i,this.isDefaultResonantModulator=r,this.isModWheelModulator=o}static fromData(e,t,s,n,a){let i=e.toSourceEnum(),r=t.toSourceEnum();return new oa(e,t,s,n,a,(i===219||i===221)&&r===0&&(s===I.reverbEffectsSend||s===I.chorusEffectsSend),i===Xs&&r===0&&s===I.initialFilterQ,(e.isCC&&e.index===Q.modulationWheel||t.isCC&&t.index===Q.modulationWheel)&&(s===I.modLfoToPitch||s===I.vibLfoToPitch))}static fromModulator(e){return this.fromData(e.primarySource,e.secondarySource,e.destination,e.transformAmount,e.transformType)}},ai=class{sampleData;generators;modulators;exclusiveClass;targetKey;velocity;rootKey;loopStart;loopEnd;playbackStep;loopingMode;constructor(A,e,t,s){let n=A.sample,a=A.generators;this.modulators=A.modulators.map(jA.fromModulator.bind(jA)),this.generators=a,this.rootKey=n.originalKey,a[I.overridingRootKey]>-1&&(this.rootKey=a[I.overridingRootKey]),this.targetKey=e,a[I.keyNum]>-1&&(this.targetKey=a[I.keyNum]),this.velocity=t,a[I.velocity]>-1&&(this.velocity=a[I.velocity]),this.exclusiveClass=a[I.exclusiveClass],this.loopStart=n.loopStart,this.loopEnd=n.loopEnd,this.sampleData=n.getAudioData(),this.playbackStep=n.sampleRate/s*Math.pow(2,n.pitchCorrection/1200),this.loopingMode=a[I.sampleModes]}},ps=Math.PI/2,JA=-500,ga=500,Wt=ga-JA,Ia=new Float32Array(Wt+1),ca=new Float32Array(Wt+1);for(let A=JA;A<=ga;A++){let e=(A-JA)/Wt,t=A-JA;Ia[t]=Math.cos(ps*e),ca[t]=Math.sin(ps*e)}function ni(A,e,t,s,n,a){if(!A.isInRelease&&e>=A.releaseStartTime&&(A.isInRelease=!0,A.volEnv.startRelease(A),A.modEnv.startRelease(A),A.loopingMode===3&&(A.wavetable.isLooping=!1)),A.hasRendered=!0,!A.isActive)return;let i=this.synthCore,r=i.sampleRate,o=A.modulatedGenerators,g=A.targetKey,C=A.pitchOffset+o[I.fineTune]+this.octaveTuning[g]+this.currentTuning,l=o[I.coarseTune],h=i.tunings[this.preset.program*128+A.midiNote];if(h!==-1&&(g=Math.trunc(h),l+=h-g),A.portamentoFromKey>-1){let f=Math.min((e-A.startTime)/A.portamentoDuration,1),M=g-A.portamentoFromKey;l-=M*(1-f)}C+=(g-A.rootKey)*o[I.scaleTuning];let d=0,B=0,m=A.gainModifier*(1+o[I.amplitude]/1e3);if(e>=A.vibLfoStartTime){let f=o[I.vibLfoToPitch],M=o[I.vibLfoToFilterFc],b=o[I.vibLfoAmplitudeDepth];if(f!==0||M!==0||b!==0){let V=Math.max(0,Lt(o[I.freqVibLFO])+o[I.vibLfoRate]/100)*a/r,W=1-4*Math.abs(A.vibLfoPhase-.5);(A.vibLfoPhase+=V)>=1&&(A.vibLfoPhase-=1),C+=W*f,d+=W*M,m*=1-(W+1)/2*(b/1e3)}}if(e>=A.modLfoStartTime){let f=o[I.modLfoToPitch],M=o[I.modLfoToVolume],b=o[I.modLfoToFilterFc],V=o[I.modLfoAmplitudeDepth];if(f!==0||b!==0||M!==0||V!==0){let W=Math.max(0,Lt(o[I.freqModLFO])+o[I.modLfoRate]/100)*a/r,z=1-4*Math.abs(A.modLfoPhase-.5);(A.modLfoPhase+=W)>=1&&(A.modLfoPhase-=1),C+=z*f,B+=-z*M,d+=z*b,m*=1-(z+1)/2*(V/1e3)}}let u=o[I.modEnvToPitch],w=o[I.modEnvToFilterFc];if(w!==0||u!==0){let f=A.modEnv.process(A,e);d+=f*w,C+=f*u}B-=A.resonanceOffset;let L=C+l*100,k=L|0;k!==A.tuningCents&&(A.tuningCents=k,A.tuningRatio=Math.pow(2,L/1200));let S=VA(o[I.initialAttenuation])*VA(B);if(A.loopingMode===2&&!A.isInRelease){A.isActive=A.volEnv.process(a,S);return}let v=i.voiceBuffer;A.isActive=A.wavetable.process(a,A.tuningRatio,v);let x=A.volEnv.outputGain,y=A.volEnv.process(a,S),p=(A.volEnv.outputGain-x)/a;{let f=A.filter,M=o[I.initialFilterFc];f.initialized?f.currentInitialFc+=(M-f.currentInitialFc)*qt.smoothingConstant:(f.initialized=!0,f.currentInitialFc=M);let b=f.currentInitialFc+d,V=o[I.initialFilterQ];if(f.currentInitialFc>13499&&b>13499&&V===0){f.currentInitialFc=13500;for(let W=0;W<a;W++)v[W]*=x,x+=p}else{(Math.abs(f.lastTargetCutoff-b)>1||f.resonanceCb!==V)&&(f.lastTargetCutoff=b,f.resonanceCb=V,f.calculateCoefficients(b));let{a0:W,a1:z,a2:O,a3:Z,a4:$}=f,{x1:H,x2:ee,y1:Ee,y2:ye}=f;for(let re=0;re<a;re++){let ue=v[re],Ne=W*ue+z*H+O*ee-Z*Ee-ye*$;ee=H,H=ue,ye=Ee,Ee=Ne,v[re]=Ne*x,x+=p}f.x1=H,f.x2=ee,f.y1=Ee,f.y2=ye}}A.isActive=A.isActive&&y;let D;A.overridePan?D=A.overridePan:(A.currentPan+=(o[I.pan]-A.currentPan)*i.panSmoothingFactor,D=A.currentPan);let{systemParameters:U}=i,T=this.currentGain*m,K=Math.min(Math.max(-500,D+this.currentPan),500)+500|0,J=Ia[K]*T,Ae=ca[K]*T;if(this._midiParameters.efxAssign){let f=i.insertionInputL,M=i.insertionInputR;for(let b=0;b<a;b++){let V=v[b];f[b]+=J*V,M[b]+=Ae*V}return}for(let f=0;f<a;f++){let M=v[f],b=f+n;t[b]+=J*M,s[b]+=Ae*M}if(!U.effectsEnabled)return;let G=o[I.reverbEffectsSend]*A.reverbSend;if(G>0){let f=U.reverbGain*T*(G/1e3),M=i.reverbInput;for(let b=0;b<a;b++)M[b]+=f*v[b]}let P=o[I.chorusEffectsSend]*A.chorusSend;if(P>0){let f=U.chorusGain*(P/1e3)*T,M=i.chorusInput;for(let b=0;b<a;b++)M[b]+=f*v[b]}if(i.delayActive){let f=this._midiControllers[Q.variationDepth]*A.delaySend;if(f>0){let M=T*U.delayGain*((f>>7)/127),b=i.delayInput;for(let V=0;V<a;V++)b[V]+=M*v[V]}}}function ii(A,e,t=!0){if(A>127||e<0)throw new Error("Invalid MIDI Controller.");if(A>=Q.modulationWheelLSB&&A<=Q.effectControl2LSB){let s=A-32;if(this.lockedControllers[s])return;this._midiControllers[s]=this._midiControllers[s]&16256|e&127,this.computeModulatorsAll(1,s)}if(!this.lockedControllers[A]){switch(this._midiControllers[A]=e<<7|this._midiControllers[A]&127,A){case Q.omniModeOff:case Q.omniModeOn:case Q.allNotesOff:this.stopAllNotes();break;case Q.allSoundOff:this.stopAllNotes(!0);break;case Q.polyModeOn:this.stopAllNotes(!0),this.setMIDIParameter("polyMode",!0);break;case Q.monoModeOn:this.stopAllNotes(!0),this.setMIDIParameter("polyMode",!1);break;case Q.bankSelect:this.setBankMSB(e),this.channel%16===9&&he.isSystemXG(this.channelSystem)&&this.setBankMSB(127);break;case Q.bankSelectLSB:this.setBankLSB(e);break;case Q.variationDepth:this.synthCore.updateActiveEffects();break;case Q.registeredParameterLSB:case Q.registeredParameterMSB:this._midiControllers[Q.dataEntryMSB]=0,this.lastParameterIsRegistered=!0;break;case Q.nonRegisteredParameterMSB:this.sf2NRPNGeneratorLSB=0,this._midiControllers[Q.dataEntryMSB]=0,this.lastParameterIsRegistered=!1;break;case Q.nonRegisteredParameterLSB:if(this._midiControllers[Q.nonRegisteredParameterMSB]>>7===le.SF2)switch(this.sf2NRPNGeneratorLSB%100!==0&&(this.sf2NRPNGeneratorLSB=0),e){case 100:this.sf2NRPNGeneratorLSB+=100;break;case 101:this.sf2NRPNGeneratorLSB+=1e3;break;case 102:this.sf2NRPNGeneratorLSB+=1e4;break;default:e<100&&(this.sf2NRPNGeneratorLSB+=e)}this._midiControllers[Q.dataEntryMSB]=0,this.lastParameterIsRegistered=!1;break;case Q.dataEntryMSB:case Q.dataEntryLSB:this.dataEntry();break;case Q.resetAllControllers:this.resetRP15();break;case Q.sustainPedal:if(e<64){let s=0;if(this._voiceCount>0){for(let n of this.synthCore.voices)if(n.channel===this.channel&&n.isActive&&n.isHeld&&(n.isHeld=!1,n.releaseVoice(this.synthCore.currentTime),++s>=this._voiceCount))break}}break;case Q.portamentoControl:this.lastPortamentoNote=e,this.portamentoForce=!0;break;default:this.computeModulatorsAll(1,A);break}t&&this.synthCore.callEvent("controllerChange",{channel:this.channel,controller:A,value:e})}}var ri=[I.delayModLFO,I.freqModLFO,I.delayVibLFO,I.freqVibLFO,I.delayModEnv,I.attackModEnv,I.holdModEnv,I.decayModEnv,I.sustainModEnv,I.releaseModEnv,I.delayVolEnv,I.attackVolEnv,I.holdVolEnv,I.decayVolEnv,I.sustainVolEnv,I.releaseVolEnv,I.fineTune,I.modLfoToPitch,I.vibLfoToPitch,I.modEnvToPitch,I.modLfoToVolume,I.initialFilterFc,I.initialFilterQ,I.modLfoToFilterFc,I.modEnvToFilterFc,I.chorusEffectsSend,I.reverbEffectsSend],Oe=(A,e,t)=>Math.max(e,Math.min(t,A)),NA=A=>Math.max(-32768,1200*Math.log2(A/1e3)),oi=A=>6900+1200*Math.log2(A/440);function gi(A,e){let t=e&127;e-=8192;let s=ri[A];s||c.unsupported(`AWE32 LSB for ${this.channel}`,[A],"Invalid Generator Number");let n,a,i,r;switch(s){default:break;case I.delayModLFO:case I.delayVibLFO:case I.delayVolEnv:case I.delayModEnv:n=4*Oe(e,0,5900),this.setGeneratorOverride(s,NA(n));break;case I.attackVolEnv:case I.attackModEnv:n=Oe(e,0,5940),this.setGeneratorOverride(s,NA(n));break;case I.holdVolEnv:case I.holdModEnv:n=Oe(e,0,8191),this.setGeneratorOverride(s,NA(n));break;case I.decayModEnv:case I.decayVolEnv:case I.releaseVolEnv:case I.releaseModEnv:n=4*Oe(e,0,5940),this.setGeneratorOverride(s,NA(n));break;case I.freqVibLFO:case I.freqModLFO:a=.084*t,this.setGeneratorOverride(s,oi(a),!0);break;case I.sustainVolEnv:case I.sustainModEnv:i=t*7.5,this.setGeneratorOverride(s,i);break;case I.fineTune:this.setGeneratorOverride(s,e,!0);break;case I.modLfoToPitch:case I.vibLfoToPitch:r=Oe(e,-127,127)*9.375,this.setGeneratorOverride(s,r,!0);break;case I.modEnvToPitch:r=Oe(e,-127,127)*9.375,this.setGeneratorOverride(s,r);break;case I.modLfoToVolume:i=1.875*t,this.setGeneratorOverride(s,i,!0);break;case I.initialFilterFc:{let o=4335+59*t;this.setGeneratorOverride(s,o,!0);break}case I.initialFilterQ:i=215*(t/127),this.setGeneratorOverride(s,i,!0);break;case I.modLfoToFilterFc:r=Oe(e,-64,63)*56.25,this.setGeneratorOverride(s,r,!0);break;case I.modEnvToFilterFc:r=Oe(e,-64,63)*56.25,this.setGeneratorOverride(s,r);break;case I.chorusEffectsSend:case I.reverbEffectsSend:this.setGeneratorOverride(s,Oe(e,0,255)*(1e3/255));break}}function Ii(){let A=this._midiControllers[Q.dataEntryMSB];if(this.lastParameterIsRegistered){let n=this._midiControllers[Q.registeredParameterMSB]|this._midiControllers[Q.registeredParameterLSB]>>7;switch(n){default:c.info(`%cUnrecognized RPN for %c${this.channel}%c: %c(0x${n.toString(16)})%c data value: %c${A}`,E.warn,E.recognized,E.warn,E.unrecognized,E.warn,E.value);break;case Le.pitchWheelRange:{let a=A/128;this.setMIDIParameter("pitchWheelRange",a),c.coolInfo(`Pitch Wheel Range for ${this.channel}`,a,"semitones");break}case Le.coarseTuning:{let a=(A>>7)-64;this.setMIDIParameter("keyShift",a),c.coolInfo(`Key shift for ${this.channel}`,a);break}case Le.fineTuning:{let a=(A-8192)/81.92;this.setMIDIParameter("fineTune",a),c.coolInfo(`Fine tuning for ${this.channel}`,Math.round(a),"cents");break}case Le.modulationDepth:{let a=A/1.28;this.setMIDIParameter("modulationDepth",a),c.coolInfo(`Modulation depth for ${this.channel}`,Math.round(a),"cents");break}case Le.resetParameters:break}return}let e=this._midiControllers[Q.nonRegisteredParameterMSB]>>7,t=this._midiControllers[Q.nonRegisteredParameterLSB]>>7,s=A>>7;if(!(this.synthCore.systemParameters.drumLock&&e>=le.drumPitch&&e<=le.drumDelay))switch(e){default:c.info(`%cUnrecognized NRPN for %c${this.channel}%c: %c(0x${e.toString(16).toUpperCase()} 0x${t.toString(16).toUpperCase()})%c data value: %c${s}`,E.warn,E.recognized,E.warn,E.unrecognized,E.warn,E.value);break;case le.partParameter:{let n=this._systemParameters.nrpnParamLock??this.synthCore.systemParameters.nrpnParamLock;switch(t){default:c.info(`%cUnrecognized NRPN for %c${this.channel}%c: %c(0x${e.toString(16)} 0x${t.toString(16)})%c data value: %c${s}`,E.warn,E.recognized,E.warn,E.unrecognized,E.warn,E.value);break;case De.vibratoRate:this.controllerChange(Q.vibratoRate,s);break;case De.vibratoDepth:this.controllerChange(Q.vibratoDepth,s);break;case De.vibratoDelay:this.controllerChange(Q.vibratoDelay,s);break;case De.tvfCutoffFrequency:if(n)return;this.controllerChange(Q.brightness,s),c.coolInfo(`Filter cutoff for ${this.channel}`,s.toString(),"");break;case De.tvfResonance:if(n)return;this.controllerChange(Q.filterResonance,s),c.coolInfo(`Filter resonance for ${this.channel}`,s.toString(),"");break;case De.envelopeAttackTime:if(n)return;this.controllerChange(Q.attackTime,s),c.coolInfo(`EG attack time for ${this.channel}`,s.toString(),"");break;case De.envelopeDecayTime:if(n)return;this.controllerChange(Q.decayTime,s),c.coolInfo(`EG decay time for ${this.channel}`,s.toString(),"");break;case De.envelopeReleaseTime:if(n)return;this.controllerChange(Q.releaseTime,s),c.coolInfo(`EG release time for ${this.channel}`,s.toString(),"");break}break}case le.drumPitch:{let n=this.channelSystem==="xg"||this.patch.bankLSB===1?(s-64)*100:(s-64)*50;this.drumParams[t].pitch=n,c.coolInfo(`Drum ${t} pitch for ${this.channel}`,n,"cents");break}case le.drumPitchFine:{let n=s-64;this.drumParams[t].pitch+=n,c.coolInfo(`Drum ${t} pitch fine for ${this.channel}`,this.drumParams[t].pitch,"cents");break}case le.drumLevel:this.drumParams[t].gain=s/120,c.coolInfo(`Drum ${t} level for ${this.channel}`,s,"");break;case le.drumPan:this.drumParams[t].pan=s,c.coolInfo(`Drum ${t} pan for ${this.channel}`,s,"");break;case le.drumReverb:this.drumParams[t].reverbGain=s/127,c.coolInfo(`Drum ${t} reverb level for ${this.channel}`,s,"");break;case le.drumChorus:this.drumParams[t].chorusGain=s/127,c.coolInfo(`Drum ${t} chorus level for ${this.channel}`,s,"");break;case le.drumDelay:this.drumParams[t].delayGain=s/127,c.coolInfo(`Drum ${t} delay level for ${this.channel}`,A,"");break;case le.awe32:gi.call(this,t,A);break;case le.SF2:{if(t>100)break;let n=this.sf2NRPNGeneratorLSB,a=A-8192;this.setGeneratorOffset(n,a);break}}}var ci=40;function Ci(A){if(A<1)return 0;{let e=[1,2,4,8,16,32,64,80,96,112,120,124],t=[1,.5,.25,.125,.0625,.03125,.0625,.0625,.0625,.125,.25,1/3],s=[-.16653127382501215,.11863875218299408,.029479047361245264,-.005442312089231738,.1451520875973037,-.005056281449558275,-.005095486882876532,.03334009551111544,-.09361368678020432,.14132569702451822,-.15805565301011382,-.09918856955881927],n=[.028212773333433472,-.3388502064992847,-.15839529890929713,-.12398131766775483,-.2874848552685111,.012254866302537692,.005957797193345771,-.03745899330347374,.12911781869810196,-.15867193224162568,.504406322732748,.3786845131875458],a=[.7218950861255283,.5574536226347168,.47133893237025826,.48597095327079914,.44336276333518854,.6076986311801551,.30851975971827794,.30514889345633955,.3302511933827384,.153822885219165,.1302280559047337,.49865530675491687],i=[-2.2218487496163566,-1.6382721639824072,-1.3010299956639813,-.958607314841775,-.6020599913279624,-.3010299956639812,.31386722036915343,.6232492903979004,.9242792860618817,1.290034611362518,1.4265112613645752,1.9030899869919435],r=[2,4,8,16,32,64,80,96,112,120,124],o=-1;for(let C=r.length-1;C>=0;C--)if(r[C]<A){o=C;break}o+=1;let g=(A-e[o])*t[o];return Math.exp(2.302585092994046*(((s[o]*g+n[o])*g+a[o])*g+i[o]))/ci}}function li(A,e){return Ci(A)*e}var dA=(A,e,t)=>Math.max(e,Math.min(t,A));function hi(A,e,t=!0){if(e<1){this.noteOff(A);return}let s=this.synthCore.systemParameters.blackMIDIMode;if(s&&this.synthCore.voiceCount>200&&e<40||s&&e<10||this._systemParameters.isMuted||!this.preset)return;let n=dA(Math.floor(e*(this._midiParameters.velocitySenseDepth/64)+(this._midiParameters.velocitySenseOffset-64)*2),0,127),a=A+this.currentKeyShift;if(A>127||A<0)return;let i=this.preset.program,r=this.synthCore.tunings[i*128+A];r>=0&&(a=Math.trunc(r)),((this._systemParameters.monophonicRetrigger??this.synthCore.systemParameters.monophonicRetrigger)||this._midiParameters.assignMode===0)&&this.killNote(A);let o=this.synthCore.keyModifierManager.getVelocity(this.channel,A);o>-1&&(n=o);let g=this.synthCore.keyModifierManager.getGain(this.channel,A),C=this.lastPortamentoNote,l=this.portamentoForce||this._midiControllers[Q.portamentoOnOff]>=8192,h=this._midiControllers[Q.portamentoTime]>>7,d=l&&!this._drumChannel&&C>=0&&C!==A&&h>0,B=-1,m=0;if(d){let p=Math.abs(A-C);B=C,m=li(h,p),this.portamentoForce=!1}this.lastPortamentoNote=A,this.playingNotes[A]=!0,this._midiParameters.polyMode||(this.lastMonoNote>=0&&this.lastMonoNote!==A&&this.killNote(this.lastMonoNote),this.lastMonoNote=A,this.lastMonoVelocity=e);let u=this.synthCore.getVoices(this.channel,a,n),w=0,L=0,k=0,S=1,v=1,x=1;if(this._midiParameters.randomPan&&(w=Math.round(cs()*1e3-500)),this._drumChannel){let p=this.drumParams[A];if(!p.rxNoteOn)return;let D=p.pan-64;if(D!==0)if(D===-64)w=Math.round(cs()*1e3-500);else{let U=(this._midiControllers[Q.pan]>>7)-64;w=Math.max(-63,Math.min(D+U,63))/63*500||1}k=p.pitch,L=p.exclusiveClass,S=p.reverbGain,v=p.chorusGain,x=p.delayGain,g===1&&(g=p.gain)}let y=t?this.noteOnID[A]++:this.noteOnID[A];for(let p of u){let D=this.synthCore.assignVoice(),U=this.synthCore.currentTime;if(D.setup(U,this.channel,A,y),D.wavetable=D.oscillators[this._systemParameters.interpolationType??this.synthCore.systemParameters.interpolationType],D.targetKey=p.targetKey,D.velocity=p.velocity,D.generators.set(p.generators),D.exclusiveClass=L||p.exclusiveClass,D.rootKey=p.rootKey,D.loopingMode=p.loopingMode,D.wavetable.sampleData=p.sampleData,D.wavetable.playbackStep=p.playbackStep,this.dynamicModulators.active){D.modulators=[...p.modulators];for(let P of this.dynamicModulators.modulatorList){let f=D.modulators.findIndex(M=>Be.isIdentical(M,P.mod));f===-1?D.modulators.push(P.mod):D.modulators[f]=P.mod}}else D.modulators=p.modulators;if(D.modulators.length>D.modulatorValues.length&&(c.warn(`${D.modulators.length} modulators! Increasing modulatorValues table.`),D.modulatorValues=new Int16Array(D.modulators.length)),this.generators.overridesEnabled){let P=this.generators.overrides;for(let f=0;f<Xe;f++){let M=P[f];M!==32767&&(D.generators[f]=M)}}if(D.exclusiveClass!==0&&this._midiParameters.polyMode){let P=0;if(this._voiceCount>0){for(let f of this.synthCore.voices)if(f.isActive&&f.channel===this.channel&&f.exclusiveClass===D.exclusiveClass&&f.hasRendered&&(f.exclusiveRelease(this.synthCore.currentTime),++P>=this._voiceCount))break}}this.computeModulators(D),D.volEnv.init(D),D.modEnv.init(D),D.filter.init(),D.vibLfoStartTime=U+qA(D.modulatedGenerators[I.delayVibLFO]),D.modLfoStartTime=U+qA(D.modulatedGenerators[I.delayModLFO]);let T=D.modulatedGenerators[I.startAddrsOffset]+D.modulatedGenerators[I.startAddrsCoarseOffset]*32768,K=D.modulatedGenerators[I.endAddrOffset]+D.modulatedGenerators[I.endAddrsCoarseOffset]*32768,J=D.modulatedGenerators[I.startloopAddrsOffset]+D.modulatedGenerators[I.startloopAddrsCoarseOffset]*32768,Ae=D.modulatedGenerators[I.endloopAddrsOffset]+D.modulatedGenerators[I.endloopAddrsCoarseOffset]*32768,G=p.sampleData.length;if(D.wavetable.cursor=dA(T,0,G-1),D.wavetable.end=dA(G+K,0,G),D.wavetable.loopStart=dA(p.loopStart+J,0,G),D.wavetable.loopEnd=dA(p.loopEnd+Ae,0,G),D.wavetable.loopEnd<D.wavetable.loopStart){let P=D.wavetable.loopStart;D.wavetable.loopStart=D.wavetable.loopEnd,D.wavetable.loopEnd=P}D.wavetable.loopEnd-D.wavetable.loopStart<1&&(D.loopingMode===1||D.loopingMode===3)&&(D.loopingMode=0),D.wavetable.loopLength=D.wavetable.loopEnd-D.wavetable.loopStart,D.wavetable.isLooping=D.loopingMode===1||D.loopingMode===3,D.portamentoFromKey=B,D.portamentoDuration=m,D.overridePan=w,D.gainModifier=g,D.pitchOffset=k,D.reverbSend=S,D.chorusSend=v,D.delaySend=x,D.currentPan=Math.max(-500,Math.min(500,w||D.modulatedGenerators[I.pan]))}this._voiceCount+=u.length,t&&this.synthCore.callEvent("noteOn",{midiNote:A,channel:this.channel,velocity:e})}function Bi(A){if(A>127||A<0)return;if(this.synthCore.systemParameters.blackMIDIMode&&!this._drumChannel||this._drumChannel&&this.drumParams[A].rxNoteOff){this.killNote(A),this.synthCore.callEvent("noteOff",{midiNote:A,channel:this.channel});return}this.playingNotes[A]=!1;let e=!this._midiParameters.polyMode,t=this._midiControllers[Q.sustainPedal]>=8192&&!e,s=0,n=this.noteOffID[A];if(n<this.noteOnID[A]&&this.noteOffID[A]++,this._voiceCount>0){for(let a of this.synthCore.voices)if(a.channel===this.channel&&a.isActive&&a.midiNote===A&&a.noteID===n&&!a.isInRelease&&(t?a.isHeld=!0:a.releaseVoice(this.synthCore.currentTime),++s>=this._voiceCount))break}if(this.synthCore.callEvent("noteOff",{midiNote:A,channel:this.channel}),e){let a=this.playingNotes.lastIndexOf(!0);a===-1?this.lastMonoNote=-1:this.lastMonoNote===A&&this.noteOn(a,this.lastMonoVelocity,!1)}}function di(A){if(this._systemParameters.presetLock)return;this.patch.program=A;let e=this.synthCore.soundBankManager.getPreset(this.patch,this.channelSystem);!e&&(e=this.synthCore.missingPresetHandler(this.patch,this.channelSystem),!e)||(this.preset=e,e.isDrum!==this._drumChannel&&this.setDrumFlag(e.isDrum),this.resetDrumParams(),this.synthCore.callEvent("programChange",{channel:this.channel,bankLSB:this.preset.bankLSB,bankMSB:this.preset.bankMSB,program:this.preset.program,name:this.preset.name,isGMGSDrum:this.preset.isGMGSDrum,isDrum:this.preset.isDrum}))}var Ei=[jA.fromModulator(new Ce(Je(ne.linear,!0,!1,!0,Q.vibratoRate),0,I.vibLfoRate,1e3,0))],Qi=class{modulatorList=[];active=!1;channel;constructor(A){this.channel=A}resetModulators(){this.modulatorList=Ei.map(A=>({mod:A,id:this.getModulatorID(A.primarySource.toSourceEnum(),A.destination,A.primarySource.isBipolar,A.primarySource.isNegative)})),this.active=!1}setupReceiver(A,e,t,s,n,a=!1){this.active=!0;let i=e-64,r=i/64,o=e/127;switch(A&15){case 0:{let g=Math.min(24,Math.max(-24,i));this.setModulator(t,s,I.fineTune,g*100,a),c.coolInfo(`Channel ${this.channel} ${n} pitch control`,g,"semitones");break}case 1:this.setModulator(t,s,I.initialFilterFc,r*9600,a),c.coolInfo(`Channel ${this.channel} ${n} filter control`,r*9600,"cents");break;case 2:this.setModulator(t,s,I.amplitude,r*1e3,a),c.coolInfo(`Channel ${this.channel} ${n} amplitude control`,r*100,"%");break;case 3:this.setModulator(t,s,I.vibLfoRate,r*1e3,a),c.coolInfo(`Channel ${this.channel} ${n} LFO1 rate control`,r*10,"Hz");break;case 4:this.setModulator(t,s,I.vibLfoToPitch,o*600,a),c.coolInfo(`Channel ${this.channel} ${n} LFO1 pitch depth control`,o*600,"cents");break;case 5:this.setModulator(t,s,I.vibLfoToFilterFc,o*2400,a),c.coolInfo(`Channel ${this.channel} ${n} LFO1 filter depth control`,o*2400,"cents");break;case 6:this.setModulator(t,s,I.vibLfoAmplitudeDepth,o*1e3,a),c.coolInfo(`Channel ${this.channel} ${n} LFO1 amplitude depth control`,o*100,"%");break;case 7:this.setModulator(t,s,I.modLfoRate,r*1e3,a),c.coolInfo(`Channel ${this.channel} ${n} LFO2 rate control`,r*10,"Hz");break;case 8:this.setModulator(t,s,I.modLfoToPitch,o*600,a),c.coolInfo(`Channel ${this.channel} ${n} LFO2 pitch depth control`,o*600,"cents");break;case 9:this.setModulator(t,s,I.modLfoToFilterFc,o*2400,a),c.coolInfo(`Channel ${this.channel} ${n} LFO2 filter depth control`,o*2400,"cents");break;case 10:this.setModulator(t,s,I.modLfoAmplitudeDepth,o*1e3,a),c.coolInfo(`Channel ${this.channel} ${n} LFO2 amplitude depth control`,o*100,"%");break}}setModulator(A,e,t,s,n=!1,a=!1){let i=this.getModulatorID(A,t,n,a);s===0&&this.deleteModulator(i);let r=this.modulatorList.find(o=>o.id===i);if(r)r.mod.transformAmount=s;else{let o=jA.fromData(new Ge(A,ne.linear,e,n),new Ge,t,s,0);this.modulatorList.push({mod:o,id:i})}}getModulatorID(A,e,t,s){return`${A}-${e}-${t}-${s}`}deleteModulator(A){this.modulatorList=this.modulatorList.filter(e=>e.id!==A)}},fi=1e3/200;function ui(A,e,t){let s=A.modulators[t];if(s.transformAmount===0)return A.modulatorValues[t]=0,0;let n=s.primarySource.getValue(this,e,A),a=s.secondarySource.getValue(this,e,A),i=s.transformAmount;s.isEffectModulator&&i<=1e3&&(i*=fi,i=Math.min(i,1e3));let r=n*a*i;return s.transformType===2&&(r=Math.abs(r)),s.isDefaultResonantModulator&&(A.resonanceOffset=Math.max(0,r/2)),s.isModWheelModulator&&(r*=this._midiParameters.modulationDepth/50),A.modulatorValues[t]=r,r}function mi(A,e=-1,t=0){let s=A.modulators,n=A.generators;if(this.generators.offsetsEnabled){let o=this.generators.offsets;n=new Int16Array(n);for(let g=0;g<n.length;g++)n[g]+=o[g]}let a=A.modulatedGenerators,i=this.perNotePitch?this.pitchWheels[A.midiNote]:this._midiParameters.pitchWheel;if(e===-1){a.set(n);for(let o=0;o<s.length;o++){let g=s[o];a[g.destination]=Math.min(32767,Math.max(-32768,a[g.destination]+this.computeModulator(A,i,o)))}for(let o=0;o<a.length;o++){let g=Fe[o];g&&(a[o]=Math.min(g.max,Math.max(g.min,a[o])))}return}let r=!!e;for(let o=0;o<s.length;o++){let g=s[o];if(g.primarySource.isCC===r&&g.primarySource.index===t||g.secondarySource.isCC===r&&g.secondarySource.index===t){let C=g.destination,l=n[C];this.computeModulator(A,i,o);for(let d=0;d<s.length;d++)s[d].destination===C&&(l+=A.modulatorValues[d]);let h=Fe[C];a[C]=Math.max(h.min,Math.min(l,h.max))}}}var Ca=class la{pitch=0;gain=1;exclusiveClass=0;pan=64;reverbGain=0;chorusGain=1;delayGain=1;rxNoteOn=!0;rxNoteOff=!1;static copyFrom(e){let t=new la;return t.pitch=e.pitch,t.chorusGain=e.chorusGain,t.reverbGain=e.reverbGain,t.exclusiveClass=e.exclusiveClass,t.gain=e.gain,t.pan=e.pan,t.rxNoteOff=e.rxNoteOff,t.rxNoteOn=e.rxNoteOn,t}};function pi(){return{patch:this.preset?{...this.patch,name:this.preset.name,isDrum:this.preset.isDrum}:void 0,lockedSystem:this.lockedSystem,midiControllers:this._midiControllers.slice(),lockedControllers:[...this.lockedControllers],pitchWheels:this.pitchWheels.slice(),generators:{...this.generators,offsets:this.generators.offsets.slice(),overrides:this.generators.overrides.slice()},midiParameters:{...this._midiParameters},lockedMIDIParameters:{...this.lockedMIDIParameters},systemParameters:{...this._systemParameters},octaveTuning:this.octaveTuning.slice(),perNotePitch:this.perNotePitch,drumParams:this.drumParams.map(A=>({...A})),drumChannel:this._drumChannel,channel:this.channel}}function Di(A){this.setDrums(A.drumChannel),this._midiControllers.set(A.midiControllers);for(let e=0;e<128;e++)this.lockController(e,A.lockedControllers[e]);this.pitchWheels.set(A.pitchWheels),this.octaveTuning.set(A.octaveTuning),this.perNotePitch=A.perNotePitch,this.generators.offsets.set(A.generators.offsets),this.generators.overrides.set(A.generators.overrides),this.generators.offsetsEnabled=A.generators.offsetsEnabled,this.generators.overridesEnabled=A.generators.overridesEnabled;for(let e=0;e<128;e++)this.drumParams[e]=Ca.copyFrom(A.drumParams[e]);this.setSystemParameter("presetLock",!1),A.patch&&this.setPatch(A.patch),this.lockedSystem=A.lockedSystem;for(let e of Object.keys(A.lockedMIDIParameters))this.lockMIDIParameter(e,!1);for(let[e,t]of Object.entries(A.midiParameters))this.setMIDIParameter(e,t);for(let[e,t]of Object.entries(A.lockedMIDIParameters))this.lockMIDIParameter(e,t);for(let[e,t]of Object.entries(A.systemParameters))this.setSystemParameter(e,t)}var Ds={pitchWheel:8192,pitchWheelRange:2,pressure:0,modulationDepth:50,rxChannel:0,polyMode:!0,keyShift:0,fineTune:0,randomPan:!1,assignMode:2,efxAssign:!1,cc1:16,cc2:17,drumMap:0,velocitySenseDepth:64,velocitySenseOffset:64};function yi(A,e){if(!this.lockedMIDIParameters[A]){switch(this._midiParameters[A]=e,A){case"pitchWheel":this.computeModulatorsAll(0,se.pitchWheel);break;case"pressure":this.computeModulatorsAll(0,se.channelPressure);break}this.updateInternalParams(),this.synthCore.callEvent("channelParamChange",{channel:this.channel,parameter:A,value:e})}}function wi(A,e){this.lockedMIDIParameters[A]=e}var ki={presetLock:!1,isMuted:!1,gain:1,pan:0,keyShift:0,fineTune:0,interpolationType:null,nrpnParamLock:null,monophonicRetrigger:null};function Si(A,e){if(this._systemParameters[A]===e)return;let t=this._systemParameters[A];switch(this._systemParameters[A]=e,this.updateInternalParams(),A){default:break;case"presetLock":e&&(this.lockedSystem=this.synthCore.midiParameters.system);break;case"isMuted":e&&this.stopAllNotes(!0);break;case"keyShift":!this._drumChannel&&t!==e&&this.stopAllNotes(!0)}}var Mi=class{pitchWheels=new Int16Array(128).fill(8192);drumParams=[];dynamicModulators;sf2NRPNGeneratorLSB=0;patch={bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1};preset;lockedSystem="gs";channel;synthCore;setSystemParameter=Si.bind(this);lockMIDIParameter=wi.bind(this);noteOn=hi.bind(this);noteOff=Bi.bind(this);programChange=di.bind(this);controllerChange=ii.bind(this);reset=un.bind(this);renderVoice=ni.bind(this);setMIDIParameter=yi.bind(this);lockedControllers=new Array(128).fill(!1);_midiControllers=new Int16Array(128);octaveTuning=new Int8Array(128);resetRP15=mn.bind(this);dataEntry=Ii.bind(this);lockedMIDIParameters=Object.fromEntries(Object.keys(Ds).map(A=>[A,!1]));_midiParameters={...Ds};_systemParameters={...ki};noteOnID=new Array(128).fill(0);noteOffID=new Array(128).fill(0);lastParameterIsRegistered=!0;perNotePitch=!1;currentPan=0;currentTuning=0;currentKeyShift=0;currentGain=0;lastPortamentoNote=-1;portamentoForce=!1;lastMonoNote=-1;lastMonoVelocity=0;playingNotes=new Array(128).fill(!1);generators={offsets:new Int16Array(Xe),offsetsEnabled:!1,overrides:new Int16Array(Xe),overridesEnabled:!1};computeModulator=ui.bind(this);computeModulators=mi.bind(this);constructor(A,e,t){this.synthCore=A,this.preset=e,this.channel=t,this._midiParameters.rxChannel=t,this.dynamicModulators=new Qi(t),this.resetGeneratorOverrides(),this.resetGeneratorOffsets();for(let s=0;s<128;s++)this.drumParams.push(new Ca);this.resetDrumParams()}_voiceCount=0;get voiceCount(){return this._voiceCount}set voiceCount(A){this._voiceCount=A}_drumChannel=!1;get drumChannel(){return this._drumChannel}get midiControllers(){return this._midiControllers}get systemParameters(){return this._systemParameters}get midiParameters(){return this._midiParameters}get channelSystem(){return this._systemParameters.presetLock?this.lockedSystem:this.synthCore.midiParameters.system}lockController(A,e){this.lockedControllers[A]=e}setDrums(A){if(he.isSystemXG(this.channelSystem))if(A)this.setBankMSB(he.getDrumBank(this.channelSystem)),this.setBankLSB(0);else{if(this.channel%16===9)throw new Error(`Cannot disable drums on channel ${this.channel} for XG.`);this.setBankMSB(0),this.setBankLSB(0)}else this.setGSDrums(A);this.setDrumFlag(A),this.programChange(this.patch.program)}stopAllNotes(A=!1){if(this.noteOnID.fill(0),this.noteOffID.fill(0),this.playingNotes.fill(!1),A){let e=0;if(this._voiceCount>0){for(let t of this.synthCore.voices)if(t.channel===this.channel&&t.isActive&&(t.isActive=!1,++e>=this._voiceCount))break}this.clearVoiceCount()}else{let e=0;if(this._voiceCount>0){for(let t of this.synthCore.voices)if(t.channel===this.channel&&t.isActive&&(t.releaseVoice(this.synthCore.currentTime),++e>=this._voiceCount))break}}this.synthCore.callEvent("stopAll",{channel:this.channel,force:A})}clearVoiceCount(){this._voiceCount=0}setOctaveTuning(A){if(A.length!==12)throw new Error("Tuning is not the length of 12.");for(let e=0;e<128;e++)this.octaveTuning[e]=A[e%12]}pitchWheel(A,e=-1){e===-1?(this.perNotePitch=!1,this.setMIDIParameter("pitchWheel",A)):(this.perNotePitch||this.pitchWheels.fill(this._midiParameters.pitchWheel),this.perNotePitch=!0,this.pitchWheels[e]=A,this.computeModulatorsAll(0,se.pitchWheel))}polyPressure(A,e){let t=0;if(this._voiceCount>0){for(let s of this.synthCore.voices)if(s.isActive&&s.channel===this.channel&&s.midiNote===A&&(s.pressure=e,this.computeModulators(s,0,se.polyPressure),++t>=this._voiceCount))break}this.synthCore.callEvent("polyPressure",{channel:this.channel,midiNote:A,pressure:e})}updateInternalParams(){let A=this.synthCore.systemParameters,e=this._systemParameters,t=this.synthCore.midiParameters,s=this._midiParameters,n=this._drumChannel?e.keyShift:A.keyShift+t.keyShift+e.keyShift+s.keyShift;this.currentKeyShift=Math.trunc(n),this.currentTuning=this._drumChannel?e.fineTune:A.fineTune+t.fineTune+e.fineTune+s.fineTune;let a=A.pan+t.pan+e.pan;this.currentPan=a*500,this.currentGain=Va*A.gain*Math.pow(t.volume,2)*e.gain}setPatch(A){this.setBankMSB(A.bankMSB),this.setBankLSB(A.bankLSB),this.setGSDrums(A.isGMGSDrum),this.programChange(A.program)}setGSDrums(A){A!==this.patch.isGMGSDrum&&(this.setBankLSB(0),this.setBankMSB(0),this.patch.isGMGSDrum=A)}killNote(A,e=-12e3){let t=0;if(this.noteOffID[A]=0,this.noteOnID[A]=0,this._voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&s.midiNote===A&&(s.overrideReleaseVolEnv=e,s.isInRelease=!1,s.releaseVoice(this.synthCore.currentTime),++t>=this._voiceCount))break}}applySnapshot(A){Di.call(this,A)}getSnapshot(){return pi.call(this)}setLastNote(A){this.lastPortamentoNote=A}destroy(){this.preset=void 0,this.lockedControllers=void 0,this._systemParameters=void 0,this._midiControllers=void 0,this._midiParameters=void 0}resetGeneratorOverrides(){this.generators.overrides.fill(Ha),this.generators.overridesEnabled=!1}setGeneratorOverride(A,e,t=!1){if(this.generators.overrides[A]=e,this.generators.overridesEnabled=!0,t){let s=0;if(this._voiceCount>0){for(let n of this.synthCore.voices)if(n.channel===this.channel&&n.isActive&&(n.generators[A]=e,this.computeModulators(n),++s>=this._voiceCount))break}}}resetGeneratorOffsets(){this.generators.offsets.fill(0),this.generators.offsetsEnabled=!1}setGeneratorOffset(A,e){this.generators.offsets[A]=e*Fe[A].nrpn,this.generators.offsetsEnabled=!0;let t=0;if(this._voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&(this.computeModulators(s),++t>=this._voiceCount))break}}resetDrumParams(){if(!(this.synthCore.systemParameters.drumLock||!this._drumChannel))for(let A=0;A<128;A++){let e=this.drumParams[A];e.pitch=0,e.gain=1,e.exclusiveClass=0,e.pan=64,e.reverbGain=YA[A]/127,e.chorusGain=this.channelSystem==="xg"?YA[A]/127:0,e.delayGain=0,e.rxNoteOn=!0,e.rxNoteOff=!1}}computeModulatorsAll(A,e){let t=0;if(this._voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&(this.computeModulators(s,A,e),++t>=this._voiceCount))break}}setBankMSB(A){this._systemParameters.presetLock||(this.patch.bankMSB=A)}setBankLSB(A){this._systemParameters.presetLock||(this.patch.bankLSB=A)}setDrumFlag(A){this._systemParameters.presetLock||!this.preset||this._drumChannel===A||(this._drumChannel=A,this.updateInternalParams())}},Li=class extends uA{constructor(A,e){super(A.parentSoundBank,A.globalZone),this.bankMSB=he.addBankOffset(A.bankMSB,e,!0),this.name=A.name,this.bankLSB=A.bankLSB,this.isGMGSDrum=A.isGMGSDrum,this.program=A.program,this.genre=A.genre,this.morphology=A.morphology,this.library=A.library,this.zones=A.zones}},vi=class{soundBankList=[];presetListChangeCallback;selectablePresetList=[];constructor(A){this.presetListChangeCallback=A}_presetList=[];get presetList(){return[...this._presetList]}get priorityOrder(){return this.soundBankList.map(A=>A.id)}set priorityOrder(A){this.soundBankList.sort((e,t)=>A.indexOf(e.id)-A.indexOf(t.id)),this.generatePresetList()}deleteSoundBank(A){if(this.soundBankList.length===0){c.warn("1 soundbank left. Aborting!");return}let e=this.soundBankList.findIndex(t=>t.id===A);if(e===-1)throw new Error(`No sound bank with id "${A}"`);this.soundBankList.splice(e,1),this.generatePresetList()}addSoundBank(A,e,t=0){let s=this.soundBankList.find(n=>n.id===e);s===void 0?this.soundBankList.push({id:e,soundBank:A,bankOffset:t}):(s.soundBank=A,s.bankOffset=t),this.generatePresetList()}getPreset(A,e){if(!(this.soundBankList.length===0||this.selectablePresetList.length===0))return be.selectPatch(this.selectablePresetList,A,e)}destroy(){for(let A of this.soundBankList)A.soundBank.destroySoundBank();this.soundBankList=[]}generatePresetList(){let A=new Array,e=new Set;for(let t of this.soundBankList){let s=t.soundBank,n=t.bankOffset;for(let a of s.presets){let i=new Li(a,n);e.has(i.toMIDIString())||(e.add(i.toMIDIString()),A.push(i))}}A.sort(be.compare.bind(be)),this.selectablePresetList=A,this._presetList=A.map(t=>({bankMSB:t.bankMSB,bankLSB:t.bankLSB,program:t.program,isGMGSDrum:t.isGMGSDrum,name:t.name,isDrum:t.isDrum})),this.presetListChangeCallback()}};function ys(A,e,t){let s=A,n=e<<7|t;return A===127&&e===127&&t===127?-1:s+n*61e-6}function Fi(A,e=0){switch(A[2]){case 4:switch(A[3]){default:c.gmFail("Device Control",A);break;case 1:{let t=A[5]<<7|A[4];this.setMIDIParameter("volume",t/16383),c.gmInfo("Master Volume",t);break}case 2:{let t=((A[5]<<7|A[4])-8192)/8192;this.setMIDIParameter("pan",t),c.gmInfo("Master Balance",t);break}case 3:{let t=((A[5]<<7|A[4])-8192)/81.92;this.setMIDIParameter("fineTune",t),c.gmInfo("Master Fine Tuning",t,"cents");break}case 4:{let t=A[5]-64;this.setMIDIParameter("keyShift",t),c.gmInfo("Master Coarse Tuning",t,"keys");break}case 5:if(A[4]!==1||A[5]!==1||A[6]!==1||A[7]!==1){c.gmFail("Global Parameter Control",A);break}switch(A[8]){default:c.gmFail("Global Parameter Control",A);break;case 1:{let t=A[10];switch(A[9]){default:c.gmFail("Reverb Parameter Control",A);break;case 0:{let s=t===8?5:t;this.setReverbMacro(s),c.gmInfo("Reverb Type",s);break}case 1:this.reverbProcessor.time=t,c.gmInfo("Reverb Time",t)}break}case 2:{let t=A[10];switch(A[9]){default:c.gmFail("Chorus Parameter Control",A);break;case 0:this.setChorusMacro(t),c.gmInfo("Chorus Type",t);break;case 1:this.chorusProcessor.rate=t,c.gmInfo("Chorus Mod Rate",t);break;case 2:this.chorusProcessor.depth=t,c.gmInfo("Chorus Mod Depth",t);break;case 3:this.chorusProcessor.feedback=t,c.gmInfo("Chorus Mod Feedback",t);break;case 4:this.chorusProcessor.sendLevelToReverb=t,c.gmInfo("Chorus Send to Reverb",t);break}}}}break;case 9:switch(A[3]){default:c.gmFail("System Exclusive",A);break;case 1:c.coolInfo("MIDI System","General MIDI 1"),this.reset("gm");break;case 2:c.coolInfo("MIDI System","Roland GS"),this.reset("gs");break;case 3:c.coolInfo("MIDI System","General MIDI 2"),this.reset("gm2");break}break;case 8:{let t=4;switch(A[3]){case 1:{let s=A[t++],n=ve(A,16,t);if(t+=16,A.length<384){c.warn(`The Bulk Tuning Dump is too short! (${A.length} bytes, at least 384 are expected)`);return}for(let a=0;a<128;a++)this.tunings[s*128+a]=ys(A[t++],A[t++],A[t++]);c.gmInfo("Bulk Tuning Dump",`${n}, program ${s}`);break}case 2:case 7:{A[3]===7&&t++;let s=A[t++],n=A[t++];for(let a=0;a<n;a++){let i=A[t++];this.tunings[s*128+i]=ys(A[t++],A[t++],A[t++])}c.gmInfo("Single Note Tuning",`program: ${s}. Keys affected: ${n}`);break}case 9:case 8:{let s=new Int8Array(12);if(A[3]===8)for(let n=0;n<12;n++)s[n]=A[7+n]-64;else for(let n=0;n<24;n+=2){let a=(A[7+n]<<7|A[8+n])-8192;s[n/2]=Math.floor(a/81.92)}(A[4]&1)===1&&this.midiChannels[14+e].setOctaveTuning(s),(A[4]>>1&1)===1&&this.midiChannels[15+e].setOctaveTuning(s);for(let n=0;n<7;n++)(A[5]>>n&1)===1&&this.midiChannels[7+n+e].setOctaveTuning(s);for(let n=0;n<7;n++)(A[6]>>n&1)===1&&this.midiChannels[n+e].setOctaveTuning(s);c.gmInfo("Octave Scale Tuning",s.join(" "));break}default:c.gmFail("MIDI Tuning Standard",A);break}break}default:c.gmFail("Universal System Exclusive",A)}}function Ri(A,e=0){if(A[3]===18)switch(A[2]){case 66:{let t=A[4],s=A[5],n=A[6],a=Math.min(A[7],127);if(t===0&&s===0&&n===127&&(a===0||a===1)){if(a===1)for(c.gsInfo("Mode","Double Module");this.midiChannels.length<32;)this.createMIDIChannel(!0);c.coolInfo("MIDI System","Roland GS"),this.reset("gs");return}if(t===64||t===80){if(t===80&&(e+=16),s===0){switch(n){case 0:{let i=((a<<12|A[8]<<8|A[9]<<4|A[10])-1024)/10;this.setMIDIParameter("fineTune",i),c.gsInfo("Master Tune",i,"cents");break}case 4:c.gsInfo("Master Volume",a),this.setMIDIParameter("volume",a/127);break;case 5:{let i=a-64;c.gsInfo("Master Key-Shift",i,"keys"),this.setMIDIParameter("keyShift",i);break}case 6:{let i=(a-64)/63;c.gsInfo("Master Pan",i),this.setMIDIParameter("pan",i);break}case 127:a===0?(c.coolInfo("MIDI System","Roland GS"),this.reset("gs")):a===127&&(c.coolInfo("MIDI System","General MIDI 1"),this.reset("gm"));break;default:c.gsFail("System Parameter",A);break}return}if(s===1){let i=n>=48&&n<=55,r=n>=56&&n<=64,o=n>=80&&n<=90;if(i&&this.systemParameters.reverbLock||r&&this.systemParameters.chorusLock||o&&this.systemParameters.delayLock)return;switch(n){default:c.gsFail("Patch Common Parameter",[n]);break;case 0:{let g=ve(A,16,7);c.gsInfo("Patch name",g),this.callEvent("displayMessage",[...A]);break}case 48:this.setReverbMacro(a),c.gsInfo("Reverb Macro",a);break;case 49:this.reverbProcessor.character=a,c.gsInfo("Reverb Character",a),this.callEvent("effectChange",{effect:"reverb",parameter:"character",value:a});break;case 50:this.reverbProcessor.preLowpass=a,c.gsInfo("Reverb Pre-LPF",a),this.callEvent("effectChange",{effect:"reverb",parameter:"preLowpass",value:a});break;case 51:this.reverbProcessor.level=a,c.gsInfo("Reverb Level",a),this.callEvent("effectChange",{effect:"reverb",parameter:"level",value:a});break;case 52:this.reverbProcessor.time=a,c.gsInfo("Reverb Time",a),this.callEvent("effectChange",{effect:"reverb",parameter:"time",value:a});break;case 53:this.reverbProcessor.delayFeedback=a,c.gsInfo("Reverb Delay Feedback",a),this.callEvent("effectChange",{effect:"reverb",parameter:"delayFeedback",value:a});break;case 54:break;case 55:this.reverbProcessor.preDelayTime=a,c.gsInfo("Reverb Predelay Time",a),this.callEvent("effectChange",{effect:"reverb",parameter:"preDelayTime",value:a});break;case 56:this.setChorusMacro(a),c.gsInfo("Chorus Macro",a);break;case 57:this.chorusProcessor.preLowpass=a,c.gsInfo("Chorus Pre-LPF",a),this.callEvent("effectChange",{effect:"chorus",parameter:"preLowpass",value:a});break;case 58:this.chorusProcessor.level=a,c.gsInfo("Chorus Level",a),this.callEvent("effectChange",{effect:"chorus",parameter:"level",value:a});break;case 59:this.chorusProcessor.feedback=a,c.gsInfo("Chorus Feedback",a),this.callEvent("effectChange",{effect:"chorus",parameter:"feedback",value:a});break;case 60:this.chorusProcessor.delay=a,c.gsInfo("Chorus Delay",a),this.callEvent("effectChange",{effect:"chorus",parameter:"delay",value:a});break;case 61:this.chorusProcessor.rate=a,c.gsInfo("Chorus Rate",a),this.callEvent("effectChange",{effect:"chorus",parameter:"rate",value:a});break;case 62:this.chorusProcessor.depth=a,c.gsInfo("Chorus Depth",a),this.callEvent("effectChange",{effect:"chorus",parameter:"depth",value:a});break;case 63:this.chorusProcessor.sendLevelToReverb=a,c.gsInfo("Chorus Send Level To Reverb",a),this.callEvent("effectChange",{effect:"chorus",parameter:"sendLevelToReverb",value:a});break;case 64:this.chorusProcessor.sendLevelToDelay=a,this.updateActiveEffects(),c.gsInfo("Chorus Send Level To Delay",a),this.callEvent("effectChange",{effect:"chorus",parameter:"sendLevelToDelay",value:a});break;case 80:this.setDelayMacro(a),c.gsInfo("Delay Macro",a);break;case 81:this.delayProcessor.preLowpass=a,c.gsInfo("Delay Pre-LPF",a),this.callEvent("effectChange",{effect:"delay",parameter:"preLowpass",value:a});break;case 82:this.delayProcessor.timeCenter=a,c.gsInfo("Delay Time Center",a),this.callEvent("effectChange",{effect:"delay",parameter:"timeCenter",value:a});break;case 83:this.delayProcessor.timeRatioLeft=a,c.gsInfo("Delay Time Ratio Left",a),this.callEvent("effectChange",{effect:"delay",parameter:"timeRatioLeft",value:a});break;case 84:this.delayProcessor.timeRatioRight=a,c.gsInfo("Delay Time Ratio Right",a),this.callEvent("effectChange",{effect:"delay",parameter:"timeRatioRight",value:a});break;case 85:this.delayProcessor.levelCenter=a,c.gsInfo("Delay Level Center",a),this.callEvent("effectChange",{effect:"delay",parameter:"levelCenter",value:a});break;case 86:this.delayProcessor.levelLeft=a,c.gsInfo("Delay Level Left",a),this.callEvent("effectChange",{effect:"delay",parameter:"levelLeft",value:a});break;case 87:this.delayProcessor.levelRight=a,c.gsInfo("Delay Level Right",a),this.callEvent("effectChange",{effect:"delay",parameter:"levelRight",value:a});break;case 88:this.delayProcessor.level=a,c.gsInfo("Delay Level",a),this.callEvent("effectChange",{effect:"delay",parameter:"level",value:a});break;case 89:this.delayProcessor.feedback=a,c.gsInfo("Delay Feedback",a),this.callEvent("effectChange",{effect:"delay",parameter:"feedback",value:a});break;case 90:this.delayProcessor.sendLevelToReverb=a,c.gsInfo("Delay Send Level To Reverb",a),this.callEvent("effectChange",{effect:"delay",parameter:"sendLevelToReverb",value:a});break}break}if(s===3){if(this.systemParameters.insertionEffectLock)return;if(n>=3&&n<=25&&(this.insertionParams[n-3]=a),n>=3&&n<=22){this.insertionProcessor.setParameter(n,a),c.gsInfo(`EFX Parameter ${n-2}`,a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return}switch(n){default:c.gsFail("Insertion Effect",[n]);return;case 0:{let i=a<<8|A[8],r=this.insertionEffects.get(i);r?(c.gsInfo("EFX Type",i.toString(16)),this.insertionProcessor=r):(this.insertionProcessor=this.insertionFallback,c.gsFail("EFX Processor",[i],"Using Thru.")),this.resetInsertionParams(),this.insertionProcessor.reset(),this.callEvent("effectChange",{effect:"insertion",parameter:0,value:i});return}case 23:this.insertionProcessor.sendLevelToReverb=a/127*GA,c.gsInfo("EFX Send Level to Reverb",a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return;case 24:this.insertionProcessor.sendLevelToChorus=a/127*GA,c.gsInfo("EFX Send Level to Chorus",a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return;case 25:this.insertionProcessor.sendLevelToDelay=a/127*GA,this.updateActiveEffects(),c.gsInfo("EFX Send Level to Delay",a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return}}if(s>>4===1){let i=_.syxToChannel(s&15)+e,r=this.midiChannels[i];switch(r||c.gsFail(`Patch Parameter for ${i}`,A,"Invalid channel number"),n){default:c.gsFail(`Patch Part Parameter for ${i}`,[n]);return;case 0:r.controllerChange(Q.bankSelect,a),r.programChange(A[8]);break;case 2:{let o=a===16?-1:a+e;r.setMIDIParameter("rxChannel",o),this.customChannelNumbers||=o!==r.channel,c.gsInfo(`Rx. Channel on ${i}`,o);break}case 19:r.setMIDIParameter("polyMode",a===1),c.gsInfo(`Mono/poly on ${i}`,r.midiParameters.polyMode?"POLY":"MONO");break;case 20:r.setMIDIParameter("assignMode",a),c.gsInfo(`Assign mode on ${i}`,a);break;case 21:{r.setMIDIParameter("drumMap",a);let o=a>0;r.setGSDrums(o),c.gsInfo(`Drums on ${i}`,o.toString());return}case 22:{let o=a-64;r.setMIDIParameter("keyShift",o),c.gsInfo(`Key Shift for ${i}`,o);return}case 25:r.controllerChange(Q.mainVolume,a);return;case 26:r.setMIDIParameter("velocitySenseDepth",a),c.gsInfo(`Velocity Sense Depth for ${i}`,a);return;case 27:r.setMIDIParameter("velocitySenseOffset",a),c.gsInfo(`Velocity Sense Offset for ${i}`,a);return;case 28:{let o=a,g=o===0;r.setMIDIParameter("randomPan",g),g?c.gsInfo(`Random pan on ${i}`,"ON"):r.controllerChange(Q.pan,o);break}case 31:r.setMIDIParameter("cc1",a),c.gsInfo(`CC1 Controller Number for ${i}`,a);break;case 32:r.setMIDIParameter("cc2",a),c.gsInfo(`CC2 Controller Number for ${i}`,a);break;case 33:r.controllerChange(Q.chorusDepth,a);break;case 34:r.controllerChange(Q.reverbDepth,a);break;case 42:{let o=((a<<7|A[8])-8192)/81.92;r.setMIDIParameter("fineTune",o),c.gsInfo(`Fine tuning for ${i}`,Math.round(o),"cents");break}case 44:r.controllerChange(Q.variationDepth,a);break;case 48:r.controllerChange(Q.vibratoRate,a);break;case 49:r.controllerChange(Q.vibratoDepth,a);break;case 50:r.controllerChange(Q.brightness,a);break;case 51:r.controllerChange(Q.filterResonance,a);break;case 52:r.controllerChange(Q.attackTime,a);break;case 53:r.controllerChange(Q.decayTime,a);break;case 54:r.controllerChange(Q.releaseTime,a);break;case 55:r.controllerChange(Q.vibratoDelay,a);break;case 64:{let o=A.length-9,g=new Int8Array(12);for(let C=0;C<o;C++)g[C]=A[C+7]-64;r.setOctaveTuning(g),c.gsInfo(`Octave Scale Tuning for ${i}`,g.join(", "));break}}return}if(s>>4===2){let i=_.syxToChannel(s&15)+e,r=this.midiChannels[i];switch(n&240){default:c.gsFail(`Patch Parameter Controller for ${i}`,[n&240]);break;case 0:if((n&15)===4){let o=a/127*600;r.setMIDIParameter("modulationDepth",o),c.gsInfo(`Modulation depth for ${i}`,Math.round(o),"cents");break}r.dynamicModulators.setupReceiver(n,a,Q.modulationWheel,!0,"mod wheel");break;case 16:if((n&15)===0){let o=a-64;r.setMIDIParameter("pitchWheelRange",o),c.gsInfo(`Pitch Wheel Range for ${i}`,o,"semitones");break}r.dynamicModulators.setupReceiver(n,a,se.pitchWheel,!1,"pitch wheel",!0);break;case 32:r.dynamicModulators.setupReceiver(n,a,se.channelPressure,!1,"channel pressure");break;case 48:r.dynamicModulators.setupReceiver(n,a,se.polyPressure,!1,"poly pressure");break;case 64:r.dynamicModulators.setupReceiver(n,a,r.midiParameters.cc1,!0,"CC1");break;case 80:r.dynamicModulators.setupReceiver(n,a,r.midiParameters.cc2,!0,"CC2")}return}if(s>>4===4){let i=_.syxToChannel(s&15)+e,r=this.midiChannels[i];switch(n){default:c.gsFail("Patch Part Parameter",[n]);break;case 0:case 1:r.controllerChange(Q.bankSelectLSB,a);break;case 34:{let o=a===1;r.setMIDIParameter("efxAssign",o),c.gsInfo(`EFX assign for ${i}`,o?"EFX":"BYPASS"),this.updateActiveEffects()}}return}c.gsFail("Patch Parameter",A);return}if(t===65||t===81){if(this.systemParameters.drumLock)return;let i=(s>>4)+1,r=n,o=s&15;switch(o){default:c.gsFail("Drum Setup",[o]);return;case 0:{let g=ve(A,12,7);c.gsInfo(`Drum Map Name for MAP${i}`,g),this.callEvent("displayMessage",[...A]);break}case 1:{let g=a-60;for(let C of this.midiChannels)C.midiParameters.drumMap===i&&(C.drumParams[r].pitch=g*(C.patch.bankLSB===1?100:50));c.gsInfo(`Drum Pitch for MAP${i}, key ${r}`,g);break}case 2:for(let g of this.midiChannels)g.midiParameters.drumMap===i&&(g.drumParams[r].gain=a/120);c.gsInfo(`Drum Level for MAP${i}, key ${r}`,a);break;case 3:for(let g of this.midiChannels)g.midiParameters.drumMap===i&&(g.drumParams[r].exclusiveClass=a);c.gsInfo(`Drum Assign Group for MAP${i}, key ${r}`,a);break;case 4:for(let g of this.midiChannels)g.midiParameters.drumMap===i&&(g.drumParams[r].pan=a);c.gsInfo(`Drum Pan for MAP${i}, key ${r}`,a);break;case 5:for(let g of this.midiChannels)g.midiParameters.drumMap===i&&(g.drumParams[r].reverbGain=a/127);c.gsInfo(`Drum Reverb for MAP${i}, key ${r}`,a);break;case 6:for(let g of this.midiChannels)g.midiParameters.drumMap===i&&(g.drumParams[r].chorusGain=a/127);c.gsInfo(`Drum Chorus for MAP${i}, key ${r}`,a);break;case 7:for(let g of this.midiChannels)g.midiParameters.drumMap===i&&(g.drumParams[r].rxNoteOff=a===1);c.gsInfo(`Drum Note Off for MAP${i}, key ${r}`,a===1?"ON":"OFF");break;case 8:for(let g of this.midiChannels)g.midiParameters.drumMap===i&&(g.drumParams[r].rxNoteOn=a===1);c.gsInfo(`Drum Note On for MAP${i}, key ${r}`,a===1?"ON":"OFF");break;case 9:for(let g of this.midiChannels)g.midiParameters.drumMap===i&&(g.drumParams[r].delayGain=a/127);c.gsInfo(`Drum Delay for MAP${i}, key ${r}`,a);break}return}c.gsFail("System Exclusive",A);return}case 69:A[4]===16&&this.callEvent("displayMessage",[...A]);return;case 22:if(A[4]===16){this.setMIDIParameter("volume",A[7]/100),c.coolInfo("Roland Master Volume Control",A[7]);return}else c.unsupported("Roland",A)}else{c.unsupported("Roland",A);return}}function bi(A,e=0){if(A[2]===76){let t=A[3],s=A[4],n=A[5],a=A[6];if(t===0&&s===0){switch(n){case 0:{let i=(((A[6]&15)<<12|(A[7]&15)<<8|(A[8]&15)<<4|A[9]&15)-1024)/10;this.setMIDIParameter("fineTune",i),c.xgInfo("Master Tune",i,"cents")}break;case 4:this.setMIDIParameter("volume",a/127),c.xgInfo("Master Volume",a);break;case 5:{let i=127-a;this.setMIDIParameter("volume",i/127),c.xgInfo("Master Attenuation",a);break}case 6:{let i=a-64;this.setMIDIParameter("keyShift",i),c.xgInfo("Master Transpose",a);break}case 127:case 126:c.coolInfo("MIDI System","Yamaha XG"),this.reset("xg");break}return}if(t===2&&s===1){let i,r=n;r<=21?i="Reverb":r<=53?i="Chorus":i="Variation",c.xgFail(`${i} parameter`,[r]);return}if(t===8){let i=s+e;if(i>=this.midiChannels.length){c.xgFail("Part Setup",A,`Invalid part number: ${i}`);return}let r=this.midiChannels[i];switch(n){default:c.xgFail("Part Setup",[A[5]]);break;case 1:r.controllerChange(Q.bankSelect,a);break;case 2:r.controllerChange(Q.bankSelectLSB,a);break;case 3:r.programChange(a);break;case 4:{let o=a+e;r.setMIDIParameter("rxChannel",o),this.customChannelNumbers||=o!==r.channel,c.xgInfo(`Rev. Channel on ${i}`,o);break}case 5:{let o=a===1;r.setMIDIParameter("polyMode",o),c.xgInfo(`Mono/poly on ${i}`,o?"POLY":"MONO");break}case 6:r.setMIDIParameter("assignMode",a),c.xgInfo(`Same Note Number Key On Assign on ${i}`,a);break;case 7:{let o=a!==0;r.setDrums(o),c.xgInfo(`Part Mode on ${i}`,o?"DRUM":"MELODIC");break}case 8:{let o=a-64;r.setMIDIParameter("keyShift",o),c.xgInfo(`Key Shift on ${i}`,o);break}case 11:r.controllerChange(Q.mainVolume,a);break;case 12:r.setMIDIParameter("velocitySenseDepth",a),c.xgInfo(`Velocity Sense Depth on ${i}`,a);return;case 13:r.setMIDIParameter("velocitySenseOffset",a),c.xgInfo(`Velocity Sense Offset on ${i}`,a);return;case 14:{let o=a,g=o===0;r.setMIDIParameter("randomPan",g),g?c.xgInfo(`Random Pan for ${i}`,"ON"):r.controllerChange(Q.pan,o);break}case 18:r.controllerChange(Q.chorusDepth,a);break;case 19:r.controllerChange(Q.reverbDepth,a);break;case 21:r.controllerChange(Q.vibratoRate,a);break;case 22:r.controllerChange(Q.vibratoDepth,a);break;case 23:r.controllerChange(Q.vibratoDelay,a);break;case 24:r.controllerChange(Q.brightness,a);break;case 25:r.controllerChange(Q.filterResonance,a);break;case 26:r.controllerChange(Q.attackTime,a);break;case 27:r.controllerChange(Q.decayTime,a);break;case 28:r.controllerChange(Q.releaseTime,a);break;case 35:{let o=a-64;r.setMIDIParameter("pitchWheelRange",o),c.xgInfo(`Pitch Wheel Range for ${i}`,o,"semitones")}}return}if(t>>4===3){if(this.systemParameters.drumLock)return;let i=s;switch(n){default:c.xgFail("Drum Setup",[n]);return;case 0:{let r=(a-64)*100;for(let o of this.midiChannels)o.drumChannel&&(o.drumParams[i].pitch=r);c.xgInfo(`Drum Pitch for key ${i}`,r,"semitones");break}case 1:{let r=a-64;for(let o of this.midiChannels)o.drumChannel&&(o.drumParams[i].pitch+=r,c.xgInfo(`Drum Pitch for key ${i}`,o.drumParams[i].pitch,"semitones"));break}case 2:for(let r of this.midiChannels)r.drumChannel&&(r.drumParams[i].gain=a/120);c.xgInfo(`Drum Level for key ${i}`,a);break;case 3:for(let r of this.midiChannels)r.drumChannel&&(r.drumParams[i].exclusiveClass=a);c.xgInfo(`Drum Alternate Group for key ${i}`,a);break;case 4:for(let r of this.midiChannels)r.drumChannel&&(r.drumParams[i].pan=a);c.xgInfo(`Drum Pan for key ${i}`,a);break;case 5:for(let r of this.midiChannels)r.drumChannel&&(r.drumParams[i].reverbGain=a/127);c.xgInfo(`Drum Reverb for key ${i}`,a);break;case 6:for(let r of this.midiChannels)r.drumChannel&&(r.drumParams[i].chorusGain=a/127);c.xgInfo(`Drum Chorus for key ${i}`,a);break;case 9:for(let r of this.midiChannels)r.drumChannel&&(r.drumParams[i].rxNoteOff=a===1);c.xgInfo(`Drum Note Off for key ${i}`,a===1?"ON":"OFF");break;case 10:for(let r of this.midiChannels)r.drumChannel&&(r.drumParams[i].rxNoteOn=a===1);c.xgInfo(`Drum Note On for key ${i}`,a===1?"ON":"OFF");break}return}if(t===6||t===7){this.callEvent("displayMessage",[...A]);return}c.xgFail("System Exclusive",A,"Unknown address")}else c.xgFail("System Exclusive",A)}function Pi(A,e=0){e+=this.portSelectChannelOffset;let t=A[0];if(!(this.systemParameters.deviceID!==-1&&A[1]!==127&&this.systemParameters.deviceID!==A[1]))switch(t){default:c.unsupported("System Exclusive",A,`Unknown manufacturer: ${t}`);break;case 126:case 127:Fi.call(this,A,e);break;case 65:Ri.call(this,A,e);break;case 67:bi.call(this,A,e);break;case 245:if(A.length<2)return;for(this.portSelectChannelOffset=(A[1]-1)*16;this.midiChannels.length<=this.portSelectChannelOffset;){c.info(`%cPort select, channel offset %c${this.portSelectChannelOffset}%c. Creating a new port!`,E.info,E.value,E.info);for(let s=0;s<16;s++)this.createMIDIChannel(!0)}break}}var ha=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=0;reset(){}process(A,e,t,s,n,a,i,r,o){let{sendLevelToReverb:g,sendLevelToChorus:C,sendLevelToDelay:l}=this;for(let h=0;h<o;h++){let d=A[h],B=e[h],m=r+h;t[m]+=d,s[m]+=B;let u=(d+B)*.5;n[h]+=u*g,a[h]+=u*C,i[h]+=u*l}}setParameter(A,e){}},Ye=class{static data=[[0,200,200,0,0,.05,.05,315,250,200,250,100,-180,0],[.1,205,205,.1,5,.1,.1,315,250,200,250,110,-180,1],[.2,210,210,.2,10,.15,.15,315,250,200,250,120,-180,2],[.3,215,215,.3,15,.2,.2,315,250,200,250,130,-180,3],[.4,220,220,.4,20,.25,.25,315,250,200,250,140,-180,4],[.5,225,225,.5,25,.3,.3,315,250,200,250,150,-180,5],[.6,230,230,.6,30,.35,.35,315,250,200,250,160,-168,5],[.7,235,235,.7,35,.4,.4,315,250,200,250,170,-168,5],[.8,240,240,.8,40,.45,.45,400,315,250,315,180,-168,5],[.9,245,245,.9,45,.5,.5,400,315,250,315,190,-168,5],[1,250,250,1,50,.55,.55,400,315,250,315,200,-156,5],[1.1,255,255,1.1,55,.6,.6,400,315,250,315,210,-156,5],[1.2,260,260,1.2,60,.65,.65,400,315,250,315,220,-156,5],[1.3,265,265,1.3,65,.7,.7,400,315,250,315,230,-156,5],[1.4,270,270,1.4,70,.75,.75,400,315,250,315,240,-144,5],[1.5,275,275,1.5,75,.8,.8,400,315,250,315,250,-144,5],[1.6,280,280,1.6,80,.85,.85,500,400,315,400,260,-144,5],[1.7,285,285,1.7,85,.9,.9,500,400,315,400,270,-144,5],[1.8,290,290,1.8,90,.95,.95,500,400,315,400,280,-132,5],[1.9,295,295,1.9,95,1,1,500,400,315,400,290,-132,5],[2,300,300,2,100,1.05,1.05,500,400,315,400,300,-132,5],[2.1,305,305,2.1,105,1.1,1.1,500,400,315,400,320,-132,5],[2.2,310,310,2.2,110,1.15,1.15,500,400,315,400,340,-120,5],[2.3,315,315,2.3,115,1.2,1.2,500,400,315,400,360,-120,5],[2.4,320,320,2.4,120,1.25,1.25,630,500,400,500,380,-120,5],[2.5,325,325,2.5,125,1.3,1.3,630,500,400,500,400,-120,5],[2.6,330,330,2.6,130,1.35,1.35,630,500,400,500,420,-108,5],[2.7,335,335,2.7,135,1.4,1.4,630,500,400,500,440,-108,5],[2.8,340,340,2.8,140,1.45,1.45,630,500,400,500,460,-108,5],[2.9,345,345,2.9,145,1.5,1.5,630,500,400,500,480,-108,5],[3,350,350,3,150,1.55,1.55,630,500,400,500,500,-96,6],[3.1,355,355,3.1,155,1.6,1.6,630,500,400,500,520,-96,6],[3.2,360,360,3.2,160,1.65,1.65,800,630,500,630,540,-96,6],[3.3,365,365,3.3,165,1.7,1.7,800,630,500,630,560,-96,6],[3.4,370,370,3.4,170,1.75,1.75,800,630,500,630,580,-84,6],[3.5,375,375,3.5,175,1.8,1.8,800,630,500,630,600,-84,6],[3.6,380,380,3.6,180,1.85,1.85,800,630,500,630,620,-84,6],[3.7,385,385,3.7,185,1.9,1.9,800,630,500,630,640,-84,6],[3.8,390,390,3.8,190,1.95,1.95,800,630,500,630,660,-72,6],[3.9,395,395,3.9,195,2,2,800,630,500,630,680,-72,6],[4,400,400,4,200,2.05,2.05,1e3,800,630,800,700,-72,6],[4.1,405,405,4.1,205,2.1,2.1,1e3,800,630,800,720,-72,6],[4.2,410,410,4.2,210,2.15,2.15,1e3,800,630,800,740,-60,6],[4.3,415,415,4.3,215,2.2,2.2,1e3,800,630,800,760,-60,6],[4.4,420,420,4.4,220,2.25,2.25,1e3,800,630,800,780,-60,6],[4.5,425,425,4.5,225,2.3,2.3,1e3,800,630,800,800,-60,6],[4.6,430,430,4.6,230,2.35,2.35,1e3,800,630,800,820,-48,6],[4.7,435,435,4.7,235,2.4,2.4,1e3,800,630,800,840,-48,6],[4.8,440,440,4.8,240,2.45,2.45,1250,1e3,800,1e3,860,-48,9],[4.9,445,445,4.9,245,2.5,2.5,1250,1e3,800,1e3,880,-48,9],[5,450,450,5,250,2.55,2.55,1250,1e3,800,1e3,900,-36,9],[5.5,455,455,5.5,255,2.6,2.6,1250,1e3,800,1e3,920,-36,9],[6,460,460,6,260,2.65,2.65,1250,1e3,800,1e3,940,-36,9],[6.5,465,465,6.5,265,2.7,2.7,1250,1e3,800,1e3,960,-36,9],[7,470,470,7,270,2.75,2.75,1250,1e3,800,1e3,980,-24,9],[7.5,475,475,7.5,275,2.8,2.8,1250,1e3,800,1e3,1e3,-24,9],[8,480,480,8,280,2.85,2.85,1600,1250,1e3,1250,1100,-24,9],[8.5,485,485,8.5,285,2.9,2.9,1600,1250,1e3,1250,1200,-24,9],[9,490,490,9,290,2.95,2.95,1600,1250,1e3,1250,1300,-12,9],[9.5,495,495,9.5,295,3,3,1600,1250,1e3,1250,1400,-12,9],[10,500,500,10,300,3.05,3.05,1600,1250,1e3,1250,1500,-12,9],[11,505,505,11,305,3.1,3.1,1600,1250,1e3,1250,1600,-12,9],[12,510,510,12,310,3.15,3.15,1600,1250,1e3,1250,1700,0,9],[13,515,515,13,315,3.2,3.2,1600,1250,1e3,1250,1800,0,9],[14,520,520,14,320,3.25,3.25,2e3,1600,1250,1600,1900,0,12],[15,525,525,15,325,3.3,3.3,2e3,1600,1250,1600,2e3,0,12],[16,530,530,16,330,3.35,3.35,2e3,1600,1250,1600,2100,12,12],[17,535,535,17,335,3.4,3.4,2e3,1600,1250,1600,2200,12,12],[18,540,540,18,340,3.45,3.45,2e3,1600,1250,1600,2300,12,12],[19,545,545,19,345,3.5,3.5,2e3,1600,1250,1600,2400,12,12],[20,550,550,20,350,3.55,3.55,2e3,1600,1250,1600,2500,24,12],[21,560,555,21,355,3.6,3.6,2e3,1600,1250,1600,2600,24,12],[22,570,560,22,360,3.65,3.65,2500,2e3,1600,2e3,2700,24,12],[23,580,565,23,365,3.7,3.7,2500,2e3,1600,2e3,2800,24,12],[24,590,570,24,370,3.75,3.75,2500,2e3,1600,2e3,2900,36,12],[25,600,575,25,375,3.8,3.8,2500,2e3,1600,2e3,3e3,36,12],[26,610,580,26,380,3.85,3.85,2500,2e3,1600,2e3,3100,36,12],[27,620,585,27,385,3.9,3.9,2500,2e3,1600,2e3,3200,36,12],[28,630,590,28,390,3.95,3.95,2500,2e3,1600,2e3,3300,48,12],[29,640,595,29,395,4,4,2500,2e3,1600,2e3,3400,48,12],[30,650,600,30,400,4.05,4.05,3150,2500,2e3,2500,3500,48,10],[31,660,610,31,405,4.1,4.1,3150,2500,2e3,2500,3600,48,10],[32,670,620,32,410,4.15,4.15,3150,2500,2e3,2500,3700,60,10],[33,680,630,33,415,4.2,4.2,3150,2500,2e3,2500,3800,60,10],[34,690,640,34,420,4.25,4.25,3150,2500,2e3,2500,3900,60,10],[35,700,650,35,425,4.3,4.3,3150,2500,2e3,2500,4e3,60,10],[36,710,660,36,430,4.35,4.35,3150,2500,2e3,2500,4100,72,10],[37,720,670,37,435,4.4,4.4,3150,2500,2e3,2500,4200,72,10],[38,730,680,38,440,4.45,4.45,4e3,3150,2500,3150,4300,72,11],[39,740,690,39,445,4.5,4.5,4e3,3150,2500,3150,4400,72,11],[40,750,700,40,450,4.55,4.55,4e3,3150,2500,3150,4500,84,11],[41,760,710,50,455,4.6,4.6,4e3,3150,2500,3150,4600,84,11],[42,770,720,60,460,4.65,4.65,4e3,3150,2500,3150,4700,84,11],[43,780,730,70,465,4.7,4.7,4e3,3150,2500,3150,4800,84,11],[44,790,740,80,470,4.75,4.75,4e3,3150,2500,3150,4900,96,11],[45,800,750,90,475,4.8,4.8,4e3,3150,2500,3150,5e3,96,11],[46,810,760,100,480,4.85,4.85,5e3,4e3,3150,4e3,5100,96,12],[47,820,770,110,485,4.9,4.9,5e3,4e3,3150,4e3,5200,96,12],[48,830,780,120,490,4.95,4.95,5e3,4e3,3150,4e3,5300,108,12],[49,840,790,130,495,5,5,5e3,4e3,3150,4e3,5400,108,12],[50,850,800,140,500,5.1,5.05,5e3,4e3,3150,4e3,5500,108,12],[52,860,810,150,505,5.2,5.1,5e3,4e3,3150,4e3,5600,108,12],[54,870,820,160,510,5.3,5.15,5e3,4e3,3150,4e3,5700,120,12],[56,880,830,170,515,5.4,5.2,5e3,4e3,3150,4e3,5800,120,12],[58,890,840,180,520,5.5,5.25,6300,5e3,4e3,5e3,5900,120,13],[60,900,850,190,525,5.6,5.3,6300,5e3,4e3,5e3,6e3,120,13],[62,910,860,200,530,5.7,5.35,6300,5e3,4e3,5e3,6100,132,13],[64,920,870,210,535,5.8,5.4,6300,5e3,4e3,5e3,6200,132,13],[66,930,880,220,540,5.9,5.45,6300,5e3,4e3,5e3,6300,132,13],[68,940,890,230,545,6,5.5,6300,5e3,4e3,5e3,6400,132,13],[70,950,900,240,550,6.1,5.55,6300,5e3,4e3,5e3,6500,144,13],[72,960,910,250,555,6.2,5.6,6300,5e3,4e3,5e3,6600,144,13],[74,970,920,260,560,6.3,5.65,8e3,6300,5e3,6300,6700,144,14],[76,980,930,270,565,6.4,5.7,8e3,6300,5e3,6300,6800,144,14],[78,990,940,280,570,6.5,5.75,8e3,6300,5e3,6300,6900,156,14],[80,1e3,950,290,575,6.6,5.8,8e3,6300,5e3,6300,7e3,156,14],[82,1e3,960,300,580,6.7,5.85,8e3,6300,5e3,6300,7100,156,14],[84,1e3,970,320,585,6.8,5.9,8e3,6300,5e3,6300,7200,156,14],[86,1e3,980,340,590,6.9,5.95,8e3,6300,5e3,6300,7300,168,14],[88,1e3,990,360,595,7,6,8e3,6300,5e3,6300,7400,168,14],[90,1e3,1e3,380,600,7.5,6.05,13500,8e3,6300,13500,7500,168,15],[92,1e3,1e3,400,605,8,6.1,13500,8e3,6300,13500,7600,168,15],[94,1e3,1e3,420,610,8.5,6.15,13500,8e3,6300,13500,7700,-180,15],[96,1e3,1e3,440,615,9,6.2,13500,8e3,6300,13500,7800,-180,15],[98,1e3,1e3,460,620,9.5,6.25,13500,8e3,6300,13500,7900,-180,15],[100,1e3,1e3,480,625,10,6.3,13500,8e3,6300,13500,8e3,-180,15],[100,1e3,1e3,500,630,10,6.35,13500,8e3,6300,13500,8e3,-180,15],[100,1e3,1e3,500,635,10,6.4,13500,8e3,6300,13500,8e3,-180,15]];static preDelayTime(A){return this.data[A][0]}static delayTime1(A){return this.data[A][1]}static delayTime2(A){return this.data[A][2]}static delayTime3(A){return this.data[A][3]}static delayTime4(A){return this.data[A][4]}static rate1(A){return this.data[A][5]}static rate2(A){return this.data[A][6]}static hfDamp(A){return this.data[A][7]}static cutoffFreq(A){return this.data[A][8]}static eqFreq(A){return this.data[A][9]}static lpf(A){return this.data[A][10]}static manual(A){return this.data[A][11]}static azimuth(A){return this.data[A][12]}static accl(A){return this.data[A][13]}},ws=Math.PI/2,OA=-64,Ba=63,jt=Ba-OA,ZA=new Float32Array(jt+1),XA=new Float32Array(jt+1);for(let A=OA;A<=Ba;A++){let e=(A-OA)/jt,t=A-OA;ZA[t]=Math.cos(ws*e),XA[t]=Math.sin(ws*e)}function ce(A){A.x1=A.x2=A.y1=A.y2=0}var ke={b0:1,b1:0,b2:0,a0:1,a1:0,a2:0};function _e(A,e,t,s,n){let a=e.b0*A+e.b1*s.x1+e.b2*s.x2-e.a1*s.y1-e.a2*s.y2;s.x2=s.x1,s.x1=A,s.y2=s.y1,s.y1=a;let i=t.b0*a+t.b1*n.x1+t.b2*n.x2-t.a1*n.y1-t.a2*n.y2;return n.x2=n.x1,n.x1=a,n.y2=n.y1,n.y1=i,i}function Ue(A,e,t){let s=e.b0*A+e.b1*t.x1+e.b2*t.x2-e.a1*t.y1-e.a2*t.y2;return t.x2=t.x1,t.x1=A,t.y2=t.y1,t.y1=s,s}function ze(A,e,t,s,n){let a=Math.pow(10,e/40),i=2*Math.PI*t/s,r=Math.cos(i),o=Math.sin(i)/2*Math.sqrt((a+1/a)*(1/1-1)+2),g,C,l,h,d,B;n?(g=a*(a+1-(a-1)*r+2*Math.sqrt(a)*o),C=2*a*(a-1-(a+1)*r),l=a*(a+1-(a-1)*r-2*Math.sqrt(a)*o),h=a+1+(a-1)*r+2*Math.sqrt(a)*o,d=-2*(a-1+(a+1)*r),B=a+1+(a-1)*r-2*Math.sqrt(a)*o):(g=a*(a+1+(a-1)*r+2*Math.sqrt(a)*o),C=-2*a*(a-1+(a+1)*r),l=a*(a+1+(a-1)*r-2*Math.sqrt(a)*o),h=a+1-(a-1)*r+2*Math.sqrt(a)*o,d=2*(a-1-(a+1)*r),B=a+1-(a-1)*r-2*Math.sqrt(a)*o),A.b0=g/h,A.b1=C/h,A.b2=l/h,A.a0=1,A.a1=d/h,A.a2=B/h}var de={x1:0,x2:0,y1:0,y2:0},Ni=class{type=256;sendLevelToReverb=0;sendLevelToChorus=0;sendLevelToDelay=0;sampleRate;level=1;lowFreq=400;lowGain=5;hiFreq=8e3;hiGain=-12;m1Freq=1600;m1Q=.5;m1Gain=8;m2Freq=1e3;m2Q=.5;m2Gain=-8;lowCoeffs={...ke};m1Coeffs={...ke};m2Coeffs={...ke};hiCoeffs={...ke};lowStateL={...de};lowStateR={...de};m1StateL={...de};m1StateR={...de};m2StateL={...de};m2StateR={...de};hiStateL={...de};hiStateR={...de};constructor(A){this.sampleRate=A,this.reset(),this.updateCoefficients()}reset(){this.level=1,this.lowFreq=400,this.lowGain=5,this.hiGain=-12,this.hiFreq=8e3,this.m1Freq=1600,this.m1Q=.5,this.m1Gain=8,this.m2Freq=1e3,this.m2Q=.5,this.m2Gain=-8,ce(this.lowStateL),ce(this.lowStateR),ce(this.m1StateL),ce(this.m1StateR),ce(this.m2StateL),ce(this.m2StateR),ce(this.hiStateL),ce(this.hiStateR),this.updateCoefficients()}setParameter(A,e){switch(A){default:break;case 3:this.lowFreq=e===1?400:200;break;case 4:this.lowGain=e-64;break;case 5:this.hiFreq=e===1?8e3:4e3;break;case 6:this.hiGain=e-64;break;case 7:this.m1Freq=Ye.eqFreq(e);break;case 8:this.m1Q=[.5,1,2,4,9][e]||1;break;case 9:this.m1Gain=e-64;break;case 10:this.m2Freq=Ye.eqFreq(e);break;case 11:this.m2Q=[.5,1,2,4,9][e]||1;break;case 12:this.m2Gain=e-64;break;case 22:this.level=e/127;break}this.updateCoefficients()}process(A,e,t,s,n,a,i,r,o){let{level:g,sendLevelToChorus:C,sendLevelToDelay:l,sendLevelToReverb:h,lowCoeffs:d,lowStateL:B,lowStateR:m,m1Coeffs:u,m1StateL:w,m1StateR:L,m2StateL:k,m2StateR:S,m2Coeffs:v,hiCoeffs:x,hiStateL:y,hiStateR:p}=this;for(let D=0;D<o;D++){let U=A[D],T=e[D];U=Ue(U,d,B),T=Ue(T,d,m),U=Ue(U,u,w),T=Ue(T,u,L),U=Ue(U,v,k),T=Ue(T,v,S),U=Ue(U,x,y),T=Ue(T,x,p);let K=r+D;t[K]+=U*g,s[K]+=T*g;let J=.5*(U+T);n[D]+=J*h,a[D]+=J*C,i[D]+=J*l}}updateCoefficients(){Gi(this.lowCoeffs,this.lowFreq,this.lowGain/2,this.sampleRate),ks(this.m1Coeffs,this.m1Freq,this.m1Gain,this.m1Q,this.sampleRate),ks(this.m2Coeffs,this.m2Freq,this.m2Gain,this.m2Q,this.sampleRate),Ti(this.hiCoeffs,this.hiFreq,this.hiGain/2,this.sampleRate)}},da=1;function ks(A,e,t,s,n){let a=Math.pow(10,t/40),i=2*Math.PI*e/n,r=Math.cos(i),o=Math.sin(i)/(2*s),g=1+o*a,C=-2*r,l=1-o*a,h=1+o/a,d=-2*r,B=1-o/a;A.a0=1,A.a1=d/h,A.a2=B/h,A.b0=g/h,A.b1=C/h,A.b2=l/h}function Gi(A,e,t,s){let n=Math.pow(10,t/40),a=2*Math.PI*e/s,i=Math.cos(a),r=Math.sin(a)/2*Math.sqrt((n+1/n)*(1/da-1)+2),o=n*(n+1-(n-1)*i+2*Math.sqrt(n)*r),g=2*n*(n-1-(n+1)*i),C=n*(n+1-(n-1)*i-2*Math.sqrt(n)*r),l=n+1+(n-1)*i+2*Math.sqrt(n)*r,h=-2*(n-1+(n+1)*i),d=n+1+(n-1)*i-2*Math.sqrt(n)*r;A.a0=1,A.a1=h/l,A.a2=d/l,A.b0=o/l,A.b1=g/l,A.b2=C/l}function Ti(A,e,t,s){let n=Math.pow(10,t/40),a=2*Math.PI*e/s,i=Math.cos(a),r=Math.sin(a)/2*Math.sqrt((n+1/n)*(1/da-1)+2),o=n*(n+1+(n-1)*i+2*Math.sqrt(n)*r),g=-2*n*(n-1+(n+1)*i),C=n*(n+1+(n-1)*i-2*Math.sqrt(n)*r),l=n+1-(n-1)*i+2*Math.sqrt(n)*r,h=2*(n-1-(n+1)*i),d=n+1-(n-1)*i-2*Math.sqrt(n)*r;A.a0=1,A.a1=h/l,A.a2=d/l,A.b0=o/l,A.b1=g/l,A.b2=C/l}var aA=8,mt=128,Ss=4,pt=600,xi=.9,Ms=.35,Ea=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=288;manual=620;rate=.85;depth=64/mt;reso=16/127;mix=1;lowGain=0;hiGain=0;prevInL;prevOutL;prevInR;prevOutR;lowShelfCoef={...ke};highShelfCoef={...ke};manualOffset=pt;lowShelfStateL={x1:0,x2:0,y1:0,y2:0};lowShelfStateR={x1:0,x2:0,y1:0,y2:0};highShelfStateL={x1:0,x2:0,y1:0,y2:0};highShelfStateR={x1:0,x2:0,y1:0,y2:0};prevL=0;prevR=0;level=104/127;phase=Ms;sampleRate;constructor(A){this.sampleRate=A,this.prevInL=new Float32Array(aA),this.prevOutL=new Float32Array(aA),this.prevInR=new Float32Array(aA),this.prevOutR=new Float32Array(aA),this.reset()}reset(){this.phase=Ms,this.setManual(620),this.rate=.85,this.depth=64/mt,this.reso=16/127,this.mix=1,this.lowGain=0,this.hiGain=0,this.level=104/127,ce(this.highShelfStateL),ce(this.highShelfStateR),ce(this.lowShelfStateL),ce(this.lowShelfStateR),this.updateShelves(),this.clearAllPass()}process(A,e,t,s,n,a,i,r,o){let{sendLevelToReverb:g,sendLevelToChorus:C,sendLevelToDelay:l,level:h,manual:d,manualOffset:B,mix:m,lowShelfCoef:u,lowShelfStateR:w,lowShelfStateL:L,highShelfCoef:k,highShelfStateL:S,highShelfStateR:v,prevInL:x,prevInR:y,prevOutL:p,prevOutR:D,sampleRate:U,depth:T}=this,{prevL:K,prevR:J,phase:Ae}=this,G=this.rate/this.sampleRate,P=this.reso*xi;for(let f=0;f<o;f++){let M=_e(A[f],u,k,L,S),b=_e(e[f],u,k,w,v),V=2*Math.abs(Ae-.5);(Ae+=G)>=1&&(Ae-=1);let W=B+d*(1-T*V),z=Math.tan(Math.PI*W/U),O=Math.max(-.9999,Math.min(.9999,(1-z)/(1+z))),Z=M+P*K,$=b+P*J;for(let re=0;re<aA;re++){let ue=-O*Z+x[re]+O*p[re];x[re]=Z,p[re]=ue,Z=ue;let Ne=-O*$+y[re]+O*D[re];y[re]=$,D[re]=Ne,$=Ne}K=Z,J=$;let H=(M+Z*m)*h,ee=(b+$*m)*h,Ee=r+f;t[Ee]+=H,s[Ee]+=ee;let ye=(H+ee)*.5;n[f]+=ye*g,a[f]+=ye*C,i[f]+=ye*l}this.phase=Ae,this.prevL=K,this.prevR=J}setParameter(A,e){switch(A){default:break;case 3:this.setManual(Ye.manual(e));break;case 4:this.rate=Ye.rate1(e);break;case 5:this.depth=e/mt;break;case 6:this.reso=e/127;break;case 7:this.mix=e/127;break;case 19:this.lowGain=e-64;break;case 20:this.hiGain=e-64;break;case 22:this.level=e/127;break}this.updateShelves()}setManual(A){A>1e3?(this.manualOffset=pt*1.5*Ss,this.manual=A):(this.manualOffset=pt,this.manual=A*Ss)}clearAllPass(){this.prevR=0,this.prevL=0;for(let A=0;A<aA;A++)this.prevInL[A]=0,this.prevOutL[A]=0,this.prevInR[A]=0,this.prevOutR[A]=0}updateShelves(){ze(this.lowShelfCoef,this.lowGain,200,this.sampleRate,!0),ze(this.highShelfCoef,this.hiGain,4e3,this.sampleRate,!1)}},Ls=Math.PI*2,Ki=.935,Ui=2,Ji=.01,vs=127,Oi=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=294;modWave=1;modRate=3.05;modDepth=96;lowGain=0;hiGain=0;level=vs/127;currentPan=0;phase=0;lsCoeffs={...ke};hsCoeffs={...ke};lsStateR={...de};lsStateL={...de};hsStateR={...de};hsStateL={...de};sampleRate;constructor(A){this.sampleRate=A,this.reset()}reset(){this.modWave=1,this.modRate=3.05,this.modDepth=96,this.lowGain=0,this.hiGain=0,this.level=vs/127,this.currentPan=0,this.phase=0,ce(this.hsStateR),ce(this.hsStateL),ce(this.lsStateR),ce(this.lsStateL),this.updateShelves()}process(A,e,t,s,n,a,i,r,o){let{sendLevelToReverb:g,sendLevelToChorus:C,sendLevelToDelay:l,level:h,lsCoeffs:d,lsStateL:B,lsStateR:m,hsCoeffs:u,hsStateR:w,hsStateL:L,modWave:k}=this,S=Math.pow(this.modDepth/127,Ui),v=2/(1+S)*Ki,x=this.modRate/this.sampleRate,{phase:y,currentPan:p}=this;for(let D=0;D<o;D++){let U=_e(A[D],d,u,B,L),T=_e(e[D],d,u,m,w),K;switch(k){default:K=1-4*Math.abs(y-.5);break;case 1:K=y>.5?-1:-Math.cos((y-.75)*Ls);break;case 2:K=Math.sin(Ls*y);break;case 3:K=1-2*y;break;case 4:K=2*y-1;break}(y+=x)>=1&&(y-=1),p+=(K-p)*Ji;let J=p*S,Ae=(1-J)*.5*v,G=(1+J)*.5*v,P=U*h*Ae,f=T*h*G,M=r+D;t[M]+=P,s[M]+=f;let b=(P+f)*.5;n[D]+=b*g,a[D]+=b*C,i[D]+=b*l}this.currentPan=p,this.phase=y}setParameter(A,e){switch(A){default:break;case 3:this.modWave=e;break;case 4:this.modRate=Ye.rate1(e);break;case 5:this.modDepth=e;break;case 19:this.lowGain=e-64;break;case 20:this.hiGain=e-64;break;case 22:this.level=e/127;break}this.updateShelves()}updateShelves(){ze(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),ze(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}},Fs=96,Hi=.1,Yi=.1,qi=27,zi=28,Vi=-28,Wi=400,ji=.62,Zi=.005,Qa=5,Rs=Qa*.5,fa=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=289;filType=1;sens=0;manual=68;peak=62;rate=2.05;depth=72;polarity=1;pan=0;lowGain=0;hiGain=0;level=Fs/127;coeffs={...ke};state={...de};hpCoeffs={...ke};hpState={...de};phase=0;lsCoeffs={...ke};hsCoeffs={...ke};lsState={...de};hsState={...de};sampleRate;lastFc=this.manual;attackCoeff;releaseCoeff;envelope=0;constructor(A){this.sampleRate=A,this.attackCoeff=Math.exp(-1/(Hi*A)),this.releaseCoeff=Math.exp(-1/(Yi*A)),this.reset()}reset(){this.filType=1,this.sens=0,this.setManual(68),this.peak=62,this.rate=2.05,this.depth=72,this.polarity=1,this.lowGain=0,this.hiGain=0,this.pan=0,this.level=Fs/127,this.phase=.2,this.lastFc=this.manual,ce(this.hsState),ce(this.lsState),ce(this.state),ce(this.hpState),this.updateShelves()}process(A,e,t,s,n,a,i,r,o){let{sendLevelToReverb:g,sendLevelToChorus:C,sendLevelToDelay:l,level:h,lsCoeffs:d,lsState:B,hsCoeffs:m,hsState:u,coeffs:w,state:L,sampleRate:k,filType:S,manual:v,pan:x,attackCoeff:y,releaseCoeff:p,hpState:D,hpCoeffs:U}=this,{phase:T,lastFc:K,envelope:J}=this,Ae=this.rate/this.sampleRate,G=Math.pow(10,this.peak/127*zi/20),P=Math.pow(10,this.peak/127*Vi/20),f=this.polarity===0?-1:Qa,M=this.depth/127*f,b=this.sens/127,V=x+64|0,W=ZA[V],z=XA[V];for(let O=0;O<o;O++){let Z=_e((A[O]+e[O])*.5,d,m,B,u),$=Math.abs(Z);J=$>J?y*J+(1-y)*$:p*J+(1-p)*$;let H=2*Math.abs(T-.5)*M;(T+=Ae)>=1&&(T-=1);let ee=H>=Rs||f<0?1:Math.sin(H*Math.PI/(2*Rs)),Ee=v*(1+b*J*qi),ye=Math.max(20,Ee*(1+ee*H));K+=(Math.max(10,ye)-K)*Zi,Xi(w,K,G,k);let re=Z;S===1&&(_i(U,Wi,P,k),re=Ue(re,U,D));let ue=Ue(re,w,L)*h,Ne=ue*W,lA=ue*z,eA=r+O;t[eA]+=Ne,s[eA]+=lA,n[O]+=ue*g,a[O]+=ue*C,i[O]+=ue*l}this.phase=T,this.lastFc=K,this.envelope=J}setParameter(A,e){switch(A){default:break;case 3:this.filType=e;break;case 4:this.sens=e;break;case 5:this.setManual(e);break;case 6:this.peak=e;break;case 7:this.rate=Ye.rate1(e);break;case 8:this.depth=e;break;case 9:this.polarity=e;break;case 19:this.lowGain=e-64;break;case 20:this.hiGain=e-64;break;case 21:this.pan=e-64;break;case 22:this.level=e/127;break}this.updateShelves()}setManual(A){let e=A*ji,t=Ye.manual(Math.floor(e)),s=Ye.manual(Math.ceil(e)),n=e-Math.floor(e);this.manual=t+(s-t)*n}updateShelves(){ze(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),ze(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}};function Xi(A,e,t,s){let n=2*Math.PI*e/s,a=Math.cos(n),i=Math.sin(n)/(2*t),r=1-a,o=r/2,g=o,C=1+i,l=-2*a,h=1-i;A.a0=1,A.a1=l/C,A.a2=h/C,A.b0=o/C,A.b1=r/C,A.b2=g/C}function _i(A,e,t,s){let n=2*Math.PI*e/s,a=Math.cos(n),i=Math.sin(n)/(2*t),r=(1+a)/2,o=-(1+a),g=r,C=1+i,l=-2*a,h=1-i;A.a0=1,A.a1=l/C,A.a2=h/C,A.b0=r/C,A.b1=o/C,A.b2=g/C}var bs=127,$i=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=4360;phPan=0;awPan=127;level=bs/127;phaser;autoWah;bufferPh;bufferAw;constructor(A,e){this.phaser=new Ea(A),this.autoWah=new fa(A),this.bufferAw=new Float32Array(e),this.bufferPh=new Float32Array(e),this.phaser.sendLevelToReverb=0,this.phaser.sendLevelToChorus=0,this.phaser.sendLevelToDelay=0,this.autoWah.sendLevelToReverb=0,this.autoWah.sendLevelToChorus=0,this.autoWah.sendLevelToDelay=0,this.reset()}reset(){this.phPan=0,this.awPan=127,this.level=bs/127,this.phaser.reset(),this.autoWah.reset(),this.phaser.setParameter(22,127),this.autoWah.setParameter(22,127)}process(A,e,t,s,n,a,i,r,o){let{sendLevelToReverb:g,sendLevelToChorus:C,sendLevelToDelay:l,level:h}=this,{bufferPh:d,bufferAw:B}=this;this.bufferPh.fill(0),this.phaser.process(A,A,d,d,d,d,d,0,o),this.bufferAw.fill(0),this.autoWah.process(e,e,B,B,B,B,B,0,o);let m=this.phPan|0,u=ZA[m],w=XA[m],L=this.awPan|0,k=ZA[L],S=XA[L];for(let v=0;v<o;v++){let x=d[v]*.5*h,y=B[v]*.5*h,p=x*u+y*k,D=x*w+y*S,U=r+v;t[U]+=p,s[U]+=D;let T=(p+D)*.5;n[v]+=T*g,a[v]+=T*C,i[v]+=T*l}}setParameter(A,e){if(A>=3&&A<=7){this.phaser.setParameter(A,e);return}if(A>=8&&A<=14){this.autoWah.setParameter(A-5,e);return}switch(A){default:break;case 18:this.phPan=e;break;case 19:this.phaser.setParameter(22,e);break;case 20:this.awPan=e;break;case 21:this.autoWah.setParameter(22,e);break;case 22:this.level=e/127;break}}},Ps=127,Ns=Math.PI*2,er=.01,Ar=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=293;modWave=1;modRate=3.05;modDepth=96;lowGain=0;hiGain=0;level=Ps/127;phase=0;currentGain=1;lsCoeffs={...ke};hsCoeffs={...ke};lsStateR={...de};lsStateL={...de};hsStateR={...de};hsStateL={...de};sampleRate;constructor(A){this.sampleRate=A,this.reset()}reset(){this.modWave=1,this.modRate=3.05,this.modDepth=96,this.lowGain=0,this.hiGain=0,this.level=Ps/127,this.phase=0,this.currentGain=1,ce(this.hsStateR),ce(this.hsStateL),ce(this.lsStateR),ce(this.lsStateL),this.updateShelves()}process(A,e,t,s,n,a,i,r,o){let{sendLevelToReverb:g,sendLevelToChorus:C,sendLevelToDelay:l,level:h,lsCoeffs:d,lsStateL:B,lsStateR:m,hsCoeffs:u,hsStateR:w,hsStateL:L,modDepth:k,modWave:S}=this,v=this.modRate/this.sampleRate,{currentGain:x,phase:y}=this;for(let p=0;p<o;p++){let D=_e(A[p],d,u,B,L),U=_e(e[p],d,u,m,w),T;switch(S){default:T=1-4*Math.abs(y-.5);break;case 1:T=y>.5?-1:-Math.cos((y-.75)*Ns);break;case 2:T=Math.sin(Ns*y);break;case 3:T=1-2*y;break;case 4:T=2*y-1;break}(y+=v)>=1&&(y-=1);let K=1-(T/2+.5)*(k/127);x+=(K-x)*er;let J=D*h*x,Ae=U*h*x,G=r+p;t[G]+=J,s[G]+=Ae;let P=(J+Ae)*.5;n[p]+=P*g,a[p]+=P*C,i[p]+=P*l}this.phase=y,this.currentGain=x}setParameter(A,e){switch(A){default:break;case 3:this.modWave=e;break;case 4:this.modRate=Ye.rate1(e);break;case 5:this.modDepth=e;break;case 19:this.lowGain=e-64;break;case 20:this.hiGain=e-64;break;case 22:this.level=e/127;break}this.updateShelves()}updateShelves(){ze(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),ze(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}},tr=[ha,Ni,Ea,Oi,fa,$i,Ar],sr=class{preDelay=0;preLPF=.5;inputDiffusion1=.75;inputDiffusion2=.625;decay=.5;decayDiffusion1=.7;decayDiffusion2=.5;damping=.005;excursionRate=.1;excursionDepth=.2;gain=1;sampleRate;lp1=0;lp2=0;lp3=0;excPhase=0;pDWrite=0;taps;pDelay;pDLength;delays=new Array;constructor(A){this.sampleRate=A,this.pDLength=A,this.pDelay=new Float32Array(this.pDLength);for(let e of[.004771345,.003595309,.012734787,.009307483,.022579886,.149625349,.060481839,.1249958,.030509727,.141695508,.089244313,.106280031])this.makeDelayLine(e);this.taps=Int16Array.from([.008937872,.099929438,.064278754,.067067639,.066866033,.006283391,.035818689,.011861161,.121870905,.041262054,.08981553,.070931756,.011256342,.004065724],e=>Math.round(e*this.sampleRate))}process(A,e,t,s,n){let a=this.preDelay|0,i=this.inputDiffusion1,r=this.inputDiffusion2,o=this.decay,g=this.decayDiffusion1,C=this.decayDiffusion2,l=1-this.damping,h=this.excursionRate/this.sampleRate,d=this.excursionDepth*this.sampleRate/1e3,B=this.pDWrite;for(let m=0;m<n;m++)this.pDelay[(B+m)%this.pDLength]=A[m];for(let m=0;m<n;m++){this.lp1+=this.preLPF*(this.pDelay[(this.pDLength+this.pDWrite-a+m)%this.pDLength]-this.lp1);let u=this.writeDelay(0,this.lp1-i*this.readDelay(0));u=this.writeDelay(1,i*(u-this.readDelay(1))+this.readDelay(0)),u=this.writeDelay(2,i*u+this.readDelay(1)-r*this.readDelay(2)),u=this.writeDelay(3,r*(u-this.readDelay(3))+this.readDelay(2));let w=r*u+this.readDelay(3),L=d*(1+Math.cos(this.excPhase*6.28)),k=d*(1+Math.sin(this.excPhase*6.2847)),S=this.writeDelay(4,w+o*this.readDelay(11)+g*this.readDelayCAt(4,L));this.writeDelay(5,this.readDelayCAt(4,L)-g*S),this.lp2+=l*(this.readDelay(5)-this.lp2),S=this.writeDelay(6,o*this.lp2-C*this.readDelay(6)),this.writeDelay(7,this.readDelay(6)+C*S),S=this.writeDelay(8,w+o*this.readDelay(7)+g*this.readDelayCAt(8,k)),this.writeDelay(9,this.readDelayCAt(8,k)-g*S),this.lp3+=l*(this.readDelay(9)-this.lp3),S=this.writeDelay(10,o*this.lp3-C*this.readDelay(10)),this.writeDelay(11,this.readDelay(10)+C*S);let v=this.readDelayAt(9,this.taps[0])+this.readDelayAt(9,this.taps[1])-this.readDelayAt(10,this.taps[2])+this.readDelayAt(11,this.taps[3])-this.readDelayAt(5,this.taps[4])-this.readDelayAt(6,this.taps[5])-this.readDelayAt(7,this.taps[6]),x=m+s;e[x]+=v*this.gain;let y=this.readDelayAt(5,this.taps[7])+this.readDelayAt(5,this.taps[8])-this.readDelayAt(6,this.taps[9])+this.readDelayAt(7,this.taps[10])-this.readDelayAt(9,this.taps[11])-this.readDelayAt(10,this.taps[12])-this.readDelayAt(11,this.taps[13]);t[x]+=y*this.gain,this.excPhase+=h;for(let p=0,D=this.delays[0];p<this.delays.length;D=this.delays[++p])D[1]=D[1]+1&D[3],D[2]=D[2]+1&D[3]}this.pDWrite=(B+n)%this.pDLength}makeDelayLine(A){let e=Math.round(A*this.sampleRate),t=2**Math.ceil(Math.log2(e));this.delays.push([new Float32Array(t),e-1,0,t-1])}writeDelay(A,e){return this.delays[A][0][this.delays[A][1]]=e}readDelay(A){return this.delays[A][0][this.delays[A][2]]}readDelayAt(A,e){let t=this.delays[A];return t[0][t[2]+e&t[3]]}readDelayCAt(A,e){let t=this.delays[A],s=e-~~e,n=t[3],a=~~e+t[2]-1,i=t[0][a++&n],r=t[0][a++&n],o=t[0][a++&n],g=t[0][a&n],C=(3*(r-o)-i+g)/2,l=2*o+i-(5*r+g)/2,h=(o-i)/2;return((C*s+l)*s+h)*s+r}},fA=class{feedback=0;gain=1;buffer;bufferLength;writeIndex=0;constructor(A){this.buffer=new Float32Array(A),this.bufferLength=this.buffer.length,this._time=A-5}_time;get time(){return this._time}set time(A){this._time=Math.min(this.bufferLength,A)|0}clear(){this.buffer.fill(0)}process(A,e,t){let s=this.writeIndex,n=this._time,a=this.buffer,i=this.bufferLength,r=this.feedback,o=this.gain;for(let g=0;g<t;g++){let C=s-n;C<0&&(C+=i);let l=a[C];e[g]=l*o,a[s]=A[g]+l*r,++s>=i&&(s=0)}this.writeIndex=s}},ar=1.5,nr=class{dattorro;delayLeft;delayRight;delayLeftOutput;delayRightOutput;delayLeftInput;delayPreLPF;sampleRate;preLPFfc=8e3;preLPFa=0;preLPFz=0;characterTimeCoefficient=1;characterGainCoefficient=1;characterLPFCoefficient=0;delayGain=1;panDelayFeedback=0;constructor(A,e){this.sampleRate=A,this.delayLeftOutput=new Float32Array(e),this.delayRightOutput=new Float32Array(e),this.delayLeftInput=new Float32Array(e),this.delayPreLPF=new Float32Array(e),this.dattorro=new sr(A),this.delayLeft=new fA(A),this.delayRight=new fA(A)}_delayFeedback=0;get delayFeedback(){return this._delayFeedback}set delayFeedback(A){this._delayFeedback=A,this.updateFeedback()}_character=0;get character(){return this._character}set character(A){switch(this._character=A,this.dattorro.damping=.005,this.characterTimeCoefficient=1,this.characterGainCoefficient=1,this.characterLPFCoefficient=0,this.dattorro.inputDiffusion1=.75,this.dattorro.inputDiffusion2=.625,this.dattorro.decayDiffusion1=.7,this.dattorro.decayDiffusion2=.5,this.dattorro.excursionRate=.5,this.dattorro.excursionDepth=.7,A){case 0:this.dattorro.damping=.85,this.characterTimeCoefficient=.9,this.characterGainCoefficient=.9,this.characterLPFCoefficient=.2;break;case 1:this.dattorro.damping=.2,this.characterGainCoefficient=.7,this.characterTimeCoefficient=1,this.dattorro.decayDiffusion2=.64,this.dattorro.decayDiffusion1=.6,this.characterLPFCoefficient=.2;break;case 2:this.dattorro.damping=.56,this.characterGainCoefficient=.75,this.characterTimeCoefficient=1,this.dattorro.decayDiffusion2=.64,this.dattorro.decayDiffusion1=.6,this.characterLPFCoefficient=.1;break;case 3:this.dattorro.damping=.3,this.characterGainCoefficient=1.25,this.characterTimeCoefficient=1.3,this.characterLPFCoefficient=0,this.dattorro.decayDiffusion2=.7,this.dattorro.decayDiffusion1=.66;break;case 4:this.characterGainCoefficient=1,this.characterTimeCoefficient=1.2,this.characterLPFCoefficient=.1,this.dattorro.damping=.1,this.dattorro.decayDiffusion2=.69,this.dattorro.decayDiffusion1=.67;break;case 5:this.characterGainCoefficient=.75,this.dattorro.damping=.65,this.characterTimeCoefficient=.5;break}this.updateTime(),this.updateGain(),this.updateLowpass(),this.updateFeedback(),this.delayLeft.clear(),this.delayRight.clear()}_time=0;get time(){return this._time}set time(A){this._time=A,this.updateTime()}_preDelayTime=0;get preDelayTime(){return this._preDelayTime}set preDelayTime(A){this._preDelayTime=A,this.dattorro.preDelay=A/1e3*this.sampleRate}_level=0;get level(){return this._level}set level(A){this._level=A,this.updateGain()}_preLowpass=0;get preLowpass(){return this._preLowpass}set preLowpass(A){this._preLowpass=A,this.preLPFfc=8e3*.63**this._preLowpass;let e=Math.exp(-2*Math.PI*this.preLPFfc/this.sampleRate);this.preLPFa=1-e,this.updateLowpass()}process(A,e,t,s,n){switch(this._character){default:this.dattorro.process(A,e,t,s,n);return;case 6:{let a;if(this._preLowpass>0){let o=this.delayPreLPF,g=this.preLPFz,C=this.preLPFa;for(let l=0;l<n;l++){let h=A[l];g+=C*(h-g),o[l]=g}this.preLPFz=g,a=o}else a=A;this.delayLeft.process(a,this.delayLeftOutput,n);let i=this.delayGain,r=this.delayLeftOutput;for(let o=0,g=s;o<n;o++,g++){let C=r[o]*i;t[g]+=C,e[g]+=C}return}case 7:{let a;if(this._preLowpass>0){let l=this.delayPreLPF,h=this.preLPFz,d=this.preLPFa;for(let B=0;B<n;B++){let m=A[B];h+=d*(m-h),l[B]=h}this.preLPFz=h,a=l}else a=A;let i=this.panDelayFeedback,{delayLeftInput:r,delayLeftOutput:o,delayRightOutput:g}=this;for(let l=0;l<n;l++)r[l]=a[l]+g[l]*i;this.delayLeft.process(r,o,n),this.delayRight.process(o,g,n);let C=this.delayGain;for(let l=0,h=s;l<n;l++,h++)e[h]+=o[l]*C,t[h]+=g[l]*C;return}}}getSnapshot(){return{level:this._level,preLowpass:this._preLowpass,character:this._character,time:this._time,delayFeedback:this._delayFeedback,preDelayTime:this._preDelayTime}}updateFeedback(){let A=1-(1-this._delayFeedback/127)**1.9;this._character===6?this.delayLeft.feedback=A*.73:(this.delayLeft.feedback=this.delayRight.feedback=0,this.panDelayFeedback=A*.73)}updateLowpass(){this.dattorro.preLPF=Math.min(1,.1+(7-this.preLowpass)/14+this.characterLPFCoefficient)}updateGain(){this.dattorro.gain=this._level/345*this.characterGainCoefficient,this.delayGain=this._level/127*ar}updateTime(){let A=this._time/127;this.dattorro.decay=this.characterTimeCoefficient*(.05+.65*A);let e=Math.max(21,A*this.sampleRate*.4468|0);this.character===7?this.delayRight.time=this.delayLeft.time=Math.floor(e/2):this.delayLeft.time=e}},ir=1.3,rr=class{preLPFfc=8e3;preLPFa=0;preLPFz=0;leftDelayBuffer;rightDelayBuffer;sampleRate;phase=0;write=0;gain=.5;reverbGain=0;delayGain=0;depthSamples=0;delaySamples=1;rateInc=0;feedbackGain=0;constructor(A,e){this.sampleRate=A,this.leftDelayBuffer=new Float32Array(A),this.rightDelayBuffer=new Float32Array(A),this.preLowpass=0}_sendLevelToReverb=0;get sendLevelToReverb(){return this._sendLevelToReverb}set sendLevelToReverb(A){this._sendLevelToReverb=A,this.reverbGain=A/127}_sendLevelToDelay=0;get sendLevelToDelay(){return this._sendLevelToDelay}set sendLevelToDelay(A){this._sendLevelToDelay=A,this.delayGain=A/127}_preLowpass=0;get preLowpass(){return this._preLowpass}set preLowpass(A){this._preLowpass=A,this.preLPFfc=8e3*.63**this._preLowpass;let e=Math.exp(-2*Math.PI*this.preLPFfc/this.sampleRate);this.preLPFa=1-e}_depth=0;get depth(){return this._depth}set depth(A){this._depth=A,this.depthSamples=A/127*.025*this.sampleRate}_delay=0;get delay(){return this._delay}set delay(A){this._delay=A,this.delaySamples=Math.max(1,A/127*.025*this.sampleRate)}_feedback=0;get feedback(){return this._feedback}set feedback(A){this._feedback=A,this.feedbackGain=A*.00763}_rate=0;get rate(){return this._rate}set rate(A){this._rate=A;let e=A*.122;this.rateInc=e/this.sampleRate}_level=64;get level(){return this._level}set level(A){this.gain=A/127*ir,this._level=A}process(A,e,t,s,n,a,i){let r=this.leftDelayBuffer,o=this.rightDelayBuffer,g=this.rateInc,C=r.length,l=this.depthSamples,h=this.delaySamples,d=this.gain,B=this.reverbGain,m=this.delayGain,u=this.feedbackGain,w=this._preLowpass>0,L=this.phase,k=this.write,S=this.preLPFz,v=this.preLPFa;for(let x=0;x<i;x++){let y=A[x];w&&(S+=v*(y-S),y=S);let p=2*Math.abs(L-.5),D=Math.max(1,Math.min(h+p*l,C)),U=k-D;U<0&&(U+=C);let T=U|0,K=T+1;K>=C&&(K-=C);let J=U-T,Ae=r[T]*(1-J)+r[K]*J;r[k]=y+Ae*u;let G=Math.max(1,Math.min(h+(1-p)*l,C)),P=k-G;P<0&&(P+=C),T=P|0,K=T+1,K>=C&&(K-=C),J=P-T;let f=o[T]*(1-J)+o[K]*J,M=x+a;e[M]+=Ae*d,t[M]+=f*d;let b=(Ae+f)/2;s[x]+=b*B,n[x]+=b*m,o[k]=y+f*u,++k>=C&&(k=0),(L+=g)>=1&&(L-=1)}this.write=k,this.phase=L,this.preLPFz=S}getSnapshot(){return{preLowpass:this._preLowpass,depth:this._depth,delay:this._delay,sendLevelToDelay:this._sendLevelToDelay,sendLevelToReverb:this._sendLevelToReverb,rate:this._rate,feedback:this._feedback,level:this._level}}},or=[{start:1,end:20,timeStart:.1,resolution:.1},{start:20,end:35,timeStart:2,resolution:.2},{start:35,end:45,timeStart:5,resolution:.5},{start:45,end:55,timeStart:10,resolution:1},{start:55,end:70,timeStart:20,resolution:2},{start:70,end:80,timeStart:50,resolution:5},{start:80,end:90,timeStart:100,resolution:10},{start:90,end:105,timeStart:200,resolution:20},{start:105,end:116,timeStart:500,resolution:50}],gr=1.66,Ir=class{preLPFfc=8e3;preLPFa=0;preLPFz=0;delayLeft;delayRight;delayCenter;sampleRate;delayCenterOutput;delayPreLPF;delayCenterTime;delayLeftMultiplier=.04;delayRightMultiplier=.04;gain=0;reverbGain=0;constructor(A,e){this.sampleRate=A,this.delayCenterOutput=new Float32Array(e),this.delayPreLPF=new Float32Array(e),this.delayCenterTime=.34*A,this.delayCenter=new fA(A),this.delayLeft=new fA(A),this.delayRight=new fA(A)}_sendLevelToReverb=0;get sendLevelToReverb(){return this._sendLevelToReverb}set sendLevelToReverb(A){this._sendLevelToReverb=A,this.reverbGain=A/127}_preLowpass=0;get preLowpass(){return this._preLowpass}set preLowpass(A){this._preLowpass=A,this.preLPFfc=8e3*.63**this._preLowpass;let e=Math.exp(-2*Math.PI*this.preLPFfc/this.sampleRate);this.preLPFa=1-e}_levelRight=0;get levelRight(){return this._levelRight}set levelRight(A){this._levelRight=A,this.updateGain()}_level=64;get level(){return this._level}set level(A){this._level=A,this.gain=A/127*gr}_levelCenter=127;get levelCenter(){return this._levelCenter}set levelCenter(A){this._levelCenter=A,this.updateGain()}_levelLeft=0;get levelLeft(){return this._levelLeft}set levelLeft(A){this._levelLeft=A,this.updateGain()}_feedback=16;get feedback(){return this._feedback}set feedback(A){this._feedback=A,this.delayLeft.feedback=this.delayRight.feedback=0,this.delayCenter.feedback=(A-64)/66}_timeRatioRight=0;get timeRatioRight(){return this._timeRatioRight}set timeRatioRight(A){this._timeRatioRight=A,this.delayRightMultiplier=A*(100/2400),this.delayRight.time=this.delayCenterTime*this.delayRightMultiplier}_timeRatioLeft=0;get timeRatioLeft(){return this._timeRatioLeft}set timeRatioLeft(A){this._timeRatioLeft=A,this.delayLeftMultiplier=A*(100/2400),this.delayLeft.time=this.delayCenterTime*this.delayLeftMultiplier}_timeCenter=12;get timeCenter(){return this._timeCenter}set timeCenter(A){this._timeCenter=A;let e=.1;for(let t of or)if(A>=t.start&&A<t.end){e=t.timeStart+(A-t.start)*t.resolution;break}this.delayCenterTime=Math.max(2,this.sampleRate*(e/1e3)),this.delayCenter.time=this.delayCenterTime,this.delayLeft.time=this.delayCenterTime*this.delayLeftMultiplier,this.delayRight.time=this.delayCenterTime*this.delayRightMultiplier}process(A,e,t,s,n,a){let i;if(this._preLowpass>0){let l=this.delayPreLPF,h=this.preLPFz,d=this.preLPFa;for(let B=0;B<a;B++){let m=A[B];h+=d*(m-h),l[B]=h}this.preLPFz=h,i=l}else i=A;let{gain:r,reverbGain:o}=this;this.delayCenter.process(i,this.delayCenterOutput,a);let g=this.delayCenterOutput;for(let l=0,h=n;l<a;l++,h++){let d=g[l];s[l]+=d*o;let B=d*r;e[h]+=B,t[h]+=B}for(let l=0;l<a;l++)g[l]+=A[l];let C=this.delayPreLPF;this.delayLeft.process(g,C,a);for(let l=0,h=n;l<a;l++,h++){let d=C[l];e[h]+=d*r,s[l]+=d*o}this.delayRight.process(g,C,a);for(let l=0,h=n;l<a;l++,h++){let d=C[l];t[h]+=d*r,s[l]+=d*o}}getSnapshot(){return{level:this._level,preLowpass:this._preLowpass,timeCenter:this._timeCenter,timeRatioRight:this._timeRatioRight,timeRatioLeft:this._timeRatioLeft,levelCenter:this._levelCenter,levelLeft:this._levelLeft,levelRight:this._levelRight,feedback:this._feedback,sendLevelToReverb:this._sendLevelToReverb}}updateGain(){this.delayCenter.gain=this._levelCenter/127,this.delayLeft.gain=this._levelLeft/127,this.delayRight.gain=this._levelRight/127}},Gs={volume:1,pan:0,keyShift:0,fineTune:0,system:"gs"};function cr(A,e){if(!this.lockedMIDIParameters[A]){this.midiParameters[A]=e;for(let t of this.midiChannels)t.updateInternalParams();this.callEvent("globalParamChange",{parameter:A,value:e})}}function Cr(A,e){this.lockedMIDIParameters[A]=e}var lr=.01,hr=.05,Br=class{voices=[];midiChannels=[];maxBufferSize;voiceBuffer;insertionInputL;insertionInputR;reverbInput;chorusInput;delayInput;delayActive=!1;soundBankManager=new vi(this.updatePresetList.bind(this));keyModifierManager=new wn;sampleRate;tunings=new Float32Array(16384).fill(-1);lockedMIDIParameters=Object.fromEntries(Object.keys(Gs).map(A=>[A,!1]));midiParameters={...Gs};systemParameters={...zs};currentTime=0;defaultPreset;drumPreset;gainSmoothingFactor;panSmoothingFactor;eventCallbackHandler;missingPresetHandler;cachedVoices=new Map;lockMIDIParameter=Cr.bind(this);setSystemParameter=Mn.bind(this);systemExclusive=Pi.bind(this);reverbProcessor;chorusProcessor;delayProcessor;customChannelNumbers=!1;setMIDIParameter=cr.bind(this);insertionFallback=new ha;insertionProcessor=this.insertionFallback;insertionEffects=new Map;insertionActive=!1;portSelectChannelOffset=0;insertionParams=new Uint8Array(23).fill(255);lastPriorityAssignmentTime=0;eventQueue=[];sampleTime;constructor(A,e,t,s){this.eventCallbackHandler=A,this.missingPresetHandler=e,this.sampleRate=t,this.sampleTime=1/t,this.currentTime=s.initialTime,this.setSystemParameter("effectsEnabled",s.effectsEnabled),this.setSystemParameter("eventsEnabled",s.eventsEnabled),this.maxBufferSize=s.maxBufferSize,this.gainSmoothingFactor=lr*(44100/t),this.panSmoothingFactor=hr*(44100/t),qt.initCache(this.sampleRate);let n=this.maxBufferSize;this.reverbProcessor=s.reverbProcessor??new nr(t,n),this.chorusProcessor=s.chorusProcessor??new rr(t,n),this.delayProcessor=s.delayProcessor??new Ir(t,n),this.voiceBuffer=new Float32Array(n),this.insertionInputL=new Float32Array(n),this.insertionInputR=new Float32Array(n),this.reverbInput=new Float32Array(n),this.chorusInput=new Float32Array(n),this.delayInput=new Float32Array(n);for(let a of tr)this.registerInsertionProcessor(a);this.resetInsertionParams(),this.allocateNewVoices(this.systemParameters.voiceCap)}_voiceCount=0;get voiceCount(){return this._voiceCount}controllerChange(A,e,t){if(this.customChannelNumbers){for(let s of this.midiChannels)s.midiParameters.rxChannel===A&&s.controllerChange(e,t);return}this.midiChannels[A+this.portSelectChannelOffset].controllerChange(e,t)}noteOn(A,e,t){if(this.customChannelNumbers){for(let s of this.midiChannels)s.midiParameters.rxChannel===A&&s.noteOn(e,t);return}this.midiChannels[A+this.portSelectChannelOffset].noteOn(e,t)}noteOff(A,e){if(this.customChannelNumbers){for(let t of this.midiChannels)t.midiParameters.rxChannel===A&&t.noteOff(e);return}this.midiChannels[A+this.portSelectChannelOffset].noteOff(e)}polyPressure(A,e,t){if(this.customChannelNumbers){for(let s of this.midiChannels)s.midiParameters.rxChannel===A&&s.polyPressure(e,t);return}this.midiChannels[A+this.portSelectChannelOffset].polyPressure(e,t)}channelPressure(A,e){if(this.customChannelNumbers){for(let t of this.midiChannels)t.midiParameters.rxChannel===A&&t.setMIDIParameter("pressure",e);return}this.midiChannels[A+this.portSelectChannelOffset].setMIDIParameter("pressure",e)}pitchWheel(A,e,t=-1){if(this.customChannelNumbers){for(let s of this.midiChannels)s.midiParameters.rxChannel===A&&s.pitchWheel(e,t);return}this.midiChannels[A+this.portSelectChannelOffset].pitchWheel(e,t)}programChange(A,e){if(this.customChannelNumbers){for(let t of this.midiChannels)t.midiParameters.rxChannel===A&&t.programChange(e);return}this.midiChannels[A+this.portSelectChannelOffset].programChange(e)}assignVoice(){for(let e=0;e<this.systemParameters.voiceCap;e++){let t=this.voices[e];if(!t.isActive)return t.priority=1/0,t}if(this.systemParameters.autoAllocateVoices){c.info(`%cAllocating a new voice, total count %c${this.systemParameters.voiceCap+1}.`,E.info,E.value),this.allocateNewVoices(1);let e=this.voices[this.voices.length-1];return this.systemParameters.voiceCap++,e.priority=1/0,e}this.assignVoicePriorities();let A=this.voices[0];for(let e=0;e<this.systemParameters.voiceCap;e++){let t=this.voices[e];t.priority<A.priority&&(A=t)}return A.priority=1/0,A}stopAllChannels(A){c.info("%cStop all received!",E.info);for(let e of this.midiChannels)e.stopAllNotes(A)}processMessage(A,e=0,t=Ya){let s=t.time;s>this.currentTime?(this.eventQueue.push({message:A,channelOffset:e,time:s}),this.eventQueue.sort((n,a)=>n.time-a.time)):this.processMessageInternal(A,e)}destroySynthProcessor(){this.voices.length=0;for(let A of this.midiChannels)A.destroy();this.clearCache(),this.midiChannels.length=0,this.soundBankManager.destroy()}getVoices(A,e,t){let s=this.midiChannels[A],n=this.keyModifierManager.hasOverridePatch(A,e),a=s.preset;if(n){let i=this.keyModifierManager.getPatch(A,e);a=this.soundBankManager.getPreset(i,this.midiParameters.system)}return a?this.getVoicesForPreset(a,e,t):[]}createMIDIChannel(A){let e=new Mi(this,this.defaultPreset,this.midiChannels.length);this.midiChannels.push(e),A&&(this.callEvent("channelAdded",void 0),e.setDrums(!0))}reset(A="gs"){if(this.callEvent("reset",A),this.setMIDIParameter("system",A),this.setMIDIParameter("volume",1),this.setMIDIParameter("pan",0),this.setMIDIParameter("keyShift",0),this.setMIDIParameter("fineTune",0),this.tunings.fill(-1),this.portSelectChannelOffset=0,this.customChannelNumbers=!1,this.setReverbMacro(4),this.setChorusMacro(2),this.setDelayMacro(0),this.resetInsertion(),!(!this.drumPreset||!this.defaultPreset)){for(let e of this.midiChannels)e.reset(!1);this.updateActiveEffects()}}process(A,e,t=0,s=0){this.processSplit([[A,e]],A,e,t,s)}processSplit(A,e,t,s=0,n=0){if(this.eventQueue.length>0){let o=this.currentTime;for(;this.eventQueue[0]?.time<=o;){let g=this.eventQueue.shift();g&&this.processMessageInternal(g.message,g.channelOffset)}}s=Math.max(s,0);let a=n||A[0][0].length-s;if(a>this.maxBufferSize)throw new Error(`Requested ${a} samples, but maxBufferSize is ${this.maxBufferSize}`);this.reverbInput.fill(0),this.chorusInput.fill(0),this.delayActive&&this.delayInput.fill(0),this.insertionActive&&(this.insertionInputL.fill(0),this.insertionInputR.fill(0));for(let o of this.midiChannels)o.clearVoiceCount();this._voiceCount=0;let i=this.systemParameters.voiceCap,r=A.length;for(let o=0;o<i;o++){let g=this.voices[o],C=this.midiChannels[g.channel];if(!g.isActive)continue;let l=g.channel%r;C.renderVoice(g,this.currentTime,A[l][0],A[l][1],s,a),C.voiceCount++,this._voiceCount++}if(this.systemParameters.effectsEnabled){let{chorusInput:o,delayInput:g,reverbInput:C,insertionInputR:l,insertionInputL:h}=this;this.insertionActive&&this.insertionProcessor.process(h,l,e,t,C,o,g,s,a),this.chorusProcessor.process(o,e,t,C,g,s,a),this.delayActive&&this.midiParameters.system!=="xg"&&this.delayProcessor.process(g,e,t,C,s,a),this.reverbProcessor.process(C,e,t,s,a)}this.currentTime+=a*this.sampleTime}getVoicesForPreset(A,e,t){let s=this.getCachedVoice(A,e,t);if(s!==void 0)return s;let n=new Array;for(let a of A.getVoiceParameters(e,t)){let i=a.sample;if(a.sample.getAudioData()===void 0){c.warn(`Discarding invalid sample: ${i.name}`);continue}n.push(new ai(a,e,t,this.sampleRate))}return this.setCachedVoice(A,e,t,n),n}clearCache(){this.cachedVoices.clear()}callEvent(A,e){this.eventCallbackHandler(A,e)}updateActiveEffects(){this.systemParameters.insertionEffectLock||(this.insertionActive=this.midiChannels.some(A=>A.midiParameters.efxAssign)),this.systemParameters.delayLock||(this.delayActive=this.midiParameters.system==="xg"?!1:this.chorusProcessor.sendLevelToDelay>0||this.insertionProcessor.sendLevelToDelay>0||this.midiChannels.some(A=>A.midiControllers[Q.variationDepth]>0))}getInsertionSnapshot(){return{type:this.insertionProcessor.type,params:this.insertionParams.slice()}}resetInsertionParams(){this.insertionParams.fill(255),this.insertionParams[20]=40,this.insertionParams[21]=0,this.insertionParams[22]=0}resetInsertion(){this.systemParameters.insertionEffectLock||(this.insertionProcessor=this.insertionFallback,this.insertionProcessor.reset(),this.resetInsertionParams(),this.insertionProcessor.sendLevelToReverb=40/127*GA,this.insertionProcessor.sendLevelToChorus=0,this.insertionProcessor.sendLevelToDelay=0,this.callEvent("effectChange",{effect:"insertion",parameter:0,value:this.insertionProcessor.type}))}setReverbMacro(A){if(this.systemParameters.reverbLock)return;let e=this.reverbProcessor;switch(e.level=64,e.preDelayTime=0,e.character=A,A){case 0:e.character=0,e.preLowpass=3,e.time=80,e.delayFeedback=0,e.preDelayTime=0;break;case 1:e.preLowpass=4,e.time=56,e.delayFeedback=0;break;case 2:e.preLowpass=0,e.time=72,e.delayFeedback=0;break;case 3:e.preLowpass=4,e.time=72,e.delayFeedback=0;break;case 4:e.preLowpass=0,e.time=64,e.delayFeedback=0;break;case 5:e.preLowpass=0,e.time=88,e.delayFeedback=0;break;case 6:e.preLowpass=0,e.time=32,e.delayFeedback=40;break;case 7:e.preLowpass=0,e.time=64,e.delayFeedback=32;break;default:c.warn(`Invalid reverb macro: ${A}`);return}this.callEvent("effectChange",{effect:"reverb",parameter:"macro",value:A})}setChorusMacro(A){if(this.systemParameters.chorusLock)return;let e=this.chorusProcessor;switch(e.level=64,e.preLowpass=0,e.delay=127,e.sendLevelToDelay=0,e.sendLevelToReverb=0,A){case 0:e.feedback=0,e.delay=112,e.rate=3,e.depth=5;break;case 1:e.feedback=5,e.delay=80,e.rate=9,e.depth=19;break;case 2:e.feedback=8,e.delay=80,e.rate=3,e.depth=19;break;case 3:e.feedback=16,e.delay=64,e.rate=9,e.depth=16;break;case 4:e.feedback=64,e.delay=127,e.rate=2,e.depth=24;break;case 5:e.feedback=112,e.delay=127,e.rate=1,e.depth=5;break;case 6:e.feedback=0,e.depth=127,e.rate=0,e.depth=127;break;case 7:e.feedback=80,e.depth=127,e.rate=0,e.depth=127;break;default:c.warn(`Invalid chorus macro: ${A}`);return}this.callEvent("effectChange",{effect:"chorus",parameter:"macro",value:A})}setDelayMacro(A){if(this.systemParameters.delayLock)return;let e=this.delayProcessor;switch(e.level=64,e.preLowpass=0,e.sendLevelToReverb=0,e.levelRight=e.levelLeft=0,e.levelCenter=127,A){case 0:e.timeCenter=97,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=80;break;case 1:e.timeCenter=106,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=80;break;case 2:e.timeCenter=115,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=72;break;case 3:e.timeCenter=83,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=72;break;case 4:e.timeCenter=105,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=125,e.levelRight=60,e.feedback=74;break;case 5:e.timeCenter=109,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=125,e.levelRight=60,e.feedback=71;break;case 6:e.timeCenter=115,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=120,e.levelRight=64,e.feedback=73;break;case 7:e.timeCenter=93,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=120,e.levelRight=64,e.feedback=72;break;case 8:e.timeCenter=109,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=114,e.levelRight=60,e.feedback=61,e.sendLevelToReverb=36;break;case 9:e.timeCenter=110,e.timeRatioLeft=21,e.timeRatioRight=32,e.levelCenter=97,e.levelLeft=127,e.levelRight=67,e.feedback=40;break;default:c.warn(`Invalid delay macro: ${A}`);return}this.callEvent("effectChange",{effect:"delay",parameter:"macro",value:A})}getCachedVoice(A,e,t){return this.cachedVoices.get(this.getCachedVoiceIndex(A,e,t))}setCachedVoice(A,e,t,s){this.cachedVoices.set(this.getCachedVoiceIndex(A,e,t),s)}allocateNewVoices(A){for(let e=0;e<A;e++)this.voices.push(new Gn(this.sampleRate,this.maxBufferSize))}registerInsertionProcessor(A){let e=new A(this.sampleRate,this.maxBufferSize);this.insertionEffects.set(e.type,e)}processMessageInternal(A,e){let t=A[0],s,n=0;switch(t>=128&&t<240?(s=t&240,n=t&15):s=t,n+=e,s){case R.noteOn:{let a=A[2];a>0?this.noteOn(n,A[1],a):this.noteOff(n,A[1]);break}case R.noteOff:this.noteOff(n,A[1]);break;case R.pitchWheel:this.pitchWheel(n,A[2]<<7|A[1]);break;case R.controllerChange:this.controllerChange(n,A[1],A[2]);break;case R.programChange:this.programChange(n,A[1]);break;case R.polyPressure:this.polyPressure(n,A[1],A[2]);break;case R.channelPressure:this.channelPressure(n,A[1]);break;case R.systemExclusive:this.systemExclusive(new j(A.slice(1)),e);break;case R.reset:this.stopAllChannels(!1),this.reset();break;default:break}}assignVoicePriorities(){if(this.lastPriorityAssignmentTime===this.currentTime)return;c.info("%cPolyphony exceeded, stealing voices",E.warn),this.lastPriorityAssignmentTime=this.currentTime;let A=this.systemParameters.voiceCap;for(let e=0;e<A;e++){let t=this.voices[e];t.priority=0,this.midiChannels[t.channel].drumChannel&&(t.priority+=5),t.isInRelease&&(t.priority-=5),t.priority+=t.velocity/25,t.priority-=t.volEnv.state,t.isInRelease&&(t.priority-=5),t.priority-=t.volEnv.attenuationCb/200}}updatePresetList(){let A=this.soundBankManager.presetList;this.clearCache(),this.callEvent("presetListChange",A),this.getDefaultPresets();for(let e of this.midiChannels){let t=e.systemParameters.presetLock;e.setSystemParameter("presetLock",!1),e.programChange(e.patch.program),e.setSystemParameter("presetLock",t)}this.reset()}getDefaultPresets(){this.defaultPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!1},"xg"),this.drumPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!0},"gs")}getCachedVoiceIndex(A,e,t){let s=A.bankMSB,n=A.bankLSB,{isGMGSDrum:a,program:i}=A;return a&&(s=128,n=0),s+n*128+i*16384+2097152*e+268435456*t}},ua=class{processorInitialized=Vt.isSF3DecoderReady;sampleRate;onEventCall;process;processSplit;systemExclusive;controllerChange;noteOn;noteOff;polyPressure;channelPressure;pitchWheel;programChange;processMessage;synthCore;savedSnapshot;constructor(A,e={}){let t=pA(e,yn);if(this.sampleRate=A,!Number.isFinite(t.initialTime)||!Number.isFinite(A))throw new TypeError(`Initial time or sample rate is invalid! initial time: ${t.initialTime}, sample rate: ${A}`);this.synthCore=new Br(this.callEvent.bind(this),this.missingPreset.bind(this),this.sampleRate,t);let s=this.synthCore;this.process=s.process.bind(s),this.processSplit=s.processSplit.bind(s),this.systemExclusive=s.systemExclusive.bind(s),this.controllerChange=s.controllerChange.bind(s),this.noteOn=s.noteOn.bind(s),this.noteOff=s.noteOff.bind(s),this.polyPressure=s.polyPressure.bind(s),this.channelPressure=s.channelPressure.bind(s),this.pitchWheel=s.pitchWheel.bind(s),this.programChange=s.programChange.bind(s),this.processMessage=s.processMessage.bind(s);for(let n=0;n<16;n++)this.synthCore.createMIDIChannel(!1);this.processorInitialized.then(()=>{c.info("%cSpessaSynth is ready!",E.recognized)})}get midiChannels(){return this.synthCore.midiChannels}get midiParameters(){return this.synthCore.midiParameters}get systemParameters(){return this.synthCore.systemParameters}get voiceCount(){return this.synthCore.voiceCount}get currentTime(){return this.synthCore.currentTime}get reverbProcessor(){return this.synthCore.reverbProcessor}get chorusProcessor(){return this.synthCore.chorusProcessor}get delayProcessor(){return this.synthCore.delayProcessor}get soundBankManager(){return this.synthCore.soundBankManager}get keyModifierManager(){return this.synthCore.keyModifierManager}onMissingPreset=(A,e)=>{c.warn(`No preset found for ${be.toMIDIString(A)}! Did you forget to add a sound bank?`)};lockMIDIParameter(A,e){this.synthCore.lockMIDIParameter(A,e)}setSystemParameter(A,e){this.synthCore.setSystemParameter(A,e)}reset(){this.synthCore.reset()}applySnapshot(A){this.savedSnapshot=A,kn.call(this.synthCore,A)}getSnapshot(){return Sn.call(this.synthCore)}setEmbeddedSoundBank(A,e){let t=yA.fromArrayBuffer(A);this.synthCore.soundBankManager.addSoundBank(t,MA,e);let s=this.synthCore.soundBankManager.priorityOrder;s.pop(),s.unshift(MA),this.synthCore.soundBankManager.priorityOrder=s,this.savedSnapshot!==void 0&&this.applySnapshot(this.savedSnapshot),c.info(`%cEmbedded sound bank set at offset %c${e}`,E.recognized,E.value)}clearEmbeddedSoundBank(){this.synthCore.soundBankManager.soundBankList.some(A=>A.id===MA)&&this.synthCore.soundBankManager.deleteSoundBank(MA)}createMIDIChannel(){this.synthCore.createMIDIChannel(!0)}stopAllChannels(A=!1){this.synthCore.stopAllChannels(A)}destroySynthProcessor(){this.synthCore.destroySynthProcessor()}clearCache(){this.synthCore.clearCache()}getVoicesForPreset(A,e,t){return this.synthCore.getVoicesForPreset(A,e,t)}callEvent(A,e){this.onEventCall?.({type:A,data:e})}missingPreset(A,e){return this.onMissingPreset(A,e)}};var et=Js.ConsoleColors;var ma="spessasynth-worklet-processor";function pa(A,e){return{...e,...A}}var Da={skipToFirstNoteOn:!0,initialPlaybackRate:1};var Zt=class extends _A{events=[];constructor(e){super(),super.copyFrom(e),this.events=[]}},At=class A extends $e{tracks;timeline=[];embeddedSoundBank=void 0;embeddedSoundBankSize;constructor(e){super(),super.copyMetadataFrom(e),this.tracks=e.tracks.map(t=>new Zt(t)),this.embeddedSoundBankSize=e instanceof A?e.embeddedSoundBankSize:e?.embeddedSoundBank?.byteLength}};var tt={shuffleOn:1,shuffleOff:2,index:3};var ya=-1;var wa=1,st=class{synthesizer;sequencers=new Array;post;lastSequencerSync=0;voiceCounts=new Array(16).fill(0);alive=!1;eventsEnabled;constructor(e,t,s){this.synthesizer=new ua(e,t),this.eventsEnabled=t.eventsEnabled??!1,this.post=s,this.synthesizer.onEventCall=n=>{if(n.type==="channelAdded"){let a=this.synthesizer.midiChannels.length;for(let i=this.voiceCounts.length;i<a;i++)this.voiceCounts.push(0)}this.post({type:"eventCall",data:n,currentTime:this.synthesizer.currentTime})}}createNewSequencer(){let e=new qs(this.synthesizer),t=this.sequencers.length;this.sequencers.push(e),e.onEventCall=s=>{if(this.eventsEnabled){if(s.type==="songListChange"){let a=s.data.newSongList.map(i=>new At(i));this.post({type:"sequencerReturn",data:{type:s.type,data:{newSongList:a,shuffledSongIndexes:e.shuffledSongIndexes},id:t},currentTime:this.synthesizer.currentTime});return}this.post({type:"sequencerReturn",data:{...s,id:t},currentTime:this.synthesizer.currentTime})}}}postReady(e,t,s=[]){this.post({type:"isFullyInitialized",data:{type:e,data:t},currentTime:this.synthesizer.currentTime},s)}postProgress(e,t){this.post({type:"renderingProgress",data:{type:e,data:t},currentTime:this.synthesizer.currentTime})}destroy(){this.synthesizer.destroySynthProcessor(),delete this.synthesizer,delete this.sequencers}handleMessage(e){let t=e.channelNumber,s;if(t>=0&&(s=this.synthesizer.midiChannels[t],s===void 0)){c.warn(`Trying to access channel ${t} which does not exist... ignoring!`);return}switch(e.type){case"midiMessage":{this.synthesizer.processMessage(e.data.messageData,e.data.channelOffset,e.data.options);break}case"ccReset":{this.synthesizer.reset();break}case"stopAll":{t===ya?this.synthesizer.stopAllChannels(e.data===1):s?.stopAllNotes(e.data===1);break}case"addNewChannel":{this.synthesizer.createMIDIChannel();break}case"lockGlobalMIDIParameter":{this.synthesizer.lockMIDIParameter(e.data.parameter,e.data.isLocked);break}case"setGlobalSystemParameter":{this.synthesizer.setSystemParameter(e.data.parameter,e.data.value);break}case"lockChannelMIDIParameter":{s?.lockMIDIParameter(e.data.parameter,e.data.isLocked);break}case"setChannelSystemParameter":{s?.setSystemParameter(e.data.parameter,e.data.value);break}case"setDrums":{s?.setDrums(e.data);break}case"lockController":{s?.lockController(e.data.controller,e.data.isLocked);break}case"sequencerSpecific":{let n=this.sequencers[e.data.id];if(!n)return;let a=e.data;switch(a.type){default:break;case"loadNewSongList":{try{let r=a.data.map(o=>"duration"in o?$e.copyFrom(o):$e.fromArrayBuffer(o.binary,o.fileName));n.loadNewSongList(r)}catch(i){console.error(i),this.post({type:"sequencerReturn",data:{type:"midiError",data:i,id:e.data.id},currentTime:this.synthesizer.currentTime})}break}case"pause":{n.pause();break}case"play":{n.play();break}case"setTime":{n.currentTime=a.data;break}case"changeMIDIMessageSending":{n.externalMIDIPlayback=a.data;break}case"setPlaybackRate":{n.playbackRate=a.data;break}case"setLoopCount":{n.loopCount=a.data;break}case"changeSong":{switch(a.data.changeType){case tt.shuffleOff:{n.shuffleMode=!1;break}case tt.shuffleOn:{n.shuffleMode=!0;break}case tt.index:{a.data.data!==void 0&&(n.songIndex=a.data.data);break}}break}case"getMIDI":{if(!n.midiData)throw new Error("No MIDI is loaded!");this.post({type:"sequencerReturn",data:{type:"getMIDI",data:n.midiData,id:e.data.id},currentTime:this.synthesizer.currentTime});break}case"setSkipToFirstNote":{n.skipToFirstNoteOn=a.data;break}}break}case"soundBankManager":{try{let n=this.synthesizer.soundBankManager,a=e.data,i;switch(a.type){case"addSoundBank":{i=yA.fromArrayBuffer(a.data.soundBankBuffer),n.addSoundBank(i,a.data.id,a.data.bankOffset),this.postReady("soundBankManager",null);break}case"deleteSoundBank":{n.deleteSoundBank(a.data),this.postReady("soundBankManager",null);break}case"rearrangeSoundBanks":n.priorityOrder=a.data,this.postReady("soundBankManager",null)}}catch(n){this.post({type:"soundBankError",data:n,currentTime:this.synthesizer.currentTime})}break}case"keyModifierManager":{let n=e.data,a=this.synthesizer.keyModifierManager;switch(n.type){default:return;case"addMapping":{a.addMapping(n.data.channel,n.data.midiNote,n.data.mapping);break}case"clearMappings":{a.clearMappings();break}case"deleteMapping":a.deleteMapping(n.data.channel,n.data.midiNote)}break}case"requestSynthesizerSnapshot":{let n=this.synthesizer.getSnapshot();this.postReady("synthesizerSnapshot",n);break}case"requestNewSequencer":{this.createNewSequencer();break}case"setLogLevel":{c.setLogLevel(e.data.enableInfo,e.data.enableWarning,e.data.enableGroup);break}case"destroyWorklet":{this.alive=!1,this.synthesizer.destroySynthProcessor(),this.destroy();break}default:{c.warn("Unrecognized event!",e);break}}}};var at=class extends st{alive=!0;oneOutputMode;port;constructor(e,t,s,n){super(e,{effectsEnabled:!n.oneOutput,eventsEnabled:n?.eventsEnabled,initialTime:t},(a,i)=>{s.postMessage(a,i)}),this.port=s,this.oneOutputMode=n.oneOutput,this.synthesizer.processorInitialized.then(()=>{this.port.onmessage=a=>this.handleMessage(a.data),this.postReady("sf3Decoder",null)})}process(e,t){if(!this.alive)return!1;for(let r of this.sequencers)r.processTick();if(this.oneOutputMode){let r=t[0],o=[];for(let g=0;g<32;g+=2)o.push([r[g],r[g+1]]);this.synthesizer.setSystemParameter("effectsEnabled",!1),this.synthesizer.processSplit(o,r[0],r[0])}else this.synthesizer.processSplit(t.slice(1),t[0][0],t[0][1]);let s=this.synthesizer.currentTime;if(this.eventsEnabled&&s-this.lastSequencerSync>wa){for(let r=0;r<this.sequencers.length;r++)this.post({type:"sequencerReturn",data:{type:"sync",data:this.sequencers[r].currentTime,id:r},currentTime:s});this.lastSequencerSync=s}let n=this.synthesizer.midiChannels,a=this.voiceCounts,i=!1;for(let r=0;r<n.length;r++)i||=n[r].voiceCount!==a[r],a[r]=n[r].voiceCount;return i&&this.post({type:"voiceCountChange",currentTime:s,data:a}),!0}handleMessage(e){if(e.type==="startOfflineRender"){this.startOfflineRender(e.data);return}super.handleMessage(e)}startOfflineRender(e){this.sequencers.length===0&&this.createNewSequencer();let t=this.sequencers[0];for(let[n,a]of e.soundBankList.entries())try{this.synthesizer.soundBankManager.addSoundBank(yA.fromArrayBuffer(a.soundBankBuffer),`bank-${n}`,a.bankOffset)}catch(i){this.post({type:"soundBankError",data:i,currentTime:this.synthesizer.currentTime})}e.snapshot!==void 0&&this.synthesizer.applySnapshot(e.snapshot),c.info("%cStarting to render the audio data!",et.info),t.loopCount=e.loopCount,this.synthesizer.setSystemParameter("autoAllocateVoices",!0);let s=pa(e.sequencerOptions,Da);t.skipToFirstNoteOn=s.skipToFirstNoteOn,t.playbackRate=s.initialPlaybackRate;try{t.loadNewSongList([$e.copyFrom(e.midiSequence)]),t.play()}catch(n){console.error(n),this.post({type:"sequencerReturn",data:{type:"midiError",data:n,id:0},currentTime:this.synthesizer.currentTime})}this.postReady("startOfflineRender",null)}};var Xt=class extends AudioWorkletProcessor{core;constructor(e){super(),this.core=new at(sampleRate,currentTime,this.port,e.processorOptions)}process(e,t){return this.core.process(e,t)}};registerProcessor(ma,Xt);c.info("%cProcessor successfully registered!",et.recognized);
|
|
16
|
+
(${e})`,E.warn,E.value,E.unrecognized)}toSFDestination(){let e=this.shortScale;switch(this.destination){default:case F.none:return;case F.pan:return I.pan;case F.gain:return{gen:I.initialAttenuation,newAmount:-e};case F.pitch:return I.fineTune;case F.keyNum:return I.keyNum;case F.volEnvDelay:return I.delayVolEnv;case F.volEnvAttack:return I.attackVolEnv;case F.volEnvHold:return I.holdVolEnv;case F.volEnvDecay:return I.decayVolEnv;case F.volEnvSustain:return{gen:I.sustainVolEnv,newAmount:1e3-e};case F.volEnvRelease:return I.releaseVolEnv;case F.modEnvDelay:return I.delayModEnv;case F.modEnvAttack:return I.attackModEnv;case F.modEnvHold:return I.holdModEnv;case F.modEnvDecay:return I.decayModEnv;case F.modEnvSustain:return{gen:I.sustainModEnv,newAmount:1e3-e};case F.modEnvRelease:return I.releaseModEnv;case F.filterCutoff:return I.initialFilterFc;case F.filterQ:return I.initialFilterQ;case F.chorusSend:return I.chorusEffectsSend;case F.reverbSend:return I.reverbEffectsSend;case F.modLfoFreq:return I.freqModLFO;case F.modLfoDelay:return I.delayModLFO;case F.vibLfoFreq:return I.freqVibLFO;case F.vibLfoDelay:return I.delayVibLFO}}},ra=class extends lA{connectionBlocks=new Array;mode="dls2";get length(){return this.connectionBlocks.length}copyFrom(A){this.mode=A.mode;for(let e of A.connectionBlocks)this.connectionBlocks.push(nA.copyFrom(e))}fromSFZone(A){this.mode="dls2";let e=new DA;e.copyFrom(A);for(let t of e.generators){let s;switch(t.type){default:continue;case I.keyNumToVolEnvDecay:s=I.decayVolEnv;break;case I.keyNumToVolEnvHold:s=I.holdVolEnv;break;case I.keyNumToModEnvDecay:s=I.decayModEnv;break;case I.keyNumToModEnvHold:s=I.holdModEnv}let n=e.getGenerator(s,void 0),a=t.value*-128;if(n===void 0)continue;let r=n-60/128*a;e.setGenerator(t.type,a,!1),e.setGenerator(s,r,!1)}for(let t of e.generators)nA.fromSFGenerator(t,this);for(let t of e.modulators)nA.fromSFModulator(t,this)}read(A){let e=N.findListType(A,"lart"),t=N.findListType(A,"lar2");if(e)for(this.mode="dls1";e.data.currentIndex<e.data.length;){let s=N.read(e.data);if(s.header!=="art1"&&s.header!=="art2")continue;let n=s.data,a=q(n,4);a!==8&&c.warn(`CbSize in articulation mismatch. Expected 8, got ${a}`);let r=q(n,4);for(let i=0;i<r;i++)this.connectionBlocks.push(nA.read(n))}else if(t)for(this.mode="dls2";t.data.currentIndex<t.data.length;){let s=N.read(t.data);if(s.header!=="art1"&&s.header!=="art2")continue;let n=s.data,a=q(n,4);a!==8&&c.warn(`CbSize in articulation mismatch. Expected 8, got ${a}`);let r=q(n,4);for(let i=0;i<r;i++)this.connectionBlocks.push(nA.read(n))}}write(){let A=new j(8);te(A,8),te(A,this.connectionBlocks.length);let e=this.connectionBlocks.map(s=>s.write()),t=N.getParts(this.mode==="dls2"?"art2":"art1",[A,...e]);return N.getParts(this.mode==="dls2"?"lar2":"lart",t,!1,!0)}toSFZone(A){let e=(t,s,n,a)=>{let r=t/-128;if(A.setGenerator(s,r),r<=120){let i=Math.round(.46875*t),o=this.connectionBlocks.find(g=>g.isStaticParameter&&g.destination===a);o&&A.setGenerator(n,i+o.shortScale)}};for(let t of this.connectionBlocks){let s=t.shortScale,n=t.source.source,a=t.control.source,r=t.destination;if(t.isStaticParameter){t.toSFGenerator(A);continue}if(a===Y.none)if(n===Y.keyNum){if(r===F.pitch){A.setGenerator(I.scaleTuning,s/128);continue}if(r===F.modEnvHold||r===F.modEnvDecay||r===F.volEnvHold||r===F.volEnvDecay)continue}else{let i=t.toCombinedSFDestination();if(i){A.setGenerator(i,s);continue}}t.toSFModulator(A)}for(let t of this.connectionBlocks){if(t.source.source!==Y.keyNum)continue;let s=t.shortScale;switch(t.destination){default:case F.volEnvHold:e(s,I.keyNumToVolEnvHold,I.holdVolEnv,F.volEnvHold);break;case F.volEnvDecay:e(s,I.keyNumToVolEnvDecay,I.decayVolEnv,F.volEnvDecay);break;case F.modEnvHold:e(s,I.keyNumToModEnvHold,I.holdModEnv,F.modEnvHold);break;case F.modEnvDecay:e(s,I.keyNumToModEnvDecay,I.decayModEnv,F.modEnvDecay);break}}if(this.mode==="dls1"){A.setGenerator(I.delayVibLFO,A.getGenerator(I.delayModLFO,null)),A.setGenerator(I.freqVibLFO,A.getGenerator(I.freqModLFO,null)),A.setGenerator(I.vibLfoToPitch,A.getGenerator(I.modLfoToPitch,null)),A.setGenerator(I.modLfoToPitch,null);for(let t of A.modulators)t.destination===I.modLfoToPitch&&(t.destination=I.vibLfoToPitch)}}},Qt=class TA{channel=1;tableIndex;fusOptions=0;phaseGroup=0;constructor(e){this.tableIndex=e}static copyFrom(e){let t=new TA(e.tableIndex);return t.channel=e.channel,t.phaseGroup=e.phaseGroup,t.fusOptions=e.fusOptions,t}static read(e){let t=q(e.data,2),s=q(e.data,2),n=q(e.data,4),a=new TA(q(e.data,4));return a.channel=n,a.fusOptions=t,a.phaseGroup=s,a}static fromSFZone(e,t){let s=e.indexOf(t.sample);if(s===-1)throw new Error(`Wave link error: Sample ${t.sample.name} does not exist in the sample list.`);let n=new TA(s);switch(t.sample.sampleType){default:case Qe.leftSample:case Qe.monoSample:n.channel=Math.trunc(1);break;case Qe.rightSample:n.channel=2}return n}write(){let e=new j(12);return X(e,this.fusOptions),X(e,this.phaseGroup),te(e,this.channel),te(e,this.tableIndex),N.write("wlnk",e)}},xA=class rA extends lA{articulation=new ra;keyRange={min:0,max:127};velRange={min:0,max:127};keyGroup=0;fusOptions=0;usLayer=0;waveSample;waveLink;constructor(e,t){super(),this.waveSample=t,this.waveLink=e}static copyFrom(e){let t=new rA(Qt.copyFrom(e.waveLink),IA.copyFrom(e.waveSample));return t.keyGroup=e.keyGroup,t.keyRange={...e.keyRange},t.velRange={...e.velRange},t.usLayer=e.usLayer,t.fusOptions=e.fusOptions,t.articulation.copyFrom(e.articulation),t}static read(e,t){let s=this.verifyAndReadList(t,"rgn ","rgn2"),n=s.find(p=>p.header==="wsmp"),a=n?IA.read(n):void 0,r=s.find(p=>p.header==="wlnk");if(!r){c.warn("Invalid DLS region: missing 'wlnk' chunk! Discarding...");return}let i=Qt.read(r),o=s.find(p=>p.header==="rgnh");if(!o){c.warn("Invalid DLS region: missing 'rgnh' chunk! Discarding...");return}let g=e[i.tableIndex];g||rA.parsingError(`Invalid sample index: ${i.tableIndex}. Samples available: ${e.length}`),a??=g.waveSample;let l=new rA(i,a),C=q(o.data,2),h=q(o.data,2),d=q(o.data,2),B=q(o.data,2);return d===0&&B===0&&(B=127,d=0),l.keyRange.max=h,l.keyRange.min=C,l.velRange.max=B,l.velRange.min=d,l.fusOptions=q(o.data,2),l.keyGroup=q(o.data,2),o.data.length-o.data.currentIndex>=2&&(l.usLayer=q(o.data,2)),l.articulation.read(s),l}static fromSFZone(e,t){let s=IA.fromSFZone(e),n=new rA(Qt.fromSFZone(t,e),s);return n.keyRange.min=Math.max(e.keyRange.min,0),n.keyRange.max=e.keyRange.max,n.velRange.min=Math.max(e.velRange.min,0),n.velRange.max=e.velRange.max,n.keyGroup=e.getGenerator(I.exclusiveClass,0),n.articulation.fromSFZone(e),n}write(){let e=[this.writeHeader(),this.waveSample.write(),this.waveLink.write(),...this.articulation.write()];return N.getParts("rgn2",e,!1,!0)}toSFZone(e,t){let s=t[this.waveLink.tableIndex];s||rA.parsingError(`Invalid sample index: ${this.waveLink.tableIndex}`);let n=e.createZone(s);return n.keyRange=this.keyRange,n.velRange=this.velRange,this.keyRange.max===127&&this.keyRange.min===0&&(n.keyRange.min=-1),this.velRange.max===127&&this.velRange.min===0&&(n.velRange.min=-1),this.keyGroup!==0&&n.setGenerator(I.exclusiveClass,this.keyGroup),this.waveSample.toSFZone(n,s),this.articulation.toSFZone(n),n.generators=n.generators.filter(a=>a.value!==Fe[a.type].def),n}writeHeader(){let e=new j(14);return X(e,Math.max(this.keyRange.min,0)),X(e,this.keyRange.max),X(e,Math.max(this.velRange.min,0)),X(e,this.velRange.max),X(e,this.fusOptions),X(e,this.keyGroup),X(e,this.usLayer),N.write("rgnh",e)}},ft=class UA extends lA{articulation=new ra;regions=new Array;name="Unnamed";bankLSB=0;bankMSB=0;isGMGSDrum=!1;program=0;static copyFrom(e){let t=new UA;t.name=e.name,t.isGMGSDrum=e.isGMGSDrum,t.bankMSB=e.bankMSB,t.bankLSB=e.bankLSB,t.program=e.program,t.articulation.copyFrom(e.articulation);for(let s of e.regions)t.regions.push(xA.copyFrom(s));return t}static read(e,t){let s=this.verifyAndReadList(t,"ins "),n=s.find(C=>C.header==="insh");if(!n)throw c.groupEnd(),new Error("No instrument header!");let a="",r=N.findListType(s,"INFO");if(r){let C=N.read(r.data);for(;C.header!=="INAM";)C=N.read(r.data);a=re(C.data,C.data.length).trim()}a.length===0&&(a="Unnamed Instrument");let i=new UA;i.name=a;let o=q(n.data,4),g=q(n.data,4);i.program=q(n.data,4)&127,i.bankMSB=g>>>8&127,i.bankLSB=g&127,i.isGMGSDrum=g>>>31>0,c.groupCollapsed(`%cParsing %c"${a}"%c...`,E.info,E.recognized,E.info);let l=N.findListType(s,"lrgn");if(!l)throw c.groupEnd(),new Error("No region list!");i.articulation.read(s);for(let C=0;C<o;C++){let h=N.read(l.data);this.verifyHeader(h,"LIST");let d=re(h.data,4);d!=="rgn "&&d!=="rgn2"&&(c.groupEnd(),this.parsingError(`Invalid DLS region! Expected "rgn " or "rgn2" got "${d}"`));let B=xA.read(e,h);B&&i.regions.push(B)}return c.groupEnd(),i}static fromSFPreset(e,t){let s=new UA;s.name=e.name,s.bankLSB=e.bankLSB,s.bankMSB=e.bankMSB,s.program=e.program,s.isGMGSDrum=e.isGMGSDrum,c.group(`%cConverting %c${e.toString()}%c to DLS...`,E.info,E.value,E.info);let n=e.toFlattenedInstrument();for(let a of n.zones)s.regions.push(xA.fromSFZone(a,t));return c.groupEnd(),s}write(){c.groupCollapsed(`%cWriting %c${this.name}%c...`,E.info,E.recognized,E.info);let e=[this.writeHeader()],t=this.regions.flatMap(n=>n.write());e.push(...N.getParts("lrgn",t,!1,!0)),this.articulation.length>0&&e.push(...this.articulation.write());let s=N.write("INAM",Pe(this.name,!0));return e.push(N.write("INFO",s,!1,!0)),c.groupEnd(),N.writeParts("ins ",e,!1,!0)}toSFPreset(e){let t=new uA(e);t.name=this.name,t.bankMSB=this.bankMSB,t.bankLSB=this.bankLSB,t.isGMGSDrum=this.isGMGSDrum,t.program=this.program;let s=new mA;s.name=this.name,t.createZone(s),this.articulation.toSFZone(s.globalZone);for(let n of this.regions)n.toSFZone(s,e.samples);s.globalize(),s.globalZone.modulators.some(n=>n.destination===I.reverbEffectsSend)||s.globalZone.addModulators(Be.copyFrom(aa)),s.globalZone.modulators.some(n=>n.destination===I.chorusEffectsSend)||s.globalZone.addModulators(Be.copyFrom(na)),s.globalZone.generators=s.globalZone.generators.filter(n=>n.value!==Fe[n.type].def),e.addPresets(t),e.addInstruments(s)}writeHeader(){let e=new j(12);te(e,this.regions.length);let t=(this.bankMSB&127)<<8|this.bankLSB&127;return this.isGMGSDrum&&(t|=1<<31),te(e,t),te(e,this.program&127),N.write("insh",e)}},Gt={software:"SpessaSynth"},ia=class Tt extends lA{samples=new Array;instruments=new Array;soundBankInfo={name:"Unnamed DLS sound bank",creationDate:new Date,software:"SpessaSynth",soundEngine:"DLS Level 2.2",product:"SpessaSynth DLS",version:{major:2,minor:4}};static read(e){if(!e)throw new Error("No data provided!");let t=new j(e);c.group("%cParsing DLS file...",E.info);let s=N.read(t,!1,!1);this.verifyHeader(s,"RIFF"),this.verifyText(re(t,4).toLowerCase(),"dls ");let n=[];for(;t.currentIndex<t.length;)n.push(N.read(t));let a=new Tt,r=N.findListType(n,"INFO");if(r)for(;r.data.currentIndex<r.data.length;){let B=N.read(r.data),p=B.header,D=re(B.data,B.size);switch(p){case"INAM":a.soundBankInfo.name=D;break;case"ICRD":a.soundBankInfo.creationDate=Ht(D);break;case"ICMT":a.soundBankInfo.comment=D;break;case"ISBJ":a.soundBankInfo.subject=D;break;case"ICOP":a.soundBankInfo.copyright=D;break;case"IENG":a.soundBankInfo.engineer=D;break;case"IPRD":a.soundBankInfo.product=D;break;case"ISFT":a.soundBankInfo.software=D}}this.printInfo(a);let i=n.find(B=>B.header==="colh");if(!i)return this.parsingError("No colh chunk!"),5;let o=q(i.data,4);c.info(`%cInstruments amount: %c${o}`,E.info,E.recognized);let g=N.findListType(n,"wvpl");if(!g)return this.parsingError("No wvpl chunk!"),5;let l=this.verifyAndReadList(g,"wvpl");for(let B of l)a.samples.push(Qs.read(B));let C=N.findListType(n,"lins");if(!C)return this.parsingError("No lins chunk!"),5;let h=this.verifyAndReadList(C,"lins");c.groupCollapsed("%cLoading instruments...",E.info),h.length!==o&&c.warn(`Colh reported invalid amount of instruments. Detected ${h.length}, expected ${o}`);for(let B of h)a.instruments.push(ft.read(a.samples,B));c.groupEnd();let d=n.find(B=>B.header==="pgal");if(d){c.info("%cFound the instrument aliasing chunk!",E.recognized);let B=d.data;(B[0]!==0||B[1]!==1||B[2]!==2||B[3]!==3)&&(B.currentIndex+=4);let p=a.instruments.find(w=>he.isXGDrum(w.bankMSB)||w.isGMGSDrum);if(!p)return c.warn("MobileBAE aliasing chunk without a drum preset. Aborting!"),a;let D=B.slice(B.currentIndex,B.currentIndex+128);B.currentIndex+=128;for(let w=0;w<128;w++){let L=D[w];if(L===w)continue;let k=p.regions.find(x=>x.keyRange.max===L&&x.keyRange.min===L);if(!k){c.warn(`Invalid drum alias ${w} to ${L}: region does not exist.`);continue}let S=xA.copyFrom(k);S.keyRange.max=w,S.keyRange.min=w;let v=new nA(new Me(Y.none,0,!1,!1),new Me(Y.none,0,!1,!1),F.keyNum,0,L<<16);S.articulation.connectionBlocks.push(v),p.regions.push(S)}for(B.currentIndex+=4;B.currentIndex<B.length;){let w=q(B,2),L=w&127,k=w>>7&127,S=B[B.currentIndex++],v=B[B.currentIndex++];v!==0&&c.warn(`Invalid alias byte. Expected 0, got ${v}`);let x=q(B,2),y=x&127,u=x>>7&127,m=B[B.currentIndex++];v=B[B.currentIndex++],v!==0&&c.warn(`Invalid alias header. Expected 0, got ${v}`);let K=a.instruments.find(U=>U.bankLSB===y&&U.bankMSB===u&&U.program===m&&!U.isGMGSDrum);if(!K){c.warn(`Invalid alias. Missing instrument: ${y}:${u}:${m}`);continue}let T=ft.copyFrom(K);T.bankMSB=k,T.bankLSB=L,T.program=S,a.instruments.push(T)}}return c.info(`%cParsing finished! %c"${a.soundBankInfo.name||"UNNAMED"}"%c has %c${a.instruments.length}%c instruments and %c${a.samples.length}%c samples.`,E.info,E.recognized,E.info,E.recognized,E.info,E.recognized,E.info),c.groupEnd(),a}static fromSF(e,t){c.groupCollapsed("%cSaving SF2 to DLS level 2...",E.info);let s=new Tt;s.soundBankInfo={...e.soundBankInfo};for(let n=0;n<e.samples.length;n++){let a=e.samples[n];s.samples.push(Qs.fromSFSample(a)),t?.(n/e.samples.length)}for(let n of e.presets)s.instruments.push(ft.fromSFPreset(n,e.samples));return c.info("%cConversion complete!",E.recognized),c.groupEnd(),s}static printInfo(e){for(let[t,s]of Object.entries(e.soundBankInfo))if(typeof s=="object"&&"major"in s){let n=s;c.info(`%c${t}: %c"${n.major}.${n.minor}"`,E.info,E.recognized)}else c.info(`%c${t}: %c${s.toLocaleString()}`,E.info,E.recognized)}write(e=Gt){let t=pA(e,Gt);c.groupCollapsed("%cSaving DLS...",E.info);let s=new j(4);te(s,this.instruments.length);let n=N.write("colh",s);c.groupCollapsed("%cWriting instruments...",E.info);let a=N.getParts("lins",this.instruments.map(w=>w.write()),!1,!0);c.info("%cSuccess!",E.recognized),c.groupEnd(),c.groupCollapsed("%cWriting WAVE samples...",E.info);let r=0,i=[],o=[],g=0;for(let w of this.samples){let L=w.write();t.progressFunction?.(g/this.samples.length),c.info(`%cWrote sample %c${g}. ${w.name}%c of %c${this.samples.length}.`,E.info,E.recognized,E.info,E.recognized),i.push(r),r+=L.reduce((k,S)=>k+S.length,0),o.push(...L),g++}let l=N.getParts("wvpl",o,!1,!0);c.info("%cSucceeded!",E.recognized);let C=new j(8+4*i.length);te(C,8),te(C,i.length);for(let w of i)te(C,w);let h=N.write("ptbl",C);this.soundBankInfo.software=t.software;let d=[],B=this.soundBankInfo,p=(w,L)=>{L&&d.push(...N.getParts(w,[Pe(L,!0)]))};p("INAM",B.name),p("ICMT",B.comment),p("ICOP",B.copyright),p("ICRD",Jt(B.creationDate)),p("IENG",B.engineer),p("IPRD",B.product),p("ISFT",t.software),p("ISBJ",B.subject),c.info("%cCombining everything...");let D=N.writeParts("RIFF",[Pe("DLS "),n,...a,h,...l,...N.getParts("INFO",d,!1,!0)]);return c.info("%cSaved successfully!",E.recognized),c.groupEnd(),D.buffer}toSF(){c.group("%cConverting DLS to SF2...",E.info);let e=new Vt("dls");e.soundBankInfo.version.minor=4,e.soundBankInfo.version.major=2,e.soundBankInfo={...this.soundBankInfo};for(let t of this.samples)t.toSFSample(e);for(let t of this.instruments)t.toSFPreset(e);return e.flush(),c.info("%cConversion complete!",E.recognized),c.groupEnd(),e}},Vt=class KA{static isSF3DecoderReady=wA.ready;type;soundBankInfo={name:"Unnamed",creationDate:new Date,software:"SpessaSynth",soundEngine:"E-mu 10K2",version:{major:2,minor:4}};presets=[];samples=[];instruments=[];defaultModulators=_s.map(Be.copyFrom.bind(Be));customDefaultModulators=!1;constructor(e="sf2"){this.type=e}_isXGBank=!1;get isXGBank(){return this._isXGBank}static mergeSoundBanks(...e){let t=e.shift();if(!t)throw new Error("No sound banks provided!");let s=t.presets;for(;e.length>0;){let a=e?.shift()?.presets;if(a)for(let r of a)s.some(i=>r.matches(i))||s.push(r)}let n=new KA;return n.addCompletePresets(s),n.soundBankInfo={...t.soundBankInfo},n}static getSampleSoundBankFile(){let e=new KA,t=new Float32Array(128);for(let r=0;r<128;r++)t[r]=r/128*2-1;let s=new Kn;s.name="Saw",s.originalKey=65,s.pitchCorrection=20,s.loopEnd=128,s.setAudioData(t,44100),e.addSamples(s);let n=new mA;n.name="Saw Wave",n.globalZone.addGenerators(new me(I.initialAttenuation,375),new me(I.releaseVolEnv,-1e3),new me(I.sampleModes,1)),n.createZone(s),n.createZone(s).setGenerator(I.fineTune,-9),e.addInstruments(n);let a=new uA(e);return a.name="Saw Wave",a.createZone(n),e.addPresets(a),e.soundBankInfo.name="SpessaSynth Sample Sound Bank",e.flush(),e.writeSF2()}static copyFrom(e){let t=new KA;for(let s of e.presets)t.clonePreset(s);return t.soundBankInfo={...e.soundBankInfo},t}addCompletePresets(e){this.addPresets(...e);let t=[];for(let n of e)for(let a of n.zones)a.instrument&&!t.includes(a.instrument)&&t.push(a.instrument);this.addInstruments(...t);let s=[];for(let n of t)for(let a of n.zones)a.sample&&!s.includes(a.sample)&&s.push(a.sample);this.addSamples(...s)}async setSampleFormat(e){let t=0,s=e.format,n=e.progressFunction;for(let a of this.samples){switch(s){default:case"pcm":a.setAudioData(a.getAudioData(),a.sampleRate);break;case"compressed":{let r=e.compressionFunction;if(!r)throw new Error(`No compression function supplied but '${s}' was requested.`);await a.compressSample(r)}}t++,n?.(t/this.samples.length),c.info(`%cEncoded sample %c${t}. ${a.name}%c of %c${this.samples.length}%c. Compressed: %c${a.isCompressed}%c.`,E.info,E.recognized,E.info,E.recognized,E.info,a.isCompressed?E.recognized:E.unrecognized,E.info)}switch(s){default:case"pcm":this.soundBankInfo.version.major=2,this.soundBankInfo.version.minor=4;break;case"compressed":this.soundBankInfo.version.major=3,this.soundBankInfo.version.minor=0}}writeDLS(e=Gt){let t=e.progressFunction;return ia.fromSF(this,t?s=>t(s/2):void 0).write({...e,progressFunction:t?s=>t(.5+s/2):void 0})}writeSF2(e=Aa){return zn(this,e)}writeSFE(e=ta){return Vn(this,e)}addPresets(...e){this.presets.push(...e)}addInstruments(...e){this.instruments.push(...e)}addSamples(...e){this.samples.push(...e)}cloneSample(e){let t=this.samples.find(n=>n.name===e.name);if(t)return t;let s=new $A(e.name,e.sampleRate,e.originalKey,e.pitchCorrection,e.sampleType,e.loopStart,e.loopEnd);if(e.isCompressed?s.setCompressedData(e.getRawData(!0)):s.setAudioData(e.getAudioData(),e.sampleRate),this.addSamples(s),e.linkedSample){let n=this.cloneSample(e.linkedSample);n.linkedSample||s.setLinkedSample(n,s.sampleType)}return s}cloneInstrument(e){let t=this.instruments.find(n=>n.name===e.name);if(t)return t;let s=new mA;s.name=e.name,s.globalZone.copyFrom(e.globalZone);for(let n of e.zones)s.createZone(this.cloneSample(n.sample)).copyFrom(n);return this.addInstruments(s),s}clonePreset(e){let t=this.presets.find(n=>n.name===e.name);if(t)return t;let s=new uA(this);s.name=e.name,s.bankMSB=e.bankMSB,s.bankLSB=e.bankLSB,s.isGMGSDrum=e.isGMGSDrum,s.program=e.program,s.library=e.library,s.genre=e.genre,s.morphology=e.morphology,s.globalZone.copyFrom(e.globalZone);for(let n of e.zones)s.createZone(this.cloneInstrument(n.instrument)).copyFrom(n);return this.addPresets(s),s}flush(){this.presets.sort(be.compare.bind(be)),this.parseInternal()}trim(e){let t=(s,n)=>{let a=0;for(let r=0;r<s.zones.length;r++){let i=s.zones[r],o=i.keyRange,g=i.velRange,l=!1;for(let[C,h]of n)if(C>=o.min&&C<=o.max&&[...h].some(d=>d>=g.min&&d<=g.max)){l=!0;break}l||(c.info(`%c${i.sample.name}%c removed from %c${s.name}%c.`,E.recognized,E.info,E.recognized,E.info),s.deleteZone(r)&&(a++,r--,c.info(`%c${i.sample.name}%c deleted`,E.recognized,E.info)),i.sample.useCount<1&&this.deleteSample(i.sample))}return a};c.groupCollapsed("%cTrimming sound bank...",E.info),c.info("Combinations to trim for:",e);for(let s=0;s<this.presets.length;s++){let n=this.presets[s],a=e.get(n);if(a===void 0)c.info(`%cDeleting preset %c${n.name}%c and its zones`,E.info,E.recognized,E.info),this.deletePreset(n),s--;else{c.groupCollapsed(`%cTrimming %c${n.name}`,E.info,E.recognized),c.info(`Keys for ${n.name}:`,a);let r=0;for(let i=0;i<n.zones.length;i++){let o=n.zones[i],g=o.keyRange,l=o.velRange,C=!1;for(let[h,d]of a)if(h>=g.min&&h<=g.max&&[...d].some(B=>B>=l.min&&B<=l.max)){C=!0;let B=t(o.instrument,a);c.info(`%cTrimmed off %c${B}%c instrument zones from %c${o.instrument.name}`,E.info,E.recognized,E.info,E.recognized);break}C||(r++,n.deleteZone(i),o.instrument.useCount<1&&this.deleteInstrument(o.instrument),i--)}c.info(`%cTrimmed off %c${r}%c preset zones from %c${n.name}`,E.info,E.recognized,E.info,E.recognized),c.groupEnd()}}this.removeUnusedElements(),c.info("%cSound bank modified!",E.recognized),c.groupEnd()}removeUnusedElements(){this.instruments=this.instruments.filter(e=>{e.deleteUnusedZones();let t=e.useCount<1;return t&&e.delete(),!t}),this.samples=this.samples.filter(e=>{let t=e.useCount<1;return t&&e.unlinkSample(),!t})}deleteInstrument(e){e.delete(),this.instruments.splice(this.instruments.indexOf(e),1)}deletePreset(e){e.delete(),this.presets.splice(this.presets.indexOf(e),1)}deleteSample(e){e.unlinkSample(),this.samples.splice(this.samples.indexOf(e),1)}getPreset(e,t){return be.selectPatch(this.presets,e,t)}destroySoundBank(){this.presets.length=0,this.instruments.length=0,this.samples.length=0}parsingError(e){throw new Error(`SF parsing error: ${e} The file may be corrupted.`)}parseInternal(){this._isXGBank=!1;let e=new Set([0,1,2,3,4,5,6,7,8,9,16,17,24,25,26,27,28,29,30,31,32,33,40,41,48,56,57,58,64,65,66,126,127]);for(let t of this.presets)if(he.isXGDrum(t.bankMSB)&&(this._isXGBank=!0,!e.has(t.program))){this._isXGBank=!1,c.info(`%cThis bank is not valid XG. Preset %c${t.toString()}%c is not a valid XG drum. XG mode will use presets on bank 128.`,E.info,E.value,E.info);break}}printInfo(){for(let[e,t]of Object.entries(this.soundBankInfo))if(typeof t=="object"&&"major"in t){let s=t;c.info(`%c${e}: %c"${s.major}.${s.minor}"`,E.info,E.recognized)}else c.info(`%c${e}: %c${t.toLocaleString()}`,E.info,E.recognized)}},_n=class extends me{constructor(A){let e=A.currentIndex,t=A[e+1]<<8|A[e],s=Kt(A[e+2],A[e+3]);A.currentIndex+=4,super(t,s,!1)}};function fs(A){let e=[];for(;A.data.length>A.data.currentIndex;)e.push(new _n(A.data));return e.pop(),e}function $n(A,e,t,s,n){let a=A.gen,r=A.mod,i=0,o=0;for(let g of n)for(let l=0;l<g.zonesCount;l++){let C=a[o++],h=a[o],d=e.slice(C,h),B=r[i++],p=r[i],D=t.slice(B,p);d.some(w=>w.type===I.instrument)?g.createSoundFontZone(D,d,s):(g.globalZone.addGenerators(...d),g.globalZone.addModulators(...D))}}var er=class extends uA{zoneStartIndex;zonesCount=0;constructor(A,e){super(e),this.name=re(A.data,20),this.program=q(A.data,2);let t=q(A.data,2);this.bankMSB=t&127,this.isGMGSDrum=(t&128)>0,this.bankLSB=t>>8,this.zoneStartIndex=q(A.data,2),this.library=q(A.data,4),this.genre=q(A.data,4),this.morphology=q(A.data,4)}createSoundFontZone(A,e,t){let s=e.find(r=>r.type===I.instrument),n;if(s)n=t[s.value];else throw new Error("No instrument ID found in preset zone.");if(!n)throw new Error(`Invalid instrument ID: ${s.value}, available instruments: ${t.length}`);let a=new ea(this,n);return a.addGenerators(...e),a.addModulators(...A),this.zones.push(a),a}};function us(A,e){let t=[];for(;A.data.length>A.data.currentIndex;){let s=new er(A,e);if(t.length>0){let n=t[t.length-1];n.zonesCount=s.zoneStartIndex-n.zoneStartIndex}t.push(s)}return t.pop(),t}var Ar=class extends mA{zoneStartIndex;zonesCount=0;constructor(A){super(),this.name=re(A.data,20),this.zoneStartIndex=q(A.data,2)}createSoundFontZone(A,e,t){let s=e.find(r=>r.type===I.sampleID),n;if(s)n=t[s.value];else throw new Error("No sample ID found in instrument zone.");if(!n)throw new Error(`Invalid sample ID: ${s.value}, available samples: ${t.length}`);let a=new $s(this,n);return a.addGenerators(...e),a.addModulators(...A),this.zones.push(a),a}};function ms(A){let e=[];for(;A.data.length>A.data.currentIndex;){let t=new Ar(A);if(e.length>0){let s=e[e.length-1];s.zonesCount=t.zoneStartIndex-s.zoneStartIndex}e.push(t)}return e.pop(),e}function ut(A){let e=[];for(;A.data.length>A.data.currentIndex;){let t=A.data,s=q(t,2),n=q(t,2),a=Kt(t[t.currentIndex++],t[t.currentIndex++]),r=q(t,2),i=q(t,2);e.push(new le(s,r,n,a,i))}return e.pop(),e}function tr(A,e,t,s,n){let a=A.gen,r=A.mod,i=0,o=0;for(let g of n)for(let l=0;l<g.zonesCount;l++){let C=a[o++],h=a[o],d=e.slice(C,h),B=r[i++],p=r[i],D=t.slice(B,p);d.some(w=>w.type===I.sampleID)?g.createSoundFontZone(D,d,s):(g.globalZone.addGenerators(...d),g.globalZone.addModulators(...D))}}function PA(A){let e=[],t=[];for(;A.data.length>A.data.currentIndex;)t.push(q(A.data,2)),e.push(q(A.data,2));return{mod:e,gen:t}}var sr=class extends Vt{sampleDataStartIndex=0;constructor(A,e){super(e?"sfe":"sf2");let t=new j(A);c.group("%cParsing a SoundFont2 file...",E.info);let s=ve(t,4).toLowerCase();this.verifyTexts(s,["riff","rifs"]);let n=s==="rifs";n&&c.info("%cRIFF64 Detected!",E.recognized),N.read(t,n,!1);let a=re(t,4).toLowerCase();this.verifyTexts(a,["sfbk","sfpk","sfen"]);let r=a==="sfpk",i=N.read(t,n);this.verifyHeader(i,"list");let o=re(i.data,4);this.verifyText(o,"info");let g;for(;i.data.length>i.data.currentIndex;){let f=N.read(i.data,n),M=ve(f.data,f.data.length),b=f.header;switch(b){case"ifil":case"iver":{let V=q(f.data,2),W=q(f.data,2);b==="ifil"?this.soundBankInfo.version={major:V,minor:W}:this.soundBankInfo.romVersion={major:V,minor:W};break}case"DMOD":this.defaultModulators=ut(f),this.customDefaultModulators=!0;break;case"LIST":re(f.data,4)==="xdta"&&(c.info("%cExtended SF2 found!",E.recognized),g=f);break;case"ICRD":this.soundBankInfo.creationDate=Ht(re(f.data,f.data.length));break;case"ISFT":this.soundBankInfo.software=M;break;case"IPRD":this.soundBankInfo.product=M;break;case"IENG":this.soundBankInfo.engineer=M;break;case"ICOP":this.soundBankInfo.copyright=M;break;case"INAM":this.soundBankInfo.name=M;break;case"ICMT":this.soundBankInfo.comment=M;break;case"irom":this.soundBankInfo.romInfo=M;break;case"isng":this.soundBankInfo.soundEngine=M}}this.printInfo();let l={};g!==void 0&&(l.phdr=N.read(g.data,n),l.pbag=N.read(g.data,n),l.pmod=N.read(g.data,n),l.pgen=N.read(g.data,n),l.inst=N.read(g.data,n),l.ibag=N.read(g.data,n),l.imod=N.read(g.data,n),l.igen=N.read(g.data,n),l.shdr=N.read(g.data,n));let C=N.read(t,n,!1);this.verifyHeader(C,"list"),this.verifyText(re(t,4),"sdta"),c.info("%cVerifying smpl chunk...",E.warn);let h=N.read(t,n,!1);this.verifyHeader(h,"smpl");let d;if(r){c.info("%cSF2Pack detected, attempting to decode the smpl chunk...",E.info);let f;try{f=wA.decode(t.buffer.slice(t.currentIndex,t.currentIndex+C.size-4-C.headerSize))}catch(M){throw c.groupEnd(),new Error(`SF2Pack Ogg Vorbis decode error: ${M}`,{cause:M})}if(f.channels.length!==1)throw new Error(`The encoded sample data must be mono, received ${f.channels.length} channels.`);d=f.channels[0],c.info(`%cDecoded the smpl chunk! Length: %c${d.length}`,E.info,E.value)}else d=t,this.sampleDataStartIndex=t.currentIndex;c.info(`%cSkipping sample chunk, length: %c${C.size-4-C.headerSize}`,E.info,E.value),t.currentIndex+=C.size-4-C.headerSize,c.info("%cLoading preset data chunk...",E.warn);let B=N.read(t,n);this.verifyHeader(B,"list"),re(B.data,4);let p=N.read(B.data,n);this.verifyHeader(p,"phdr");let D=N.read(B.data,n);this.verifyHeader(D,"pbag");let w=N.read(B.data,n);this.verifyHeader(w,"pmod");let L=N.read(B.data,n);this.verifyHeader(L,"pgen");let k=N.read(B.data,n);this.verifyHeader(k,"inst");let S=N.read(B.data,n);this.verifyHeader(S,"ibag");let v=N.read(B.data,n);this.verifyHeader(v,"imod");let x=N.read(B.data,n);this.verifyHeader(x,"igen");let y=N.read(B.data,n);this.verifyHeader(y,"shdr"),c.info("%cParsing samples...",E.info),t.currentIndex=this.sampleDataStartIndex;let u=Bs(y,d,g===void 0);if(g&&l.shdr){let f=Bs(l.shdr,new Float32Array(1),!1);if(f.length===u.length)for(let[M,b]of u.entries())b.name+=f[M].name,b.linkedSampleIndex|=f[M].linkedSampleIndex<<16}for(let f of u)f.name=f.name.trim();this.samples.push(...u);let m=fs(x),K=ut(v),T=ms(k);if(g&&l.inst){let f=ms(l.inst);if(f.length===T.length){for(let[M,b]of T.entries())b.name+=f[M].name,b.zoneStartIndex|=f[M].zoneStartIndex<<16;for(let[M,b]of T.entries())M<T.length-1&&(b.zonesCount=T[M+1].zoneStartIndex-b.zoneStartIndex)}}for(let f of T)f.name=f.name.trim();this.instruments.push(...T);let U=PA(S);if(g&&l.ibag){let f=PA(l.ibag);for(let M=0;M<U.mod.length;M++)U.mod[M]|=f.mod[M]<<16;for(let M=0;M<U.gen.length;M++)U.gen[M]|=f.gen[M]<<16}tr(U,m,K,this.samples,T);let O=fs(L),Ae=ut(w),G=us(p,this);if(g&&l.phdr){let f=us(l.phdr,this);if(f.length===G.length){for(let[M,b]of G.entries())b.name+=f[M].name,b.zoneStartIndex|=f[M].zoneStartIndex<<16;for(let[M,b]of G.entries())M<G.length-1&&(b.zonesCount=G[M+1].zoneStartIndex-b.zoneStartIndex)}}for(let f of G)f.name=f.name.trim();this.addPresets(...G);let P=PA(D);if(g&&l.pbag){let f=PA(l.pbag);for(let M=0;M<P.mod.length;M++)P.mod[M]|=f.mod[M]<<16;for(let M=0;M<P.gen.length;M++)P.gen[M]|=f.gen[M]<<16}$n(P,O,Ae,this.instruments,G),this.flush(),c.info(`%cParsing finished! %c"${this.soundBankInfo.name}"%c has %c${this.presets.length}%c presets,
|
|
17
|
+
%c${this.instruments.length}%c instruments and %c${this.samples.length}%c samples.`,E.info,E.recognized,E.info,E.recognized,E.info,E.recognized,E.info,E.recognized,E.info),c.groupEnd()}verifyHeader(A,e){A.header.toLowerCase()!==e.toLowerCase()&&(c.groupEnd(),this.parsingError(`Invalid chunk header! Expected "${e.toLowerCase()}" got "${A.header.toLowerCase()}"`))}verifyText(A,e){A.toLowerCase()!==e.toLowerCase()&&(c.groupEnd(),this.parsingError(`Invalid FourCC: Expected "${e.toLowerCase()}" got "${A.toLowerCase()}"\``))}verifyTexts(A,e){e.includes(A.toLowerCase())||(c.groupEnd(),this.parsingError(`Invalid FourCC: Expected ${e.map(t=>`"${t}"`).join(", ")} but got "${A.toLowerCase()}"`))}},yA=class{static fromArrayBuffer(A){let e=re(new j(A.slice(0,4)),4);if(e!=="RIFF"&&e!=="RIFS")throw new Error(`Expected 'RIFF' or 'RIFS' header, got '${e}'`);let t=re(new j(e==="RIFS"?A.slice(12,16):A.slice(8,12)),4).toLowerCase();return t==="dls "?this.loadDLS(A):new sr(A,t==="sfen")}static loadDLS(A){return ia.read(A).toSF()}},jA=class oa extends Be{isEffectModulator;isDefaultResonantModulator;isModWheelModulator;constructor(e,t,s,n,a,r,i,o){super(e,t,s,n,a),this.isEffectModulator=r,this.isDefaultResonantModulator=i,this.isModWheelModulator=o}static fromData(e,t,s,n,a){let r=e.toSourceEnum(),i=t.toSourceEnum();return new oa(e,t,s,n,a,(r===219||r===221)&&i===0&&(s===I.reverbEffectsSend||s===I.chorusEffectsSend),r===Xs&&i===0&&s===I.initialFilterQ,(e.isCC&&e.index===Q.modulationWheel||t.isCC&&t.index===Q.modulationWheel)&&(s===I.modLfoToPitch||s===I.vibLfoToPitch))}static fromModulator(e){return this.fromData(e.primarySource,e.secondarySource,e.destination,e.transformAmount,e.transformType)}},ar=class{sampleData;generators;modulators;exclusiveClass;targetKey;velocity;rootKey;loopStart;loopEnd;playbackStep;loopingMode;constructor(A,e,t,s){let n=A.sample,a=A.generators;this.modulators=A.modulators.map(jA.fromModulator.bind(jA)),this.generators=a,this.rootKey=n.originalKey,a[I.overridingRootKey]>-1&&(this.rootKey=a[I.overridingRootKey]),this.targetKey=e,a[I.keyNum]>-1&&(this.targetKey=a[I.keyNum]),this.velocity=t,a[I.velocity]>-1&&(this.velocity=a[I.velocity]),this.exclusiveClass=a[I.exclusiveClass],this.loopStart=n.loopStart,this.loopEnd=n.loopEnd,this.sampleData=n.getAudioData(),this.playbackStep=n.sampleRate/s*Math.pow(2,n.pitchCorrection/1200),this.loopingMode=a[I.sampleModes]}},ps=Math.PI/2,OA=-500,ga=500,Wt=ga-OA,Ia=new Float32Array(Wt+1),ca=new Float32Array(Wt+1);for(let A=OA;A<=ga;A++){let e=(A-OA)/Wt,t=A-OA;Ia[t]=Math.cos(ps*e),ca[t]=Math.sin(ps*e)}function nr(A,e,t,s,n,a){if(!A.isInRelease&&e>=A.releaseStartTime&&(A.isInRelease=!0,A.volEnv.startRelease(A),A.modEnv.startRelease(A),A.loopingMode===3&&(A.wavetable.isLooping=!1)),A.hasRendered=!0,!A.isActive)return;let r=this.synthCore,i=r.sampleRate,o=A.modulatedGenerators,g=A.targetKey,l=A.pitchOffset+o[I.fineTune]+this.octaveTuning[g]+this.currentTuning,C=o[I.coarseTune],h=r.tunings[this.preset.program*128+A.midiNote];if(h!==-1&&(g=Math.trunc(h),C+=h-g),A.portamentoFromKey>-1){let f=Math.min((e-A.startTime)/A.portamentoDuration,1),M=g-A.portamentoFromKey;C-=M*(1-f)}l+=(g-A.rootKey)*o[I.scaleTuning];let d=0,B=0,p=A.gainModifier*(1+o[I.amplitude]/1e3);if(e>=A.vibLfoStartTime){let f=o[I.vibLfoToPitch],M=o[I.vibLfoToFilterFc],b=o[I.vibLfoAmplitudeDepth];if(f!==0||M!==0||b!==0){let V=Math.max(0,Lt(o[I.freqVibLFO])+o[I.vibLfoRate]/100)*a/i,W=1-4*Math.abs(A.vibLfoPhase-.5);(A.vibLfoPhase+=V)>=1&&(A.vibLfoPhase-=1),l+=W*f,d+=W*M,p*=1-(W+1)/2*(b/1e3)}}if(e>=A.modLfoStartTime){let f=o[I.modLfoToPitch],M=o[I.modLfoToVolume],b=o[I.modLfoToFilterFc],V=o[I.modLfoAmplitudeDepth];if(f!==0||b!==0||M!==0||V!==0){let W=Math.max(0,Lt(o[I.freqModLFO])+o[I.modLfoRate]/100)*a/i,z=1-4*Math.abs(A.modLfoPhase-.5);(A.modLfoPhase+=W)>=1&&(A.modLfoPhase-=1),l+=z*f,B+=-z*M,d+=z*b,p*=1-(z+1)/2*(V/1e3)}}let D=o[I.modEnvToPitch],w=o[I.modEnvToFilterFc];if(w!==0||D!==0){let f=A.modEnv.process(A,e);d+=f*w,l+=f*D}B-=A.resonanceOffset;let L=l+C*100,k=L|0;k!==A.tuningCents&&(A.tuningCents=k,A.tuningRatio=Math.pow(2,L/1200));let S=VA(o[I.initialAttenuation])*VA(B);if(A.loopingMode===2&&!A.isInRelease){A.isActive=A.volEnv.process(a,S);return}let v=r.voiceBuffer;A.isActive=A.wavetable.process(a,A.tuningRatio,v);let x=A.volEnv.outputGain,y=A.volEnv.process(a,S),u=(A.volEnv.outputGain-x)/a;{let f=A.filter,M=o[I.initialFilterFc];f.initialized?f.currentInitialFc+=(M-f.currentInitialFc)*qt.smoothingConstant:(f.initialized=!0,f.currentInitialFc=M);let b=f.currentInitialFc+d,V=o[I.initialFilterQ];if(f.currentInitialFc>13499&&b>13499&&V===0){f.currentInitialFc=13500;for(let W=0;W<a;W++)v[W]*=x,x+=u}else{(Math.abs(f.lastTargetCutoff-b)>1||f.resonanceCb!==V)&&(f.lastTargetCutoff=b,f.resonanceCb=V,f.calculateCoefficients(b));let{a0:W,a1:z,a2:J,a3:Z,a4:$}=f,{x1:H,x2:ee,y1:Ee,y2:ke}=f;for(let ie=0;ie<a;ie++){let ue=v[ie],Ne=W*ue+z*H+J*ee-Z*Ee-ke*$;ee=H,H=ue,ke=Ee,Ee=Ne,v[ie]=Ne*x,x+=u}f.x1=H,f.x2=ee,f.y1=Ee,f.y2=ke}}A.isActive=A.isActive&&y;let m;A.overridePan?m=A.overridePan:(A.currentPan+=(o[I.pan]-A.currentPan)*r.panSmoothingFactor,m=A.currentPan);let{systemParameters:K}=r,T=this.currentGain*p,U=Math.min(Math.max(-500,m+this.currentPan),500)+500|0,O=Ia[U]*T,Ae=ca[U]*T;if(this._midiParameters.efxAssign&&K.effectsEnabled&&r.insertionActive){let f=r.insertionInputL,M=r.insertionInputR;for(let b=0;b<a;b++){let V=v[b];f[b]+=O*V,M[b]+=Ae*V}return}for(let f=0;f<a;f++){let M=v[f],b=f+n;t[b]+=O*M,s[b]+=Ae*M}if(!K.effectsEnabled)return;let G=o[I.reverbEffectsSend]*A.reverbSend;if(G>0){let f=K.reverbGain*T*(G/1e3),M=r.reverbInput;for(let b=0;b<a;b++)M[b]+=f*v[b]}let P=o[I.chorusEffectsSend]*A.chorusSend;if(P>0){let f=K.chorusGain*(P/1e3)*T,M=r.chorusInput;for(let b=0;b<a;b++)M[b]+=f*v[b]}if(r.delayActive){let f=this._midiControllers[Q.variationDepth]*A.delaySend;if(f>0){let M=T*K.delayGain*((f>>7)/127),b=r.delayInput;for(let V=0;V<a;V++)b[V]+=M*v[V]}}}function rr(A,e,t=!0){if(A>127||e<0)throw new Error("Invalid MIDI Controller.");if(A>=Q.modulationWheelLSB&&A<=Q.effectControl2LSB){let s=A-32;if(this.lockedControllers[s])return;this._midiControllers[s]=this._midiControllers[s]&16256|e&127,this.computeModulatorsAll(1,s)}if(!this.lockedControllers[A]){switch(this._midiControllers[A]=e<<7|this._midiControllers[A]&127,A){case Q.omniModeOff:case Q.omniModeOn:case Q.allNotesOff:this.stopAllNotes();break;case Q.allSoundOff:this.stopAllNotes(!0);break;case Q.polyModeOn:this.stopAllNotes(!0),this.setMIDIParameter("polyMode",!0);break;case Q.monoModeOn:this.stopAllNotes(!0),this.setMIDIParameter("polyMode",!1);break;case Q.bankSelect:this.setBankMSB(e),this.channel%16===9&&he.isSystemXG(this.channelSystem)&&this.setBankMSB(127);break;case Q.bankSelectLSB:this.setBankLSB(e);break;case Q.variationDepth:this.synthCore.updateActiveEffects();break;case Q.registeredParameterLSB:case Q.registeredParameterMSB:this._midiControllers[Q.dataEntryMSB]=0,this.lastParameterIsRegistered=!0;break;case Q.nonRegisteredParameterMSB:this.sf2NRPNGeneratorLSB=0,this._midiControllers[Q.dataEntryMSB]=0,this.lastParameterIsRegistered=!1;break;case Q.nonRegisteredParameterLSB:if(this._midiControllers[Q.nonRegisteredParameterMSB]>>7===Ce.SF2)switch(this.sf2NRPNGeneratorLSB%100!==0&&(this.sf2NRPNGeneratorLSB=0),e){case 100:this.sf2NRPNGeneratorLSB+=100;break;case 101:this.sf2NRPNGeneratorLSB+=1e3;break;case 102:this.sf2NRPNGeneratorLSB+=1e4;break;default:e<100&&(this.sf2NRPNGeneratorLSB+=e)}this._midiControllers[Q.dataEntryMSB]=0,this.lastParameterIsRegistered=!1;break;case Q.dataEntryMSB:case Q.dataEntryLSB:this.dataEntry();break;case Q.resetAllControllers:this.resetRP15();break;case Q.sustainPedal:if(e<64){let s=0;if(this._voiceCount>0){for(let n of this.synthCore.voices)if(n.channel===this.channel&&n.isActive&&n.isHeld&&(n.isHeld=!1,n.releaseVoice(this.synthCore.currentTime),++s>=this._voiceCount))break}}break;case Q.portamentoControl:this.lastPortamentoNote=e,this.portamentoForce=!0;break;default:this.computeModulatorsAll(1,A);break}t&&this.synthCore.callEvent("controllerChange",{channel:this.channel,controller:A,value:e})}}var ir=[I.delayModLFO,I.freqModLFO,I.delayVibLFO,I.freqVibLFO,I.delayModEnv,I.attackModEnv,I.holdModEnv,I.decayModEnv,I.sustainModEnv,I.releaseModEnv,I.delayVolEnv,I.attackVolEnv,I.holdVolEnv,I.decayVolEnv,I.sustainVolEnv,I.releaseVolEnv,I.fineTune,I.modLfoToPitch,I.vibLfoToPitch,I.modEnvToPitch,I.modLfoToVolume,I.initialFilterFc,I.initialFilterQ,I.modLfoToFilterFc,I.modEnvToFilterFc,I.chorusEffectsSend,I.reverbEffectsSend],Je=(A,e,t)=>Math.max(e,Math.min(t,A)),NA=A=>Math.max(-32768,1200*Math.log2(A/1e3)),or=A=>6900+1200*Math.log2(A/440);function gr(A,e){let t=e&127;e-=8192;let s=ir[A];s||c.unsupported(`AWE32 LSB for ${this.channel}`,[A],"Invalid Generator Number");let n,a,r,i;switch(s){default:break;case I.delayModLFO:case I.delayVibLFO:case I.delayVolEnv:case I.delayModEnv:n=4*Je(e,0,5900),this.setGeneratorOverride(s,NA(n));break;case I.attackVolEnv:case I.attackModEnv:n=Je(e,0,5940),this.setGeneratorOverride(s,NA(n));break;case I.holdVolEnv:case I.holdModEnv:n=Je(e,0,8191),this.setGeneratorOverride(s,NA(n));break;case I.decayModEnv:case I.decayVolEnv:case I.releaseVolEnv:case I.releaseModEnv:n=4*Je(e,0,5940),this.setGeneratorOverride(s,NA(n));break;case I.freqVibLFO:case I.freqModLFO:a=.084*t,this.setGeneratorOverride(s,or(a),!0);break;case I.sustainVolEnv:case I.sustainModEnv:r=t*7.5,this.setGeneratorOverride(s,r);break;case I.fineTune:this.setGeneratorOverride(s,e,!0);break;case I.modLfoToPitch:case I.vibLfoToPitch:i=Je(e,-127,127)*9.375,this.setGeneratorOverride(s,i,!0);break;case I.modEnvToPitch:i=Je(e,-127,127)*9.375,this.setGeneratorOverride(s,i);break;case I.modLfoToVolume:r=1.875*t,this.setGeneratorOverride(s,r,!0);break;case I.initialFilterFc:{let o=4335+59*t;this.setGeneratorOverride(s,o,!0);break}case I.initialFilterQ:r=215*(t/127),this.setGeneratorOverride(s,r,!0);break;case I.modLfoToFilterFc:i=Je(e,-64,63)*56.25,this.setGeneratorOverride(s,i,!0);break;case I.modEnvToFilterFc:i=Je(e,-64,63)*56.25,this.setGeneratorOverride(s,i);break;case I.chorusEffectsSend:case I.reverbEffectsSend:this.setGeneratorOverride(s,Je(e,0,255)*(1e3/255));break}}function Ir(){let A=this._midiControllers[Q.dataEntryMSB];if(this.lastParameterIsRegistered){let n=this._midiControllers[Q.registeredParameterMSB]|this._midiControllers[Q.registeredParameterLSB]>>7;switch(n){default:c.info(`%cUnrecognized RPN for %c${this.channel}%c: %c(0x${n.toString(16)})%c data value: %c${A}`,E.warn,E.recognized,E.warn,E.unrecognized,E.warn,E.value);break;case Le.pitchWheelRange:{let a=A/128;this.setMIDIParameter("pitchWheelRange",a),c.coolInfo(`Pitch Wheel Range for ${this.channel}`,a,"semitones");break}case Le.coarseTuning:{let a=(A>>7)-64;this.setMIDIParameter("keyShift",a),c.coolInfo(`Key shift for ${this.channel}`,a);break}case Le.fineTuning:{let a=(A-8192)/81.92;this.setMIDIParameter("fineTune",a),c.coolInfo(`Fine tuning for ${this.channel}`,Math.round(a),"cents");break}case Le.modulationDepth:{let a=A/1.28;this.setMIDIParameter("modulationDepth",a),c.coolInfo(`Modulation depth for ${this.channel}`,Math.round(a),"cents");break}case Le.resetParameters:break}return}let e=this._midiControllers[Q.nonRegisteredParameterMSB]>>7,t=this._midiControllers[Q.nonRegisteredParameterLSB]>>7,s=A>>7;if(!(this.synthCore.systemParameters.drumLock&&e>=Ce.drumPitch&&e<=Ce.drumDelay))switch(e){default:c.info(`%cUnrecognized NRPN for %c${this.channel}%c: %c(0x${e.toString(16).toUpperCase()} 0x${t.toString(16).toUpperCase()})%c data value: %c${s}`,E.warn,E.recognized,E.warn,E.unrecognized,E.warn,E.value);break;case Ce.partParameter:{let n=this._systemParameters.nrpnParamLock??this.synthCore.systemParameters.nrpnParamLock;switch(t){default:c.info(`%cUnrecognized NRPN for %c${this.channel}%c: %c(0x${e.toString(16)} 0x${t.toString(16)})%c data value: %c${s}`,E.warn,E.recognized,E.warn,E.unrecognized,E.warn,E.value);break;case De.vibratoRate:this.controllerChange(Q.vibratoRate,s);break;case De.vibratoDepth:this.controllerChange(Q.vibratoDepth,s);break;case De.vibratoDelay:this.controllerChange(Q.vibratoDelay,s);break;case De.tvfCutoffFrequency:if(n)return;this.controllerChange(Q.brightness,s),c.coolInfo(`Filter cutoff for ${this.channel}`,s.toString(),"");break;case De.tvfResonance:if(n)return;this.controllerChange(Q.filterResonance,s),c.coolInfo(`Filter resonance for ${this.channel}`,s.toString(),"");break;case De.envelopeAttackTime:if(n)return;this.controllerChange(Q.attackTime,s),c.coolInfo(`EG attack time for ${this.channel}`,s.toString(),"");break;case De.envelopeDecayTime:if(n)return;this.controllerChange(Q.decayTime,s),c.coolInfo(`EG decay time for ${this.channel}`,s.toString(),"");break;case De.envelopeReleaseTime:if(n)return;this.controllerChange(Q.releaseTime,s),c.coolInfo(`EG release time for ${this.channel}`,s.toString(),"");break}break}case Ce.drumPitch:{let n=this.channelSystem==="xg"||this.patch.bankLSB===1?(s-64)*100:(s-64)*50;this.drumParams[t].pitch=n,c.coolInfo(`Drum ${t} pitch for ${this.channel}`,n,"cents");break}case Ce.drumPitchFine:{let n=s-64;this.drumParams[t].pitch+=n,c.coolInfo(`Drum ${t} pitch fine for ${this.channel}`,this.drumParams[t].pitch,"cents");break}case Ce.drumLevel:this.drumParams[t].gain=s/120,c.coolInfo(`Drum ${t} level for ${this.channel}`,s,"");break;case Ce.drumPan:this.drumParams[t].pan=s,c.coolInfo(`Drum ${t} pan for ${this.channel}`,s,"");break;case Ce.drumReverb:this.drumParams[t].reverbGain=s/127,c.coolInfo(`Drum ${t} reverb level for ${this.channel}`,s,"");break;case Ce.drumChorus:this.drumParams[t].chorusGain=s/127,c.coolInfo(`Drum ${t} chorus level for ${this.channel}`,s,"");break;case Ce.drumDelay:this.drumParams[t].delayGain=s/127,c.coolInfo(`Drum ${t} delay level for ${this.channel}`,A,"");break;case Ce.awe32:gr.call(this,t,A);break;case Ce.SF2:{if(t>100)break;let n=this.sf2NRPNGeneratorLSB,a=A-8192;this.setGeneratorOffset(n,a);break}}}var cr=40;function lr(A){if(A<1)return 0;{let e=[1,2,4,8,16,32,64,80,96,112,120,124],t=[1,.5,.25,.125,.0625,.03125,.0625,.0625,.0625,.125,.25,1/3],s=[-.16653127382501215,.11863875218299408,.029479047361245264,-.005442312089231738,.1451520875973037,-.005056281449558275,-.005095486882876532,.03334009551111544,-.09361368678020432,.14132569702451822,-.15805565301011382,-.09918856955881927],n=[.028212773333433472,-.3388502064992847,-.15839529890929713,-.12398131766775483,-.2874848552685111,.012254866302537692,.005957797193345771,-.03745899330347374,.12911781869810196,-.15867193224162568,.504406322732748,.3786845131875458],a=[.7218950861255283,.5574536226347168,.47133893237025826,.48597095327079914,.44336276333518854,.6076986311801551,.30851975971827794,.30514889345633955,.3302511933827384,.153822885219165,.1302280559047337,.49865530675491687],r=[-2.2218487496163566,-1.6382721639824072,-1.3010299956639813,-.958607314841775,-.6020599913279624,-.3010299956639812,.31386722036915343,.6232492903979004,.9242792860618817,1.290034611362518,1.4265112613645752,1.9030899869919435],i=[2,4,8,16,32,64,80,96,112,120,124],o=-1;for(let l=i.length-1;l>=0;l--)if(i[l]<A){o=l;break}o+=1;let g=(A-e[o])*t[o];return Math.exp(2.302585092994046*(((s[o]*g+n[o])*g+a[o])*g+r[o]))/cr}}function Cr(A,e){return lr(A)*e}var dA=(A,e,t)=>Math.max(e,Math.min(t,A));function hr(A,e,t=!0){if(e<1){this.noteOff(A);return}let s=this.synthCore.systemParameters.blackMIDIMode;if(s&&this.synthCore.voiceCount>200&&e<40||s&&e<10||this._systemParameters.isMuted||!this.preset)return;let n=dA(Math.floor(e*(this._midiParameters.velocitySenseDepth/64)+(this._midiParameters.velocitySenseOffset-64)*2),0,127),a=A+this.currentKeyShift;if(A>127||A<0)return;let r=this.preset.program,i=this.synthCore.tunings[r*128+A];i>=0&&(a=Math.trunc(i)),((this._systemParameters.monophonicRetrigger??this.synthCore.systemParameters.monophonicRetrigger)||this._midiParameters.assignMode===0)&&this.killNote(A);let o=this.synthCore.keyModifierManager.getVelocity(this.channel,A);o>-1&&(n=o);let g=this.synthCore.keyModifierManager.getGain(this.channel,A),l=this.lastPortamentoNote,C=this.portamentoForce||this._midiControllers[Q.portamentoOnOff]>=8192,h=this._midiControllers[Q.portamentoTime]>>7,d=C&&!this._drumChannel&&l>=0&&l!==A&&h>0,B=-1,p=0;if(d){let u=Math.abs(A-l);B=l,p=Cr(h,u),this.portamentoForce=!1}this.lastPortamentoNote=A,this.playingNotes[A]=!0,this._midiParameters.polyMode||(this.lastMonoNote>=0&&this.lastMonoNote!==A&&this.killNote(this.lastMonoNote),this.lastMonoNote=A,this.lastMonoVelocity=e);let D=this.synthCore.getVoices(this.channel,a,n),w=0,L=0,k=0,S=1,v=1,x=1;if(this._midiParameters.randomPan&&(w=Math.round(cs()*1e3-500)),this._drumChannel){let u=this.drumParams[A];if(!u.rxNoteOn)return;let m=u.pan-64;if(m!==0)if(m===-64)w=Math.round(cs()*1e3-500);else{let K=(this._midiControllers[Q.pan]>>7)-64;w=Math.max(-63,Math.min(m+K,63))/63*500||1}k=u.pitch,L=u.exclusiveClass,S=u.reverbGain,v=u.chorusGain,x=u.delayGain,g===1&&(g=u.gain)}let y=t?this.noteOnID[A]++:this.noteOnID[A];for(let u of D){let m=this.synthCore.assignVoice(),K=this.synthCore.currentTime;if(m.setup(K,this.channel,A,y),m.wavetable=m.oscillators[this._systemParameters.interpolationType??this.synthCore.systemParameters.interpolationType],m.targetKey=u.targetKey,m.velocity=u.velocity,m.generators.set(u.generators),m.exclusiveClass=L||u.exclusiveClass,m.rootKey=u.rootKey,m.loopingMode=u.loopingMode,m.wavetable.sampleData=u.sampleData,m.wavetable.playbackStep=u.playbackStep,this.dynamicModulators.active){m.modulators=[...u.modulators];for(let P of this.dynamicModulators.modulatorList){let f=m.modulators.findIndex(M=>Be.isIdentical(M,P.mod));f===-1?m.modulators.push(P.mod):m.modulators[f]=P.mod}}else m.modulators=u.modulators;if(m.modulators.length>m.modulatorValues.length&&(c.warn(`${m.modulators.length} modulators! Increasing modulatorValues table.`),m.modulatorValues=new Int16Array(m.modulators.length)),this.generators.overridesEnabled){let P=this.generators.overrides;for(let f=0;f<Xe;f++){let M=P[f];M!==32767&&(m.generators[f]=M)}}if(m.exclusiveClass!==0&&this._midiParameters.polyMode){let P=0;if(this._voiceCount>0){for(let f of this.synthCore.voices)if(f.isActive&&f.channel===this.channel&&f.exclusiveClass===m.exclusiveClass&&f.hasRendered&&(f.exclusiveRelease(this.synthCore.currentTime),++P>=this._voiceCount))break}}this.computeModulators(m),m.volEnv.init(m),m.modEnv.init(m),m.filter.init(),m.vibLfoStartTime=K+qA(m.modulatedGenerators[I.delayVibLFO]),m.modLfoStartTime=K+qA(m.modulatedGenerators[I.delayModLFO]);let T=m.modulatedGenerators[I.startAddrsOffset]+m.modulatedGenerators[I.startAddrsCoarseOffset]*32768,U=m.modulatedGenerators[I.endAddrOffset]+m.modulatedGenerators[I.endAddrsCoarseOffset]*32768,O=m.modulatedGenerators[I.startloopAddrsOffset]+m.modulatedGenerators[I.startloopAddrsCoarseOffset]*32768,Ae=m.modulatedGenerators[I.endloopAddrsOffset]+m.modulatedGenerators[I.endloopAddrsCoarseOffset]*32768,G=u.sampleData.length;if(m.wavetable.cursor=dA(T,0,G-1),m.wavetable.end=dA(G+U,0,G),m.wavetable.loopStart=dA(u.loopStart+O,0,G),m.wavetable.loopEnd=dA(u.loopEnd+Ae,0,G),m.wavetable.loopEnd<m.wavetable.loopStart){let P=m.wavetable.loopStart;m.wavetable.loopStart=m.wavetable.loopEnd,m.wavetable.loopEnd=P}m.wavetable.loopEnd-m.wavetable.loopStart<1&&(m.loopingMode===1||m.loopingMode===3)&&(m.loopingMode=0),m.wavetable.loopLength=m.wavetable.loopEnd-m.wavetable.loopStart,m.wavetable.isLooping=m.loopingMode===1||m.loopingMode===3,m.portamentoFromKey=B,m.portamentoDuration=p,m.overridePan=w,m.gainModifier=g,m.pitchOffset=k,m.reverbSend=S,m.chorusSend=v,m.delaySend=x,m.currentPan=Math.max(-500,Math.min(500,w||m.modulatedGenerators[I.pan]))}this._voiceCount+=D.length,t&&this.synthCore.callEvent("noteOn",{midiNote:A,channel:this.channel,velocity:e})}function Br(A){if(A>127||A<0)return;if(this.synthCore.systemParameters.blackMIDIMode&&!this._drumChannel||this._drumChannel&&this.drumParams[A].rxNoteOff){this.killNote(A),this.synthCore.callEvent("noteOff",{midiNote:A,channel:this.channel});return}this.playingNotes[A]=!1;let e=!this._midiParameters.polyMode,t=this._midiControllers[Q.sustainPedal]>=8192&&!e,s=0,n=this.noteOffID[A];if(n<this.noteOnID[A]&&this.noteOffID[A]++,this._voiceCount>0){for(let a of this.synthCore.voices)if(a.channel===this.channel&&a.isActive&&a.midiNote===A&&a.noteID===n&&!a.isInRelease&&(t?a.isHeld=!0:a.releaseVoice(this.synthCore.currentTime),++s>=this._voiceCount))break}if(this.synthCore.callEvent("noteOff",{midiNote:A,channel:this.channel}),e){let a=this.playingNotes.lastIndexOf(!0);a===-1?this.lastMonoNote=-1:this.lastMonoNote===A&&this.noteOn(a,this.lastMonoVelocity,!1)}}function dr(A){if(this._systemParameters.presetLock)return;this.patch.program=A;let e=this.synthCore.soundBankManager.getPreset(this.patch,this.channelSystem);!e&&(e=this.synthCore.missingPresetHandler(this.patch,this.channelSystem),!e)||(this.preset=e,e.isDrum!==this._drumChannel&&this.setDrumFlag(e.isDrum),this.resetDrumParams(),this.synthCore.callEvent("programChange",{channel:this.channel,bankLSB:this.preset.bankLSB,bankMSB:this.preset.bankMSB,program:this.preset.program,name:this.preset.name,isGMGSDrum:this.preset.isGMGSDrum,isDrum:this.preset.isDrum}))}var Er=[jA.fromModulator(new le(Oe(ne.linear,!0,!1,!0,Q.vibratoRate),0,I.vibLfoRate,1e3,0))],Qr=class{modulatorList=[];active=!1;channel;constructor(A){this.channel=A}resetModulators(){this.modulatorList=Er.map(A=>({mod:A,id:this.getModulatorID(A.primarySource.toSourceEnum(),A.destination,A.primarySource.isBipolar,A.primarySource.isNegative)})),this.active=!1}setupReceiver(A,e,t,s,n,a=!1){this.active=!0;let r=e-64,i=r/64,o=e/127;switch(A&15){case 0:{let g=Math.min(24,Math.max(-24,r));this.setModulator(t,s,I.fineTune,g*100,a),c.coolInfo(`Channel ${this.channel} ${n} pitch control`,g,"semitones");break}case 1:this.setModulator(t,s,I.initialFilterFc,i*9600,a),c.coolInfo(`Channel ${this.channel} ${n} filter control`,i*9600,"cents");break;case 2:this.setModulator(t,s,I.amplitude,i*1e3,a),c.coolInfo(`Channel ${this.channel} ${n} amplitude control`,i*100,"%");break;case 3:this.setModulator(t,s,I.vibLfoRate,i*1e3,a),c.coolInfo(`Channel ${this.channel} ${n} LFO1 rate control`,i*10,"Hz");break;case 4:this.setModulator(t,s,I.vibLfoToPitch,o*600,a),c.coolInfo(`Channel ${this.channel} ${n} LFO1 pitch depth control`,o*600,"cents");break;case 5:this.setModulator(t,s,I.vibLfoToFilterFc,o*2400,a),c.coolInfo(`Channel ${this.channel} ${n} LFO1 filter depth control`,o*2400,"cents");break;case 6:this.setModulator(t,s,I.vibLfoAmplitudeDepth,o*1e3,a),c.coolInfo(`Channel ${this.channel} ${n} LFO1 amplitude depth control`,o*100,"%");break;case 7:this.setModulator(t,s,I.modLfoRate,i*1e3,a),c.coolInfo(`Channel ${this.channel} ${n} LFO2 rate control`,i*10,"Hz");break;case 8:this.setModulator(t,s,I.modLfoToPitch,o*600,a),c.coolInfo(`Channel ${this.channel} ${n} LFO2 pitch depth control`,o*600,"cents");break;case 9:this.setModulator(t,s,I.modLfoToFilterFc,o*2400,a),c.coolInfo(`Channel ${this.channel} ${n} LFO2 filter depth control`,o*2400,"cents");break;case 10:this.setModulator(t,s,I.modLfoAmplitudeDepth,o*1e3,a),c.coolInfo(`Channel ${this.channel} ${n} LFO2 amplitude depth control`,o*100,"%");break}}setModulator(A,e,t,s,n=!1,a=!1){let r=this.getModulatorID(A,t,n,a);s===0&&this.deleteModulator(r);let i=this.modulatorList.find(o=>o.id===r);if(i)i.mod.transformAmount=s;else{let o=jA.fromData(new Ge(A,ne.linear,e,n),new Ge,t,s,0);this.modulatorList.push({mod:o,id:r})}}getModulatorID(A,e,t,s){return`${A}-${e}-${t}-${s}`}deleteModulator(A){this.modulatorList=this.modulatorList.filter(e=>e.id!==A)}},fr=1e3/200;function ur(A,e,t){let s=A.modulators[t];if(s.transformAmount===0)return A.modulatorValues[t]=0,0;let n=s.primarySource.getValue(this,e,A),a=s.secondarySource.getValue(this,e,A),r=s.transformAmount;s.isEffectModulator&&r<=1e3&&(r*=fr,r=Math.min(r,1e3));let i=n*a*r;return s.transformType===2&&(i=Math.abs(i)),s.isDefaultResonantModulator&&(A.resonanceOffset=Math.max(0,i/2)),s.isModWheelModulator&&(i*=this._midiParameters.modulationDepth/50),A.modulatorValues[t]=i,i}function mr(A,e=-1,t=0){let s=A.modulators,n=A.generators;if(this.generators.offsetsEnabled){let o=this.generators.offsets;n=new Int16Array(n);for(let g=0;g<n.length;g++)n[g]+=o[g]}let a=A.modulatedGenerators,r=this.perNotePitch?this.pitchWheels[A.midiNote]:this._midiParameters.pitchWheel;if(e===-1){a.set(n);for(let o=0;o<s.length;o++){let g=s[o];a[g.destination]=Math.min(32767,Math.max(-32768,a[g.destination]+this.computeModulator(A,r,o)))}for(let o=0;o<a.length;o++){let g=Fe[o];g&&(a[o]=Math.min(g.max,Math.max(g.min,a[o])))}return}let i=!!e;for(let o=0;o<s.length;o++){let g=s[o];if(g.primarySource.isCC===i&&g.primarySource.index===t||g.secondarySource.isCC===i&&g.secondarySource.index===t){let l=g.destination,C=n[l];this.computeModulator(A,r,o);for(let d=0;d<s.length;d++)s[d].destination===l&&(C+=A.modulatorValues[d]);let h=Fe[l];a[l]=Math.max(h.min,Math.min(C,h.max))}}}var la=class Ca{pitch=0;gain=1;exclusiveClass=0;pan=64;reverbGain=0;chorusGain=1;delayGain=1;rxNoteOn=!0;rxNoteOff=!1;static copyFrom(e){let t=new Ca;return t.pitch=e.pitch,t.chorusGain=e.chorusGain,t.reverbGain=e.reverbGain,t.exclusiveClass=e.exclusiveClass,t.gain=e.gain,t.pan=e.pan,t.rxNoteOff=e.rxNoteOff,t.rxNoteOn=e.rxNoteOn,t}};function pr(){return{patch:this.preset?{...this.patch,name:this.preset.name,isDrum:this.preset.isDrum}:void 0,lockedSystem:this.lockedSystem,midiControllers:this._midiControllers.slice(),lockedControllers:[...this.lockedControllers],pitchWheels:this.pitchWheels.slice(),generators:{...this.generators,offsets:this.generators.offsets.slice(),overrides:this.generators.overrides.slice()},midiParameters:{...this._midiParameters},lockedMIDIParameters:{...this.lockedMIDIParameters},systemParameters:{...this._systemParameters},octaveTuning:this.octaveTuning.slice(),perNotePitch:this.perNotePitch,drumParams:this.drumParams.map(A=>({...A})),drumChannel:this._drumChannel,channel:this.channel}}function Dr(A){this.setDrums(A.drumChannel),this._midiControllers.set(A.midiControllers);for(let e=0;e<128;e++)this.lockController(e,A.lockedControllers[e]);this.pitchWheels.set(A.pitchWheels),this.octaveTuning.set(A.octaveTuning),this.perNotePitch=A.perNotePitch,this.generators.offsets.set(A.generators.offsets),this.generators.overrides.set(A.generators.overrides),this.generators.offsetsEnabled=A.generators.offsetsEnabled,this.generators.overridesEnabled=A.generators.overridesEnabled;for(let e=0;e<128;e++)this.drumParams[e]=la.copyFrom(A.drumParams[e]);this.setSystemParameter("presetLock",!1),A.patch&&this.setPatch(A.patch),this.lockedSystem=A.lockedSystem;for(let e of Object.keys(A.lockedMIDIParameters))this.lockMIDIParameter(e,!1);for(let[e,t]of Object.entries(A.midiParameters))this.setMIDIParameter(e,t);for(let[e,t]of Object.entries(A.lockedMIDIParameters))this.lockMIDIParameter(e,t);for(let[e,t]of Object.entries(A.systemParameters))this.setSystemParameter(e,t)}var Ds={pitchWheel:8192,pitchWheelRange:2,pressure:0,modulationDepth:50,rxChannel:0,polyMode:!0,keyShift:0,fineTune:0,randomPan:!1,assignMode:2,efxAssign:!1,cc1:16,cc2:17,drumMap:0,velocitySenseDepth:64,velocitySenseOffset:64};function yr(A,e){if(!this.lockedMIDIParameters[A]){switch(this._midiParameters[A]=e,A){case"pitchWheel":this.computeModulatorsAll(0,se.pitchWheel);break;case"pressure":this.computeModulatorsAll(0,se.channelPressure);break}this.updateInternalParams(),this.synthCore.callEvent("channelParamChange",{channel:this.channel,parameter:A,value:e})}}function kr(A,e){this.lockedMIDIParameters[A]=e}var wr={presetLock:!1,isMuted:!1,gain:1,pan:0,keyShift:0,fineTune:0,interpolationType:null,nrpnParamLock:null,monophonicRetrigger:null};function Sr(A,e){if(this._systemParameters[A]===e)return;let t=this._systemParameters[A];switch(this._systemParameters[A]=e,this.updateInternalParams(),A){default:break;case"presetLock":e&&(this.lockedSystem=this.synthCore.midiParameters.system);break;case"isMuted":e&&this.stopAllNotes(!0);break;case"keyShift":!this._drumChannel&&t!==e&&this.stopAllNotes(!0)}}var Mr=class{pitchWheels=new Int16Array(128).fill(8192);drumParams=[];dynamicModulators;sf2NRPNGeneratorLSB=0;patch={bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1};preset;lockedSystem="gs";channel;synthCore;setSystemParameter=Sr.bind(this);lockMIDIParameter=kr.bind(this);noteOn=hr.bind(this);noteOff=Br.bind(this);programChange=dr.bind(this);controllerChange=rr.bind(this);reset=un.bind(this);renderVoice=nr.bind(this);setMIDIParameter=yr.bind(this);lockedControllers=new Array(128).fill(!1);_midiControllers=new Int16Array(128);octaveTuning=new Int8Array(128);resetRP15=mn.bind(this);dataEntry=Ir.bind(this);lockedMIDIParameters=Object.fromEntries(Object.keys(Ds).map(A=>[A,!1]));_midiParameters={...Ds};_systemParameters={...wr};noteOnID=new Array(128).fill(0);noteOffID=new Array(128).fill(0);lastParameterIsRegistered=!0;perNotePitch=!1;currentPan=0;currentTuning=0;currentKeyShift=0;currentGain=0;lastPortamentoNote=-1;portamentoForce=!1;lastMonoNote=-1;lastMonoVelocity=0;playingNotes=new Array(128).fill(!1);generators={offsets:new Int16Array(Xe),offsetsEnabled:!1,overrides:new Int16Array(Xe),overridesEnabled:!1};computeModulator=ur.bind(this);computeModulators=mr.bind(this);constructor(A,e,t){this.synthCore=A,this.preset=e,this.channel=t,this._midiParameters.rxChannel=t,this.dynamicModulators=new Qr(t),this.resetGeneratorOverrides(),this.resetGeneratorOffsets();for(let s=0;s<128;s++)this.drumParams.push(new la);this.resetDrumParams()}_voiceCount=0;get voiceCount(){return this._voiceCount}set voiceCount(A){this._voiceCount=A}_drumChannel=!1;get drumChannel(){return this._drumChannel}get midiControllers(){return this._midiControllers}get systemParameters(){return this._systemParameters}get midiParameters(){return this._midiParameters}get channelSystem(){return this._systemParameters.presetLock?this.lockedSystem:this.synthCore.midiParameters.system}lockController(A,e){this.lockedControllers[A]=e}setDrums(A){if(he.isSystemXG(this.channelSystem))if(A)this.setBankMSB(he.getDrumBank(this.channelSystem)),this.setBankLSB(0);else{if(this.channel%16===9)throw new Error(`Cannot disable drums on channel ${this.channel} for XG.`);this.setBankMSB(0),this.setBankLSB(0)}else this.setGSDrums(A);this.setDrumFlag(A),this.programChange(this.patch.program)}stopAllNotes(A=!1){if(this.noteOnID.fill(0),this.noteOffID.fill(0),this.playingNotes.fill(!1),A){let e=0;if(this._voiceCount>0){for(let t of this.synthCore.voices)if(t.channel===this.channel&&t.isActive&&(t.isActive=!1,++e>=this._voiceCount))break}this.clearVoiceCount()}else{let e=0;if(this._voiceCount>0){for(let t of this.synthCore.voices)if(t.channel===this.channel&&t.isActive&&(t.releaseVoice(this.synthCore.currentTime),++e>=this._voiceCount))break}}this.synthCore.callEvent("stopAll",{channel:this.channel,force:A})}clearVoiceCount(){this._voiceCount=0}setOctaveTuning(A){if(A.length!==12)throw new Error("Tuning is not the length of 12.");for(let e=0;e<128;e++)this.octaveTuning[e]=A[e%12]}pitchWheel(A,e=-1){e===-1?(this.perNotePitch=!1,this.setMIDIParameter("pitchWheel",A)):(this.perNotePitch||this.pitchWheels.fill(this._midiParameters.pitchWheel),this.perNotePitch=!0,this.pitchWheels[e]=A,this.computeModulatorsAll(0,se.pitchWheel))}polyPressure(A,e){let t=0;if(this._voiceCount>0){for(let s of this.synthCore.voices)if(s.isActive&&s.channel===this.channel&&s.midiNote===A&&(s.pressure=e,this.computeModulators(s,0,se.polyPressure),++t>=this._voiceCount))break}this.synthCore.callEvent("polyPressure",{channel:this.channel,midiNote:A,pressure:e})}updateInternalParams(){let A=this.synthCore.systemParameters,e=this._systemParameters,t=this.synthCore.midiParameters,s=this._midiParameters,n=this._drumChannel?e.keyShift:A.keyShift+t.keyShift+e.keyShift+s.keyShift;this.currentKeyShift=Math.trunc(n),this.currentTuning=this._drumChannel?e.fineTune:A.fineTune+t.fineTune+e.fineTune+s.fineTune;let a=A.pan+t.pan+e.pan;this.currentPan=a*500,this.currentGain=Va*A.gain*Math.pow(t.volume,2)*e.gain}setPatch(A){this.setBankMSB(A.bankMSB),this.setBankLSB(A.bankLSB),this.setGSDrums(A.isGMGSDrum),this.programChange(A.program)}setGSDrums(A){A!==this.patch.isGMGSDrum&&(this.setBankLSB(0),this.setBankMSB(0),this.patch.isGMGSDrum=A)}killNote(A,e=-12e3){let t=0;if(this.noteOffID[A]=0,this.noteOnID[A]=0,this._voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&s.midiNote===A&&(s.overrideReleaseVolEnv=e,s.isInRelease=!1,s.releaseVoice(this.synthCore.currentTime),++t>=this._voiceCount))break}}applySnapshot(A){Dr.call(this,A)}getSnapshot(){return pr.call(this)}setLastNote(A){this.lastPortamentoNote=A}destroy(){this.preset=void 0,this.lockedControllers=void 0,this._systemParameters=void 0,this._midiControllers=void 0,this._midiParameters=void 0}resetGeneratorOverrides(){this.generators.overrides.fill(Ha),this.generators.overridesEnabled=!1}setGeneratorOverride(A,e,t=!1){if(this.generators.overrides[A]=e,this.generators.overridesEnabled=!0,t){let s=0;if(this._voiceCount>0){for(let n of this.synthCore.voices)if(n.channel===this.channel&&n.isActive&&(n.generators[A]=e,this.computeModulators(n),++s>=this._voiceCount))break}}}resetGeneratorOffsets(){this.generators.offsets.fill(0),this.generators.offsetsEnabled=!1}setGeneratorOffset(A,e){this.generators.offsets[A]=e*Fe[A].nrpn,this.generators.offsetsEnabled=!0;let t=0;if(this._voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&(this.computeModulators(s),++t>=this._voiceCount))break}}resetDrumParams(){if(!(this.synthCore.systemParameters.drumLock||!this._drumChannel))for(let A=0;A<128;A++){let e=this.drumParams[A];e.pitch=0,e.gain=1,e.exclusiveClass=0,e.pan=64,e.reverbGain=YA[A]/127,e.chorusGain=this.channelSystem==="xg"?YA[A]/127:0,e.delayGain=0,e.rxNoteOn=!0,e.rxNoteOff=!1}}computeModulatorsAll(A,e){let t=0;if(this._voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&(this.computeModulators(s,A,e),++t>=this._voiceCount))break}}setBankMSB(A){this._systemParameters.presetLock||(this.patch.bankMSB=A)}setBankLSB(A){this._systemParameters.presetLock||(this.patch.bankLSB=A)}setDrumFlag(A){this._systemParameters.presetLock||!this.preset||this._drumChannel===A||(this._drumChannel=A,this.updateInternalParams())}},Lr=class extends uA{constructor(A,e){super(A.parentSoundBank,A.globalZone),this.bankMSB=he.addBankOffset(A.bankMSB,e,!0),this.name=A.name,this.bankLSB=A.bankLSB,this.isGMGSDrum=A.isGMGSDrum,this.program=A.program,this.genre=A.genre,this.morphology=A.morphology,this.library=A.library,this.zones=A.zones}},vr=class{soundBankList=[];presetListChangeCallback;selectablePresetList=[];constructor(A){this.presetListChangeCallback=A}_presetList=[];get presetList(){return[...this._presetList]}get priorityOrder(){return this.soundBankList.map(A=>A.id)}set priorityOrder(A){this.soundBankList.sort((e,t)=>A.indexOf(e.id)-A.indexOf(t.id)),this.generatePresetList()}deleteSoundBank(A){if(this.soundBankList.length===0){c.warn("1 soundbank left. Aborting!");return}let e=this.soundBankList.findIndex(t=>t.id===A);if(e===-1)throw new Error(`No sound bank with id "${A}"`);this.soundBankList.splice(e,1),this.generatePresetList()}addSoundBank(A,e,t=0){let s=this.soundBankList.find(n=>n.id===e);s===void 0?this.soundBankList.push({id:e,soundBank:A,bankOffset:t}):(s.soundBank=A,s.bankOffset=t),this.generatePresetList()}getPreset(A,e){if(!(this.soundBankList.length===0||this.selectablePresetList.length===0))return be.selectPatch(this.selectablePresetList,A,e)}destroy(){for(let A of this.soundBankList)A.soundBank.destroySoundBank();this.soundBankList=[]}generatePresetList(){let A=new Array,e=new Set;for(let t of this.soundBankList){let s=t.soundBank,n=t.bankOffset;for(let a of s.presets){let r=new Lr(a,n);e.has(r.toMIDIString())||(e.add(r.toMIDIString()),A.push(r))}}A.sort(be.compare.bind(be)),this.selectablePresetList=A,this._presetList=A.map(t=>({bankMSB:t.bankMSB,bankLSB:t.bankLSB,program:t.program,isGMGSDrum:t.isGMGSDrum,name:t.name,isDrum:t.isDrum})),this.presetListChangeCallback()}};function ys(A,e,t){let s=A,n=e<<7|t;return A===127&&e===127&&t===127?-1:s+n*61e-6}function Fr(A,e=0){switch(A[2]){case 4:switch(A[3]){default:c.gmFail("Device Control",A);break;case 1:{let t=A[5]<<7|A[4];this.setMIDIParameter("volume",t/16383),c.gmInfo("Master Volume",t);break}case 2:{let t=((A[5]<<7|A[4])-8192)/8192;this.setMIDIParameter("pan",t),c.gmInfo("Master Balance",t);break}case 3:{let t=((A[5]<<7|A[4])-8192)/81.92;this.setMIDIParameter("fineTune",t),c.gmInfo("Master Fine Tuning",t,"cents");break}case 4:{let t=A[5]-64;this.setMIDIParameter("keyShift",t),c.gmInfo("Master Coarse Tuning",t,"keys");break}case 5:if(A[4]!==1||A[5]!==1||A[6]!==1||A[7]!==1){c.gmFail("Global Parameter Control",A);break}switch(A[8]){default:c.gmFail("Global Parameter Control",A);break;case 1:{let t=A[10];switch(A[9]){default:c.gmFail("Reverb Parameter Control",A);break;case 0:{let s=t===8?5:t;this.setReverbMacro(s),c.gmInfo("Reverb Type",s);break}case 1:this.reverbProcessor.time=t,c.gmInfo("Reverb Time",t)}break}case 2:{let t=A[10];switch(A[9]){default:c.gmFail("Chorus Parameter Control",A);break;case 0:this.setChorusMacro(t),c.gmInfo("Chorus Type",t);break;case 1:this.chorusProcessor.rate=t,c.gmInfo("Chorus Mod Rate",t);break;case 2:this.chorusProcessor.depth=t,c.gmInfo("Chorus Mod Depth",t);break;case 3:this.chorusProcessor.feedback=t,c.gmInfo("Chorus Mod Feedback",t);break;case 4:this.chorusProcessor.sendLevelToReverb=t,c.gmInfo("Chorus Send to Reverb",t);break}}}}break;case 9:switch(A[3]){default:c.gmFail("System Exclusive",A);break;case 1:c.coolInfo("MIDI System","General MIDI 1"),this.reset("gm");break;case 2:c.coolInfo("MIDI System","Roland GS"),this.reset("gs");break;case 3:c.coolInfo("MIDI System","General MIDI 2"),this.reset("gm2");break}break;case 8:{let t=4;switch(A[3]){case 1:{let s=A[t++],n=ve(A,16,t);if(t+=16,A.length<384){c.warn(`The Bulk Tuning Dump is too short! (${A.length} bytes, at least 384 are expected)`);return}for(let a=0;a<128;a++)this.tunings[s*128+a]=ys(A[t++],A[t++],A[t++]);c.gmInfo("Bulk Tuning Dump",`${n}, program ${s}`);break}case 2:case 7:{A[3]===7&&t++;let s=A[t++],n=A[t++];for(let a=0;a<n;a++){let r=A[t++];this.tunings[s*128+r]=ys(A[t++],A[t++],A[t++])}c.gmInfo("Single Note Tuning",`program: ${s}. Keys affected: ${n}`);break}case 9:case 8:{let s=new Int8Array(12);if(A[3]===8)for(let n=0;n<12;n++)s[n]=A[7+n]-64;else for(let n=0;n<24;n+=2){let a=(A[7+n]<<7|A[8+n])-8192;s[n/2]=Math.floor(a/81.92)}(A[4]&1)===1&&this.midiChannels[14+e].setOctaveTuning(s),(A[4]>>1&1)===1&&this.midiChannels[15+e].setOctaveTuning(s);for(let n=0;n<7;n++)(A[5]>>n&1)===1&&this.midiChannels[7+n+e].setOctaveTuning(s);for(let n=0;n<7;n++)(A[6]>>n&1)===1&&this.midiChannels[n+e].setOctaveTuning(s);c.gmInfo("Octave Scale Tuning",s.join(" "));break}default:c.gmFail("MIDI Tuning Standard",A);break}break}default:c.gmFail("Universal System Exclusive",A)}}function Rr(A,e=0){if(A[3]===18)switch(A[2]){case 66:{let t=A[4],s=A[5],n=A[6],a=Math.min(A[7],127);if(t===0&&s===0&&n===127&&(a===0||a===1)){if(a===1)for(c.gsInfo("Mode","Double Module");this.midiChannels.length<32;)this.createMIDIChannel(!0);c.coolInfo("MIDI System","Roland GS"),this.reset("gs");return}if(t===64||t===80){if(t===80&&(e+=16),s===0){switch(n){case 0:{let r=((a<<12|A[8]<<8|A[9]<<4|A[10])-1024)/10;this.setMIDIParameter("fineTune",r),c.gsInfo("Master Tune",r,"cents");break}case 4:c.gsInfo("Master Volume",a),this.setMIDIParameter("volume",a/127);break;case 5:{let r=a-64;c.gsInfo("Master Key-Shift",r,"keys"),this.setMIDIParameter("keyShift",r);break}case 6:{let r=(a-64)/63;c.gsInfo("Master Pan",r),this.setMIDIParameter("pan",r);break}case 127:a===0?(c.coolInfo("MIDI System","Roland GS"),this.reset("gs")):a===127&&(c.coolInfo("MIDI System","General MIDI 1"),this.reset("gm"));break;default:c.gsFail("System Parameter",A);break}return}if(s===1){let r=n>=48&&n<=55,i=n>=56&&n<=64,o=n>=80&&n<=90;if(r&&this.systemParameters.reverbLock||i&&this.systemParameters.chorusLock||o&&this.systemParameters.delayLock)return;switch(n){default:c.gsFail("Patch Common Parameter",[n]);break;case 0:{let g=ve(A,16,7);c.gsInfo("Patch name",g),this.callEvent("displayMessage",[...A]);break}case 48:this.setReverbMacro(a),c.gsInfo("Reverb Macro",a);break;case 49:this.reverbProcessor.character=a,c.gsInfo("Reverb Character",a),this.callEvent("effectChange",{effect:"reverb",parameter:"character",value:a});break;case 50:this.reverbProcessor.preLowpass=a,c.gsInfo("Reverb Pre-LPF",a),this.callEvent("effectChange",{effect:"reverb",parameter:"preLowpass",value:a});break;case 51:this.reverbProcessor.level=a,c.gsInfo("Reverb Level",a),this.callEvent("effectChange",{effect:"reverb",parameter:"level",value:a});break;case 52:this.reverbProcessor.time=a,c.gsInfo("Reverb Time",a),this.callEvent("effectChange",{effect:"reverb",parameter:"time",value:a});break;case 53:this.reverbProcessor.delayFeedback=a,c.gsInfo("Reverb Delay Feedback",a),this.callEvent("effectChange",{effect:"reverb",parameter:"delayFeedback",value:a});break;case 54:break;case 55:this.reverbProcessor.preDelayTime=a,c.gsInfo("Reverb Predelay Time",a),this.callEvent("effectChange",{effect:"reverb",parameter:"preDelayTime",value:a});break;case 56:this.setChorusMacro(a),c.gsInfo("Chorus Macro",a);break;case 57:this.chorusProcessor.preLowpass=a,c.gsInfo("Chorus Pre-LPF",a),this.callEvent("effectChange",{effect:"chorus",parameter:"preLowpass",value:a});break;case 58:this.chorusProcessor.level=a,c.gsInfo("Chorus Level",a),this.callEvent("effectChange",{effect:"chorus",parameter:"level",value:a});break;case 59:this.chorusProcessor.feedback=a,c.gsInfo("Chorus Feedback",a),this.callEvent("effectChange",{effect:"chorus",parameter:"feedback",value:a});break;case 60:this.chorusProcessor.delay=a,c.gsInfo("Chorus Delay",a),this.callEvent("effectChange",{effect:"chorus",parameter:"delay",value:a});break;case 61:this.chorusProcessor.rate=a,c.gsInfo("Chorus Rate",a),this.callEvent("effectChange",{effect:"chorus",parameter:"rate",value:a});break;case 62:this.chorusProcessor.depth=a,c.gsInfo("Chorus Depth",a),this.callEvent("effectChange",{effect:"chorus",parameter:"depth",value:a});break;case 63:this.chorusProcessor.sendLevelToReverb=a,c.gsInfo("Chorus Send Level To Reverb",a),this.callEvent("effectChange",{effect:"chorus",parameter:"sendLevelToReverb",value:a});break;case 64:this.chorusProcessor.sendLevelToDelay=a,this.updateActiveEffects(),c.gsInfo("Chorus Send Level To Delay",a),this.callEvent("effectChange",{effect:"chorus",parameter:"sendLevelToDelay",value:a});break;case 80:this.setDelayMacro(a),c.gsInfo("Delay Macro",a);break;case 81:this.delayProcessor.preLowpass=a,c.gsInfo("Delay Pre-LPF",a),this.callEvent("effectChange",{effect:"delay",parameter:"preLowpass",value:a});break;case 82:this.delayProcessor.timeCenter=a,c.gsInfo("Delay Time Center",a),this.callEvent("effectChange",{effect:"delay",parameter:"timeCenter",value:a});break;case 83:this.delayProcessor.timeRatioLeft=a,c.gsInfo("Delay Time Ratio Left",a),this.callEvent("effectChange",{effect:"delay",parameter:"timeRatioLeft",value:a});break;case 84:this.delayProcessor.timeRatioRight=a,c.gsInfo("Delay Time Ratio Right",a),this.callEvent("effectChange",{effect:"delay",parameter:"timeRatioRight",value:a});break;case 85:this.delayProcessor.levelCenter=a,c.gsInfo("Delay Level Center",a),this.callEvent("effectChange",{effect:"delay",parameter:"levelCenter",value:a});break;case 86:this.delayProcessor.levelLeft=a,c.gsInfo("Delay Level Left",a),this.callEvent("effectChange",{effect:"delay",parameter:"levelLeft",value:a});break;case 87:this.delayProcessor.levelRight=a,c.gsInfo("Delay Level Right",a),this.callEvent("effectChange",{effect:"delay",parameter:"levelRight",value:a});break;case 88:this.delayProcessor.level=a,c.gsInfo("Delay Level",a),this.callEvent("effectChange",{effect:"delay",parameter:"level",value:a});break;case 89:this.delayProcessor.feedback=a,c.gsInfo("Delay Feedback",a),this.callEvent("effectChange",{effect:"delay",parameter:"feedback",value:a});break;case 90:this.delayProcessor.sendLevelToReverb=a,c.gsInfo("Delay Send Level To Reverb",a),this.callEvent("effectChange",{effect:"delay",parameter:"sendLevelToReverb",value:a});break}break}if(s===3){if(this.systemParameters.insertionEffectLock)return;if(n>=3&&n<=25&&(this.insertionParams[n-3]=a),n>=3&&n<=22){this.insertionProcessor.setParameter(n,a),c.gsInfo(`EFX Parameter ${n-2}`,a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return}switch(n){default:c.gsFail("Insertion Effect",[n]);return;case 0:{let r=a<<8|A[8],i=this.insertionEffects.get(r);i?(c.gsInfo("EFX Type",r.toString(16)),this.insertionProcessor=i):(this.insertionProcessor=this.insertionFallback,c.gsFail("EFX Processor",[r],"Using Thru.")),this.resetInsertionParams(),this.insertionProcessor.reset(),this.callEvent("effectChange",{effect:"insertion",parameter:0,value:r});return}case 23:this.insertionProcessor.sendLevelToReverb=a/127*GA,c.gsInfo("EFX Send Level to Reverb",a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return;case 24:this.insertionProcessor.sendLevelToChorus=a/127*GA,c.gsInfo("EFX Send Level to Chorus",a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return;case 25:this.insertionProcessor.sendLevelToDelay=a/127*GA,this.updateActiveEffects(),c.gsInfo("EFX Send Level to Delay",a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return}}if(s>>4===1){let r=_.syxToChannel(s&15)+e,i=this.midiChannels[r];if(!i){c.gsFail(`Patch Parameter for ${r}`,A,"Invalid part number.");return}switch(n){default:c.gsFail(`Patch Part Parameter for ${r}`,[n]);return;case 0:i.controllerChange(Q.bankSelect,a),i.programChange(A[8]);break;case 2:{let o=a===16?-1:a+e;i.setMIDIParameter("rxChannel",o),this.customChannelNumbers||=o!==i.channel,c.gsInfo(`Rx. Channel on ${r}`,o);break}case 19:i.setMIDIParameter("polyMode",a===1),c.gsInfo(`Mono/poly on ${r}`,i.midiParameters.polyMode?"POLY":"MONO");break;case 20:i.setMIDIParameter("assignMode",a),c.gsInfo(`Assign mode on ${r}`,a);break;case 21:{i.setMIDIParameter("drumMap",a);let o=a>0;i.setGSDrums(o),c.gsInfo(`Drums on ${r}`,o.toString());return}case 22:{let o=a-64;i.setMIDIParameter("keyShift",o),c.gsInfo(`Key Shift for ${r}`,o);return}case 25:i.controllerChange(Q.mainVolume,a);return;case 26:i.setMIDIParameter("velocitySenseDepth",a),c.gsInfo(`Velocity Sense Depth for ${r}`,a);return;case 27:i.setMIDIParameter("velocitySenseOffset",a),c.gsInfo(`Velocity Sense Offset for ${r}`,a);return;case 28:{let o=a,g=o===0;i.setMIDIParameter("randomPan",g),g?c.gsInfo(`Random pan on ${r}`,"ON"):i.controllerChange(Q.pan,o);break}case 31:i.setMIDIParameter("cc1",a),c.gsInfo(`CC1 Controller Number for ${r}`,a);break;case 32:i.setMIDIParameter("cc2",a),c.gsInfo(`CC2 Controller Number for ${r}`,a);break;case 33:i.controllerChange(Q.chorusDepth,a);break;case 34:i.controllerChange(Q.reverbDepth,a);break;case 42:{let o=((a<<7|A[8])-8192)/81.92;i.setMIDIParameter("fineTune",o),c.gsInfo(`Fine tuning for ${r}`,Math.round(o),"cents");break}case 44:i.controllerChange(Q.variationDepth,a);break;case 48:i.controllerChange(Q.vibratoRate,a);break;case 49:i.controllerChange(Q.vibratoDepth,a);break;case 50:i.controllerChange(Q.brightness,a);break;case 51:i.controllerChange(Q.filterResonance,a);break;case 52:i.controllerChange(Q.attackTime,a);break;case 53:i.controllerChange(Q.decayTime,a);break;case 54:i.controllerChange(Q.releaseTime,a);break;case 55:i.controllerChange(Q.vibratoDelay,a);break;case 64:{let o=A.length-9,g=new Int8Array(12);for(let l=0;l<o;l++)g[l]=A[l+7]-64;i.setOctaveTuning(g),c.gsInfo(`Octave Scale Tuning for ${r}`,g.join(", "));break}}return}if(s>>4===2){let r=_.syxToChannel(s&15)+e,i=this.midiChannels[r];switch(n&240){default:c.gsFail(`Patch Parameter Controller for ${r}`,[n&240]);break;case 0:if((n&15)===4){let o=a/127*600;i.setMIDIParameter("modulationDepth",o),c.gsInfo(`Modulation depth for ${r}`,Math.round(o),"cents");break}i.dynamicModulators.setupReceiver(n,a,Q.modulationWheel,!0,"mod wheel");break;case 16:if((n&15)===0){let o=a-64;i.setMIDIParameter("pitchWheelRange",o),c.gsInfo(`Pitch Wheel Range for ${r}`,o,"semitones");break}i.dynamicModulators.setupReceiver(n,a,se.pitchWheel,!1,"pitch wheel",!0);break;case 32:i.dynamicModulators.setupReceiver(n,a,se.channelPressure,!1,"channel pressure");break;case 48:i.dynamicModulators.setupReceiver(n,a,se.polyPressure,!1,"poly pressure");break;case 64:i.dynamicModulators.setupReceiver(n,a,i.midiParameters.cc1,!0,"CC1");break;case 80:i.dynamicModulators.setupReceiver(n,a,i.midiParameters.cc2,!0,"CC2")}return}if(s>>4===4){let r=_.syxToChannel(s&15)+e,i=this.midiChannels[r];switch(n){default:c.gsFail("Patch Part Parameter",[n]);break;case 0:case 1:i.controllerChange(Q.bankSelectLSB,a);break;case 34:{let o=a===1;i.setMIDIParameter("efxAssign",o),c.gsInfo(`EFX assign for ${r}`,o?"EFX":"BYPASS"),this.updateActiveEffects()}}return}c.gsFail("Patch Parameter",A);return}if(t===65||t===81){if(this.systemParameters.drumLock)return;let r=(s>>4)+1,i=n,o=s&15;switch(o){default:c.gsFail("Drum Setup",[o]);return;case 0:{let g=ve(A,12,7);c.gsInfo(`Drum Map Name for MAP${r}`,g),this.callEvent("displayMessage",[...A]);break}case 1:{let g=a-60;for(let l of this.midiChannels)l.midiParameters.drumMap===r&&(l.drumParams[i].pitch=g*(l.patch.bankLSB===1?100:50));c.gsInfo(`Drum Pitch for MAP${r}, key ${i}`,g);break}case 2:for(let g of this.midiChannels)g.midiParameters.drumMap===r&&(g.drumParams[i].gain=a/120);c.gsInfo(`Drum Level for MAP${r}, key ${i}`,a);break;case 3:for(let g of this.midiChannels)g.midiParameters.drumMap===r&&(g.drumParams[i].exclusiveClass=a);c.gsInfo(`Drum Assign Group for MAP${r}, key ${i}`,a);break;case 4:for(let g of this.midiChannels)g.midiParameters.drumMap===r&&(g.drumParams[i].pan=a);c.gsInfo(`Drum Pan for MAP${r}, key ${i}`,a);break;case 5:for(let g of this.midiChannels)g.midiParameters.drumMap===r&&(g.drumParams[i].reverbGain=a/127);c.gsInfo(`Drum Reverb for MAP${r}, key ${i}`,a);break;case 6:for(let g of this.midiChannels)g.midiParameters.drumMap===r&&(g.drumParams[i].chorusGain=a/127);c.gsInfo(`Drum Chorus for MAP${r}, key ${i}`,a);break;case 7:for(let g of this.midiChannels)g.midiParameters.drumMap===r&&(g.drumParams[i].rxNoteOff=a===1);c.gsInfo(`Drum Note Off for MAP${r}, key ${i}`,a===1?"ON":"OFF");break;case 8:for(let g of this.midiChannels)g.midiParameters.drumMap===r&&(g.drumParams[i].rxNoteOn=a===1);c.gsInfo(`Drum Note On for MAP${r}, key ${i}`,a===1?"ON":"OFF");break;case 9:for(let g of this.midiChannels)g.midiParameters.drumMap===r&&(g.drumParams[i].delayGain=a/127);c.gsInfo(`Drum Delay for MAP${r}, key ${i}`,a);break}return}c.gsFail("System Exclusive",A);return}case 69:A[4]===16&&this.callEvent("displayMessage",[...A]);return;case 22:if(A[4]===16){this.setMIDIParameter("volume",A[7]/100),c.coolInfo("Roland Master Volume Control",A[7]);return}else c.unsupported("Roland",A)}else{c.unsupported("Roland",A);return}}function br(A,e=0){if(A[2]===76){let t=A[3],s=A[4],n=A[5],a=A[6];if(t===0&&s===0){switch(n){case 0:{let r=(((A[6]&15)<<12|(A[7]&15)<<8|(A[8]&15)<<4|A[9]&15)-1024)/10;this.setMIDIParameter("fineTune",r),c.xgInfo("Master Tune",r,"cents")}break;case 4:this.setMIDIParameter("volume",a/127),c.xgInfo("Master Volume",a);break;case 5:{let r=127-a;this.setMIDIParameter("volume",r/127),c.xgInfo("Master Attenuation",a);break}case 6:{let r=a-64;this.setMIDIParameter("keyShift",r),c.xgInfo("Master Transpose",a);break}case 127:case 126:c.coolInfo("MIDI System","Yamaha XG"),this.reset("xg");break}return}if(t===2&&s===1){let r,i=n;i<=21?r="Reverb":i<=53?r="Chorus":r="Variation",c.xgFail(`${r} parameter`,[i]);return}if(t===8){let r=s+e,i=this.midiChannels[r];if(!i){c.xgFail(`Part Setup for ${r}`,A,"Invalid part number.");return}switch(n){default:c.xgFail("Part Setup",[A[5]]);break;case 1:i.controllerChange(Q.bankSelect,a);break;case 2:i.controllerChange(Q.bankSelectLSB,a);break;case 3:i.programChange(a);break;case 4:{let o=a+e;i.setMIDIParameter("rxChannel",o),this.customChannelNumbers||=o!==i.channel,c.xgInfo(`Rev. Channel on ${r}`,o);break}case 5:{let o=a===1;i.setMIDIParameter("polyMode",o),c.xgInfo(`Mono/poly on ${r}`,o?"POLY":"MONO");break}case 6:i.setMIDIParameter("assignMode",a),c.xgInfo(`Same Note Number Key On Assign on ${r}`,a);break;case 7:{let o=a!==0;i.setDrums(o),c.xgInfo(`Part Mode on ${r}`,o?"DRUM":"MELODIC");break}case 8:{let o=a-64;i.setMIDIParameter("keyShift",o),c.xgInfo(`Key Shift on ${r}`,o);break}case 11:i.controllerChange(Q.mainVolume,a);break;case 12:i.setMIDIParameter("velocitySenseDepth",a),c.xgInfo(`Velocity Sense Depth on ${r}`,a);return;case 13:i.setMIDIParameter("velocitySenseOffset",a),c.xgInfo(`Velocity Sense Offset on ${r}`,a);return;case 14:{let o=a,g=o===0;i.setMIDIParameter("randomPan",g),g?c.xgInfo(`Random Pan for ${r}`,"ON"):i.controllerChange(Q.pan,o);break}case 18:i.controllerChange(Q.chorusDepth,a);break;case 19:i.controllerChange(Q.reverbDepth,a);break;case 21:i.controllerChange(Q.vibratoRate,a);break;case 22:i.controllerChange(Q.vibratoDepth,a);break;case 23:i.controllerChange(Q.vibratoDelay,a);break;case 24:i.controllerChange(Q.brightness,a);break;case 25:i.controllerChange(Q.filterResonance,a);break;case 26:i.controllerChange(Q.attackTime,a);break;case 27:i.controllerChange(Q.decayTime,a);break;case 28:i.controllerChange(Q.releaseTime,a);break;case 35:{let o=a-64;i.setMIDIParameter("pitchWheelRange",o),c.xgInfo(`Pitch Wheel Range for ${r}`,o,"semitones")}}return}if(t>>4===3){if(this.systemParameters.drumLock)return;let r=s;switch(n){default:c.xgFail("Drum Setup",[n]);return;case 0:{let i=(a-64)*100;for(let o of this.midiChannels)o.drumChannel&&(o.drumParams[r].pitch=i);c.xgInfo(`Drum Pitch for key ${r}`,i,"semitones");break}case 1:{let i=a-64;for(let o of this.midiChannels)o.drumChannel&&(o.drumParams[r].pitch+=i,c.xgInfo(`Drum Pitch for key ${r}`,o.drumParams[r].pitch,"semitones"));break}case 2:for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].gain=a/120);c.xgInfo(`Drum Level for key ${r}`,a);break;case 3:for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].exclusiveClass=a);c.xgInfo(`Drum Alternate Group for key ${r}`,a);break;case 4:for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].pan=a);c.xgInfo(`Drum Pan for key ${r}`,a);break;case 5:for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].reverbGain=a/127);c.xgInfo(`Drum Reverb for key ${r}`,a);break;case 6:for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].chorusGain=a/127);c.xgInfo(`Drum Chorus for key ${r}`,a);break;case 9:for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].rxNoteOff=a===1);c.xgInfo(`Drum Note Off for key ${r}`,a===1?"ON":"OFF");break;case 10:for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].rxNoteOn=a===1);c.xgInfo(`Drum Note On for key ${r}`,a===1?"ON":"OFF");break}return}if(t===6||t===7){this.callEvent("displayMessage",[...A]);return}c.xgFail("System Exclusive",A,"Unknown address")}else c.xgFail("System Exclusive",A)}function Pr(A,e=0){e+=this.portSelectChannelOffset;let t=A[0];if(!(this.systemParameters.deviceID!==-1&&A[1]!==127&&this.systemParameters.deviceID!==A[1]))switch(t){default:c.unsupported("System Exclusive",A,`Unknown manufacturer: ${t}`);break;case 126:case 127:Fr.call(this,A,e);break;case 65:Rr.call(this,A,e);break;case 67:br.call(this,A,e);break;case 245:if(A.length<2)return;for(this.portSelectChannelOffset=(A[1]-1)*16;this.midiChannels.length<=this.portSelectChannelOffset;){c.info(`%cPort select, channel offset %c${this.portSelectChannelOffset}%c. Creating a new port!`,E.info,E.value,E.info);for(let s=0;s<16;s++)this.createMIDIChannel(!0)}break}}var ha=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=0;reset(){}process(A,e,t,s,n,a,r,i,o){let{sendLevelToReverb:g,sendLevelToChorus:l,sendLevelToDelay:C}=this;for(let h=0;h<o;h++){let d=A[h],B=e[h],p=i+h;t[p]+=d,s[p]+=B;let D=(d+B)*.5;n[h]+=D*g,a[h]+=D*l,r[h]+=D*C}}setParameter(A,e){}},Ye=class{static data=[[0,200,200,0,0,.05,.05,315,250,200,250,100,-180,0],[.1,205,205,.1,5,.1,.1,315,250,200,250,110,-180,1],[.2,210,210,.2,10,.15,.15,315,250,200,250,120,-180,2],[.3,215,215,.3,15,.2,.2,315,250,200,250,130,-180,3],[.4,220,220,.4,20,.25,.25,315,250,200,250,140,-180,4],[.5,225,225,.5,25,.3,.3,315,250,200,250,150,-180,5],[.6,230,230,.6,30,.35,.35,315,250,200,250,160,-168,5],[.7,235,235,.7,35,.4,.4,315,250,200,250,170,-168,5],[.8,240,240,.8,40,.45,.45,400,315,250,315,180,-168,5],[.9,245,245,.9,45,.5,.5,400,315,250,315,190,-168,5],[1,250,250,1,50,.55,.55,400,315,250,315,200,-156,5],[1.1,255,255,1.1,55,.6,.6,400,315,250,315,210,-156,5],[1.2,260,260,1.2,60,.65,.65,400,315,250,315,220,-156,5],[1.3,265,265,1.3,65,.7,.7,400,315,250,315,230,-156,5],[1.4,270,270,1.4,70,.75,.75,400,315,250,315,240,-144,5],[1.5,275,275,1.5,75,.8,.8,400,315,250,315,250,-144,5],[1.6,280,280,1.6,80,.85,.85,500,400,315,400,260,-144,5],[1.7,285,285,1.7,85,.9,.9,500,400,315,400,270,-144,5],[1.8,290,290,1.8,90,.95,.95,500,400,315,400,280,-132,5],[1.9,295,295,1.9,95,1,1,500,400,315,400,290,-132,5],[2,300,300,2,100,1.05,1.05,500,400,315,400,300,-132,5],[2.1,305,305,2.1,105,1.1,1.1,500,400,315,400,320,-132,5],[2.2,310,310,2.2,110,1.15,1.15,500,400,315,400,340,-120,5],[2.3,315,315,2.3,115,1.2,1.2,500,400,315,400,360,-120,5],[2.4,320,320,2.4,120,1.25,1.25,630,500,400,500,380,-120,5],[2.5,325,325,2.5,125,1.3,1.3,630,500,400,500,400,-120,5],[2.6,330,330,2.6,130,1.35,1.35,630,500,400,500,420,-108,5],[2.7,335,335,2.7,135,1.4,1.4,630,500,400,500,440,-108,5],[2.8,340,340,2.8,140,1.45,1.45,630,500,400,500,460,-108,5],[2.9,345,345,2.9,145,1.5,1.5,630,500,400,500,480,-108,5],[3,350,350,3,150,1.55,1.55,630,500,400,500,500,-96,6],[3.1,355,355,3.1,155,1.6,1.6,630,500,400,500,520,-96,6],[3.2,360,360,3.2,160,1.65,1.65,800,630,500,630,540,-96,6],[3.3,365,365,3.3,165,1.7,1.7,800,630,500,630,560,-96,6],[3.4,370,370,3.4,170,1.75,1.75,800,630,500,630,580,-84,6],[3.5,375,375,3.5,175,1.8,1.8,800,630,500,630,600,-84,6],[3.6,380,380,3.6,180,1.85,1.85,800,630,500,630,620,-84,6],[3.7,385,385,3.7,185,1.9,1.9,800,630,500,630,640,-84,6],[3.8,390,390,3.8,190,1.95,1.95,800,630,500,630,660,-72,6],[3.9,395,395,3.9,195,2,2,800,630,500,630,680,-72,6],[4,400,400,4,200,2.05,2.05,1e3,800,630,800,700,-72,6],[4.1,405,405,4.1,205,2.1,2.1,1e3,800,630,800,720,-72,6],[4.2,410,410,4.2,210,2.15,2.15,1e3,800,630,800,740,-60,6],[4.3,415,415,4.3,215,2.2,2.2,1e3,800,630,800,760,-60,6],[4.4,420,420,4.4,220,2.25,2.25,1e3,800,630,800,780,-60,6],[4.5,425,425,4.5,225,2.3,2.3,1e3,800,630,800,800,-60,6],[4.6,430,430,4.6,230,2.35,2.35,1e3,800,630,800,820,-48,6],[4.7,435,435,4.7,235,2.4,2.4,1e3,800,630,800,840,-48,6],[4.8,440,440,4.8,240,2.45,2.45,1250,1e3,800,1e3,860,-48,9],[4.9,445,445,4.9,245,2.5,2.5,1250,1e3,800,1e3,880,-48,9],[5,450,450,5,250,2.55,2.55,1250,1e3,800,1e3,900,-36,9],[5.5,455,455,5.5,255,2.6,2.6,1250,1e3,800,1e3,920,-36,9],[6,460,460,6,260,2.65,2.65,1250,1e3,800,1e3,940,-36,9],[6.5,465,465,6.5,265,2.7,2.7,1250,1e3,800,1e3,960,-36,9],[7,470,470,7,270,2.75,2.75,1250,1e3,800,1e3,980,-24,9],[7.5,475,475,7.5,275,2.8,2.8,1250,1e3,800,1e3,1e3,-24,9],[8,480,480,8,280,2.85,2.85,1600,1250,1e3,1250,1100,-24,9],[8.5,485,485,8.5,285,2.9,2.9,1600,1250,1e3,1250,1200,-24,9],[9,490,490,9,290,2.95,2.95,1600,1250,1e3,1250,1300,-12,9],[9.5,495,495,9.5,295,3,3,1600,1250,1e3,1250,1400,-12,9],[10,500,500,10,300,3.05,3.05,1600,1250,1e3,1250,1500,-12,9],[11,505,505,11,305,3.1,3.1,1600,1250,1e3,1250,1600,-12,9],[12,510,510,12,310,3.15,3.15,1600,1250,1e3,1250,1700,0,9],[13,515,515,13,315,3.2,3.2,1600,1250,1e3,1250,1800,0,9],[14,520,520,14,320,3.25,3.25,2e3,1600,1250,1600,1900,0,12],[15,525,525,15,325,3.3,3.3,2e3,1600,1250,1600,2e3,0,12],[16,530,530,16,330,3.35,3.35,2e3,1600,1250,1600,2100,12,12],[17,535,535,17,335,3.4,3.4,2e3,1600,1250,1600,2200,12,12],[18,540,540,18,340,3.45,3.45,2e3,1600,1250,1600,2300,12,12],[19,545,545,19,345,3.5,3.5,2e3,1600,1250,1600,2400,12,12],[20,550,550,20,350,3.55,3.55,2e3,1600,1250,1600,2500,24,12],[21,560,555,21,355,3.6,3.6,2e3,1600,1250,1600,2600,24,12],[22,570,560,22,360,3.65,3.65,2500,2e3,1600,2e3,2700,24,12],[23,580,565,23,365,3.7,3.7,2500,2e3,1600,2e3,2800,24,12],[24,590,570,24,370,3.75,3.75,2500,2e3,1600,2e3,2900,36,12],[25,600,575,25,375,3.8,3.8,2500,2e3,1600,2e3,3e3,36,12],[26,610,580,26,380,3.85,3.85,2500,2e3,1600,2e3,3100,36,12],[27,620,585,27,385,3.9,3.9,2500,2e3,1600,2e3,3200,36,12],[28,630,590,28,390,3.95,3.95,2500,2e3,1600,2e3,3300,48,12],[29,640,595,29,395,4,4,2500,2e3,1600,2e3,3400,48,12],[30,650,600,30,400,4.05,4.05,3150,2500,2e3,2500,3500,48,10],[31,660,610,31,405,4.1,4.1,3150,2500,2e3,2500,3600,48,10],[32,670,620,32,410,4.15,4.15,3150,2500,2e3,2500,3700,60,10],[33,680,630,33,415,4.2,4.2,3150,2500,2e3,2500,3800,60,10],[34,690,640,34,420,4.25,4.25,3150,2500,2e3,2500,3900,60,10],[35,700,650,35,425,4.3,4.3,3150,2500,2e3,2500,4e3,60,10],[36,710,660,36,430,4.35,4.35,3150,2500,2e3,2500,4100,72,10],[37,720,670,37,435,4.4,4.4,3150,2500,2e3,2500,4200,72,10],[38,730,680,38,440,4.45,4.45,4e3,3150,2500,3150,4300,72,11],[39,740,690,39,445,4.5,4.5,4e3,3150,2500,3150,4400,72,11],[40,750,700,40,450,4.55,4.55,4e3,3150,2500,3150,4500,84,11],[41,760,710,50,455,4.6,4.6,4e3,3150,2500,3150,4600,84,11],[42,770,720,60,460,4.65,4.65,4e3,3150,2500,3150,4700,84,11],[43,780,730,70,465,4.7,4.7,4e3,3150,2500,3150,4800,84,11],[44,790,740,80,470,4.75,4.75,4e3,3150,2500,3150,4900,96,11],[45,800,750,90,475,4.8,4.8,4e3,3150,2500,3150,5e3,96,11],[46,810,760,100,480,4.85,4.85,5e3,4e3,3150,4e3,5100,96,12],[47,820,770,110,485,4.9,4.9,5e3,4e3,3150,4e3,5200,96,12],[48,830,780,120,490,4.95,4.95,5e3,4e3,3150,4e3,5300,108,12],[49,840,790,130,495,5,5,5e3,4e3,3150,4e3,5400,108,12],[50,850,800,140,500,5.1,5.05,5e3,4e3,3150,4e3,5500,108,12],[52,860,810,150,505,5.2,5.1,5e3,4e3,3150,4e3,5600,108,12],[54,870,820,160,510,5.3,5.15,5e3,4e3,3150,4e3,5700,120,12],[56,880,830,170,515,5.4,5.2,5e3,4e3,3150,4e3,5800,120,12],[58,890,840,180,520,5.5,5.25,6300,5e3,4e3,5e3,5900,120,13],[60,900,850,190,525,5.6,5.3,6300,5e3,4e3,5e3,6e3,120,13],[62,910,860,200,530,5.7,5.35,6300,5e3,4e3,5e3,6100,132,13],[64,920,870,210,535,5.8,5.4,6300,5e3,4e3,5e3,6200,132,13],[66,930,880,220,540,5.9,5.45,6300,5e3,4e3,5e3,6300,132,13],[68,940,890,230,545,6,5.5,6300,5e3,4e3,5e3,6400,132,13],[70,950,900,240,550,6.1,5.55,6300,5e3,4e3,5e3,6500,144,13],[72,960,910,250,555,6.2,5.6,6300,5e3,4e3,5e3,6600,144,13],[74,970,920,260,560,6.3,5.65,8e3,6300,5e3,6300,6700,144,14],[76,980,930,270,565,6.4,5.7,8e3,6300,5e3,6300,6800,144,14],[78,990,940,280,570,6.5,5.75,8e3,6300,5e3,6300,6900,156,14],[80,1e3,950,290,575,6.6,5.8,8e3,6300,5e3,6300,7e3,156,14],[82,1e3,960,300,580,6.7,5.85,8e3,6300,5e3,6300,7100,156,14],[84,1e3,970,320,585,6.8,5.9,8e3,6300,5e3,6300,7200,156,14],[86,1e3,980,340,590,6.9,5.95,8e3,6300,5e3,6300,7300,168,14],[88,1e3,990,360,595,7,6,8e3,6300,5e3,6300,7400,168,14],[90,1e3,1e3,380,600,7.5,6.05,13500,8e3,6300,13500,7500,168,15],[92,1e3,1e3,400,605,8,6.1,13500,8e3,6300,13500,7600,168,15],[94,1e3,1e3,420,610,8.5,6.15,13500,8e3,6300,13500,7700,-180,15],[96,1e3,1e3,440,615,9,6.2,13500,8e3,6300,13500,7800,-180,15],[98,1e3,1e3,460,620,9.5,6.25,13500,8e3,6300,13500,7900,-180,15],[100,1e3,1e3,480,625,10,6.3,13500,8e3,6300,13500,8e3,-180,15],[100,1e3,1e3,500,630,10,6.35,13500,8e3,6300,13500,8e3,-180,15],[100,1e3,1e3,500,635,10,6.4,13500,8e3,6300,13500,8e3,-180,15]];static preDelayTime(A){return this.data[A][0]}static delayTime1(A){return this.data[A][1]}static delayTime2(A){return this.data[A][2]}static delayTime3(A){return this.data[A][3]}static delayTime4(A){return this.data[A][4]}static rate1(A){return this.data[A][5]}static rate2(A){return this.data[A][6]}static hfDamp(A){return this.data[A][7]}static cutoffFreq(A){return this.data[A][8]}static eqFreq(A){return this.data[A][9]}static lpf(A){return this.data[A][10]}static manual(A){return this.data[A][11]}static azimuth(A){return this.data[A][12]}static accl(A){return this.data[A][13]}},ks=Math.PI/2,JA=-64,Ba=63,jt=Ba-JA,ZA=new Float32Array(jt+1),XA=new Float32Array(jt+1);for(let A=JA;A<=Ba;A++){let e=(A-JA)/jt,t=A-JA;ZA[t]=Math.cos(ks*e),XA[t]=Math.sin(ks*e)}function ce(A){A.x1=A.x2=A.y1=A.y2=0}var Se={b0:1,b1:0,b2:0,a0:1,a1:0,a2:0};function _e(A,e,t,s,n){let a=e.b0*A+e.b1*s.x1+e.b2*s.x2-e.a1*s.y1-e.a2*s.y2;s.x2=s.x1,s.x1=A,s.y2=s.y1,s.y1=a;let r=t.b0*a+t.b1*n.x1+t.b2*n.x2-t.a1*n.y1-t.a2*n.y2;return n.x2=n.x1,n.x1=a,n.y2=n.y1,n.y1=r,r}function Ke(A,e,t){let s=e.b0*A+e.b1*t.x1+e.b2*t.x2-e.a1*t.y1-e.a2*t.y2;return t.x2=t.x1,t.x1=A,t.y2=t.y1,t.y1=s,s}function ze(A,e,t,s,n){let a=Math.pow(10,e/40),r=2*Math.PI*t/s,i=Math.cos(r),o=Math.sin(r)/2*Math.sqrt((a+1/a)*(1/1-1)+2),g,l,C,h,d,B;n?(g=a*(a+1-(a-1)*i+2*Math.sqrt(a)*o),l=2*a*(a-1-(a+1)*i),C=a*(a+1-(a-1)*i-2*Math.sqrt(a)*o),h=a+1+(a-1)*i+2*Math.sqrt(a)*o,d=-2*(a-1+(a+1)*i),B=a+1+(a-1)*i-2*Math.sqrt(a)*o):(g=a*(a+1+(a-1)*i+2*Math.sqrt(a)*o),l=-2*a*(a-1+(a+1)*i),C=a*(a+1+(a-1)*i-2*Math.sqrt(a)*o),h=a+1-(a-1)*i+2*Math.sqrt(a)*o,d=2*(a-1-(a+1)*i),B=a+1-(a-1)*i-2*Math.sqrt(a)*o),A.b0=g/h,A.b1=l/h,A.b2=C/h,A.a0=1,A.a1=d/h,A.a2=B/h}var de={x1:0,x2:0,y1:0,y2:0},Nr=class{type=256;sendLevelToReverb=0;sendLevelToChorus=0;sendLevelToDelay=0;sampleRate;level=1;lowFreq=400;lowGain=5;hiFreq=8e3;hiGain=-12;m1Freq=1600;m1Q=.5;m1Gain=8;m2Freq=1e3;m2Q=.5;m2Gain=-8;lowCoeffs={...Se};m1Coeffs={...Se};m2Coeffs={...Se};hiCoeffs={...Se};lowStateL={...de};lowStateR={...de};m1StateL={...de};m1StateR={...de};m2StateL={...de};m2StateR={...de};hiStateL={...de};hiStateR={...de};constructor(A){this.sampleRate=A,this.reset(),this.updateCoefficients()}reset(){this.level=1,this.lowFreq=400,this.lowGain=5,this.hiGain=-12,this.hiFreq=8e3,this.m1Freq=1600,this.m1Q=.5,this.m1Gain=8,this.m2Freq=1e3,this.m2Q=.5,this.m2Gain=-8,ce(this.lowStateL),ce(this.lowStateR),ce(this.m1StateL),ce(this.m1StateR),ce(this.m2StateL),ce(this.m2StateR),ce(this.hiStateL),ce(this.hiStateR),this.updateCoefficients()}setParameter(A,e){switch(A){default:break;case 3:this.lowFreq=e===1?400:200;break;case 4:this.lowGain=e-64;break;case 5:this.hiFreq=e===1?8e3:4e3;break;case 6:this.hiGain=e-64;break;case 7:this.m1Freq=Ye.eqFreq(e);break;case 8:this.m1Q=[.5,1,2,4,9][e]||1;break;case 9:this.m1Gain=e-64;break;case 10:this.m2Freq=Ye.eqFreq(e);break;case 11:this.m2Q=[.5,1,2,4,9][e]||1;break;case 12:this.m2Gain=e-64;break;case 22:this.level=e/127;break}this.updateCoefficients()}process(A,e,t,s,n,a,r,i,o){let{level:g,sendLevelToChorus:l,sendLevelToDelay:C,sendLevelToReverb:h,lowCoeffs:d,lowStateL:B,lowStateR:p,m1Coeffs:D,m1StateL:w,m1StateR:L,m2StateL:k,m2StateR:S,m2Coeffs:v,hiCoeffs:x,hiStateL:y,hiStateR:u}=this;for(let m=0;m<o;m++){let K=A[m],T=e[m];K=Ke(K,d,B),T=Ke(T,d,p),K=Ke(K,D,w),T=Ke(T,D,L),K=Ke(K,v,k),T=Ke(T,v,S),K=Ke(K,x,y),T=Ke(T,x,u);let U=i+m;t[U]+=K*g,s[U]+=T*g;let O=.5*(K+T);n[m]+=O*h,a[m]+=O*l,r[m]+=O*C}}updateCoefficients(){Gr(this.lowCoeffs,this.lowFreq,this.lowGain/2,this.sampleRate),ws(this.m1Coeffs,this.m1Freq,this.m1Gain,this.m1Q,this.sampleRate),ws(this.m2Coeffs,this.m2Freq,this.m2Gain,this.m2Q,this.sampleRate),Tr(this.hiCoeffs,this.hiFreq,this.hiGain/2,this.sampleRate)}},da=1;function ws(A,e,t,s,n){let a=Math.pow(10,t/40),r=2*Math.PI*e/n,i=Math.cos(r),o=Math.sin(r)/(2*s),g=1+o*a,l=-2*i,C=1-o*a,h=1+o/a,d=-2*i,B=1-o/a;A.a0=1,A.a1=d/h,A.a2=B/h,A.b0=g/h,A.b1=l/h,A.b2=C/h}function Gr(A,e,t,s){let n=Math.pow(10,t/40),a=2*Math.PI*e/s,r=Math.cos(a),i=Math.sin(a)/2*Math.sqrt((n+1/n)*(1/da-1)+2),o=n*(n+1-(n-1)*r+2*Math.sqrt(n)*i),g=2*n*(n-1-(n+1)*r),l=n*(n+1-(n-1)*r-2*Math.sqrt(n)*i),C=n+1+(n-1)*r+2*Math.sqrt(n)*i,h=-2*(n-1+(n+1)*r),d=n+1+(n-1)*r-2*Math.sqrt(n)*i;A.a0=1,A.a1=h/C,A.a2=d/C,A.b0=o/C,A.b1=g/C,A.b2=l/C}function Tr(A,e,t,s){let n=Math.pow(10,t/40),a=2*Math.PI*e/s,r=Math.cos(a),i=Math.sin(a)/2*Math.sqrt((n+1/n)*(1/da-1)+2),o=n*(n+1+(n-1)*r+2*Math.sqrt(n)*i),g=-2*n*(n-1+(n+1)*r),l=n*(n+1+(n-1)*r-2*Math.sqrt(n)*i),C=n+1-(n-1)*r+2*Math.sqrt(n)*i,h=2*(n-1-(n+1)*r),d=n+1-(n-1)*r-2*Math.sqrt(n)*i;A.a0=1,A.a1=h/C,A.a2=d/C,A.b0=o/C,A.b1=g/C,A.b2=l/C}var aA=8,mt=128,Ss=4,pt=600,xr=.9,Ms=.35,Ea=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=288;manual=620;rate=.85;depth=64/mt;reso=16/127;mix=1;lowGain=0;hiGain=0;prevInL;prevOutL;prevInR;prevOutR;lowShelfCoef={...Se};highShelfCoef={...Se};manualOffset=pt;lowShelfStateL={x1:0,x2:0,y1:0,y2:0};lowShelfStateR={x1:0,x2:0,y1:0,y2:0};highShelfStateL={x1:0,x2:0,y1:0,y2:0};highShelfStateR={x1:0,x2:0,y1:0,y2:0};prevL=0;prevR=0;level=104/127;phase=Ms;sampleRate;constructor(A){this.sampleRate=A,this.prevInL=new Float32Array(aA),this.prevOutL=new Float32Array(aA),this.prevInR=new Float32Array(aA),this.prevOutR=new Float32Array(aA),this.reset()}reset(){this.phase=Ms,this.setManual(620),this.rate=.85,this.depth=64/mt,this.reso=16/127,this.mix=1,this.lowGain=0,this.hiGain=0,this.level=104/127,ce(this.highShelfStateL),ce(this.highShelfStateR),ce(this.lowShelfStateL),ce(this.lowShelfStateR),this.updateShelves(),this.clearAllPass()}process(A,e,t,s,n,a,r,i,o){let{sendLevelToReverb:g,sendLevelToChorus:l,sendLevelToDelay:C,level:h,manual:d,manualOffset:B,mix:p,lowShelfCoef:D,lowShelfStateR:w,lowShelfStateL:L,highShelfCoef:k,highShelfStateL:S,highShelfStateR:v,prevInL:x,prevInR:y,prevOutL:u,prevOutR:m,sampleRate:K,depth:T}=this,{prevL:U,prevR:O,phase:Ae}=this,G=this.rate/this.sampleRate,P=this.reso*xr;for(let f=0;f<o;f++){let M=_e(A[f],D,k,L,S),b=_e(e[f],D,k,w,v),V=2*Math.abs(Ae-.5);(Ae+=G)>=1&&(Ae-=1);let W=B+d*(1-T*V),z=Math.tan(Math.PI*W/K),J=Math.max(-.9999,Math.min(.9999,(1-z)/(1+z))),Z=M+P*U,$=b+P*O;for(let ie=0;ie<aA;ie++){let ue=-J*Z+x[ie]+J*u[ie];x[ie]=Z,u[ie]=ue,Z=ue;let Ne=-J*$+y[ie]+J*m[ie];y[ie]=$,m[ie]=Ne,$=Ne}U=Z,O=$;let H=(M+Z*p)*h,ee=(b+$*p)*h,Ee=i+f;t[Ee]+=H,s[Ee]+=ee;let ke=(H+ee)*.5;n[f]+=ke*g,a[f]+=ke*l,r[f]+=ke*C}this.phase=Ae,this.prevL=U,this.prevR=O}setParameter(A,e){switch(A){default:break;case 3:this.setManual(Ye.manual(e));break;case 4:this.rate=Ye.rate1(e);break;case 5:this.depth=e/mt;break;case 6:this.reso=e/127;break;case 7:this.mix=e/127;break;case 19:this.lowGain=e-64;break;case 20:this.hiGain=e-64;break;case 22:this.level=e/127;break}this.updateShelves()}setManual(A){A>1e3?(this.manualOffset=pt*1.5*Ss,this.manual=A):(this.manualOffset=pt,this.manual=A*Ss)}clearAllPass(){this.prevR=0,this.prevL=0;for(let A=0;A<aA;A++)this.prevInL[A]=0,this.prevOutL[A]=0,this.prevInR[A]=0,this.prevOutR[A]=0}updateShelves(){ze(this.lowShelfCoef,this.lowGain,200,this.sampleRate,!0),ze(this.highShelfCoef,this.hiGain,4e3,this.sampleRate,!1)}},Ls=Math.PI*2,Ur=.935,Kr=2,Or=.01,vs=127,Jr=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=294;modWave=1;modRate=3.05;modDepth=96;lowGain=0;hiGain=0;level=vs/127;currentPan=0;phase=0;lsCoeffs={...Se};hsCoeffs={...Se};lsStateR={...de};lsStateL={...de};hsStateR={...de};hsStateL={...de};sampleRate;constructor(A){this.sampleRate=A,this.reset()}reset(){this.modWave=1,this.modRate=3.05,this.modDepth=96,this.lowGain=0,this.hiGain=0,this.level=vs/127,this.currentPan=0,this.phase=0,ce(this.hsStateR),ce(this.hsStateL),ce(this.lsStateR),ce(this.lsStateL),this.updateShelves()}process(A,e,t,s,n,a,r,i,o){let{sendLevelToReverb:g,sendLevelToChorus:l,sendLevelToDelay:C,level:h,lsCoeffs:d,lsStateL:B,lsStateR:p,hsCoeffs:D,hsStateR:w,hsStateL:L,modWave:k}=this,S=Math.pow(this.modDepth/127,Kr),v=2/(1+S)*Ur,x=this.modRate/this.sampleRate,{phase:y,currentPan:u}=this;for(let m=0;m<o;m++){let K=_e(A[m],d,D,B,L),T=_e(e[m],d,D,p,w),U;switch(k){default:U=1-4*Math.abs(y-.5);break;case 1:U=y>.5?-1:-Math.cos((y-.75)*Ls);break;case 2:U=Math.sin(Ls*y);break;case 3:U=1-2*y;break;case 4:U=2*y-1;break}(y+=x)>=1&&(y-=1),u+=(U-u)*Or;let O=u*S,Ae=(1-O)*.5*v,G=(1+O)*.5*v,P=K*h*Ae,f=T*h*G,M=i+m;t[M]+=P,s[M]+=f;let b=(P+f)*.5;n[m]+=b*g,a[m]+=b*l,r[m]+=b*C}this.currentPan=u,this.phase=y}setParameter(A,e){switch(A){default:break;case 3:this.modWave=e;break;case 4:this.modRate=Ye.rate1(e);break;case 5:this.modDepth=e;break;case 19:this.lowGain=e-64;break;case 20:this.hiGain=e-64;break;case 22:this.level=e/127;break}this.updateShelves()}updateShelves(){ze(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),ze(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}},Fs=96,Hr=.1,Yr=.1,qr=27,zr=28,Vr=-28,Wr=400,jr=.62,Zr=.005,Qa=5,Rs=Qa*.5,fa=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=289;filType=1;sens=0;manual=68;peak=62;rate=2.05;depth=72;polarity=1;pan=0;lowGain=0;hiGain=0;level=Fs/127;coeffs={...Se};state={...de};hpCoeffs={...Se};hpState={...de};phase=0;lsCoeffs={...Se};hsCoeffs={...Se};lsState={...de};hsState={...de};sampleRate;lastFc=this.manual;attackCoeff;releaseCoeff;envelope=0;constructor(A){this.sampleRate=A,this.attackCoeff=Math.exp(-1/(Hr*A)),this.releaseCoeff=Math.exp(-1/(Yr*A)),this.reset()}reset(){this.filType=1,this.sens=0,this.setManual(68),this.peak=62,this.rate=2.05,this.depth=72,this.polarity=1,this.lowGain=0,this.hiGain=0,this.pan=0,this.level=Fs/127,this.phase=.2,this.lastFc=this.manual,ce(this.hsState),ce(this.lsState),ce(this.state),ce(this.hpState),this.updateShelves()}process(A,e,t,s,n,a,r,i,o){let{sendLevelToReverb:g,sendLevelToChorus:l,sendLevelToDelay:C,level:h,lsCoeffs:d,lsState:B,hsCoeffs:p,hsState:D,coeffs:w,state:L,sampleRate:k,filType:S,manual:v,pan:x,attackCoeff:y,releaseCoeff:u,hpState:m,hpCoeffs:K}=this,{phase:T,lastFc:U,envelope:O}=this,Ae=this.rate/this.sampleRate,G=Math.pow(10,this.peak/127*zr/20),P=Math.pow(10,this.peak/127*Vr/20),f=this.polarity===0?-1:Qa,M=this.depth/127*f,b=this.sens/127,V=x+64|0,W=ZA[V],z=XA[V];for(let J=0;J<o;J++){let Z=_e((A[J]+e[J])*.5,d,p,B,D),$=Math.abs(Z);O=$>O?y*O+(1-y)*$:u*O+(1-u)*$;let H=2*Math.abs(T-.5)*M;(T+=Ae)>=1&&(T-=1);let ee=H>=Rs||f<0?1:Math.sin(H*Math.PI/(2*Rs)),Ee=v*(1+b*O*qr),ke=Math.max(20,Ee*(1+ee*H));U+=(Math.max(10,ke)-U)*Zr,Xr(w,U,G,k);let ie=Z;S===1&&(_r(K,Wr,P,k),ie=Ke(ie,K,m));let ue=Ke(ie,w,L)*h,Ne=ue*W,CA=ue*z,eA=i+J;t[eA]+=Ne,s[eA]+=CA,n[J]+=ue*g,a[J]+=ue*l,r[J]+=ue*C}this.phase=T,this.lastFc=U,this.envelope=O}setParameter(A,e){switch(A){default:break;case 3:this.filType=e;break;case 4:this.sens=e;break;case 5:this.setManual(e);break;case 6:this.peak=e;break;case 7:this.rate=Ye.rate1(e);break;case 8:this.depth=e;break;case 9:this.polarity=e;break;case 19:this.lowGain=e-64;break;case 20:this.hiGain=e-64;break;case 21:this.pan=e-64;break;case 22:this.level=e/127;break}this.updateShelves()}setManual(A){let e=A*jr,t=Ye.manual(Math.floor(e)),s=Ye.manual(Math.ceil(e)),n=e-Math.floor(e);this.manual=t+(s-t)*n}updateShelves(){ze(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),ze(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}};function Xr(A,e,t,s){let n=2*Math.PI*e/s,a=Math.cos(n),r=Math.sin(n)/(2*t),i=1-a,o=i/2,g=o,l=1+r,C=-2*a,h=1-r;A.a0=1,A.a1=C/l,A.a2=h/l,A.b0=o/l,A.b1=i/l,A.b2=g/l}function _r(A,e,t,s){let n=2*Math.PI*e/s,a=Math.cos(n),r=Math.sin(n)/(2*t),i=(1+a)/2,o=-(1+a),g=i,l=1+r,C=-2*a,h=1-r;A.a0=1,A.a1=C/l,A.a2=h/l,A.b0=i/l,A.b1=o/l,A.b2=g/l}var bs=127,$r=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=4360;phPan=0;awPan=127;level=bs/127;phaser;autoWah;bufferPh;bufferAw;constructor(A,e){this.phaser=new Ea(A),this.autoWah=new fa(A),this.bufferAw=new Float32Array(e),this.bufferPh=new Float32Array(e),this.phaser.sendLevelToReverb=0,this.phaser.sendLevelToChorus=0,this.phaser.sendLevelToDelay=0,this.autoWah.sendLevelToReverb=0,this.autoWah.sendLevelToChorus=0,this.autoWah.sendLevelToDelay=0,this.reset()}reset(){this.phPan=0,this.awPan=127,this.level=bs/127,this.phaser.reset(),this.autoWah.reset(),this.phaser.setParameter(22,127),this.autoWah.setParameter(22,127)}process(A,e,t,s,n,a,r,i,o){let{sendLevelToReverb:g,sendLevelToChorus:l,sendLevelToDelay:C,level:h}=this,{bufferPh:d,bufferAw:B}=this;this.bufferPh.fill(0),this.phaser.process(A,A,d,d,d,d,d,0,o),this.bufferAw.fill(0),this.autoWah.process(e,e,B,B,B,B,B,0,o);let p=this.phPan|0,D=ZA[p],w=XA[p],L=this.awPan|0,k=ZA[L],S=XA[L];for(let v=0;v<o;v++){let x=d[v]*.5*h,y=B[v]*.5*h,u=x*D+y*k,m=x*w+y*S,K=i+v;t[K]+=u,s[K]+=m;let T=(u+m)*.5;n[v]+=T*g,a[v]+=T*l,r[v]+=T*C}}setParameter(A,e){if(A>=3&&A<=7){this.phaser.setParameter(A,e);return}if(A>=8&&A<=14){this.autoWah.setParameter(A-5,e);return}switch(A){default:break;case 18:this.phPan=e;break;case 19:this.phaser.setParameter(22,e);break;case 20:this.awPan=e;break;case 21:this.autoWah.setParameter(22,e);break;case 22:this.level=e/127;break}}},Ps=127,Ns=Math.PI*2,ei=.01,Ai=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=293;modWave=1;modRate=3.05;modDepth=96;lowGain=0;hiGain=0;level=Ps/127;phase=0;currentGain=1;lsCoeffs={...Se};hsCoeffs={...Se};lsStateR={...de};lsStateL={...de};hsStateR={...de};hsStateL={...de};sampleRate;constructor(A){this.sampleRate=A,this.reset()}reset(){this.modWave=1,this.modRate=3.05,this.modDepth=96,this.lowGain=0,this.hiGain=0,this.level=Ps/127,this.phase=0,this.currentGain=1,ce(this.hsStateR),ce(this.hsStateL),ce(this.lsStateR),ce(this.lsStateL),this.updateShelves()}process(A,e,t,s,n,a,r,i,o){let{sendLevelToReverb:g,sendLevelToChorus:l,sendLevelToDelay:C,level:h,lsCoeffs:d,lsStateL:B,lsStateR:p,hsCoeffs:D,hsStateR:w,hsStateL:L,modDepth:k,modWave:S}=this,v=this.modRate/this.sampleRate,{currentGain:x,phase:y}=this;for(let u=0;u<o;u++){let m=_e(A[u],d,D,B,L),K=_e(e[u],d,D,p,w),T;switch(S){default:T=1-4*Math.abs(y-.5);break;case 1:T=y>.5?-1:-Math.cos((y-.75)*Ns);break;case 2:T=Math.sin(Ns*y);break;case 3:T=1-2*y;break;case 4:T=2*y-1;break}(y+=v)>=1&&(y-=1);let U=1-(T/2+.5)*(k/127);x+=(U-x)*ei;let O=m*h*x,Ae=K*h*x,G=i+u;t[G]+=O,s[G]+=Ae;let P=(O+Ae)*.5;n[u]+=P*g,a[u]+=P*l,r[u]+=P*C}this.phase=y,this.currentGain=x}setParameter(A,e){switch(A){default:break;case 3:this.modWave=e;break;case 4:this.modRate=Ye.rate1(e);break;case 5:this.modDepth=e;break;case 19:this.lowGain=e-64;break;case 20:this.hiGain=e-64;break;case 22:this.level=e/127;break}this.updateShelves()}updateShelves(){ze(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),ze(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}},ti=[ha,Nr,Ea,Jr,fa,$r,Ai],si=class{preDelay=0;preLPF=.5;inputDiffusion1=.75;inputDiffusion2=.625;decay=.5;decayDiffusion1=.7;decayDiffusion2=.5;damping=.005;excursionRate=.1;excursionDepth=.2;gain=1;sampleRate;lp1=0;lp2=0;lp3=0;excPhase=0;pDWrite=0;taps;pDelay;pDLength;delays=new Array;constructor(A){this.sampleRate=A,this.pDLength=A,this.pDelay=new Float32Array(this.pDLength);for(let e of[.004771345,.003595309,.012734787,.009307483,.022579886,.149625349,.060481839,.1249958,.030509727,.141695508,.089244313,.106280031])this.makeDelayLine(e);this.taps=Int16Array.from([.008937872,.099929438,.064278754,.067067639,.066866033,.006283391,.035818689,.011861161,.121870905,.041262054,.08981553,.070931756,.011256342,.004065724],e=>Math.round(e*this.sampleRate))}process(A,e,t,s,n){let a=this.preDelay|0,r=this.inputDiffusion1,i=this.inputDiffusion2,o=this.decay,g=this.decayDiffusion1,l=this.decayDiffusion2,C=1-this.damping,h=this.excursionRate/this.sampleRate,d=this.excursionDepth*this.sampleRate/1e3,B=this.pDWrite;for(let p=0;p<n;p++)this.pDelay[(B+p)%this.pDLength]=A[p];for(let p=0;p<n;p++){this.lp1+=this.preLPF*(this.pDelay[(this.pDLength+this.pDWrite-a+p)%this.pDLength]-this.lp1);let D=this.writeDelay(0,this.lp1-r*this.readDelay(0));D=this.writeDelay(1,r*(D-this.readDelay(1))+this.readDelay(0)),D=this.writeDelay(2,r*D+this.readDelay(1)-i*this.readDelay(2)),D=this.writeDelay(3,i*(D-this.readDelay(3))+this.readDelay(2));let w=i*D+this.readDelay(3),L=d*(1+Math.cos(this.excPhase*6.28)),k=d*(1+Math.sin(this.excPhase*6.2847)),S=this.writeDelay(4,w+o*this.readDelay(11)+g*this.readDelayCAt(4,L));this.writeDelay(5,this.readDelayCAt(4,L)-g*S),this.lp2+=C*(this.readDelay(5)-this.lp2),S=this.writeDelay(6,o*this.lp2-l*this.readDelay(6)),this.writeDelay(7,this.readDelay(6)+l*S),S=this.writeDelay(8,w+o*this.readDelay(7)+g*this.readDelayCAt(8,k)),this.writeDelay(9,this.readDelayCAt(8,k)-g*S),this.lp3+=C*(this.readDelay(9)-this.lp3),S=this.writeDelay(10,o*this.lp3-l*this.readDelay(10)),this.writeDelay(11,this.readDelay(10)+l*S);let v=this.readDelayAt(9,this.taps[0])+this.readDelayAt(9,this.taps[1])-this.readDelayAt(10,this.taps[2])+this.readDelayAt(11,this.taps[3])-this.readDelayAt(5,this.taps[4])-this.readDelayAt(6,this.taps[5])-this.readDelayAt(7,this.taps[6]),x=p+s;e[x]+=v*this.gain;let y=this.readDelayAt(5,this.taps[7])+this.readDelayAt(5,this.taps[8])-this.readDelayAt(6,this.taps[9])+this.readDelayAt(7,this.taps[10])-this.readDelayAt(9,this.taps[11])-this.readDelayAt(10,this.taps[12])-this.readDelayAt(11,this.taps[13]);t[x]+=y*this.gain,this.excPhase+=h;for(let u=0,m=this.delays[0];u<this.delays.length;m=this.delays[++u])m[1]=m[1]+1&m[3],m[2]=m[2]+1&m[3]}this.pDWrite=(B+n)%this.pDLength}makeDelayLine(A){let e=Math.round(A*this.sampleRate),t=2**Math.ceil(Math.log2(e));this.delays.push([new Float32Array(t),e-1,0,t-1])}writeDelay(A,e){return this.delays[A][0][this.delays[A][1]]=e}readDelay(A){return this.delays[A][0][this.delays[A][2]]}readDelayAt(A,e){let t=this.delays[A];return t[0][t[2]+e&t[3]]}readDelayCAt(A,e){let t=this.delays[A],s=e-~~e,n=t[3],a=~~e+t[2]-1,r=t[0][a++&n],i=t[0][a++&n],o=t[0][a++&n],g=t[0][a&n],l=(3*(i-o)-r+g)/2,C=2*o+r-(5*i+g)/2,h=(o-r)/2;return((l*s+C)*s+h)*s+i}},fA=class{feedback=0;gain=1;buffer;bufferLength;writeIndex=0;constructor(A){this.buffer=new Float32Array(A),this.bufferLength=this.buffer.length,this._time=A-5}_time;get time(){return this._time}set time(A){this._time=Math.min(this.bufferLength,A)|0}clear(){this.buffer.fill(0)}process(A,e,t){let s=this.writeIndex,n=this._time,a=this.buffer,r=this.bufferLength,i=this.feedback,o=this.gain;for(let g=0;g<t;g++){let l=s-n;l<0&&(l+=r);let C=a[l];e[g]=C*o,a[s]=A[g]+C*i,++s>=r&&(s=0)}this.writeIndex=s}},ai=1.5,ni=class{dattorro;delayLeft;delayRight;delayLeftOutput;delayRightOutput;delayLeftInput;delayPreLPF;sampleRate;preLPFfc=8e3;preLPFa=0;preLPFz=0;characterTimeCoefficient=1;characterGainCoefficient=1;characterLPFCoefficient=0;delayGain=1;panDelayFeedback=0;constructor(A,e){this.sampleRate=A,this.delayLeftOutput=new Float32Array(e),this.delayRightOutput=new Float32Array(e),this.delayLeftInput=new Float32Array(e),this.delayPreLPF=new Float32Array(e),this.dattorro=new si(A),this.delayLeft=new fA(A),this.delayRight=new fA(A)}_delayFeedback=0;get delayFeedback(){return this._delayFeedback}set delayFeedback(A){this._delayFeedback=A,this.updateFeedback()}_character=0;get character(){return this._character}set character(A){switch(this._character=A,this.dattorro.damping=.005,this.characterTimeCoefficient=1,this.characterGainCoefficient=1,this.characterLPFCoefficient=0,this.dattorro.inputDiffusion1=.75,this.dattorro.inputDiffusion2=.625,this.dattorro.decayDiffusion1=.7,this.dattorro.decayDiffusion2=.5,this.dattorro.excursionRate=.5,this.dattorro.excursionDepth=.7,A){case 0:this.dattorro.damping=.85,this.characterTimeCoefficient=.9,this.characterGainCoefficient=.9,this.characterLPFCoefficient=.2;break;case 1:this.dattorro.damping=.2,this.characterGainCoefficient=.7,this.characterTimeCoefficient=1,this.dattorro.decayDiffusion2=.64,this.dattorro.decayDiffusion1=.6,this.characterLPFCoefficient=.2;break;case 2:this.dattorro.damping=.56,this.characterGainCoefficient=.75,this.characterTimeCoefficient=1,this.dattorro.decayDiffusion2=.64,this.dattorro.decayDiffusion1=.6,this.characterLPFCoefficient=.1;break;case 3:this.dattorro.damping=.3,this.characterGainCoefficient=1.25,this.characterTimeCoefficient=1.3,this.characterLPFCoefficient=0,this.dattorro.decayDiffusion2=.7,this.dattorro.decayDiffusion1=.66;break;case 4:this.characterGainCoefficient=1,this.characterTimeCoefficient=1.2,this.characterLPFCoefficient=.1,this.dattorro.damping=.1,this.dattorro.decayDiffusion2=.69,this.dattorro.decayDiffusion1=.67;break;case 5:this.characterGainCoefficient=.75,this.dattorro.damping=.65,this.characterTimeCoefficient=.5;break}this.updateTime(),this.updateGain(),this.updateLowpass(),this.updateFeedback(),this.delayLeft.clear(),this.delayRight.clear()}_time=0;get time(){return this._time}set time(A){this._time=A,this.updateTime()}_preDelayTime=0;get preDelayTime(){return this._preDelayTime}set preDelayTime(A){this._preDelayTime=A,this.dattorro.preDelay=A/1e3*this.sampleRate}_level=0;get level(){return this._level}set level(A){this._level=A,this.updateGain()}_preLowpass=0;get preLowpass(){return this._preLowpass}set preLowpass(A){this._preLowpass=A,this.preLPFfc=8e3*.63**this._preLowpass;let e=Math.exp(-2*Math.PI*this.preLPFfc/this.sampleRate);this.preLPFa=1-e,this.updateLowpass()}process(A,e,t,s,n){switch(this._character){default:this.dattorro.process(A,e,t,s,n);return;case 6:{let a;if(this._preLowpass>0){let o=this.delayPreLPF,g=this.preLPFz,l=this.preLPFa;for(let C=0;C<n;C++){let h=A[C];g+=l*(h-g),o[C]=g}this.preLPFz=g,a=o}else a=A;this.delayLeft.process(a,this.delayLeftOutput,n);let r=this.delayGain,i=this.delayLeftOutput;for(let o=0,g=s;o<n;o++,g++){let l=i[o]*r;t[g]+=l,e[g]+=l}return}case 7:{let a;if(this._preLowpass>0){let C=this.delayPreLPF,h=this.preLPFz,d=this.preLPFa;for(let B=0;B<n;B++){let p=A[B];h+=d*(p-h),C[B]=h}this.preLPFz=h,a=C}else a=A;let r=this.panDelayFeedback,{delayLeftInput:i,delayLeftOutput:o,delayRightOutput:g}=this;for(let C=0;C<n;C++)i[C]=a[C]+g[C]*r;this.delayLeft.process(i,o,n),this.delayRight.process(o,g,n);let l=this.delayGain;for(let C=0,h=s;C<n;C++,h++)e[h]+=o[C]*l,t[h]+=g[C]*l;return}}}getSnapshot(){return{level:this._level,preLowpass:this._preLowpass,character:this._character,time:this._time,delayFeedback:this._delayFeedback,preDelayTime:this._preDelayTime}}updateFeedback(){let A=1-(1-this._delayFeedback/127)**1.9;this._character===6?this.delayLeft.feedback=A*.73:(this.delayLeft.feedback=this.delayRight.feedback=0,this.panDelayFeedback=A*.73)}updateLowpass(){this.dattorro.preLPF=Math.min(1,.1+(7-this.preLowpass)/14+this.characterLPFCoefficient)}updateGain(){this.dattorro.gain=this._level/345*this.characterGainCoefficient,this.delayGain=this._level/127*ai}updateTime(){let A=this._time/127;this.dattorro.decay=this.characterTimeCoefficient*(.05+.65*A);let e=Math.max(21,A*this.sampleRate*.4468|0);this.character===7?this.delayRight.time=this.delayLeft.time=Math.floor(e/2):this.delayLeft.time=e}},ri=1.3,ii=class{preLPFfc=8e3;preLPFa=0;preLPFz=0;leftDelayBuffer;rightDelayBuffer;sampleRate;phase=0;write=0;gain=.5;reverbGain=0;delayGain=0;depthSamples=0;delaySamples=1;rateInc=0;feedbackGain=0;constructor(A,e){this.sampleRate=A,this.leftDelayBuffer=new Float32Array(A),this.rightDelayBuffer=new Float32Array(A),this.preLowpass=0}_sendLevelToReverb=0;get sendLevelToReverb(){return this._sendLevelToReverb}set sendLevelToReverb(A){this._sendLevelToReverb=A,this.reverbGain=A/127}_sendLevelToDelay=0;get sendLevelToDelay(){return this._sendLevelToDelay}set sendLevelToDelay(A){this._sendLevelToDelay=A,this.delayGain=A/127}_preLowpass=0;get preLowpass(){return this._preLowpass}set preLowpass(A){this._preLowpass=A,this.preLPFfc=8e3*.63**this._preLowpass;let e=Math.exp(-2*Math.PI*this.preLPFfc/this.sampleRate);this.preLPFa=1-e}_depth=0;get depth(){return this._depth}set depth(A){this._depth=A,this.depthSamples=A/127*.025*this.sampleRate}_delay=0;get delay(){return this._delay}set delay(A){this._delay=A,this.delaySamples=Math.max(1,A/127*.025*this.sampleRate)}_feedback=0;get feedback(){return this._feedback}set feedback(A){this._feedback=A,this.feedbackGain=A*.00763}_rate=0;get rate(){return this._rate}set rate(A){this._rate=A;let e=A*.122;this.rateInc=e/this.sampleRate}_level=64;get level(){return this._level}set level(A){this.gain=A/127*ri,this._level=A}process(A,e,t,s,n,a,r){let i=this.leftDelayBuffer,o=this.rightDelayBuffer,g=this.rateInc,l=i.length,C=this.depthSamples,h=this.delaySamples,d=this.gain,B=this.reverbGain,p=this.delayGain,D=this.feedbackGain,w=this._preLowpass>0,L=this.phase,k=this.write,S=this.preLPFz,v=this.preLPFa;for(let x=0;x<r;x++){let y=A[x];w&&(S+=v*(y-S),y=S);let u=2*Math.abs(L-.5),m=Math.max(1,Math.min(h+u*C,l)),K=k-m;K<0&&(K+=l);let T=K|0,U=T+1;U>=l&&(U-=l);let O=K-T,Ae=i[T]*(1-O)+i[U]*O;i[k]=y+Ae*D;let G=Math.max(1,Math.min(h+(1-u)*C,l)),P=k-G;P<0&&(P+=l),T=P|0,U=T+1,U>=l&&(U-=l),O=P-T;let f=o[T]*(1-O)+o[U]*O,M=x+a;e[M]+=Ae*d,t[M]+=f*d;let b=(Ae+f)/2;s[x]+=b*B,n[x]+=b*p,o[k]=y+f*D,++k>=l&&(k=0),(L+=g)>=1&&(L-=1)}this.write=k,this.phase=L,this.preLPFz=S}getSnapshot(){return{preLowpass:this._preLowpass,depth:this._depth,delay:this._delay,sendLevelToDelay:this._sendLevelToDelay,sendLevelToReverb:this._sendLevelToReverb,rate:this._rate,feedback:this._feedback,level:this._level}}},oi=[{start:1,end:20,timeStart:.1,resolution:.1},{start:20,end:35,timeStart:2,resolution:.2},{start:35,end:45,timeStart:5,resolution:.5},{start:45,end:55,timeStart:10,resolution:1},{start:55,end:70,timeStart:20,resolution:2},{start:70,end:80,timeStart:50,resolution:5},{start:80,end:90,timeStart:100,resolution:10},{start:90,end:105,timeStart:200,resolution:20},{start:105,end:116,timeStart:500,resolution:50}],gi=1.66,Ii=class{preLPFfc=8e3;preLPFa=0;preLPFz=0;delayLeft;delayRight;delayCenter;sampleRate;delayCenterOutput;delayPreLPF;delayCenterTime;delayLeftMultiplier=.04;delayRightMultiplier=.04;gain=0;reverbGain=0;constructor(A,e){this.sampleRate=A,this.delayCenterOutput=new Float32Array(e),this.delayPreLPF=new Float32Array(e),this.delayCenterTime=.34*A,this.delayCenter=new fA(A),this.delayLeft=new fA(A),this.delayRight=new fA(A)}_sendLevelToReverb=0;get sendLevelToReverb(){return this._sendLevelToReverb}set sendLevelToReverb(A){this._sendLevelToReverb=A,this.reverbGain=A/127}_preLowpass=0;get preLowpass(){return this._preLowpass}set preLowpass(A){this._preLowpass=A,this.preLPFfc=8e3*.63**this._preLowpass;let e=Math.exp(-2*Math.PI*this.preLPFfc/this.sampleRate);this.preLPFa=1-e}_levelRight=0;get levelRight(){return this._levelRight}set levelRight(A){this._levelRight=A,this.updateGain()}_level=64;get level(){return this._level}set level(A){this._level=A,this.gain=A/127*gi}_levelCenter=127;get levelCenter(){return this._levelCenter}set levelCenter(A){this._levelCenter=A,this.updateGain()}_levelLeft=0;get levelLeft(){return this._levelLeft}set levelLeft(A){this._levelLeft=A,this.updateGain()}_feedback=16;get feedback(){return this._feedback}set feedback(A){this._feedback=A,this.delayLeft.feedback=this.delayRight.feedback=0,this.delayCenter.feedback=(A-64)/66}_timeRatioRight=0;get timeRatioRight(){return this._timeRatioRight}set timeRatioRight(A){this._timeRatioRight=A,this.delayRightMultiplier=A*(100/2400),this.delayRight.time=this.delayCenterTime*this.delayRightMultiplier}_timeRatioLeft=0;get timeRatioLeft(){return this._timeRatioLeft}set timeRatioLeft(A){this._timeRatioLeft=A,this.delayLeftMultiplier=A*(100/2400),this.delayLeft.time=this.delayCenterTime*this.delayLeftMultiplier}_timeCenter=12;get timeCenter(){return this._timeCenter}set timeCenter(A){this._timeCenter=A;let e=.1;for(let t of oi)if(A>=t.start&&A<t.end){e=t.timeStart+(A-t.start)*t.resolution;break}this.delayCenterTime=Math.max(2,this.sampleRate*(e/1e3)),this.delayCenter.time=this.delayCenterTime,this.delayLeft.time=this.delayCenterTime*this.delayLeftMultiplier,this.delayRight.time=this.delayCenterTime*this.delayRightMultiplier}process(A,e,t,s,n,a){let r;if(this._preLowpass>0){let C=this.delayPreLPF,h=this.preLPFz,d=this.preLPFa;for(let B=0;B<a;B++){let p=A[B];h+=d*(p-h),C[B]=h}this.preLPFz=h,r=C}else r=A;let{gain:i,reverbGain:o}=this;this.delayCenter.process(r,this.delayCenterOutput,a);let g=this.delayCenterOutput;for(let C=0,h=n;C<a;C++,h++){let d=g[C];s[C]+=d*o;let B=d*i;e[h]+=B,t[h]+=B}for(let C=0;C<a;C++)g[C]+=A[C];let l=this.delayPreLPF;this.delayLeft.process(g,l,a);for(let C=0,h=n;C<a;C++,h++){let d=l[C];e[h]+=d*i,s[C]+=d*o}this.delayRight.process(g,l,a);for(let C=0,h=n;C<a;C++,h++){let d=l[C];t[h]+=d*i,s[C]+=d*o}}getSnapshot(){return{level:this._level,preLowpass:this._preLowpass,timeCenter:this._timeCenter,timeRatioRight:this._timeRatioRight,timeRatioLeft:this._timeRatioLeft,levelCenter:this._levelCenter,levelLeft:this._levelLeft,levelRight:this._levelRight,feedback:this._feedback,sendLevelToReverb:this._sendLevelToReverb}}updateGain(){this.delayCenter.gain=this._levelCenter/127,this.delayLeft.gain=this._levelLeft/127,this.delayRight.gain=this._levelRight/127}},Gs={volume:1,pan:0,keyShift:0,fineTune:0,system:"gs"};function ci(A,e){if(!this.lockedMIDIParameters[A]){this.midiParameters[A]=e;for(let t of this.midiChannels)t.updateInternalParams();this.callEvent("globalParamChange",{parameter:A,value:e})}}function li(A,e){this.lockedMIDIParameters[A]=e}var Ci=.01,hi=.05,Bi=class{voices=[];midiChannels=[];maxBufferSize;voiceBuffer;insertionInputL;insertionInputR;reverbInput;chorusInput;delayInput;delayActive=!1;soundBankManager=new vr(this.updatePresetList.bind(this));keyModifierManager=new kn;sampleRate;tunings=new Float32Array(16384).fill(-1);lockedMIDIParameters=Object.fromEntries(Object.keys(Gs).map(A=>[A,!1]));midiParameters={...Gs};systemParameters={...zs};currentTime=0;defaultPreset;drumPreset;gainSmoothingFactor;panSmoothingFactor;eventCallbackHandler;missingPresetHandler;cachedVoices=new Map;lockMIDIParameter=li.bind(this);setSystemParameter=Mn.bind(this);systemExclusive=Pr.bind(this);reverbProcessor;chorusProcessor;delayProcessor;insertionActive=!1;customChannelNumbers=!1;setMIDIParameter=ci.bind(this);insertionFallback=new ha;insertionProcessor=this.insertionFallback;insertionEffects=new Map;portSelectChannelOffset=0;insertionParams=new Uint8Array(23).fill(255);lastPriorityAssignmentTime=0;eventQueue=[];sampleTime;constructor(A,e,t,s){this.eventCallbackHandler=A,this.missingPresetHandler=e,this.sampleRate=t,this.sampleTime=1/t,this.currentTime=s.initialTime,this.setSystemParameter("effectsEnabled",s.effectsEnabled),this.setSystemParameter("eventsEnabled",s.eventsEnabled),this.maxBufferSize=s.maxBufferSize,this.gainSmoothingFactor=Ci*(44100/t),this.panSmoothingFactor=hi*(44100/t),qt.initCache(this.sampleRate);let n=this.maxBufferSize;this.reverbProcessor=s.reverbProcessor??new ni(t,n),this.chorusProcessor=s.chorusProcessor??new ii(t,n),this.delayProcessor=s.delayProcessor??new Ii(t,n),this.voiceBuffer=new Float32Array(n),this.insertionInputL=new Float32Array(n),this.insertionInputR=new Float32Array(n),this.reverbInput=new Float32Array(n),this.chorusInput=new Float32Array(n),this.delayInput=new Float32Array(n);for(let a of ti)this.registerInsertionProcessor(a);this.resetInsertionParams(),this.allocateNewVoices(this.systemParameters.voiceCap)}_voiceCount=0;get voiceCount(){return this._voiceCount}controllerChange(A,e,t){if(this.customChannelNumbers){for(let s of this.midiChannels)s.midiParameters.rxChannel===A&&s.controllerChange(e,t);return}this.midiChannels[A+this.portSelectChannelOffset].controllerChange(e,t)}noteOn(A,e,t){if(this.customChannelNumbers){for(let s of this.midiChannels)s.midiParameters.rxChannel===A&&s.noteOn(e,t);return}this.midiChannels[A+this.portSelectChannelOffset].noteOn(e,t)}noteOff(A,e){if(this.customChannelNumbers){for(let t of this.midiChannels)t.midiParameters.rxChannel===A&&t.noteOff(e);return}this.midiChannels[A+this.portSelectChannelOffset].noteOff(e)}polyPressure(A,e,t){if(this.customChannelNumbers){for(let s of this.midiChannels)s.midiParameters.rxChannel===A&&s.polyPressure(e,t);return}this.midiChannels[A+this.portSelectChannelOffset].polyPressure(e,t)}channelPressure(A,e){if(this.customChannelNumbers){for(let t of this.midiChannels)t.midiParameters.rxChannel===A&&t.setMIDIParameter("pressure",e);return}this.midiChannels[A+this.portSelectChannelOffset].setMIDIParameter("pressure",e)}pitchWheel(A,e,t=-1){if(this.customChannelNumbers){for(let s of this.midiChannels)s.midiParameters.rxChannel===A&&s.pitchWheel(e,t);return}this.midiChannels[A+this.portSelectChannelOffset].pitchWheel(e,t)}programChange(A,e){if(this.customChannelNumbers){for(let t of this.midiChannels)t.midiParameters.rxChannel===A&&t.programChange(e);return}this.midiChannels[A+this.portSelectChannelOffset].programChange(e)}assignVoice(){for(let e=0;e<this.systemParameters.voiceCap;e++){let t=this.voices[e];if(!t.isActive)return t.priority=1/0,t}if(this.systemParameters.autoAllocateVoices){c.info(`%cAllocating a new voice, total count %c${this.systemParameters.voiceCap+1}.`,E.info,E.value),this.allocateNewVoices(1);let e=this.voices[this.voices.length-1];return this.systemParameters.voiceCap++,e.priority=1/0,e}this.assignVoicePriorities();let A=this.voices[0];for(let e=0;e<this.systemParameters.voiceCap;e++){let t=this.voices[e];t.priority<A.priority&&(A=t)}return A.priority=1/0,A}stopAllChannels(A){c.info("%cStop all received!",E.info);for(let e of this.midiChannels)e.stopAllNotes(A)}processMessage(A,e=0,t=Ya){let s=t.time;s>this.currentTime?(this.eventQueue.push({message:A,channelOffset:e,time:s}),this.eventQueue.sort((n,a)=>n.time-a.time)):this.processMessageInternal(A,e)}destroySynthProcessor(){this.voices.length=0;for(let A of this.midiChannels)A.destroy();this.clearCache(),this.midiChannels.length=0,this.soundBankManager.destroy()}getVoices(A,e,t){let s=this.midiChannels[A],n=this.keyModifierManager.hasOverridePatch(A,e),a=s.preset;if(n){let r=this.keyModifierManager.getPatch(A,e);a=this.soundBankManager.getPreset(r,this.midiParameters.system)}return a?this.getVoicesForPreset(a,e,t):[]}createMIDIChannel(A){let e=new Mr(this,this.defaultPreset,this.midiChannels.length);this.midiChannels.push(e),A&&(this.callEvent("channelAdded",void 0),e.setDrums(!0))}reset(A="gs"){if(this.callEvent("reset",A),this.setMIDIParameter("system",A),this.setMIDIParameter("volume",1),this.setMIDIParameter("pan",0),this.setMIDIParameter("keyShift",0),this.setMIDIParameter("fineTune",0),this.tunings.fill(-1),this.portSelectChannelOffset=0,this.customChannelNumbers=!1,this.setReverbMacro(4),this.setChorusMacro(2),this.setDelayMacro(0),this.resetInsertion(),!(!this.drumPreset||!this.defaultPreset)){for(let e of this.midiChannels)e.reset(!1);this.updateActiveEffects()}}process(A,e,t=0,s=0){this.processSplit([[A,e]],A,e,t,s)}processSplit(A,e,t,s=0,n=0){if(this.eventQueue.length>0){let o=this.currentTime;for(;this.eventQueue[0]?.time<=o;){let g=this.eventQueue.shift();g&&this.processMessageInternal(g.message,g.channelOffset)}}s=Math.max(s,0);let a=n||A[0][0].length-s;if(a>this.maxBufferSize)throw new Error(`Requested ${a} samples, but maxBufferSize is ${this.maxBufferSize}`);this.reverbInput.fill(0),this.chorusInput.fill(0),this.delayActive&&this.delayInput.fill(0),this.insertionActive&&(this.insertionInputL.fill(0),this.insertionInputR.fill(0));for(let o of this.midiChannels)o.clearVoiceCount();this._voiceCount=0;let r=this.systemParameters.voiceCap,i=A.length;for(let o=0;o<r;o++){let g=this.voices[o],l=this.midiChannels[g.channel];if(!g.isActive)continue;let C=g.channel%i;l.renderVoice(g,this.currentTime,A[C][0],A[C][1],s,a),l.voiceCount++,this._voiceCount++}if(this.systemParameters.effectsEnabled){let{chorusInput:o,delayInput:g,reverbInput:l,insertionInputR:C,insertionInputL:h}=this;this.insertionActive&&this.insertionProcessor.process(h,C,e,t,l,o,g,s,a),this.chorusProcessor.process(o,e,t,l,g,s,a),this.delayActive&&this.midiParameters.system!=="xg"&&this.delayProcessor.process(g,e,t,l,s,a),this.reverbProcessor.process(l,e,t,s,a)}this.currentTime+=a*this.sampleTime}getVoicesForPreset(A,e,t){let s=this.getCachedVoice(A,e,t);if(s!==void 0)return s;let n=new Array;for(let a of A.getVoiceParameters(e,t)){let r=a.sample;if(a.sample.getAudioData()===void 0){c.warn(`Discarding invalid sample: ${r.name}`);continue}n.push(new ar(a,e,t,this.sampleRate))}return this.setCachedVoice(A,e,t,n),n}clearCache(){this.cachedVoices.clear()}callEvent(A,e){this.eventCallbackHandler(A,e)}updateActiveEffects(){this.systemParameters.insertionEffectLock||(this.insertionActive=this.midiChannels.some(A=>A.midiParameters.efxAssign)),this.systemParameters.delayLock||(this.delayActive=this.midiParameters.system==="xg"?!1:this.chorusProcessor.sendLevelToDelay>0||this.insertionProcessor.sendLevelToDelay>0||this.midiChannels.some(A=>A.midiControllers[Q.variationDepth]>0))}getInsertionSnapshot(){return{type:this.insertionProcessor.type,params:this.insertionParams.slice()}}resetInsertionParams(){this.insertionParams.fill(255),this.insertionParams[20]=40,this.insertionParams[21]=0,this.insertionParams[22]=0}resetInsertion(){this.systemParameters.insertionEffectLock||(this.insertionProcessor=this.insertionFallback,this.insertionProcessor.reset(),this.resetInsertionParams(),this.insertionProcessor.sendLevelToReverb=40/127*GA,this.insertionProcessor.sendLevelToChorus=0,this.insertionProcessor.sendLevelToDelay=0,this.callEvent("effectChange",{effect:"insertion",parameter:0,value:this.insertionProcessor.type}))}setReverbMacro(A){if(this.systemParameters.reverbLock)return;let e=this.reverbProcessor;switch(e.level=64,e.preDelayTime=0,e.character=A,A){case 0:e.character=0,e.preLowpass=3,e.time=80,e.delayFeedback=0,e.preDelayTime=0;break;case 1:e.preLowpass=4,e.time=56,e.delayFeedback=0;break;case 2:e.preLowpass=0,e.time=72,e.delayFeedback=0;break;case 3:e.preLowpass=4,e.time=72,e.delayFeedback=0;break;case 4:e.preLowpass=0,e.time=64,e.delayFeedback=0;break;case 5:e.preLowpass=0,e.time=88,e.delayFeedback=0;break;case 6:e.preLowpass=0,e.time=32,e.delayFeedback=40;break;case 7:e.preLowpass=0,e.time=64,e.delayFeedback=32;break;default:c.warn(`Invalid reverb macro: ${A}`);return}this.callEvent("effectChange",{effect:"reverb",parameter:"macro",value:A})}setChorusMacro(A){if(this.systemParameters.chorusLock)return;let e=this.chorusProcessor;switch(e.level=64,e.preLowpass=0,e.delay=127,e.sendLevelToDelay=0,e.sendLevelToReverb=0,A){case 0:e.feedback=0,e.delay=112,e.rate=3,e.depth=5;break;case 1:e.feedback=5,e.delay=80,e.rate=9,e.depth=19;break;case 2:e.feedback=8,e.delay=80,e.rate=3,e.depth=19;break;case 3:e.feedback=16,e.delay=64,e.rate=9,e.depth=16;break;case 4:e.feedback=64,e.delay=127,e.rate=2,e.depth=24;break;case 5:e.feedback=112,e.delay=127,e.rate=1,e.depth=5;break;case 6:e.feedback=0,e.depth=127,e.rate=0,e.depth=127;break;case 7:e.feedback=80,e.depth=127,e.rate=0,e.depth=127;break;default:c.warn(`Invalid chorus macro: ${A}`);return}this.callEvent("effectChange",{effect:"chorus",parameter:"macro",value:A})}setDelayMacro(A){if(this.systemParameters.delayLock)return;let e=this.delayProcessor;switch(e.level=64,e.preLowpass=0,e.sendLevelToReverb=0,e.levelRight=e.levelLeft=0,e.levelCenter=127,A){case 0:e.timeCenter=97,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=80;break;case 1:e.timeCenter=106,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=80;break;case 2:e.timeCenter=115,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=72;break;case 3:e.timeCenter=83,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=72;break;case 4:e.timeCenter=105,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=125,e.levelRight=60,e.feedback=74;break;case 5:e.timeCenter=109,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=125,e.levelRight=60,e.feedback=71;break;case 6:e.timeCenter=115,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=120,e.levelRight=64,e.feedback=73;break;case 7:e.timeCenter=93,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=120,e.levelRight=64,e.feedback=72;break;case 8:e.timeCenter=109,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=114,e.levelRight=60,e.feedback=61,e.sendLevelToReverb=36;break;case 9:e.timeCenter=110,e.timeRatioLeft=21,e.timeRatioRight=32,e.levelCenter=97,e.levelLeft=127,e.levelRight=67,e.feedback=40;break;default:c.warn(`Invalid delay macro: ${A}`);return}this.callEvent("effectChange",{effect:"delay",parameter:"macro",value:A})}getCachedVoice(A,e,t){return this.cachedVoices.get(this.getCachedVoiceIndex(A,e,t))}setCachedVoice(A,e,t,s){this.cachedVoices.set(this.getCachedVoiceIndex(A,e,t),s)}allocateNewVoices(A){for(let e=0;e<A;e++)this.voices.push(new Gn(this.sampleRate,this.maxBufferSize))}registerInsertionProcessor(A){let e=new A(this.sampleRate,this.maxBufferSize);this.insertionEffects.set(e.type,e)}processMessageInternal(A,e){let t=A[0],s,n=0;switch(t>=128&&t<240?(s=t&240,n=t&15):s=t,n+=e,s){case R.noteOn:{let a=A[2];a>0?this.noteOn(n,A[1],a):this.noteOff(n,A[1]);break}case R.noteOff:this.noteOff(n,A[1]);break;case R.pitchWheel:this.pitchWheel(n,A[2]<<7|A[1]);break;case R.controllerChange:this.controllerChange(n,A[1],A[2]);break;case R.programChange:this.programChange(n,A[1]);break;case R.polyPressure:this.polyPressure(n,A[1],A[2]);break;case R.channelPressure:this.channelPressure(n,A[1]);break;case R.systemExclusive:this.systemExclusive(new j(A.slice(1)),e);break;case R.reset:this.stopAllChannels(!1),this.reset();break;default:break}}assignVoicePriorities(){if(this.lastPriorityAssignmentTime===this.currentTime)return;c.info("%cPolyphony exceeded, stealing voices",E.warn),this.lastPriorityAssignmentTime=this.currentTime;let A=this.systemParameters.voiceCap;for(let e=0;e<A;e++){let t=this.voices[e];t.priority=0,this.midiChannels[t.channel].drumChannel&&(t.priority+=5),t.isInRelease&&(t.priority-=5),t.priority+=t.velocity/25,t.priority-=t.volEnv.state,t.isInRelease&&(t.priority-=5),t.priority-=t.volEnv.attenuationCb/200}}updatePresetList(){let A=this.soundBankManager.presetList;this.clearCache(),this.callEvent("presetListChange",A),this.getDefaultPresets();for(let e of this.midiChannels){let t=e.systemParameters.presetLock;e.setSystemParameter("presetLock",!1),e.programChange(e.patch.program),e.setSystemParameter("presetLock",t)}this.reset()}getDefaultPresets(){this.defaultPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!1},"xg"),this.drumPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!0},"gs")}getCachedVoiceIndex(A,e,t){let s=A.bankMSB,n=A.bankLSB,{isGMGSDrum:a,program:r}=A;return a&&(s=128,n=0),s+n*128+r*16384+2097152*e+268435456*t}},ua=class{processorInitialized=Vt.isSF3DecoderReady;sampleRate;onEventCall;process;processSplit;systemExclusive;controllerChange;noteOn;noteOff;polyPressure;channelPressure;pitchWheel;programChange;processMessage;synthCore;savedSnapshot;constructor(A,e={}){let t=pA(e,yn);if(this.sampleRate=A,!Number.isFinite(t.initialTime)||!Number.isFinite(A))throw new TypeError(`Initial time or sample rate is invalid! initial time: ${t.initialTime}, sample rate: ${A}`);this.synthCore=new Bi(this.callEvent.bind(this),this.missingPreset.bind(this),this.sampleRate,t);let s=this.synthCore;this.process=s.process.bind(s),this.processSplit=s.processSplit.bind(s),this.systemExclusive=s.systemExclusive.bind(s),this.controllerChange=s.controllerChange.bind(s),this.noteOn=s.noteOn.bind(s),this.noteOff=s.noteOff.bind(s),this.polyPressure=s.polyPressure.bind(s),this.channelPressure=s.channelPressure.bind(s),this.pitchWheel=s.pitchWheel.bind(s),this.programChange=s.programChange.bind(s),this.processMessage=s.processMessage.bind(s);for(let n=0;n<16;n++)this.synthCore.createMIDIChannel(!1);this.processorInitialized.then(()=>{c.info("%cSpessaSynth is ready!",E.recognized)})}get midiChannels(){return this.synthCore.midiChannels}get midiParameters(){return this.synthCore.midiParameters}get systemParameters(){return this.synthCore.systemParameters}get voiceCount(){return this.synthCore.voiceCount}get currentTime(){return this.synthCore.currentTime}get reverbProcessor(){return this.synthCore.reverbProcessor}get chorusProcessor(){return this.synthCore.chorusProcessor}get delayProcessor(){return this.synthCore.delayProcessor}get soundBankManager(){return this.synthCore.soundBankManager}get keyModifierManager(){return this.synthCore.keyModifierManager}onMissingPreset=(A,e)=>{c.warn(`No preset found for ${be.toMIDIString(A)}! Did you forget to add a sound bank?`)};lockMIDIParameter(A,e){this.synthCore.lockMIDIParameter(A,e)}setSystemParameter(A,e){this.synthCore.setSystemParameter(A,e)}reset(){this.synthCore.reset()}applySnapshot(A){this.savedSnapshot=A,wn.call(this.synthCore,A)}getSnapshot(){return Sn.call(this.synthCore)}setEmbeddedSoundBank(A,e){let t=yA.fromArrayBuffer(A);this.synthCore.soundBankManager.addSoundBank(t,MA,e);let s=this.synthCore.soundBankManager.priorityOrder;s.pop(),s.unshift(MA),this.synthCore.soundBankManager.priorityOrder=s,this.savedSnapshot!==void 0&&this.applySnapshot(this.savedSnapshot),c.info(`%cEmbedded sound bank set at offset %c${e}`,E.recognized,E.value)}clearEmbeddedSoundBank(){this.synthCore.soundBankManager.soundBankList.some(A=>A.id===MA)&&this.synthCore.soundBankManager.deleteSoundBank(MA)}createMIDIChannel(){this.synthCore.createMIDIChannel(!0)}stopAllChannels(A=!1){this.synthCore.stopAllChannels(A)}destroySynthProcessor(){this.synthCore.destroySynthProcessor()}clearCache(){this.synthCore.clearCache()}getVoicesForPreset(A,e,t){return this.synthCore.getVoicesForPreset(A,e,t)}callEvent(A,e){this.onEventCall?.({type:A,data:e})}missingPreset(A,e){return this.onMissingPreset(A,e)}};var et=Os.ConsoleColors;var ma="spessasynth-worklet-processor";function pa(A,e){return{...e,...A}}var Da={skipToFirstNoteOn:!0,initialPlaybackRate:1};var Zt=class extends _A{events=[];constructor(e){super(),super.copyFrom(e),this.events=[]}},At=class A extends $e{tracks;timeline=[];embeddedSoundBank=void 0;embeddedSoundBankSize;constructor(e){super(),super.copyMetadataFrom(e),this.tracks=e.tracks.map(t=>new Zt(t)),this.embeddedSoundBankSize=e instanceof A?e.embeddedSoundBankSize:e?.embeddedSoundBank?.byteLength}};var tt={shuffleOn:1,shuffleOff:2,index:3};var ya=-1;var ka=1,st=class{synthesizer;sequencers=new Array;post;lastSequencerSync=0;voiceCounts=new Array(16).fill(0);alive=!1;eventsEnabled;constructor(e,t,s){this.synthesizer=new ua(e,t),this.eventsEnabled=t.eventsEnabled??!1,this.post=s,this.synthesizer.onEventCall=n=>{if(n.type==="channelAdded"){let a=this.synthesizer.midiChannels.length;for(let r=this.voiceCounts.length;r<a;r++)this.voiceCounts.push(0)}this.post({type:"eventCall",data:n,currentTime:this.synthesizer.currentTime})}}createNewSequencer(){let e=new qs(this.synthesizer),t=this.sequencers.length;this.sequencers.push(e),e.onEventCall=s=>{if(this.eventsEnabled){if(s.type==="songListChange"){let a=s.data.newSongList.map(r=>new At(r));this.post({type:"sequencerReturn",data:{type:s.type,data:{newSongList:a,shuffledSongIndexes:e.shuffledSongIndexes},id:t},currentTime:this.synthesizer.currentTime});return}this.post({type:"sequencerReturn",data:{...s,id:t},currentTime:this.synthesizer.currentTime})}}}postReady(e,t,s=[]){this.post({type:"isFullyInitialized",data:{type:e,data:t},currentTime:this.synthesizer.currentTime},s)}postProgress(e,t){this.post({type:"renderingProgress",data:{type:e,data:t},currentTime:this.synthesizer.currentTime})}destroy(){this.synthesizer.destroySynthProcessor(),delete this.synthesizer,delete this.sequencers}handleMessage(e){let t=e.channelNumber,s;if(t>=0&&(s=this.synthesizer.midiChannels[t],s===void 0)){c.warn(`Trying to access channel ${t} which does not exist... ignoring!`);return}switch(e.type){case"midiMessage":{this.synthesizer.processMessage(e.data.messageData,e.data.channelOffset,e.data.options);break}case"ccReset":{this.synthesizer.reset();break}case"stopAll":{t===ya?this.synthesizer.stopAllChannels(e.data===1):s?.stopAllNotes(e.data===1);break}case"addNewChannel":{this.synthesizer.createMIDIChannel();break}case"lockGlobalMIDIParameter":{this.synthesizer.lockMIDIParameter(e.data.parameter,e.data.isLocked);break}case"setGlobalSystemParameter":{this.synthesizer.setSystemParameter(e.data.parameter,e.data.value);break}case"lockChannelMIDIParameter":{s?.lockMIDIParameter(e.data.parameter,e.data.isLocked);break}case"setChannelSystemParameter":{s?.setSystemParameter(e.data.parameter,e.data.value);break}case"setDrums":{s?.setDrums(e.data);break}case"lockController":{s?.lockController(e.data.controller,e.data.isLocked);break}case"sequencerSpecific":{let n=this.sequencers[e.data.id];if(!n)return;let a=e.data;switch(a.type){default:break;case"loadNewSongList":{try{let i=a.data.map(o=>"duration"in o?$e.copyFrom(o):$e.fromArrayBuffer(o.binary,o.fileName));n.loadNewSongList(i)}catch(r){console.error(r),this.post({type:"sequencerReturn",data:{type:"midiError",data:r,id:e.data.id},currentTime:this.synthesizer.currentTime})}break}case"pause":{n.pause();break}case"play":{n.play();break}case"setTime":{n.currentTime=a.data;break}case"changeMIDIMessageSending":{n.externalMIDIPlayback=a.data;break}case"setPlaybackRate":{n.playbackRate=a.data;break}case"setLoopCount":{n.loopCount=a.data;break}case"changeSong":{switch(a.data.changeType){case tt.shuffleOff:{n.shuffleMode=!1;break}case tt.shuffleOn:{n.shuffleMode=!0;break}case tt.index:{a.data.data!==void 0&&(n.songIndex=a.data.data);break}}break}case"getMIDI":{if(!n.midiData)throw new Error("No MIDI is loaded!");this.post({type:"sequencerReturn",data:{type:"getMIDI",data:n.midiData,id:e.data.id},currentTime:this.synthesizer.currentTime});break}case"setSkipToFirstNote":{n.skipToFirstNoteOn=a.data;break}}break}case"soundBankManager":{try{let n=this.synthesizer.soundBankManager,a=e.data,r;switch(a.type){case"addSoundBank":{r=yA.fromArrayBuffer(a.data.soundBankBuffer),n.addSoundBank(r,a.data.id,a.data.bankOffset),this.postReady("soundBankManager",null);break}case"deleteSoundBank":{n.deleteSoundBank(a.data),this.postReady("soundBankManager",null);break}case"rearrangeSoundBanks":n.priorityOrder=a.data,this.postReady("soundBankManager",null)}}catch(n){this.post({type:"soundBankError",data:n,currentTime:this.synthesizer.currentTime})}break}case"keyModifierManager":{let n=e.data,a=this.synthesizer.keyModifierManager;switch(n.type){default:return;case"addMapping":{a.addMapping(n.data.channel,n.data.midiNote,n.data.mapping);break}case"clearMappings":{a.clearMappings();break}case"deleteMapping":a.deleteMapping(n.data.channel,n.data.midiNote)}break}case"requestSynthesizerSnapshot":{let n=this.synthesizer.getSnapshot();this.postReady("synthesizerSnapshot",n);break}case"requestNewSequencer":{this.createNewSequencer();break}case"setLogLevel":{c.setLogLevel(e.data.enableInfo,e.data.enableWarning,e.data.enableGroup);break}case"destroyWorklet":{this.alive=!1,this.synthesizer.destroySynthProcessor(),this.destroy();break}default:{c.warn("Unrecognized event!",e);break}}}};var at=class extends st{alive=!0;oneOutputMode;port;constructor(e,t,s,n){super(e,{effectsEnabled:!n.oneOutput,eventsEnabled:n?.eventsEnabled,initialTime:t},(a,r)=>{s.postMessage(a,r)}),this.port=s,this.oneOutputMode=n.oneOutput,this.synthesizer.processorInitialized.then(()=>{this.port.onmessage=a=>this.handleMessage(a.data),this.postReady("sf3Decoder",null)})}process(e,t){if(!this.alive)return!1;for(let i of this.sequencers)i.processTick();if(this.oneOutputMode){let i=t[0],o=[];for(let g=0;g<32;g+=2)o.push([i[g],i[g+1]]);this.synthesizer.setSystemParameter("effectsEnabled",!1),this.synthesizer.processSplit(o,i[0],i[0])}else this.synthesizer.processSplit(t.slice(1),t[0][0],t[0][1]);let s=this.synthesizer.currentTime;if(this.eventsEnabled&&s-this.lastSequencerSync>ka){for(let i=0;i<this.sequencers.length;i++)this.post({type:"sequencerReturn",data:{type:"sync",data:this.sequencers[i].currentTime,id:i},currentTime:s});this.lastSequencerSync=s}let n=this.synthesizer.midiChannels,a=this.voiceCounts,r=!1;for(let i=0;i<n.length;i++)r||=n[i].voiceCount!==a[i],a[i]=n[i].voiceCount;return r&&this.post({type:"voiceCountChange",currentTime:s,data:a}),!0}handleMessage(e){if(e.type==="startOfflineRender"){this.startOfflineRender(e.data);return}super.handleMessage(e)}startOfflineRender(e){this.sequencers.length===0&&this.createNewSequencer();let t=this.sequencers[0];for(let[n,a]of e.soundBankList.entries())try{this.synthesizer.soundBankManager.addSoundBank(yA.fromArrayBuffer(a.soundBankBuffer),`bank-${n}`,a.bankOffset)}catch(r){this.post({type:"soundBankError",data:r,currentTime:this.synthesizer.currentTime})}e.snapshot!==void 0&&this.synthesizer.applySnapshot(e.snapshot),c.info("%cStarting to render the audio data!",et.info),t.loopCount=e.loopCount,this.synthesizer.setSystemParameter("autoAllocateVoices",!0);let s=pa(e.sequencerOptions,Da);t.skipToFirstNoteOn=s.skipToFirstNoteOn,t.playbackRate=s.initialPlaybackRate;try{t.loadNewSongList([$e.copyFrom(e.midiSequence)]),t.play()}catch(n){console.error(n),this.post({type:"sequencerReturn",data:{type:"midiError",data:n,id:0},currentTime:this.synthesizer.currentTime})}this.postReady("startOfflineRender",null)}};var Xt=class extends AudioWorkletProcessor{core;constructor(e){super(),this.core=new at(sampleRate,currentTime,this.port,e.processorOptions)}process(e,t){return this.core.process(e,t)}};registerProcessor(ma,Xt);c.info("%cProcessor successfully registered!",et.recognized);
|
|
18
18
|
//# sourceMappingURL=spessasynth_processor.min.js.map
|