spessasynth_lib 4.2.7 → 4.2.9
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,21 +1,21 @@
|
|
|
1
|
-
var YA=(A=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(A,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):A)(function(A){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+A+'" is not supported')});var Di=(A=>typeof YA<"u"?YA:typeof Proxy<"u"?new Proxy(A,{get:(e,t)=>(typeof YA<"u"?YA:e)[t]}):A)(function(A){if(typeof YA<"u")return YA.apply(this,arguments);throw Error('Dynamic require of "'+A+'" is not supported')});function ot(A,e,t=0){let s=0;for(let n=0;n<e;n++)s=s<<8|A[t+n];return s>>>0}function nt(A,e){let t=ot(A,e,A.currentIndex);return A.currentIndex+=e,t}function Ht(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 K(A,e){let t=pa(A,e,A.currentIndex);return A.currentIndex+=e,t}function pa(A,e,t=0){let s=0;for(let n=0;n<e;n++)s|=A[t+n]<<n*8;return s>>>0}function Dt(A,e,t){for(let s=0;s<t;s++)A[A.currentIndex++]=e>>s*8&255}function te(A,e){A[A.currentIndex++]=e&255,A[A.currentIndex++]=e>>8}function Be(A,e){Dt(A,e,4)}function En(A,e){let t=e<<8|A;return t>32767?t-65536:t}function wi(A){return A>127?A-256:A}var $=class extends Uint8Array{currentIndex=0;slice(A,e){let t=super.slice(A,e);return t.currentIndex=0,t}};function gA(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 ye(A,e){let t=A.currentIndex;return A.currentIndex+=e,gA(A,e,t)}function QA(A,e=!1,t=!1){let s=A.length;e&&s++,t&&s%2!==0&&s++;let n=new $(s);return Te(n,A),n}function Te(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 De(A){let e=0;for(;A;){let t=A[A.currentIndex++];if(e=e<<7|t&127,t>>7!==1)break}return e}function Ms(A){let e=[A&127];for(A>>=7;A>0;)e.unshift(A&127|128),A>>=7;return e}function Ws(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 os(A){let e="";for(let t of A){let s=t.toString(16).padStart(2,"0").toUpperCase();e+=s,e+=" "}return e}var C={warn:"color: orange;",unrecognized:"color: red;",info:"color: aqua;",recognized:"color: lime",value:"color: yellow; background-color: black;"},ya;(()=>{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(k,v){for(var Y=new e(31),ee=0;ee<31;++ee)Y[ee]=v+=1<<k[ee-1];for(var ie=new t(Y[30]),ee=1;ee<30;++ee)for(var Qe=Y[ee];Qe<Y[ee+1];++Qe)ie[Qe]=Qe-Y[ee]<<5|ee;return{b:Y,r:ie}},i=r(s,2),o=i.b,h=i.r;o[28]=258,h[258]=28;var I=r(n,0),c=I.b,l=I.r,E=new e(32768);for(F=0;F<32768;++F)d=(F&43690)>>1|(F&21845)<<1,d=(d&52428)>>2|(d&13107)<<2,d=(d&61680)>>4|(d&3855)<<4,E[F]=((d&65280)>>8|(d&255)<<8)>>1;var d,F,p=function(k,v,Y){for(var ee=k.length,ie=0,Qe=new e(v);ie<ee;++ie)k[ie]&&++Qe[k[ie]-1];var Ie=new e(v);for(ie=1;ie<v;++ie)Ie[ie]=Ie[ie-1]+Qe[ie-1]<<1;var Ee;if(Y){Ee=new e(1<<v);var re=15-v;for(ie=0;ie<ee;++ie)if(k[ie])for(var ce=ie<<4|k[ie],pe=v-k[ie],W=Ie[k[ie]-1]++<<pe,oe=W|(1<<pe)-1;W<=oe;++W)Ee[E[W]>>re]=ce}else for(Ee=new e(ee),ie=0;ie<ee;++ie)k[ie]&&(Ee[ie]=E[Ie[k[ie]-1]++]>>15-k[ie]);return Ee},w=new A(288);for(F=0;F<144;++F)w[F]=8;var F;for(F=144;F<256;++F)w[F]=9;var F;for(F=256;F<280;++F)w[F]=7;var F;for(F=280;F<288;++F)w[F]=8;var F,L=new A(32);for(F=0;F<32;++F)L[F]=5;var F,b=p(w,9,1),S=p(L,5,1),H=function(k){for(var v=k[0],Y=1;Y<k.length;++Y)k[Y]>v&&(v=k[Y]);return v},B=function(k,v,Y){var ee=v/8|0;return(k[ee]|k[ee+1]<<8)>>(v&7)&Y},x=function(k,v){var Y=v/8|0;return(k[Y]|k[Y+1]<<8|k[Y+2]<<16)>>(v&7)},q=function(k){return(k+7)/8|0},O=function(k,v,Y){return(v==null||v<0)&&(v=0),(Y==null||Y>k.length)&&(Y=k.length),new A(k.subarray(v,Y))},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"],P=function(k,v,Y){var ee=new Error(v||M[k]);if(ee.code=k,Error.captureStackTrace&&Error.captureStackTrace(ee,P),!Y)throw ee;return ee},J=function(k,v,Y,ee){var ie=k.length,Qe=ee?ee.length:0;if(!ie||v.f&&!v.l)return Y||new A(0);var Ie=!Y,Ee=Ie||v.i!=2,re=v.i;Ie&&(Y=new A(ie*3));var ce=function(Nt){var GA=Y.length;if(Nt>GA){var Bt=new A(Math.max(GA*2,Nt));Bt.set(Y),Y=Bt}},pe=v.f||0,W=v.p||0,oe=v.b||0,Ge=v.l,le=v.d,Ue=v.m,Je=v.n,UA=ie*8;do{if(!Ge){pe=B(k,W,1);var fA=B(k,W+1,3);if(W+=3,fA)if(fA==1)Ge=b,le=S,Ue=9,Je=5;else if(fA==2){var It=B(k,W,31)+257,us=B(k,W+10,15)+4,ms=It+B(k,W+5,31)+1;W+=14;for(var ZA=new A(ms),FA=new A(19),je=0;je<us;++je)FA[a[je]]=B(k,W+je*3,7);W+=us*3;for(var ps=H(FA),Ft=(1<<ps)-1,WA=p(FA,ps,1),je=0;je<ms;){var ct=WA[B(k,W,Ft)];W+=ct&15;var Ke=ct>>4;if(Ke<16)ZA[je++]=Ke;else{var uA=0,lt=0;for(Ke==16?(lt=3+B(k,W,3),W+=2,uA=ZA[je-1]):Ke==17?(lt=3+B(k,W,7),W+=3):Ke==18&&(lt=11+B(k,W,127),W+=7);lt--;)ZA[je++]=uA}}var ys=ZA.subarray(0,It),mA=ZA.subarray(It);Ue=H(ys),Je=H(mA),Ge=p(ys,Ue,1),le=p(mA,Je,1)}else P(1);else{var Ke=q(W)+4,Gt=k[Ke-4]|k[Ke-3]<<8,Mt=Ke+Gt;if(Mt>ie){re&&P(0);break}Ee&&ce(oe+Gt),Y.set(k.subarray(Ke,Mt),oe),v.b=oe+=Gt,v.p=W=Mt*8,v.f=pe;continue}if(W>UA){re&&P(0);break}}Ee&&ce(oe+131072);for(var Tn=(1<<Ue)-1,Un=(1<<Je)-1,Lt=W;;Lt=W){var uA=Ge[x(k,W)&Tn],PA=uA>>4;if(W+=uA&15,W>UA){re&&P(0);break}if(uA||P(2),PA<256)Y[oe++]=PA;else if(PA==256){Lt=W,Ge=null;break}else{var Ss=PA-254;if(PA>264){var je=PA-257,pA=s[je];Ss=B(k,W,(1<<pA)-1)+o[je],W+=pA}var zA=le[x(k,W)&Un],xA=zA>>4;zA||P(3),W+=zA&15;var mA=c[xA];if(xA>3){var pA=n[xA];mA+=x(k,W)&(1<<pA)-1,W+=pA}if(W>UA){re&&P(0);break}Ee&&ce(oe+131072);var Ct=oe+Ss;if(oe<mA){var _A=Qe-mA,Le=Math.min(mA,Ct);for(_A+oe<0&&P(3);oe<Le;++oe)Y[oe]=ee[_A+oe]}for(;oe<Ct;++oe)Y[oe]=Y[oe-mA]}}v.l=Ge,v.p=Lt,v.b=oe,v.f=pe,Ge&&(pe=1,v.m=Ue,v.d=le,v.n=Je)}while(!pe);return oe!=Y.length&&Ie?O(Y,0,oe):Y.subarray(0,oe)},y=new A(0);function U(k,v){return J(k,{i:2},v&&v.out,v&&v.dictionary)}var _=typeof TextDecoder<"u"&&new TextDecoder,G=0;try{_.decode(y,{stream:!0}),G=1}catch{}ya=U})();var Sa=ya,ka=!1,Da=!0,hs=!1;function wa(A,e,t){ka=A,Da=e,hs=t}function D(...A){ka&&console.info(...A)}function ne(...A){Da&&console.warn(...A)}function AA(...A){hs&&console.group(...A)}function Xe(...A){hs&&console.groupCollapsed(...A)}function j(){hs&&console.groupEnd()}var ba=class{header;size;data;constructor(A,e,t){this.header=A,this.size=e,this.data=t}};function ge(A,e=!0,t=!1){let s=ye(A,4),n=K(A,4);s===""&&(n=0);let a=e?A.slice(A.currentIndex,A.currentIndex+n):new $(0);return(e||t)&&(A.currentIndex+=n,n%2!==0&&A.currentIndex++),new ba(s,n,a)}function de(A,e,t=!1,s=!1){if(A.length!==4)throw new Error(`Invalid header length: ${A}`);let n=8,a=A,r=e.length;t&&r++;let i=r;s&&(n+=4,i+=4,a="LIST");let o=n+r;o%2!==0&&o++;let h=new $(o);return Te(h,a),Be(h,i),s&&Te(h,A),h.set(e,n),h}function Ze(A,e,t=!1){let s=8,n=A,a=e.reduce((h,I)=>I.length+h,0),r=a;t&&(s+=4,r+=4,n="LIST");let i=s+a;i%2!==0&&i++;let o=new $(i);Te(o,n),Be(o,r),t&&Te(o,A);for(let h of e)o.set(h,s),s+=h.length;return o}function NA(A,e){return A.find(t=>t.header!=="LIST"?!1:(t.data.currentIndex=4,gA(t.data,4)===e))}function dn(A,e){return{...e,...A}}var RA={consoleColors:C,SpessaSynthInfo:D,SpessaSynthWarn:ne,SpessaSynthGroupCollapsed:Xe,SpessaSynthGroup:AA,SpessaSynthGroupEnd:j,readBytesAsUintBigEndian:ot,readLittleEndian:K,readBytesAsString:ye,readVariableLengthQuantity:De,inflateSync:Sa};var T={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},u={bankSelect:0,modulationWheel:1,breathController:2,undefinedCC3:3,footController:4,portamentoTime:5,dataEntryMSB:6,mainVolume:7,balance:8,undefinedCC9:9,pan:10,expressionController: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,expressionControllerLSB: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},cA=class{ticks;statusByte;data;constructor(A,e,t){this.ticks=A,this.statusByte=e,this.data=t}};function bi(A){let e=A&240,t=A&15,s=t;switch(e){case 128:case 144:case 160:case 176:case 192:case 208:case 224:break;case 240:{switch(t){case 0:{s=-3;break}case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:{s=-1;break}case 15:{s=-2;break}}break}default:s=-1}return s}function Qn(A){let e=A&240,t=A&15,s=-1,n=A;return e>=128&&e<=224&&(s=t,n=e),{status:n,channel:s}}var vi={8:2,9:2,10:2,11:2,12:1,13:1,14:2},Vn=(A,e)=>{for(let t=0;t<A.length;t++)e.push(A.charCodeAt(t))};function Ri(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===T.endOfTrack){a+=o;continue}let h;i.statusByte<=T.sequenceSpecific?(h=[255,i.statusByte,...Ms(i.data.length),...i.data],r=void 0):i.statusByte===T.systemExclusive?(h=[240,...Ms(i.data.length),...i.data],r=void 0):(h=[],r!==i.statusByte&&(r=i.statusByte,h.push(i.statusByte)),h.push(...i.data)),n.push(...Ms(o),...h),a+=o}n.push(0,255,T.endOfTrack,0),e.push(new Uint8Array(n))}let t=[];Vn("MThd",t),t.push(...Ht(6,4),0,A.format,...Ht(A.tracks.length,2),...Ht(A.timeDivision,2));for(let s of e)Vn("MTrk",t),t.push(...Ht(s.length,4),...s);return new Uint8Array(t).buffer}var Fi=350,vA=9,va=16,fn="gs",ht=-1,Ot=`SPESSASYNTH_EMBEDDED_BANK_${Math.random()}_DO_NOT_DELETE`,Ra=32767,Gi={time:0},Mi=.03,Li=.07,Ni=1,Ti=128,Wt=1/Math.cos(Math.PI/4)**2,Ui=64,Xn=121,Re=class{static getDefaultBank(A){return A==="gm2"?Xn: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 isXGDrums(A){return A===120||A===127}static isValidXGMSB(A){return this.isXGDrums(A)||A===Ui||A===Xn}static isSystemXG(A){return A==="gm2"||A==="xg"}static addBankOffset(A,e,t=!0){return this.isXGDrums(A)&&t?A:Math.min(A+e,127)}static subtrackBankOffset(A,e,t=!0){return this.isXGDrums(A)&&t?A:Math.max(0,A-e)}};function un(A){return A.data[0]===67&&A.data[2]===76&&A.data[5]===126&&A.data[6]===0}function Fa(A){return A.data[0]===65&&A.data[2]===66&&A.data[3]===18&&A.data[4]===64&&(A.data[5]&16)!==0&&A.data[6]===21}function mn(A){return A.data[0]===65&&A.data[2]===66&&A.data[5]===0&&A.data[6]===127}function pn(A){return A.data[0]===126&&A.data[2]===9&&A.data[3]===1}function yn(A){return A.data[0]===126&&A.data[2]===9&&A.data[3]===3}function Pi(A){return A[0]===65&&A[2]===66&&A[3]===18&&A[4]===65||A[0]===67&&A[2]===76&&A[3]>>4===3}function xi(A){return A[0]===67&&A[2]===76&&A[3]===8&&(A[5]===3||A[5]===1||A[5]===2)?A[4]:A[0]===65&&A[2]===66&&A[3]===18&&A[4]===64&&(A[5]&240)===16&&A[6]===0?at(A[5]&15):-1}function Hi(A){return A[0]===65&&A[2]===66&&A[3]===18&&A[4]===64&&A[5]===1&&A[6]>=48&&A[6]<=55}function Oi(A){return A[0]===65&&A[2]===66&&A[3]===18&&A[4]===64&&A[5]===1&&A[6]>=56&&A[6]<=64}function Yi(A){return A[0]===65&&A[2]===66&&A[3]===18&&A[4]===64&&A[5]===1&&A[6]>=80&&A[6]<=90}function qi(A){return A[0]===65&&A[2]===66&&A[3]===18&&A[4]===64&&(A[5]===3||A[5]>>4===4&&A[6]===34)}function at(A){return[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][A%16]}function Sn(A){return[1,2,3,4,5,6,7,8,9,0,10,11,12,13,14,15][A%16]}function Ga(A){return new cA(A,T.systemExclusive,new $([65,16,66,18,64,0,127,0,65,247]))}var lA=class Ma{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:");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 toNamedMIDIString(e){return`${Ma.toMIDIString(e)} ${e.name}`}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 fromNamedMIDIString(e){let t=e.indexOf(" ");if(t===-1)throw new Error(`Invalid named MIDI string: ${e}`);let s=this.fromMIDIString(e.slice(0,Math.max(0,t))),n=e.slice(Math.max(0,t+1));return{...s,name:n}}static sorter(e,t){return e.program!==t.program?e.program-t.program:e.isGMGSDrum&&!t.isGMGSDrum?1:!e.isGMGSDrum&&t.isGMGSDrum?-1:e.bankMSB!==t.bankMSB?e.bankMSB-t.bankMSB:e.bankLSB-t.bankLSB}},Ji="Created using SpessaSynth";function Ki(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,drums:o%16===vA,lastBank:void 0,lastBankLSB:void 0,hasBankSelect:!1});A.iterate((o,h)=>{let I=A.portChannelOffsetMap[a[h]];if(o.statusByte===T.midiPort){a[h]=o.data[0];return}let c=o.statusByte&240;if(c!==T.controllerChange&&c!==T.programChange&&c!==T.systemExclusive)return;if(c===T.systemExclusive){if(!Fa(o)){un(o)?s="xg":mn(o)?s="gs":pn(o)?(s="gm",n.push({tNum:h,e:o})):yn(o)&&(s="gm2");return}let p=at(o.data[5]&15)+I;i[p].drums=!!(o.data[7]>0&&o.data[5]>>4);return}let l=(o.statusByte&15)+I,E=i[l];if(c===T.programChange){let w={program:o.data[0],bankLSB:E.lastBankLSB?.data?.[1]??0,bankMSB:Re.subtrackBankOffset(E.lastBank?.data?.[1]??0,A.bankOffset),isGMGSDrum:E.drums},L=t.getPreset(w,s);if(D(`%cInput patch: %c${lA.toMIDIString(w)}%c. Channel %c${l}%c. Changing patch to ${L.toString()}.`,C.info,C.unrecognized,C.info,C.recognized,C.info),o.data[0]=L.program,L.isGMGSDrum&&Re.isSystemXG(s)||E.lastBank===void 0||(E.lastBank.data[1]=Re.addBankOffset(L.bankMSB,e,L.isXGDrums),E.lastBankLSB===void 0))return;E.lastBankLSB.data[1]=L.bankLSB;return}let d=o.data[0]===u.bankSelectLSB;o.data[0]!==u.bankSelect&&!d||(E.hasBankSelect=!0,d?E.lastBankLSB=o:E.lastBank=o)});for(let[o,h]of i.entries()){if(h.hasBankSelect)continue;let I=o%16,c=T.programChange|I,l=Math.floor(o/16)*16,E=A.portChannelOffsetMap.indexOf(l),d=A.tracks.find(b=>b.port===E&&b.channels.has(I));if(d===void 0)continue;let p=d.events.findIndex(b=>b.statusByte===c);if(p===-1){let b=d.events.findIndex(B=>B.statusByte>128&&B.statusByte<240&&(B.statusByte&15)===I);if(b===-1)continue;let S=d.events[b].ticks,H=t.getPreset({bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1},s).program;d.addEvents(b,new cA(S,T.programChange|I,new $([H]))),p=b}D(`%cAdding bank select for %c${o}`,C.info,C.recognized);let w=d.events[p].ticks,L=t.getPreset({bankLSB:0,bankMSB:0,program:h.program,isGMGSDrum:h.drums},s),F=Re.addBankOffset(L.bankMSB,e,L.isXGDrums);d.addEvents(p,new cA(w,T.controllerChange|I,new $([u.bankSelect,F])))}if(s==="gm"&&!Re.isSystemXG(s)){for(let h of n){let I=A.tracks[h.tNum];I.deleteEvent(I.events.indexOf(h.e))}let o=0;A.tracks[0].events[0].statusByte===T.trackName&&o++,A.tracks[0].addEvents(o,Ga(0))}}var Zn={bankOffset:0,metadata:{},correctBankOffset:!0,soundBank:void 0};function Vi(A,e,t){let s=t.metadata;if(AA("%cWriting the RMIDI File...",C.info),D("metadata",s),D("Initial bank offset",A.bankOffset),t.correctBankOffset){if(!t.soundBank)throw new Error("Sound bank must be provided if correcting bank offset.");Ki(A,t.bankOffset,t.soundBank)}let n=new $(A.writeMIDI());s.name??=A.getName(),s.creationDate??=new Date,s.copyright??=Ji,s.software??="SpessaSynth",Object.entries(s).forEach(o=>{let h=o;h[1]&&A.setRMIDInfo(h[0],h[1])});let a=[],r=(o,h)=>{a.push(de(o,h))};for(let o of Object.entries(A.rmidiInfo)){let h=o[0],I=o[1];switch(h){case"album":{r("IALB",I),r("IPRD",I);break}case"software":{r("ISFT",I);break}case"infoEncoding":{r("IENC",I);break}case"creationDate":{r("ICRD",I);break}case"picture":{r("IPIC",I);break}case"name":{r("INAM",I);break}case"artist":{r("IART",I);break}case"genre":{r("IGNR",I);break}case"copyright":{r("ICOP",I);break}case"comment":{r("ICMT",I);break}case"engineer":{r("IENG",I);break}case"subject":{r("ISBJ",I);break}case"midiEncoding":{r("MENC",I);break}}}let i=new $(2);return Dt(i,t.bankOffset,2),a.push(de("DBNK",i)),D("%cFinished!",C.info),j(),Ze("RIFF",[QA("RMID"),de("data",n),Ze("INFO",a,!0),new $(e)]).buffer}function Xi(A,e){Xe("%cSearching for all used programs and keys...",C.info);let t=16+Math.max(...A.portChannelOffsetMap),s=[],n="gs";for(let i=0;i<t;i++){let o=i%16===vA;s.push({preset:e.getPreset({bankLSB:0,bankMSB:0,isGMGSDrum:o,program:0},n),bankMSB:0,bankLSB:0,isDrum:o})}let a=new Map,r=A.tracks.map(i=>i.port);A.iterate((i,o)=>{if(i.statusByte===T.midiPort){r[o]=i.data[0];return}let h=i.statusByte&240;if(h!==T.noteOn&&h!==T.controllerChange&&h!==T.programChange&&h!==T.systemExclusive)return;let I=(i.statusByte&15)+A.portChannelOffsetMap[r[o]]||0,c=s[I];switch(h){case T.programChange:{c.preset=e.getPreset({bankMSB:c.bankMSB,bankLSB:c.bankLSB,program:i.data[0],isGMGSDrum:c.isDrum},n);break}case T.controllerChange:{switch(i.data[0]){default:return;case u.bankSelectLSB:{c.bankLSB=i.data[1];break}case u.bankSelect:c.bankMSB=i.data[1]}break}case T.noteOn:{if(i.data[1]===0||!c.preset)return;let l=a.get(c.preset);l||(l=new Set,a.set(c.preset,l)),l.add(`${i.data[0]}-${i.data[1]}`);break}case T.systemExclusive:{{if(!Fa(i)){un(i)?(n="xg",D("%cXG on detected!",C.recognized)):yn(i)?(n="gm2",D("%cGM2 on detected!",C.recognized)):pn(i)?(n="gm",D("%cGM on detected!",C.recognized)):mn(i)&&(n="gs",D("%cGS on detected!",C.recognized));return}let l=at(i.data[5]&15)+A.portChannelOffsetMap[r[o]],E=!!(i.data[7]>0&&i.data[5]>>4);c=s[l],c.isDrum=E}break}}});for(let[i,o]of a.entries())o.size===0&&(D(`%cDetected change but no keys for %c${i.name}`,C.info,C.value),a.delete(i));return j(),a}var Zi=A=>(A.data=new $(A.data.buffer),6e7/ot(A.data,3));function Wi(A,e=0){let t=[],n=A.tracks.map(c=>c.events).flat();n.sort((c,l)=>c.ticks-l.ticks);for(let c=0;c<16;c++)t.push([]);let a=0,r=60/(120*A.timeDivision),i=0,o=0,h=[];for(let c=0;c<16;c++)h.push([]);let I=(c,l)=>{let E=h[l].findIndex(p=>p.midiNote===c),d=h[l][E];if(d){let p=a-d.start;d.length=p,l===vA&&(d.length=Math.max(p,e)),h[l].splice(E,1)}o--};for(;i<n.length;){let c=n[i],l=c.statusByte>>4,E=c.statusByte&15;if(l===8)I(c.data[0],E);else if(l===9)if(c.data[1]===0)I(c.data[0],E);else{I(c.data[0],E);let d={midiNote:c.data[0],start:a,length:-1,velocity:c.data[1]/127};t[E].push(d),h[E].push(d),o++}else c.statusByte===81&&(r=60/(Zi(c)*A.timeDivision));if(++i>=n.length)break;a+=r*(n[i].ticks-c.ticks)}if(o>0)for(let[c,l]of h.entries())for(let E of l){let d=a-E.start;E.length=d,c===vA&&(E.length=Math.max(d,e))}return t}var zi={linear:0,nearestNeighbor:1,hermite:2},_e={Idle:0,RPCoarse:1,RPFine:2,NRPCoarse:3,NRPFine:4,DataCoarse:5,DataFine:6},Ce={channelTuning:0,channelTransposeFine:1,modulationMultiplier:2,masterTuning:3,channelTuningSemitones:4,channelKeyShift:5,sf2NPRNGeneratorLSB:6},_i={character:49,preLowpass:50,level:51,time:52,delayFeedback:53,preDelayTime:55},$i={preLowpass:57,level:58,feedback:59,delay:60,rate:61,depth:62,sendLevelToReverb:63,sendLevelToDelay:64},ji={preLowpass:81,timeCenter:82,timeRatioLeft:83,timeRatioRight:84,levelCenter:85,levelLeft:86,levelRight:87,level:88,feedback:89,sendLevelToReverb:90};function et(A,e,t,s){return new cA(s,T.controllerChange|A%16,new $([e,t]))}function ue(A,e,t,s,n){let r=128-(e+t+s+n.reduce((i,o)=>i+o,0))%128&127;return new cA(A,T.systemExclusive,new Uint8Array([65,16,66,18,e,t,s,...n,r,247]))}function er(A,e){let t=16|Sn(A);return ue(e,40,t,21,[1])}function Ar(A,{programChanges:e=[],controllerChanges:t=[],channelsToClear:s=[],channelsToTranspose:n=[],clearDrumParams:a=!1,reverbParams:r,chorusParams:i,delayParams:o,insertionParams:h}){Xe("%cApplying changes to the MIDI file...",C.info),D("Desired program changes:",e),D("Desired CC changes:",t),D("Desired channels to clear:",s),D("Desired channels to transpose:",n),D("Desired reverb parameters",r),D("Desired chorus parameters",i),D("Desired delay parameters",o),D("Desired insertion parameters",h);let I=new Set;for(let y of e)I.add(y.channel);let c="gs",l=!1,E=A.tracks.map(y=>y.port),d={},p=0,w=(y,U)=>{A.tracks[y].channels.size!==0&&(p===0&&(p+=16,d[U]=0),d[U]===void 0&&(d[U]=p,p+=16),E[y]=U)};for(let[y,U]of A.tracks.entries())w(y,U.port);let L=p,F=new Array(L).fill(!0),b=new Array(L).fill(0),S=new Array(L).fill(0);for(let y of n){let U=Math.trunc(y.keyShift),_=y.keyShift-U;b[y.channel]=U,S[y.channel]=_}let H=-1,B=0,x=-1,q=0,O=!1;A.iterate((y,U,_)=>{let G=A.tracks[U],k=_[U],v=()=>{G.deleteEvent(k),_[U]--},Y=(Ee,re=0)=>{G.addEvents(k+re,Ee),_[U]++},ee=d[E[U]]||0;if(y.statusByte===T.midiPort){w(U,y.data[0]);return}if(y.statusByte<=T.sequenceSpecific&&y.statusByte>=T.sequenceNumber)return;let ie=y.statusByte&240,Qe=y.statusByte&15,Ie=Qe+ee;if(y.statusByte!==T.systemExclusive&&s.includes(Ie)){v();return}switch(ie){case T.noteOn:{if(F[Ie]){F[Ie]=!1;for(let re of t.filter(ce=>ce.channel===Ie)){let ce=et(Qe,re.controllerNumber,re.controllerValue,y.ticks);Y(ce)}let Ee=S[Ie];if(Ee!==0){let re=Ee*64+64,ce=et(Qe,u.registeredParameterMSB,0,y.ticks),pe=et(Qe,u.registeredParameterLSB,1,y.ticks),W=et(Ie,u.dataEntryMSB,re,y.ticks),oe=et(Qe,u.dataEntryLSB,0,y.ticks);Y(oe),Y(W),Y(pe),Y(ce)}if(I.has(Ie)){let re=e.find(le=>le.channel===Ie);if(!re)return;D(`%cSetting %c${re.channel}%c to %c${lA.toMIDIString(re)}%c. Track num: %c${U}`,C.info,C.recognized,C.info,C.recognized,C.info,C.recognized);let ce=re.bankMSB,pe=re.bankLSB,W=re.program,oe=new cA(y.ticks,T.programChange|Qe,new $([W]));Y(oe);let Ge=(le,Ue)=>{let Je=et(Qe,le?u.bankSelectLSB:u.bankSelect,Ue,y.ticks);Y(Je)};Re.isSystemXG(c)&&re.isGMGSDrum&&(D(`%cAdding XG Drum change on track %c${U}`,C.recognized,C.value),ce=Re.getDrumBank(c),pe=0),Ge(!1,ce),Ge(!0,pe),re.isGMGSDrum&&!Re.isSystemXG(c)&&Qe!==vA&&(D(`%cAdding GS Drum change on track %c${U}`,C.recognized,C.value),Y(er(Qe,y.ticks)))}}y.data[0]+=b[Ie];break}case T.noteOff:{y.data[0]+=b[Ie];break}case T.programChange:{if(I.has(Ie)){v();return}break}case T.controllerChange:{let Ee=y.data[0];if(t.find(ce=>ce.channel===Ie&&Ee===ce.controllerNumber)!==void 0){v();return}switch(Ee){case u.bankSelect:case u.bankSelectLSB:{I.has(Ie)&&v();return}case u.registeredParameterLSB:case u.registeredParameterMSB:{O=!1;return}case u.nonRegisteredParameterMSB:{H=_[U],B=U,O=!0;return}case u.nonRegisteredParameterLSB:{x=_[U],q=U,O=!0;return}case u.dataEntryMSB:{if(x&&H&&O&&a){let ce=A.tracks[B].events[H].data[1];if(ce>=24&&ce<=31){v();let pe=A.tracks[q],W=A.tracks[B];pe.deleteEvent(x),_[q]--,W.deleteEvent(H),_[B]--}}return}default:return}}case T.systemExclusive:{if(un(y)){D("%cXG system on detected",C.info),c="xg",l=!0;return}if(yn(y)){D("%cGM2 system on detected",C.info),c="gm2",l=!0;return}if(mn(y)){l=!0,D("%cGS on detected!",C.recognized);return}if(pn(y)){D("%cGM on detected, removing!",C.info),v(),l=!1;return}if(a&&Pi(y.data)){v();return}if(r&&Hi(y.data)){v();return}if(i&&Oi(y.data)){v();return}if(o&&Yi(y.data)){v();return}if(h&&qi(y.data)){v();return}let Ee=xi(y.data);if(Ee!==-1){I.has(Ee+ee)&&v();return}}}});let M=Math.max(0,A.firstNoteOn-10),P=A.tracks[0],J=Math.max(0,P.events.findIndex(y=>y.ticks>=M)-1);if(r){let y=_i,U=r;P.addEvents(J,ue(M,64,1,y.level,[U.level]),ue(M,64,1,y.preLowpass,[U.preLowpass]),ue(M,64,1,y.character,[U.character]),ue(M,64,1,y.time,[U.time]),ue(M,64,1,y.delayFeedback,[U.delayFeedback]),ue(M,64,1,y.preDelayTime,[U.preDelayTime]))}if(i){let y=$i,U=i;P.addEvents(J,ue(M,64,1,y.level,[U.level]),ue(M,64,1,y.preLowpass,[U.preLowpass]),ue(M,64,1,y.feedback,[U.feedback]),ue(M,64,1,y.delay,[U.delay]),ue(M,64,1,y.rate,[U.rate]),ue(M,64,1,y.depth,[U.depth]),ue(M,64,1,y.sendLevelToReverb,[U.sendLevelToReverb]),ue(M,64,1,y.sendLevelToDelay,[U.sendLevelToDelay]))}if(o){let y=ji,U=o;P.addEvents(J,ue(M,64,1,y.level,[U.level]),ue(M,64,1,y.preLowpass,[U.preLowpass]),ue(M,64,1,y.timeCenter,[U.timeCenter]),ue(M,64,1,y.timeRatioLeft,[U.timeRatioLeft]),ue(M,64,1,y.timeRatioRight,[U.timeRatioRight]),ue(M,64,1,y.levelCenter,[U.levelCenter]),ue(M,64,1,y.levelLeft,[U.levelLeft]),ue(M,64,1,y.levelRight,[U.levelRight]),ue(M,64,1,y.feedback,[U.feedback]),ue(M,64,1,y.sendLevelToReverb,[U.sendLevelToReverb]))}if(h){let y=h;for(let U=0;U<y.channels.length;U++)y.channels[U]&&P.addEvents(M,ue(M,64,64|Sn(U),34,[1]));for(let U=0;U<y.params.length;U++){let _=y.params[U];_!==255&&P.addEvents(J,ue(M,64,3,U+3,[_]))}P.addEvents(J,ue(M,64,3,0,[y.type>>8,y.type&127]))}if(!l&&e.length>0){let y=0;A.tracks[0].events[0].statusByte===T.trackName&&y++,A.tracks[0].addEvents(y,Ga(0)),D("%cGS on not detected. Adding it.",C.info)}A.flush(),j()}function tr(A,e){let t=[],s=[],n=[],a=[];for(let[r,i]of e.channelSnapshots.entries()){if(i.isMuted){s.push(r);continue}let o=i.keyShift+i.customControllers[Ce.channelTransposeFine]/100;o!==0&&t.push({channel:r,keyShift:o}),i.lockPreset&&n.push({channel:r,...i.patch});for(let[h,I]of i.lockedControllers.entries()){if(!I||h>127||h===u.bankSelect)continue;let c=i.midiControllers[h]>>7;a.push({channel:r,controllerNumber:h,controllerValue:c})}}A.modify({programChanges:n,controllerChanges:a,channelsToClear:s,channelsToTranspose:t,clearDrumParams:e.masterParameters.drumLock,reverbParams:e.masterParameters.reverbLock?e.reverbSnapshot:void 0,chorusParams:e.masterParameters.chorusLock?e.chorusSnapshot:void 0,delayParams:e.masterParameters.delayLock?e.delaySnapshot:void 0,insertionParams:e.masterParameters.insertionEffectLock?e.insertionSnapshot:void 0})}var Ls={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},At={inLineResource:1,inFileResource:2,inFileNode:3,externalFile:4,externalXMF:5,XMFFileURIandNodeID:6},Ns={StandardMIDIFile:0,StandardMIDIFileType1:1,DLS1:2,DLS2:3,DLS22:4,mobileDLS:5,unknown:-1,folder:-2},sr={standard:0,MMA:1,registered:2,nonRegistered:3},Yt={none:0,MMAUnpacker:1,registered:2,nonRegistered:3},nr=class La{length;itemCount;metadataLength;metadata={};nodeData;innerNodes=[];packedContent=!1;nodeUnpackers=[];resourceFormat="unknown";referenceTypeID;constructor(e){let t=e.currentIndex;this.length=De(e),this.itemCount=De(e);let s=De(e),n=e.currentIndex-t,a=s-n,r=e.slice(e.currentIndex,e.currentIndex+a);e.currentIndex+=a,this.metadataLength=De(r);let i=r.slice(r.currentIndex,r.currentIndex+this.metadataLength);r.currentIndex+=this.metadataLength;let o,h;for(;i.currentIndex<i.length;){if(i[i.currentIndex]===0)i.currentIndex++,o=De(i),Object.values(Ls).includes(o)?h=Object.keys(Ls).find(p=>Ls[p]===o)??"":(D(`Unknown field specifier: ${o}`),h=`unknown_${o}`);else{let p=De(i);o=ye(i,p),h=o}let d=De(i);if(d===0){let p=De(i),w=i.slice(i.currentIndex,i.currentIndex+p);i.currentIndex+=p;let L=De(w);this.metadata[h]=L<4?ye(w,p-1):w.slice(w.currentIndex)}else D(`International content: ${d}`),i.currentIndex+=De(i)}let I=r.currentIndex,c=De(r),l=r.slice(r.currentIndex,I+c);if(r.currentIndex=I+c,c>0)for(this.packedContent=!0;l.currentIndex<c;){let E={id:De(l)};switch(E.id){case Yt.nonRegistered:case Yt.registered:throw j(),new Error(`Unsupported unpacker ID: ${E.id}`);default:throw j(),new Error(`Unknown unpacker ID: ${E.id}`);case Yt.none:{E.standardID=De(l);break}case Yt.MMAUnpacker:{{let d=l[l.currentIndex++];d===0&&(d<<=8,d|=l[l.currentIndex++],d<<=8,d|=l[l.currentIndex++]);let p=De(l);E.manufacturerID=d,E.manufacturerInternalID=p}break}}E.decodedSize=De(l),this.nodeUnpackers.push(E)}switch(e.currentIndex=t+s,this.referenceTypeID=De(e),this.nodeData=e.slice(e.currentIndex,t+this.length),e.currentIndex=t+this.length,this.referenceTypeID){case At.inLineResource:break;case At.externalXMF:case At.inFileNode:case At.XMFFileURIandNodeID:case At.externalFile:case At.inFileResource:throw j(),new Error(`Unsupported reference type: ${this.referenceTypeID}`);default:throw j(),new Error(`Unknown reference type: ${this.referenceTypeID}`)}if(this.isFile){if(this.packedContent){let d=this.nodeData.slice(2);D(`%cPacked content. Attempting to deflate. Target size: %c${this.nodeUnpackers[0].decodedSize}`,C.warn,C.value);try{this.nodeData=new $(Sa(d).buffer)}catch(p){if(j(),p instanceof Error)throw new Error(`Error unpacking XMF file contents: ${p.message}.`)}}let E=this.metadata.resourceFormat;if(E===void 0)ne("No resource format for this file node!");else{E[0]!==sr.standard&&(D(`Non-standard formatTypeID: ${E.toString()}`),this.resourceFormat=E.toString());let p=E[1];Object.values(Ns).includes(p)?this.resourceFormat=Object.keys(Ns).find(w=>Ns[w]===p):D(`Unrecognized resource format: ${p}`)}}else for(this.resourceFormat="folder";this.nodeData.currentIndex<this.nodeData.length;){let E=this.nodeData.currentIndex,d=De(this.nodeData),p=this.nodeData.slice(E,E+d);this.nodeData.currentIndex=E+d,this.innerNodes.push(new La(p))}}get isFile(){return this.itemCount===0}};function ar(A,e){A.bankOffset=0;let t=ye(e,4);if(t!=="XMF_")throw j(),new SyntaxError(`Invalid XMF Header! Expected "_XMF", got "${t}"`);AA("%cParsing XMF file...",C.info);let s=ye(e,4);if(D(`%cXMF version: %c${s}`,C.info,C.recognized),s==="2.00"){let o=nt(e,4),h=nt(e,4);D(`%cFile Type ID: %c${o}%c, File Type Revision ID: %c${h}`,C.info,C.recognized,C.info,C.recognized)}De(e);let n=De(e);e.currentIndex+=n,e.currentIndex=De(e);let a=new nr(e),r,i=o=>{let h=(I,c)=>{o.metadata[I]!==void 0&&typeof o.metadata[I]=="string"&&(A.rmidiInfo[c]=QA(o.metadata[I]))};if(h("nodeName","name"),h("title","name"),h("copyrightNotice","copyright"),h("comment","comment"),o.isFile)switch(o.resourceFormat){default:return;case"DLS1":case"DLS2":case"DLS22":case"mobileDLS":{D("%cFound embedded DLS!",C.recognized),A.embeddedSoundBank=o.nodeData.buffer;break}case"StandardMIDIFile":case"StandardMIDIFileType1":{D("%cFound embedded MIDI!",C.recognized),r=o.nodeData;break}}else for(let I of o.innerNodes)i(I)};if(i(a),j(),!r)throw new Error("No MIDI data in the XMF file!");return r}var gs=class Na{name="";port=0;channels=new Set;events=[];static copyFrom(e){let t=new Na;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 cA(t.ticks,t.statusByte,new $(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)}};function Wn(A,e,t){Xe("%cParsing MIDI File...",C.info),A.fileName=t;let s=new $(e),n=s,a=h=>{let I=ye(h,4),c=nt(h,4),l=new $(c),E={type:I,size:c,data:l},d=h.slice(h.currentIndex,h.currentIndex+E.size);return E.data.set(d,0),h.currentIndex+=E.size,E},r=gA(s,4);if(r==="RIFF"){s.currentIndex+=8;let h=ye(s,4);if(h!=="RMID")throw j(),new SyntaxError(`Invalid RMIDI Header! Expected "RMID", got "${h}"`);let I=ge(s);if(I.header!=="data")throw j(),new SyntaxError(`Invalid RMIDI Chunk header! Expected "data", got "${h}"`);n=I.data;let c=!1,l=!1;for(;s.currentIndex<s.length;){let E=s.currentIndex,d=ge(s,!0);if(d.header==="RIFF"){let p=ye(d.data,4).toLowerCase();p==="sfbk"||p==="sfpk"||p==="dls "?(D("%cFound embedded soundbank!",C.recognized),A.embeddedSoundBank=s.slice(E,E+d.size).buffer):ne(`Unknown RIFF chunk: "${p}"`),p==="dls "?A.isDLSRMIDI=!0:c=!0}else if(d.header==="LIST"&&ye(d.data,4)==="INFO")for(D("%cFound RMIDI INFO chunk!",C.recognized);d.data.currentIndex<d.size;){let w=ge(d.data,!0),L=w.header,F=w.data;switch(L){default:{ne(`Unknown RMIDI Info: ${L}`);break}case"INAM":{A.rmidiInfo.name=F;break}case"IALB":case"IPRD":{A.rmidiInfo.album=F;break}case"ICRT":case"ICRD":{A.rmidiInfo.creationDate=F;break}case"IART":{A.rmidiInfo.artist=F;break}case"IGNR":{A.rmidiInfo.genre=F;break}case"IPIC":{A.rmidiInfo.picture=F;break}case"ICOP":{A.rmidiInfo.copyright=F;break}case"ICMT":{A.rmidiInfo.comment=F;break}case"IENG":{A.rmidiInfo.engineer=F;break}case"ISFT":{A.rmidiInfo.software=F;break}case"ISBJ":{A.rmidiInfo.subject=F;break}case"IENC":{A.rmidiInfo.infoEncoding=F;break}case"MENC":{A.rmidiInfo.midiEncoding=F;break}case"DBNK":{A.bankOffset=pa(F,2),l=!0;break}}}}c&&!l&&(A.bankOffset=1),A.isDLSRMIDI&&(A.bankOffset=0),A.embeddedSoundBank===void 0&&(A.bankOffset=0)}else r==="XMF_"?n=ar(A,s):n=s;let i=a(n);if(i.type!=="MThd")throw j(),new SyntaxError(`Invalid MIDI Header! Expected "MThd", got "${i.type}"`);if(i.size!==6)throw j(),new RangeError(`Invalid MIDI header chunk size! Expected 6, got ${i.size}`);A.format=nt(i.data,2);let o=nt(i.data,2);A.timeDivision=nt(i.data,2);for(let h=0;h<o;h++){let I=new gs,c=a(n);if(c.type!=="MTrk")throw j(),new SyntaxError(`Invalid track header! Expected "MTrk" got "${c.type}"`);let l,E=0;for(A.format===2&&h>0&&(E+=A.tracks[h-1].events[A.tracks[h-1].events.length-1].ticks);c.data.currentIndex<c.size;){E+=De(c.data);let d=c.data[c.data.currentIndex],p;if(l!==void 0&&d<128)p=l;else{if(d<128)throw j(),new SyntaxError(`Unexpected byte with no running byte. (${d})`);p=c.data[c.data.currentIndex++]}let w=bi(p),L;switch(w){case-1:{L=0;break}case-2:{p=c.data[c.data.currentIndex++],L=De(c.data);break}case-3:{L=De(c.data);break}default:{L=vi[p>>4],l=p;break}}let F=new $(L);F.set(c.data.slice(c.data.currentIndex,c.data.currentIndex+L),0);let b=new cA(E,p,F);I.pushEvent(b),c.data.currentIndex+=L}A.tracks.push(I),D(`%cParsed %c${A.tracks.length}%c / %c${A.tracks.length}`,C.info,C.value,C.info,C.value)}D("%cAll tracks parsed correctly!",C.recognized),A.flush(!1),j()}var ir=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"]]),rr=[ir];function or(A){for(let e of rr){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 hr(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 gr(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 Ir(A){let t=/\b\d{4}\b/.exec(A);return t?new Date(t[0]):void 0}function kn(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=or(A);if(s)return s;let n=hr(A);if(n)return n;let a=gr(A);if(a)return a;let r=Ir(A);return r||(ne(`Invalid date: "${A}". Replacing with the current date!`),new Date)}return t}var XA=class zt{tracks=[];timeDivision=0;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--,gA(e,t)}static fromArrayBuffer(e,t=""){let s=new zt;return Wn(s,e,t),s}static async fromFile(e){let t=new zt;return Wn(t,await e.arrayBuffer(),e.name),t}static copyFrom(e){let t=new zt;return t.copyFrom(e),t}copyFrom(e){this.copyMetadataFrom(e),this.embeddedSoundBank=e?.embeddedSoundBank?.slice(0)??void 0,this.tracks=e.tracks.map(t=>gs.copyFrom(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),h=i*o;if(t<=h)return s+=Math.round(t/o),s;s+=i,t-=h}return s}getUsedProgramsAndKeys(e){return Xi(this,e)}preloadSynth(e){Xe("%cPreloading samples...",C.info);let t=this.getUsedProgramsAndKeys(e.soundBankManager);for(let[s,n]of t.entries()){D(`%cPreloading used samples on %c${s.name}%c...`,C.info,C.recognized,C.info);for(let a of n){let[r,i]=a.split("-").map(Number);e.getVoicesForPreset(s,r,i)}}j()}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 Wi(this,e)}writeMIDI(){return Ri(this)}writeRMIDI(e,t=Zn){return Vi(this,e,dn(t,Zn))}modify({programChanges:e=[],controllerChanges:t=[],channelsToClear:s=[],channelsToTranspose:n=[],clearDrumParams:a=!1,reverbParams:r,chorusParams:i,delayParams:o,insertionParams:h}){Ar(this,{programChanges:e,controllerChanges:t,channelsToClear:s,channelsToTranspose:n,clearDrumParams:a,reverbParams:r,chorusParams:i,delayParams:o,insertionParams:h})}applySnapshot(e){tr(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){ne(`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=QA("utf-8",!0),e==="picture")this.rmidiInfo.picture=new Uint8Array(t);else if(e==="creationDate")this.rmidiInfo.creationDate=QA(t.toISOString(),!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 kn(gA(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){ne(`Failed to decode ${e} name: ${s}`);return}}iterate(e){let t=new Array(this.tracks.length).fill(0),s=this.tracks.length,n=()=>{let a=0,r=1/0;for(let[i,{events:o}]of this.tracks.entries())t[i]>=o.length||o[t[i]].ticks<r&&(a=i,r=o[t[i]].ticks);return a};for(;s>0;){let a=n(),r=this.tracks[a].events;if(t[a]>=r.length){s--;continue}let i=r[t[a]];e(i,a,t),t[a]++}}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 cA(t.ticks,t.statusByte,new $(t.data))),this.lyrics=e.lyrics.map(t=>new cA(t.ticks,t.statusByte,new $(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(){AA("%cInterpreting MIDI events...",C.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 h of this.tracks){let I=new Set,c=!1;for(let E=0;E<h.events.length;E++){let d=h.events[E];if(d.statusByte>=128&&d.statusByte<240)switch(c=!0,d.ticks>this.lastVoiceEventTick&&(this.lastVoiceEventTick=d.ticks),d.statusByte&240){case T.controllerChange:{switch(d.data[0]){case 2:case 111:case 116:{s=d.ticks;break}case 4:case 117:{n===null?(a="soft",n=d.ticks):n=0;break}case 0:this.isDLSRMIDI&&d.data[1]!==0&&d.data[1]!==127&&(D("%cDLS RMIDI with offset 1 detected!",C.recognized),this.bankOffset=1)}break}case T.noteOn:{I.add(d.statusByte&15);let w=d.data[0];this.keyRange.min=Math.min(this.keyRange.min,w),this.keyRange.max=Math.max(this.keyRange.max,w);break}}let p=gA(d.data);switch(d.statusByte){case T.endOfTrack:{E!==h.events.length-1&&(h.deleteEvent(E),E--,ne("Unexpected EndOfTrack. Removing!"));break}case T.setTempo:{this.tempoChanges.push({ticks:d.ticks,tempo:6e7/ot(d.data,3)});break}case T.marker:{switch(p.trim().toLowerCase()){default:break;case"start":case"loopstart":{s=d.ticks;break}case"loopend":n=d.ticks}break}case T.copyright:{this.extraMetadata.push(d);break}case T.lyric:p.trim().startsWith("@KMIDI KARAOKE FILE")&&(this.isKaraokeFile=!0,D("%cKaraoke MIDI detected!",C.recognized)),this.isKaraokeFile?d.statusByte=T.text:this.lyrics.push(d);case T.text:{let w=p.trim();w.startsWith("@KMIDI KARAOKE FILE")?(this.isKaraokeFile=!0,D("%cKaraoke MIDI detected!",C.recognized)):this.isKaraokeFile&&(w.startsWith("@T")||w.startsWith("@A")?e?this.extraMetadata.push(d):(this.binaryName=d.data.slice(2),e=!0,t=!0):w.startsWith("@")||this.lyrics.push(d));break}}}h.channels=I,h.name="";let l=h.events.find(E=>E.statusByte===T.trackName);l&&this.tracks.indexOf(h)>0&&(h.name=gA(l.data),!c&&!h.name.toLowerCase().includes("setup")&&this.extraMetadata.push(l))}this.tempoChanges.reverse(),D("%cCorrecting loops, ports and detecting notes...",C.info);let r=[];for(let h of this.tracks){let I=h.events.find(c=>(c.statusByte&240)===T.noteOn);I&&r.push(I.ticks)}this.firstNoteOn=Math.min(...r),D(`%cFirst note-on detected at: %c${this.firstNoteOn}%c ticks!`,C.info,C.recognized,C.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),D(`%cLoop points: start: %c${this.loop.start}%c end: %c${this.loop.end}`,C.info,C.recognized,C.info,C.recognized);let i=0;this.portChannelOffsetMap=[];for(let h of this.tracks)if(h.port=-1,h.channels.size!==0)for(let I of h.events){if(I.statusByte!==T.midiPort)continue;let c=I.data[0];h.port=c,this.portChannelOffsetMap[c]===void 0&&(this.portChannelOffsetMap[c]=i,i+=16)}this.portChannelOffsetMap=[...this.portChannelOffsetMap].map(h=>h??0);let o=1/0;for(let h of this.tracks)h.port!==-1&&o>h.port&&(o=h.port);o===1/0&&(o=0);for(let h of this.tracks)(h.port===-1||h.port===void 0)&&(h.port=o);if(this.portChannelOffsetMap.length===0&&(this.portChannelOffsetMap=[0]),this.portChannelOffsetMap.length<2?D("%cNo additional MIDI Ports detected.",C.info):(this.isMultiPort=!0,D("%cMIDI Ports detected!",C.recognized)),!t)if(this.tracks.length>1){if(!this.tracks[0].events.some(h=>h.statusByte>=T.noteOn&&h.statusByte<T.polyPressure)){let h=this.tracks[0].events.find(I=>I.statusByte===T.trackName);h&&(this.binaryName=h.data)}}else{let h=this.tracks[0].events.find(I=>I.statusByte===T.trackName);h&&(this.binaryName=h.data)}if(this.extraMetadata=this.extraMetadata.filter(h=>h.data.length>0),this.lyrics.sort((h,I)=>h.ticks-I.ticks),!this.tracks.some(h=>h.events[0].ticks===0)){let h=this.tracks[0],I=this?.binaryName?.buffer;I||(I=new Uint8Array(0).buffer),h.events.unshift(new cA(0,T.trackName,new $(I)))}this.duration=this.midiTicksToSeconds(this.lastVoiceEventTick),this.binaryName?.length===0&&(this.binaryName=void 0),D(`%cMIDI file parsed. Total tick time: %c${this.lastVoiceEventTick}%c, total seconds time: %c${Ws(Math.ceil(this.duration)).time}`,C.info,C.recognized,C.info,C.recognized),j()}};function cr(A,e){if(this.externalMIDIPlayback&&A.statusByte>=128){this.sendMIDIMessage([A.statusByte,...A.data]);return}let t=this._midiData.tracks[e],s=Qn(A.statusByte),n=this.midiPortChannelOffsets[this.currentMIDIPorts[e]]||0;switch(s.channel+=n,s.status){case T.noteOn:{let a=A.data[1];if(a>0)this.synth.noteOn(s.channel,A.data[0],a),this.playingNotes.push({midiNote:A.data[0],channel:s.channel,velocity:a});else{this.synth.noteOff(s.channel,A.data[0]);let r=this.playingNotes.findIndex(i=>i.midiNote===A.data[0]&&i.channel===s.channel);r!==-1&&this.playingNotes.splice(r,1)}break}case T.noteOff:{this.synth.noteOff(s.channel,A.data[0]);let a=this.playingNotes.findIndex(r=>r.midiNote===A.data[0]&&r.channel===s.channel);a!==-1&&this.playingNotes.splice(a,1);break}case T.pitchWheel:{this.synth.pitchWheel(s.channel,A.data[1]<<7|A.data[0]);break}case T.controllerChange:{if(this._midiData.isMultiPort&&t.channels.size===0)return;this.synth.controllerChange(s.channel,A.data[0],A.data[1]);break}case T.programChange:{if(this._midiData.isMultiPort&&t.channels.size===0)return;this.synth.programChange(s.channel,A.data[0]);break}case T.polyPressure:{this.synth.polyPressure(s.channel,A.data[0],A.data[1]);break}case T.channelPressure:{this.synth.channelPressure(s.channel,A.data[0]);break}case T.systemExclusive:{this.synth.systemExclusive(A.data,n);break}case T.setTempo:{let a=6e7/ot(A.data,3);this.oneTickToSeconds=60/(a*this._midiData.timeDivision),this.oneTickToSeconds===0&&(this.oneTickToSeconds=60/(120*this._midiData.timeDivision),D("invalid tempo! falling back to 120 BPM"),a=120);break}case T.timeSignature:case T.endOfTrack:case T.midiChannelPrefix:case T.songPosition:case T.activeSensing:case T.keySignature:case T.sequenceNumber:case T.sequenceSpecific:case T.text:case T.lyric:case T.copyright:case T.trackName:case T.marker:case T.cuePoint:case T.instrumentName:case T.programName:break;case T.midiPort:{this.assignMIDIPort(e,A.data[0]);break}case T.reset:{this.synth.stopAllChannels(),this.synth.resetAllControllers();break}default:{D(`%cUnrecognized Event: %c${A.statusByte}%c status byte: %c${Object.keys(T).find(a=>T[a]===s.status)}`,C.warn,C.unrecognized,C.warn,C.value);break}}s.status>=0&&s.status<128&&this.callEvent("metaEvent",{event:A,trackIndex:e})}function lr(){if(this.paused||!this._midiData)return;let A=this.currentTime;for(;this.playedTime<A;){let e=this.findFirstEventIndex(),s=this._midiData.tracks[e].events[this.eventIndexes[e]++];this.processEvent(s,e);let n=this.findFirstEventIndex(),a=this._midiData.tracks[n];if(this.loopCount>0&&this._midiData.loop.end<=s.ticks){this.loopCount!==1/0&&(this.loopCount--,this.callEvent("loopCountChange",{newCount:this.loopCount})),this._midiData.loop.type==="soft"?this.jumpToTick(this._midiData.loop.start):this.setTimeTicks(this._midiData.loop.start);return}if(a.events.length<=this.eventIndexes[n]||s.ticks>=this._midiData.lastVoiceEventTick){this.songIsFinished();return}let r=a.events[this.eventIndexes[n]];this.playedTime+=this.oneTickToSeconds*(r.ticks-s.ticks)}}function Cr(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 Br(A){if(!A.tracks)throw new Error("This MIDI has no tracks!");if(A.duration===0){ne("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.clearEmbeddedBank(),this._midiData.embeddedSoundBank!==void 0&&(D("%cEmbedded soundbank detected! Using it.",C.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),D(`%cTotal song time: ${Ws(Math.ceil(this._midiData.duration)).time}`,C.recognized),this.callEvent("songChange",{songIndex:this._songIndex}),this._midiData.duration<=.2&&(ne(`%cVery short song: (${Ws(Math.round(this._midiData.duration)).time}). Disabling loop!`,C.warn),this.loopCount=0),this.currentTime=0}var g=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,unused1:14,chorusEffectsSend:15,reverbEffectsSend:16,pan:17,unused2:18,unused3:19,unused4:20,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,reserved1:42,keyRange:43,velRange:44,startloopAddrsCoarseOffset:45,keyNum:46,velocity:47,initialAttenuation:48,reserved2:49,endloopAddrsCoarseOffset:50,coarseTune:51,fineTune:52,sampleID:53,sampleModes:54,reserved3:55,scaleTuning:56,exclusiveClass:57,overridingRootKey:58,unused5:59,endOper:60,vibLfoToVolume:61,vibLfoToFilterFc:62}),rt=Object.keys(g).length,Er=Math.max(...Object.values(g)),rA=Object.freeze({[g.startAddrsOffset]:{min:0,max:32768,def:0,nrpn:1},[g.endAddrOffset]:{min:-32768,max:32768,def:0,nrpn:1},[g.startloopAddrsOffset]:{min:-32768,max:32768,def:0,nrpn:1},[g.endloopAddrsOffset]:{min:-32768,max:32768,def:0,nrpn:1},[g.startAddrsCoarseOffset]:{min:0,max:32768,def:0,nrpn:1},[g.modLfoToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[g.vibLfoToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[g.modEnvToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[g.initialFilterFc]:{min:1500,max:13500,def:13500,nrpn:2},[g.initialFilterQ]:{min:0,max:960,def:0,nrpn:1},[g.modLfoToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[g.vibLfoToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[g.modEnvToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[g.endAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[g.modLfoToVolume]:{min:-960,max:960,def:0,nrpn:1},[g.vibLfoToVolume]:{min:-960,max:960,def:0,nrpn:1},[g.chorusEffectsSend]:{min:0,max:1e3,def:0,nrpn:1},[g.reverbEffectsSend]:{min:0,max:1e3,def:0,nrpn:1},[g.pan]:{min:-500,max:500,def:0,nrpn:1},[g.delayModLFO]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[g.freqModLFO]:{min:-16e3,max:4500,def:0,nrpn:4},[g.delayVibLFO]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[g.freqVibLFO]:{min:-16e3,max:4500,def:0,nrpn:4},[g.delayModEnv]:{min:-32768,max:5e3,def:-32768,nrpn:2},[g.attackModEnv]:{min:-32768,max:8e3,def:-32768,nrpn:2},[g.holdModEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[g.decayModEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[g.sustainModEnv]:{min:0,max:1e3,def:0,nrpn:1},[g.releaseModEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[g.keyNumToModEnvHold]:{min:-1200,max:1200,def:0,nrpn:1},[g.keyNumToModEnvDecay]:{min:-1200,max:1200,def:0,nrpn:1},[g.delayVolEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[g.attackVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[g.holdVolEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[g.decayVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[g.sustainVolEnv]:{min:0,max:1440,def:0,nrpn:1},[g.releaseVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[g.keyNumToVolEnvHold]:{min:-1200,max:1200,def:0,nrpn:1},[g.keyNumToVolEnvDecay]:{min:-1200,max:1200,def:0,nrpn:1},[g.startloopAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[g.keyNum]:{min:-1,max:127,def:-1,nrpn:1},[g.velocity]:{min:-1,max:127,def:-1,nrpn:1},[g.initialAttenuation]:{min:0,max:1440,def:0,nrpn:1},[g.endloopAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[g.coarseTune]:{min:-120,max:120,def:0,nrpn:1},[g.fineTune]:{min:-12700,max:12700,def:0,nrpn:1},[g.scaleTuning]:{min:0,max:1200,def:100,nrpn:1},[g.exclusiveClass]:{min:0,max:99999,def:0,nrpn:0},[g.overridingRootKey]:{min:-1,max:127,def:-1,nrpn:0},[g.sampleModes]:{min:0,max:3,def:0,nrpn:0}}),zs=new Int16Array(rt);for(let A=0;A<zs.length;A++)rA[A]&&(zs[A]=rA[A].def);var xe={monoSample:1,rightSample:2,leftSample:4,linkedSample:8,romMonoSample:32769,romRightSample:32770,romLeftSample:32772,romLinkedSample:32776},Ae={noController:0,noteOnVelocity:2,noteOnKeyNum:3,polyPressure:10,channelPressure:13,pitchWheel:14,pitchWheelRange:16,link:127},me={linear:0,concave:1,convex:2,switch:3};var X={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},N={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},zn={forward:0,loopAndRelease:1},ve=128,_s=147,Is=new Int16Array(_s).fill(0),Me=(A,e)=>Is[A]=e<<7;Me(u.mainVolume,100);Me(u.balance,64);Me(u.expressionController,127);Me(u.pan,64);Me(u.portamentoOnOff,127);Me(u.filterResonance,64);Me(u.releaseTime,64);Me(u.attackTime,64);Me(u.brightness,64);Me(u.decayTime,64);Me(u.vibratoRate,64);Me(u.vibratoDepth,64);Me(u.vibratoDelay,64);Me(u.generalPurposeController6,64);Me(u.generalPurposeController8,64);Me(u.registeredParameterLSB,127);Me(u.registeredParameterMSB,127);Me(u.nonRegisteredParameterLSB,127);Me(u.nonRegisteredParameterMSB,127);Me(ve+Ae.pitchWheel,64);Me(ve+Ae.pitchWheelRange,2);var Ta=Object.keys(Ce).length,Ua=new Float32Array(Ta);Ua[Ce.modulationMultiplier]=1;var Dn=new Int8Array(128).fill(127);Dn[35]=0;Dn[36]=0;function dr(A){this.lockedControllers[u.portamentoControl]||(this.channelSystem==="xg"?this.controllerChange(u.portamentoControl,60,A):this.controllerChange(u.portamentoControl,0,A))}function Qr(A=!0){for(let[t,s]of Is.entries())this.lockedControllers[t]||(this.midiControllers[t]!==s&&t<127?t!==u.portamentoControl&&t!==u.dataEntryMSB&&t!==u.registeredParameterMSB&&t!==u.registeredParameterLSB&&t!==u.nonRegisteredParameterMSB&&t!==u.nonRegisteredParameterLSB&&this.controllerChange(t,s>>7,A):this.midiControllers[t]=s);this.octaveTuning.fill(0),dr.call(this,A),this.rxChannel=this.channel,this.randomPan=!1,this.insertionEnabled&&!this.synthCore.masterParameters.insertionEffectLock&&(this.synthCore.callEvent("effectChange",{effect:"insertion",parameter:-2,value:this.channel}),this.insertionEnabled=!1),this.cc1=16,this.cc2=17,this.drumMap=this.channel%16===vA?1:0,this.resetDrumParams(),this.resetVibratoParams(),!this.lockedControllers[u.monoModeOn]&&!this.lockedControllers[u.polyModeOn]&&(this.polyMode=!0),this.perNotePitch=!1,this.pitchWheel(8192),this.sysExModulators.resetModulators();let e=this.customControllers[Ce.channelTransposeFine];this.customControllers.set(Ua),this.setCustomController(Ce.channelTransposeFine,e),this.resetParameters()}function fr(){this.setBankMSB(Re.getDefaultBank(this.channelSystem)),this.setBankLSB(0),this.setGSDrums(!1),this.setDrums(this.channel%16===vA),this.programChange(0)}var Pa=new Set([u.bankSelect,u.bankSelectLSB,u.mainVolume,u.mainVolumeLSB,u.pan,u.panLSB,u.reverbDepth,u.tremoloDepth,u.chorusDepth,u.variationDepth,u.phaserDepth,u.soundVariation,u.filterResonance,u.releaseTime,u.attackTime,u.brightness,u.decayTime,u.vibratoRate,u.vibratoDepth,u.vibratoDelay,u.soundController10,u.polyModeOn,u.monoModeOn,u.omniModeOn,u.omniModeOff,u.dataEntryMSB,u.dataEntryLSB,u.nonRegisteredParameterLSB,u.nonRegisteredParameterMSB,u.registeredParameterLSB,u.registeredParameterMSB]);function ur(){this.perNotePitch=!1,this.pitchWheel(8192);for(let A=0;A<128;A++){let e=Is[A];!Pa.has(A)&&e!==this.midiControllers[A]&&A!==u.portamentoControl&&this.controllerChange(A,e>>7)}this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}function mr(){this.dataEntryState=_e.Idle,this.midiControllers[u.nonRegisteredParameterLSB]=16256,this.midiControllers[u.nonRegisteredParameterMSB]=16256,this.midiControllers[u.registeredParameterLSB]=16256,this.midiControllers[u.registeredParameterMSB]=16256,this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}var ut=Is.slice(0,128),pr=new Set([u.dataDecrement,u.dataIncrement,u.dataEntryMSB,u.dataEntryLSB,u.registeredParameterLSB,u.registeredParameterMSB,u.nonRegisteredParameterLSB,u.nonRegisteredParameterMSB,u.bankSelect,u.bankSelectLSB,u.resetAllControllers,u.monoModeOn,u.polyModeOn]),_n=A=>pr.has(A);function yr(A,e=void 0){if(!this._midiData)return!1;this.oneTickToSeconds=60/(120*this._midiData.timeDivision),this.sendMIDIReset(),this.playedTime=0,this.eventIndexes=new Array(this._midiData.tracks.length).fill(0);let t=this.synth.midiChannels.length,s=new Array(t).fill(8192),n=[];for(let o=0;o<t;o++)n.push([...ut]);let a,r=0;function i(o){if(s[o]=8192,n?.[o]!==void 0)for(let[h,I]of ut.entries())Pa.has(h)||(n[o][h]=I)}for(;;){let o=this.findFirstEventIndex(),h=this._midiData.tracks[o],I=h.events[this.eventIndexes[o]];if(e===void 0){if(this.playedTime>=A)break}else if(I.ticks>=e)break;let c=Qn(I.statusByte),l=c.channel+(this.midiPortChannelOffsets[h.port]||0);switch(c.status){case T.noteOn:{n[l]??=[...ut],n[l][u.portamentoControl]=I.data[0];break}case T.noteOff:break;case T.pitchWheel:{s[l]=I.data[1]<<7|I.data[0];break}case T.controllerChange:{if(this._midiData.isMultiPort&&h.channels.size===0)break;let d=I.data[0];if(_n(d)){let p=I.data[1];d===u.resetAllControllers&&i(l),this.sendMIDICC(l,d,p)}else n[l]??=[...ut],n[l][d]=I.data[1];break}case T.setTempo:{let d=6e7/ot(I.data,3);this.oneTickToSeconds=60/(d*this._midiData.timeDivision),a=I,r=o;break}default:{this.processEvent(I,o);break}}this.eventIndexes[o]++,o=this.findFirstEventIndex();let E=this._midiData.tracks[o].events[this.eventIndexes[o]];if(E===void 0)return this.stop(),!1;this.playedTime+=this.oneTickToSeconds*(E.ticks-I.ticks)}for(let o=0;o<t;o++)if(s[o]!==void 0&&this.sendMIDIPitchWheel(o,s[o]),n[o]!==void 0)for(let[h,I]of n[o].entries())I!==ut[h]&&!_n(h)&&this.sendMIDICC(o,h,I);return a&&this.callEvent("metaEvent",{event:a,trackIndex:r}),this.paused&&(this.pausedTime=this.playedTime),!0}var xa=class{songs=[];shuffledSongIndexes=[];synth;externalMIDIPlayback=!1;retriggerPausedNotes=!0;loopCount=0;skipToFirstNoteOn=!0;isFinished=!1;preload=!0;onEventCall;processTick=lr.bind(this);firstNoteTime=0;oneTickToSeconds=0;eventIndexes=[];playedTime=0;pausedTime=-1;absoluteStartTime=0;playingNotes=[];currentMIDIPorts=[];midiPortChannelOffset=0;midiPortChannelOffsets={};assignMIDIPort=Cr.bind(this);loadNewSequence=Br.bind(this);processEvent=cr.bind(this);setTimeTo=yr.bind(this);constructor(A){this.synth=A,this.absoluteStartTime=this.synth.currentSynthTime}_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.currentSynthTime-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 this.playingNotes=[],this.callEvent("timeChange",{newTime:A}),this.setTimeTo(A),this.recalculateStartTime(A)}get paused(){return this.pausedTime!==void 0}play(){if(!this._midiData){ne("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)for(let A of this.playingNotes)this.sendMIDINoteOn(A.channel,A.midiNote,A.velocity);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){AA("%cPreloading all songs...",C.info);for(let e of this.songs)e.embeddedSoundBank===void 0&&e.preloadSynth(this.synth);j()}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()}findFirstEventIndex(){let A=0,e=1/0,t=this._midiData.tracks.length;for(let s=0;s<t;s++){let n=this._midiData.tracks[s];if(this.eventIndexes[s]>=n.events.length)continue;let a=n.events[this.eventIndexes[s]];a.ticks<e&&(A=s,e=a.ticks)}return A}addNewMIDIPort(){for(let A=0;A<16;A++)this.synth.createMIDIChannel()}sendMIDIMessage(A){if(!this.externalMIDIPlayback){ne(`Attempting to send ${os(A)} to the synthesizer via sendMIDIMessage. This shouldn't happen!`);return}this.callEvent("midiMessage",{message:A,time:this.synth.currentSynthTime})}sendMIDIAllOff(){for(let A=0;A<16;A++)this.sendMIDICC(A,u.sustainPedal,0);if(!this.externalMIDIPlayback){this.synth.stopAllChannels();return}for(let A of this.playingNotes)this.sendMIDINoteOff(A.channel,A.midiNote);for(let A=0;A<va;A++)this.sendMIDICC(A,u.allNotesOff,0),this.sendMIDICC(A,u.allSoundOff,0)}sendMIDIReset(){if(this.sendMIDIAllOff(),!this.externalMIDIPlayback){this.synth.resetAllControllers();return}this.sendMIDIMessage([T.reset])}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;this.playingNotes=[];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.currentSynthTime-A/this._playbackRate}jumpToTick(A){if(!this._midiData)return;this.sendMIDIAllOff();let e=this._midiData.midiTicksToSeconds(A);this.callEvent("timeChange",{newTime:e}),this.recalculateStartTime(e),this.playedTime=e,this.eventIndexes.length=0;for(let s of this._midiData.tracks){let n=s.events.findIndex(a=>a.ticks>=A);this.eventIndexes.push(n===-1?s.events.length:n)}let t=this._midiData.tempoChanges.find(s=>s.ticks<=A);this.oneTickToSeconds=60/(t.tempo*this._midiData.timeDivision)}sendMIDINoteOn(A,e,t){if(!this.externalMIDIPlayback){this.synth.noteOn(A,e,t);return}A%=16,this.sendMIDIMessage([T.noteOn|A,e,t])}sendMIDINoteOff(A,e){if(!this.externalMIDIPlayback){this.synth.noteOff(A,e);return}A%=16,this.sendMIDIMessage([T.noteOff|A,e,64])}sendMIDICC(A,e,t){if(!this.externalMIDIPlayback){this.synth.controllerChange(A,e,t);return}A%=16,this.sendMIDIMessage([T.controllerChange|A,e,t])}sendMIDIPitchWheel(A,e){if(!this.externalMIDIPlayback){this.synth.pitchWheel(A,e);return}A%=16,this.sendMIDIMessage([T.pitchWheel|A,e&127,e>>7])}},wt=wt!==void 0?wt:{},$n=!1,Ha;wt.isInitialized=new Promise(A=>Ha=A);var Sr=function(A){var e,t,s,n,a,r,i,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",h="",I=0;A=A.replace(/[^A-Za-z0-9\+\/\=]/g,"");do n=o.indexOf(A.charAt(I++)),a=o.indexOf(A.charAt(I++)),r=o.indexOf(A.charAt(I++)),i=o.indexOf(A.charAt(I++)),e=n<<2|a>>4,t=(15&a)<<4|r>>2,s=(3&r)<<6|i,h+=String.fromCharCode(e),r!==64&&(h+=String.fromCharCode(t)),i!==64&&(h+=String.fromCharCode(s));while(I<A.length);return h};(function(){var A,e,t,s,n,a,r,i,o,h,I,c,l,E,d,p,w,L,F,b,S,H,B=B!==void 0?B:{};B.wasmBinary=Uint8Array.from(Sr("AGFzbQEAAAABpQEYYAJ/fwF/YAF/AGAAAX9gBH9/f38AYAAAYAN/f38Bf2ABfwF/YAJ/fwBgBn9/f39/fwF/YAR/f39/AX9gBX9/f39/AX9gB39/f39/f38Bf2AGf39/f39/AGAIf39/f39/f38Bf2AFf39/f38AYAd/f39/f39/AGADf39/AGABfwF9YAF9AX1gAnx/AXxgAnx/AX9gA3x8fwF8YAJ8fAF8YAF8AXwCngIPA2VudgZtZW1vcnkCAIACA2VudgV0YWJsZQFwAQQEA2Vudgl0YWJsZUJhc2UDfwADZW52DkRZTkFNSUNUT1BfUFRSA38AA2VudghTVEFDS1RPUAN/AANlbnYJU1RBQ0tfTUFYA38ABmdsb2JhbAhJbmZpbml0eQN8AANlbnYFYWJvcnQAAQNlbnYNZW5sYXJnZU1lbW9yeQACA2Vudg5nZXRUb3RhbE1lbW9yeQACA2VudhdhYm9ydE9uQ2Fubm90R3Jvd01lbW9yeQACA2Vudg5fX19hc3NlcnRfZmFpbAADA2VudgtfX19zZXRFcnJObwABA2VudgZfYWJvcnQABANlbnYWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwAFA3d2BgYCAQcHAQIBAQcBCAcFAAkGCQoHBgYGBgEFBgIBBgYKAAgLAAYGBgYGBgYBAAoMDAMGBQANCAoJAAwODA8OAQAGBgcEABAJEAERAAADBQwAAAMHBxIGAQAABwIFEwMOBw8HBgYQFAoVExYXFxcXFgQFBQYFAAYkB38BIwELfwEjAgt/ASMDC38BQQALfwFBAAt8ASMEC38BQQALB9MCFRBfX2dyb3dXYXNtTWVtb3J5AAgRX19fZXJybm9fbG9jYXRpb24AYwVfZnJlZQBfB19tYWxsb2MAXgdfbWVtY3B5AHkHX21lbXNldAB6BV9zYnJrAHsXX3N0Yl92b3JiaXNfanNfY2hhbm5lbHMAJhRfc3RiX3ZvcmJpc19qc19jbG9zZQAlFV9zdGJfdm9yYmlzX2pzX2RlY29kZQAoE19zdGJfdm9yYmlzX2pzX29wZW4AJBpfc3RiX3ZvcmJpc19qc19zYW1wbGVfcmF0ZQAnC2R5bkNhbGxfaWlpAHwTZXN0YWJsaXNoU3RhY2tTcGFjZQAMC2dldFRlbXBSZXQwAA8LcnVuUG9zdFNldHMAeAtzZXRUZW1wUmV0MAAOCHNldFRocmV3AA0Kc3RhY2tBbGxvYwAJDHN0YWNrUmVzdG9yZQALCXN0YWNrU2F2ZQAKCQoBACMACwR9VFl9Csb2A3YGACAAQAALGwEBfyMGIQEjBiAAaiQGIwZBD2pBcHEkBiABCwQAIwYLBgAgACQGCwoAIAAkBiABJAcLEAAjCEUEQCAAJAggASQJCwsGACAAJAsLBAAjCwsRACAABEAgABARIAAgABASCwvvBwEKfyAAQYADaiEHIAcoAgAhBQJAIAUEQCAAQfwBaiEEIAQoAgAhASABQQBKBEAgAEHwAGohCANAIAUgAkEYbGpBEGohCSAJKAIAIQEgAQRAIAgoAgAhAyAFIAJBGGxqQQ1qIQogCi0AACEGIAZB/wFxIQYgAyAGQbAQbGpBBGohAyADKAIAIQMgA0EASgRAQQAhAwNAIAEgA0ECdGohASABKAIAIQEgACABEBIgA0EBaiEDIAgoAgAhASAKLQAAIQYgBkH/AXEhBiABIAZBsBBsakEEaiEBIAEoAgAhBiAJKAIAIQEgAyAGSA0ACwsgACABEBILIAUgAkEYbGpBFGohASABKAIAIQEgACABEBIgAkEBaiECIAQoAgAhASACIAFODQMgBygCACEFDAAACwALCwsgAEHwAGohAyADKAIAIQEgAQRAIABB7ABqIQUgBSgCACECIAJBAEoEQEEAIQIDQAJAIAEgAkGwEGxqQQhqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQRxqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQSBqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQaQQaiEEIAQoAgAhBCAAIAQQEiABIAJBsBBsakGoEGohASABKAIAIQEgAUUhBCABQXxqIQFBACABIAQbIQEgACABEBIgAkEBaiECIAUoAgAhASACIAFODQAgAygCACEBDAELCyADKAIAIQELIAAgARASCyAAQfgBaiEBIAEoAgAhASAAIAEQEiAHKAIAIQEgACABEBIgAEGIA2ohAyADKAIAIQEgAQRAIABBhANqIQUgBSgCACECIAJBAEoEQEEAIQIDQCABIAJBKGxqQQRqIQEgASgCACEBIAAgARASIAJBAWohAiAFKAIAIQcgAygCACEBIAIgB0gNAAsLIAAgARASCyAAQQRqIQIgAigCACEBIAFBAEoEQEEAIQEDQCAAQZQGaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQZQHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQdgHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiABQQFqIQEgAigCACEDIAEgA0ghAyABQRBJIQUgBSADcQ0ACwtBACEBA0AgAEGgCGogAUECdGohAiACKAIAIQIgACACEBIgAEGoCGogAUECdGohAiACKAIAIQIgACACEBIgAEGwCGogAUECdGohAiACKAIAIQIgACACEBIgAEG4CGogAUECdGohAiACKAIAIQIgACACEBIgAEHACGogAUECdGohAiACKAIAIQIgACACEBIgAUEBaiEBIAFBAkcNAAsLGwAgAEHEAGohACAAKAIAIQAgAEUEQCABEF8LC3wBAX8gAEHUB2ohASABQQA2AgAgAEGAC2ohASABQQA2AgAgAEH4CmohASABQQA2AgAgAEGcCGohASABQQA2AgAgAEHVCmohASABQQA6AAAgAEH8CmohASABQQA2AgAgAEHUC2ohASABQQA2AgAgAEHYC2ohACAAQQA2AgAL8AQBB38jBiELIwZBEGokBiALQQhqIQcgC0EEaiEKIAshCCAAQSRqIQYgBiwAACEGAn8gBgR/IABBgAtqIQYgBigCACEGIAZBf0oEQCAFQQA2AgAgACABIAIQFgwCCyAAQRRqIQYgBiABNgIAIAEgAmohAiAAQRxqIQkgCSACNgIAIABB2ABqIQIgAkEANgIAIABBABAXIQkgCUUEQCAFQQA2AgBBAAwCCyAAIAcgCCAKEBghCSAJBEAgBygCACECIAgoAgAhCSAKKAIAIQggACACIAkgCBAaIQogByAKNgIAIABBBGohAiACKAIAIQggCEEASgRAQQAhAgNAIABBlAZqIAJBAnRqIQcgBygCACEHIAcgCUECdGohByAAQdQGaiACQQJ0aiEMIAwgBzYCACACQQFqIQIgAiAISA0ACwsgAwRAIAMgCDYCAAsgBSAKNgIAIABB1AZqIQAgBCAANgIAIAYoAgAhACAAIAFrDAILAkACQAJAAkACQCACKAIAIgNBIGsOBAECAgACCyACQQA2AgAgAEHUAGohAiAAEBkhAwJAIANBf0cEQANAIAIoAgAhAyADDQIgABAZIQMgA0F/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ACECIABBmAhqIQYgBigCACEHIAUgA2shCSAJIAdqIQkgAiAJSSEJIAIgB0khDSACIAdrIQJBACACIA0bIQIgAiADaiECIAIgBUohByAFIAIgBxshAiAJBEAgASACNgIAIAYoAgAhACAAIAJqIQAgBiAANgIAQQEMBgsLCyAAQfQKaiECIAIoAgAhAiADIB9rIQYgBiACaiEGIABBmAhqIQIgAiAGNgIAIAhBATYCAAwBBSAAQZgIaiECIAYNAQsMAQsgBCADayEDIAIoAgAhBCADIARqIQMgAiADNgIACyATKAIAIQIgAgRAIABByABqIQIgAigCACECIABB0ABqIQAgACgCACEAIAIgAEcEQEHTE0HEE0HkGkHnFBAECwsgASAFNgIAQQELIQAgHCQGIAALqAIBBX8gAEHoCmohBSAFKAIAIQICQCACQQBIBEBBACEABSACIAFIBEAgAUEYSgRAIABBGBAsIQIgAUFoaiEBIAAgARAsIQAgAEEYdCEAIAAgAmohACAADwsgAkUEQCAAQeQKaiECIAJBADYCAAsgAEHkCmohAwJAAkACQANAIAAQLiECIAJBf0YNASAFKAIAIQQgAiAEdCECIAMoAgAhBiAGIAJqIQIgAyACNgIAIAUgBEEIaiICNgIAIAIgAUgNAAwCAAsACyAFQX82AgBBACEADAQLIARBeEgEQEEAIQAMBAsLCyAAQeQKaiEEIAQoAgAhA0EBIAF0IQAgAEF/aiEAIAMgAHEhACADIAF2IQMgBCADNgIAIAIgAWshASAFIAE2AgALCyAAC40CAAJAIABBAEgEf0EABSAAQYCAAUgEQCAAQRBIBEAgAEGACGohACAALAAAIQAMAwsgAEGABEgEQCAAQQV2IQAgAEGACGohACAALAAAIQAgAEEFaiEABSAAQQp2IQAgAEGACGohACAALAAAIQAgAEEKaiEACwwCCyAAQYCAgAhIBH8gAEGAgCBIBH8gAEEPdiEAIABBgAhqIQAgACwAACEAIABBD2oFIABBFHYhACAAQYAIaiEAIAAsAAAhACAAQRRqCwUgAEGAgICAAkgEfyAAQRl2IQAgAEGACGohACAALAAAIQAgAEEZagUgAEEediEAIABBgAhqIQAgACwAACEAIABBHmoLCwshAAsgAAuiAQEDfyAAQdQKaiECIAIsAAAhAQJAAkAgAQ0AIABB3ApqIQEgASgCACEBIAEEQEF/IQMFIAAQLyEBIAEEQCACLAAAIQEgAQ0CQaEUQcQTQfYLQbUUEAQFQX8hAwsLDAELIAFBf2pBGHRBGHUhASACIAE6AAAgAEHsCmohASABKAIAIQIgAkEBaiECIAEgAjYCACAAEDAhACAAQf8BcSEDCyADC6wCAQd/IABB3ApqIQIgAigCACEBAkAgAUUEQCAAQdgKaiEEIAQoAgAhASABQX9GBEAgAEHQCGohASABKAIAIQEgAUF/aiEBIABB4ApqIQMgAyABNgIAIAAQMSEBIAFFBEAgAkEBNgIADAMLIABB0wpqIQEgASwAACEBIAFBAXEhASABBH8gBCgCAAUgAEEgEBUMAwshAQsgAUEBaiEHIAQgBzYCACAAQdQIaiABaiEDIAMsAAAhBiAGQf8BcSEDIAZBf0cEQCACQQE2AgAgAEHgCmohAiACIAE2AgALIABB0AhqIQEgASgCACEBIAcgAU4EQCAEQX82AgALIABB1ApqIQAgACwAACEBIAEEQEHFFEHEE0HoC0HaFBAEBSAAIAY6AAAgAyEFCwsLIAULUQEDfyAAQRRqIQMgAygCACEBIABBHGohAiACKAIAIQIgASACSQR/IAFBAWohACADIAA2AgAgASwAAAUgAEHUAGohACAAQQE2AgBBAAshACAACyABAX8gABAyIQEgAQR/IAAQMwUgAEEeEBVBAAshACAAC2ABAX8gABAwIQEgAUH/AXFBzwBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQAgAEH/AXFB0wBGIQAFQQAhAAsFQQAhAAsFQQAhAAsgAAvZAwEGfyAAEDAhAQJ/IAFB/wFxBH8gAEEfEBVBAAUgABAwIQEgAEHTCmohAiACIAE6AAAgABAjIQUgABAjIQIgABAjGiAAECMhASAAQcwIaiEDIAMgATYCACAAECMaIAAQMCEBIAFB/wFxIQEgAEHQCGohAyADIAE2AgAgAEHUCGohBCAAIAQgARAiIQEgAUUEQCAAQQoQFUEADAILIABB8ApqIQQgBEF+NgIAIAIgBXEhAQJAIAFBf0cEQCADKAIAIQEgAUEASgRAA0ACQCABQX9qIQIgAEHUCGogAmohBiAGLAAAIQYgBkF/Rw0AIAFBAUwNBCACIQEMAQsLIAQgAjYCACAAQfQKaiEBIAEgBTYCAAsLCyAAQdUKaiEBIAEsAAAhASABBEAgAygCACEDIANBAEoEf0EAIQJBACEBA0AgAEHUCGogAWohBCAELQAAIQQgBEH/AXEhBCACIARqIQIgAUEBaiEBIAEgA0gNAAsgAkEbagVBGwshASAAQShqIQIgAigCACECIAEgA2ohASABIAJqIQEgAEEsaiEDIAMgAjYCACAAQTBqIQIgAiABNgIAIABBNGohASABIAU2AgALIABB2ApqIQAgAEEANgIAQQELCyEAIAALowEBB38gAEHoCmohAyADKAIAIQECQCABQRlIBEAgAEHkCmohBCABRQRAIARBADYCAAsgAEHUCmohBSAAQdwKaiEGA0AgBigCACEBIAEEQCAFLAAAIQEgAUUNAwsgABAuIQIgAkF/Rg0CIAMoAgAhASACIAF0IQIgBCgCACEHIAcgAmohAiAEIAI2AgAgAUEIaiECIAMgAjYCACABQRFIDQALCwsLrQUBCX8gABA0IAFBIGohAiACKAIAIQUCQAJAIAVFIgNFDQAgAUGkEGohAiACKAIAIQIgAg0AQX8hAQwBCyABQQRqIQIgAigCACECAkACQCACQQhKBEAgAUGkEGohAyADKAIAIQMgAw0BBSADDQELDAELIABB5ApqIQggCCgCACEJIAkQOiEHIAFBrBBqIQIgAigCACECIAJBAUoEQCABQaQQaigCACEKQQAhAwNAIAJBAXYhBSAFIANqIQQgCiAEQQJ0aiEGIAYoAgAhBiAGIAdLIQYgAiAFayECIAMgBCAGGyEDIAUgAiAGGyECIAJBAUoNAAsFQQAhAwsgAUEXaiECIAIsAAAhAiACRQRAIAFBqBBqIQIgAigCACECIAIgA0ECdGohAiACKAIAIQMLIAFBCGohASABKAIAIQEgASADaiEBIAEtAAAhASABQf8BcSEBIABB6ApqIQIgAigCACEAIAAgAUgEf0EAIQBBfwUgACABayEAIAkgAXYhASAIIAE2AgAgAwshASACIAA2AgAMAQsgAUEXaiEDIAMsAAAhAyADBEBBgRVBxBNB6gxBjBUQBAsCQCACQQBKBEAgASgCCCEIIABB5ApqIQlBACEBA0ACQCAIIAFqIQMgAywAACEEIARB/wFxIQMgBEF/RwRAIAUgAUECdGoh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IwZBEGokBiACIQECfCAAvUIgiKdB/////wdxIgNB/MOk/wNJBHwgA0GewZryA0kEfEQAAAAAAADwPwUgAEQAAAAAAAAAABByCwUgACAAoSADQf//v/8HSw0BGgJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwgQcgwECyABKwMAIAErAwhBARBwmgwDCyABKwMAIAErAwgQcpoMAgsgASsDACABKwMIQQEQcAsLIQAgAiQGIAALywEBA38jBiECIwZBEGokBiACIQECQCAAvUIgiKdB/////wdxIgNB/MOk/wNJBEAgA0GAgMDyA08EQCAARAAAAAAAAAAAQQAQcCEACwUgA0H//7//B0sEQCAAIAChIQAMAgsCQAJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwhBARBwIQAMBQsgASsDACABKwMIEHIhAAwECyABKwMAIAErAwhBARBwmiEADAMLIAErAwAgASsDCBBymiEACwsLIAIkBiAAC5sDAwJ/AX4CfCAAvSIDQj+IpyEBAnwCfwJAIANCIIinQf////8HcSICQarGmIQESwR8IANC////////////AINCgICAgICAgPj/AFYEQCAADwsgAETvOfr+Qi6GQGQEQCAARAAAAAAAAOB/og8FIABE0rx63SsjhsBjIABEUTAt1RBJh8BjcUUNAkQAAAAAAAAAACIADwsABSACQcLc2P4DSwRAIAJBscXC/wNLDQIgAUEBcyABawwDCyACQYCAwPEDSwR8QQAhASAABSAARAAAAAAAAPA/oA8LCwwCCyAARP6CK2VHFfc/oiABQQN0QYATaisDAKCqCyEBIAAgAbciBEQAAOD+Qi7mP6KhIgAgBER2PHk17znqPaIiBaELIQQgACAEIAQgBCAEoiIAIAAgACAAIABE0KS+cmk3Zj6iRPFr0sVBvbu+oKJELN4lr2pWET+gokSTvb4WbMFmv6CiRD5VVVVVVcU/oKKhIgCiRAAAAAAAAABAIAChoyAFoaBEAAAAAAAA8D+gIQAgAUUEQCAADwsgACABEGULnwMDAn8BfgV8IAC9IgNCIIinIQECfyADQgBTIgIgAUGAgMAASXIEfyADQv///////////wCDQgBRBEBEAAAAAAAA8L8gACAAoqMPCyACRQRAIABEAAAAAAAAUEOi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mgDjqR0AXmGRAAgb5gCFmWUAoBRfAI1AaACA2P8AJ3NNAAYGMQDKVhUAyahzAHviYABrjMAAQcMSC11A+yH5PwAAAAAtRHQ+AAAAgJhG+DwAAABgUcx4OwAAAICDG/A5AAAAQCAlejgAAACAIoLjNgAAAAAd82k1AAAAAAAA4D8AAAAAAADgvwAAAAAAAPA/AAAAAAAA+D8AQagTCwgG0M9D6/1MPgBBuxMLigZAA7jiP09nZ1MuL3N0Yl92b3JiaXMuYwBmLT5hbGxvYy5hbGxvY19idWZmZXJfbGVuZ3RoX2luX2J5dGVzID09IGYtPnRlbXBfb2Zmc2V0AHZvcmJpc19kZWNvZGVfaW5pdGlhbABmLT5ieXRlc19pbl9zZWcgPiAwAGdldDhfcGFja2V0X3JhdwBmLT5ieXRlc19pbl9zZWcgPT0gMABuZXh0X3NlZ21lbnQAdm9yYmlzX2RlY29kZV9wYWNrZXRfcmVzdAAhYy0+c3BhcnNlAGNvZGVib29rX2RlY29kZV9zY2FsYXJfcmF3ACFjLT5zcGFyc2UgfHwgeiA8IGMtPnNvcnRlZF9lbnRyaWVzAGNvZGVib29rX2RlY29kZV9kZWludGVybGVhdmVfcmVwZWF0AHogPCBjLT5zb3J0ZWRfZW50cmllcwBjb2RlYm9va19kZWNvZGVfc3RhcnQAKG4gJiAzKSA9PSAwAGltZGN0X3N0ZXAzX2l0ZXIwX2xvb3AAMABnZXRfd2luZG93AGYtPnRlbXBfb2Zmc2V0ID09IGYtPmFsbG9jLmFsbG9jX2J1ZmZlcl9sZW5ndGhfaW5fYnl0ZXMAc3RhcnRfZGVjb2RlcgB2b3JiaXNjLT5zb3J0ZWRfZW50cmllcyA9PSAwAGNvbXB1dGVfY29kZXdvcmRzAHogPj0gMCAmJiB6IDwgMzIAbGVuW2ldID49IDAgJiYgbGVuW2ldIDwgMzIAYXZhaWxhYmxlW3ldID09IDAAayA9PSBjLT5zb3J0ZWRfZW50cmllcwBjb21wdXRlX3NvcnRlZF9odWZmbWFuAGMtPnNvcnRlZF9jb2Rld29yZHNbeF0gPT0gY29kZQBsZW4gIT0gTk9fQ09ERQBpbmNsdWRlX2luX3NvcnQAcG93KChmbG9hdCkgcisxLCBkaW0pID4gZW50cmllcwBsb29rdXAxX3ZhbHVlcwAoaW50KSBmbG9vcihwb3coKGZsb2F0KSByLCBkaW0pKSA8PSBlbnRyaWVzAOoPBG5hbWUB4g9+AAVhYm9ydAENZW5sYXJnZU1lbW9yeQIOZ2V0VG90YWxNZW1vcnkDF2Fib3J0T25DYW5ub3RHcm93TWVtb3J5BA5fX19hc3NlcnRfZmFpbAULX19fc2V0RXJyTm8GBl9hYm9ydAcWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwgQX19ncm93V2FzbU1lbW9yeQkKc3RhY2tBbGxvYwoJc3RhY2tTYXZlCwxzdGFja1Jlc3RvcmUME2VzdGFibGlzaFN0YWNrU3BhY2UNCHNldFRocmV3DgtzZXRUZW1wUmV0MA8LZ2V0VGVtcFJldDAQEV9zdGJfdm9yYmlzX2Nsb3NlEQ5fdm9yYmlzX2RlaW5pdBILX3NldHVwX2ZyZWUTGl9zdGJfdm9yYmlzX2ZsdXNoX3B1c2hkYXRhFCFfc3RiX3ZvcmJpc19kZWNvZGVfZnJhbWVfcHVzaGRhdGEVBl9lcnJvchYgX3ZvcmJpc19zZWFyY2hfZm9yX3BhZ2VfcHVzaGRhdGEXGF9pc193aG9sZV9wYWNrZXRfcHJlc2VudBgVX3ZvcmJpc19kZWNvZGVfcGFja2V0GQxfZ2V0OF9wYWNrZXQaFF92b3JiaXNfZmluaXNoX2ZyYW1lGxlfc3RiX3ZvcmJpc19vcGVuX3B1c2hkYXRhHAxfdm9yYmlzX2luaXQdDl9zdGFydF9kZWNvZGVyHg1fdm9yYmlzX2FsbG9jHxtfc3RiX3ZvcmJpc19nZXRfZmlsZV9vZmZzZXQgE19tYXliZV9zdGFydF9wYWNrZXQhDV9mbHVzaF9wYWNrZXQiBV9nZXRuIwZfZ2V0MzIkE19zdGJfdm9yYmlzX2pzX29wZW4lFF9zdGJfdm9yYmlzX2pzX2Nsb3NlJhdfc3RiX3ZvcmJpc19qc19jaGFubmVscycaX3N0Yl92b3JiaXNfanNfc2FtcGxlX3JhdGUoFV9zdGJfdm9yYmlzX2pzX2RlY29kZSkNX2NyYzMyX3VwZGF0ZSoWX3ZvcmJpc19kZWNvZGVfaW5pdGlhbCsaX3ZvcmJpc19kZWNvZGVfcGFja2V0X3Jlc3QsCV9nZXRfYml0cy0FX2lsb2cuEF9nZXQ4X3BhY2tldF9yYXcvDV9uZXh0X3NlZ21lbnQwBV9nZXQ4MQtfc3RhcnRfcGFnZTIQX2NhcHR1cmVfcGF0dGVybjMdX3N0YXJ0X3BhZ2Vfbm9fY2FwdHVyZXBhdHRlcm40DV9wcmVwX2h1ZmZtYW41G19jb2RlYm9va19kZWNvZGVfc2NhbGFyX3JhdzYOX3ByZWRpY3RfcG9pbnQ3D19kZWNvZGVfcmVzaWR1ZTgJX2RvX2Zsb29yOQ1faW52ZXJzZV9tZGN0OgxfYml0X3JldmVyc2U7EV9tYWtlX2Jsb2NrX2FycmF5PBJfc2V0dXBfdGVtcF9tYWxsb2M9JF9jb2RlYm9va19kZWNvZGVfZGVpbnRlcmxlYXZlX3JlcGVhdD4PX3Jlc2lkdWVfZGVjb2RlPxVfY29kZWJvb2tfZGVjb2RlX3N0ZXBAEF9jb2RlYm9va19kZWNvZGVBFl9jb2RlYm9va19kZWNvZGVfc3RhcnRCCl9kcmF3X2xpbmVDF19pbWRjdF9zdGVwM19pdGVyMF9sb29wRBlfaW1kY3Rfc3RlcDNfaW5uZXJfcl9sb29wRRlfaW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wRh9faW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wX2xkNjU0RwhfaXRlcl81NEgLX2dldF93aW5kb3dJEF92b3JiaXNfdmFsaWRhdGVKDV9zdGFydF9wYWNrZXRLBV9za2lwTAtfY3JjMzJfaW5pdE0NX3NldHVwX21hbGxvY04QX3NldHVwX3RlbXBfZnJlZU8SX2NvbXB1dGVfY29kZXdvcmRzUBdfY29tcHV0ZV9zb3J0ZWRfaHVmZm1hblEcX2NvbXB1dGVfYWNjZWxlcmF0ZWRfaHVmZm1hblIPX2Zsb2F0MzJfdW5wYWNrUw9fbG9va3VwMV92YWx1ZXNUDl9wb2ludF9jb21wYXJlVQpfbmVpZ2hib3JzVg9faW5pdF9ibG9ja3NpemVXCl9hZGRfZW50cnlYEF9pbmNsdWRlX2luX3NvcnRZD191aW50MzJfY29tcGFyZVoYX2NvbXB1dGVfdHdpZGRsZV9mYWN0b3JzWw9fY29tcHV0ZV93aW5kb3dcE19jb21wdXRlX2JpdHJldmVyc2VdB19zcXVhcmVeB19tYWxsb2NfBV9mcmVlYAhfcmVhbGxvY2ESX3RyeV9yZWFsbG9jX2NodW5rYg5fZGlzcG9zZV9jaHVua2MRX19fZXJybm9fbG9jYXRpb25kB19tZW1jbXBlB19zY2FsYm5mBl9xc29ydGcFX3NpZnRoBF9zaHJpCF90cmlua2xlagRfc2hsawVfcG50emwIX2FfY3R6X2xtBl9jeWNsZW4LX19fcmVtX3BpbzJvEV9fX3JlbV9waW8yX2xhcmdlcAZfX19zaW5xBl9sZGV4cHIGX19fY29zcwRfY29zdARfc2ludQRfZXhwdgRfbG9ndwRfcG93eAtydW5Qb3N0U2V0c3kHX21lbWNweXoHX21lbXNldHsFX3Nicmt8C2R5bkNhbGxfaWlpfQJiMA=="),function(Q){return Q.charCodeAt(0)});var B=B!==void 0?B:{},x={};for(A in B)B.hasOwnProperty(A)&&(x[A]=B[A]);B.arguments=[],B.thisProgram="./this.program",B.quit=function(Q,f){throw f},B.preRun=[],B.postRun=[];var q=!1,O=!1,M=!1,P=!1;q=typeof window=="object",O=typeof importScripts=="function",M=typeof process=="object"&&typeof Di=="function"&&!q&&!O,P=!q&&!M&&!O;var J="";function y(Q){return B.locateFile?B.locateFile(Q,J):J+Q}M?(J="/",B.read=function(f,m){var R;return e||(e=void 0),t||(t=void 0),f=t.normalize(f),R=e.readFileSync(f),m?R:R.toString()},B.readBinary=function(f){var m=B.read(f,!0);return m.buffer||(m=new Uint8Array(m)),le(m.buffer),m},process.argv.length>1&&(B.thisProgram=process.argv[1].replace(/\\/g,"/")),B.arguments=process.argv.slice(2),typeof module<"u",process.on("uncaughtException",function(Q){if(!(Q instanceof dt))throw Q}),process.on("unhandledRejection",function(Q,f){process.exit(1)}),B.quit=function(Q){process.exit(Q)},B.inspect=function(){return"[Emscripten Module object]"}):P?(typeof read<"u"&&(B.read=function(f){return read(f)}),B.readBinary=function(f){var m;return typeof readbuffer=="function"?new Uint8Array(readbuffer(f)):(le(typeof(m=read(f,"binary"))=="object"),m)},typeof scriptArgs<"u"?B.arguments=scriptArgs:typeof arguments<"u"&&(B.arguments=arguments),typeof quit=="function"&&(B.quit=function(Q){quit(Q)})):(q||O)&&(q?document.currentScript&&(J=document.currentScript.src):J=self.location.href,J=J.indexOf("blob:")!==0?J.split("/").slice(0,-1).join("/")+"/":"",B.read=function(f){var m=new XMLHttpRequest;return m.open("GET",f,!1),m.send(null),m.responseText},O&&(B.readBinary=function(f){var m=new XMLHttpRequest;return m.open("GET",f,!1),m.responseType="arraybuffer",m.send(null),new Uint8Array(m.response)}),B.readAsync=function(f,m,R){var V=new XMLHttpRequest;V.open("GET",f,!0),V.responseType="arraybuffer",V.onload=function(){if(V.status==200||V.status==0&&V.response){m(V.response);return}R()},V.onerror=R,V.send(null)},B.setWindowTitle=function(Q){document.title=Q});var U=B.print||(typeof console<"u"?console.log.bind(console):typeof print<"u"?print:null),_=B.printErr||(typeof printErr<"u"?printErr:typeof console<"u"&&console.warn.bind(console)||U);for(A in x)x.hasOwnProperty(A)&&(B[A]=x[A]);function G(Q){var f=E;return E=E+Q+15&-16,f}function k(Q){var f=o[b>>2],m=f+Q+15&-16;return o[b>>2]=m,m>=Le&&!Ct()?(o[b>>2]=f,0):f}function v(Q,f){return f||(f=16),Q=Math.ceil(Q/f)*f}function Y(Q){switch(Q){case"i1":case"i8":return 1;case"i16":return 2;case"i32":case"float":return 4;case"i64":case"double":return 8;default:if(Q[Q.length-1]==="*")return 4;if(Q[0]!=="i")return 0;var f=parseInt(Q.substr(1));return le(f%8==0),f/8}}function ee(Q){ee.shown||(ee.shown={}),ee.shown[Q]||(ee.shown[Q]=1,_(Q))}x=void 0;var ie={"f64-rem":function(Q,f){return Q%f},debugger:function(){}},Qe=[];function Ie(Q,f){for(var m=0,R=m;R<m+0;R++)if(!Qe[R])return Qe[R]=Q,1+R;throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS."}function Ee(Q){Qe[Q-1]=null}var re={};function ce(Q,f){if(Q){le(f),re[f]||(re[f]={});var m=re[f];return m[Q]||(f.length===1?m[Q]=function(){return W(f,Q)}:f.length===2?m[Q]=function(V){return W(f,Q,[V])}:m[Q]=function(){return W(f,Q,Array.prototype.slice.call(arguments))}),m[Q]}}function pe(Q,f,m){return m?+(Q>>>0)+4294967296*+(f>>>0):+(Q>>>0)+4294967296*+(0|f)}function W(Q,f,m){return m&&m.length?B["dynCall_"+Q].apply(null,[f].concat(m)):B["dynCall_"+Q].call(null,f)}var oe=0,Ge=0;function le(Q,f){Q||yA("Assertion failed: "+f)}function Ue(Q){var f=B["_"+Q];return le(f,"Cannot call unknown function "+Q+", make sure it is exported"),f}var Je={stackSave:function(){vs()},stackRestore:function(){bs()},arrayToC:function(Q){var f,m,R=Pt(Q.length);return f=Q,m=R,n.set(f,m),R},stringToC:function(Q){var f=0;if(Q!=null&&Q!==0){var m=(Q.length<<2)+1;f=Pt(m),ct(Q,f,m)}return f}},UA={string:Je.stringToC,array:Je.arrayToC};function fA(Q,f,m,R,V){var ae=Ue(Q),he=[],Z=0;if(R)for(var Pe=0;Pe<R.length;Pe++){var Se=UA[m[Pe]];Se?(Z===0&&(Z=vs()),he[Pe]=Se(R[Pe])):he[Pe]=R[Pe]}var ke,fe=ae.apply(null,he);return fe=(ke=fe,f==="string"?FA(ke):f==="boolean"?!!ke:ke),Z!==0&&bs(Z),fe}function It(Q,f,m,R){switch((m=m||"i8").charAt(m.length-1)==="*"&&(m="i32"),m){case"i1":case"i8":n[Q>>0]=f;break;case"i16":r[Q>>1]=f;break;case"i32":o[Q>>2]=f;break;case"i64":tempI64=[f>>>0,+mi(tempDouble=f)>=1?tempDouble>0?(0|yi(+On(tempDouble/4294967296),4294967295))>>>0:~~+pi((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0],o[Q>>2]=tempI64[0],o[Q+4>>2]=tempI64[1];break;case"float":I[Q>>2]=f;break;case"double":c[Q>>3]=f;break;default:yA("invalid type for setValue: "+m)}}function us(Q,f,m){switch((f=f||"i8").charAt(f.length-1)==="*"&&(f="i32"),f){case"i1":case"i8":return n[Q>>0];case"i16":return r[Q>>1];case"i32":case"i64":return o[Q>>2];case"float":return I[Q>>2];case"double":return c[Q>>3];default:yA("invalid type for getValue: "+f)}return null}function ms(Q,f,m,R){typeof Q=="number"?(ae=!0,he=Q):(ae=!1,he=Q.length);var V=typeof f=="string"?f:null;if(Z=m==4?R:[typeof Ut=="function"?Ut:G,Pt,G,k][m===void 0?2:m](Math.max(he,V?1:f.length)),ae){for(R=Z,le((3&Z)==0),Pe=Z+(-4&he);R<Pe;R+=4)o[R>>2]=0;for(Pe=Z+he;R<Pe;)n[R++>>0]=0;return Z}if(V==="i8")return Q.subarray||Q.slice?a.set(Q,Z):a.set(new Uint8Array(Q),Z),Z;for(var ae,he,Z,Pe,Se,ke,fe,se=0;se<he;){var We=Q[se];if((Se=V||f[se])===0){se++;continue}Se=="i64"&&(Se="i32"),It(Z+se,We,Se),fe!==Se&&(ke=Y(Se),fe=Se),se+=ke}return Z}function ZA(Q){return d?Ds?Ut(Q):k(Q):G(Q)}function FA(Q,f){if(f===0||!Q)return"";for(var m,R,V,ae=0,he=0;ae|=R=a[Q+he>>0],(R!=0||f)&&(he++,!f||he!=f););f||(f=he);var Z="";if(ae<128){for(;f>0;)V=String.fromCharCode.apply(String,a.subarray(Q,Q+Math.min(f,1024))),Z=Z?Z+V:V,Q+=1024,f-=1024;return Z}return m=Q,(function(Se,ke){for(var fe=ke;Se[fe];)++fe;if(fe-ke>16&&Se.subarray&&Ft)return Ft.decode(Se.subarray(ke,fe));for(var se,We,tA,sA,nA,OA,aA="";;){if(!(se=Se[ke++]))return aA;if(!(128&se)){aA+=String.fromCharCode(se);continue}if(We=63&Se[ke++],(224&se)==192){aA+=String.fromCharCode((31&se)<<6|We);continue}if(tA=63&Se[ke++],(240&se)==224?se=(15&se)<<12|We<<6|tA:(sA=63&Se[ke++],(248&se)==240?se=(7&se)<<18|We<<12|tA<<6|sA:(nA=63&Se[ke++],se=(252&se)==248?(3&se)<<24|We<<18|tA<<12|sA<<6|nA:(1&se)<<30|We<<24|tA<<18|sA<<12|nA<<6|(OA=63&Se[ke++]))),se<65536)aA+=String.fromCharCode(se);else{var Qt=se-65536;aA+=String.fromCharCode(55296|Qt>>10,56320|1023&Qt)}}})(a,m)}function je(Q){for(var f="";;){var m=n[Q++>>0];if(!m)return f;f+=String.fromCharCode(m)}}function ps(Q,f){return(function(R,V,ae){for(var he=0;he<R.length;++he)n[V++>>0]=R.charCodeAt(he);ae||(n[V>>0]=0)})(Q,f,!1)}var Ft=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function WA(Q,f,m,R){if(!(R>0))return 0;for(var V=m,ae=m+R-1,he=0;he<Q.length;++he){var Z=Q.charCodeAt(he);if(Z>=55296&&Z<=57343&&(Z=65536+((1023&Z)<<10)|1023&Q.charCodeAt(++he)),Z<=127){if(m>=ae)break;f[m++]=Z}else if(Z<=2047){if(m+1>=ae)break;f[m++]=192|Z>>6,f[m++]=128|63&Z}else if(Z<=65535){if(m+2>=ae)break;f[m++]=224|Z>>12,f[m++]=128|Z>>6&63,f[m++]=128|63&Z}else if(Z<=2097151){if(m+3>=ae)break;f[m++]=240|Z>>18,f[m++]=128|Z>>12&63,f[m++]=128|Z>>6&63,f[m++]=128|63&Z}else if(Z<=67108863){if(m+4>=ae)break;f[m++]=248|Z>>24,f[m++]=128|Z>>18&63,f[m++]=128|Z>>12&63,f[m++]=128|Z>>6&63,f[m++]=128|63&Z}else{if(m+5>=ae)break;f[m++]=252|Z>>30,f[m++]=128|Z>>24&63,f[m++]=128|Z>>18&63,f[m++]=128|Z>>12&63,f[m++]=128|Z>>6&63,f[m++]=128|63&Z}}return f[m]=0,m-V}function ct(Q,f,m){return WA(Q,a,f,m)}function Ke(Q){for(var f=0,m=0;m<Q.length;++m){var R=Q.charCodeAt(m);R>=55296&&R<=57343&&(R=65536+((1023&R)<<10)|1023&Q.charCodeAt(++m)),R<=127?++f:R<=2047?f+=2:R<=65535?f+=3:R<=2097151?f+=4:R<=67108863?f+=5:f+=6}return f}var uA=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function lt(Q){for(var f=Q,m=f>>1;r[m];)++m;if((f=m<<1)-Q>32&&uA)return uA.decode(a.subarray(Q,f));for(var R=0,V="";;){var ae=r[Q+2*R>>1];if(ae==0)return V;++R,V+=String.fromCharCode(ae)}}function ys(Q,f,m){if(m===void 0&&(m=2147483647),m<2)return 0;for(var R=f,V=(m-=2)<2*Q.length?m/2:Q.length,ae=0;ae<V;++ae){var he=Q.charCodeAt(ae);r[f>>1]=he,f+=2}return r[f>>1]=0,f-R}function mA(Q){return 2*Q.length}function Gt(Q){for(var f=0,m="";;){var R=o[Q+4*f>>2];if(R==0)return m;if(++f,R>=65536){var V=R-65536;m+=String.fromCharCode(55296|V>>10,56320|1023&V)}else m+=String.fromCharCode(R)}}function Mt(Q,f,m){if(m===void 0&&(m=2147483647),m<4)return 0;for(var R=f,V=R+m-4,ae=0;ae<Q.length;++ae){var he=Q.charCodeAt(ae);if(he>=55296&&he<=57343&&(he=65536+((1023&he)<<10)|1023&Q.charCodeAt(++ae)),o[f>>2]=he,(f+=4)+4>V)break}return o[f>>2]=0,f-R}function Tn(Q){for(var f=0,m=0;m<Q.length;++m){var R=Q.charCodeAt(m);R>=55296&&R<=57343&&++m,f+=4}return f}function Un(Q){var f=Ke(Q)+1,m=Ut(f);return m&&WA(Q,n,m,f),m}function Lt(Q){var f=Ke(Q)+1,m=Pt(f);return WA(Q,n,m,f),m}function PA(Q){return Q}function Ss(){var Q,f=(function(){var R=Error();if(!R.stack){try{throw Error(0)}catch(V){R=V}if(!R.stack)return"(no stack trace available)"}return R.stack.toString()})();return B.extraStackTrace&&(f+=`
|
|
2
|
-
`+B.extraStackTrace()),(Q=f).replace(/__Z[\w\d_]+/g,function(m){var R,V=R=m;return m===V?m:m+" ["+V+"]"})}function pA(Q,f){return Q%f>0&&(Q+=f-Q%f),Q}function zA(Q){B.buffer=s=Q}function xA(){B.HEAP8=n=new Int8Array(s),B.HEAP16=r=new Int16Array(s),B.HEAP32=o=new Int32Array(s),B.HEAPU8=a=new Uint8Array(s),B.HEAPU16=i=new Uint16Array(s),B.HEAPU32=h=new Uint32Array(s),B.HEAPF32=I=new Float32Array(s),B.HEAPF64=c=new Float64Array(s)}function Ct(){var Q=B.usingWasm?65536:16777216,f=2147483648-Q;if(o[b>>2]>f)return!1;var m=Le;for(Le=Math.max(Le,16777216);Le<o[b>>2];)Le=Le<=536870912?pA(2*Le,Q):Math.min(pA((3*Le+2147483648)/4,Q),f);var R=B.reallocBuffer(Le);return R&&R.byteLength==Le?(zA(R),xA(),!0):(Le=m,!1)}l=E=p=w=L=F=b=0,d=!1,B.reallocBuffer||(B.reallocBuffer=function(Q){try{if(ArrayBuffer.transfer)f=ArrayBuffer.transfer(s,Q);else{var f,m=n;f=new ArrayBuffer(Q),new Int8Array(f).set(m)}}catch{return!1}return!!Si(f)&&f});try{(S=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get))(new ArrayBuffer(4))}catch{S=function(f){return f.byteLength}}var _A=B.TOTAL_STACK||5242880,Le=B.TOTAL_MEMORY||16777216;function Nt(){return Le}function GA(Q){for(;Q.length>0;){var f=Q.shift();if(typeof f=="function"){f();continue}var m=f.func;typeof m=="number"?f.arg===void 0?B.dynCall_v(m):B.dynCall_vi(m,f.arg):m(f.arg===void 0?null:f.arg)}}Le<_A&&_("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+Le+"! (TOTAL_STACK="+_A+")"),B.buffer?s=B.buffer:(typeof WebAssembly=="object"&&typeof WebAssembly.Memory=="function"?(B.wasmMemory=new WebAssembly.Memory({initial:Le/65536}),s=B.wasmMemory.buffer):s=new ArrayBuffer(Le),B.buffer=s),xA();var Bt=[],ks=[],Pn=[],xn=[],Hn=[],Ds=!1,Qi=!1;function fi(Q){Bt.unshift(Q)}function fh(Q){ks.unshift(Q)}function uh(Q){Pn.unshift(Q)}function mh(Q){xn.unshift(Q)}function ui(Q){Hn.unshift(Q)}function ph(Q,f,m){var R,V;ee("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!"),m&&(R=n[V=f+Ke(Q)]),ct(Q,f,1/0),m&&(n[V]=R)}function yh(Q,f,m){return Q>=0?Q:f<=32?2*Math.abs(1<<f-1)+Q:Math.pow(2,f)+Q}function Sh(Q,f,m){if(Q<=0)return Q;var R=f<=32?Math.abs(1<<f-1):Math.pow(2,f-1);return Q>=R&&(f<=32||Q>R)&&(Q=-2*R+Q),Q}var mi=Math.abs,pi=Math.ceil,On=Math.floor,yi=Math.min,HA=0,ws=null,Et=null;function kh(Q){return Q}B.preloadedImages={},B.preloadedAudios={};var Yn="data:application/octet-stream;base64,";function Tt(Q){return String.prototype.startsWith?Q.startsWith(Yn):Q.indexOf(Yn)===0}(function(){var f="main.wast",m="main.wasm",R="main.temp.asm";Tt(f)||(f=y(f)),Tt(m)||(m=y(m)),Tt(R)||(R=y(R));var V={global:null,env:null,asm2wasm:ie,parent:B},ae=null;function he(fe){return fe}function Z(){try{if(B.wasmBinary)return new Uint8Array(B.wasmBinary);if(B.readBinary)return B.readBinary(m);throw"both async and sync fetching of the wasm failed"}catch(fe){yA(fe)}}B.asmPreload=B.asm;var Pe=B.reallocBuffer,Se=function(fe){fe=pA(fe,B.usingWasm?65536:16777216);var se=B.buffer.byteLength;if(B.usingWasm)try{var We=B.wasmMemory.grow((fe-se)/65536);return We!==-1?B.buffer=B.wasmMemory.buffer:null}catch{return null}};B.reallocBuffer=function(fe){return ke==="asmjs"?Pe(fe):Se(fe)};var ke="";B.asm=function(fe,se,We){var tA;if(!(se=tA=se).table){var sA,nA=B.wasmTableSize;nA===void 0&&(nA=1024);var OA=B.wasmMaxTableSize;typeof WebAssembly=="object"&&typeof WebAssembly.Table=="function"?OA!==void 0?se.table=new WebAssembly.Table({initial:nA,maximum:OA,element:"anyfunc"}):se.table=new WebAssembly.Table({initial:nA,element:"anyfunc"}):se.table=Array(nA),B.wasmTable=se.table}return se.memoryBase||(se.memoryBase=B.STATIC_BASE),se.tableBase||(se.tableBase=0),sA=(function(Qt,$A,Fs){if(typeof WebAssembly!="object")return _("no native wasm support detected"),!1;if(!(B.wasmMemory instanceof WebAssembly.Memory))return _("no native wasm Memory in use"),!1;function xt(CA,BA){if((ae=CA.exports).memory){var ft,Gs,Kn;ft=ae.memory,Gs=B.buffer,ft.byteLength<Gs.byteLength&&_("the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here"),Kn=new Int8Array(Gs),new Int8Array(ft).set(Kn),zA(ft),xA()}B.asm=ae,B.usingWasm=!0,(function(Gh){if(HA--,B.monitorRunDependencies&&B.monitorRunDependencies(HA),HA==0&&(ws!==null&&(clearInterval(ws),ws=null),Et)){var ki=Et;Et=null,ki()}})("wasm-instantiate")}if($A.memory=B.wasmMemory,V.global={NaN:NaN,Infinity:1/0},V["global.Math"]=Math,V.env=$A,HA++,B.monitorRunDependencies&&B.monitorRunDependencies(HA),B.instantiateWasm)try{return B.instantiateWasm(V,xt)}catch(CA){return _("Module.instantiateWasm callback failed with error: "+CA),!1}function jA(CA){xt(CA.instance,CA.module)}function Jn(CA){(!B.wasmBinary&&(q||O)&&typeof fetch=="function"?fetch(m,{credentials:"same-origin"}).then(function(BA){if(!BA.ok)throw"failed to load wasm binary file at '"+m+"'";return BA.arrayBuffer()}).catch(function(){return Z()}):new Promise(function(BA,ft){BA(Z())})).then(function(BA){return WebAssembly.instantiate(BA,V)}).then(CA).catch(function(BA){_("failed to asynchronously prepare wasm: "+BA),yA(BA)})}return B.wasmBinary||typeof WebAssembly.instantiateStreaming!="function"||Tt(m)||typeof fetch!="function"?Jn(jA):WebAssembly.instantiateStreaming(fetch(m,{credentials:"same-origin"}),V).then(jA).catch(function(CA){_("wasm streaming compile failed: "+CA),_("falling back to ArrayBuffer instantiation"),Jn(jA)}),{}})(fe,se,We),le(sA,"no binaryen method succeeded."),sA},B.asm})(),E=(l=1024)+4816,ks.push(),B.STATIC_BASE=l,B.STATIC_BUMP=4816;var eA=E;function Dh(Q){n[eA]=n[Q],n[eA+1]=n[Q+1],n[eA+2]=n[Q+2],n[eA+3]=n[Q+3]}function wh(Q){n[eA]=n[Q],n[eA+1]=n[Q+1],n[eA+2]=n[Q+2],n[eA+3]=n[Q+3],n[eA+4]=n[Q+4],n[eA+5]=n[Q+5],n[eA+6]=n[Q+6],n[eA+7]=n[Q+7]}function bh(Q,f,m){var R=m>0?m:Ke(Q)+1,V=Array(R),ae=WA(Q,V,0,V.length);return f&&(V.length=ae),V}function vh(Q){for(var f=[],m=0;m<Q.length;m++){var R=Q[m];R>255&&(R&=255),f.push(String.fromCharCode(R))}return f.join("")}E+=16,b=G(4),L=(p=w=v(E))+_A,F=v(L),o[b>>2]=F,d=!0,B.wasmTableSize=4,B.wasmMaxTableSize=4,B.asmGlobalArg={},B.asmLibraryArg={abort:yA,assert:le,enlargeMemory:Ct,getTotalMemory:Nt,abortOnCannotGrowMemory:function(){yA("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+Le+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")},invoke_iii:function(f,m,R){var V=vs();try{return B.dynCall_iii(f,m,R)}catch(ae){if(bs(V),typeof ae!="number"&&ae!=="longjmp")throw ae;B.setThrew(1,0)}},___assert_fail:function(f,m,R,V){yA("Assertion failed: "+FA(f)+", at: "+[m?FA(m):"unknown filename",R,V?FA(V):"unknown function"])},___setErrNo:function(f){return B.___errno_location&&(o[B.___errno_location()>>2]=f),f},_abort:function(){B.abort()},_emscripten_memcpy_big:function(f,m,R){return a.set(a.subarray(m,m+R),f),f},_llvm_floor_f64:On,DYNAMICTOP_PTR:b,tempDoublePtr:eA,ABORT:oe,STACKTOP:w,STACK_MAX:L};var qn=B.asm(B.asmGlobalArg,B.asmLibraryArg,s);B.asm=qn,B.___errno_location=function(){return B.asm.___errno_location.apply(null,arguments)};var Si=B._emscripten_replace_memory=function(){return B.asm._emscripten_replace_memory.apply(null,arguments)};B._free=function(){return B.asm._free.apply(null,arguments)};var Ut=B._malloc=function(){return B.asm._malloc.apply(null,arguments)};B._memcpy=function(){return B.asm._memcpy.apply(null,arguments)},B._memset=function(){return B.asm._memset.apply(null,arguments)},B._sbrk=function(){return B.asm._sbrk.apply(null,arguments)},B._stb_vorbis_js_channels=function(){return B.asm._stb_vorbis_js_channels.apply(null,arguments)},B._stb_vorbis_js_close=function(){return B.asm._stb_vorbis_js_close.apply(null,arguments)},B._stb_vorbis_js_decode=function(){return B.asm._stb_vorbis_js_decode.apply(null,arguments)},B._stb_vorbis_js_open=function(){return B.asm._stb_vorbis_js_open.apply(null,arguments)},B._stb_vorbis_js_sample_rate=function(){return B.asm._stb_vorbis_js_sample_rate.apply(null,arguments)},B.establishStackSpace=function(){return B.asm.establishStackSpace.apply(null,arguments)},B.getTempRet0=function(){return B.asm.getTempRet0.apply(null,arguments)},B.runPostSets=function(){return B.asm.runPostSets.apply(null,arguments)},B.setTempRet0=function(){return B.asm.setTempRet0.apply(null,arguments)},B.setThrew=function(){return B.asm.setThrew.apply(null,arguments)};var Pt=B.stackAlloc=function(){return B.asm.stackAlloc.apply(null,arguments)},bs=B.stackRestore=function(){return B.asm.stackRestore.apply(null,arguments)},vs=B.stackSave=function(){return B.asm.stackSave.apply(null,arguments)};function dt(Q){this.name="ExitStatus",this.message="Program terminated with exit("+Q+")",this.status=Q}function Rs(Q){Q=Q||B.arguments,!(HA>0)&&((function(){if(B.preRun)for(typeof B.preRun=="function"&&(B.preRun=[B.preRun]);B.preRun.length;)fi(B.preRun.shift());GA(Bt)})(),!(HA>0)&&(B.calledRun||(B.setStatus?(B.setStatus("Running..."),setTimeout(function(){setTimeout(function(){B.setStatus("")},1),f()},1)):f())));function f(){!B.calledRun&&(B.calledRun=!0,oe||(Ds||(Ds=!0,GA(ks)),GA(Pn),B.onRuntimeInitialized&&B.onRuntimeInitialized(),(function(){if(B.postRun)for(typeof B.postRun=="function"&&(B.postRun=[B.postRun]);B.postRun.length;)ui(B.postRun.shift());GA(Hn)})()))}}function Rh(Q,f){(!f||!B.noExitRuntime||Q!==0)&&(B.noExitRuntime||(oe=!0,Ge=Q,w=H,GA(xn),Qi=!0,B.onExit&&B.onExit(Q)),B.quit(Q,new dt(Q)))}function yA(Q){throw B.onAbort&&B.onAbort(Q),Q!==void 0?(U(Q),_(Q),Q=JSON.stringify(Q)):Q="",oe=!0,Ge=1,"abort("+Q+"). Build with -s ASSERTIONS=1 for more info."}if(B.dynCall_iii=function(){return B.asm.dynCall_iii.apply(null,arguments)},B.asm=qn,B.ccall=fA,B.cwrap=function(f,m,R,V){var ae=(R=R||[]).every(function(he){return he==="number"});return m!=="string"&&ae&&!V?Ue(f):function(){return fA(f,m,R,arguments,V)}},dt.prototype=Error(),dt.prototype.constructor=dt,Et=function Q(){B.calledRun||Rs(),B.calledRun||(Et=Q)},B.run=Rs,B.abort=yA,B.preInit)for(typeof B.preInit=="function"&&(B.preInit=[B.preInit]);B.preInit.length>0;)B.preInit.pop()();B.noExitRuntime=!0,Rs(),B.onRuntimeInitialized=()=>{$n=!0,Ha()},wt.decode=function(Q){return(function(m){if(!$n)throw Error("SF3 decoder has not been initialized yet. Did you await synth.isReady?");var R={};function V($A){return new Int32Array(B.HEAPU8.buffer,$A,1)[0]}function ae($A,Fs){var xt=new ArrayBuffer(Fs*Float32Array.BYTES_PER_ELEMENT),jA=new Float32Array(xt);return jA.set(new Float32Array(B.HEAPU8.buffer,$A,Fs)),jA}R.open=B.cwrap("stb_vorbis_js_open","number",[]),R.close=B.cwrap("stb_vorbis_js_close","void",["number"]),R.channels=B.cwrap("stb_vorbis_js_channels","number",["number"]),R.sampleRate=B.cwrap("stb_vorbis_js_sample_rate","number",["number"]),R.decode=B.cwrap("stb_vorbis_js_decode","number",["number","number","number","number","number"]);var he,Z,Pe,Se,ke=R.open(),fe=(he=m,Z=m.byteLength,Pe=B._malloc(Z),(Se=new Uint8Array(B.HEAPU8.buffer,Pe,Z)).set(new Uint8Array(he,0,Z)),Se),se=B._malloc(4),We=B._malloc(4),tA=R.decode(ke,fe.byteOffset,fe.byteLength,se,We);if(B._free(fe.byteOffset),tA<0)throw R.close(ke),B._free(se),Error("stbvorbis decode failed: "+tA);for(var sA=R.channels(ke),nA=Array(sA),OA=new Int32Array(B.HEAPU32.buffer,V(se),sA),aA=0;aA<sA;aA++)nA[aA]=ae(OA[aA],tA),B._free(OA[aA]);var Qt=R.sampleRate(ke);return R.close(ke),B._free(V(se)),B._free(se),{data:nA,sampleRate:Qt,eof:!0,error:null}})(Q)}})();var cs=wt,kr={enableEventSystem:!0,maxBufferSize:Ti,initialTime:0,enableEffects:!0},$s=class{pitch=0;gain=1;exclusiveClass=0;pan=64;reverbGain=0;chorusGain=1;delayGain=1;rxNoteOn=!0;rxNoteOff=!1;copyInto(A){return this.pitch=A.pitch,this.chorusGain=A.chorusGain,this.reverbGain=A.reverbGain,this.exclusiveClass=A.exclusiveClass,this.gain=A.gain,this.pan=A.pan,this.rxNoteOff=A.rxNoteOff,this.rxNoteOn=A.rxNoteOn,this}},jn=class js{patch;lockPreset;lockedSystem;midiControllers;lockedControllers;customControllers;channelVibrato;keyShift;octaveTuning;drumParams;isMuted;drumChannel;channelNumber;constructor(e,t,s,n,a,r,i,o,h,I,c,l,E){this.patch=e,this.lockPreset=t,this.lockedSystem=s,this.midiControllers=n,this.lockedControllers=a,this.customControllers=r,this.channelVibrato=i,this.keyShift=o,this.octaveTuning=h,this.drumParams=I,this.isMuted=c,this.drumChannel=l,this.channelNumber=E}static copyFrom(e){return new js({...e.patch},e.lockPreset,e.lockedSystem,e.midiControllers.slice(),[...e.lockedControllers],e.customControllers.slice(),{...e.channelVibrato},e.keyShift,e.octaveTuning.slice(),e.drumParams.map(t=>new $s().copyInto(t)),e.isMuted,e.drumChannel,e.channelNumber)}static create(e,t){let s=e.midiChannels[t];return new js({...s.patch,name:s?.preset?.name??"undefined"},s.lockPreset,s.lockedSystem,s.midiControllers.slice(),[...s.lockedControllers],s.customControllers.slice(),{...s.channelVibrato},s.keyShift,s.octaveTuning.slice(),s.drumParams.map(n=>new $s().copyInto(n)),s.isMuted,s.drumChannel,t)}apply(e){let t=e.midiChannels[this.channelNumber];t.muteChannel(this.isMuted),t.setDrums(this.drumChannel),t.midiControllers.set(this.midiControllers),t.lockedControllers=this.lockedControllers,t.customControllers.set(this.customControllers),t.updateChannelTuning(),t.channelVibrato.rate=this.channelVibrato.rate,t.channelVibrato.delay=this.channelVibrato.delay,t.channelVibrato.depth=this.channelVibrato.depth,t.keyShift=this.keyShift,t.octaveTuning.set(this.octaveTuning);for(let s=0;s<128;s++)this.drumParams[s].copyInto(t.drumParams[s]);t.setPresetLock(!1),t.setPatch(this.patch),t.setPresetLock(this.lockPreset),t.lockedSystem=this.lockedSystem}};var Dr=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 Ts(A,e,t,s,n,a=0){let i=128-(e+t+s+n.reduce((o,h)=>o+h,0))%128&127;A.systemExclusive([65,16,66,18,e,t,s,...n,i,247],a)}var wn=class en{channelSnapshots;keyMappings;masterParameters;reverbSnapshot;chorusSnapshot;delaySnapshot;insertionSnapshot;constructor(e,t,s,n,a,r,i){this.channelSnapshots=e,this.masterParameters=t,this.keyMappings=s,this.reverbSnapshot=n,this.chorusSnapshot=a,this.delaySnapshot=r,this.insertionSnapshot=i}static create(e){let t=e.midiChannels.map((s,n)=>jn.create(e,n));return new en(t,e.getAllMasterParameters(),e.keyModifierManager.getMappings(),e.reverbProcessor.getSnapshot(),e.chorusProcessor.getSnapshot(),e.delayProcessor.getSnapshot(),e.getInsertionSnapshot())}static copyFrom(e){return new en(e.channelSnapshots.map(t=>jn.copyFrom(t)),{...e.masterParameters},[...e.keyMappings],{...e.reverbSnapshot},{...e.chorusSnapshot},{...e.delaySnapshot},{...e.insertionSnapshot})}apply(e){for(e.keyModifierManager.setMappings(this.keyMappings);e.midiChannels.length<this.channelSnapshots.length;)e.createMIDIChannel();for(let n of this.channelSnapshots)n.apply(e);for(let[n,a]of Object.entries(this.reverbSnapshot))e.reverbProcessor[n]=a;for(let[n,a]of Object.entries(this.chorusSnapshot))e.chorusProcessor[n]=a;for(let[n,a]of Object.entries(this.delaySnapshot))e.delayProcessor[n]=a;let t=this.insertionSnapshot;Ts(e,64,3,0,[t.type>>8,t.type&127]);for(let n=0;n<t.params.length;n++)t.params[n]!==255&&Ts(e,64,3,3+n,[t.params[n]]);for(let n=0;n<t.channels.length;n++)Ts(e,64,64|Sn(n),34,[t.channels[n]?1:0]);let s=Object.entries(this.masterParameters);for(let[n,a]of s)e.setMasterParameter(n,a)}},Oa={masterGain:Ni,masterPan:0,voiceCap:Fi,interpolationType:zi.hermite,midiSystem:fn,monophonicRetriggerMode:!1,reverbGain:1,chorusGain:1,delayGain:1,reverbLock:!1,chorusLock:!1,delayLock:!1,drumLock:!1,customVibratoLock:!1,nprnParamLock:!1,insertionEffectLock:!1,blackMIDIMode:!1,autoAllocateVoices:!1,transposition:0,deviceID:ht},bn=-15e3,wr=15e3,An=new Float32Array(wr-bn+1);for(let A=0;A<An.length;A++){let e=bn+A;An[A]=Math.pow(2,e/1200)}function ss(A){return A<=-32767?0:An[A-bn]}var ns=-2e4,Ya=16500,tn=new Float32Array(Ya-ns+1);for(let A=0;A<tn.length;A++){let e=ns+A;tn[A]=440*Math.pow(2,(e-6900)/1200)}function sn(A){return A<ns||A>Ya?440*Math.pow(2,(A-6900)/1200):tn[A-ns|0]}var vn=-16600,br=16e3,nn=new Float32Array(br-vn+1);for(let A=0;A<nn.length;A++){let e=vn+A;nn[A]=Math.pow(10,-e/200)}function DA(A){return nn[A-vn|0]}var vr=.03,Rn=class pt{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){pt.smoothingConstant=vr*(44100/e);let t=new pt(e);t.resonanceCb=0;for(let s=1500;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=pt.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=sn(e);n=Math.min(n,this.maxCutoff);let a=DA(-(t-3.01)),r=1/Math.sqrt(DA(-t)),i=2*Math.PI*n/this.sampleRate,o=Math.cos(i),h=Math.sin(i)/(2*a),I=(1-o)*r,c=I/2,l=c,E=1+h,d=-2*o,p=1-h,w={a0:c/E,a1:I/E,a2:l/E,a3:d/E,a4:p/E};this.a0=w.a0,this.a1=w.a1,this.a2=w.a2,this.a3=w.a3,this.a4=w.a4,pt.cachedCoefficients.set(t+e*961,w)}},iA=960,qt=900,Rr=.01,Fr=class{sampleRate;attenuationCb=iA;state=0;sampleTime=0;releaseStartCb=iA;releaseStartTimeSamples=0;attackDuration=0;decayDuration=0;releaseDuration=0;sustainCb=0;delayEnd=0;attackEnd=0;holdEnd=0;decayEnd=0;enteredRelease=!1;canEndOnSilentSustain=!1;gainSmoothing;currentGain=0;constructor(A){this.sampleRate=A,this.gainSmoothing=Rr*(44100/A)}process(A,e,t,s){if(this.enteredRelease)return this.releasePhase(A,e,t,s);switch(this.state){case 0:return this.delayPhase(A,e,t,s,0);case 1:return this.attackPhase(A,e,t,s,0);case 2:return this.holdPhase(A,e,t,s,0);case 3:return this.decayPhase(A,e,t,s,0);case 4:return this.sustainPhase(A,e,t,s,0)}}startRelease(A){this.releaseStartTimeSamples=this.sampleTime;let e=A.overrideReleaseVolEnv||A.modulatedGenerators[g.releaseVolEnv];if(this.releaseDuration=this.timecentsToSamples(Math.max(-7200,e)),this.enteredRelease)this.releaseStartCb=this.attenuationCb;else{let s=Math.max(0,Math.min(iA,this.sustainCb)),n=s/iA,a=(60-A.targetKey)*A.modulatedGenerators[g.keyNumToVolEnvDecay];switch(this.decayDuration=this.timecentsToSamples(A.modulatedGenerators[g.decayVolEnv]+a)*n,this.state){case 0:{this.releaseStartCb=iA;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,iA)),this.attenuationCb=this.releaseStartCb}this.enteredRelease=!0;let t=(iA-this.releaseStartCb)/iA;this.releaseDuration*=t,this.releaseStartCb>=qt&&(A.isActive=!1)}init(A){this.enteredRelease=!1,this.state=0,this.sampleTime=0,this.canEndOnSilentSustain=A.modulatedGenerators[g.sustainVolEnv]>=qt,this.currentGain=DA(A.modulatedGenerators[g.initialAttenuation]),this.sustainCb=Math.min(iA,A.modulatedGenerators[g.sustainVolEnv]),this.attackDuration=this.timecentsToSamples(A.modulatedGenerators[g.attackVolEnv]);let e=(60-A.targetKey)*A.modulatedGenerators[g.keyNumToVolEnvDecay],t=this.sustainCb/iA;this.decayDuration=this.timecentsToSamples(A.modulatedGenerators[g.decayVolEnv]+e)*t,this.delayEnd=this.timecentsToSamples(A.modulatedGenerators[g.delayVolEnv]),this.attackEnd=this.attackDuration+this.delayEnd;let s=(60-A.targetKey)*A.modulatedGenerators[g.keyNumToVolEnvHold];this.holdEnd=this.timecentsToSamples(A.modulatedGenerators[g.holdVolEnv]+s)+this.attackEnd,this.decayEnd=this.decayDuration+this.holdEnd,this.attackEnd===0&&(this.state=2)}timecentsToSamples(A){return Math.max(0,Math.floor(ss(A)*this.sampleRate))}releasePhase(A,e,t,s){let{sampleTime:n,currentGain:a,attenuationCb:r}=this,{releaseStartTimeSamples:i,releaseStartCb:o,releaseDuration:h,gainSmoothing:I}=this,c=n-i,l=iA-o,E=!1;a!==t&&(E=!0);for(let d=0;d<A;d++)E&&(a+=(t-a)*I),r=c/h*l+o,e[d]*=DA(r+s)*a,n++,c++;return this.sampleTime=n,this.currentGain=a,this.attenuationCb=r,r<qt}delayPhase(A,e,t,s,n){let{delayEnd:a}=this,{sampleTime:r}=this;if(r<a){this.attenuationCb=iA;let i=Math.min(a-r,A);if(e.fill(0,n,n+i),n+=i,r+=i,n>=A)return this.sampleTime=r,!0}return this.sampleTime=r,this.state++,this.attackPhase(A,e,t,s,n)}attackPhase(A,e,t,s,n){let{attackEnd:a,attackDuration:r,gainSmoothing:i}=this,{sampleTime:o,currentGain:h}=this,I=h!==t;if(o<a){this.attenuationCb=0;let c=DA(s);for(;o<a;){I&&(h+=(t-h)*i);let l=1-(a-o)/r;if(e[n]*=l*h*c,o++,++n>=A)return this.sampleTime=o,this.currentGain=h,!0}}return this.sampleTime=o,this.currentGain=h,this.state++,this.holdPhase(A,e,t,s,n)}holdPhase(A,e,t,s,n){let{holdEnd:a,gainSmoothing:r}=this,{sampleTime:i,currentGain:o}=this,h=o!==t;if(i<a){this.attenuationCb=0;let I=DA(s);for(;i<a;)if(h&&(o+=(t-o)*r),e[n]*=o*I,i++,++n>=A)return this.sampleTime=i,this.currentGain=o,!0}return this.sampleTime=i,this.currentGain=o,this.state++,this.decayPhase(A,e,t,s,n)}decayPhase(A,e,t,s,n){let{decayDuration:a,decayEnd:r,gainSmoothing:i,sustainCb:o}=this,{sampleTime:h,currentGain:I,attenuationCb:c}=this,l=I!==t;if(h<r){for(;h<r;)if(l&&(I+=(t-I)*i),c=(1-(r-h)/a)*o,e[n]*=I*DA(c+s),h++,++n>=A)return this.sampleTime=h,this.currentGain=I,this.attenuationCb=c,!0}return this.sampleTime=h,this.currentGain=I,this.attenuationCb=c,this.state++,this.sustainPhase(A,e,t,s,n)}sustainPhase(A,e,t,s,n){let{sustainCb:a,gainSmoothing:r}=this;if(this.canEndOnSilentSustain&&a>=qt)return e.fill(0,n,A),!1;let{sampleTime:i,currentGain:o}=this,h=o!==t;if(n<A)for(this.attenuationCb=a;n<A;)h&&(o+=(t-o)*r),e[n]*=o*DA(a+s),i++,n++;return this.sampleTime=i,this.currentGain=o,!0}},ze=16384,as=Object.keys(me).length,qa=4,wA=new Float32Array(ze+1),KA=new Float32Array(ze+1);wA[0]=0;wA[wA.length-1]=1;KA[0]=0;KA[KA.length-1]=1;for(let A=1;A<ze-1;A++){let e=-.4166666666666667*Math.log(A/(wA.length-1))/Math.LN10;KA[A]=1-e,wA[wA.length-1-A]=e}function Ja(A,e,t){let s=!!(A&2);switch(A&1&&(t=1-t),e){case me.linear:return s?t*2-1:t;case me.switch:return t=t>.5?1:0,s?t*2-1:t;case me.concave:return s?(t=t*2-1,t<0?-wA[Math.trunc(t*-ze)]:wA[Math.trunc(t*ze)]):wA[Math.trunc(t*ze)];case me.convex:return s?(t=t*2-1,t<0?-KA[Math.trunc(t*-ze)]:KA[Math.trunc(t*ze)]):KA[Math.trunc(t*ze)]}}var Us=1,an=new Float32Array(1e3);for(let A=0;A<an.length;A++)an[A]=Ja(0,me.convex,A/1e3);var Gr=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=an[~~((1-(this.attackEnd-e)/this.attackDuration)*1e3)]:e<this.holdEnd?this.currentValue=Us:e<this.decayEnd?this.currentValue=(1-(this.decayEnd-e)/this.decayDuration)*(this.sustainLevel-Us)+Us:this.currentValue=this.sustainLevel,this.currentValue)}startRelease(A){this.releaseStartLevel=this.currentValue,this.enteredRelease=!0;let e=this.tc2Sec(Math.max(A.modulatedGenerators[g.releaseModEnv],-7200));this.releaseDuration=e*this.releaseStartLevel}init(A){this.enteredRelease=!1,this.sustainLevel=1-A.modulatedGenerators[g.sustainModEnv]/1e3,this.attackDuration=this.tc2Sec(A.modulatedGenerators[g.attackModEnv]);let e=(60-A.midiNote)*A.modulatedGenerators[g.keyNumToModEnvDecay],t=this.tc2Sec(A.modulatedGenerators[g.decayModEnv]+e);this.decayDuration=t*(1-this.sustainLevel);let s=(60-A.midiNote)*A.modulatedGenerators[g.keyNumToModEnvHold];this.holdDuration=this.tc2Sec(s+A.modulatedGenerators[g.holdModEnv]),this.delayEnd=A.startTime+this.tc2Sec(A.modulatedGenerators[g.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:ss(A)}};function JA(A,e){return(A>>e&1)>0}function Ps(A){return A?1:0}var IA=class rn{isBipolar;isNegative;index;isCC;curveType;constructor(e=Ae.noController,t=me.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(u).find(e=>u[e]===this.index)??this.index.toString():Object.keys(Ae).find(e=>Ae[e]===this.index)??this.index.toString()}get curveTypeName(){return Object.keys(me).find(e=>me[e]===this.curveType)??this.curveType.toString()}static fromSourceEnum(e){let t=JA(e,9),s=JA(e,8),n=JA(e,7),a=e&127,r=e>>10&3;return new rn(a,r,n,t,s)}static copyFrom(e){return new rn(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|Ps(this.isBipolar)<<9|Ps(this.isNegative)<<8|Ps(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[this.index];else switch(this.index){case Ae.noController:{n=16383;break}case Ae.noteOnKeyNum:{n=s.midiNote<<7;break}case Ae.noteOnVelocity:{n=s.velocity<<7;break}case Ae.polyPressure:{n=s.pressure<<7;break}case Ae.pitchWheel:{n=t;break}default:{n=e[this.index+ve];break}}let a=(this.isBipolar?2:0)|(this.isNegative?1:0);return Ka[ze*(this.curveType*as+a)+n]}},Ka=new Float32Array(ze*qa*as);for(let A=0;A<as;A++)for(let e=0;e<qa;e++){let t=ze*(A*as+e);for(let s=0;s<ze;s++)Ka[t+s]=Ja(e,A,s/ze)}var St=10;function hA(A,e,t,s,n){return new IA(n,A,s,e,t).toSourceEnum()}var Va=hA(me.linear,!0,!1,!0,u.filterResonance),Fe=class on{destination=g.initialAttenuation;transformAmount=0;transformType=0;isEffectModulator=!1;isDefaultResonantModulator=!1;primarySource;secondarySource;constructor(e=new IA,t=new IA,s=g.INVALID,n=0,a=0,r=!1,i=!1){this.primarySource=e,this.secondarySource=t,this.destination=s,this.transformAmount=n,this.transformType=a,this.isEffectModulator=r,this.isDefaultResonantModulator=i}get destinationName(){return Object.keys(g).find(e=>g[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 on(IA.copyFrom(e.primarySource),IA.copyFrom(e.secondarySource),e.destination,e.transformAmount,e.transformType,e.isEffectModulator,e.isDefaultResonantModulator)}toString(){return`Source: ${this.primarySource.toString()}
|
|
1
|
+
var OA=(A=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(A,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):A)(function(A){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+A+'" is not supported')});var Di=(A=>typeof OA<"u"?OA:typeof Proxy<"u"?new Proxy(A,{get:(e,t)=>(typeof OA<"u"?OA:e)[t]}):A)(function(A){if(typeof OA<"u")return OA.apply(this,arguments);throw Error('Dynamic require of "'+A+'" is not supported')});function ht(A,e,t=0){let s=0;for(let n=0;n<e;n++)s=s<<8|A[t+n];return s>>>0}function at(A,e){let t=ht(A,e,A.currentIndex);return A.currentIndex+=e,t}function Ot(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 V(A,e){let t=pa(A,e,A.currentIndex);return A.currentIndex+=e,t}function pa(A,e,t=0){let s=0;for(let n=0;n<e;n++)s|=A[t+n]<<n*8;return s>>>0}function wt(A,e,t){for(let s=0;s<t;s++)A[A.currentIndex++]=e>>s*8&255}function te(A,e){A[A.currentIndex++]=e&255,A[A.currentIndex++]=e>>8}function de(A,e){wt(A,e,4)}function dn(A,e){let t=e<<8|A;return t>32767?t-65536:t}function wi(A){return A>127?A-256:A}var $=class extends Uint8Array{currentIndex=0;slice(A,e){let t=super.slice(A,e);return t.currentIndex=0,t}};function cA(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 pe(A,e){let t=A.currentIndex;return A.currentIndex+=e,cA(A,e,t)}function fA(A,e=!1,t=!1){let s=A.length;e&&s++,t&&s%2!==0&&s++;let n=new $(s);return Ne(n,A),n}function Ne(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 De(A){let e=0;for(;A;){let t=A[A.currentIndex++];if(e=e<<7|t&127,t>>7!==1)break}return e}function Ns(A){let e=[A&127];for(A>>=7;A>0;)e.unshift(A&127|128),A>>=7;return e}function _s(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 gs(A){let e="";for(let t of A){let s=t.toString(16).padStart(2,"0").toUpperCase();e+=s,e+=" "}return e}var l={warn:"color: orange;",unrecognized:"color: red;",info:"color: aqua;",recognized:"color: lime",value:"color: yellow; background-color: black;"},ya;(()=>{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]),o=function(b,G){for(var K=new e(31),ee=0;ee<31;++ee)K[ee]=G+=1<<b[ee-1];for(var ie=new t(K[30]),ee=1;ee<30;++ee)for(var Ee=K[ee];Ee<K[ee+1];++Ee)ie[Ee]=Ee-K[ee]<<5|ee;return{b:K,r:ie}},i=o(s,2),r=i.b,h=i.r;r[28]=258,h[258]=28;var c=o(n,0),I=c.b,E=c.r,B=new e(32768);for(F=0;F<32768;++F)d=(F&43690)>>1|(F&21845)<<1,d=(d&52428)>>2|(d&13107)<<2,d=(d&61680)>>4|(d&3855)<<4,B[F]=((d&65280)>>8|(d&255)<<8)>>1;var d,F,y=function(b,G,K){for(var ee=b.length,ie=0,Ee=new e(G);ie<ee;++ie)b[ie]&&++Ee[b[ie]-1];var oe=new e(G);for(ie=1;ie<G;++ie)oe[ie]=oe[ie-1]+Ee[ie-1]<<1;var le;if(K){le=new e(1<<G);var re=15-G;for(ie=0;ie<ee;++ie)if(b[ie])for(var Ie=ie<<4|b[ie],ke=G-b[ie],_=oe[b[ie]-1]++<<ke,ce=_|(1<<ke)-1;_<=ce;++_)le[B[_]>>re]=Ie}else for(le=new e(ee),ie=0;ie<ee;++ie)b[ie]&&(le[ie]=B[oe[b[ie]-1]++]>>15-b[ie]);return le},D=new A(288);for(F=0;F<144;++F)D[F]=8;var F;for(F=144;F<256;++F)D[F]=9;var F;for(F=256;F<280;++F)D[F]=7;var F;for(F=280;F<288;++F)D[F]=8;var F,M=new A(32);for(F=0;F<32;++F)M[F]=5;var F,w=y(D,9,1),S=y(M,5,1),P=function(b){for(var G=b[0],K=1;K<b.length;++K)b[K]>G&&(G=b[K]);return G},C=function(b,G,K){var ee=G/8|0;return(b[ee]|b[ee+1]<<8)>>(G&7)&K},x=function(b,G){var K=G/8|0;return(b[K]|b[K+1]<<8|b[K+2]<<16)>>(G&7)},J=function(b){return(b+7)/8|0},Y=function(b,G,K){return(G==null||G<0)&&(G=0),(K==null||K>b.length)&&(K=b.length),new A(b.subarray(G,K))},T=["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(b,G,K){var ee=new Error(G||T[b]);if(ee.code=b,Error.captureStackTrace&&Error.captureStackTrace(ee,U),!K)throw ee;return ee},q=function(b,G,K,ee){var ie=b.length,Ee=ee?ee.length:0;if(!ie||G.f&&!G.l)return K||new A(0);var oe=!K,le=oe||G.i!=2,re=G.i;oe&&(K=new A(ie*3));var Ie=function(Tt){var FA=K.length;if(Tt>FA){var Bt=new A(Math.max(FA*2,Tt));Bt.set(K),K=Bt}},ke=G.f||0,_=G.p||0,ce=G.b||0,Te=G.l,Be=G.d,Ue=G.m,Je=G.n,TA=ie*8;do{if(!Te){ke=C(b,_,1);var uA=C(b,_+1,3);if(_+=3,uA)if(uA==1)Te=w,Be=S,Ue=9,Je=5;else if(uA==2){var It=C(b,_,31)+257,ps=C(b,_+10,15)+4,ys=It+C(b,_+5,31)+1;_+=14;for(var WA=new A(ys),RA=new A(19),je=0;je<ps;++je)RA[a[je]]=C(b,_+je*3,7);_+=ps*3;for(var Ss=P(RA),Gt=(1<<Ss)-1,zA=y(RA,Ss,1),je=0;je<ys;){var lt=zA[C(b,_,Gt)];_+=lt&15;var Ke=lt>>4;if(Ke<16)WA[je++]=Ke;else{var mA=0,Ct=0;for(Ke==16?(Ct=3+C(b,_,3),_+=2,mA=WA[je-1]):Ke==17?(Ct=3+C(b,_,7),_+=3):Ke==18&&(Ct=11+C(b,_,127),_+=7);Ct--;)WA[je++]=mA}}var ks=WA.subarray(0,It),pA=WA.subarray(It);Ue=P(ks),Je=P(pA),Te=y(ks,Ue,1),Be=y(pA,Je,1)}else U(1);else{var Ke=J(_)+4,Mt=b[Ke-4]|b[Ke-3]<<8,Lt=Ke+Mt;if(Lt>ie){re&&U(0);break}le&&Ie(ce+Mt),K.set(b.subarray(Ke,Lt),ce),G.b=ce+=Mt,G.p=_=Lt*8,G.f=ke;continue}if(_>TA){re&&U(0);break}}le&&Ie(ce+131072);for(var Un=(1<<Ue)-1,Pn=(1<<Je)-1,Nt=_;;Nt=_){var mA=Te[x(b,_)&Un],UA=mA>>4;if(_+=mA&15,_>TA){re&&U(0);break}if(mA||U(2),UA<256)K[ce++]=UA;else if(UA==256){Nt=_,Te=null;break}else{var Ds=UA-254;if(UA>264){var je=UA-257,yA=s[je];Ds=C(b,_,(1<<yA)-1)+r[je],_+=yA}var _A=Be[x(b,_)&Pn],PA=_A>>4;_A||U(3),_+=_A&15;var pA=I[PA];if(PA>3){var yA=n[PA];pA+=x(b,_)&(1<<yA)-1,_+=yA}if(_>TA){re&&U(0);break}le&&Ie(ce+131072);var Et=ce+Ds;if(ce<pA){var $A=Ee-pA,Me=Math.min(pA,Et);for($A+ce<0&&U(3);ce<Me;++ce)K[ce]=ee[$A+ce]}for(;ce<Et;++ce)K[ce]=K[ce-pA]}}G.l=Te,G.p=Nt,G.b=ce,G.f=ke,Te&&(ke=1,G.m=Ue,G.d=Be,G.n=Je)}while(!ke);return ce!=K.length&&oe?Y(K,0,ce):K.subarray(0,ce)},m=new A(0);function v(b,G){return q(b,{i:2},G&&G.out,G&&G.dictionary)}var H=typeof TextDecoder<"u"&&new TextDecoder,O=0;try{H.decode(m,{stream:!0}),O=1}catch{}ya=v})();var Sa=ya,ka=!1,Da=!0,cs=!1;function wa(A,e,t){ka=A,Da=e,cs=t}function k(...A){ka&&console.info(...A)}function ne(...A){Da&&console.warn(...A)}function tA(...A){cs&&console.group(...A)}function Xe(...A){cs&&console.groupCollapsed(...A)}function j(){cs&&console.groupEnd()}var ba=class{header;size;data;constructor(A,e,t){this.header=A,this.size=e,this.data=t}};function ge(A,e=!0,t=!1){let s=pe(A,4),n=V(A,4);s===""&&(n=0);let a=e?A.slice(A.currentIndex,A.currentIndex+n):new $(0);return(e||t)&&(A.currentIndex+=n,n%2!==0&&A.currentIndex++),new ba(s,n,a)}function Qe(A,e,t=!1,s=!1){if(A.length!==4)throw new Error(`Invalid header length: ${A}`);let n=8,a=A,o=e.length;t&&o++;let i=o;s&&(n+=4,i+=4,a="LIST");let r=n+o;r%2!==0&&r++;let h=new $(r);return Ne(h,a),de(h,i),s&&Ne(h,A),h.set(e,n),h}function Ze(A,e,t=!1){let s=8,n=A,a=e.reduce((h,c)=>c.length+h,0),o=a;t&&(s+=4,o+=4,n="LIST");let i=s+a;i%2!==0&&i++;let r=new $(i);Ne(r,n),de(r,o),t&&Ne(r,A);for(let h of e)r.set(h,s),s+=h.length;return r}function LA(A,e){return A.find(t=>t.header!=="LIST"?!1:(t.data.currentIndex=4,cA(t.data,4)===e))}function Qn(A,e){return{...e,...A}}var vA={consoleColors:l,SpessaSynthInfo:k,SpessaSynthWarn:ne,SpessaSynthGroupCollapsed:Xe,SpessaSynthGroup:tA,SpessaSynthGroupEnd:j,readBytesAsUintBigEndian:ht,readLittleEndian:V,readBytesAsString:pe,readVariableLengthQuantity:De,inflateSync:Sa};var N={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},u={bankSelect:0,modulationWheel:1,breathController:2,undefinedCC3:3,footController:4,portamentoTime:5,dataEntryMSB:6,mainVolume:7,balance:8,undefinedCC9:9,pan:10,expressionController: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,expressionControllerLSB: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},lA=class{ticks;statusByte;data;constructor(A,e,t){this.ticks=A,this.statusByte=e,this.data=t}};function bi(A){let e=A&240,t=A&15,s=t;switch(e){case 128:case 144:case 160:case 176:case 192:case 208:case 224:break;case 240:{switch(t){case 0:{s=-3;break}case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:{s=-1;break}case 15:{s=-2;break}}break}default:s=-1}return s}function fn(A){let e=A&240,t=A&15,s=-1,n=A;return e>=128&&e<=224&&(s=t,n=e),{status:n,channel:s}}var vi={8:2,9:2,10:2,11:2,12:1,13:1,14:2},Xn=(A,e)=>{for(let t=0;t<A.length;t++)e.push(A.charCodeAt(t))};function Ri(A){if(!A.tracks)throw new Error("MIDI has no tracks!");let e=[];for(let s of A.tracks){let n=[],a=0,o;for(let i of s.events){let r=Math.max(0,i.ticks-a);if(i.statusByte===N.endOfTrack){a+=r;continue}let h;i.statusByte<=N.sequenceSpecific?(h=[255,i.statusByte,...Ns(i.data.length),...i.data],o=void 0):i.statusByte===N.systemExclusive?(h=[240,...Ns(i.data.length),...i.data],o=void 0):(h=[],o!==i.statusByte&&(o=i.statusByte,h.push(i.statusByte)),h.push(...i.data)),n.push(...Ns(r),...h),a+=r}n.push(0,255,N.endOfTrack,0),e.push(new Uint8Array(n))}let t=[];Xn("MThd",t),t.push(...Ot(6,4),0,A.format,...Ot(A.tracks.length,2),...Ot(A.timeDivision,2));for(let s of e)Xn("MTrk",t),t.push(...Ot(s.length,4),...s);return new Uint8Array(t).buffer}var Fi=350,bA=9,va=16,un="gs",gt=-1,Yt=`SPESSASYNTH_EMBEDDED_BANK_${Math.random()}_DO_NOT_DELETE`,Ra=32767,Gi={time:0},Mi=.03,Li=.07,Ni=1,Ti=128,zt=1/Math.cos(Math.PI/4)**2,Ui=64,Zn=121,Re=class{static getDefaultBank(A){return A==="gm2"?Zn: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 isXGDrums(A){return A===120||A===127}static isValidXGMSB(A){return this.isXGDrums(A)||A===Ui||A===Zn}static isSystemXG(A){return A==="gm2"||A==="xg"}static addBankOffset(A,e,t=!0){return this.isXGDrums(A)&&t?A:Math.min(A+e,127)}static subtrackBankOffset(A,e,t=!0){return this.isXGDrums(A)&&t?A:Math.max(0,A-e)}};function mn(A){return A.data[0]===67&&A.data[2]===76&&A.data[5]===126&&A.data[6]===0}function Fa(A){return A.data[0]===65&&A.data[2]===66&&A.data[3]===18&&A.data[4]===64&&(A.data[5]&16)!==0&&A.data[6]===21}function pn(A){return A.data[0]===65&&A.data[2]===66&&A.data[5]===0&&A.data[6]===127}function yn(A){return A.data[0]===126&&A.data[2]===9&&A.data[3]===1}function Sn(A){return A.data[0]===126&&A.data[2]===9&&A.data[3]===3}function Pi(A){return A[0]===65&&A[2]===66&&A[3]===18&&A[4]===65||A[0]===67&&A[2]===76&&A[3]>>4===3}function xi(A){return A[0]===67&&A[2]===76&&A[3]===8&&(A[5]===3||A[5]===1||A[5]===2)?A[4]:A[0]===65&&A[2]===66&&A[3]===18&&A[4]===64&&(A[5]&240)===16&&A[6]===0?it(A[5]&15):-1}function Hi(A){return A[0]===65&&A[2]===66&&A[3]===18&&A[4]===64&&A[5]===1&&A[6]>=48&&A[6]<=55}function Oi(A){return A[0]===65&&A[2]===66&&A[3]===18&&A[4]===64&&A[5]===1&&A[6]>=56&&A[6]<=64}function Yi(A){return A[0]===65&&A[2]===66&&A[3]===18&&A[4]===64&&A[5]===1&&A[6]>=80&&A[6]<=90}function qi(A){return A[0]===65&&A[2]===66&&A[3]===18&&A[4]===64&&(A[5]===3||A[5]>>4===4&&A[6]===34)}function it(A){return[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][A%16]}function kn(A){return[1,2,3,4,5,6,7,8,9,0,10,11,12,13,14,15][A%16]}function Ga(A){return new lA(A,N.systemExclusive,new $([65,16,66,18,64,0,127,0,65,247]))}var CA=class Ma{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:");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 toNamedMIDIString(e){return`${Ma.toMIDIString(e)} ${e.name}`}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 fromNamedMIDIString(e){let t=e.indexOf(" ");if(t===-1)throw new Error(`Invalid named MIDI string: ${e}`);let s=this.fromMIDIString(e.slice(0,Math.max(0,t))),n=e.slice(Math.max(0,t+1));return{...s,name:n}}static sorter(e,t){return e.program!==t.program?e.program-t.program:e.isGMGSDrum&&!t.isGMGSDrum?1:!e.isGMGSDrum&&t.isGMGSDrum?-1:e.bankMSB!==t.bankMSB?e.bankMSB-t.bankMSB:e.bankLSB-t.bankLSB}},Ji="Created using SpessaSynth";function Ki(A,e,t){let s="gm",n=[],a=new Array(A.tracks.length).fill(0),o=16+Math.max(...A.portChannelOffsetMap),i=[];for(let r=0;r<o;r++)i.push({program:0,drums:r%16===bA,lastBank:void 0,lastBankLSB:void 0,hasBankSelect:!1});A.iterate((r,h)=>{let c=A.portChannelOffsetMap[a[h]];if(r.statusByte===N.midiPort){a[h]=r.data[0];return}let I=r.statusByte&240;if(I!==N.controllerChange&&I!==N.programChange&&I!==N.systemExclusive)return;if(I===N.systemExclusive){if(!Fa(r)){mn(r)?s="xg":pn(r)?s="gs":yn(r)?(s="gm",n.push({tNum:h,e:r})):Sn(r)&&(s="gm2");return}let y=it(r.data[5]&15)+c;i[y].drums=!!(r.data[7]>0&&r.data[5]>>4);return}let E=(r.statusByte&15)+c,B=i[E];if(I===N.programChange){let D={program:r.data[0],bankLSB:B.lastBankLSB?.data?.[1]??0,bankMSB:Re.subtrackBankOffset(B.lastBank?.data?.[1]??0,A.bankOffset),isGMGSDrum:B.drums},M=t.getPreset(D,s);if(k(`%cInput patch: %c${CA.toMIDIString(D)}%c. Channel %c${E}%c. Changing patch to ${M.toString()}.`,l.info,l.unrecognized,l.info,l.recognized,l.info),r.data[0]=M.program,M.isGMGSDrum&&Re.isSystemXG(s)||B.lastBank===void 0||(B.lastBank.data[1]=Re.addBankOffset(M.bankMSB,e,M.isXGDrums),B.lastBankLSB===void 0))return;B.lastBankLSB.data[1]=M.bankLSB;return}let d=r.data[0]===u.bankSelectLSB;r.data[0]!==u.bankSelect&&!d||(B.hasBankSelect=!0,d?B.lastBankLSB=r:B.lastBank=r)});for(let[r,h]of i.entries()){if(h.hasBankSelect)continue;let c=r%16,I=N.programChange|c,E=Math.floor(r/16)*16,B=A.portChannelOffsetMap.indexOf(E),d=A.tracks.find(w=>w.port===B&&w.channels.has(c));if(d===void 0)continue;let y=d.events.findIndex(w=>w.statusByte===I);if(y===-1){let w=d.events.findIndex(C=>C.statusByte>128&&C.statusByte<240&&(C.statusByte&15)===c);if(w===-1)continue;let S=d.events[w].ticks,P=t.getPreset({bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1},s).program;d.addEvents(w,new lA(S,N.programChange|c,new $([P]))),y=w}k(`%cAdding bank select for %c${r}`,l.info,l.recognized);let D=d.events[y].ticks,M=t.getPreset({bankLSB:0,bankMSB:0,program:h.program,isGMGSDrum:h.drums},s),F=Re.addBankOffset(M.bankMSB,e,M.isXGDrums);d.addEvents(y,new lA(D,N.controllerChange|c,new $([u.bankSelect,F])))}if(s==="gm"&&!Re.isSystemXG(s)){for(let h of n){let c=A.tracks[h.tNum];c.deleteEvent(c.events.indexOf(h.e))}let r=0;A.tracks[0].events[0].statusByte===N.trackName&&r++,A.tracks[0].addEvents(r,Ga(0))}}var Wn={bankOffset:0,metadata:{},correctBankOffset:!0,soundBank:void 0};function Vi(A,e,t){let s=t.metadata;if(tA("%cWriting the RMIDI File...",l.info),k("metadata",s),k("Initial bank offset",A.bankOffset),t.correctBankOffset){if(!t.soundBank)throw new Error("Sound bank must be provided if correcting bank offset.");Ki(A,t.bankOffset,t.soundBank)}let n=new $(A.writeMIDI());s.name??=A.getName(),s.creationDate??=new Date,s.copyright??=Ji,s.software??="SpessaSynth",Object.entries(s).forEach(r=>{let h=r;h[1]&&A.setRMIDInfo(h[0],h[1])});let a=[],o=(r,h)=>{a.push(Qe(r,h))};for(let r of Object.entries(A.rmidiInfo)){let h=r[0],c=r[1];switch(h){case"album":{o("IALB",c),o("IPRD",c);break}case"software":{o("ISFT",c);break}case"infoEncoding":{o("IENC",c);break}case"creationDate":{o("ICRD",c);break}case"picture":{o("IPIC",c);break}case"name":{o("INAM",c);break}case"artist":{o("IART",c);break}case"genre":{o("IGNR",c);break}case"copyright":{o("ICOP",c);break}case"comment":{o("ICMT",c);break}case"engineer":{o("IENG",c);break}case"subject":{o("ISBJ",c);break}case"midiEncoding":{o("MENC",c);break}}}let i=new $(2);return wt(i,t.bankOffset,2),a.push(Qe("DBNK",i)),k("%cFinished!",l.info),j(),Ze("RIFF",[fA("RMID"),Qe("data",n),Ze("INFO",a,!0),new $(e)]).buffer}function Xi(A,e){Xe("%cSearching for all used programs and keys...",l.info);let t=16+Math.max(...A.portChannelOffsetMap),s=[],n="gs";for(let i=0;i<t;i++){let r=i%16===bA;s.push({preset:e.getPreset({bankLSB:0,bankMSB:0,isGMGSDrum:r,program:0},n),bankMSB:0,bankLSB:0,isDrum:r})}let a=new Map,o=A.tracks.map(i=>i.port);A.iterate((i,r)=>{if(i.statusByte===N.midiPort){o[r]=i.data[0];return}let h=i.statusByte&240;if(h!==N.noteOn&&h!==N.controllerChange&&h!==N.programChange&&h!==N.systemExclusive)return;let c=(i.statusByte&15)+A.portChannelOffsetMap[o[r]]||0,I=s[c];switch(h){case N.programChange:{I.preset=e.getPreset({bankMSB:I.bankMSB,bankLSB:I.bankLSB,program:i.data[0],isGMGSDrum:I.isDrum},n);break}case N.controllerChange:{switch(i.data[0]){default:return;case u.bankSelectLSB:{I.bankLSB=i.data[1];break}case u.bankSelect:I.bankMSB=i.data[1]}break}case N.noteOn:{if(i.data[1]===0||!I.preset)return;let E=a.get(I.preset);E||(E=new Set,a.set(I.preset,E)),E.add(`${i.data[0]}-${i.data[1]}`);break}case N.systemExclusive:{{if(!Fa(i)){mn(i)?(n="xg",k("%cXG on detected!",l.recognized)):Sn(i)?(n="gm2",k("%cGM2 on detected!",l.recognized)):yn(i)?(n="gm",k("%cGM on detected!",l.recognized)):pn(i)&&(n="gs",k("%cGS on detected!",l.recognized));return}let E=it(i.data[5]&15)+A.portChannelOffsetMap[o[r]],B=!!(i.data[7]>0&&i.data[5]>>4);I=s[E],I.isDrum=B}break}}});for(let[i,r]of a.entries())r.size===0&&(k(`%cDetected change but no keys for %c${i.name}`,l.info,l.value),a.delete(i));return j(),a}var Zi=A=>(A.data=new $(A.data.buffer),6e7/ht(A.data,3));function Wi(A,e=0){let t=[],n=A.tracks.map(I=>I.events).flat();n.sort((I,E)=>I.ticks-E.ticks);for(let I=0;I<16;I++)t.push([]);let a=0,o=60/(120*A.timeDivision),i=0,r=0,h=[];for(let I=0;I<16;I++)h.push([]);let c=(I,E)=>{let B=h[E].findIndex(y=>y.midiNote===I),d=h[E][B];if(d){let y=a-d.start;d.length=y,E===bA&&(d.length=Math.max(y,e)),h[E].splice(B,1)}r--};for(;i<n.length;){let I=n[i],E=I.statusByte>>4,B=I.statusByte&15;if(E===8)c(I.data[0],B);else if(E===9)if(I.data[1]===0)c(I.data[0],B);else{c(I.data[0],B);let d={midiNote:I.data[0],start:a,length:-1,velocity:I.data[1]/127};t[B].push(d),h[B].push(d),r++}else I.statusByte===81&&(o=60/(Zi(I)*A.timeDivision));if(++i>=n.length)break;a+=o*(n[i].ticks-I.ticks)}if(r>0)for(let[I,E]of h.entries())for(let B of E){let d=a-B.start;B.length=d,I===bA&&(B.length=Math.max(d,e))}return t}var zi={linear:0,nearestNeighbor:1,hermite:2},_e={Idle:0,RPCoarse:1,RPFine:2,NRPCoarse:3,NRPFine:4,DataCoarse:5,DataFine:6},Ce={channelTuning:0,channelTransposeFine:1,modulationMultiplier:2,masterTuning:3,channelTuningSemitones:4,channelKeyShift:5,sf2NPRNGeneratorLSB:6},_i={character:49,preLowpass:50,level:51,time:52,delayFeedback:53,preDelayTime:55},$i={preLowpass:57,level:58,feedback:59,delay:60,rate:61,depth:62,sendLevelToReverb:63,sendLevelToDelay:64},ji={preLowpass:81,timeCenter:82,timeRatioLeft:83,timeRatioRight:84,levelCenter:85,levelLeft:86,levelRight:87,level:88,feedback:89,sendLevelToReverb:90};function At(A,e,t,s){return new lA(s,N.controllerChange|A%16,new $([e,t]))}function ue(A,e,t,s,n){let o=128-(e+t+s+n.reduce((i,r)=>i+r,0))%128&127;return new lA(A,N.systemExclusive,new Uint8Array([65,16,66,18,e,t,s,...n,o,247]))}function er(A,e){let t=16|kn(A);return ue(e,40,t,21,[1])}function Ar(A,{programChanges:e=[],controllerChanges:t=[],channelsToClear:s=[],channelsToTranspose:n=[],clearDrumParams:a=!1,reverbParams:o,chorusParams:i,delayParams:r,insertionParams:h}){Xe("%cApplying changes to the MIDI file...",l.info),k("Desired program changes:",e),k("Desired CC changes:",t),k("Desired channels to clear:",s),k("Desired channels to transpose:",n),k("Desired reverb parameters",o),k("Desired chorus parameters",i),k("Desired delay parameters",r),k("Desired insertion parameters",h);let c=new Set;for(let m of e)c.add(m.channel);let I="gs",E=!1,B=A.tracks.map(m=>m.port),d={},y=0,D=(m,v)=>{A.tracks[m].channels.size!==0&&(y===0&&(y+=16,d[v]=0),d[v]===void 0&&(d[v]=y,y+=16),B[m]=v)};for(let[m,v]of A.tracks.entries())D(m,v.port);let M=y,F=new Array(M).fill(!0),w=new Array(M).fill(0),S=new Array(M).fill(0);for(let m of n){let v=Math.trunc(m.keyShift),H=m.keyShift-v;w[m.channel]=v,S[m.channel]=H}let P=-1,C=0,x=-1,J=0,Y=!1;A.iterate((m,v,H)=>{let O=A.tracks[v],b=H[v],G=()=>{O.deleteEvent(b),H[v]--},K=(le,re=0)=>{O.addEvents(b+re,le),H[v]++},ee=d[B[v]]||0;if(m.statusByte===N.midiPort){D(v,m.data[0]);return}if(m.statusByte<=N.sequenceSpecific&&m.statusByte>=N.sequenceNumber)return;let ie=m.statusByte&240,Ee=m.statusByte&15,oe=Ee+ee;if(m.statusByte!==N.systemExclusive&&s.includes(oe)){G();return}switch(ie){case N.noteOn:{if(F[oe]){F[oe]=!1;for(let re of t.filter(Ie=>Ie.channel===oe)){let Ie=At(Ee,re.controllerNumber,re.controllerValue,m.ticks);K(Ie)}let le=S[oe];if(le!==0){let re=le*64+64,Ie=At(Ee,u.registeredParameterMSB,0,m.ticks),ke=At(Ee,u.registeredParameterLSB,1,m.ticks),_=At(oe,u.dataEntryMSB,re,m.ticks),ce=At(Ee,u.dataEntryLSB,0,m.ticks);K(ce),K(_),K(ke),K(Ie)}if(c.has(oe)){let re=e.find(Be=>Be.channel===oe);if(!re)return;k(`%cSetting %c${re.channel}%c to %c${CA.toMIDIString(re)}%c. Track num: %c${v}`,l.info,l.recognized,l.info,l.recognized,l.info,l.recognized);let Ie=re.bankMSB,ke=re.bankLSB,_=re.program,ce=new lA(m.ticks,N.programChange|Ee,new $([_]));K(ce);let Te=(Be,Ue)=>{let Je=At(Ee,Be?u.bankSelectLSB:u.bankSelect,Ue,m.ticks);K(Je)};Re.isSystemXG(I)&&re.isGMGSDrum&&(k(`%cAdding XG Drum change on track %c${v}`,l.recognized,l.value),Ie=Re.getDrumBank(I),ke=0),Te(!1,Ie),Te(!0,ke),re.isGMGSDrum&&!Re.isSystemXG(I)&&Ee!==bA&&(k(`%cAdding GS Drum change on track %c${v}`,l.recognized,l.value),K(er(Ee,m.ticks)))}}m.data[0]+=w[oe];break}case N.noteOff:{m.data[0]+=w[oe];break}case N.programChange:{if(c.has(oe)){G();return}break}case N.controllerChange:{let le=m.data[0];if(t.find(Ie=>Ie.channel===oe&&le===Ie.controllerNumber)!==void 0){G();return}switch(le){case u.bankSelect:case u.bankSelectLSB:{c.has(oe)&&G();return}case u.registeredParameterLSB:case u.registeredParameterMSB:{Y=!1;return}case u.nonRegisteredParameterMSB:{P=H[v],C=v,Y=!0;return}case u.nonRegisteredParameterLSB:{x=H[v],J=v,Y=!0;return}case u.dataEntryMSB:{if(x&&P&&Y&&a){let Ie=A.tracks[C].events[P].data[1];if(Ie>=24&&Ie<=31){G();let ke=A.tracks[J],_=A.tracks[C];ke.deleteEvent(x),H[J]--,_.deleteEvent(P),H[C]--}}return}default:return}}case N.systemExclusive:{if(mn(m)){k("%cXG system on detected",l.info),I="xg",E=!0;return}if(Sn(m)){k("%cGM2 system on detected",l.info),I="gm2",E=!0;return}if(pn(m)){E=!0,k("%cGS on detected!",l.recognized);return}if(yn(m)){k("%cGM on detected, removing!",l.info),G(),E=!1;return}if(a&&Pi(m.data)){G();return}if(o&&Hi(m.data)){G();return}if(i&&Oi(m.data)){G();return}if(r&&Yi(m.data)){G();return}if(h&&qi(m.data)){G();return}let le=xi(m.data);if(le!==-1){c.has(le+ee)&&G();return}}}});let T=Math.max(0,A.firstNoteOn-10),U=A.tracks[0],q=Math.max(0,U.events.findIndex(m=>m.ticks>=T)-1);if(o){let m=_i,v=o;U.addEvents(q,ue(T,64,1,m.level,[v.level]),ue(T,64,1,m.preLowpass,[v.preLowpass]),ue(T,64,1,m.character,[v.character]),ue(T,64,1,m.time,[v.time]),ue(T,64,1,m.delayFeedback,[v.delayFeedback]),ue(T,64,1,m.preDelayTime,[v.preDelayTime]))}if(i){let m=$i,v=i;U.addEvents(q,ue(T,64,1,m.level,[v.level]),ue(T,64,1,m.preLowpass,[v.preLowpass]),ue(T,64,1,m.feedback,[v.feedback]),ue(T,64,1,m.delay,[v.delay]),ue(T,64,1,m.rate,[v.rate]),ue(T,64,1,m.depth,[v.depth]),ue(T,64,1,m.sendLevelToReverb,[v.sendLevelToReverb]),ue(T,64,1,m.sendLevelToDelay,[v.sendLevelToDelay]))}if(r){let m=ji,v=r;U.addEvents(q,ue(T,64,1,m.level,[v.level]),ue(T,64,1,m.preLowpass,[v.preLowpass]),ue(T,64,1,m.timeCenter,[v.timeCenter]),ue(T,64,1,m.timeRatioLeft,[v.timeRatioLeft]),ue(T,64,1,m.timeRatioRight,[v.timeRatioRight]),ue(T,64,1,m.levelCenter,[v.levelCenter]),ue(T,64,1,m.levelLeft,[v.levelLeft]),ue(T,64,1,m.levelRight,[v.levelRight]),ue(T,64,1,m.feedback,[v.feedback]),ue(T,64,1,m.sendLevelToReverb,[v.sendLevelToReverb]))}if(h){let m=h;for(let v=0;v<m.channels.length;v++)m.channels[v]&&U.addEvents(T,ue(T,64,64|kn(v),34,[1]));for(let v=0;v<m.params.length;v++){let H=m.params[v];H!==255&&U.addEvents(q,ue(T,64,3,v+3,[H]))}U.addEvents(q,ue(T,64,3,0,[m.type>>8,m.type&127]))}if(!E&&e.length>0){let m=0;A.tracks[0].events[0].statusByte===N.trackName&&m++,A.tracks[0].addEvents(m,Ga(0)),k("%cGS on not detected. Adding it.",l.info)}A.flush(),j()}function tr(A,e){let t=[],s=[],n=[],a=[];for(let[o,i]of e.channelSnapshots.entries()){if(i.isMuted){s.push(o);continue}let r=i.keyShift+i.customControllers[Ce.channelTransposeFine]/100;r!==0&&t.push({channel:o,keyShift:r}),i.lockPreset&&n.push({channel:o,...i.patch});for(let[h,c]of i.lockedControllers.entries()){if(!c||h>127||h===u.bankSelect)continue;let I=i.midiControllers[h]>>7;a.push({channel:o,controllerNumber:h,controllerValue:I})}}A.modify({programChanges:n,controllerChanges:a,channelsToClear:s,channelsToTranspose:t,clearDrumParams:e.masterParameters.drumLock,reverbParams:e.masterParameters.reverbLock?e.reverbSnapshot:void 0,chorusParams:e.masterParameters.chorusLock?e.chorusSnapshot:void 0,delayParams:e.masterParameters.delayLock?e.delaySnapshot:void 0,insertionParams:e.masterParameters.insertionEffectLock?e.insertionSnapshot:void 0})}var Ts={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},tt={inLineResource:1,inFileResource:2,inFileNode:3,externalFile:4,externalXMF:5,XMFFileURIandNodeID:6},Us={StandardMIDIFile:0,StandardMIDIFileType1:1,DLS1:2,DLS2:3,DLS22:4,mobileDLS:5,unknown:-1,folder:-2},sr={standard:0,MMA:1,registered:2,nonRegistered:3},qt={none:0,MMAUnpacker:1,registered:2,nonRegistered:3},nr=class La{length;itemCount;metadataLength;metadata={};nodeData;innerNodes=[];packedContent=!1;nodeUnpackers=[];resourceFormat="unknown";referenceTypeID;constructor(e){let t=e.currentIndex;this.length=De(e),this.itemCount=De(e);let s=De(e),n=e.currentIndex-t,a=s-n,o=e.slice(e.currentIndex,e.currentIndex+a);e.currentIndex+=a,this.metadataLength=De(o);let i=o.slice(o.currentIndex,o.currentIndex+this.metadataLength);o.currentIndex+=this.metadataLength;let r,h;for(;i.currentIndex<i.length;){if(i[i.currentIndex]===0)i.currentIndex++,r=De(i),Object.values(Ts).includes(r)?h=Object.keys(Ts).find(y=>Ts[y]===r)??"":(k(`Unknown field specifier: ${r}`),h=`unknown_${r}`);else{let y=De(i);r=pe(i,y),h=r}let d=De(i);if(d===0){let y=De(i),D=i.slice(i.currentIndex,i.currentIndex+y);i.currentIndex+=y;let M=De(D);this.metadata[h]=M<4?pe(D,y-1):D.slice(D.currentIndex)}else k(`International content: ${d}`),i.currentIndex+=De(i)}let c=o.currentIndex,I=De(o),E=o.slice(o.currentIndex,c+I);if(o.currentIndex=c+I,I>0)for(this.packedContent=!0;E.currentIndex<I;){let B={id:De(E)};switch(B.id){case qt.nonRegistered:case qt.registered:throw j(),new Error(`Unsupported unpacker ID: ${B.id}`);default:throw j(),new Error(`Unknown unpacker ID: ${B.id}`);case qt.none:{B.standardID=De(E);break}case qt.MMAUnpacker:{{let d=E[E.currentIndex++];d===0&&(d<<=8,d|=E[E.currentIndex++],d<<=8,d|=E[E.currentIndex++]);let y=De(E);B.manufacturerID=d,B.manufacturerInternalID=y}break}}B.decodedSize=De(E),this.nodeUnpackers.push(B)}switch(e.currentIndex=t+s,this.referenceTypeID=De(e),this.nodeData=e.slice(e.currentIndex,t+this.length),e.currentIndex=t+this.length,this.referenceTypeID){case tt.inLineResource:break;case tt.externalXMF:case tt.inFileNode:case tt.XMFFileURIandNodeID:case tt.externalFile:case tt.inFileResource:throw j(),new Error(`Unsupported reference type: ${this.referenceTypeID}`);default:throw j(),new Error(`Unknown reference type: ${this.referenceTypeID}`)}if(this.isFile){if(this.packedContent){let d=this.nodeData.slice(2);k(`%cPacked content. Attempting to deflate. Target size: %c${this.nodeUnpackers[0].decodedSize}`,l.warn,l.value);try{this.nodeData=new $(Sa(d).buffer)}catch(y){if(j(),y instanceof Error)throw new Error(`Error unpacking XMF file contents: ${y.message}.`)}}let B=this.metadata.resourceFormat;if(B===void 0)ne("No resource format for this file node!");else{B[0]!==sr.standard&&(k(`Non-standard formatTypeID: ${B.toString()}`),this.resourceFormat=B.toString());let y=B[1];Object.values(Us).includes(y)?this.resourceFormat=Object.keys(Us).find(D=>Us[D]===y):k(`Unrecognized resource format: ${y}`)}}else for(this.resourceFormat="folder";this.nodeData.currentIndex<this.nodeData.length;){let B=this.nodeData.currentIndex,d=De(this.nodeData),y=this.nodeData.slice(B,B+d);this.nodeData.currentIndex=B+d,this.innerNodes.push(new La(y))}}get isFile(){return this.itemCount===0}};function ar(A,e){A.bankOffset=0;let t=pe(e,4);if(t!=="XMF_")throw j(),new SyntaxError(`Invalid XMF Header! Expected "_XMF", got "${t}"`);tA("%cParsing XMF file...",l.info);let s=pe(e,4);if(k(`%cXMF version: %c${s}`,l.info,l.recognized),s==="2.00"){let r=at(e,4),h=at(e,4);k(`%cFile Type ID: %c${r}%c, File Type Revision ID: %c${h}`,l.info,l.recognized,l.info,l.recognized)}De(e);let n=De(e);e.currentIndex+=n,e.currentIndex=De(e);let a=new nr(e),o,i=r=>{let h=(c,I)=>{r.metadata[c]!==void 0&&typeof r.metadata[c]=="string"&&(A.rmidiInfo[I]=fA(r.metadata[c]))};if(h("nodeName","name"),h("title","name"),h("copyrightNotice","copyright"),h("comment","comment"),r.isFile)switch(r.resourceFormat){default:return;case"DLS1":case"DLS2":case"DLS22":case"mobileDLS":{k("%cFound embedded DLS!",l.recognized),A.embeddedSoundBank=r.nodeData.buffer;break}case"StandardMIDIFile":case"StandardMIDIFileType1":{k("%cFound embedded MIDI!",l.recognized),o=r.nodeData;break}}else for(let c of r.innerNodes)i(c)};if(i(a),j(),!o)throw new Error("No MIDI data in the XMF file!");return o}var Is=class Na{name="";port=0;channels=new Set;events=[];static copyFrom(e){let t=new Na;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 lA(t.ticks,t.statusByte,new $(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)}};function zn(A,e,t){Xe("%cParsing MIDI File...",l.info),A.fileName=t;let s=new $(e),n=s,a=h=>{let c=pe(h,4),I=at(h,4),E=new $(I),B={type:c,size:I,data:E},d=h.slice(h.currentIndex,h.currentIndex+B.size);return B.data.set(d,0),h.currentIndex+=B.size,B},o=cA(s,4);if(o==="RIFF"){s.currentIndex+=8;let h=pe(s,4);if(h!=="RMID")throw j(),new SyntaxError(`Invalid RMIDI Header! Expected "RMID", got "${h}"`);let c=ge(s);if(c.header!=="data")throw j(),new SyntaxError(`Invalid RMIDI Chunk header! Expected "data", got "${h}"`);n=c.data;let I=!1,E=!1;for(;s.currentIndex<s.length;){let B=s.currentIndex,d=ge(s,!0);if(d.header==="RIFF"){let y=pe(d.data,4).toLowerCase();y==="sfbk"||y==="sfpk"||y==="dls "?(k("%cFound embedded soundbank!",l.recognized),A.embeddedSoundBank=s.slice(B,B+d.size).buffer):ne(`Unknown RIFF chunk: "${y}"`),y==="dls "?A.isDLSRMIDI=!0:I=!0}else if(d.header==="LIST"&&pe(d.data,4)==="INFO")for(k("%cFound RMIDI INFO chunk!",l.recognized);d.data.currentIndex<d.size;){let D=ge(d.data,!0),M=D.header,F=D.data;switch(M){default:{ne(`Unknown RMIDI Info: ${M}`);break}case"INAM":{A.rmidiInfo.name=F;break}case"IALB":case"IPRD":{A.rmidiInfo.album=F;break}case"ICRT":case"ICRD":{A.rmidiInfo.creationDate=F;break}case"IART":{A.rmidiInfo.artist=F;break}case"IGNR":{A.rmidiInfo.genre=F;break}case"IPIC":{A.rmidiInfo.picture=F;break}case"ICOP":{A.rmidiInfo.copyright=F;break}case"ICMT":{A.rmidiInfo.comment=F;break}case"IENG":{A.rmidiInfo.engineer=F;break}case"ISFT":{A.rmidiInfo.software=F;break}case"ISBJ":{A.rmidiInfo.subject=F;break}case"IENC":{A.rmidiInfo.infoEncoding=F;break}case"MENC":{A.rmidiInfo.midiEncoding=F;break}case"DBNK":{A.bankOffset=pa(F,2),E=!0;break}}}}I&&!E&&(A.bankOffset=1),A.isDLSRMIDI&&(A.bankOffset=0),A.embeddedSoundBank===void 0&&(A.bankOffset=0)}else o==="XMF_"?n=ar(A,s):n=s;let i=a(n);if(i.type!=="MThd")throw j(),new SyntaxError(`Invalid MIDI Header! Expected "MThd", got "${i.type}"`);if(i.size!==6)throw j(),new RangeError(`Invalid MIDI header chunk size! Expected 6, got ${i.size}`);A.format=at(i.data,2);let r=at(i.data,2);A.timeDivision=at(i.data,2);for(let h=0;h<r;h++){let c=new Is,I=a(n);if(I.type!=="MTrk")throw j(),new SyntaxError(`Invalid track header! Expected "MTrk" got "${I.type}"`);let E,B=0;for(A.format===2&&h>0&&(B+=A.tracks[h-1].events[A.tracks[h-1].events.length-1].ticks);I.data.currentIndex<I.size;){B+=De(I.data);let d=I.data[I.data.currentIndex],y;if(E!==void 0&&d<128)y=E;else{if(d<128)throw j(),new SyntaxError(`Unexpected byte with no running byte. (${d})`);y=I.data[I.data.currentIndex++]}let D=bi(y),M;switch(D){case-1:{M=0;break}case-2:{y=I.data[I.data.currentIndex++],M=De(I.data);break}case-3:{M=De(I.data);break}default:{M=vi[y>>4],E=y;break}}let F=new $(M);F.set(I.data.slice(I.data.currentIndex,I.data.currentIndex+M),0);let w=new lA(B,y,F);c.pushEvent(w),I.data.currentIndex+=M}A.tracks.push(c),k(`%cParsed %c${A.tracks.length}%c / %c${A.tracks.length}`,l.info,l.value,l.info,l.value)}k("%cAll tracks parsed correctly!",l.recognized),A.flush(!1),j()}function Dn(A){return A.toISOString().split(".")[0]+"Z"}var ir=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"]]),rr=[ir];function or(A){for(let e of rr){let t=A;for(let[n,a]of e.entries()){let o=new RegExp(n,"gi");t=t.replace(o,a)}let s=new Date(t);if(!Number.isNaN(s.getTime()))return s}}function hr(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 gr(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 cr(A){let t=/\b\d{4}\b/.exec(A);return t?new Date(t[0]):void 0}function wn(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=or(A);if(s)return s;let n=hr(A);if(n)return n;let a=gr(A);if(a)return a;let o=cr(A);return o||(ne(`Invalid date: "${A}". Replacing with the current date!`),new Date)}return t}var ZA=class _t{tracks=[];timeDivision=0;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--,cA(e,t)}static fromArrayBuffer(e,t=""){let s=new _t;return zn(s,e,t),s}static async fromFile(e){let t=new _t;return zn(t,await e.arrayBuffer(),e.name),t}static copyFrom(e){let t=new _t;return t.copyFrom(e),t}copyFrom(e){this.copyMetadataFrom(e),this.embeddedSoundBank=e?.embeddedSoundBank?.slice(0)??void 0,this.tracks=e.tracks.map(t=>Is.copyFrom(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],o=this.tempoChanges[n-1],i=o?o.ticks-a.ticks:1/0,r=60/(a.tempo*this.timeDivision),h=i*r;if(t<=h)return s+=Math.round(t/r),s;s+=i,t-=h}return s}getUsedProgramsAndKeys(e){return Xi(this,e)}preloadSynth(e){Xe("%cPreloading samples...",l.info);let t=this.getUsedProgramsAndKeys(e.soundBankManager);for(let[s,n]of t.entries()){k(`%cPreloading used samples on %c${s.name}%c...`,l.info,l.recognized,l.info);for(let a of n){let[o,i]=a.split("-").map(Number);e.getVoicesForPreset(s,o,i)}}j()}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 Wi(this,e)}writeMIDI(){return Ri(this)}writeRMIDI(e,t=Wn){return Vi(this,e,Qn(t,Wn))}modify({programChanges:e=[],controllerChanges:t=[],channelsToClear:s=[],channelsToTranspose:n=[],clearDrumParams:a=!1,reverbParams:o,chorusParams:i,delayParams:r,insertionParams:h}){Ar(this,{programChanges:e,controllerChanges:t,channelsToClear:s,channelsToTranspose:n,clearDrumParams:a,reverbParams:o,chorusParams:i,delayParams:r,insertionParams:h})}applySnapshot(e){tr(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){ne(`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=fA("utf-8",!0),e==="picture")this.rmidiInfo.picture=new Uint8Array(t);else if(e==="creationDate")this.rmidiInfo.creationDate=fA(Dn(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 wn(cA(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){ne(`Failed to decode ${e} name: ${s}`);return}}iterate(e){let t=new Array(this.tracks.length).fill(0),s=this.tracks.length,n=()=>{let a=0,o=1/0;for(let[i,{events:r}]of this.tracks.entries())t[i]>=r.length||r[t[i]].ticks<o&&(a=i,o=r[t[i]].ticks);return a};for(;s>0;){let a=n(),o=this.tracks[a].events;if(t[a]>=o.length){s--;continue}let i=o[t[a]];e(i,a,t),t[a]++}}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 lA(t.ticks,t.statusByte,new $(t.data))),this.lyrics=e.lyrics.map(t=>new lA(t.ticks,t.statusByte,new $(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(){tA("%cInterpreting MIDI events...",l.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 h of this.tracks){let c=new Set,I=!1;for(let B=0;B<h.events.length;B++){let d=h.events[B];if(d.statusByte>=128&&d.statusByte<240)switch(I=!0,d.ticks>this.lastVoiceEventTick&&(this.lastVoiceEventTick=d.ticks),d.statusByte&240){case N.controllerChange:{switch(d.data[0]){case 2:case 111:case 116:{s=d.ticks;break}case 4:case 117:{n===null?(a="soft",n=d.ticks):n=0;break}case 0:this.isDLSRMIDI&&d.data[1]!==0&&d.data[1]!==127&&(k("%cDLS RMIDI with offset 1 detected!",l.recognized),this.bankOffset=1)}break}case N.noteOn:{c.add(d.statusByte&15);let D=d.data[0];this.keyRange.min=Math.min(this.keyRange.min,D),this.keyRange.max=Math.max(this.keyRange.max,D);break}}let y=cA(d.data);switch(d.statusByte){case N.endOfTrack:{B!==h.events.length-1&&(h.deleteEvent(B),B--,ne("Unexpected EndOfTrack. Removing!"));break}case N.setTempo:{this.tempoChanges.push({ticks:d.ticks,tempo:6e7/ht(d.data,3)});break}case N.marker:{switch(y.trim().toLowerCase()){default:break;case"start":case"loopstart":{s=d.ticks;break}case"loopend":n=d.ticks}break}case N.copyright:{this.extraMetadata.push(d);break}case N.lyric:y.trim().startsWith("@KMIDI KARAOKE FILE")&&(this.isKaraokeFile=!0,k("%cKaraoke MIDI detected!",l.recognized)),this.isKaraokeFile?d.statusByte=N.text:this.lyrics.push(d);case N.text:{let D=y.trim();D.startsWith("@KMIDI KARAOKE FILE")?(this.isKaraokeFile=!0,k("%cKaraoke MIDI detected!",l.recognized)):this.isKaraokeFile&&(D.startsWith("@T")||D.startsWith("@A")?e?this.extraMetadata.push(d):(this.binaryName=d.data.slice(2),e=!0,t=!0):D.startsWith("@")||this.lyrics.push(d));break}}}h.channels=c,h.name="";let E=h.events.find(B=>B.statusByte===N.trackName);E&&this.tracks.indexOf(h)>0&&(h.name=cA(E.data),!I&&!h.name.toLowerCase().includes("setup")&&this.extraMetadata.push(E))}this.tempoChanges.reverse(),k("%cCorrecting loops, ports and detecting notes...",l.info);let o=[];for(let h of this.tracks){let c=h.events.find(I=>(I.statusByte&240)===N.noteOn);c&&o.push(c.ticks)}this.firstNoteOn=Math.min(...o),k(`%cFirst note-on detected at: %c${this.firstNoteOn}%c ticks!`,l.info,l.recognized,l.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),k(`%cLoop points: start: %c${this.loop.start}%c end: %c${this.loop.end}`,l.info,l.recognized,l.info,l.recognized);let i=0;this.portChannelOffsetMap=[];for(let h of this.tracks)if(h.port=-1,h.channels.size!==0)for(let c of h.events){if(c.statusByte!==N.midiPort)continue;let I=c.data[0];h.port=I,this.portChannelOffsetMap[I]===void 0&&(this.portChannelOffsetMap[I]=i,i+=16)}this.portChannelOffsetMap=[...this.portChannelOffsetMap].map(h=>h??0);let r=1/0;for(let h of this.tracks)h.port!==-1&&r>h.port&&(r=h.port);r===1/0&&(r=0);for(let h of this.tracks)(h.port===-1||h.port===void 0)&&(h.port=r);if(this.portChannelOffsetMap.length===0&&(this.portChannelOffsetMap=[0]),this.portChannelOffsetMap.length<2?k("%cNo additional MIDI Ports detected.",l.info):(this.isMultiPort=!0,k("%cMIDI Ports detected!",l.recognized)),!t)if(this.tracks.length>1){if(!this.tracks[0].events.some(h=>h.statusByte>=N.noteOn&&h.statusByte<N.polyPressure)){let h=this.tracks[0].events.find(c=>c.statusByte===N.trackName);h&&(this.binaryName=h.data)}}else{let h=this.tracks[0].events.find(c=>c.statusByte===N.trackName);h&&(this.binaryName=h.data)}if(this.extraMetadata=this.extraMetadata.filter(h=>h.data.length>0),this.lyrics.sort((h,c)=>h.ticks-c.ticks),!this.tracks.some(h=>h.events[0].ticks===0)){let h=this.tracks[0],c=this?.binaryName?.buffer;c||(c=new Uint8Array(0).buffer),h.events.unshift(new lA(0,N.trackName,new $(c)))}this.duration=this.midiTicksToSeconds(this.lastVoiceEventTick),this.binaryName?.length===0&&(this.binaryName=void 0),k(`%cMIDI file parsed. Total tick time: %c${this.lastVoiceEventTick}%c, total seconds time: %c${_s(Math.ceil(this.duration)).time}`,l.info,l.recognized,l.info,l.recognized),j()}};function Ir(A,e){if(this.externalMIDIPlayback&&A.statusByte>=128){this.sendMIDIMessage([A.statusByte,...A.data]);return}let t=this._midiData.tracks[e],s=fn(A.statusByte),n=this.midiPortChannelOffsets[this.currentMIDIPorts[e]]||0;switch(s.channel+=n,s.status){case N.noteOn:{let a=A.data[1];if(a>0)this.synth.noteOn(s.channel,A.data[0],a),this.playingNotes.push({midiNote:A.data[0],channel:s.channel,velocity:a});else{this.synth.noteOff(s.channel,A.data[0]);let o=this.playingNotes.findIndex(i=>i.midiNote===A.data[0]&&i.channel===s.channel);o!==-1&&this.playingNotes.splice(o,1)}break}case N.noteOff:{this.synth.noteOff(s.channel,A.data[0]);let a=this.playingNotes.findIndex(o=>o.midiNote===A.data[0]&&o.channel===s.channel);a!==-1&&this.playingNotes.splice(a,1);break}case N.pitchWheel:{this.synth.pitchWheel(s.channel,A.data[1]<<7|A.data[0]);break}case N.controllerChange:{if(this._midiData.isMultiPort&&t.channels.size===0)return;this.synth.controllerChange(s.channel,A.data[0],A.data[1]);break}case N.programChange:{if(this._midiData.isMultiPort&&t.channels.size===0)return;this.synth.programChange(s.channel,A.data[0]);break}case N.polyPressure:{this.synth.polyPressure(s.channel,A.data[0],A.data[1]);break}case N.channelPressure:{this.synth.channelPressure(s.channel,A.data[0]);break}case N.systemExclusive:{this.synth.systemExclusive(A.data,n);break}case N.setTempo:{let a=6e7/ht(A.data,3);this.oneTickToSeconds=60/(a*this._midiData.timeDivision),this.oneTickToSeconds===0&&(this.oneTickToSeconds=60/(120*this._midiData.timeDivision),k("invalid tempo! falling back to 120 BPM"),a=120);break}case N.timeSignature:case N.endOfTrack:case N.midiChannelPrefix:case N.songPosition:case N.activeSensing:case N.keySignature:case N.sequenceNumber:case N.sequenceSpecific:case N.text:case N.lyric:case N.copyright:case N.trackName:case N.marker:case N.cuePoint:case N.instrumentName:case N.programName:break;case N.midiPort:{this.assignMIDIPort(e,A.data[0]);break}case N.reset:{this.synth.stopAllChannels(),this.synth.resetAllControllers();break}default:{k(`%cUnrecognized Event: %c${A.statusByte}%c status byte: %c${Object.keys(N).find(a=>N[a]===s.status)}`,l.warn,l.unrecognized,l.warn,l.value);break}}s.status>=0&&s.status<128&&this.callEvent("metaEvent",{event:A,trackIndex:e})}function lr(){if(this.paused||!this._midiData)return;let A=this.currentTime;for(;this.playedTime<A;){let e=this.findFirstEventIndex(),s=this._midiData.tracks[e].events[this.eventIndexes[e]++];this.processEvent(s,e);let n=this.findFirstEventIndex(),a=this._midiData.tracks[n];if(this.loopCount>0&&this._midiData.loop.end<=s.ticks){this.loopCount!==1/0&&(this.loopCount--,this.callEvent("loopCountChange",{newCount:this.loopCount})),this._midiData.loop.type==="soft"?this.jumpToTick(this._midiData.loop.start):this.setTimeTicks(this._midiData.loop.start);return}if(a.events.length<=this.eventIndexes[n]||s.ticks>=this._midiData.lastVoiceEventTick){this.songIsFinished();return}let o=a.events[this.eventIndexes[n]];this.playedTime+=this.oneTickToSeconds*(o.ticks-s.ticks)}}function Cr(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 Er(A){if(!A.tracks)throw new Error("This MIDI has no tracks!");if(A.duration===0){ne("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.clearEmbeddedBank(),this._midiData.embeddedSoundBank!==void 0&&(k("%cEmbedded soundbank detected! Using it.",l.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),k(`%cTotal song time: ${_s(Math.ceil(this._midiData.duration)).time}`,l.recognized),this.callEvent("songChange",{songIndex:this._songIndex}),this._midiData.duration<=.2&&(ne(`%cVery short song: (${_s(Math.round(this._midiData.duration)).time}). Disabling loop!`,l.warn),this.loopCount=0),this.currentTime=0}var g=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,unused1:14,chorusEffectsSend:15,reverbEffectsSend:16,pan:17,unused2:18,unused3:19,unused4:20,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,reserved1:42,keyRange:43,velRange:44,startloopAddrsCoarseOffset:45,keyNum:46,velocity:47,initialAttenuation:48,reserved2:49,endloopAddrsCoarseOffset:50,coarseTune:51,fineTune:52,sampleID:53,sampleModes:54,reserved3:55,scaleTuning:56,exclusiveClass:57,overridingRootKey:58,unused5:59,endOper:60,amplitude:61,vibLfoRate:62,vibLfoAmplitudeDepth:63,vibLfoToFilterFc:64,modLfoRate:65,modLfoAmplitudeDepth:66}),ot=Object.keys(g).length,Br=Math.max(...Object.values(g)),hA=Object.freeze({[g.startAddrsOffset]:{min:0,max:32768,def:0,nrpn:1},[g.endAddrOffset]:{min:-32768,max:32768,def:0,nrpn:1},[g.startloopAddrsOffset]:{min:-32768,max:32768,def:0,nrpn:1},[g.endloopAddrsOffset]:{min:-32768,max:32768,def:0,nrpn:1},[g.startAddrsCoarseOffset]:{min:0,max:32768,def:0,nrpn:1},[g.modLfoToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[g.vibLfoToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[g.modEnvToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[g.initialFilterFc]:{min:1500,max:13500,def:13500,nrpn:2},[g.initialFilterQ]:{min:0,max:960,def:0,nrpn:1},[g.modLfoToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[g.modEnvToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[g.endAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[g.modLfoToVolume]:{min:-960,max:960,def:0,nrpn:1},[g.chorusEffectsSend]:{min:0,max:1e3,def:0,nrpn:1},[g.reverbEffectsSend]:{min:0,max:1e3,def:0,nrpn:1},[g.pan]:{min:-500,max:500,def:0,nrpn:1},[g.delayModLFO]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[g.freqModLFO]:{min:-16e3,max:4500,def:0,nrpn:4},[g.delayVibLFO]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[g.freqVibLFO]:{min:-16e3,max:4500,def:0,nrpn:4},[g.delayModEnv]:{min:-32768,max:5e3,def:-32768,nrpn:2},[g.attackModEnv]:{min:-32768,max:8e3,def:-32768,nrpn:2},[g.holdModEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[g.decayModEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[g.sustainModEnv]:{min:0,max:1e3,def:0,nrpn:1},[g.releaseModEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[g.keyNumToModEnvHold]:{min:-1200,max:1200,def:0,nrpn:1},[g.keyNumToModEnvDecay]:{min:-1200,max:1200,def:0,nrpn:1},[g.delayVolEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[g.attackVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[g.holdVolEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[g.decayVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[g.sustainVolEnv]:{min:0,max:1440,def:0,nrpn:1},[g.releaseVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[g.keyNumToVolEnvHold]:{min:-1200,max:1200,def:0,nrpn:1},[g.keyNumToVolEnvDecay]:{min:-1200,max:1200,def:0,nrpn:1},[g.startloopAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[g.keyNum]:{min:-1,max:127,def:-1,nrpn:1},[g.velocity]:{min:-1,max:127,def:-1,nrpn:1},[g.initialAttenuation]:{min:0,max:1440,def:0,nrpn:1},[g.endloopAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[g.coarseTune]:{min:-120,max:120,def:0,nrpn:1},[g.fineTune]:{min:-12700,max:12700,def:0,nrpn:1},[g.scaleTuning]:{min:0,max:1200,def:100,nrpn:1},[g.exclusiveClass]:{min:0,max:99999,def:0,nrpn:0},[g.overridingRootKey]:{min:-1,max:127,def:-1,nrpn:0},[g.sampleModes]:{min:0,max:3,def:0,nrpn:0},[g.amplitude]:{min:-1e3,max:1e3,def:0,nrpn:1},[g.vibLfoRate]:{min:-1e3,max:1e3,def:0,nrpn:1},[g.vibLfoToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[g.vibLfoAmplitudeDepth]:{min:0,max:1e3,def:0,nrpn:1},[g.modLfoRate]:{min:-1e3,max:1e3,def:0,nrpn:1},[g.modLfoAmplitudeDepth]:{min:0,max:1e3,def:0,nrpn:1}}),$s=new Int16Array(ot);for(let A=0;A<$s.length;A++)hA[A]&&($s[A]=hA[A].def);var xe={monoSample:1,rightSample:2,leftSample:4,linkedSample:8,romMonoSample:32769,romRightSample:32770,romLeftSample:32772,romLinkedSample:32776},Ae={noController:0,noteOnVelocity:2,noteOnKeyNum:3,polyPressure:10,channelPressure:13,pitchWheel:14,pitchWheelRange:16,link:127},me={linear:0,concave:1,convex:2,switch:3};var Z={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},L={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},_n={forward:0,loopAndRelease:1},ve=128,js=147,ls=new Int16Array(js).fill(0),Ge=(A,e)=>ls[A]=e<<7;Ge(u.mainVolume,100);Ge(u.balance,64);Ge(u.expressionController,127);Ge(u.pan,64);Ge(u.portamentoOnOff,127);Ge(u.filterResonance,64);Ge(u.releaseTime,64);Ge(u.attackTime,64);Ge(u.brightness,64);Ge(u.decayTime,64);Ge(u.vibratoRate,64);Ge(u.vibratoDepth,64);Ge(u.vibratoDelay,64);Ge(u.generalPurposeController6,64);Ge(u.generalPurposeController8,64);Ge(u.registeredParameterLSB,127);Ge(u.registeredParameterMSB,127);Ge(u.nonRegisteredParameterLSB,127);Ge(u.nonRegisteredParameterMSB,127);Ge(ve+Ae.pitchWheel,64);Ge(ve+Ae.pitchWheelRange,2);var Ta=Object.keys(Ce).length,Ua=new Float32Array(Ta);Ua[Ce.modulationMultiplier]=1;var bn=new Int8Array(128).fill(127);bn[35]=0;bn[36]=0;function dr(A){this.lockedControllers[u.portamentoControl]||(this.channelSystem==="xg"?this.controllerChange(u.portamentoControl,60,A):this.controllerChange(u.portamentoControl,0,A))}function Qr(A=!0){for(let[t,s]of ls.entries())this.lockedControllers[t]||(this.midiControllers[t]!==s&&t<127?t!==u.portamentoControl&&t!==u.dataEntryMSB&&t!==u.registeredParameterMSB&&t!==u.registeredParameterLSB&&t!==u.nonRegisteredParameterMSB&&t!==u.nonRegisteredParameterLSB&&this.controllerChange(t,s>>7,A):this.midiControllers[t]=s);this.octaveTuning.fill(0),dr.call(this,A),this.rxChannel=this.channel,this.randomPan=!1,this.insertionEnabled&&!this.synthCore.masterParameters.insertionEffectLock&&(this.synthCore.callEvent("effectChange",{effect:"insertion",parameter:-2,value:this.channel}),this.insertionEnabled=!1),this.cc1=16,this.cc2=17,this.drumMap=this.channel%16===bA?1:0,this.resetDrumParams(),this.resetVibratoParams(),!this.lockedControllers[u.monoModeOn]&&!this.lockedControllers[u.polyModeOn]&&(this.polyMode=!0),this.perNotePitch=!1,this.pitchWheel(8192),this.sysExModulators.resetModulators();let e=this.customControllers[Ce.channelTransposeFine];this.customControllers.set(Ua),this.setCustomController(Ce.channelTransposeFine,e),this.resetParameters()}function fr(){this.setBankMSB(Re.getDefaultBank(this.channelSystem)),this.setBankLSB(0),this.setGSDrums(!1),this.setDrums(this.channel%16===bA),this.programChange(0)}var Pa=new Set([u.bankSelect,u.bankSelectLSB,u.mainVolume,u.mainVolumeLSB,u.pan,u.panLSB,u.reverbDepth,u.tremoloDepth,u.chorusDepth,u.variationDepth,u.phaserDepth,u.soundVariation,u.filterResonance,u.releaseTime,u.attackTime,u.brightness,u.decayTime,u.vibratoRate,u.vibratoDepth,u.vibratoDelay,u.soundController10,u.polyModeOn,u.monoModeOn,u.omniModeOn,u.omniModeOff,u.dataEntryMSB,u.dataEntryLSB,u.nonRegisteredParameterLSB,u.nonRegisteredParameterMSB,u.registeredParameterLSB,u.registeredParameterMSB]);function ur(){this.perNotePitch=!1,this.pitchWheel(8192);for(let A=0;A<128;A++){let e=ls[A];!Pa.has(A)&&e!==this.midiControllers[A]&&A!==u.portamentoControl&&this.controllerChange(A,e>>7)}this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}function mr(){this.dataEntryState=_e.Idle,this.midiControllers[u.nonRegisteredParameterLSB]=16256,this.midiControllers[u.nonRegisteredParameterMSB]=16256,this.midiControllers[u.registeredParameterLSB]=16256,this.midiControllers[u.registeredParameterMSB]=16256,this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}var mt=ls.slice(0,128),pr=new Set([u.dataDecrement,u.dataIncrement,u.dataEntryMSB,u.dataEntryLSB,u.registeredParameterLSB,u.registeredParameterMSB,u.nonRegisteredParameterLSB,u.nonRegisteredParameterMSB,u.bankSelect,u.bankSelectLSB,u.resetAllControllers,u.monoModeOn,u.polyModeOn]),$n=A=>pr.has(A);function yr(A,e=void 0){if(!this._midiData)return!1;this.oneTickToSeconds=60/(120*this._midiData.timeDivision),this.sendMIDIReset(),this.playedTime=0,this.eventIndexes=new Array(this._midiData.tracks.length).fill(0);let t=this.synth.midiChannels.length,s=new Array(t).fill(8192),n=[];for(let r=0;r<t;r++)n.push([...mt]);let a,o=0;function i(r){if(s[r]=8192,n?.[r]!==void 0)for(let[h,c]of mt.entries())Pa.has(h)||(n[r][h]=c)}for(;;){let r=this.findFirstEventIndex(),h=this._midiData.tracks[r],c=h.events[this.eventIndexes[r]];if(e===void 0){if(this.playedTime>=A)break}else if(c.ticks>=e)break;let I=fn(c.statusByte),E=I.channel+(this.midiPortChannelOffsets[h.port]||0);switch(I.status){case N.noteOn:{n[E]??=[...mt],n[E][u.portamentoControl]=c.data[0];break}case N.noteOff:break;case N.pitchWheel:{s[E]=c.data[1]<<7|c.data[0];break}case N.controllerChange:{if(this._midiData.isMultiPort&&h.channels.size===0)break;let d=c.data[0];if($n(d)){let y=c.data[1];d===u.resetAllControllers&&i(E),this.sendMIDICC(E,d,y)}else n[E]??=[...mt],n[E][d]=c.data[1];break}case N.setTempo:{let d=6e7/ht(c.data,3);this.oneTickToSeconds=60/(d*this._midiData.timeDivision),a=c,o=r;break}default:{this.processEvent(c,r);break}}this.eventIndexes[r]++,r=this.findFirstEventIndex();let B=this._midiData.tracks[r].events[this.eventIndexes[r]];if(B===void 0)return this.stop(),!1;this.playedTime+=this.oneTickToSeconds*(B.ticks-c.ticks)}for(let r=0;r<t;r++)if(s[r]!==void 0&&this.sendMIDIPitchWheel(r,s[r]),n[r]!==void 0)for(let[h,c]of n[r].entries())c!==mt[h]&&!$n(h)&&this.sendMIDICC(r,h,c);return a&&this.callEvent("metaEvent",{event:a,trackIndex:o}),this.paused&&(this.pausedTime=this.playedTime),!0}var xa=class{songs=[];shuffledSongIndexes=[];synth;externalMIDIPlayback=!1;retriggerPausedNotes=!0;loopCount=0;skipToFirstNoteOn=!0;isFinished=!1;preload=!0;onEventCall;processTick=lr.bind(this);firstNoteTime=0;oneTickToSeconds=0;eventIndexes=[];playedTime=0;pausedTime=-1;absoluteStartTime=0;playingNotes=[];currentMIDIPorts=[];midiPortChannelOffset=0;midiPortChannelOffsets={};assignMIDIPort=Cr.bind(this);loadNewSequence=Er.bind(this);processEvent=Ir.bind(this);setTimeTo=yr.bind(this);constructor(A){this.synth=A,this.absoluteStartTime=this.synth.currentSynthTime}_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.currentSynthTime-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 this.playingNotes=[],this.callEvent("timeChange",{newTime:A}),this.setTimeTo(A),this.recalculateStartTime(A)}get paused(){return this.pausedTime!==void 0}play(){if(!this._midiData){ne("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)for(let A of this.playingNotes)this.sendMIDINoteOn(A.channel,A.midiNote,A.velocity);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){tA("%cPreloading all songs...",l.info);for(let e of this.songs)e.embeddedSoundBank===void 0&&e.preloadSynth(this.synth);j()}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()}findFirstEventIndex(){let A=0,e=1/0,t=this._midiData.tracks.length;for(let s=0;s<t;s++){let n=this._midiData.tracks[s];if(this.eventIndexes[s]>=n.events.length)continue;let a=n.events[this.eventIndexes[s]];a.ticks<e&&(A=s,e=a.ticks)}return A}addNewMIDIPort(){for(let A=0;A<16;A++)this.synth.createMIDIChannel()}sendMIDIMessage(A){if(!this.externalMIDIPlayback){ne(`Attempting to send ${gs(A)} to the synthesizer via sendMIDIMessage. This shouldn't happen!`);return}this.callEvent("midiMessage",{message:A,time:this.synth.currentSynthTime})}sendMIDIAllOff(){for(let A=0;A<16;A++)this.sendMIDICC(A,u.sustainPedal,0);if(!this.externalMIDIPlayback){this.synth.stopAllChannels();return}for(let A of this.playingNotes)this.sendMIDINoteOff(A.channel,A.midiNote);for(let A=0;A<va;A++)this.sendMIDICC(A,u.allNotesOff,0),this.sendMIDICC(A,u.allSoundOff,0)}sendMIDIReset(){if(this.sendMIDIAllOff(),!this.externalMIDIPlayback){this.synth.resetAllControllers();return}this.sendMIDIMessage([N.reset])}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;this.playingNotes=[];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.currentSynthTime-A/this._playbackRate}jumpToTick(A){if(!this._midiData)return;this.sendMIDIAllOff();let e=this._midiData.midiTicksToSeconds(A);this.callEvent("timeChange",{newTime:e}),this.recalculateStartTime(e),this.playedTime=e,this.eventIndexes.length=0;for(let s of this._midiData.tracks){let n=s.events.findIndex(a=>a.ticks>=A);this.eventIndexes.push(n===-1?s.events.length:n)}let t=this._midiData.tempoChanges.find(s=>s.ticks<=A);this.oneTickToSeconds=60/(t.tempo*this._midiData.timeDivision)}sendMIDINoteOn(A,e,t){if(!this.externalMIDIPlayback){this.synth.noteOn(A,e,t);return}A%=16,this.sendMIDIMessage([N.noteOn|A,e,t])}sendMIDINoteOff(A,e){if(!this.externalMIDIPlayback){this.synth.noteOff(A,e);return}A%=16,this.sendMIDIMessage([N.noteOff|A,e,64])}sendMIDICC(A,e,t){if(!this.externalMIDIPlayback){this.synth.controllerChange(A,e,t);return}A%=16,this.sendMIDIMessage([N.controllerChange|A,e,t])}sendMIDIPitchWheel(A,e){if(!this.externalMIDIPlayback){this.synth.pitchWheel(A,e);return}A%=16,this.sendMIDIMessage([N.pitchWheel|A,e&127,e>>7])}},bt=bt!==void 0?bt:{},jn=!1,Ha;bt.isInitialized=new Promise(A=>Ha=A);var Sr=function(A){var e,t,s,n,a,o,i,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",h="",c=0;A=A.replace(/[^A-Za-z0-9\+\/\=]/g,"");do n=r.indexOf(A.charAt(c++)),a=r.indexOf(A.charAt(c++)),o=r.indexOf(A.charAt(c++)),i=r.indexOf(A.charAt(c++)),e=n<<2|a>>4,t=(15&a)<<4|o>>2,s=(3&o)<<6|i,h+=String.fromCharCode(e),o!==64&&(h+=String.fromCharCode(t)),i!==64&&(h+=String.fromCharCode(s));while(c<A.length);return h};(function(){var A,e,t,s,n,a,o,i,r,h,c,I,E,B,d,y,D,M,F,w,S,P,C=C!==void 0?C:{};C.wasmBinary=Uint8Array.from(Sr("AGFzbQEAAAABpQEYYAJ/fwF/YAF/AGAAAX9gBH9/f38AYAAAYAN/f38Bf2ABfwF/YAJ/fwBgBn9/f39/fwF/YAR/f39/AX9gBX9/f39/AX9gB39/f39/f38Bf2AGf39/f39/AGAIf39/f39/f38Bf2AFf39/f38AYAd/f39/f39/AGADf39/AGABfwF9YAF9AX1gAnx/AXxgAnx/AX9gA3x8fwF8YAJ8fAF8YAF8AXwCngIPA2VudgZtZW1vcnkCAIACA2VudgV0YWJsZQFwAQQEA2Vudgl0YWJsZUJhc2UDfwADZW52DkRZTkFNSUNUT1BfUFRSA38AA2VudghTVEFDS1RPUAN/AANlbnYJU1RBQ0tfTUFYA38ABmdsb2JhbAhJbmZpbml0eQN8AANlbnYFYWJvcnQAAQNlbnYNZW5sYXJnZU1lbW9yeQACA2Vudg5nZXRUb3RhbE1lbW9yeQACA2VudhdhYm9ydE9uQ2Fubm90R3Jvd01lbW9yeQACA2Vudg5fX19hc3NlcnRfZmFpbAADA2VudgtfX19zZXRFcnJObwABA2VudgZfYWJvcnQABANlbnYWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwAFA3d2BgYCAQcHAQIBAQcBCAcFAAkGCQoHBgYGBgEFBgIBBgYKAAgLAAYGBgYGBgYBAAoMDAMGBQANCAoJAAwODA8OAQAGBgcEABAJEAERAAADBQwAAAMHBxIGAQAABwIFEwMOBw8HBgYQFAoVExYXFxcXFgQFBQYFAAYkB38BIwELfwEjAgt/ASMDC38BQQALfwFBAAt8ASMEC38BQQALB9MCFRBfX2dyb3dXYXNtTWVtb3J5AAgRX19fZXJybm9fbG9jYXRpb24AYwVfZnJlZQBfB19tYWxsb2MAXgdfbWVtY3B5AHkHX21lbXNldAB6BV9zYnJrAHsXX3N0Yl92b3JiaXNfanNfY2hhbm5lbHMAJhRfc3RiX3ZvcmJpc19qc19jbG9zZQAlFV9zdGJfdm9yYmlzX2pzX2RlY29kZQAoE19zdGJfdm9yYmlzX2pzX29wZW4AJBpfc3RiX3ZvcmJpc19qc19zYW1wbGVfcmF0ZQAnC2R5bkNhbGxfaWlpAHwTZXN0YWJsaXNoU3RhY2tTcGFjZQAMC2dldFRlbXBSZXQwAA8LcnVuUG9zdFNldHMAeAtzZXRUZW1wUmV0MAAOCHNldFRocmV3AA0Kc3RhY2tBbGxvYwAJDHN0YWNrUmVzdG9yZQALCXN0YWNrU2F2ZQAKCQoBACMACwR9VFl9Csb2A3YGACAAQAALGwEBfyMGIQEjBiAAaiQGIwZBD2pBcHEkBiABCwQAIwYLBgAgACQGCwoAIAAkBiABJAcLEAAjCEUEQCAAJAggASQJCwsGACAAJAsLBAAjCwsRACAABEAgABARIAAgABASCwvvBwEKfyAAQYADaiEHIAcoAgAhBQJAIAUEQCAAQfwBaiEEIAQoAgAhASABQQBKBEAgAEHwAGohCANAIAUgAkEYbGpBEGohCSAJKAIAIQEgAQRAIAgoAgAhAyAFIAJBGGxqQQ1qIQogCi0AACEGIAZB/wFxIQYgAyAGQbAQbGpBBGohAyADKAIAIQMgA0EASgRAQQAhAwNAIAEgA0ECdGohASABKAIAIQEgACABEBIgA0EBaiEDIAgoAgAhASAKLQAAIQYgBkH/AXEhBiABIAZBsBBsakEEaiEBIAEoAgAhBiAJKAIAIQEgAyAGSA0ACwsgACABEBILIAUgAkEYbGpBFGohASABKAIAIQEgACABEBIgAkEBaiECIAQoAgAhASACIAFODQMgBygCACEFDAAACwALCwsgAEHwAGohAyADKAIAIQEgAQRAIABB7ABqIQUgBSgCACECIAJBAEoEQEEAIQIDQAJAIAEgAkGwEGxqQQhqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQRxqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQSBqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQaQQaiEEIAQoAgAhBCAAIAQQEiABIAJBsBBsakGoEGohASABKAIAIQEgAUUhBCABQXxqIQFBACABIAQbIQEgACABEBIgAkEBaiECIAUoAgAhASACIAFODQAgAygCACEBDAELCyADKAIAIQELIAAgARASCyAAQfgBaiEBIAEoAgAhASAAIAEQEiAHKAIAIQEgACABEBIgAEGIA2ohAyADKAIAIQEgAQRAIABBhANqIQUgBSgCACECIAJBAEoEQEEAIQIDQCABIAJBKGxqQQRqIQEgASgCACEBIAAgARASIAJBAWohAiAFKAIAIQcgAygCACEBIAIgB0gNAAsLIAAgARASCyAAQQRqIQIgAigCACEBIAFBAEoEQEEAIQEDQCAAQZQGaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQZQHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQdgHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiABQQFqIQEgAigCACEDIAEgA0ghAyABQRBJIQUgBSADcQ0ACwtBACEBA0AgAEGgCGogAUECdGohAiACKAIAIQIgACACEBIgAEGoCGogAUECdGohAiACKAIAIQIgACACEBIgAEGwCGogAUECdGohAiACKAIAIQIgACACEBIgAEG4CGogAUECdGohAiACKAIAIQIgACACEBIgAEHACGogAUECdGohAiACKAIAIQIgACACEBIgAUEBaiEBIAFBAkcNAAsLGwAgAEHEAGohACAAKAIAIQAgAEUEQCABEF8LC3wBAX8gAEHUB2ohASABQQA2AgAgAEGAC2ohASABQQA2AgAgAEH4CmohASABQQA2AgAgAEGcCGohASABQQA2AgAgAEHVCmohASABQQA6AAAgAEH8CmohASABQQA2AgAgAEHUC2ohASABQQA2AgAgAEHYC2ohACAAQQA2AgAL8AQBB38jBiELIwZBEGokBiALQQhqIQcgC0EEaiEKIAshCCAAQSRqIQYgBiwAACEGAn8gBgR/IABBgAtqIQYgBigCACEGIAZBf0oEQCAFQQA2AgAgACABIAIQFgwCCyAAQRRqIQYgBiABNgIAIAEgAmohAiAAQRxqIQkgCSACNgIAIABB2ABqIQIgAkEANgIAIABBABAXIQkgCUUEQCAFQQA2AgBBAAwCCyAAIAcgCCAKEBghCSAJBEAgBygCACECIAgoAgAhCSAKKAIAIQggACACIAkgCBAaIQogByAKNgIAIABBBGohAiACKAIAIQggCEEASgRAQQAhAgNAIABBlAZqIAJBAnRqIQcgBygCACEHIAcgCUECdGohByAAQdQGaiACQQJ0aiEMIAwgBzYCACACQQFqIQIgAiAISA0ACwsgAwRAIAMgCDYCAAsgBSAKNgIAIABB1AZqIQAgBCAANgIAIAYoAgAhACAAIAFrDAILAkACQAJAAkACQCACKAIAIgNBIGsOBAECAgACCyACQQA2AgAgAEHUAGohAiAAEBkhAwJAIANBf0cEQANAIAIoAgAhAyADDQIgABAZIQMgA0F/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ACECIABBmAhqIQYgBigCACEHIAUgA2shCSAJIAdqIQkgAiAJSSEJIAIgB0khDSACIAdrIQJBACACIA0bIQIgAiADaiECIAIgBUohByAFIAIgBxshAiAJBEAgASACNgIAIAYoAgAhACAAIAJqIQAgBiAANgIAQQEMBgsLCyAAQfQKaiECIAIoAgAhAiADIB9rIQYgBiACaiEGIABBmAhqIQIgAiAGNgIAIAhBATYCAAwBBSAAQZgIaiECIAYNAQsMAQsgBCADayEDIAIoAgAhBCADIARqIQMgAiADNgIACyATKAIAIQIgAgRAIABByABqIQIgAigCACECIABB0ABqIQAgACgCACEAIAIgAEcEQEHTE0HEE0HkGkHnFBAECwsgASAFNgIAQQELIQAgHCQGIAALqAIBBX8gAEHoCmohBSAFKAIAIQICQCACQQBIBEBBACEABSACIAFIBEAgAUEYSgRAIABBGBAsIQIgAUFoaiEBIAAgARAsIQAgAEEYdCEAIAAgAmohACAADwsgAkUEQCAAQeQKaiECIAJBADYCAAsgAEHkCmohAwJAAkACQANAIAAQLiECIAJBf0YNASAFKAIAIQQgAiAEdCECIAMoAgAhBiAGIAJqIQIgAyACNgIAIAUgBEEIaiICNgIAIAIgAUgNAAwCAAsACyAFQX82AgBBACEADAQLIARBeEgEQEEAIQAMBAsLCyAAQeQKaiEEIAQoAgAhA0EBIAF0IQAgAEF/aiEAIAMgAHEhACADIAF2IQMgBCADNgIAIAIgAWshASAFIAE2AgALCyAAC40CAAJAIABBAEgEf0EABSAAQYCAAUgEQCAAQRBIBEAgAEGACGohACAALAAAIQAMAwsgAEGABEgEQCAAQQV2IQAgAEGACGohACAALAAAIQAgAEEFaiEABSAAQQp2IQAgAEGACGohACAALAAAIQAgAEEKaiEACwwCCyAAQYCAgAhIBH8gAEGAgCBIBH8gAEEPdiEAIABBgAhqIQAgACwAACEAIABBD2oFIABBFHYhACAAQYAIaiEAIAAsAAAhACAAQRRqCwUgAEGAgICAAkgEfyAAQRl2IQAgAEGACGohACAALAAAIQAgAEEZagUgAEEediEAIABBgAhqIQAgACwAACEAIABBHmoLCwshAAsgAAuiAQEDfyAAQdQKaiECIAIsAAAhAQJAAkAgAQ0AIABB3ApqIQEgASgCACEBIAEEQEF/IQMFIAAQLyEBIAEEQCACLAAAIQEgAQ0CQaEUQcQTQfYLQbUUEAQFQX8hAwsLDAELIAFBf2pBGHRBGHUhASACIAE6AAAgAEHsCmohASABKAIAIQIgAkEBaiECIAEgAjYCACAAEDAhACAAQf8BcSEDCyADC6wCAQd/IABB3ApqIQIgAigCACEBAkAgAUUEQCAAQdgKaiEEIAQoAgAhASABQX9GBEAgAEHQCGohASABKAIAIQEgAUF/aiEBIABB4ApqIQMgAyABNgIAIAAQMSEBIAFFBEAgAkEBNgIADAMLIABB0wpqIQEgASwAACEBIAFBAXEhASABBH8gBCgCAAUgAEEgEBUMAwshAQsgAUEBaiEHIAQgBzYCACAAQdQIaiABaiEDIAMsAAAhBiAGQf8BcSEDIAZBf0cEQCACQQE2AgAgAEHgCmohAiACIAE2AgALIABB0AhqIQEgASgCACEBIAcgAU4EQCAEQX82AgALIABB1ApqIQAgACwAACEBIAEEQEHFFEHEE0HoC0HaFBAEBSAAIAY6AAAgAyEFCwsLIAULUQEDfyAAQRRqIQMgAygCACEBIABBHGohAiACKAIAIQIgASACSQR/IAFBAWohACADIAA2AgAgASwAAAUgAEHUAGohACAAQQE2AgBBAAshACAACyABAX8gABAyIQEgAQR/IAAQMwUgAEEeEBVBAAshACAAC2ABAX8gABAwIQEgAUH/AXFBzwBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQAgAEH/AXFB0wBGIQAFQQAhAAsFQQAhAAsFQQAhAAsgAAvZAwEGfyAAEDAhAQJ/IAFB/wFxBH8gAEEfEBVBAAUgABAwIQEgAEHTCmohAiACIAE6AAAgABAjIQUgABAjIQIgABAjGiAAECMhASAAQcwIaiEDIAMgATYCACAAECMaIAAQMCEBIAFB/wFxIQEgAEHQCGohAyADIAE2AgAgAEHUCGohBCAAIAQgARAiIQEgAUUEQCAAQQoQFUEADAILIABB8ApqIQQgBEF+NgIAIAIgBXEhAQJAIAFBf0cEQCADKAIAIQEgAUEASgRAA0ACQCABQX9qIQIgAEHUCGogAmohBiAGLAAAIQYgBkF/Rw0AIAFBAUwNBCACIQEMAQsLIAQgAjYCACAAQfQKaiEBIAEgBTYCAAsLCyAAQdUKaiEBIAEsAAAhASABBEAgAygCACEDIANBAEoEf0EAIQJBACEBA0AgAEHUCGogAWohBCAELQAAIQQgBEH/AXEhBCACIARqIQIgAUEBaiEBIAEgA0gNAAsgAkEbagVBGwshASAAQShqIQIgAigCACECIAEgA2ohASABIAJqIQEgAEEsaiEDIAMgAjYCACAAQTBqIQIgAiABNgIAIABBNGohASABIAU2AgALIABB2ApqIQAgAEEANgIAQQELCyEAIAALowEBB38gAEHoCmohAyADKAIAIQECQCABQRlIBEAgAEHkCmohBCABRQRAIARBADYCAAsgAEHUCmohBSAAQdwKaiEGA0AgBigCACEBIAEEQCAFLAAAIQEgAUUNAwsgABAuIQIgAkF/Rg0CIAMoAgAhASACIAF0IQIgBCgCACEHIAcgAmohAiAEIAI2AgAgAUEIaiECIAMgAjYCACABQRFIDQALCwsLrQUBCX8gABA0IAFBIGohAiACKAIAIQUCQAJAIAVFIgNFDQAgAUGkEGohAiACKAIAIQIgAg0AQX8hAQwBCyABQQRqIQIgAigCACECAkACQCACQQhKBEAgAUGkEGohAyADKAIAIQMgAw0BBSADDQELDAELIABB5ApqIQggCCgCACEJIAkQOiEHIAFBrBBqIQIgAigCACECIAJBAUoEQCABQaQQaigCACEKQQAhAwNAIAJBAXYhBSAFIANqIQQgCiAEQQJ0aiEGIAYoAgAhBiAGIAdLIQYgAiAFayECIAMgBCAGGyEDIAUgAiAGGyECIAJBAUoNAAsFQQAhAwsgAUEXaiECIAIsAAAhAiACRQRAIAFBqBBqIQIgAigCACECIAIgA0ECdGohAiACKAIAIQMLIAFBCGohASABKAIAIQEgASADaiEBIAEtAAAhASABQf8BcSEBIABB6ApqIQIgAigCACEAIAAgAUgEf0EAIQBBfwUgACABayEAIAkgAXYhASAIIAE2AgAgAwshASACIAA2AgAMAQsgAUEXaiEDIAMsAAAhAyADBEBBgRVBxBNB6gxBjBUQBAsCQCACQQBKBEAgASgCCCEIIABB5ApqIQlBACEBA0ACQCAIIAFqIQMgAywAACEEIARB/wFxIQMgBEF/RwRAIAUgAUECdGoh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IwZBEGokBiACIQECfCAAvUIgiKdB/////wdxIgNB/MOk/wNJBHwgA0GewZryA0kEfEQAAAAAAADwPwUgAEQAAAAAAAAAABByCwUgACAAoSADQf//v/8HSw0BGgJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwgQcgwECyABKwMAIAErAwhBARBwmgwDCyABKwMAIAErAwgQcpoMAgsgASsDACABKwMIQQEQcAsLIQAgAiQGIAALywEBA38jBiECIwZBEGokBiACIQECQCAAvUIgiKdB/////wdxIgNB/MOk/wNJBEAgA0GAgMDyA08EQCAARAAAAAAAAAAAQQAQcCEACwUgA0H//7//B0sEQCAAIAChIQAMAgsCQAJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwhBARBwIQAMBQsgASsDACABKwMIEHIhAAwECyABKwMAIAErAwhBARBwmiEADAMLIAErAwAgASsDCBBymiEACwsLIAIkBiAAC5sDAwJ/AX4CfCAAvSIDQj+IpyEBAnwCfwJAIANCIIinQf////8HcSICQarGmIQESwR8IANC////////////AINCgICAgICAgPj/AFYEQCAADwsgAETvOfr+Qi6GQGQEQCAARAAAAAAAAOB/og8FIABE0rx63SsjhsBjIABEUTAt1RBJh8BjcUUNAkQAAAAAAAAAACIADwsABSACQcLc2P4DSwRAIAJBscXC/wNLDQIgAUEBcyABawwDCyACQYCAwPEDSwR8QQAhASAABSAARAAAAAAAAPA/oA8LCwwCCyAARP6CK2VHFfc/oiABQQN0QYATaisDAKCqCyEBIAAgAbciBEQAAOD+Qi7mP6KhIgAgBER2PHk17znqPaIiBaELIQQgACAEIAQgBCAEoiIAIAAgACAAIABE0KS+cmk3Zj6iRPFr0sVBvbu+oKJELN4lr2pWET+gokSTvb4WbMFmv6CiRD5VVVVVVcU/oKKhIgCiRAAAAAAAAABAIAChoyAFoaBEAAAAAAAA8D+gIQAgAUUEQCAADwsgACABEGULnwMDAn8BfgV8IAC9IgNCIIinIQECfyADQgBTIgIgAUGAgMAASXIEfyADQv///////////wCDQgBRBEBEAAAAAAAA8L8gACAAoqMPCyACRQRAIABEAAAAAAAAUEOi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mgDjqR0AXmGRAAgb5gCFmWUAoBRfAI1AaACA2P8AJ3NNAAYGMQDKVhUAyahzAHviYABrjMAAQcMSC11A+yH5PwAAAAAtRHQ+AAAAgJhG+DwAAABgUcx4OwAAAICDG/A5AAAAQCAlejgAAACAIoLjNgAAAAAd82k1AAAAAAAA4D8AAAAAAADgvwAAAAAAAPA/AAAAAAAA+D8AQagTCwgG0M9D6/1MPgBBuxMLigZAA7jiP09nZ1MuL3N0Yl92b3JiaXMuYwBmLT5hbGxvYy5hbGxvY19idWZmZXJfbGVuZ3RoX2luX2J5dGVzID09IGYtPnRlbXBfb2Zmc2V0AHZvcmJpc19kZWNvZGVfaW5pdGlhbABmLT5ieXRlc19pbl9zZWcgPiAwAGdldDhfcGFja2V0X3JhdwBmLT5ieXRlc19pbl9zZWcgPT0gMABuZXh0X3NlZ21lbnQAdm9yYmlzX2RlY29kZV9wYWNrZXRfcmVzdAAhYy0+c3BhcnNlAGNvZGVib29rX2RlY29kZV9zY2FsYXJfcmF3ACFjLT5zcGFyc2UgfHwgeiA8IGMtPnNvcnRlZF9lbnRyaWVzAGNvZGVib29rX2RlY29kZV9kZWludGVybGVhdmVfcmVwZWF0AHogPCBjLT5zb3J0ZWRfZW50cmllcwBjb2RlYm9va19kZWNvZGVfc3RhcnQAKG4gJiAzKSA9PSAwAGltZGN0X3N0ZXAzX2l0ZXIwX2xvb3AAMABnZXRfd2luZG93AGYtPnRlbXBfb2Zmc2V0ID09IGYtPmFsbG9jLmFsbG9jX2J1ZmZlcl9sZW5ndGhfaW5fYnl0ZXMAc3RhcnRfZGVjb2RlcgB2b3JiaXNjLT5zb3J0ZWRfZW50cmllcyA9PSAwAGNvbXB1dGVfY29kZXdvcmRzAHogPj0gMCAmJiB6IDwgMzIAbGVuW2ldID49IDAgJiYgbGVuW2ldIDwgMzIAYXZhaWxhYmxlW3ldID09IDAAayA9PSBjLT5zb3J0ZWRfZW50cmllcwBjb21wdXRlX3NvcnRlZF9odWZmbWFuAGMtPnNvcnRlZF9jb2Rld29yZHNbeF0gPT0gY29kZQBsZW4gIT0gTk9fQ09ERQBpbmNsdWRlX2luX3NvcnQAcG93KChmbG9hdCkgcisxLCBkaW0pID4gZW50cmllcwBsb29rdXAxX3ZhbHVlcwAoaW50KSBmbG9vcihwb3coKGZsb2F0KSByLCBkaW0pKSA8PSBlbnRyaWVzAOoPBG5hbWUB4g9+AAVhYm9ydAENZW5sYXJnZU1lbW9yeQIOZ2V0VG90YWxNZW1vcnkDF2Fib3J0T25DYW5ub3RHcm93TWVtb3J5BA5fX19hc3NlcnRfZmFpbAULX19fc2V0RXJyTm8GBl9hYm9ydAcWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwgQX19ncm93V2FzbU1lbW9yeQkKc3RhY2tBbGxvYwoJc3RhY2tTYXZlCwxzdGFja1Jlc3RvcmUME2VzdGFibGlzaFN0YWNrU3BhY2UNCHNldFRocmV3DgtzZXRUZW1wUmV0MA8LZ2V0VGVtcFJldDAQEV9zdGJfdm9yYmlzX2Nsb3NlEQ5fdm9yYmlzX2RlaW5pdBILX3NldHVwX2ZyZWUTGl9zdGJfdm9yYmlzX2ZsdXNoX3B1c2hkYXRhFCFfc3RiX3ZvcmJpc19kZWNvZGVfZnJhbWVfcHVzaGRhdGEVBl9lcnJvchYgX3ZvcmJpc19zZWFyY2hfZm9yX3BhZ2VfcHVzaGRhdGEXGF9pc193aG9sZV9wYWNrZXRfcHJlc2VudBgVX3ZvcmJpc19kZWNvZGVfcGFja2V0GQxfZ2V0OF9wYWNrZXQaFF92b3JiaXNfZmluaXNoX2ZyYW1lGxlfc3RiX3ZvcmJpc19vcGVuX3B1c2hkYXRhHAxfdm9yYmlzX2luaXQdDl9zdGFydF9kZWNvZGVyHg1fdm9yYmlzX2FsbG9jHxtfc3RiX3ZvcmJpc19nZXRfZmlsZV9vZmZzZXQgE19tYXliZV9zdGFydF9wYWNrZXQhDV9mbHVzaF9wYWNrZXQiBV9nZXRuIwZfZ2V0MzIkE19zdGJfdm9yYmlzX2pzX29wZW4lFF9zdGJfdm9yYmlzX2pzX2Nsb3NlJhdfc3RiX3ZvcmJpc19qc19jaGFubmVscycaX3N0Yl92b3JiaXNfanNfc2FtcGxlX3JhdGUoFV9zdGJfdm9yYmlzX2pzX2RlY29kZSkNX2NyYzMyX3VwZGF0ZSoWX3ZvcmJpc19kZWNvZGVfaW5pdGlhbCsaX3ZvcmJpc19kZWNvZGVfcGFja2V0X3Jlc3QsCV9nZXRfYml0cy0FX2lsb2cuEF9nZXQ4X3BhY2tldF9yYXcvDV9uZXh0X3NlZ21lbnQwBV9nZXQ4MQtfc3RhcnRfcGFnZTIQX2NhcHR1cmVfcGF0dGVybjMdX3N0YXJ0X3BhZ2Vfbm9fY2FwdHVyZXBhdHRlcm40DV9wcmVwX2h1ZmZtYW41G19jb2RlYm9va19kZWNvZGVfc2NhbGFyX3JhdzYOX3ByZWRpY3RfcG9pbnQ3D19kZWNvZGVfcmVzaWR1ZTgJX2RvX2Zsb29yOQ1faW52ZXJzZV9tZGN0OgxfYml0X3JldmVyc2U7EV9tYWtlX2Jsb2NrX2FycmF5PBJfc2V0dXBfdGVtcF9tYWxsb2M9JF9jb2RlYm9va19kZWNvZGVfZGVpbnRlcmxlYXZlX3JlcGVhdD4PX3Jlc2lkdWVfZGVjb2RlPxVfY29kZWJvb2tfZGVjb2RlX3N0ZXBAEF9jb2RlYm9va19kZWNvZGVBFl9jb2RlYm9va19kZWNvZGVfc3RhcnRCCl9kcmF3X2xpbmVDF19pbWRjdF9zdGVwM19pdGVyMF9sb29wRBlfaW1kY3Rfc3RlcDNfaW5uZXJfcl9sb29wRRlfaW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wRh9faW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wX2xkNjU0RwhfaXRlcl81NEgLX2dldF93aW5kb3dJEF92b3JiaXNfdmFsaWRhdGVKDV9zdGFydF9wYWNrZXRLBV9za2lwTAtfY3JjMzJfaW5pdE0NX3NldHVwX21hbGxvY04QX3NldHVwX3RlbXBfZnJlZU8SX2NvbXB1dGVfY29kZXdvcmRzUBdfY29tcHV0ZV9zb3J0ZWRfaHVmZm1hblEcX2NvbXB1dGVfYWNjZWxlcmF0ZWRfaHVmZm1hblIPX2Zsb2F0MzJfdW5wYWNrUw9fbG9va3VwMV92YWx1ZXNUDl9wb2ludF9jb21wYXJlVQpfbmVpZ2hib3JzVg9faW5pdF9ibG9ja3NpemVXCl9hZGRfZW50cnlYEF9pbmNsdWRlX2luX3NvcnRZD191aW50MzJfY29tcGFyZVoYX2NvbXB1dGVfdHdpZGRsZV9mYWN0b3JzWw9fY29tcHV0ZV93aW5kb3dcE19jb21wdXRlX2JpdHJldmVyc2VdB19zcXVhcmVeB19tYWxsb2NfBV9mcmVlYAhfcmVhbGxvY2ESX3RyeV9yZWFsbG9jX2NodW5rYg5fZGlzcG9zZV9jaHVua2MRX19fZXJybm9fbG9jYXRpb25kB19tZW1jbXBlB19zY2FsYm5mBl9xc29ydGcFX3NpZnRoBF9zaHJpCF90cmlua2xlagRfc2hsawVfcG50emwIX2FfY3R6X2xtBl9jeWNsZW4LX19fcmVtX3BpbzJvEV9fX3JlbV9waW8yX2xhcmdlcAZfX19zaW5xBl9sZGV4cHIGX19fY29zcwRfY29zdARfc2ludQRfZXhwdgRfbG9ndwRfcG93eAtydW5Qb3N0U2V0c3kHX21lbWNweXoHX21lbXNldHsFX3Nicmt8C2R5bkNhbGxfaWlpfQJiMA=="),function(Q){return Q.charCodeAt(0)});var C=C!==void 0?C:{},x={};for(A in C)C.hasOwnProperty(A)&&(x[A]=C[A]);C.arguments=[],C.thisProgram="./this.program",C.quit=function(Q,f){throw f},C.preRun=[],C.postRun=[];var J=!1,Y=!1,T=!1,U=!1;J=typeof window=="object",Y=typeof importScripts=="function",T=typeof process=="object"&&typeof Di=="function"&&!J&&!Y,U=!J&&!T&&!Y;var q="";function m(Q){return C.locateFile?C.locateFile(Q,q):q+Q}T?(q="/",C.read=function(f,p){var R;return e||(e=void 0),t||(t=void 0),f=t.normalize(f),R=e.readFileSync(f),p?R:R.toString()},C.readBinary=function(f){var p=C.read(f,!0);return p.buffer||(p=new Uint8Array(p)),Be(p.buffer),p},process.argv.length>1&&(C.thisProgram=process.argv[1].replace(/\\/g,"/")),C.arguments=process.argv.slice(2),typeof module<"u",process.on("uncaughtException",function(Q){if(!(Q instanceof Qt))throw Q}),process.on("unhandledRejection",function(Q,f){process.exit(1)}),C.quit=function(Q){process.exit(Q)},C.inspect=function(){return"[Emscripten Module object]"}):U?(typeof read<"u"&&(C.read=function(f){return read(f)}),C.readBinary=function(f){var p;return typeof readbuffer=="function"?new Uint8Array(readbuffer(f)):(Be(typeof(p=read(f,"binary"))=="object"),p)},typeof scriptArgs<"u"?C.arguments=scriptArgs:typeof arguments<"u"&&(C.arguments=arguments),typeof quit=="function"&&(C.quit=function(Q){quit(Q)})):(J||Y)&&(J?document.currentScript&&(q=document.currentScript.src):q=self.location.href,q=q.indexOf("blob:")!==0?q.split("/").slice(0,-1).join("/")+"/":"",C.read=function(f){var p=new XMLHttpRequest;return p.open("GET",f,!1),p.send(null),p.responseText},Y&&(C.readBinary=function(f){var p=new XMLHttpRequest;return p.open("GET",f,!1),p.responseType="arraybuffer",p.send(null),new Uint8Array(p.response)}),C.readAsync=function(f,p,R){var X=new XMLHttpRequest;X.open("GET",f,!0),X.responseType="arraybuffer",X.onload=function(){if(X.status==200||X.status==0&&X.response){p(X.response);return}R()},X.onerror=R,X.send(null)},C.setWindowTitle=function(Q){document.title=Q});var v=C.print||(typeof console<"u"?console.log.bind(console):typeof print<"u"?print:null),H=C.printErr||(typeof printErr<"u"?printErr:typeof console<"u"&&console.warn.bind(console)||v);for(A in x)x.hasOwnProperty(A)&&(C[A]=x[A]);function O(Q){var f=B;return B=B+Q+15&-16,f}function b(Q){var f=r[w>>2],p=f+Q+15&-16;return r[w>>2]=p,p>=Me&&!Et()?(r[w>>2]=f,0):f}function G(Q,f){return f||(f=16),Q=Math.ceil(Q/f)*f}function K(Q){switch(Q){case"i1":case"i8":return 1;case"i16":return 2;case"i32":case"float":return 4;case"i64":case"double":return 8;default:if(Q[Q.length-1]==="*")return 4;if(Q[0]!=="i")return 0;var f=parseInt(Q.substr(1));return Be(f%8==0),f/8}}function ee(Q){ee.shown||(ee.shown={}),ee.shown[Q]||(ee.shown[Q]=1,H(Q))}x=void 0;var ie={"f64-rem":function(Q,f){return Q%f},debugger:function(){}},Ee=[];function oe(Q,f){for(var p=0,R=p;R<p+0;R++)if(!Ee[R])return Ee[R]=Q,1+R;throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS."}function le(Q){Ee[Q-1]=null}var re={};function Ie(Q,f){if(Q){Be(f),re[f]||(re[f]={});var p=re[f];return p[Q]||(f.length===1?p[Q]=function(){return _(f,Q)}:f.length===2?p[Q]=function(X){return _(f,Q,[X])}:p[Q]=function(){return _(f,Q,Array.prototype.slice.call(arguments))}),p[Q]}}function ke(Q,f,p){return p?+(Q>>>0)+4294967296*+(f>>>0):+(Q>>>0)+4294967296*+(0|f)}function _(Q,f,p){return p&&p.length?C["dynCall_"+Q].apply(null,[f].concat(p)):C["dynCall_"+Q].call(null,f)}var ce=0,Te=0;function Be(Q,f){Q||SA("Assertion failed: "+f)}function Ue(Q){var f=C["_"+Q];return Be(f,"Cannot call unknown function "+Q+", make sure it is exported"),f}var Je={stackSave:function(){Fs()},stackRestore:function(){Rs()},arrayToC:function(Q){var f,p,R=xt(Q.length);return f=Q,p=R,n.set(f,p),R},stringToC:function(Q){var f=0;if(Q!=null&&Q!==0){var p=(Q.length<<2)+1;f=xt(p),lt(Q,f,p)}return f}},TA={string:Je.stringToC,array:Je.arrayToC};function uA(Q,f,p,R,X){var ae=Ue(Q),he=[],W=0;if(R)for(var Pe=0;Pe<R.length;Pe++){var ye=TA[p[Pe]];ye?(W===0&&(W=Fs()),he[Pe]=ye(R[Pe])):he[Pe]=R[Pe]}var Se,fe=ae.apply(null,he);return fe=(Se=fe,f==="string"?RA(Se):f==="boolean"?!!Se:Se),W!==0&&Rs(W),fe}function It(Q,f,p,R){switch((p=p||"i8").charAt(p.length-1)==="*"&&(p="i32"),p){case"i1":case"i8":n[Q>>0]=f;break;case"i16":o[Q>>1]=f;break;case"i32":r[Q>>2]=f;break;case"i64":tempI64=[f>>>0,+mi(tempDouble=f)>=1?tempDouble>0?(0|yi(+Yn(tempDouble/4294967296),4294967295))>>>0:~~+pi((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0],r[Q>>2]=tempI64[0],r[Q+4>>2]=tempI64[1];break;case"float":c[Q>>2]=f;break;case"double":I[Q>>3]=f;break;default:SA("invalid type for setValue: "+p)}}function ps(Q,f,p){switch((f=f||"i8").charAt(f.length-1)==="*"&&(f="i32"),f){case"i1":case"i8":return n[Q>>0];case"i16":return o[Q>>1];case"i32":case"i64":return r[Q>>2];case"float":return c[Q>>2];case"double":return I[Q>>3];default:SA("invalid type for getValue: "+f)}return null}function ys(Q,f,p,R){typeof Q=="number"?(ae=!0,he=Q):(ae=!1,he=Q.length);var X=typeof f=="string"?f:null;if(W=p==4?R:[typeof Pt=="function"?Pt:O,xt,O,b][p===void 0?2:p](Math.max(he,X?1:f.length)),ae){for(R=W,Be((3&W)==0),Pe=W+(-4&he);R<Pe;R+=4)r[R>>2]=0;for(Pe=W+he;R<Pe;)n[R++>>0]=0;return W}if(X==="i8")return Q.subarray||Q.slice?a.set(Q,W):a.set(new Uint8Array(Q),W),W;for(var ae,he,W,Pe,ye,Se,fe,se=0;se<he;){var We=Q[se];if((ye=X||f[se])===0){se++;continue}ye=="i64"&&(ye="i32"),It(W+se,We,ye),fe!==ye&&(Se=K(ye),fe=ye),se+=Se}return W}function WA(Q){return d?bs?Pt(Q):b(Q):O(Q)}function RA(Q,f){if(f===0||!Q)return"";for(var p,R,X,ae=0,he=0;ae|=R=a[Q+he>>0],(R!=0||f)&&(he++,!f||he!=f););f||(f=he);var W="";if(ae<128){for(;f>0;)X=String.fromCharCode.apply(String,a.subarray(Q,Q+Math.min(f,1024))),W=W?W+X:X,Q+=1024,f-=1024;return W}return p=Q,(function(ye,Se){for(var fe=Se;ye[fe];)++fe;if(fe-Se>16&&ye.subarray&&Gt)return Gt.decode(ye.subarray(Se,fe));for(var se,We,sA,nA,aA,HA,iA="";;){if(!(se=ye[Se++]))return iA;if(!(128&se)){iA+=String.fromCharCode(se);continue}if(We=63&ye[Se++],(224&se)==192){iA+=String.fromCharCode((31&se)<<6|We);continue}if(sA=63&ye[Se++],(240&se)==224?se=(15&se)<<12|We<<6|sA:(nA=63&ye[Se++],(248&se)==240?se=(7&se)<<18|We<<12|sA<<6|nA:(aA=63&ye[Se++],se=(252&se)==248?(3&se)<<24|We<<18|sA<<12|nA<<6|aA:(1&se)<<30|We<<24|sA<<18|nA<<12|aA<<6|(HA=63&ye[Se++]))),se<65536)iA+=String.fromCharCode(se);else{var ft=se-65536;iA+=String.fromCharCode(55296|ft>>10,56320|1023&ft)}}})(a,p)}function je(Q){for(var f="";;){var p=n[Q++>>0];if(!p)return f;f+=String.fromCharCode(p)}}function Ss(Q,f){return(function(R,X,ae){for(var he=0;he<R.length;++he)n[X++>>0]=R.charCodeAt(he);ae||(n[X>>0]=0)})(Q,f,!1)}var Gt=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function zA(Q,f,p,R){if(!(R>0))return 0;for(var X=p,ae=p+R-1,he=0;he<Q.length;++he){var W=Q.charCodeAt(he);if(W>=55296&&W<=57343&&(W=65536+((1023&W)<<10)|1023&Q.charCodeAt(++he)),W<=127){if(p>=ae)break;f[p++]=W}else if(W<=2047){if(p+1>=ae)break;f[p++]=192|W>>6,f[p++]=128|63&W}else if(W<=65535){if(p+2>=ae)break;f[p++]=224|W>>12,f[p++]=128|W>>6&63,f[p++]=128|63&W}else if(W<=2097151){if(p+3>=ae)break;f[p++]=240|W>>18,f[p++]=128|W>>12&63,f[p++]=128|W>>6&63,f[p++]=128|63&W}else if(W<=67108863){if(p+4>=ae)break;f[p++]=248|W>>24,f[p++]=128|W>>18&63,f[p++]=128|W>>12&63,f[p++]=128|W>>6&63,f[p++]=128|63&W}else{if(p+5>=ae)break;f[p++]=252|W>>30,f[p++]=128|W>>24&63,f[p++]=128|W>>18&63,f[p++]=128|W>>12&63,f[p++]=128|W>>6&63,f[p++]=128|63&W}}return f[p]=0,p-X}function lt(Q,f,p){return zA(Q,a,f,p)}function Ke(Q){for(var f=0,p=0;p<Q.length;++p){var R=Q.charCodeAt(p);R>=55296&&R<=57343&&(R=65536+((1023&R)<<10)|1023&Q.charCodeAt(++p)),R<=127?++f:R<=2047?f+=2:R<=65535?f+=3:R<=2097151?f+=4:R<=67108863?f+=5:f+=6}return f}var mA=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function Ct(Q){for(var f=Q,p=f>>1;o[p];)++p;if((f=p<<1)-Q>32&&mA)return mA.decode(a.subarray(Q,f));for(var R=0,X="";;){var ae=o[Q+2*R>>1];if(ae==0)return X;++R,X+=String.fromCharCode(ae)}}function ks(Q,f,p){if(p===void 0&&(p=2147483647),p<2)return 0;for(var R=f,X=(p-=2)<2*Q.length?p/2:Q.length,ae=0;ae<X;++ae){var he=Q.charCodeAt(ae);o[f>>1]=he,f+=2}return o[f>>1]=0,f-R}function pA(Q){return 2*Q.length}function Mt(Q){for(var f=0,p="";;){var R=r[Q+4*f>>2];if(R==0)return p;if(++f,R>=65536){var X=R-65536;p+=String.fromCharCode(55296|X>>10,56320|1023&X)}else p+=String.fromCharCode(R)}}function Lt(Q,f,p){if(p===void 0&&(p=2147483647),p<4)return 0;for(var R=f,X=R+p-4,ae=0;ae<Q.length;++ae){var he=Q.charCodeAt(ae);if(he>=55296&&he<=57343&&(he=65536+((1023&he)<<10)|1023&Q.charCodeAt(++ae)),r[f>>2]=he,(f+=4)+4>X)break}return r[f>>2]=0,f-R}function Un(Q){for(var f=0,p=0;p<Q.length;++p){var R=Q.charCodeAt(p);R>=55296&&R<=57343&&++p,f+=4}return f}function Pn(Q){var f=Ke(Q)+1,p=Pt(f);return p&&zA(Q,n,p,f),p}function Nt(Q){var f=Ke(Q)+1,p=xt(f);return zA(Q,n,p,f),p}function UA(Q){return Q}function Ds(){var Q,f=(function(){var R=Error();if(!R.stack){try{throw Error(0)}catch(X){R=X}if(!R.stack)return"(no stack trace available)"}return R.stack.toString()})();return C.extraStackTrace&&(f+=`
|
|
2
|
+
`+C.extraStackTrace()),(Q=f).replace(/__Z[\w\d_]+/g,function(p){var R,X=R=p;return p===X?p:p+" ["+X+"]"})}function yA(Q,f){return Q%f>0&&(Q+=f-Q%f),Q}function _A(Q){C.buffer=s=Q}function PA(){C.HEAP8=n=new Int8Array(s),C.HEAP16=o=new Int16Array(s),C.HEAP32=r=new Int32Array(s),C.HEAPU8=a=new Uint8Array(s),C.HEAPU16=i=new Uint16Array(s),C.HEAPU32=h=new Uint32Array(s),C.HEAPF32=c=new Float32Array(s),C.HEAPF64=I=new Float64Array(s)}function Et(){var Q=C.usingWasm?65536:16777216,f=2147483648-Q;if(r[w>>2]>f)return!1;var p=Me;for(Me=Math.max(Me,16777216);Me<r[w>>2];)Me=Me<=536870912?yA(2*Me,Q):Math.min(yA((3*Me+2147483648)/4,Q),f);var R=C.reallocBuffer(Me);return R&&R.byteLength==Me?(_A(R),PA(),!0):(Me=p,!1)}E=B=y=D=M=F=w=0,d=!1,C.reallocBuffer||(C.reallocBuffer=function(Q){try{if(ArrayBuffer.transfer)f=ArrayBuffer.transfer(s,Q);else{var f,p=n;f=new ArrayBuffer(Q),new Int8Array(f).set(p)}}catch{return!1}return!!Si(f)&&f});try{(S=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get))(new ArrayBuffer(4))}catch{S=function(f){return f.byteLength}}var $A=C.TOTAL_STACK||5242880,Me=C.TOTAL_MEMORY||16777216;function Tt(){return Me}function FA(Q){for(;Q.length>0;){var f=Q.shift();if(typeof f=="function"){f();continue}var p=f.func;typeof p=="number"?f.arg===void 0?C.dynCall_v(p):C.dynCall_vi(p,f.arg):p(f.arg===void 0?null:f.arg)}}Me<$A&&H("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+Me+"! (TOTAL_STACK="+$A+")"),C.buffer?s=C.buffer:(typeof WebAssembly=="object"&&typeof WebAssembly.Memory=="function"?(C.wasmMemory=new WebAssembly.Memory({initial:Me/65536}),s=C.wasmMemory.buffer):s=new ArrayBuffer(Me),C.buffer=s),PA();var Bt=[],ws=[],xn=[],Hn=[],On=[],bs=!1,Qi=!1;function fi(Q){Bt.unshift(Q)}function Bh(Q){ws.unshift(Q)}function dh(Q){xn.unshift(Q)}function Qh(Q){Hn.unshift(Q)}function ui(Q){On.unshift(Q)}function fh(Q,f,p){var R,X;ee("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!"),p&&(R=n[X=f+Ke(Q)]),lt(Q,f,1/0),p&&(n[X]=R)}function uh(Q,f,p){return Q>=0?Q:f<=32?2*Math.abs(1<<f-1)+Q:Math.pow(2,f)+Q}function mh(Q,f,p){if(Q<=0)return Q;var R=f<=32?Math.abs(1<<f-1):Math.pow(2,f-1);return Q>=R&&(f<=32||Q>R)&&(Q=-2*R+Q),Q}var mi=Math.abs,pi=Math.ceil,Yn=Math.floor,yi=Math.min,xA=0,vs=null,dt=null;function ph(Q){return Q}C.preloadedImages={},C.preloadedAudios={};var qn="data:application/octet-stream;base64,";function Ut(Q){return String.prototype.startsWith?Q.startsWith(qn):Q.indexOf(qn)===0}(function(){var f="main.wast",p="main.wasm",R="main.temp.asm";Ut(f)||(f=m(f)),Ut(p)||(p=m(p)),Ut(R)||(R=m(R));var X={global:null,env:null,asm2wasm:ie,parent:C},ae=null;function he(fe){return fe}function W(){try{if(C.wasmBinary)return new Uint8Array(C.wasmBinary);if(C.readBinary)return C.readBinary(p);throw"both async and sync fetching of the wasm failed"}catch(fe){SA(fe)}}C.asmPreload=C.asm;var Pe=C.reallocBuffer,ye=function(fe){fe=yA(fe,C.usingWasm?65536:16777216);var se=C.buffer.byteLength;if(C.usingWasm)try{var We=C.wasmMemory.grow((fe-se)/65536);return We!==-1?C.buffer=C.wasmMemory.buffer:null}catch{return null}};C.reallocBuffer=function(fe){return Se==="asmjs"?Pe(fe):ye(fe)};var Se="";C.asm=function(fe,se,We){var sA;if(!(se=sA=se).table){var nA,aA=C.wasmTableSize;aA===void 0&&(aA=1024);var HA=C.wasmMaxTableSize;typeof WebAssembly=="object"&&typeof WebAssembly.Table=="function"?HA!==void 0?se.table=new WebAssembly.Table({initial:aA,maximum:HA,element:"anyfunc"}):se.table=new WebAssembly.Table({initial:aA,element:"anyfunc"}):se.table=Array(aA),C.wasmTable=se.table}return se.memoryBase||(se.memoryBase=C.STATIC_BASE),se.tableBase||(se.tableBase=0),nA=(function(ft,jA,Ms){if(typeof WebAssembly!="object")return H("no native wasm support detected"),!1;if(!(C.wasmMemory instanceof WebAssembly.Memory))return H("no native wasm Memory in use"),!1;function Ht(EA,BA){if((ae=EA.exports).memory){var ut,Ls,Vn;ut=ae.memory,Ls=C.buffer,ut.byteLength<Ls.byteLength&&H("the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here"),Vn=new Int8Array(Ls),new Int8Array(ut).set(Vn),_A(ut),PA()}C.asm=ae,C.usingWasm=!0,(function(vh){if(xA--,C.monitorRunDependencies&&C.monitorRunDependencies(xA),xA==0&&(vs!==null&&(clearInterval(vs),vs=null),dt)){var ki=dt;dt=null,ki()}})("wasm-instantiate")}if(jA.memory=C.wasmMemory,X.global={NaN:NaN,Infinity:1/0},X["global.Math"]=Math,X.env=jA,xA++,C.monitorRunDependencies&&C.monitorRunDependencies(xA),C.instantiateWasm)try{return C.instantiateWasm(X,Ht)}catch(EA){return H("Module.instantiateWasm callback failed with error: "+EA),!1}function et(EA){Ht(EA.instance,EA.module)}function Kn(EA){(!C.wasmBinary&&(J||Y)&&typeof fetch=="function"?fetch(p,{credentials:"same-origin"}).then(function(BA){if(!BA.ok)throw"failed to load wasm binary file at '"+p+"'";return BA.arrayBuffer()}).catch(function(){return W()}):new Promise(function(BA,ut){BA(W())})).then(function(BA){return WebAssembly.instantiate(BA,X)}).then(EA).catch(function(BA){H("failed to asynchronously prepare wasm: "+BA),SA(BA)})}return C.wasmBinary||typeof WebAssembly.instantiateStreaming!="function"||Ut(p)||typeof fetch!="function"?Kn(et):WebAssembly.instantiateStreaming(fetch(p,{credentials:"same-origin"}),X).then(et).catch(function(EA){H("wasm streaming compile failed: "+EA),H("falling back to ArrayBuffer instantiation"),Kn(et)}),{}})(fe,se,We),Be(nA,"no binaryen method succeeded."),nA},C.asm})(),B=(E=1024)+4816,ws.push(),C.STATIC_BASE=E,C.STATIC_BUMP=4816;var eA=B;function yh(Q){n[eA]=n[Q],n[eA+1]=n[Q+1],n[eA+2]=n[Q+2],n[eA+3]=n[Q+3]}function Sh(Q){n[eA]=n[Q],n[eA+1]=n[Q+1],n[eA+2]=n[Q+2],n[eA+3]=n[Q+3],n[eA+4]=n[Q+4],n[eA+5]=n[Q+5],n[eA+6]=n[Q+6],n[eA+7]=n[Q+7]}function kh(Q,f,p){var R=p>0?p:Ke(Q)+1,X=Array(R),ae=zA(Q,X,0,X.length);return f&&(X.length=ae),X}function Dh(Q){for(var f=[],p=0;p<Q.length;p++){var R=Q[p];R>255&&(R&=255),f.push(String.fromCharCode(R))}return f.join("")}B+=16,w=O(4),M=(y=D=G(B))+$A,F=G(M),r[w>>2]=F,d=!0,C.wasmTableSize=4,C.wasmMaxTableSize=4,C.asmGlobalArg={},C.asmLibraryArg={abort:SA,assert:Be,enlargeMemory:Et,getTotalMemory:Tt,abortOnCannotGrowMemory:function(){SA("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+Me+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")},invoke_iii:function(f,p,R){var X=Fs();try{return C.dynCall_iii(f,p,R)}catch(ae){if(Rs(X),typeof ae!="number"&&ae!=="longjmp")throw ae;C.setThrew(1,0)}},___assert_fail:function(f,p,R,X){SA("Assertion failed: "+RA(f)+", at: "+[p?RA(p):"unknown filename",R,X?RA(X):"unknown function"])},___setErrNo:function(f){return C.___errno_location&&(r[C.___errno_location()>>2]=f),f},_abort:function(){C.abort()},_emscripten_memcpy_big:function(f,p,R){return a.set(a.subarray(p,p+R),f),f},_llvm_floor_f64:Yn,DYNAMICTOP_PTR:w,tempDoublePtr:eA,ABORT:ce,STACKTOP:D,STACK_MAX:M};var Jn=C.asm(C.asmGlobalArg,C.asmLibraryArg,s);C.asm=Jn,C.___errno_location=function(){return C.asm.___errno_location.apply(null,arguments)};var Si=C._emscripten_replace_memory=function(){return C.asm._emscripten_replace_memory.apply(null,arguments)};C._free=function(){return C.asm._free.apply(null,arguments)};var Pt=C._malloc=function(){return C.asm._malloc.apply(null,arguments)};C._memcpy=function(){return C.asm._memcpy.apply(null,arguments)},C._memset=function(){return C.asm._memset.apply(null,arguments)},C._sbrk=function(){return C.asm._sbrk.apply(null,arguments)},C._stb_vorbis_js_channels=function(){return C.asm._stb_vorbis_js_channels.apply(null,arguments)},C._stb_vorbis_js_close=function(){return C.asm._stb_vorbis_js_close.apply(null,arguments)},C._stb_vorbis_js_decode=function(){return C.asm._stb_vorbis_js_decode.apply(null,arguments)},C._stb_vorbis_js_open=function(){return C.asm._stb_vorbis_js_open.apply(null,arguments)},C._stb_vorbis_js_sample_rate=function(){return C.asm._stb_vorbis_js_sample_rate.apply(null,arguments)},C.establishStackSpace=function(){return C.asm.establishStackSpace.apply(null,arguments)},C.getTempRet0=function(){return C.asm.getTempRet0.apply(null,arguments)},C.runPostSets=function(){return C.asm.runPostSets.apply(null,arguments)},C.setTempRet0=function(){return C.asm.setTempRet0.apply(null,arguments)},C.setThrew=function(){return C.asm.setThrew.apply(null,arguments)};var xt=C.stackAlloc=function(){return C.asm.stackAlloc.apply(null,arguments)},Rs=C.stackRestore=function(){return C.asm.stackRestore.apply(null,arguments)},Fs=C.stackSave=function(){return C.asm.stackSave.apply(null,arguments)};function Qt(Q){this.name="ExitStatus",this.message="Program terminated with exit("+Q+")",this.status=Q}function Gs(Q){Q=Q||C.arguments,!(xA>0)&&((function(){if(C.preRun)for(typeof C.preRun=="function"&&(C.preRun=[C.preRun]);C.preRun.length;)fi(C.preRun.shift());FA(Bt)})(),!(xA>0)&&(C.calledRun||(C.setStatus?(C.setStatus("Running..."),setTimeout(function(){setTimeout(function(){C.setStatus("")},1),f()},1)):f())));function f(){!C.calledRun&&(C.calledRun=!0,ce||(bs||(bs=!0,FA(ws)),FA(xn),C.onRuntimeInitialized&&C.onRuntimeInitialized(),(function(){if(C.postRun)for(typeof C.postRun=="function"&&(C.postRun=[C.postRun]);C.postRun.length;)ui(C.postRun.shift());FA(On)})()))}}function wh(Q,f){(!f||!C.noExitRuntime||Q!==0)&&(C.noExitRuntime||(ce=!0,Te=Q,D=P,FA(Hn),Qi=!0,C.onExit&&C.onExit(Q)),C.quit(Q,new Qt(Q)))}function SA(Q){throw C.onAbort&&C.onAbort(Q),Q!==void 0?(v(Q),H(Q),Q=JSON.stringify(Q)):Q="",ce=!0,Te=1,"abort("+Q+"). Build with -s ASSERTIONS=1 for more info."}if(C.dynCall_iii=function(){return C.asm.dynCall_iii.apply(null,arguments)},C.asm=Jn,C.ccall=uA,C.cwrap=function(f,p,R,X){var ae=(R=R||[]).every(function(he){return he==="number"});return p!=="string"&&ae&&!X?Ue(f):function(){return uA(f,p,R,arguments,X)}},Qt.prototype=Error(),Qt.prototype.constructor=Qt,dt=function Q(){C.calledRun||Gs(),C.calledRun||(dt=Q)},C.run=Gs,C.abort=SA,C.preInit)for(typeof C.preInit=="function"&&(C.preInit=[C.preInit]);C.preInit.length>0;)C.preInit.pop()();C.noExitRuntime=!0,Gs(),C.onRuntimeInitialized=()=>{jn=!0,Ha()},bt.decode=function(Q){return(function(p){if(!jn)throw Error("SF3 decoder has not been initialized yet. Did you await synth.isReady?");var R={};function X(jA){return new Int32Array(C.HEAPU8.buffer,jA,1)[0]}function ae(jA,Ms){var Ht=new ArrayBuffer(Ms*Float32Array.BYTES_PER_ELEMENT),et=new Float32Array(Ht);return et.set(new Float32Array(C.HEAPU8.buffer,jA,Ms)),et}R.open=C.cwrap("stb_vorbis_js_open","number",[]),R.close=C.cwrap("stb_vorbis_js_close","void",["number"]),R.channels=C.cwrap("stb_vorbis_js_channels","number",["number"]),R.sampleRate=C.cwrap("stb_vorbis_js_sample_rate","number",["number"]),R.decode=C.cwrap("stb_vorbis_js_decode","number",["number","number","number","number","number"]);var he,W,Pe,ye,Se=R.open(),fe=(he=p,W=p.byteLength,Pe=C._malloc(W),(ye=new Uint8Array(C.HEAPU8.buffer,Pe,W)).set(new Uint8Array(he,0,W)),ye),se=C._malloc(4),We=C._malloc(4),sA=R.decode(Se,fe.byteOffset,fe.byteLength,se,We);if(C._free(fe.byteOffset),sA<0)throw R.close(Se),C._free(se),Error("stbvorbis decode failed: "+sA);for(var nA=R.channels(Se),aA=Array(nA),HA=new Int32Array(C.HEAPU32.buffer,X(se),nA),iA=0;iA<nA;iA++)aA[iA]=ae(HA[iA],sA),C._free(HA[iA]);var ft=R.sampleRate(Se);return R.close(Se),C._free(X(se)),C._free(se),{data:aA,sampleRate:ft,eof:!0,error:null}})(Q)}})();var Cs=bt,kr={enableEventSystem:!0,maxBufferSize:Ti,initialTime:0,enableEffects:!0},en=class{pitch=0;gain=1;exclusiveClass=0;pan=64;reverbGain=0;chorusGain=1;delayGain=1;rxNoteOn=!0;rxNoteOff=!1;copyInto(A){return this.pitch=A.pitch,this.chorusGain=A.chorusGain,this.reverbGain=A.reverbGain,this.exclusiveClass=A.exclusiveClass,this.gain=A.gain,this.pan=A.pan,this.rxNoteOff=A.rxNoteOff,this.rxNoteOn=A.rxNoteOn,this}},ea=class An{patch;lockPreset;lockedSystem;midiControllers;lockedControllers;customControllers;channelVibrato;keyShift;octaveTuning;drumParams;isMuted;drumChannel;channelNumber;constructor(e,t,s,n,a,o,i,r,h,c,I,E,B){this.patch=e,this.lockPreset=t,this.lockedSystem=s,this.midiControllers=n,this.lockedControllers=a,this.customControllers=o,this.channelVibrato=i,this.keyShift=r,this.octaveTuning=h,this.drumParams=c,this.isMuted=I,this.drumChannel=E,this.channelNumber=B}static copyFrom(e){return new An({...e.patch},e.lockPreset,e.lockedSystem,e.midiControllers.slice(),[...e.lockedControllers],e.customControllers.slice(),{...e.channelVibrato},e.keyShift,e.octaveTuning.slice(),e.drumParams.map(t=>new en().copyInto(t)),e.isMuted,e.drumChannel,e.channelNumber)}static create(e,t){let s=e.midiChannels[t];return new An({...s.patch,name:s?.preset?.name??"undefined"},s.lockPreset,s.lockedSystem,s.midiControllers.slice(),[...s.lockedControllers],s.customControllers.slice(),{...s.channelVibrato},s.keyShift,s.octaveTuning.slice(),s.drumParams.map(n=>new en().copyInto(n)),s.isMuted,s.drumChannel,t)}apply(e){let t=e.midiChannels[this.channelNumber];t.muteChannel(this.isMuted),t.setDrums(this.drumChannel),t.midiControllers.set(this.midiControllers),t.lockedControllers=this.lockedControllers,t.customControllers.set(this.customControllers),t.updateChannelTuning(),t.channelVibrato.rate=this.channelVibrato.rate,t.channelVibrato.delay=this.channelVibrato.delay,t.channelVibrato.depth=this.channelVibrato.depth,t.keyShift=this.keyShift,t.octaveTuning.set(this.octaveTuning);for(let s=0;s<128;s++)this.drumParams[s].copyInto(t.drumParams[s]);t.setPresetLock(!1),t.setPatch(this.patch),t.setPresetLock(this.lockPreset),t.lockedSystem=this.lockedSystem}};var Dr=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 Ps(A,e,t,s,n,a=0){let i=128-(e+t+s+n.reduce((r,h)=>r+h,0))%128&127;A.systemExclusive([65,16,66,18,e,t,s,...n,i,247],a)}var vn=class tn{channelSnapshots;keyMappings;masterParameters;reverbSnapshot;chorusSnapshot;delaySnapshot;insertionSnapshot;constructor(e,t,s,n,a,o,i){this.channelSnapshots=e,this.masterParameters=t,this.keyMappings=s,this.reverbSnapshot=n,this.chorusSnapshot=a,this.delaySnapshot=o,this.insertionSnapshot=i}static create(e){let t=e.midiChannels.map((s,n)=>ea.create(e,n));return new tn(t,e.getAllMasterParameters(),e.keyModifierManager.getMappings(),e.reverbProcessor.getSnapshot(),e.chorusProcessor.getSnapshot(),e.delayProcessor.getSnapshot(),e.getInsertionSnapshot())}static copyFrom(e){return new tn(e.channelSnapshots.map(t=>ea.copyFrom(t)),{...e.masterParameters},[...e.keyMappings],{...e.reverbSnapshot},{...e.chorusSnapshot},{...e.delaySnapshot},{...e.insertionSnapshot})}apply(e){for(e.keyModifierManager.setMappings(this.keyMappings);e.midiChannels.length<this.channelSnapshots.length;)e.createMIDIChannel();for(let n of this.channelSnapshots)n.apply(e);for(let[n,a]of Object.entries(this.reverbSnapshot))e.reverbProcessor[n]=a;for(let[n,a]of Object.entries(this.chorusSnapshot))e.chorusProcessor[n]=a;for(let[n,a]of Object.entries(this.delaySnapshot))e.delayProcessor[n]=a;let t=this.insertionSnapshot;Ps(e,64,3,0,[t.type>>8,t.type&127]);for(let n=0;n<t.params.length;n++)t.params[n]!==255&&Ps(e,64,3,3+n,[t.params[n]]);for(let n=0;n<t.channels.length;n++)Ps(e,64,64|kn(n),34,[t.channels[n]?1:0]);let s=Object.entries(this.masterParameters);for(let[n,a]of s)e.setMasterParameter(n,a)}},Oa={masterGain:Ni,masterPan:0,voiceCap:Fi,interpolationType:zi.hermite,midiSystem:un,monophonicRetriggerMode:!1,reverbGain:1,chorusGain:1,delayGain:1,reverbLock:!1,chorusLock:!1,delayLock:!1,drumLock:!1,customVibratoLock:!1,nprnParamLock:!1,insertionEffectLock:!1,blackMIDIMode:!1,autoAllocateVoices:!1,transposition:0,deviceID:gt},Rn=-15e3,wr=15e3,sn=new Float32Array(wr-Rn+1);for(let A=0;A<sn.length;A++){let e=Rn+A;sn[A]=Math.pow(2,e/1200)}function ns(A){return A<=-32767?0:sn[A-Rn]}var as=-2e4,Ya=16500,nn=new Float32Array(Ya-as+1);for(let A=0;A<nn.length;A++){let e=as+A;nn[A]=440*Math.pow(2,(e-6900)/1200)}function an(A){return A<as||A>Ya?440*Math.pow(2,(A-6900)/1200):nn[A-as|0]}var qA=-16600,br=16e3,JA=new Float32Array(br-qA+1);for(let A=0;A<JA.length;A++){let e=qA+A;JA[A]=Math.pow(10,-e/200)}function is(A){return JA[A-qA|0]}var vr=.03,Fn=class yt{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){yt.smoothingConstant=vr*(44100/e);let t=new yt(e);t.resonanceCb=0;for(let s=1500;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=yt.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=an(e);n=Math.min(n,this.maxCutoff);let a=is(-(t-3.01)),o=1/Math.sqrt(is(-t)),i=2*Math.PI*n/this.sampleRate,r=Math.cos(i),h=Math.sin(i)/(2*a),c=(1-r)*o,I=c/2,E=I,B=1+h,d=-2*r,y=1-h,D={a0:I/B,a1:c/B,a2:E/B,a3:d/B,a4:y/B};this.a0=D.a0,this.a1=D.a1,this.a2=D.a2,this.a3=D.a3,this.a4=D.a4,yt.cachedCoefficients.set(t+e*961,D)}},rA=960,Jt=900,Rr=.01,Fr=class{sampleRate;attenuationCb=rA;state=0;sampleTime=0;releaseStartCb=rA;releaseStartTimeSamples=0;attackDuration=0;decayDuration=0;releaseDuration=0;sustainCb=0;delayEnd=0;attackEnd=0;holdEnd=0;decayEnd=0;enteredRelease=!1;canEndOnSilentSustain=!1;gainSmoothing;currentGain=0;constructor(A){this.sampleRate=A,this.gainSmoothing=Rr*(44100/A)}process(A,e,t){if(this.enteredRelease)return this.releasePhase(A,e,t);switch(this.state){case 0:return this.delayPhase(A,e,t,0);case 1:return this.attackPhase(A,e,t,0);case 2:return this.holdPhase(A,e,t,0);case 3:return this.decayPhase(A,e,t,0);case 4:return this.sustainPhase(A,e,t,0)}}startRelease(A){this.releaseStartTimeSamples=this.sampleTime;let e=A.overrideReleaseVolEnv||A.modulatedGenerators[g.releaseVolEnv];if(this.releaseDuration=this.timecentsToSamples(Math.max(-7200,e)),this.enteredRelease)this.releaseStartCb=this.attenuationCb;else{let s=Math.max(0,Math.min(rA,this.sustainCb)),n=s/rA,a=(60-A.targetKey)*A.modulatedGenerators[g.keyNumToVolEnvDecay];switch(this.decayDuration=this.timecentsToSamples(A.modulatedGenerators[g.decayVolEnv]+a)*n,this.state){case 0:{this.releaseStartCb=rA;break}case 1:{let o=1-(this.attackEnd-this.releaseStartTimeSamples)/this.attackDuration;this.releaseStartCb=200*Math.log10(o)*-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,rA)),this.attenuationCb=this.releaseStartCb}this.enteredRelease=!0;let t=(rA-this.releaseStartCb)/rA;this.releaseDuration*=t,this.releaseStartCb>=Jt&&(A.isActive=!1)}init(A){this.enteredRelease=!1,this.state=0,this.sampleTime=0,this.canEndOnSilentSustain=A.modulatedGenerators[g.sustainVolEnv]>=Jt,this.currentGain=JA[A.modulatedGenerators[g.initialAttenuation]-qA|0],this.sustainCb=Math.min(rA,A.modulatedGenerators[g.sustainVolEnv]),this.attackDuration=this.timecentsToSamples(A.modulatedGenerators[g.attackVolEnv]);let e=(60-A.targetKey)*A.modulatedGenerators[g.keyNumToVolEnvDecay],t=this.sustainCb/rA;this.decayDuration=this.timecentsToSamples(A.modulatedGenerators[g.decayVolEnv]+e)*t,this.delayEnd=this.timecentsToSamples(A.modulatedGenerators[g.delayVolEnv]),this.attackEnd=this.attackDuration+this.delayEnd;let s=(60-A.targetKey)*A.modulatedGenerators[g.keyNumToVolEnvHold];this.holdEnd=this.timecentsToSamples(A.modulatedGenerators[g.holdVolEnv]+s)+this.attackEnd,this.decayEnd=this.decayDuration+this.holdEnd,this.attackEnd===0&&(this.state=2)}timecentsToSamples(A){return Math.max(0,Math.floor(ns(A)*this.sampleRate))}releasePhase(A,e,t){let{sampleTime:s,currentGain:n,attenuationCb:a}=this,{releaseStartTimeSamples:o,releaseStartCb:i,releaseDuration:r,gainSmoothing:h}=this,c=s-o,I=rA-i,E=n!==t;for(let B=0;B<A;B++)E&&(n+=(t-n)*h),a=c/r*I+i,e[B]*=JA[a-qA|0]*n,s++,c++;return this.sampleTime=s,this.currentGain=n,this.attenuationCb=a,a<Jt}delayPhase(A,e,t,s){let{delayEnd:n}=this,{sampleTime:a}=this;if(a<n){this.attenuationCb=rA;let o=Math.min(n-a,A);if(e.fill(0,s,s+o),s+=o,a+=o,s>=A)return this.sampleTime=a,!0}return this.sampleTime=a,this.state++,this.attackPhase(A,e,t,s)}attackPhase(A,e,t,s){let{attackEnd:n,attackDuration:a,gainSmoothing:o}=this,{sampleTime:i,currentGain:r}=this,h=r!==t;if(i<n)for(this.attenuationCb=0;i<n;){h&&(r+=(t-r)*o);let c=1-(n-i)/a;if(e[s]*=c*r,i++,++s>=A)return this.sampleTime=i,this.currentGain=r,!0}return this.sampleTime=i,this.currentGain=r,this.state++,this.holdPhase(A,e,t,s)}holdPhase(A,e,t,s){let{holdEnd:n,gainSmoothing:a}=this,{sampleTime:o,currentGain:i}=this,r=i!==t;if(o<n){for(this.attenuationCb=0;o<n;)if(r&&(i+=(t-i)*a),e[s]*=i,o++,++s>=A)return this.sampleTime=o,this.currentGain=i,!0}return this.sampleTime=o,this.currentGain=i,this.state++,this.decayPhase(A,e,t,s)}decayPhase(A,e,t,s){let{decayDuration:n,decayEnd:a,gainSmoothing:o,sustainCb:i}=this,{sampleTime:r,currentGain:h,attenuationCb:c}=this,I=h!==t;if(r<a){for(;r<a;)if(I&&(h+=(t-h)*o),c=(1-(a-r)/n)*i,e[s]*=h*JA[c-qA|0],r++,++s>=A)return this.sampleTime=r,this.currentGain=h,this.attenuationCb=c,!0}return this.sampleTime=r,this.currentGain=h,this.attenuationCb=c,this.state++,this.sustainPhase(A,e,t,s)}sustainPhase(A,e,t,s){let{sustainCb:n,gainSmoothing:a}=this;if(this.canEndOnSilentSustain&&n>=Jt)return e.fill(0,s,A),!1;let{sampleTime:o,currentGain:i}=this,r=i!==t;if(s<A)for(this.attenuationCb=n;s<A;)r&&(i+=(t-i)*a),e[s]*=i*JA[n-qA|0],o++,s++;return this.sampleTime=o,this.currentGain=i,!0}},ze=16384,rs=Object.keys(me).length,qa=4,DA=new Float32Array(ze+1),VA=new Float32Array(ze+1);DA[0]=0;DA[DA.length-1]=1;VA[0]=0;VA[VA.length-1]=1;for(let A=1;A<ze-1;A++){let e=-.4166666666666667*Math.log(A/(DA.length-1))/Math.LN10;VA[A]=1-e,DA[DA.length-1-A]=e}function Ja(A,e,t){let s=!!(A&2);switch(A&1&&(t=1-t),e){case me.linear:return s?t*2-1:t;case me.switch:return t=t>.5?1:0,s?t*2-1:t;case me.concave:return s?(t=t*2-1,t<0?-DA[Math.trunc(t*-ze)]:DA[Math.trunc(t*ze)]):DA[Math.trunc(t*ze)];case me.convex:return s?(t=t*2-1,t<0?-VA[Math.trunc(t*-ze)]:VA[Math.trunc(t*ze)]):VA[Math.trunc(t*ze)]}}var xs=1,rn=new Float32Array(1e3);for(let A=0;A<rn.length;A++)rn[A]=Ja(0,me.convex,A/1e3);var Gr=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=rn[~~((1-(this.attackEnd-e)/this.attackDuration)*1e3)]:e<this.holdEnd?this.currentValue=xs:e<this.decayEnd?this.currentValue=(1-(this.decayEnd-e)/this.decayDuration)*(this.sustainLevel-xs)+xs:this.currentValue=this.sustainLevel,this.currentValue)}startRelease(A){this.releaseStartLevel=this.currentValue,this.enteredRelease=!0;let e=this.tc2Sec(Math.max(A.modulatedGenerators[g.releaseModEnv],-7200));this.releaseDuration=e*this.releaseStartLevel}init(A){this.enteredRelease=!1,this.sustainLevel=1-A.modulatedGenerators[g.sustainModEnv]/1e3,this.attackDuration=this.tc2Sec(A.modulatedGenerators[g.attackModEnv]);let e=(60-A.midiNote)*A.modulatedGenerators[g.keyNumToModEnvDecay],t=this.tc2Sec(A.modulatedGenerators[g.decayModEnv]+e);this.decayDuration=t*(1-this.sustainLevel);let s=(60-A.midiNote)*A.modulatedGenerators[g.keyNumToModEnvHold];this.holdDuration=this.tc2Sec(s+A.modulatedGenerators[g.holdModEnv]),this.delayEnd=A.startTime+this.tc2Sec(A.modulatedGenerators[g.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:ns(A)}};function KA(A,e){return(A>>e&1)>0}function Hs(A){return A?1:0}var IA=class on{isBipolar;isNegative;index;isCC;curveType;constructor(e=Ae.noController,t=me.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(u).find(e=>u[e]===this.index)??this.index.toString():Object.keys(Ae).find(e=>Ae[e]===this.index)??this.index.toString()}get curveTypeName(){return Object.keys(me).find(e=>me[e]===this.curveType)??this.curveType.toString()}static fromSourceEnum(e){let t=KA(e,9),s=KA(e,8),n=KA(e,7),a=e&127,o=e>>10&3;return new on(a,o,n,t,s)}static copyFrom(e){return new on(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|Hs(this.isBipolar)<<9|Hs(this.isNegative)<<8|Hs(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[this.index];else switch(this.index){case Ae.noController:{n=16383;break}case Ae.noteOnKeyNum:{n=s.midiNote<<7;break}case Ae.noteOnVelocity:{n=s.velocity<<7;break}case Ae.polyPressure:{n=s.pressure<<7;break}case Ae.pitchWheel:{n=t;break}default:{n=e[this.index+ve];break}}let a=(this.isBipolar?2:0)|(this.isNegative?1:0);return Ka[ze*(this.curveType*rs+a)+n]}},Ka=new Float32Array(ze*qa*rs);for(let A=0;A<rs;A++)for(let e=0;e<qa;e++){let t=ze*(A*rs+e);for(let s=0;s<ze;s++)Ka[t+s]=Ja(e,A,s/ze)}var kt=10;function oA(A,e,t,s,n){return new IA(n,A,s,e,t).toSourceEnum()}var Va=oA(me.linear,!0,!1,!0,u.filterResonance),Fe=class hn{destination=g.initialAttenuation;transformAmount=0;transformType=0;isEffectModulator=!1;isDefaultResonantModulator=!1;primarySource;secondarySource;constructor(e=new IA,t=new IA,s=g.INVALID,n=0,a=0,o=!1,i=!1){this.primarySource=e,this.secondarySource=t,this.destination=s,this.transformAmount=n,this.transformType=a,this.isEffectModulator=o,this.isDefaultResonantModulator=i}get destinationName(){return Object.keys(g).find(e=>g[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 hn(IA.copyFrom(e.primarySource),IA.copyFrom(e.secondarySource),e.destination,e.transformAmount,e.transformType,e.isEffectModulator,e.isDefaultResonantModulator)}toString(){return`Source: ${this.primarySource.toString()}
|
|
3
3
|
Secondary source: ${this.secondarySource.toString()}
|
|
4
4
|
to: ${this.destinationName}
|
|
5
|
-
amount: ${this.transformAmount}`+(this.transformType===2?"absolute value":"")}write(e,t){te(e,this.primarySource.toSourceEnum()),te(e,this.destination),te(e,this.transformAmount),te(e,this.secondarySource.toSourceEnum()),te(e,this.transformType),t&&t.mod++}sumTransform(e){let t=on.copyFrom(this);return t.transformAmount+=e.transformAmount,t}},be=class extends Fe{constructor(A,e,t,s,n){let a=(A===219||A===221)&&e===0&&(t===g.reverbEffectsSend||t===g.chorusEffectsSend),r=A===Va&&e===0&&t===g.initialFilterQ;super(IA.fromSourceEnum(A),IA.fromSourceEnum(e),t,s,n,a,r),this.destination>Er&&(this.destination=g.INVALID)}},xs=960,Hs=me.concave,Mr=[new be(hA(Hs,!1,!0,!1,Ae.noteOnVelocity),0,g.initialAttenuation,xs,0),new be(129,0,g.vibLfoToPitch,50,0),new be(hA(Hs,!1,!0,!0,u.mainVolume),0,g.initialAttenuation,xs,0),new be(13,0,g.vibLfoToPitch,50,0),new be(526,16,g.fineTune,12700,0),new be(650,0,g.pan,500,0),new be(hA(Hs,!1,!0,!0,u.expressionController),0,g.initialAttenuation,xs,0),new be(219,0,g.reverbEffectsSend,200,0),new be(221,0,g.chorusEffectsSend,200,0)],Lr=[new be(hA(me.convex,!0,!1,!0,u.attackTime),0,g.attackVolEnv,6e3,0),new be(hA(me.linear,!0,!1,!0,u.releaseTime),0,g.releaseVolEnv,3600,0),new be(hA(me.linear,!0,!1,!0,u.decayTime),0,g.decayVolEnv,3600,0),new be(hA(me.linear,!0,!1,!0,u.brightness),0,g.initialFilterFc,9600,0),new be(Va,0,g.initialFilterQ,200,0),new be(hA(me.switch,!1,!1,!0,u.softPedal),0,g.initialAttenuation,50,0),new be(hA(me.switch,!1,!1,!0,u.softPedal),0,g.initialFilterFc,-2400,0),new be(hA(me.linear,!0,!1,!0,u.balance),0,g.pan,500,0)],Xa=[...Mr,...Lr],Fn=class{isLooping=!1;sampleData;playbackStep=0;loopStart=0;loopEnd=0;loopLength=0;end=0;cursor=0},Nr=class extends Fn{process(A,e,t){let s=e*this.playbackStep,n=this.sampleData,{loopEnd:a,loopLength:r,loopStart:i,end:o}=this,h=this.cursor;if(this.isLooping)for(let I=0;I<A;I++){h>i&&(h=i+(h-i)%r);let c=h|0,l=c+1;l>=a&&(l-=r);let E=h-c,d=n[l],p=n[c];t[I]=p+(d-p)*E,h+=s}else for(let I=0;I<A;I++){let c=h|0,l=c+1;if(l>=o)return!1;let E=h-c,d=n[l],p=n[c];t[I]=p+(d-p)*E,h+=s}return this.cursor=h,!0}},Tr=class extends Fn{process(A,e,t){let s=e*this.playbackStep,n=this.sampleData,{loopLength:a,loopStart:r,end:i}=this,o=this.cursor;if(this.isLooping)for(let h=0;h<A;h++)o>r&&(o=r+(o-r)%a),t[h]=n[o|0],o+=s;else for(let h=0;h<A;h++){if(o>=i)return!1;t[h]=n[o|0],o+=s}return this.cursor=o,!0}},Ur=class extends Fn{process(A,e,t){let s=e*this.playbackStep,n=this.sampleData,{loopEnd:a,loopLength:r,loopStart:i,end:o}=this,h=this.cursor;if(this.isLooping)for(let I=0;I<A;I++){h>i&&(h=i+(h-i)%r);let c=h|0,l=c+1,E=c+2,d=c+3,p=h-c;l>=a&&(l-=r),E>=a&&(E-=r),d>=a&&(d-=r);let w=n[c],L=n[l],F=n[E],b=n[d],S=(F-w)*.5,H=L-F,B=S+H,x=B+H+(b-L)*.5,q=B+x;t[I]=((x*p-q)*p+S)*p+L,h+=s}else for(let I=0;I<A;I++){let c=h|0,l=c+1,E=c+2,d=c+3,p=h-c;if(d>=o)return!1;let w=n[c],L=n[l],F=n[E],b=n[d],S=(F-w)*.5,H=L-F,B=S+H,x=B+H+(b-L)*.5,q=B+x;t[I]=((x*p-q)*p+S)*p+L,h+=s}return this.cursor=h,!0}},Pr=-2320,xr=1e3/200,hn=class{oscillators=[new Nr,new Tr,new Ur];wavetable=this.oscillators[Oa.interpolationType];filter;generators=new Int16Array(rt);modulatedGenerators=new Int16Array(rt);modulators=new Array;modulatorValues=new Int16Array(64);modEnv=new Gr;volEnv;resonanceOffset=0;priority=0;isActive=!1;hasRendered=!1;isInRelease=!1;isHeld=!1;channel=0;velocity=0;midiNote=0;rootKey=0;targetKey=0;pressure=0;gainModifier=1;loopingMode=0;startTime=0;releaseStartTime=1/0;tuningCents=0;tuningRatio=1;currentPan=0;realKey=60;portamentoFromKey=-1;portamentoDuration=0;overridePan=0;pitchOffset=0;reverbSend=1;chorusSend=1;delaySend=1;exclusiveClass=0;overrideReleaseVolEnv=0;constructor(A){this.volEnv=new Fr(A),this.filter=new Rn(A)}computeModulator(A,e,t){let s=this.modulators[t];if(s.transformAmount===0)return this.modulatorValues[t]=0,0;let n=s.primarySource.getValue(A,e,this),a=s.secondarySource.getValue(A,e,this),r=s.transformAmount;s.isEffectModulator&&r<=1e3&&(r*=xr,r=Math.min(r,1e3));let i=n*a*r;return s.transformType===2&&(i=Math.abs(i)),s.isDefaultResonantModulator&&(this.resonanceOffset=Math.max(0,i/2)),this.modulatorValues[t]=i,i}exclusiveRelease(A,e=Li){this.overrideReleaseVolEnv=Pr,this.isInRelease=!1,this.releaseVoice(A,e)}releaseVoice(A,e=Mi){this.releaseStartTime=A,this.releaseStartTime-this.startTime<e&&(this.releaseStartTime=this.startTime+e)}setup(A,e,t,s,n){this.startTime=A,this.isActive=!0,this.isInRelease=!1,this.hasRendered=!1,this.isHeld=!1,this.releaseStartTime=1/0,this.pressure=0,this.channel=e,this.midiNote=t,this.velocity=s,this.realKey=n,this.overrideReleaseVolEnv=0,this.portamentoDuration=0,this.portamentoFromKey=-1}},Hr=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,this.generators=a,this.rootKey=n.originalKey,a[g.overridingRootKey]>-1&&(this.rootKey=a[g.overridingRootKey]),this.targetKey=e,a[g.keyNum]>-1&&(this.targetKey=a[g.keyNum]),this.velocity=t,a[g.velocity]>-1&&(this.velocity=a[g.velocity]),this.exclusiveClass=a[g.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[g.sampleModes]}};function ea(A,e,t){if(t<A)return 0;let s=(t-A)/(1/e)+.25;return Math.abs(s-~~(s+.5))*4-1}var Or=Math.PI*2;function Yr(A,e,t){if(t<A)return 0;let s=t-A;return Math.sin(Or*e*s)}var Aa=Math.PI/2,_t=-500,Za=500,Gn=Za-_t,Wa=new Float32Array(Gn+1),za=new Float32Array(Gn+1);for(let A=_t;A<=Za;A++){let e=(A-_t)/Gn,t=A-_t;Wa[t]=Math.cos(Aa*e),za[t]=Math.sin(Aa*e)}function qr(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=A.targetKey,o=A.pitchOffset+A.modulatedGenerators[g.fineTune]+this.octaveTuning[A.midiNote]+this.channelTuningCents,h=A.modulatedGenerators[g.coarseTune],I=r.tunings[this.preset.program*128+A.realKey];if(I!==-1&&(i=Math.trunc(I),o+=(I-i)*100),A.portamentoFromKey>-1){let G=Math.min((e-A.startTime)/A.portamentoDuration,1),k=i-A.portamentoFromKey;h-=k*(1-G)}o+=(i-A.rootKey)*A.modulatedGenerators[g.scaleTuning];let c=0,l=0,E=A.modulatedGenerators[g.vibLfoToPitch],d=A.modulatedGenerators[g.vibLfoToVolume],p=A.modulatedGenerators[g.vibLfoToFilterFc];if(E!==0||d!==0||p!==0){let G=A.startTime+ss(A.modulatedGenerators[g.delayVibLFO]),k=sn(A.modulatedGenerators[g.freqVibLFO]),v=ea(G,k,e);o+=v*(E*this.customControllers[Ce.modulationMultiplier]),l+=-v*d,c+=v*p}let w=A.modulatedGenerators[g.modLfoToPitch],L=A.modulatedGenerators[g.modLfoToVolume],F=A.modulatedGenerators[g.modLfoToFilterFc];if(w!==0||F!==0||L!==0){let G=A.startTime+ss(A.modulatedGenerators[g.delayModLFO]),k=sn(A.modulatedGenerators[g.freqModLFO]),v=ea(G,k,e);o+=v*(w*this.customControllers[Ce.modulationMultiplier]),l+=-v*L,c+=v*F}this.midiControllers[u.modulationWheel]==0&&this.channelVibrato.depth>0&&(o+=Yr(A.startTime+this.channelVibrato.delay,this.channelVibrato.rate,e)*this.channelVibrato.depth);let b=A.modulatedGenerators[g.modEnvToPitch],S=A.modulatedGenerators[g.modEnvToFilterFc];if(S!==0||b!==0){let G=A.modEnv.process(A,e);c+=G*S,o+=G*b}l-=A.resonanceOffset;let H=o+h*100|0;H!==A.tuningCents&&(A.tuningCents=H,A.tuningRatio=Math.pow(2,H/1200));let B=DA(A.modulatedGenerators[g.initialAttenuation]),x=r.voiceBuffer;if(A.loopingMode===2&&!A.isInRelease){A.isActive=A.volEnv.process(a,x,B,l);return}A.isActive=A.wavetable.process(a,A.tuningRatio,x);{let G=A.filter,k=A.modulatedGenerators[g.initialFilterFc];G.initialized?G.currentInitialFc+=(k-G.currentInitialFc)*Rn.smoothingConstant:(G.initialized=!0,G.currentInitialFc=k);let v=G.currentInitialFc+c,Y=A.modulatedGenerators[g.initialFilterQ];if(G.currentInitialFc>13499&&v>13499&&Y===0)G.currentInitialFc=13500;else{(Math.abs(G.lastTargetCutoff-v)>1||G.resonanceCb!==Y)&&(G.lastTargetCutoff=v,G.resonanceCb=Y,G.calculateCoefficients(v));let{a0:ee,a1:ie,a2:Qe,a3:Ie,a4:Ee}=G,{x1:re,x2:ce,y1:pe,y2:W}=G;for(let oe=0;oe<a;oe++){let Ge=x[oe],le=ee*Ge+ie*re+Qe*ce-Ie*pe-W*Ee;ce=re,re=Ge,W=pe,pe=le,x[oe]=le}G.x1=re,G.x2=ce,G.y1=pe,G.y2=W}}let q=A.volEnv.process(a,x,B,l);A.isActive=A.isActive&&q;let O;A.overridePan?O=A.overridePan:(A.currentPan+=(A.modulatedGenerators[g.pan]-A.currentPan)*r.panSmoothingFactor,O=A.currentPan);let M=r.masterParameters.masterGain*r.midiVolume*A.gainModifier,P=O+500|0,J=Wa[P]*M*r.panLeft,y=za[P]*M*r.panRight;if(this.insertionEnabled){let G=r.insertionInputL,k=r.insertionInputR;for(let v=0;v<a;v++){let Y=x[v];G[v]+=J*Y,k[v]+=y*Y}return}for(let G=0;G<a;G++){let k=x[G],v=G+n;t[v]+=J*k,s[v]+=y*k}if(!r.enableEffects)return;let U=A.modulatedGenerators[g.reverbEffectsSend]*A.reverbSend;if(U>0){let G=r.masterParameters.reverbGain*M*(U/1e3),k=r.reverbInput;for(let v=0;v<a;v++)k[v]+=G*x[v]}let _=A.modulatedGenerators[g.chorusEffectsSend]*A.chorusSend;if(_>0){let G=r.masterParameters.chorusGain*(_/1e3)*M,k=r.chorusInput;for(let v=0;v<a;v++)k[v]+=G*x[v]}if(r.delayActive){let G=this.midiControllers[u.variationDepth]*A.delaySend;if(G>0){let k=M*r.masterParameters.delayGain*((G>>7)/127),v=r.delayInput;for(let Y=0;Y<a;Y++)v[Y]+=k*x[Y]}}}var LA={pitchWheelRange:0,fineTuning:1,coarseTuning:2,modulationDepth:5,resetParameters:16383},Ve={partParameter:1,drumPitch:24,drumPitchFine:25,drumLevel:26,drumPan:28,drumReverb:29,drumChorus:30,drumDelay:31,awe32:127,SF2:120},MA={vibratoRate:8,vibratoDepth:9,vibratoDelay:10,TVFFilterCutoff:32,TVFFilterResonance:33,EGAttackTime:99,EGDecayTime:100,EGReleaseTime:102},Oe=(A,e,t,s)=>{s.length>0&&(s=" "+s),D(`%c${e} for %c${A}%c is now set to %c${t}%c${s}.`,C.info,C.recognized,C.info,C.value,C.info)},Os=A=>{A.channelVibrato.delay===0&&A.channelVibrato.rate===0&&A.channelVibrato.depth===0&&(A.channelVibrato.depth=50,A.channelVibrato.rate=8,A.channelVibrato.delay=.6)};function Jr(A){switch(this.midiControllers[u.dataEntryMSB]=A<<7,this.dataEntryState){default:case _e.Idle:break;case _e.NRPCoarse:case _e.NRPFine:{let e=this.midiControllers[u.nonRegisteredParameterMSB]>>7,t=this.midiControllers[u.nonRegisteredParameterLSB]>>7,s=this.midiControllers[u.dataEntryLSB]>>7;if(this.synthCore.masterParameters.drumLock&&e>=Ve.drumPitch&&e<=Ve.drumDelay)return;switch(e){default:{if(A===64)return;D(`%cUnrecognized NRPN for %c${this.channel}%c: %c(0x${t.toString(16).toUpperCase()} 0x${t.toString(16).toUpperCase()})%c data value: %c${A}`,C.warn,C.recognized,C.warn,C.unrecognized,C.warn,C.value);break}case Ve.partParameter:{let n=this.synthCore.masterParameters.nprnParamLock,a=this.synthCore.masterParameters.customVibratoLock||n;switch(t){default:{if(A===64)return;D(`%cUnrecognized NRPN for %c${this.channel}%c: %c(0x${e.toString(16)} 0x${t.toString(16)})%c data value: %c${A}`,C.warn,C.recognized,C.warn,C.unrecognized,C.warn,C.value);break}case MA.vibratoRate:{if(a||A===64)return;Os(this),this.channelVibrato.rate=A/64*8,Oe(this.channel,"Vibrato rate",`${A} = ${this.channelVibrato.rate}`,"Hz");break}case MA.vibratoDepth:{if(a||A===64)return;Os(this),this.channelVibrato.depth=A/2,Oe(this.channel,"Vibrato depth",`${A} = ${this.channelVibrato.depth}`,"cents of detune");break}case MA.vibratoDelay:{if(a||A===64)return;Os(this),this.channelVibrato.delay=A/64/3,Oe(this.channel,"Vibrato delay",`${A} = ${this.channelVibrato.delay}`,"seconds");break}case MA.TVFFilterCutoff:{if(n)return;this.controllerChange(u.brightness,A),Oe(this.channel,"Filter cutoff",A.toString(),"");break}case MA.TVFFilterResonance:{if(n)return;this.controllerChange(u.filterResonance,A),Oe(this.channel,"Filter resonance",A.toString(),"");break}case MA.EGAttackTime:{if(n)return;this.controllerChange(u.attackTime,A),Oe(this.channel,"EG attack time",A.toString(),"");break}case MA.EGDecayTime:{if(n)return;this.controllerChange(u.decayTime,A),Oe(this.channel,"EG decay time",A.toString(),"");break}case MA.EGReleaseTime:{if(n)return;this.controllerChange(u.releaseTime,A),Oe(this.channel,"EG release time",A.toString(),"");break}}break}case Ve.drumPitch:{let n=this.channelSystem==="xg"||this.patch.bankLSB===1?(A-64)*100:(A-64)*50;this.drumParams[t].pitch=n,Oe(this.channel,`Drum ${t} pitch`,n,"cents");break}case Ve.drumPitchFine:{let n=A-64;this.drumParams[t].pitch+=n,Oe(this.channel,`Drum ${t} pitch fine`,this.drumParams[t].pitch,"cents");break}case Ve.drumLevel:{this.drumParams[t].gain=A/120,Oe(this.channel,`Drum ${t} level`,A,"");break}case Ve.drumPan:{this.drumParams[t].pan=A,Oe(this.channel,`Drum ${t} pan`,A,"");break}case Ve.drumReverb:{this.drumParams[t].reverbGain=A/127,Oe(this.channel,`Drum ${t} reverb level`,A,"");break}case Ve.drumChorus:{this.drumParams[t].chorusGain=A/127,Oe(this.channel,`Drum ${t} chorus level`,A,"");break}case Ve.drumDelay:{this.drumParams[t].delayGain=A/127,Oe(this.channel,`Drum ${t} delay level`,A,"");break}case Ve.awe32:break;case Ve.SF2:{if(t>100)break;let n=this.customControllers[Ce.sf2NPRNGeneratorLSB],a=(A<<7|s)-8192;this.setGeneratorOffset(n,a);break}}break}case _e.RPCoarse:case _e.RPFine:{let e=this.midiControllers[u.registeredParameterMSB]|this.midiControllers[u.registeredParameterLSB]>>7;switch(e){default:{D(`%cUnrecognized RPN for %c${this.channel}%c: %c(0x${e.toString(16)})%c data value: %c${A}`,C.warn,C.recognized,C.warn,C.unrecognized,C.warn,C.value);break}case LA.pitchWheelRange:{this.midiControllers[ve+Ae.pitchWheelRange]=A<<7,Oe(this.channel,"Pitch wheel range",A.toString(),"semitones");break}case LA.coarseTuning:{let t=A-64;this.setCustomController(Ce.channelTuningSemitones,t),Oe(this.channel,"Coarse tuning",t.toString(),"semitones");break}case LA.fineTuning:{this.setTuning(A-64,!1);break}case LA.modulationDepth:{this.setModulationDepth(A*100);break}case LA.resetParameters:{this.resetParameters();break}}}}}var Kr=[g.delayModLFO,g.freqModLFO,g.delayVibLFO,g.freqVibLFO,g.delayModEnv,g.attackModEnv,g.holdModEnv,g.decayModEnv,g.sustainModEnv,g.releaseModEnv,g.delayVolEnv,g.attackVolEnv,g.holdVolEnv,g.decayVolEnv,g.sustainVolEnv,g.releaseVolEnv,g.fineTune,g.modLfoToPitch,g.vibLfoToPitch,g.modEnvToPitch,g.modLfoToVolume,g.initialFilterFc,g.initialFilterQ,g.modLfoToFilterFc,g.modEnvToFilterFc,g.chorusEffectsSend,g.reverbEffectsSend],SA=(A,e,t)=>Math.max(e,Math.min(t,A)),Jt=A=>Math.max(-32768,1200*Math.log2(A/1e3)),Vr=A=>6900+1200*Math.log2(A/440);function Xr(A,e,t){let s=t<<7|e;s-=8192;let n=Kr[A];n||ne(`Invalid AWE32 LSB: %c${A}`,C.unrecognized);let a,r,i,o;switch(n){default:break;case g.delayModLFO:case g.delayVibLFO:case g.delayVolEnv:case g.delayModEnv:{a=4*SA(s,0,5900),this.setGeneratorOverride(n,Jt(a));break}case g.attackVolEnv:case g.attackModEnv:{a=SA(s,0,5940),this.setGeneratorOverride(n,Jt(a));break}case g.holdVolEnv:case g.holdModEnv:{a=SA(s,0,8191),this.setGeneratorOverride(n,Jt(a));break}case g.decayModEnv:case g.decayVolEnv:case g.releaseVolEnv:case g.releaseModEnv:{a=4*SA(s,0,5940),this.setGeneratorOverride(n,Jt(a));break}case g.freqVibLFO:case g.freqModLFO:{r=.084*e,this.setGeneratorOverride(n,Vr(r),!0);break}case g.sustainVolEnv:case g.sustainModEnv:{i=e*7.5,this.setGeneratorOverride(n,i);break}case g.fineTune:{this.setGeneratorOverride(n,s,!0);break}case g.modLfoToPitch:case g.vibLfoToPitch:{o=SA(s,-127,127)*9.375,this.setGeneratorOverride(n,o,!0);break}case g.modEnvToPitch:{o=SA(s,-127,127)*9.375,this.setGeneratorOverride(n,o);break}case g.modLfoToVolume:{i=1.875*e,this.setGeneratorOverride(n,i,!0);break}case g.initialFilterFc:{let h=4335+59*e;this.setGeneratorOverride(n,h,!0);break}case g.initialFilterQ:{i=215*(e/127),this.setGeneratorOverride(n,i,!0);break}case g.modLfoToFilterFc:{o=SA(s,-64,63)*56.25,this.setGeneratorOverride(n,o,!0);break}case g.modEnvToFilterFc:{o=SA(s,-64,63)*56.25,this.setGeneratorOverride(n,o);break}case g.chorusEffectsSend:case g.reverbEffectsSend:{this.setGeneratorOverride(n,SA(s,0,255)*(1e3/255));break}}}function Zr(A){switch(this.midiControllers[u.dataEntryLSB]=A<<7,this.dataEntryState){default:break;case _e.RPCoarse:case _e.RPFine:{switch(this.midiControllers[u.registeredParameterMSB]|this.midiControllers[u.registeredParameterLSB]>>7){default:break;case LA.pitchWheelRange:{if(A===0)break;this.midiControllers[ve+Ae.pitchWheelRange]|=A;let t=(this.midiControllers[ve+Ae.pitchWheelRange]>>7)+A/128;D(`%cChannel ${this.channel} pitch wheel range. Semitones: %c${t}`,C.info,C.value);break}case LA.fineTuning:{let s=this.customControllers[Ce.channelTuning]<<7|A;this.setTuning(s*.01220703125);break}case LA.modulationDepth:{let s=this.customControllers[Ce.modulationMultiplier]*50+A/128*100;this.setModulationDepth(s);break}case 16383:{this.resetParameters();break}}break}case _e.NRPFine:{let e=this.midiControllers[u.nonRegisteredParameterMSB]>>7,t=this.midiControllers[u.nonRegisteredParameterLSB]>>7;if(e===Ve.SF2)return;e===Ve.awe32?Xr.call(this,t,A,this.midiControllers[u.dataEntryMSB]>>7):D(`%cUnrecognized NRPN LSB for %c${this.channel}%c: %c(0x${t.toString(16).toUpperCase()} 0x${t.toString(16).toUpperCase()})%c data value: %c${A}`,C.warn,C.recognized,C.warn,C.unrecognized,C.warn,C.value)}}}function Wr(A,e,t=!0){if(A>127)throw new Error("Invalid MIDI Controller.");if(A>=u.modulationWheelLSB&&A<=u.effectControl2LSB&&A!==u.dataEntryLSB){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,A){case u.omniModeOff:case u.omniModeOn:case u.allNotesOff:{this.stopAllNotes();break}case u.allSoundOff:{this.stopAllNotes(!0);break}case u.polyModeOn:{this.stopAllNotes(!0),this.polyMode=!0;break}case u.monoModeOn:{this.stopAllNotes(!0),this.polyMode=!1;break}case u.bankSelect:{this.setBankMSB(e),this.channel%16===vA&&Re.isSystemXG(this.channelSystem)&&this.setBankMSB(127);break}case u.bankSelectLSB:{this.setBankLSB(e);break}case u.variationDepth:{this.synthCore.delayActive=!0;break}case u.registeredParameterLSB:{this.dataEntryState=_e.RPFine;break}case u.registeredParameterMSB:{this.dataEntryState=_e.RPCoarse;break}case u.nonRegisteredParameterMSB:{this.customControllers[Ce.sf2NPRNGeneratorLSB]=0,this.dataEntryState=_e.NRPCoarse;break}case u.nonRegisteredParameterLSB:{if(this.midiControllers[u.nonRegisteredParameterMSB]>>7===Ve.SF2)switch(this.customControllers[Ce.sf2NPRNGeneratorLSB]%100!==0&&(this.customControllers[Ce.sf2NPRNGeneratorLSB]=0),e){case 100:{this.customControllers[Ce.sf2NPRNGeneratorLSB]+=100;break}case 101:{this.customControllers[Ce.sf2NPRNGeneratorLSB]+=1e3;break}case 102:{this.customControllers[Ce.sf2NPRNGeneratorLSB]+=1e4;break}default:e<100&&(this.customControllers[Ce.sf2NPRNGeneratorLSB]+=e)}this.dataEntryState=_e.NRPFine;break}case u.dataEntryMSB:{this.dataEntryCoarse(e);break}case u.dataEntryLSB:{this.dataEntryFine(e);break}case u.resetAllControllers:{this.resetControllersRP15Compliant();break}case u.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}default:{this.computeModulatorsAll(1,A);break}}t&&this.synthCore.callEvent("controllerChange",{channel:this.channel,controllerNumber:A,controllerValue:e})}}var zr=40;function _r(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 I=i.length-1;I>=0;I--)if(i[I]<A){o=I;break}o+=1;let h=(A-e[o])*t[o];return Math.exp(2.302585092994046*(((s[o]*h+n[o])*h+a[o])*h+r[o]))/zr}}function $r(A,e){return _r(A)*e}var Kt=(A,e,t)=>Math.max(e,Math.min(t,A));function jr(A,e){if(e<1){this.noteOff(A);return}if(e=Math.min(127,e),this.synthCore.masterParameters.blackMIDIMode&&this.synthCore.voiceCount>200&&e<40||this.synthCore.masterParameters.blackMIDIMode&&e<10||this._isMuted||!this.preset)return;let t=A+this.keyShift+this.customControllers[Ce.channelKeyShift],s=t;if(t>127||t<0)return;let n=this.preset.program,a=this.synthCore.tunings[n*128+t];a>=0&&(s=Math.trunc(a)),this.synthCore.masterParameters.monophonicRetriggerMode&&this.killNote(A);let r=this.synthCore.keyModifierManager.getVelocity(this.channel,t);r>-1&&(e=r);let i=this.synthCore.keyModifierManager.getGain(this.channel,t),o=-1,h=0,I=this.midiControllers[u.portamentoTime]>>7,c=this.midiControllers[u.portamentoControl]>>7;if(!this.drumChannel&&c!==s&&this.midiControllers[u.portamentoOnOff]>=8192&&I>0){if(c>0){let b=Math.abs(s-c);h=$r(I,b),o=c}this.controllerChange(u.portamentoControl,s)}if(!this.polyMode){let b=0;if(this.voiceCount>0){for(let S of this.synthCore.voices)if(S.isActive&&S.channel===this.channel&&(S.exclusiveRelease(this.synthCore.currentTime,0),++b>=this.voiceCount))break}}let l=this.synthCore.getVoices(this.channel,s,e),E=0,d=0,p=0,w=1,L=1,F=1;if(this.randomPan&&(E=Math.round(Math.random()*1e3-500)),this.drumChannel){let b=this.drumParams[s];if(!b.rxNoteOn)return;let S=b.pan;if(S!==64){let H=Math.max(-63,Math.min(S-64+((this.midiControllers[u.pan]>>7)-64),63))||1;E=S===0?Math.round(Math.random()*1e3-500):H/63*500}p=b.pitch,d=b.exclusiveClass,w=b.reverbGain,L=b.chorusGain,F=b.delayGain,i===1&&(i=b.gain)}for(let b of l){let S=this.synthCore.assignVoice();if(S.setup(this.synthCore.currentTime,this.channel,s,e,t),S.wavetable=S.oscillators[this.synthCore.masterParameters.interpolationType],S.generators.set(b.generators),S.exclusiveClass=d||b.exclusiveClass,S.rootKey=b.rootKey,S.loopingMode=b.loopingMode,S.wavetable.sampleData=b.sampleData,S.wavetable.playbackStep=b.playbackStep,S.targetKey=b.targetKey,this.sysExModulators.modulatorList.length>0){S.modulators=[...b.modulators];for(let M of this.sysExModulators.modulatorList){let P=S.modulators.findIndex(J=>Fe.isIdentical(J,M.mod));P===-1?S.modulators.push(M.mod):S.modulators[P]=M.mod}}else S.modulators=b.modulators;if(S.modulators.length>S.modulatorValues.length&&(ne(`${S.modulators.length} modulators! Increasing modulatorValues table.`),S.modulatorValues=new Int16Array(S.modulators.length)),this.generatorOverridesEnabled)for(let[M,P]of this.generatorOverrides.entries())P!==Ra&&(S.generators[M]=P);if(S.exclusiveClass!==0&&this.polyMode){let M=0;if(this.voiceCount>0){for(let P of this.synthCore.voices)if(P.isActive&&P.channel===this.channel&&P.exclusiveClass===S.exclusiveClass&&P.hasRendered&&(P.exclusiveRelease(this.synthCore.currentTime),++M>=this.voiceCount))break}}this.computeModulators(S),S.volEnv.init(S),S.modEnv.init(S),S.filter.init();let H=S.modulatedGenerators[g.startAddrsOffset]+S.modulatedGenerators[g.startAddrsCoarseOffset]*32768,B=S.modulatedGenerators[g.endAddrOffset]+S.modulatedGenerators[g.endAddrsCoarseOffset]*32768,x=S.modulatedGenerators[g.startloopAddrsOffset]+S.modulatedGenerators[g.startloopAddrsCoarseOffset]*32768,q=S.modulatedGenerators[g.endloopAddrsOffset]+S.modulatedGenerators[g.endloopAddrsCoarseOffset]*32768,O=b.sampleData.length-1;if(S.wavetable.cursor=Kt(H,0,O),S.wavetable.end=Kt(O+B,0,O),S.wavetable.loopStart=Kt(b.loopStart+x,0,O),S.wavetable.loopEnd=Kt(b.loopEnd+q,0,O),S.wavetable.loopEnd<S.wavetable.loopStart){let M=S.wavetable.loopStart;S.wavetable.loopStart=S.wavetable.loopEnd,S.wavetable.loopEnd=M}S.wavetable.loopEnd-S.wavetable.loopStart<1&&(S.loopingMode===1||S.loopingMode===3)&&(S.loopingMode=0),S.wavetable.loopLength=S.wavetable.loopEnd-S.wavetable.loopStart,S.wavetable.isLooping=S.loopingMode===1||S.loopingMode===3,S.portamentoFromKey=o,S.portamentoDuration=h,S.overridePan=E,S.gainModifier=i,S.pitchOffset=p,S.reverbSend=w,S.chorusSend=L,S.delaySend=F,S.currentPan=Math.max(-500,Math.min(500,E||S.modulatedGenerators[g.pan]))}this.voiceCount+=l.length,this.sendChannelProperty(),this.synthCore.callEvent("noteOn",{midiNote:A,channel:this.channel,velocity:e})}function eo(A){if(A>127||A<0){ne("Received a noteOn for note",A,"Ignoring.");return}let e=A+this.keyShift+this.customControllers[Ce.channelKeyShift];if(this.synthCore.masterParameters.blackMIDIMode&&!this.drumChannel||this.drumChannel&&this.drumParams[e].rxNoteOff){this.killNote(e),this.synthCore.callEvent("noteOff",{midiNote:A,channel:this.channel});return}let t=this.midiControllers[u.sustainPedal]>=8192,s=0;if(this.voiceCount>0){for(let n of this.synthCore.voices)if(n.channel===this.channel&&n.isActive&&n.realKey===e&&!n.isInRelease&&(t?n.isHeld=!0:n.releaseVoice(this.synthCore.currentTime),++s>=this.voiceCount))break}this.synthCore.callEvent("noteOff",{midiNote:A,channel:this.channel})}function Ao(A){if(this.lockPreset)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.isAnyDrums!==this.drumChannel&&this.setDrumFlag(e.isAnyDrums),this.resetDrumParams(),this.synthCore.callEvent("programChange",{channel:this.channel,bankLSB:this.preset.bankLSB,bankMSB:this.preset.bankMSB,program:this.preset.program,isGMGSDrum:this.preset.isGMGSDrum}),this.sendChannelProperty())}var to=class{modulatorList=[];resetModulators(){this.modulatorList=[]}setModulator(A,e,t,s=!1,n=!1){let a=this.getModulatorID(A,e,s,n);t===0&&this.deleteModulator(a);let r=this.modulatorList.find(i=>i.id===a);if(r)r.mod.transformAmount=t;else{let i,o;A>=ve?(i=A-ve,o=!1):(i=A,o=!0);let h=new Fe(new IA(i,me.linear,o,s),new IA,e,t,0);this.modulatorList.push({mod:h,id:a})}}getModulatorID(A,e,t,s){return`${A}-${e}-${t}-${s}`}deleteModulator(A){this.modulatorList=this.modulatorList.filter(e=>e.id!==A)}};function so(A,e=-1,t=0){let s=A.modulators,n=A.generators;if(this.generatorOffsetsEnabled){n=new Int16Array(n);for(let o=0;o<n.length;o++)n[o]+=this.generatorOffsets[o]}let a=A.modulatedGenerators,r=this.perNotePitch?this.pitchWheels[A.realKey]:this.midiControllers[Ae.pitchWheel+ve];if(e===-1){a.set(n);for(let o=0;o<s.length;o++){let h=s[o];a[h.destination]=Math.min(32767,Math.max(-32768,a[h.destination]+A.computeModulator(this.midiControllers,r,o)))}for(let o=0;o<a.length;o++){let h=rA[o];h&&(a[o]=Math.min(h.max,Math.max(h.min,a[o])))}return}let i=!!e;for(let o=0;o<s.length;o++){let h=s[o];if(h.primarySource.isCC===i&&h.primarySource.index===t||h.secondarySource.isCC===i&&h.secondarySource.index===t){let I=h.destination,c=n[I];A.computeModulator(this.midiControllers,r,o);for(let E=0;E<s.length;E++)s[E].destination===I&&(c+=A.modulatorValues[E]);let l=rA[I];a[I]=Math.max(l.min,Math.min(c,l.max))}}}var no=class{midiControllers=new Int16Array(_s);pitchWheels=new Int16Array(128).fill(8192);lockedControllers=new Array(_s).fill(!1);customControllers=new Float32Array(Ta);octaveTuning=new Int8Array(128);drumParams=[];sysExModulators=new to;keyShift=0;drumChannel=!1;randomPan=!1;insertionEnabled=!1;cc1=16;cc2=17;drumMap=0;dataEntryState=_e.Idle;patch={bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1};preset;lockPreset=!1;lockedSystem="gs";channelVibrato={delay:0,depth:0,rate:0};polyMode=!0;voiceCount=0;channel;rxChannel;synthCore;noteOn=jr.bind(this);noteOff=eo.bind(this);programChange=Ao.bind(this);controllerChange=Wr.bind(this);resetControllers=Qr.bind(this);resetPreset=fr.bind(this);resetControllersRP15Compliant=ur.bind(this);resetParameters=mr.bind(this);dataEntryFine=Zr.bind(this);dataEntryCoarse=Jr.bind(this);renderVoice=qr.bind(this);perNotePitch=!1;channelTuningCents=0;generatorOffsets=new Int16Array(rt);generatorOffsetsEnabled=!1;generatorOverrides=new Int16Array(rt);generatorOverridesEnabled=!1;computeModulators=so.bind(this);previousVoiceCount=0;constructor(A,e,t){this.synthCore=A,this.preset=e,this.channel=t,this.rxChannel=t,this.resetGeneratorOverrides(),this.resetGeneratorOffsets();for(let s=0;s<128;s++)this.drumParams.push(new $s);this.resetDrumParams(),this.resetVibratoParams()}_isMuted=!1;get isMuted(){return this._isMuted}get channelSystem(){return this.lockPreset?this.lockedSystem:this.synthCore.masterParameters.midiSystem}clearVoiceCount(){this.previousVoiceCount=this.voiceCount,this.voiceCount=0}updateVoiceCount(){this.voiceCount!==this.previousVoiceCount&&this.sendChannelProperty()}transposeChannel(A,e=!1){this.drumChannel||(A+=this.synthCore.masterParameters.transposition);let t=Math.trunc(A),s=this.keyShift+this.customControllers[Ce.channelTransposeFine]/100;this.drumChannel&&!e||A===s||(t!==this.keyShift&&this.stopAllNotes(),this.keyShift=t,this.setCustomController(Ce.channelTransposeFine,(A-t)*100),this.sendChannelProperty())}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]}setModulationDepth(A){A=Math.round(A),D(`%cChannel ${this.channel} modulation depth. Cents: %c${A}`,C.info,C.value),this.setCustomController(Ce.modulationMultiplier,A/50)}setTuning(A,e=!0){A=Math.round(A),this.setCustomController(Ce.channelTuning,A),e&&D(`%cFine tuning for %c${this.channel}%c is now set to %c${A}%c cents.`,C.info,C.recognized,C.info,C.value,C.info)}pitchWheel(A,e=-1){if(!this.lockedControllers[ve+Ae.pitchWheel]){if(e===-1)this.perNotePitch=!1,this.midiControllers[ve+Ae.pitchWheel]=A,this.computeModulatorsAll(0,Ae.pitchWheel),this.sendChannelProperty();else{this.perNotePitch||this.pitchWheels.fill(this.midiControllers[ve+Ae.pitchWheel]),this.perNotePitch=!0,this.pitchWheels[e]=A;let t=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.isActive&&s.channel===this.channel&&s.midiNote===e&&(this.computeModulators(s,0,Ae.polyPressure),++t>=this.voiceCount))break}}this.synthCore.callEvent("pitchWheel",{channel:this.channel,pitch:A,midiNote:e})}}channelPressure(A){this.midiControllers[ve+Ae.channelPressure]=A<<7,this.updateChannelTuning(),this.computeModulatorsAll(0,Ae.channelPressure),this.synthCore.callEvent("channelPressure",{channel:this.channel,pressure:A})}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,Ae.polyPressure),++t>=this.voiceCount))break}this.synthCore.callEvent("polyPressure",{channel:this.channel,midiNote:A,pressure:e})}setCustomController(A,e){this.customControllers[A]=e,this.updateChannelTuning()}updateChannelTuning(){this.channelTuningCents=this.customControllers[Ce.channelTuning]+this.customControllers[Ce.channelTransposeFine]+this.customControllers[Ce.masterTuning]+this.customControllers[Ce.channelTuningSemitones]*100}setPresetLock(A){this.lockPreset!==A&&(this.lockPreset=A,A&&(this.lockedSystem=this.synthCore.masterParameters.midiSystem))}setDrums(A){if(Re.isSystemXG(this.channelSystem))if(A)this.setBankMSB(Re.getDrumBank(this.channelSystem)),this.setBankLSB(0);else{if(this.channel%16===vA)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)}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)}resetGeneratorOverrides(){this.generatorOverrides.fill(Ra),this.generatorOverridesEnabled=!1}setGeneratorOverride(A,e,t=!1){if(this.generatorOverrides[A]=e,this.generatorOverridesEnabled=!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.generatorOffsets.fill(0),this.generatorOffsetsEnabled=!1}setGeneratorOffset(A,e){this.generatorOffsets[A]=e*rA[A].nrpn,this.generatorOffsetsEnabled=!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}}killNote(A,e=-12e3){A+=this.customControllers[Ce.channelKeyShift];let t=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&s.realKey===A&&(s.overrideReleaseVolEnv=e,s.isInRelease=!1,s.releaseVoice(this.synthCore.currentTime),++t>=this.voiceCount))break}}stopAllNotes(A=!1){if(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(),this.updateVoiceCount()}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})}muteChannel(A){A&&this.stopAllNotes(!0),this._isMuted=A,this.sendChannelProperty(),this.synthCore.callEvent("muteChannel",{channel:this.channel,isMuted:A})}sendChannelProperty(){if(!this.synthCore.enableEventSystem)return;let A={voicesAmount:this.voiceCount,pitchWheel:this.midiControllers[ve+Ae.pitchWheel],pitchWheelRange:this.midiControllers[ve+Ae.pitchWheelRange]/128,isMuted:this.isMuted,transposition:this.keyShift+this.customControllers[Ce.channelTransposeFine]/100,isDrum:this.drumChannel,isEFX:this.insertionEnabled};this.synthCore.callEvent("channelPropertyChange",{channel:this.channel,property:A})}resetDrumParams(){if(!(this.synthCore.masterParameters.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=Dn[A]/127,e.chorusGain=0,e.delayGain=0,e.rxNoteOn=!0,e.rxNoteOff=!1}}resetVibratoParams(){this.synthCore.masterParameters.customVibratoLock||(this.channelVibrato.rate=0,this.channelVibrato.depth=0,this.channelVibrato.delay=0)}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.lockPreset||(this.patch.bankMSB=A)}setBankLSB(A){this.lockPreset||(this.patch.bankLSB=A)}setDrumFlag(A){this.lockPreset||!this.preset||this.drumChannel!==A&&(A?(this.keyShift=0,this.drumChannel=!0):this.drumChannel=!1,this.synthCore.callEvent("drumChange",{channel:this.channel,isDrumChannel:this.drumChannel}))}},ta=4,He=class{generatorType;generatorValue=0;constructor(A,e,t=!0){if(this.generatorType=A,e===void 0)throw new Error("No value provided.");if(this.generatorValue=Math.round(e),t){let s=rA[A];s!==void 0&&(this.generatorValue=Math.max(s.min,Math.min(s.max,this.generatorValue)))}}write(A){te(A,this.generatorType),te(A,this.generatorValue)}toString(){return`${Object.keys(g).find(A=>g[A]===this.generatorType)}: ${this.generatorValue}`}},ao=4,ls=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(g.coarseTune,0),e=this.getGenerator(g.fineTune,0);return A*100+e}set fineTuning(A){let e=Math.trunc(A/100),t=A%100;this.setGenerator(g.coarseTune,e),this.setGenerator(g.fineTune,t)}addToGenerator(A,e,t=!0){let s=this.getGenerator(A,rA[A].def);this.setGenerator(A,e+s,t)}setGenerator(A,e,t=!0){switch(A){case g.sampleID:throw new Error("Use setSample()");case g.instrument:throw new Error("Use setInstrument()");case g.velRange:case g.keyRange:throw new Error("Set the range manually")}if(e===null){this.generators=this.generators.filter(n=>n.generatorType!==A);return}let s=this.generators.findIndex(n=>n.generatorType===A);s===-1?this.addGenerators(new He(A,e,t)):this.generators[s]=new He(A,e,t)}addGenerators(...A){for(let e of A)switch(e.generatorType){default:{this.generators.push(e);break}case g.sampleID:case g.instrument:break;case g.velRange:{this.velRange.min=e.generatorValue&127,this.velRange.max=e.generatorValue>>8&127;break}case g.keyRange:this.keyRange.min=e.generatorValue&127,this.keyRange.max=e.generatorValue>>8&127}}addModulators(...A){this.modulators.push(...A)}getGenerator(A,e){return this.generators.find(t=>t.generatorType===A)?.generatorValue??e}copyFrom(A){this.generators=A.generators.map(e=>new He(e.generatorType,e.generatorValue,!1)),this.modulators=A.modulators.map(Fe.copyFrom.bind(Fe)),this.velRange={...A.velRange},this.keyRange={...A.keyRange}}getWriteGenerators(A){let e=this.generators.filter(t=>t.generatorType!==g.sampleID&&t.generatorType!==g.instrument&&t.generatorType!==g.keyRange&&t.generatorType!==g.velRange);if(!A)throw new Error("No bank provided! ");return this.hasVelRange&&e.unshift(new He(g.velRange,this.velRange.max<<8|Math.max(this.velRange.min,0),!1)),this.hasKeyRange&&e.unshift(new He(g.keyRange,this.keyRange.max<<8|Math.max(this.keyRange.min,0),!1)),e}},_a=class extends ls{},$a=class extends ls{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 He(g.instrument,t,!1)),e}},ja=class extends ls{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 He(g.sampleID,t,!1)),e}},io=22,ro=new Set([g.velRange,g.keyRange,g.instrument,g.sampleID,g.exclusiveClass,g.endOper,g.sampleModes,g.startloopAddrsOffset,g.startloopAddrsCoarseOffset,g.endloopAddrsOffset,g.endloopAddrsCoarseOffset,g.startAddrsOffset,g.startAddrsCoarseOffset,g.endAddrOffset,g.endAddrsCoarseOffset,g.initialAttenuation,g.fineTune,g.coarseTune,g.keyNumToVolEnvHold,g.keyNumToVolEnvDecay,g.keyNumToModEnvHold,g.keyNumToModEnvDecay]),bt=class{name="";zones=[];globalZone=new _a;linkedTo=[];get useCount(){return this.linkedTo.length}createZone(A){let e=new ja(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){ne(`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 s=0;s<58;s++){if(ro.has(s))continue;s=s;let n={},a=rA[s]?.def||0;n[a]=0;for(let r of this.zones){let i=r.getGenerator(s,void 0);i===void 0?n[a]++:n[i]===void 0?n[i]=1:n[i]++;let o;switch(s){default:continue;case g.decayVolEnv:{o=g.keyNumToVolEnvDecay;break}case g.holdVolEnv:{o=g.keyNumToVolEnvHold;break}case g.decayModEnv:{o=g.keyNumToModEnvDecay;break}case g.holdModEnv:o=g.keyNumToModEnvHold}if(r.getGenerator(o,void 0)!==void 0){n={};break}}if(Object.keys(n).length>0){let r=["0",0];for(let[o,h]of Object.entries(n))h>r[1]&&(r=[o,h]);let i=Number.parseInt(r[0]);i!==a&&A.setGenerator(s,i,!1);for(let o of this.zones){let h=o.getGenerator(s,void 0);h===void 0?i!==a&&o.setGenerator(s,a):h===i&&o.setGenerator(s,null)}}}let t=this.zones[0].modulators.map(s=>Fe.copyFrom(s));for(let s of t){let n=!0;for(let a of this.zones){if(!n)continue;a.modulators.find(i=>Fe.isIdentical(i,s))||(n=!1)}if(n){A.addModulators(Fe.copyFrom(s));for(let a of this.zones){let r=a.modulators.find(i=>Fe.isIdentical(i,s));r&&r.transformAmount===s.transformAmount&&a.modulators.splice(a.modulators.indexOf(r),1)}}}}write(A,e){D(`%cWriting ${this.name}...`,C.info),Te(A.pdta,this.name.slice(0,20),20),Te(A.xdta,this.name.slice(20),20),te(A.pdta,e&65535),te(A.xdta,e>>>16)}},oo=38,vt=class EA{parentSoundBank;name="";program=0;bankMSB=0;bankLSB=0;isGMGSDrum=!1;zones=[];globalZone;library=0;genre=0;morphology=0;constructor(e,t=new _a){this.parentSoundBank=e,this.globalZone=t}get isXGDrums(){return this.parentSoundBank.isXGBank&&Re.isXGDrums(this.bankMSB)}get isAnyDrums(){let e=this.parentSoundBank.isXGBank;return this.isGMGSDrum||e&&Re.isXGDrums(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=>Fe.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 $a(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 lA.matches(this,e)}getVoiceParameters(e,t){let s=new Array;for(let n of this.zones){if(!EA.isInRange(n.hasKeyRange?n.keyRange:this.globalZone.keyRange,e)||!EA.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(rt);for(let o of this.globalZone.generators)r[o.generatorType]=o.generatorValue;for(let o of n.generators)r[o.generatorType]=o.generatorValue;let i=[...n.modulators];EA.addUniqueModulators(i,this.globalZone.modulators);for(let o of a.zones){if(!EA.isInRange(o.hasKeyRange?o.keyRange:a.globalZone.keyRange,e)||!EA.isInRange(o.hasVelRange?o.velRange:a.globalZone.velRange,t))continue;let h=[...o.modulators];EA.addUniqueModulators(h,a.globalZone.modulators),EA.addUniqueModulators(h,this.parentSoundBank.defaultModulators);for(let c of i){let l=h.findIndex(E=>Fe.isIdentical(c,E));l===-1?h.push(c):h[l]=h[l].sumTransform(c)}let I=new Int16Array(zs);for(let c of a.globalZone.generators)I[c.generatorType]=c.generatorValue;for(let c of o.generators)I[c.generatorType]=c.generatorValue;for(let c=0;c<I.length;c++)I[c]=Math.max(-32768,Math.min(32767,I[c]+r[c]));I[g.initialAttenuation]=Math.floor(I[g.initialAttenuation]*.4),s.push({sample:o.sample,generators:I,modulators:h})}}return s}toMIDIString(){return lA.toMIDIString(this)}toString(){return lA.toNamedMIDIString(this)}toFlattenedInstrument(){let e=(h,I)=>{h.push(...I.filter(c=>!h.some(l=>l.generatorType===c.generatorType)))},t=(h,I)=>{h.push(...I.filter(c=>!h.some(l=>Fe.isIdentical(c,l))))},s=new bt;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 h of this.zones){if(!h.instrument)throw new Error("No instrument in a preset zone.");let I=h.keyRange;h.hasKeyRange||(I=i);let c=h.velRange;h.hasVelRange||(c=o);let l=h.generators.map(H=>new He(H.generatorType,H.generatorValue));e(l,n);let E=[...h.modulators];t(E,a);let d=h.instrument,p=d.zones,w=[],L=[],F=d.globalZone;w.push(...F.generators),L.push(...F.modulators);let b=F.keyRange,S=F.velRange;for(let H of p){if(!H.sample)throw new Error("No sample in an instrument zone.");let B=H.keyRange;H.hasKeyRange||(B=b);let x=H.velRange;if(H.hasVelRange||(x=S),B=EA.subtractRanges(B,I),x=EA.subtractRanges(x,c),B.max<B.min||x.max<x.min)continue;let q=H.generators.map(y=>new He(y.generatorType,y.generatorValue));e(q,w);let O=[...H.modulators];t(O,L);let M=[...O];for(let y of E){let U=M.findIndex(_=>Fe.isIdentical(y,_));U===-1?M.push(y):M[U]=M[U].sumTransform(y)}let P=q.map(y=>new He(y.generatorType,y.generatorValue));for(let y of l){if(y.generatorType===g.velRange||y.generatorType===g.keyRange||y.generatorType===g.instrument||y.generatorType===g.endOper||y.generatorType===g.sampleModes)continue;let U=q.findIndex(_=>_.generatorType===y.generatorType);if(U===-1){let _=rA[y.generatorType].def+y.generatorValue;P.push(new He(y.generatorType,_))}else{let _=P[U].generatorValue+y.generatorValue;P[U]=new He(y.generatorType,_)}}P=P.filter(y=>y.generatorType!==g.sampleID&&y.generatorType!==g.keyRange&&y.generatorType!==g.velRange&&y.generatorType!==g.endOper&&y.generatorType!==g.instrument&&y.generatorValue!==rA[y.generatorType].def);let J=s.createZone(H.sample);J.keyRange=B,J.velRange=x,J.keyRange.min===0&&J.keyRange.max===127&&(J.keyRange.min=-1),J.velRange.min===0&&J.velRange.max===127&&(J.velRange.min=-1),J.addGenerators(...P),J.addModulators(...M)}}return s}write(e,t){D(`%cWriting ${this.name}...`,C.info),Te(e.pdta,this.name.slice(0,20),20),Te(e.xdta,this.name.slice(20),20),te(e.pdta,this.program);let s=this.bankMSB;this.isGMGSDrum?s=128:this.bankMSB===0&&(s=this.bankLSB),te(e.pdta,s),e.xdta.currentIndex+=4,te(e.pdta,t&65535),te(e.xdta,t>>16),Be(e.pdta,this.library),Be(e.pdta,this.genre),Be(e.pdta,this.morphology),e.xdta.currentIndex+=12}};function sa(A,e){let t=e?A.find(s=>s.isXGDrums):A.find(s=>s.isGMGSDrum);return t||(A.find(s=>s.isAnyDrums)??A[0])}function ei(A,e,t){if(A.length===0)throw new Error("No presets!");e.isGMGSDrum&&Re.isSystemXG(t)&&(e={...e,isGMGSDrum:!1,bankLSB:0,bankMSB:Re.getDrumBank(t)});let{isGMGSDrum:s,bankLSB:n,bankMSB:a,program:r}=e,i=Re.isSystemXG(t),o=Re.isXGDrums(a)&&i,h=A.find(l=>l.matches(e));if(h&&(!o||o&&h.isXGDrums))return h;let I=l=>{D(`%cPreset %c${lA.toMIDIString(e)}%c not found. (${t}) Replaced with %c${l.toString()}`,C.warn,C.unrecognized,C.warn,C.value)};if(s){let l=A.find(E=>E.isGMGSDrum&&E.program===r);return l||(l=A.find(E=>E.isAnyDrums&&E.program===r),l)?(I(l),l):(l=sa(A,!1),I(l),l)}if(o){let l=A.find(E=>E.program===r&&E.isXGDrums);return l||(l=A.find(E=>E.isAnyDrums&&E.program===r),l)?(I(l),l):(l=sa(A,!0),I(l),l)}let c=A.filter(l=>l.program===r&&!l.isAnyDrums);if(c.length===0)return I(A[0]),A[0];if(h=i?c.find(l=>l.bankLSB===n):c.find(l=>l.bankMSB===a),h)return I(h),h;if(n!==64||!i){let l=Math.max(a,n);if(h=c.find(E=>E.bankLSB===l||E.bankMSB===l),h)return I(h),h}return I(c[0]),c[0]}var ho=class extends vt{constructor(A,e){super(A.parentSoundBank,A.globalZone),this.bankMSB=Re.addBankOffset(A.bankMSB,e,A.isXGDrums),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}},go=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){ne("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 ei(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 ho(a,n);e.has(r.toMIDIString())||(e.add(r.toMIDIString()),A.push(r))}}A.sort(lA.sorter.bind(lA)),this.selectablePresetList=A,this._presetList=A.map(t=>({bankMSB:t.bankMSB,bankLSB:t.bankLSB,program:t.program,isGMGSDrum:t.isGMGSDrum,name:t.name,isAnyDrums:t.isAnyDrums})),this.presetListChangeCallback()}};function Io(A,e){switch(this.masterParameters[A]=e,A){default:break;case"masterPan":{let t=e;t=t/2+.5,this.panLeft=Math.cos(Math.PI/2*t),this.panRight=Math.sin(Math.PI/2*t);break}case"voiceCap":{let t=Math.min(e,1e6);this.masterParameters.voiceCap=t;for(let s=t;s<this.voices.length;s++)this.voices[s].isActive=!1;if(t>this.voices.length){ne(`Allocating ${t-this.voices.length} new voices!`);for(let s=this.voices.length;s<t;s++)this.voices.push(new hn(this.sampleRate))}break}case"transposition":{let t=e;this.masterParameters.transposition=0;for(let s of this.midiChannels)s.transposeChannel(t);this.masterParameters.transposition=t}}this.callEvent("masterParameterChange",{parameter:A,value:e})}function co(A){return this.masterParameters[A]}function lo(){return{...this.masterParameters}}function kA(A,e,t,s){D(`%cChannel %c${A}%c ${t} is now set to %c${e} ${s}.`,C.info,C.recognized,C.info,C.value)}function qe(A,e){D(`%cUnrecognized %c${e} %cSysEx: %c${os(A)}`,C.warn,C.recognized,C.warn,C.unrecognized)}function na(A,e,t){let s=A,n=e<<7|t;return A===127&&e===127&&t===127?-1:s+n*61e-6}function Co(A,e=0){switch(A[2]){case 4:{let t;switch(A[3]){case 1:{let s=A[5]<<7|A[4];this.setMIDIVolume(s/16384),D(`%cMaster Volume. Volume: %c${s}`,C.info,C.value);break}case 2:{let n=((A[5]<<7|A[4])-8192)/8192;this.setMasterParameter("masterPan",n),D(`%cMaster Pan. Pan: %c${n}`,C.info,C.value);break}case 3:{let s=(A[5]<<7|A[6])-8192;t=Math.floor(s/81.92),this.setMasterTuning(t),D(`%cMaster Fine Tuning. Cents: %c${t}`,C.info,C.value);break}case 4:{t=(A[5]-64)*100,this.setMasterTuning(t),D(`%cMaster Coarse Tuning. Cents: %c${t}`,C.info,C.value);break}default:D(`%cUnrecognized MIDI Device Control Real-time message: %c${os(A)}`,C.warn,C.unrecognized)}break}case 9:{A[3]===1?(D("%cGM1 system on",C.info),this.resetAllControllers("gm")):A[3]===3?(D("%cGM2 system on",C.info),this.resetAllControllers("gm2")):(D("%cGM system off, defaulting to GS",C.info),this.setMasterParameter("midiSystem","gs"));break}case 8:{let t=4;switch(A[3]){case 1:{let s=A[t++],n=gA(A,16,t);if(t+=16,A.length<384){ne(`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]=na(A[t++],A[t++],A[t++]);D(`%cBulk Tuning Dump %c${n}%c Program: %c${s}`,C.info,C.value,C.info,C.recognized);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]=na(A[t++],A[t++],A[t++])}D(`%cSingle Note Tuning. Program: %c${s}%c Keys affected: %c${n}`,C.info,C.recognized,C.info,C.recognized);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);D(`%cMIDI Octave Scale ${A[3]===8?"(1 byte)":"(2 bytes)"} tuning via Tuning: %c${s.join(" ")}`,C.info,C.value);break}default:{qe(A,"MIDI Tuning Standard");break}}break}default:qe(A,"General MIDI")}}var z=(A,e)=>{D(`%cRoland GS ${A}%c is now set to %c${e}%c.`,C.recognized,C.info,C.value,C.info)};function Bo(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){D("%cGS Reset received!",C.info),this.resetAllControllers("gs");return}if(t===64){if(s===0){switch(n){case 0:{let i=((a<<12|A[8]<<8|A[9]<<4|A[10])-1024)/10;this.setMasterTuning(i),z("Master Tune",i);break}case 4:{z("Master Volume",a);break}case 5:{let r=a-64;z("Master Key-Shift",r),this.setMasterTuning(r*100);break}case 6:{z("Master Pan",a),this.setMasterParameter("masterPan",(a-64)/64);break}case 127:{a===0?(D("%cGS Reset received!",C.info),this.resetAllControllers("gs")):a===127&&(D("%cGS system off, switching to GM",C.info),this.resetAllControllers("gm"));break}default:{qe(A,"Roland GS");break}}return}if(s===1){let r=n>=48&&n<=55,i=n>=56&&n<=64,o=n>=80&&n<=90;if(r&&this.masterParameters.reverbLock||i&&this.masterParameters.chorusLock||o&&this.masterParameters.delayLock)return;switch(this.delayActive||=n===64||o,n){default:{D(`%cUnsupported Patch Common parameter: %c${n.toString(16)}`,C.warn,C.unrecognized);break}case 0:{let h=gA(A,16,7);z(`Patch Name for ${n&15}`,h);break}case 48:{this.setReverbMacro(a),z("Reverb Macro",a);break}case 49:{this.reverbProcessor.character=a,z("Reverb Character",a),this.callEvent("effectChange",{effect:"reverb",parameter:"character",value:a});break}case 50:{this.reverbProcessor.preLowpass=a,z("Reverb Pre-LPF",a),this.callEvent("effectChange",{effect:"reverb",parameter:"preLowpass",value:a});break}case 51:{this.reverbProcessor.level=a,z("Reverb Level",a),this.callEvent("effectChange",{effect:"reverb",parameter:"level",value:a});break}case 52:{this.reverbProcessor.time=a,z("Reverb Time",a),this.callEvent("effectChange",{effect:"reverb",parameter:"time",value:a});break}case 53:{this.reverbProcessor.delayFeedback=a,z("Reverb Delay Feedback",a),this.callEvent("effectChange",{effect:"reverb",parameter:"delayFeedback",value:a});break}case 54:break;case 55:{this.reverbProcessor.preDelayTime=a,z("Reverb Predelay Time",a),this.callEvent("effectChange",{effect:"reverb",parameter:"preDelayTime",value:a});break}case 56:{this.setChorusMacro(a),z("Chorus Macro",a);break}case 57:{this.chorusProcessor.preLowpass=a,z("Pre-LPF",a),this.callEvent("effectChange",{effect:"chorus",parameter:"preLowpass",value:a});break}case 58:{this.chorusProcessor.level=a,z("Chorus Level",a),this.callEvent("effectChange",{effect:"chorus",parameter:"level",value:a});break}case 59:{this.chorusProcessor.feedback=a,z("Chorus Feedback",a),this.callEvent("effectChange",{effect:"chorus",parameter:"feedback",value:a});break}case 60:{this.chorusProcessor.delay=a,z("Chorus Delay",a),this.callEvent("effectChange",{effect:"chorus",parameter:"delay",value:a});break}case 61:{this.chorusProcessor.rate=a,z("Chorus Rate",a),this.callEvent("effectChange",{effect:"chorus",parameter:"rate",value:a});break}case 62:{this.chorusProcessor.depth=a,z("Chorus Depth",a),this.callEvent("effectChange",{effect:"chorus",parameter:"depth",value:a});break}case 63:{this.chorusProcessor.sendLevelToReverb=a,z("Chorus Send Level To Reverb",a),this.callEvent("effectChange",{effect:"chorus",parameter:"sendLevelToReverb",value:a});break}case 64:{this.chorusProcessor.sendLevelToDelay=a,z("Chorus Send Level To Delay",a),this.callEvent("effectChange",{effect:"chorus",parameter:"sendLevelToDelay",value:a});break}case 80:{this.setDelayMacro(a),z("Delay Macro",a);break}case 81:{this.delayProcessor.preLowpass=a,z("Delay Pre-LPF",a),this.callEvent("effectChange",{effect:"delay",parameter:"preLowpass",value:a});break}case 82:{this.delayProcessor.timeCenter=a,z("Delay Time Center",a),this.callEvent("effectChange",{effect:"delay",parameter:"timeCenter",value:a});break}case 83:{this.delayProcessor.timeRatioLeft=a,z("Delay Time Ratio Left",a),this.callEvent("effectChange",{effect:"delay",parameter:"timeRatioLeft",value:a});break}case 84:{this.delayProcessor.timeRatioRight=a,z("Delay Time Ratio Right",a),this.callEvent("effectChange",{effect:"delay",parameter:"timeRatioRight",value:a});break}case 85:{this.delayProcessor.levelCenter=a,z("Delay Level Center",a),this.callEvent("effectChange",{effect:"delay",parameter:"levelCenter",value:a});break}case 86:{this.delayProcessor.levelLeft=a,z("Delay Level Left",a),this.callEvent("effectChange",{effect:"delay",parameter:"levelLeft",value:a});break}case 87:{this.delayProcessor.levelRight=a,z("Delay Level Right",a),this.callEvent("effectChange",{effect:"delay",parameter:"levelRight",value:a});break}case 88:{this.delayProcessor.level=a,z("Delay Level",a),this.callEvent("effectChange",{effect:"delay",parameter:"level",value:a});break}case 89:{this.delayProcessor.feedback=a,z("Delay Feedback",a),this.callEvent("effectChange",{effect:"delay",parameter:"feedback",value:a});break}case 90:{this.delayProcessor.sendLevelToReverb=a,z("Delay Send Level To Reverb",a),this.callEvent("effectChange",{effect:"delay",parameter:"sendLevelToReverb",value:a});break}}break}if(s===3){if(this.masterParameters.insertionEffectLock)return;if(n>=3&&n<=25&&(this.insertionParams[n-3]=a),n>=3&&n<=22){this.insertionProcessor.setParameter(n,a),z(`EFX Parameter ${n-2}`,a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return}switch(n){default:{qe(A,"Roland GS EFX");return}case 0:{let r=a<<8|A[8],i=this.insertionEffects.get(r);i?(z("EFX Type",r.toString(16)),this.insertionProcessor=i):(this.insertionProcessor=this.insertionFallback,D(`%cUnsupported EFX processor: %c${r.toString(16)}%c, using Thru.`,C.warn,C.unrecognized,C.warn)),this.resetInsertionParams(),this.insertionProcessor.reset(),this.callEvent("effectChange",{effect:"insertion",parameter:0,value:r});return}case 23:{this.insertionProcessor.sendLevelToReverb=a/127*Wt,z("EFX Send Level to Reverb",a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return}case 24:{this.insertionProcessor.sendLevelToChorus=a/127*Wt,z("EFX Send Level to Chorus",a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return}case 25:{this.insertionProcessor.sendLevelToDelay=a/127*Wt,this.delayActive=!0,z("EFX Send Level to Delay",a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return}}}if(s>>4===1){let r=at(s&15)+e,i=this.midiChannels[r];switch(n){default:{qe(A,"Roland GS");return}case 0:{i.controllerChange(u.bankSelect,a),i.programChange(A[8]);break}case 2:{i.rxChannel=a===16?-1:a+e,this.customChannelNumbers||=i.rxChannel!==i.channel,z(`Rx. Channel on ${r}`,i.rxChannel);break}case 19:{i.polyMode=a===1,z(`Mono/poly on ${r}`,i.polyMode?"POLY":"MONO");break}case 20:{z(`Assign mode on ${r}`,a);break}case 21:{i.drumMap=a;let o=a>0;i.setGSDrums(o),z(`Drums on ${r}`,o.toString());return}case 22:{let o=a-64;i.setCustomController(Ce.channelKeyShift,o),z(`Key shift on ${r}`,o);return}case 25:{i.controllerChange(u.mainVolume,a);return}case 28:{let o=a;o===0?(i.randomPan=!0,z(`Random pan on ${r}`,"ON")):(i.randomPan=!1,i.controllerChange(u.pan,o));break}case 31:{i.cc1=a,z("CC1 Controller Number",a);break}case 32:{i.cc2=a,z("CC2 Controller Number",a);break}case 33:{i.controllerChange(u.chorusDepth,a);break}case 34:{i.controllerChange(u.reverbDepth,a);break}case 42:{let h=((a<<7|A[8])-8192)/81.92;i.setTuning(h);break}case 44:{i.controllerChange(u.variationDepth,a);break}case 48:{i.controllerChange(u.vibratoRate,a);break}case 49:{i.controllerChange(u.vibratoDepth,a);break}case 50:{i.controllerChange(u.brightness,a);break}case 51:{i.controllerChange(u.filterResonance,a);break}case 52:{i.controllerChange(u.attackTime,a);break}case 53:{i.controllerChange(u.decayTime,a);break}case 54:{i.controllerChange(u.releaseTime,a);break}case 55:{i.controllerChange(u.vibratoDelay,a);break}case 64:{let o=A.length-9,h=new Int8Array(12);for(let c=0;c<o;c++)h[c]=A[c+7]-64;i.setOctaveTuning(h);let I=a-64;z(`Octave Scale Tuning on ${r}`,h.join(", ")),i.setTuning(I);break}}return}if(s>>4===2){let r=at(s&15)+e,i=this.midiChannels[r],o=a-64,h=o/64,I=a/128,c=(l,E,d=!1)=>{switch(n&15){case 0:{l===ve+Ae.pitchWheel?(i.controllerChange(u.registeredParameterMSB,0),i.controllerChange(u.registeredParameterLSB,0),i.controllerChange(u.dataEntryMSB,Math.floor(o))):(i.sysExModulators.setModulator(l,g.fineTune,o*100,d),kA(r,o,`${E} pitch control`,"semitones"));break}case 1:{i.sysExModulators.setModulator(l,g.initialFilterFc,h*9600,d),kA(r,h*9600,`${E} pitch control`,"cents");break}case 2:{i.sysExModulators.setModulator(l,g.initialAttenuation,h*960,d),kA(r,h*960,`${E} amplitude`,"cB");break}case 4:{if(l===u.modulationWheel){let p=I*600;i.customControllers[Ce.modulationMultiplier]=p/50}else i.sysExModulators.setModulator(l,g.vibLfoToPitch,I*600,d),kA(r,I*600,`${E} LFO1 pitch depth`,"cents");break}case 5:{i.sysExModulators.setModulator(l,g.vibLfoToFilterFc,I*2400,d),kA(r,I*2400,`${E} LFO1 filter depth`,"cents");break}case 6:{i.sysExModulators.setModulator(l,g.vibLfoToVolume,h*960,d),kA(r,h*960,`${E} LFO1 amplitude depth`,"cB");break}case 8:{i.sysExModulators.setModulator(l,g.modLfoToPitch,I*600,d),kA(r,I*600,`${E} LFO2 pitch depth`,"cents");break}case 9:{i.sysExModulators.setModulator(l,g.modLfoToFilterFc,I*2400,d),kA(r,I*2400,`${E} LFO2 filter depth`,"cents");break}case 10:{i.sysExModulators.setModulator(l,g.modLfoToVolume,h*960,d),kA(r,h*960,`${E} LFO2 amplitude depth`,"cB");break}}};switch(n&240){default:{qe(A,"Roland GS Patch Parameter Controller");break}case 0:{c(u.modulationWheel,"mod wheel");break}case 16:{c(ve+Ae.pitchWheel,"pitch wheel",!0);break}case 32:{c(ve+Ae.channelPressure,"channel pressure");break}case 48:{c(ve+Ae.polyPressure,"poly pressure");break}case 64:{c(i.cc1,"CC1");break}case 80:c(i.cc2,"CC2")}return}if(s>>4===4){let r=at(s&15)+e,i=this.midiChannels[r];switch(n){default:{qe(A,"Roland GS Patch Part Parameter");break}case 0:case 1:{i.controllerChange(u.bankSelectLSB,a);break}case 34:{if(this.masterParameters.insertionEffectLock)return;let o=a===1;i.insertionEnabled=o,this.insertionActive||=o,z(`Insertion for ${r}`,o?"ON":"OFF"),this.callEvent("effectChange",{effect:"insertion",parameter:o?-1:-2,value:r})}}return}qe(A,"Roland GS Patch Parameter");return}if(t===65){if(this.masterParameters.drumLock)return;let r=(s>>4)+1,i=n;switch(s&15){default:{qe(A,"Roland GS Drum Setup");return}case 0:{let h=gA(A,12,7);z(`Patch Name for MAP${r}`,h);break}case 1:{let h=a-60;for(let I of this.midiChannels)I.drumMap===r&&(I.drumParams[i].pitch=h*(I.patch.bankLSB===1?100:50));z(`Drum Pitch for MAP${r}, key ${i}`,h);break}case 2:{for(let h of this.midiChannels)h.drumMap===r&&(h.drumParams[i].gain=a/120);z(`Drum Level for MAP${r}, key ${i}`,a);break}case 3:{for(let h of this.midiChannels)h.drumMap===r&&(h.drumParams[i].exclusiveClass=a);z(`Drum Assign Group for MAP${r}, key ${i}`,a);break}case 4:{for(let h of this.midiChannels)h.drumMap===r&&(h.drumParams[i].pan=a);z(`Drum Pan for MAP${r}, key ${i}`,a);break}case 5:{for(let h of this.midiChannels)h.drumMap===r&&(h.drumParams[i].reverbGain=a/127);z(`Drum Reverb for MAP${r}, key ${i}`,a);break}case 6:{for(let h of this.midiChannels)h.drumMap===r&&(h.drumParams[i].chorusGain=a/127);z(`Drum Chorus for MAP${r}, key ${i}`,a);break}case 7:{for(let h of this.midiChannels)h.drumMap===r&&(h.drumParams[i].rxNoteOff=a===1);z(`Drum Note Off for MAP${r}, key ${i}`,a===1);break}case 8:{for(let h of this.midiChannels)h.drumMap===r&&(h.drumParams[i].rxNoteOn=a===1);z(`Drum Note On for MAP${r}, key ${i}`,a===1);break}case 9:{for(let h of this.midiChannels)h.drumMap===r&&(h.drumParams[i].delayGain=a/127);z(`Drum Delay for MAP${r}, key ${i}`,a);break}}return}qe(A,"Roland GS");return}case 69:{A[4]===16&&(A[5]===0?this.callEvent("synthDisplay",[...A]):A[5]===1?this.callEvent("synthDisplay",[...A]):qe(A,"Roland GS Display"));return}case 22:if(A[4]===16){this.setMIDIVolume(A[7]/100),D(`%cRoland Master Volume control set to: %c${A[7]}`,C.info,C.value);return}else qe(A,"Roland")}else{qe(A,"Roland");return}}var Ye=(A,e)=>{D(`%cYamaha XG ${A}%c for is now set to %c${e}%c.`,C.recognized,C.info,C.value,C.info)};function Eo(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.setMasterTuning(i),Ye("Master Tune",i)}break}case 4:{this.setMIDIVolume(a/127),Ye("Master Volume",a);break}case 5:{let r=127-a;this.setMIDIVolume(r/127),Ye("Master Attenuation",a);break}case 6:{let r=a-64;this.setMasterParameter("transposition",r),Ye("Master Transpose",r);break}case 127:case 126:{D("%cXG system on",C.info),this.resetAllControllers("xg");break}}return}if(t===2&&s===1){let r,i=n;i<=21?r="Reverb":i<=35?r="Chorus":r="Variation",D(`%cUnsupported XG ${r} Parameter: %c${i.toString(16)}`,C.warn,C.unrecognized);return}if(t===8){if(!Re.isSystemXG(this.masterParameters.midiSystem))return;let r=s+e;if(r>=this.midiChannels.length)return;let i=this.midiChannels[r];switch(n){case 1:{i.controllerChange(u.bankSelect,a);break}case 2:{i.controllerChange(u.bankSelectLSB,a);break}case 3:{i.programChange(a);break}case 4:{i.rxChannel=a+e,this.customChannelNumbers||=i.rxChannel!==i.channel,Ye(`Rev. Channel on ${r}`,i.rxChannel);break}case 5:{i.polyMode=a===1,Ye(`Mono/poly on ${r}`,i.polyMode?"POLY":"MONO");break}case 7:{i.setDrums(a!=0);break}case 8:{if(i.drumChannel)break;let o=a-64;i.setCustomController(Ce.channelKeyShift,o),Ye(`Key shift on ${r}`,o);break}case 11:{i.controllerChange(u.mainVolume,a);break}case 14:{let o=a;o===0?(i.randomPan=!0,Ye(`Random Pan for ${r}`,"ON")):i.controllerChange(u.pan,o);break}case 18:{i.controllerChange(u.chorusDepth,a);break}case 19:{i.controllerChange(u.reverbDepth,a);break}case 21:{i.controllerChange(u.vibratoRate,a);break}case 22:{i.controllerChange(u.vibratoDepth,a);break}case 23:{i.controllerChange(u.vibratoDelay,a);break}case 24:{i.controllerChange(u.brightness,a);break}case 25:{i.controllerChange(u.filterResonance,a);break}case 26:{i.controllerChange(u.attackTime,a);break}case 27:{i.controllerChange(u.decayTime,a);break}case 28:{i.controllerChange(u.releaseTime,a);break}default:D(`%cUnsupported Yamaha XG Part Setup: %c${A[5].toString(16).toUpperCase()}%c for channel ${r}`,C.warn,C.unrecognized,C.warn)}return}if(t>>4===3){if(this.masterParameters.drumLock)return;let r=s;switch(n){default:{qe([n],"Yamaha XG Drum Setup");return}case 0:{let i=(a-64)*100;for(let o of this.midiChannels)o.drumChannel&&(o.drumParams[r].pitch=i);Ye(`Drum Pitch, key ${r}`,i);break}case 1:{let i=a-64;for(let o of this.midiChannels)o.drumChannel&&(o.drumParams[r].pitch+=i);Ye(`Drum Pitch Fine, key ${r}`,i);break}case 2:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].gain=a/120);Ye(`Drum Level, key ${r}`,a);break}case 3:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].exclusiveClass=a);Ye(`Drum Alternate Group, key ${r}`,a);break}case 4:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].pan=a);Ye(`Drum Pan, key ${r}`,a);break}case 5:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].reverbGain=a/127);Ye(`Drum Reverb, key ${r}`,a);break}case 6:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].chorusGain=a/127);Ye(`Drum Chorus, key ${r}`,a);break}case 9:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].rxNoteOff=a===1);Ye(`Drum Note Off, key ${r}`,a===1);break}case 10:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].rxNoteOn=a===1);Ye(`Drum Note On, key ${r}`,a===1);break}}return}t===6||t===7?this.callEvent("synthDisplay",[...A]):Re.isSystemXG(this.masterParameters.midiSystem)&&qe(A,"Yamaha XG")}else qe(A,"Yamaha")}function Qo(A,e=0){e+=this.portSelectChannelOffset;let t=A[0];if(!(this.masterParameters.deviceID!==ht&&A[1]!==127&&this.masterParameters.deviceID!==A[1]))switch(t){default:{D(`%cUnknown manufacturer: %c${os(A)}`,C.warn,C.unrecognized);break}case 126:case 127:{Co.call(this,A,e);break}case 65:{Bo.call(this,A,e);break}case 67:{Eo.call(this,A,e);break}case 245:{if(A.length<2)return;for(this.portSelectChannelOffset=(A[1]-1)*16;this.midiChannels.length<=this.portSelectChannelOffset;){D(`%cPort select, channel offset %c${this.portSelectChannelOffset}%c. Creating a new port!`,C.info,C.value,C.info);for(let s=0;s<16;s++)this.createMIDIChannel(!0)}break}}}var Ai=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=0;reset(){}process(A,e,t,s,n,a,r,i,o){let{sendLevelToReverb:h,sendLevelToChorus:I,sendLevelToDelay:c}=this;for(let l=0;l<o;l++){let E=A[l],d=e[l],p=i+l;t[p]+=E,s[p]+=d;let w=(E+d)*.5;n[l]+=w*h,a[l]+=w*I,r[l]+=w*c}}setParameter(A,e){}},bA=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]}},aa=Math.PI/2,$t=-64,ti=63,Mn=ti-$t,is=new Float32Array(Mn+1),rs=new Float32Array(Mn+1);for(let A=$t;A<=ti;A++){let e=(A-$t)/Mn,t=A-$t;is[t]=Math.cos(aa*e),rs[t]=Math.sin(aa*e)}function we(A){A.x1=A.x2=A.y1=A.y2=0}var $e={b0:1,b1:0,b2:0,a0:1,a1:0,a2:0};function VA(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 dA(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 TA(A,e,t,s,n){let a=Math.pow(10,e/40),r=2*Math.PI*t/s,i=Math.cos(r),I=Math.sin(r)/2*Math.sqrt((a+1/a)*(1/1-1)+2),c,l,E,d,p,w;n?(c=a*(a+1-(a-1)*i+2*Math.sqrt(a)*I),l=2*a*(a-1-(a+1)*i),E=a*(a+1-(a-1)*i-2*Math.sqrt(a)*I),d=a+1+(a-1)*i+2*Math.sqrt(a)*I,p=-2*(a-1+(a+1)*i),w=a+1+(a-1)*i-2*Math.sqrt(a)*I):(c=a*(a+1+(a-1)*i+2*Math.sqrt(a)*I),l=-2*a*(a-1+(a+1)*i),E=a*(a+1+(a-1)*i-2*Math.sqrt(a)*I),d=a+1-(a-1)*i+2*Math.sqrt(a)*I,p=2*(a-1-(a+1)*i),w=a+1-(a-1)*i-2*Math.sqrt(a)*I),A.b0=c/d,A.b1=l/d,A.b2=E/d,A.a0=1,A.a1=p/d,A.a2=w/d}var Ne={x1:0,x2:0,y1:0,y2:0},fo=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={...$e};m1Coeffs={...$e};m2Coeffs={...$e};hiCoeffs={...$e};lowStateL={...Ne};lowStateR={...Ne};m1StateL={...Ne};m1StateR={...Ne};m2StateL={...Ne};m2StateR={...Ne};hiStateL={...Ne};hiStateR={...Ne};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,we(this.lowStateL),we(this.lowStateR),we(this.m1StateL),we(this.m1StateR),we(this.m2StateL),we(this.m2StateR),we(this.hiStateL),we(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=bA.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=bA.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:h,sendLevelToChorus:I,sendLevelToDelay:c,sendLevelToReverb:l,lowCoeffs:E,lowStateL:d,lowStateR:p,m1Coeffs:w,m1StateL:L,m1StateR:F,m2StateL:b,m2StateR:S,m2Coeffs:H,hiCoeffs:B,hiStateL:x,hiStateR:q}=this;for(let O=0;O<o;O++){let M=A[O],P=e[O];M=dA(M,E,d),P=dA(P,E,p),M=dA(M,w,L),P=dA(P,w,F),M=dA(M,H,b),P=dA(P,H,S),M=dA(M,B,x),P=dA(P,B,q);let J=i+O;t[J]+=M*h,s[J]+=P*h;let y=.5*(M+P);n[O]+=y*l,a[O]+=y*I,r[O]+=y*c}}updateCoefficients(){uo(this.lowCoeffs,this.lowFreq,this.lowGain/2,this.sampleRate),ia(this.m1Coeffs,this.m1Freq,this.m1Gain,this.m1Q,this.sampleRate),ia(this.m2Coeffs,this.m2Freq,this.m2Gain,this.m2Q,this.sampleRate),mo(this.hiCoeffs,this.hiFreq,this.hiGain/2,this.sampleRate)}},si=1;function ia(A,e,t,s,n){let a=Math.pow(10,t/40),r=2*Math.PI*e/n,i=Math.cos(r),h=Math.sin(r)/(2*s),I=1+h*a,c=-2*i,l=1-h*a,E=1+h/a,d=-2*i,p=1-h/a;A.a0=1,A.a1=d/E,A.a2=p/E,A.b0=I/E,A.b1=c/E,A.b2=l/E}function uo(A,e,t,s){let n=Math.pow(10,t/40),a=2*Math.PI*e/s,r=Math.cos(a),o=Math.sin(a)/2*Math.sqrt((n+1/n)*(1/si-1)+2),h=n*(n+1-(n-1)*r+2*Math.sqrt(n)*o),I=2*n*(n-1-(n+1)*r),c=n*(n+1-(n-1)*r-2*Math.sqrt(n)*o),l=n+1+(n-1)*r+2*Math.sqrt(n)*o,E=-2*(n-1+(n+1)*r),d=n+1+(n-1)*r-2*Math.sqrt(n)*o;A.a0=1,A.a1=E/l,A.a2=d/l,A.b0=h/l,A.b1=I/l,A.b2=c/l}function mo(A,e,t,s){let n=Math.pow(10,t/40),a=2*Math.PI*e/s,r=Math.cos(a),o=Math.sin(a)/2*Math.sqrt((n+1/n)*(1/si-1)+2),h=n*(n+1+(n-1)*r+2*Math.sqrt(n)*o),I=-2*n*(n-1+(n+1)*r),c=n*(n+1+(n-1)*r-2*Math.sqrt(n)*o),l=n+1-(n-1)*r+2*Math.sqrt(n)*o,E=2*(n-1-(n+1)*r),d=n+1-(n-1)*r-2*Math.sqrt(n)*o;A.a0=1,A.a1=E/l,A.a2=d/l,A.b0=h/l,A.b1=I/l,A.b2=c/l}var tt=8,Ys=128,ra=4,qs=600,po=.9,oa=.35,ni=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=288;manual=620;rate=.85;depth=64/Ys;reso=16/127;mix=1;lowGain=0;hiGain=0;prevInL;prevOutL;prevInR;prevOutR;lowShelfCoef={...$e};highShelfCoef={...$e};manualOffset=qs;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=oa;sampleRate;constructor(A){this.sampleRate=A,this.prevInL=new Float32Array(tt),this.prevOutL=new Float32Array(tt),this.prevInR=new Float32Array(tt),this.prevOutR=new Float32Array(tt),this.reset()}reset(){this.phase=oa,this.setManual(620),this.rate=.85,this.depth=64/Ys,this.reso=16/127,this.mix=1,this.lowGain=0,this.hiGain=0,this.level=104/127,we(this.highShelfStateL),we(this.highShelfStateR),we(this.lowShelfStateL),we(this.lowShelfStateR),this.updateShelves(),this.clearAllPass()}process(A,e,t,s,n,a,r,i,o){let{sendLevelToReverb:h,sendLevelToChorus:I,sendLevelToDelay:c,level:l,manual:E,manualOffset:d,mix:p,lowShelfCoef:w,lowShelfStateR:L,lowShelfStateL:F,highShelfCoef:b,highShelfStateL:S,highShelfStateR:H,prevInL:B,prevInR:x,prevOutL:q,prevOutR:O,sampleRate:M,depth:P}=this,{prevL:J,prevR:y,phase:U}=this,_=this.rate/this.sampleRate,G=this.reso*po;for(let k=0;k<o;k++){let v=VA(A[k],w,b,F,S),Y=VA(e[k],w,b,L,H),ee=2*Math.abs(U-.5);(U+=_)>=1&&(U-=1);let ie=1-P*ee,Qe=d+E*ie,Ie=Math.tan(Math.PI*Qe/M),Ee=Math.max(-.9999,Math.min(.9999,(1-Ie)/(1+Ie))),re=v+G*J,ce=Y+G*y;for(let le=0;le<tt;le++){let Ue=-Ee*re+B[le]+Ee*q[le];B[le]=re,q[le]=Ue,re=Ue;let Je=-Ee*ce+x[le]+Ee*O[le];x[le]=ce,O[le]=Je,ce=Je}J=re,y=ce;let pe=(v+re*p)*l,W=(Y+ce*p)*l,oe=i+k;t[oe]+=pe,s[oe]+=W;let Ge=(pe+W)*.5;n[k]+=Ge*h,a[k]+=Ge*I,r[k]+=Ge*c}this.phase=U,this.prevL=J,this.prevR=y}setParameter(A,e){switch(A){default:break;case 3:{this.setManual(bA.manual(e));break}case 4:{this.rate=bA.rate1(e);break}case 5:{this.depth=e/Ys;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=qs*1.5*ra,this.manual=A):(this.manualOffset=qs,this.manual=A*ra)}clearAllPass(){this.prevR=0,this.prevL=0;for(let A=0;A<tt;A++)this.prevInL[A]=0,this.prevOutL[A]=0,this.prevInR[A]=0,this.prevOutR[A]=0}updateShelves(){TA(this.lowShelfCoef,this.lowGain,200,this.sampleRate,!0),TA(this.highShelfCoef,this.hiGain,4e3,this.sampleRate,!1)}},ha=Math.PI*2,yo=.935,So=2,ko=.01,ga=127,Do=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=294;modWave=1;modRate=3.05;modDepth=96;lowGain=0;hiGain=0;level=ga/127;currentPan=0;phase=0;lsCoeffs={...$e};hsCoeffs={...$e};lsStateR={...Ne};lsStateL={...Ne};hsStateR={...Ne};hsStateL={...Ne};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=ga/127,this.currentPan=0,this.phase=0,we(this.hsStateR),we(this.hsStateL),we(this.lsStateR),we(this.lsStateL),this.updateShelves()}process(A,e,t,s,n,a,r,i,o){let{sendLevelToReverb:h,sendLevelToChorus:I,sendLevelToDelay:c,level:l,lsCoeffs:E,lsStateL:d,lsStateR:p,hsCoeffs:w,hsStateR:L,hsStateL:F,modWave:b}=this,S=Math.pow(this.modDepth/127,So),H=2/(1+S)*yo,B=this.modRate/this.sampleRate,{phase:x,currentPan:q}=this;for(let O=0;O<o;O++){let M=VA(A[O],E,w,d,F),P=VA(e[O],E,w,p,L),J;switch(b){default:{J=1-4*Math.abs(x-.5);break}case 1:{J=x>.5?-1:-Math.cos((x-.75)*ha);break}case 2:{J=Math.sin(ha*x);break}case 3:{J=1-2*x;break}case 4:{J=2*x-1;break}}(x+=B)>=1&&(x-=1),q+=(J-q)*ko;let y=q*S,U=(1-y)*.5*H,_=(1+y)*.5*H,G=M*l*U,k=P*l*_,v=i+O;t[v]+=G,s[v]+=k;let Y=(G+k)*.5;n[O]+=Y*h,a[O]+=Y*I,r[O]+=Y*c}this.currentPan=q,this.phase=x}setParameter(A,e){switch(A){default:break;case 3:{this.modWave=e;break}case 4:{this.modRate=bA.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(){TA(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),TA(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}},Ia=96,wo=.1,bo=.1,vo=27,Ro=28,Fo=-28,Go=400,Mo=.62,Lo=.005,ai=5,ca=ai*.5,ii=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=Ia/127;coeffs={...$e};state={...Ne};hpCoeffs={...$e};hpState={...Ne};phase=0;lsCoeffs={...$e};hsCoeffs={...$e};lsState={...Ne};hsState={...Ne};sampleRate;lastFc=this.manual;attackCoeff;releaseCoeff;envelope=0;constructor(A){this.sampleRate=A,this.attackCoeff=Math.exp(-1/(wo*A)),this.releaseCoeff=Math.exp(-1/(bo*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=Ia/127,this.phase=.2,this.lastFc=this.manual,we(this.hsState),we(this.lsState),we(this.state),we(this.hpState),this.updateShelves()}process(A,e,t,s,n,a,r,i,o){let{sendLevelToReverb:h,sendLevelToChorus:I,sendLevelToDelay:c,level:l,lsCoeffs:E,lsState:d,hsCoeffs:p,hsState:w,coeffs:L,state:F,sampleRate:b,filType:S,manual:H,pan:B,attackCoeff:x,releaseCoeff:q,hpState:O,hpCoeffs:M}=this,{phase:P,lastFc:J,envelope:y}=this,U=this.rate/this.sampleRate,_=Math.pow(10,this.peak/127*Ro/20),G=Math.pow(10,this.peak/127*Fo/20),k=this.polarity===0?-1:ai,v=this.depth/127*k,Y=this.sens/127,ee=B+64|0,ie=is[ee],Qe=rs[ee];for(let Ie=0;Ie<o;Ie++){let Ee=VA((A[Ie]+e[Ie])*.5,E,p,d,w),re=Math.abs(Ee);y=re>y?x*y+(1-x)*re:q*y+(1-q)*re;let ce=2*Math.abs(P-.5)*v;(P+=U)>=1&&(P-=1);let pe=ce>=ca||k<0?1:Math.sin(ce*Math.PI/(2*ca)),W=H*(1+Y*y*vo),oe=Math.max(20,W*(1+pe*ce)),Ge=Math.max(10,oe);J+=(Ge-J)*Lo,No(L,J,_,b);let le=Ee;S===1&&(To(M,Go,G,b),le=dA(le,M,O));let Ue=dA(le,L,F)*l,Je=Ue*ie,UA=Ue*Qe,fA=i+Ie;t[fA]+=Je,s[fA]+=UA,n[Ie]+=Ue*h,a[Ie]+=Ue*I,r[Ie]+=Ue*c}this.phase=P,this.lastFc=J,this.envelope=y}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=bA.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*Mo,t=bA.manual(Math.floor(e)),s=bA.manual(Math.ceil(e)),n=e-Math.floor(e);this.manual=t+(s-t)*n}updateShelves(){TA(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),TA(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}};function No(A,e,t,s){let n=2*Math.PI*e/s,a=Math.cos(n),i=Math.sin(n)/(2*t),o=1-a,h=o/2,I=h,c=1+i,l=-2*a,E=1-i;A.a0=1,A.a1=l/c,A.a2=E/c,A.b0=h/c,A.b1=o/c,A.b2=I/c}function To(A,e,t,s){let n=2*Math.PI*e/s,a=Math.cos(n),i=Math.sin(n)/(2*t),o=(1+a)/2,h=-(1+a),I=o,c=1+i,l=-2*a,E=1-i;A.a0=1,A.a1=l/c,A.a2=E/c,A.b0=o/c,A.b1=h/c,A.b2=I/c}var la=127,Uo=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=4360;phPan=0;awPan=127;level=la/127;phaser;autoWah;bufferPh;bufferAw;constructor(A,e){this.phaser=new ni(A),this.autoWah=new ii(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=la/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:h,sendLevelToChorus:I,sendLevelToDelay:c,level:l}=this,{bufferPh:E,bufferAw:d}=this;this.bufferPh.fill(0),this.phaser.process(A,A,E,E,E,E,E,0,o),this.bufferAw.fill(0),this.autoWah.process(e,e,d,d,d,d,d,0,o);let p=this.phPan|0,w=is[p],L=rs[p],F=this.awPan|0,b=is[F],S=rs[F];for(let H=0;H<o;H++){let B=E[H]*.5*l,x=d[H]*.5*l,q=B*w+x*b,O=B*L+x*S,M=i+H;t[M]+=q,s[M]+=O;let P=(q+O)*.5;n[H]+=P*h,a[H]+=P*I,r[H]+=P*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}}}},Ca=127,Ba=Math.PI*2,Po=.01,xo=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=293;modWave=1;modRate=3.05;modDepth=96;lowGain=0;hiGain=0;level=Ca/127;phase=0;currentGain=1;lsCoeffs={...$e};hsCoeffs={...$e};lsStateR={...Ne};lsStateL={...Ne};hsStateR={...Ne};hsStateL={...Ne};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=Ca/127,this.phase=0,this.currentGain=1,we(this.hsStateR),we(this.hsStateL),we(this.lsStateR),we(this.lsStateL),this.updateShelves()}process(A,e,t,s,n,a,r,i,o){let{sendLevelToReverb:h,sendLevelToChorus:I,sendLevelToDelay:c,level:l,lsCoeffs:E,lsStateL:d,lsStateR:p,hsCoeffs:w,hsStateR:L,hsStateL:F,modDepth:b,modWave:S}=this,H=this.modRate/this.sampleRate,{currentGain:B,phase:x}=this;for(let q=0;q<o;q++){let O=VA(A[q],E,w,d,F),M=VA(e[q],E,w,p,L),P;switch(S){default:{P=1-4*Math.abs(x-.5);break}case 1:{P=x>.5?-1:-Math.cos((x-.75)*Ba);break}case 2:{P=Math.sin(Ba*x);break}case 3:{P=1-2*x;break}case 4:{P=2*x-1;break}}(x+=H)>=1&&(x-=1);let J=1-(P/2+.5)*(b/127);B+=(J-B)*Po;let y=O*l*B,U=M*l*B,_=i+q;t[_]+=y,s[_]+=U;let G=(y+U)*.5;n[q]+=G*h,a[q]+=G*I,r[q]+=G*c}this.phase=x,this.currentGain=B}setParameter(A,e){switch(A){default:break;case 3:{this.modWave=e;break}case 4:{this.modRate=bA.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(){TA(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),TA(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}},Ho=[Ai,fo,ni,Do,ii,Uo,xo],Oo=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);let e=[.004771345,.003595309,.012734787,.009307483,.022579886,.149625349,.060481839,.1249958,.030509727,.141695508,.089244313,.106280031];for(let t of e)this.makeDelayLine(t);this.taps=Int16Array.from([.008937872,.099929438,.064278754,.067067639,.066866033,.006283391,.035818689,.011861161,.121870905,.041262054,.08981553,.070931756,.011256342,.004065724],t=>Math.round(t*this.sampleRate))}process(A,e,t,s,n){let a=this.preDelay|0,r=this.inputDiffusion1,i=this.inputDiffusion2,o=this.decay,h=this.decayDiffusion1,I=this.decayDiffusion2,c=1-this.damping,l=this.excursionRate/this.sampleRate,E=this.excursionDepth*this.sampleRate/1e3,d=this.pDWrite;for(let p=0;p<n;p++)this.pDelay[(d+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 w=this.writeDelay(0,this.lp1-r*this.readDelay(0));w=this.writeDelay(1,r*(w-this.readDelay(1))+this.readDelay(0)),w=this.writeDelay(2,r*w+this.readDelay(1)-i*this.readDelay(2)),w=this.writeDelay(3,i*(w-this.readDelay(3))+this.readDelay(2));let L=i*w+this.readDelay(3),F=E*(1+Math.cos(this.excPhase*6.28)),b=E*(1+Math.sin(this.excPhase*6.2847)),S=this.writeDelay(4,L+o*this.readDelay(11)+h*this.readDelayCAt(4,F));this.writeDelay(5,this.readDelayCAt(4,F)-h*S),this.lp2+=c*(this.readDelay(5)-this.lp2),S=this.writeDelay(6,o*this.lp2-I*this.readDelay(6)),this.writeDelay(7,this.readDelay(6)+I*S),S=this.writeDelay(8,L+o*this.readDelay(7)+h*this.readDelayCAt(8,b)),this.writeDelay(9,this.readDelayCAt(8,b)-h*S),this.lp3+=c*(this.readDelay(9)-this.lp3),S=this.writeDelay(10,o*this.lp3-I*this.readDelay(10)),this.writeDelay(11,this.readDelay(10)+I*S);let H=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]),B=p+s;e[B]+=H*this.gain;let x=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[B]+=x*this.gain,this.excPhase+=l;for(let q=0,O=this.delays[0];q<this.delays.length;O=this.delays[++q])O[1]=O[1]+1&O[3],O[2]=O[2]+1&O[3]}this.pDWrite=(d+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],h=t[0][a&n],I=(3*(i-o)-r+h)/2,c=2*o+r-(5*i+h)/2,l=(o-r)/2;return((I*s+c)*s+l)*s+i}},kt=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 h=0;h<t;h++){let I=s-n;I<0&&(I+=r);let c=a[I];e[h]=c*o,a[s]=A[h]+c*i,++s>=r&&(s=0)}this.writeIndex=s}},Yo=1.5,qo=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 Oo(A),this.delayLeft=new kt(A),this.delayRight=new kt(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=.7,this.characterLPFCoefficient=.2;break}case 1:{this.dattorro.damping=.2,this.characterGainCoefficient=.5,this.characterTimeCoefficient=1,this.dattorro.decayDiffusion2=.64,this.dattorro.decayDiffusion1=.6,this.characterLPFCoefficient=.2;break}case 2:{this.dattorro.damping=.56,this.characterGainCoefficient=.55,this.characterTimeCoefficient=1,this.dattorro.decayDiffusion2=.64,this.dattorro.decayDiffusion1=.6,this.characterLPFCoefficient=.1;break}case 3:{this.dattorro.damping=.6,this.characterGainCoefficient=1,this.characterLPFCoefficient=0,this.dattorro.decayDiffusion2=.7,this.dattorro.decayDiffusion1=.66;break}case 4:{this.characterGainCoefficient=.75,this.dattorro.damping=.2,this.characterLPFCoefficient=.2;break}case 5:{this.characterGainCoefficient=.55,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,h=this.preLPFz,I=this.preLPFa;for(let c=0;c<n;c++){let l=A[c];h+=I*(l-h),o[c]=h}this.preLPFz=h,a=o}else a=A;this.delayLeft.process(a,this.delayLeftOutput,n);let r=this.delayGain,i=this.delayLeftOutput;for(let o=0,h=s;o<n;o++,h++){let I=i[o]*r;t[h]+=I,e[h]+=I}return}case 7:{let a;if(this._preLowpass>0){let c=this.delayPreLPF,l=this.preLPFz,E=this.preLPFa;for(let d=0;d<n;d++){let p=A[d];l+=E*(p-l),c[d]=l}this.preLPFz=l,a=c}else a=A;let r=this.panDelayFeedback,{delayLeftInput:i,delayLeftOutput:o,delayRightOutput:h}=this;for(let c=0;c<n;c++)i[c]=a[c]+h[c]*r;this.delayLeft.process(i,o,n),this.delayRight.process(o,h,n);let I=this.delayGain;for(let c=0,l=s;c<n;c++,l++)e[l]+=o[c]*I,t[l]+=h[c]*I;return}}}getSnapshot(){return{level:this._level,preLowpass:this._preLowpass,character:this._character,time:this._time,delayFeedback:this._delayFeedback,preDelayTime:this._preDelayTime}}updateFeedback(){let e=1-(1-this._delayFeedback/127)**1.9;this._character===6?this.delayLeft.feedback=e*.73:(this.delayLeft.feedback=this.delayRight.feedback=0,this.panDelayFeedback=e*.73)}updateLowpass(){this.dattorro.preLPF=Math.min(1,.1+(7-this.preLowpass)/14+this.characterLPFCoefficient)}updateGain(){this.dattorro.gain=this._level/348*this.characterGainCoefficient,this.delayGain=this._level/127*Yo}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}},Jo=1.3,Ko=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/128}_rate=0;get rate(){return this._rate}set rate(A){this._rate=A;let e=15.5*(A/127);this.rateInc=e/this.sampleRate}_level=64;get level(){return this._level}set level(A){this.gain=A/127*Jo,this._level=A}process(A,e,t,s,n,a,r){let i=this.leftDelayBuffer,o=this.rightDelayBuffer,h=this.rateInc,I=i.length,c=this.depthSamples,l=this.delaySamples,E=this.gain,d=this.reverbGain,p=this.delayGain,w=this.feedbackGain,L=this._preLowpass>0,F=this.phase,b=this.write,S=this.preLPFz,H=this.preLPFa;for(let B=0;B<r;B++){let x=A[B];L&&(S+=H*(x-S),x=S);let q=2*Math.abs(F-.5),O=Math.max(1,Math.min(l+q*c,I)),M=b-O;M<0&&(M+=I);let P=M|0,J=P+1;J>=I&&(J-=I);let y=M-P,U=i[P]*(1-y)+i[J]*y;i[b]=x+U*w;let _=Math.max(1,Math.min(l+(1-q)*c,I)),G=b-_;G<0&&(G+=I),P=G|0,J=P+1,J>=I&&(J-=I),y=G-P;let k=o[P]*(1-y)+o[J]*y,v=B+a;e[v]+=U*E,t[v]+=k*E;let Y=(U+k)/2;s[B]+=Y*d,n[B]+=Y*p,o[b]=x+k*w,++b>=I&&(b=0),(F+=h)>=1&&(F-=1)}this.write=b,this.phase=F,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}}},Vo=[{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}],Xo=1.66,Zo=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 kt(A),this.delayLeft=new kt(A),this.delayRight=new kt(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*Xo}_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 Vo)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,l=this.preLPFz,E=this.preLPFa;for(let d=0;d<a;d++){let p=A[d];l+=E*(p-l),c[d]=l}this.preLPFz=l,r=c}else r=A;let{gain:i,reverbGain:o}=this;this.delayCenter.process(r,this.delayCenterOutput,a);let h=this.delayCenterOutput;for(let c=0,l=n;c<a;c++,l++){let E=h[c];s[c]+=E*o;let d=E*i;e[l]+=d,t[l]+=d}for(let c=0;c<a;c++)h[c]+=A[c];let I=this.delayPreLPF;this.delayLeft.process(h,I,a);for(let c=0,l=n;c<a;c++,l++){let E=I[c];e[l]+=E*i,s[c]+=E*o}this.delayRight.process(h,I,a);for(let c=0,l=n;c<a;c++,l++){let E=I[c];t[l]+=E*i,s[c]+=E*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}},Wo=.01,zo=.05,_o=class{voices;midiChannels=[];maxBufferSize;voiceBuffer;insertionInputL;insertionInputR;reverbInput;chorusInput;delayInput;delayActive=!1;soundBankManager=new go(this.updatePresetList.bind(this));keyModifierManager=new Dr;sampleRate;tunings=new Float32Array(16384).fill(-1);masterParameters={...Oa};currentTime=0;midiVolume=1;enableEffects;enableEventSystem;panLeft=Math.cos(Math.PI/4);panRight=Math.cos(Math.PI/4);defaultPreset;drumPreset;gainSmoothingFactor;panSmoothingFactor;eventCallbackHandler;missingPresetHandler;cachedVoices=new Map;setMasterParameter=Io.bind(this);getMasterParameter=co.bind(this);getAllMasterParameters=lo.bind(this);systemExclusive=Qo.bind(this);voiceCount=0;customChannelNumbers=!1;reverbProcessor;chorusProcessor;delayProcessor;insertionFallback=new Ai;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.enableEffects=s.enableEffects,this.enableEventSystem=s.enableEventSystem,this.maxBufferSize=s.maxBufferSize,this.gainSmoothingFactor=Wo*(44100/t),this.panSmoothingFactor=zo*(44100/t),Rn.initCache(this.sampleRate);let n=this.maxBufferSize;this.reverbProcessor=s.reverbProcessor??new qo(t,n),this.chorusProcessor=s.chorusProcessor??new Ko(t,n),this.delayProcessor=s.delayProcessor??new Zo(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 Ho)this.registerInsertionProcessor(a);this.resetInsertionParams(),this.voices=[];for(let a=0;a<this.masterParameters.voiceCap;a++)this.voices.push(new hn(this.sampleRate))}controllerChange(A,e,t){if(this.customChannelNumbers){for(let s of this.midiChannels)s.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.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.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.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.rxChannel===A&&t.channelPressure(e);return}this.midiChannels[A+this.portSelectChannelOffset].channelPressure(e)}pitchWheel(A,e,t=-1){if(this.customChannelNumbers){for(let s of this.midiChannels)s.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.rxChannel===A&&t.programChange(e);return}this.midiChannels[A+this.portSelectChannelOffset].programChange(e)}assignVoice(){for(let e=0;e<this.masterParameters.voiceCap;e++){let t=this.voices[e];if(!t.isActive)return t.priority=1/0,t}if(this.masterParameters.autoAllocateVoices){let e=new hn(this.sampleRate);return this.voices.push(e),this.masterParameters.voiceCap++,this.callEvent("masterParameterChange",{parameter:"voiceCap",value:this.masterParameters.voiceCap}),e}this.assignVoicePriorities();let A=this.voices[0];for(let e=0;e<this.masterParameters.voiceCap;e++){let t=this.voices[e];t.priority<A.priority&&(A=t)}return A.priority=1/0,A}stopAllChannels(A){D("%cStop all received!",C.info);for(let e of this.midiChannels)e.stopAllNotes(A)}processMessage(A,e=0,t=Gi){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.lockedControllers=[],A.preset=void 0;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.masterParameters.midiSystem)}return a?this.getVoicesForPreset(a,e,t):[]}createMIDIChannel(A){let e=new no(this,this.defaultPreset,this.midiChannels.length);this.midiChannels.push(e),A&&(this.callEvent("newChannel",void 0),e.sendChannelProperty(),e.setDrums(!0))}resetAllControllers(A=fn){if(this.callEvent("allControllerReset",void 0),this.setMasterParameter("midiSystem",A),this.tunings.fill(-1),this.portSelectChannelOffset=0,this.customChannelNumbers=!1,this.setMIDIVolume(1),this.setReverbMacro(4),this.setChorusMacro(2),this.setDelayMacro(0),this.masterParameters.delayLock||(this.delayActive=!1),this.resetInsertion(),!(!this.drumPreset||!this.defaultPreset))for(let e=0;e<this.midiChannels.length;e++){let t=this.midiChannels[e];t.resetControllers(!1),t.resetPreset();for(let s=0;s<128;s++)this.midiChannels[e].lockedControllers[s]&&this.callEvent("controllerChange",{channel:e,controllerNumber:s,controllerValue:this.midiChannels[e].midiControllers[s]>>7});if(!this.midiChannels[e].lockedControllers[ve+Ae.pitchWheel]){let s=this.midiChannels[e].midiControllers[ve+Ae.pitchWheel];this.callEvent("pitchWheel",{channel:e,pitch:s,midiNote:-1})}if(!this.midiChannels[e].lockedControllers[ve+Ae.channelPressure]){let s=this.midiChannels[e].midiControllers[ve+Ae.channelPressure]>>7;this.callEvent("channelPressure",{channel:e,pressure:s})}}}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 h=this.eventQueue.shift();h&&this.processMessageInternal(h.message,h.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.masterParameters.voiceCap,i=A.length;for(let o=0;o<r;o++){let h=this.voices[o],I=this.midiChannels[h.channel];if(!h.isActive||I.isMuted)continue;let c=h.channel%i;I.renderVoice(h,this.currentTime,A[c][0],A[c][1],s,a),I.voiceCount++,this.voiceCount++}if(this.enableEffects){let{chorusInput:o,delayInput:h,reverbInput:I,insertionInputR:c,insertionInputL:l}=this;this.insertionActive&&this.insertionProcessor.process(l,c,e,t,I,o,h,s,a),this.chorusProcessor.process(o,e,t,I,h,s,a),this.delayActive&&this.masterParameters.midiSystem!=="xg"&&this.delayProcessor.process(h,e,t,I,s,a),this.reverbProcessor.process(I,e,t,s,a)}for(let o of this.midiChannels)o.updateVoiceCount();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){ne(`Discarding invalid sample: ${r.name}`);continue}n.push(new Hr(a,e,t,this.sampleRate))}return this.setCachedVoice(A,e,t,n),n}clearCache(){this.cachedVoices.clear()}getInsertionSnapshot(){return{type:this.insertionProcessor.type,params:this.insertionParams.slice(),channels:this.midiChannels.map(A=>A.insertionEnabled)}}callEvent(A,e){this.eventCallbackHandler(A,e)}resetInsertionParams(){this.insertionParams.fill(255),this.insertionParams[20]=40,this.insertionParams[21]=0,this.insertionParams[22]=0}resetInsertion(){this.masterParameters.insertionEffectLock||(this.insertionActive=!1,this.insertionProcessor=this.insertionFallback,this.insertionProcessor.reset(),this.insertionProcessor.sendLevelToReverb=40/127*Wt,this.insertionProcessor.sendLevelToChorus=0,this.insertionProcessor.sendLevelToDelay=0,this.resetInsertionParams(),this.callEvent("effectChange",{effect:"insertion",parameter:0,value:this.insertionProcessor.type}))}setMIDIVolume(A){this.midiVolume=Math.pow(A,Math.E)}setMasterTuning(A){A=Math.round(A);for(let e of this.midiChannels)e.setCustomController(Ce.masterTuning,A)}setReverbMacro(A){if(this.masterParameters.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:{ne(`Invalid reverb macro: ${A}`);return}}this.callEvent("effectChange",{effect:"reverb",parameter:"macro",value:A})}setChorusMacro(A){if(this.masterParameters.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:{ne(`Invalid chorus macro: ${A}`);return}}this.callEvent("effectChange",{effect:"chorus",parameter:"macro",value:A})}setDelayMacro(A){if(this.masterParameters.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:{ne(`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)}registerInsertionProcessor(A){let e=new A(this.sampleRate,this.maxBufferSize);this.insertionEffects.set(e.type,e)}processMessageInternal(A,e){let t=Qn(A[0]),s=t.channel+e;switch(t.status){case T.noteOn:{let n=A[2];n>0?this.noteOn(s,A[1],n):this.noteOff(s,A[1]);break}case T.noteOff:{this.noteOff(s,A[1]);break}case T.pitchWheel:{this.pitchWheel(s,A[2]<<7|A[1]);break}case T.controllerChange:{this.controllerChange(s,A[1],A[2]);break}case T.programChange:{this.programChange(s,A[1]);break}case T.polyPressure:{this.polyPressure(s,A[1],A[2]);break}case T.channelPressure:{this.channelPressure(s,A[1]);break}case T.systemExclusive:{this.systemExclusive(new $(A.slice(1)),e);break}case T.reset:{this.stopAllChannels(!1),this.resetAllControllers();break}default:break}}assignVoicePriorities(){if(this.lastPriorityAssignmentTime===this.currentTime)return;D("%cPolyphony exceeded, stealing voices",C.warn),this.lastPriorityAssignmentTime=this.currentTime;let A=this.masterParameters.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)e.setPresetLock(!1);this.resetAllControllers()}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}},Js=20;async function $o(A,e,t,s,n,a,r){let i=0,o=0,h=[];for(let l of A.samples){s&&a&&await l.compressSample(a),n&&l.setAudioData(l.getAudioData(),l.sampleRate);let E=l.getRawData(!0);i++,await r?.(l.name,i,A.samples.length),D(`%cEncoded sample %c${i}. ${l.name}%c of %c${A.samples.length}%c. Compressed: %c${l.isCompressed}%c.`,C.info,C.recognized,C.info,C.recognized,C.info,l.isCompressed?C.recognized:C.unrecognized,C.info),o+=E.length+(l.isCompressed?0:92),h.push(E)}o%2!==0&&o++;let I=new $(o+Js);Te(I,"LIST"),Dt(I,o+Js-8,4),Te(I,"sdta"),Te(I,"smpl"),Dt(I,o,4);let c=0;for(let[l,E]of A.samples.entries()){let d=h[l];I.set(d,c+Js);let p,w;E.isCompressed?(p=c,w=p+d.length):(p=c/2,w=p+d.length/2,c+=92),c+=d.length,e.push(p),t.push(w)}return I}var jo=48e3,Cs=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===xe.rightSample||this.sampleType===xe.leftSample||this.sampleType===xe.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(jo),e=this.getAudioData());let t=await A(e,this.sampleRate);this.setCompressedData(t)}catch(e){ne(`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(xe.monoSample)}setLinkedSample(A,e){if(A.linkedSample)throw new Error(`${A.name} is linked tp ${A.linkedSample.name}. Unlink it first.`);switch(this.linkedSample=A,A.linkedSample=this,e){case xe.leftSample:{this.setSampleType(xe.leftSample),A.setSampleType(xe.rightSample);break}case xe.rightSample:{this.setSampleType(xe.rightSample),A.setSampleType(xe.leftSample);break}case xe.linkedSample:{this.setSampleType(xe.linkedSample),A.setSampleType(xe.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){ne(`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 $(e.buffer)}decodeVorbis(){if(this.audioData)return this.audioData;if(!this.compressedData)throw new Error("Compressed data is missing.");try{let e=cs.decode(this.compressedData).data[0];if(e===void 0)return ne(`Error decoding sample ${this.name}: Vorbis decode returned undefined.`),new Float32Array(0);for(let t=0;t<e.length;t++)e[t]=Math.max(-1,Math.min(e[t],.999969482421875));return e}catch(A){return ne(`Error decoding sample ${this.name}: ${A}`),new Float32Array(this.loopEnd+1)}}},eh=class extends Cs{constructor(){super("",44100,60,0,xe.monoSample,0,0)}},gn=16,Ah=class extends Cs{linkedSampleIndex;s16leData;startByteOffset;endByteOffset;sampleID;constructor(A,e,t,s,n,a,r,i,o,h,I,c){let l=(h&gn)>0;h&=~gn,super(A,a,r,i,h,s-e/2,n-e/2),this.dataOverridden=!1,this.name=A,this.startByteOffset=e,this.endByteOffset=t,this.sampleID=c;let E=I instanceof $?I.currentIndex:0;I instanceof $?l?(this.loopStart+=this.startByteOffset/2,this.loopEnd+=this.startByteOffset/2,this.setCompressedData(I.slice(this.startByteOffset/2+E,this.endByteOffset/2+E))):this.s16leData=I.slice(E+this.startByteOffset,E+this.endByteOffset):this.setAudioData(I.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?(D(`%cInvalid linked sample for ${this.name}: ${e.name} is already linked to ${e.linkedSample.name}`,C.warn),this.unlinkSample()):this.setLinkedSample(e,this.sampleType):(D(`%cInvalid linked sample for ${this.name}. Setting to mono.`,C.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 ne(`Invalid sample ${this.name}! Invalid length: ${A}`),new Float32Array(1);let e=new Float32Array(A/2),t=new Int16Array(this.s16leData.buffer);for(let[s,n]of t.entries())e[s]=n/32768;return this.audioData=e,e}getRawData(A){return this.dataOverridden||this.compressedData?super.getRawData(A):this.s16leData??new Uint8Array(0)}};function Ea(A,e,t=!0){let s=[],n=0;for(;A.data.length>A.data.currentIndex;){let a=th(n,A.data,e);s.push(a),n++}if(s.pop(),t)for(let a of s)a.getLinkedSample(s);return s}function th(A,e,t){let s=ye(e,20),n=K(e,4)*2,a=K(e,4)*2,r=K(e,4),i=K(e,4),o=K(e,4),h=e[e.currentIndex++];h>127&&(h=60);let I=wi(e[e.currentIndex++]),c=K(e,2),l=K(e,2);return new Ah(s,n,a,r,i,o,h,I,c,l,t,A)}function sh(A,e,t){let n=46*(A.samples.length+1),a=new $(n),r=new $(n),i=0;for(let[I,c]of A.samples.entries()){Te(a,c.name.slice(0,20),20),Te(r,c.name.slice(20),20);let l=e[I];Be(a,l),r.currentIndex+=4;let E=t[I];Be(a,E),r.currentIndex+=4;let d=c.loopStart+l,p=c.loopEnd+l;c.isCompressed&&(d-=l,p-=l),Be(a,d),Be(a,p),Be(a,c.sampleRate),a[a.currentIndex++]=c.originalKey,a[a.currentIndex++]=c.pitchCorrection,r.currentIndex+=14;let w=c.linkedSample?A.samples.indexOf(c.linkedSample):0;te(a,Math.max(0,w)&65535),te(r,Math.max(0,w)>>16),i=Math.max(i,w);let L=c.sampleType;c.isCompressed&&(L|=gn),te(a,L),r.currentIndex+=2}Te(a,"EOS",46),Te(r,"EOS",46);let o=de("shdr",a),h=de("shdr",r);return{pdta:o,xdta:h}}function da(A,e=!1){let t=e?A.presets:A.instruments,s=e?"pgen":"igen",n=e?"pmod":"imod",a=e?"pbag":"ibag",r=e?"phdr":"inst",i=e?oo:io,o=0,h=new Array,I=0,c=new Array,l=new Array,E=new Array,d=0,p=new Array,w=O=>{h.push(o);let M=O.getWriteGenerators(A);o+=M.length,l.push(...M),c.push(I);let P=O.modulators;I+=P.length,E.push(...P)};for(let O of t){p.push(d),w(O.globalZone);for(let M of O.zones)w(M);d+=O.zones.length+1}l.push(new He(0,0,!1)),E.push(new be(0,0,0,0,0)),h.push(o),c.push(I),p.push(d);let L=l.length*ta,F=new $(L);for(let O of l)O.write(F);let b=E.length*St,S=new $(b);for(let O of E)O.write(S);let H=c.length*ao,B={pdta:new $(H),xdta:new $(H)};for(let[O,M]of c.entries()){let P=h[O];te(B.pdta,P&65535),te(B.pdta,M&65535),te(B.xdta,P>>16),te(B.xdta,M>>16)}let x=(t.length+1)*i,q={pdta:new $(x),xdta:new $(x)};for(let[O,M]of t.entries())M.write(q,p[O]);return e?(Te(q.pdta,"EOP",20),q.pdta.currentIndex+=4,te(q.pdta,d&65535),q.pdta.currentIndex+=12,Te(q.xdta,"",20),q.xdta.currentIndex+=4,te(q.xdta,d>>16),q.xdta.currentIndex+=12):(Te(q.pdta,"EOI",20),te(q.pdta,d&65535),Te(q.xdta,"",20),te(q.xdta,d>>16)),{writeXdta:Math.max(o,I,d)>65535,gen:{pdta:de(s,F),xdta:de(n,new $(ta))},mod:{pdta:de(n,S),xdta:de(n,new $(St))},bag:{pdta:de(a,B.pdta),xdta:de(a,B.xdta)},hdr:{pdta:de(r,q.pdta),xdta:de(r,q.xdta)}}}var In={compress:!1,compressionFunction:void 0,progressFunction:void 0,writeDefaultModulators:!0,writeExtendedLimits:!0,decompress:!1};async function nh(A,e=In){let t=dn(e,In);if(t?.compress){if(typeof t?.compressionFunction!="function")throw new TypeError("No compression function supplied but compression enabled.");if(t?.decompress)throw new Error("Decompressed and compressed at the same time.")}Xe("%cSaving soundbank...",C.info),D(`%cCompression: %c${t?.compress||"false"}%c`,C.info,C.recognized,C.info,C.recognized),AA("%cWriting INFO...",C.info);let s=[];A.soundBankInfo.software="SpessaSynth",(t?.compress||A.samples.some(b=>b.isCompressed))&&(A.soundBankInfo.version.major=3,A.soundBankInfo.version.minor=0),t?.decompress&&(A.soundBankInfo.version.major=2,A.soundBankInfo.version.minor=4);let n=(b,S)=>{s.push(de(b,QA(S,!0,!0)))},a=new $(4);if(te(a,A.soundBankInfo.version.major),te(a,A.soundBankInfo.version.minor),s.push(de("ifil",a)),A.soundBankInfo.romVersion){let b=new $(4);te(b,A.soundBankInfo.romVersion.major),te(b,A.soundBankInfo.romVersion.minor),s.push(de("iver",b))}let r=(A.soundBankInfo?.comment??"")+(A.soundBankInfo.subject?`
|
|
6
|
-
${A.soundBankInfo.subject}`:"");for(let[b,S]of Object.entries(A.soundBankInfo)){let H=b,B=S;if(B)switch(H){case"name":{n("INAM",B);break}case"comment":{n("ICMT",r);break}case"copyright":{n("ICOP",B);break}case"creationDate":{n("ICRD",B.toISOString());break}case"engineer":{n("IENG",B);break}case"product":{n("IPRD",B);break}case"romInfo":{n("irom",B);break}case"software":{n("ISFT",B);break}case"soundEngine":{n("isng",B);break}case"subject":break}}if(A.defaultModulators.some(b=>!Xa.some(S=>Fe.isIdentical(S,b,!0)))&&t?.writeDefaultModulators){let b=A.defaultModulators;D(`%cWriting %c${b.length}%c default modulators...`,C.info,C.recognized,C.info);let S=St+b.length*St,H=new $(S);for(let B of b)B.write(H);Dt(H,0,St),s.push(de("DMOD",H))}j(),D("%cWriting SDTA...",C.info);let o=[],h=[],I=await $o(A,o,h,t.compress,t.decompress,t?.compressionFunction,t?.progressFunction);D("%cWriting PDTA...",C.info),D("%cWriting SHDR...",C.info);let c=sh(A,o,h);AA("%cWriting instruments...",C.info);let l=da(A,!1);j(),AA("%cWriting presets...",C.info);let E=da(A,!0);j();let d=[E.hdr,E.bag,E.mod,E.gen,l.hdr,l.bag,l.mod,l.gen,c],p=Ze("pdta",d.map(b=>b.pdta),!0);if(t.writeExtendedLimits&&(l.writeXdta||E.writeXdta||A.presets.some(b=>b.name.length>20)||A.instruments.some(b=>b.name.length>20)||A.samples.some(b=>b.name.length>20))){D("%cWriting the xdta chunk as writeExendedLimits is enabled and at least one condition was met.",C.info,C.value);let b=Ze("xdta",d.map(S=>S.xdta),!0);s.push(b)}let L=Ze("INFO",s,!0);D("%cWriting the output file...",C.info);let F=Ze("RIFF",[QA("sfbk"),L,I,p]);return D(`%cSaved succesfully! Final file size: %c${F.length}`,C.info,C.recognized),j(),F.buffer}var gt=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 j(),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(ye(A.data,4),...e);let t=[];for(;A.data.length>A.data.currentIndex;)t.push(ge(A.data));return t}},Vt=20,Xt=16,it=class yt extends gt{gain=0;unityNote=60;fineTune=0;loops=new Array;fulOptions=2;static copyFrom(e){let t=new yt;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 yt,s=K(e.data,4);if(s!==Vt&&ne(`Wsmp cbSize mismatch: got ${s}, expected ${Vt}.`),t.unityNote=K(e.data,2),t.fineTune=En(e.data[e.data.currentIndex++],e.data[e.data.currentIndex++]),t.gain=K(e.data,4)|0,t.fulOptions=K(e.data,4),K(e.data,4)!==0){let a=K(e.data,4);a!==Xt&&ne(`CbSize for loop in wsmp mismatch. Expected ${Xt}, got ${a}.`);let r=K(e.data,4),i=K(e.data,4),o=K(e.data,4);t.loops.push({loopStart:i,loopLength:o,loopType:r})}return t}static fromSFSample(e){let t=new yt;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:zn.forward}),t}static fromSFZone(e){let t=new yt;t.unityNote=e.getGenerator(g.overridingRootKey,e.sample.originalKey),e.getGenerator(g.scaleTuning,100)===0&&e.keyRange.max-e.keyRange.min===0&&(t.unityNote=e.keyRange.min),t.fineTune=e.fineTuning+e.sample.pitchCorrection;let s=e.getGenerator(g.initialAttenuation,0)*.4;t.gain=-s<<16;let n=e.getGenerator(g.sampleModes,0);if(n!==0){let a=e.sample.loopStart+e.getGenerator(g.startloopAddrsOffset,0)+e.getGenerator(g.startloopAddrsCoarseOffset,0)*32768,r=e.sample.loopEnd+e.getGenerator(g.endloopAddrsOffset,0)+e.getGenerator(g.endloopAddrsCoarseOffset,0)*32768,i;switch(n){case 1:default:{i=0;break}case 3:i=1}t.loops.push({loopType:i,loopStart:a,loopLength:r-a})}return t}toSFZone(e,t){let s=0,n=this.loops[0];n&&(s=n.loopType===zn.loopAndRelease?3:1),s!==0&&e.setGenerator(g.sampleModes,s);let i=-(this.gain>>16)/.4;if(i!==0&&e.setGenerator(g.initialAttenuation,i),e.fineTuning=this.fineTune-t.pitchCorrection,this.unityNote!==t.originalKey&&e.setGenerator(g.overridingRootKey,this.unityNote),n){let o=n.loopStart-t.loopStart,I=n.loopStart+n.loopLength-t.loopEnd;if(o!==0){let c=o%32768;e.setGenerator(g.startloopAddrsOffset,c);let l=Math.trunc(o/32768);l!==0&&e.setGenerator(g.startloopAddrsCoarseOffset,l)}if(I!==0){let c=I%32768;e.setGenerator(g.endloopAddrsOffset,c);let l=Math.trunc(I/32768);l!==0&&e.setGenerator(g.endloopAddrsCoarseOffset,l)}}}write(){let e=new $(Vt+this.loops.length*Xt);Be(e,Vt),te(e,this.unityNote),te(e,this.fineTune),Be(e,this.gain),Be(e,this.fulOptions),Be(e,this.loops.length);for(let t of this.loops)Be(e,Xt),Be(e,t.loopType),Be(e,t.loopStart),Be(e,t.loopLength);return de("wsmp",e)}},Ks={PCM:1,ALAW:6};function ah(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);for(let[h,I]of o.entries())i[h]=I/32768}else for(let o=0;o<i.length;o++){let h=K(A,e);a?i[o]=h/n-.5:(h>=t&&(h-=s),i[o]=h/n)}return i}function ih(A,e){let t=A.length/e,s=new Float32Array(t);for(let n=0;n<s.length;n++){let a=K(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);let h=a>127?o:-o;s[n]=h/32768}return s}var rh=class extends Cs{wFormatTag;bytesPerSample;rawData;constructor(A,e,t,s,n,a,r,i,o){super(A,e,t,s,xe.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:{ne(`Failed to decode sample. Unknown wFormatTag: ${this.wFormatTag}`),A=new Float32Array(this.rawData.length/this.bytesPerSample);break}case Ks.PCM:{A=ah(this.rawData,this.bytesPerSample);break}case Ks.ALAW:{A=ih(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===Ks.PCM&&this.bytesPerSample===2?this.rawData:this.encodeS16LE()}},Qa=class cn extends gt{waveSample=new it;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(E=>E.header==="fmt ");if(!s)throw new Error("No fmt chunk in the wave file!");let n=K(s.data,2),a=K(s.data,2);if(a!==1)throw new Error(`Only mono samples are supported. Fmt reports ${a} channels.`);let r=K(s.data,4);K(s.data,4),K(s.data,2);let o=K(s.data,2)/8,h=t.find(E=>E.header==="data");if(!h)throw new Error("No data chunk in the WAVE chunk!");let I=new cn(n,o,r,h),c=NA(t,"INFO");if(c){let E=ge(c.data);for(;E.header!=="INAM"&&c.data.currentIndex<c.data.length;)E=ge(c.data);E.header==="INAM"&&(I.name=ye(E.data,E.size).trim())}let l=t.find(E=>E.header==="wsmp");return l&&(I.waveSample=it.read(l)),I}static fromSFSample(e){let t=e.getRawData(!1),s=new cn(1,2,e.sampleRate,new ba("data",t.length,new $(t.buffer)));return s.name=e.name,s.waveSample=it.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 rh(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=de("data",this.dataChunk.data),n=de("INAM",QA(this.name,!0)),a=de("INFO",n,!1,!0);return D(`%cSaved %c${this.name}%c successfully!`,C.recognized,C.value,C.recognized),Ze("wave",[e,t,s,a],!0)}writeFmt(){let e=new $(18);return te(e,this.wFormatTag),te(e,1),Be(e,this.sampleRate),Be(e,this.sampleRate*2),te(e,2),te(e,this.bytesPerSample*8),de("fmt ",e)}},ri=new be(219,0,g.reverbEffectsSend,1e3,0),oi=new be(221,0,g.chorusEffectsSend,1e3,0),oh=new be(129,0,g.vibLfoToPitch,0,0),hh=new be(13,0,g.vibLfoToPitch,0,0),oA=class ln{source;transform;bipolar;invert;constructor(e=X.none,t=me.linear,s=!1,n=!1){this.source=e,this.transform=t,this.bipolar=s,this.invert=n}get sourceName(){return Object.keys(X).find(e=>X[e]===this.source)??this.source.toString()}get transformName(){return Object.keys(me).find(e=>me[e]===this.transform)??this.transform.toString()}static copyFrom(e){return new ln(e.source,e.transform,e.bipolar,e.invert)}static fromSFSource(e){let t;if(e.isCC)switch(e.index){case u.modulationWheel:{t=X.modulationWheel;break}case u.mainVolume:{t=X.volume;break}case u.pan:{t=X.pan;break}case u.expressionController:{t=X.expression;break}case u.chorusDepth:{t=X.chorus;break}case u.reverbDepth:{t=X.reverb;break}}else switch(e.index){case Ae.noController:{t=X.none;break}case Ae.noteOnKeyNum:{t=X.keyNum;break}case Ae.noteOnVelocity:{t=X.velocity;break}case Ae.pitchWheel:{t=X.pitchWheel;break}case Ae.pitchWheelRange:{t=X.pitchWheelRange;break}case Ae.polyPressure:{t=X.polyPressure;break}case Ae.channelPressure:t=X.channelPressure}if(t!==void 0)return new ln(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 X.modLfo:case X.vibratoLfo:case X.coarseTune:case X.fineTune:case X.modEnv:return;case X.keyNum:{e=Ae.noteOnKeyNum;break}case X.none:{e=Ae.noController;break}case X.modulationWheel:{e=u.modulationWheel,t=!0;break}case X.pan:{e=u.pan,t=!0;break}case X.reverb:{e=u.reverbDepth,t=!0;break}case X.chorus:{e=u.chorusDepth,t=!0;break}case X.expression:{e=u.expressionController,t=!0;break}case X.volume:{e=u.mainVolume,t=!0;break}case X.velocity:{e=Ae.noteOnVelocity;break}case X.polyPressure:{e=Ae.polyPressure;break}case X.channelPressure:{e=Ae.channelPressure;break}case X.pitchWheel:{e=Ae.pitchWheel;break}case X.pitchWheelRange:{e=Ae.pitchWheelRange;break}}if(e!==void 0)return new IA(e,this.transform,t,this.bipolar,this.invert)}},gh=new Set([g.sampleModes,g.initialAttenuation,g.keyRange,g.velRange,g.sampleID,g.fineTune,g.coarseTune,g.startAddrsOffset,g.startAddrsCoarseOffset,g.endAddrOffset,g.endAddrsCoarseOffset,g.startloopAddrsOffset,g.startloopAddrsCoarseOffset,g.endloopAddrsOffset,g.endloopAddrsCoarseOffset,g.overridingRootKey,g.exclusiveClass]),mt=class qA{source;control;destination;scale;transform;constructor(e=new oA,t=new oA,s,n,a){this.source=e,this.control=t,this.destination=s,this.transform=n,this.scale=a}get isStaticParameter(){return this.source.source===X.none&&this.control.source===X.none}get shortScale(){return this.scale>>16}get transformName(){return Object.keys(me).find(e=>me[e]===this.transform)??this.transform.toString()}get destinationName(){return Object.keys(N).find(e=>N[e]===this.destination)??this.destination.toString()}static read(e){let t=K(e,2),s=K(e,2),n=K(e,2),a=K(e,2),r=K(e,4)|0,i=a&15,o=a>>4&15,h=JA(a,8),I=JA(a,9),c=new oA(s,o,h,I),l=a>>10&15,E=JA(a,14),d=JA(a,15),p=new oA(t,l,E,d);return new qA(p,c,n,i,r)}static fromSFModulator(e,t){let s=I=>{ne(`Failed converting SF modulator into DLS:
|
|
5
|
+
amount: ${this.transformAmount}`+(this.transformType===2?"absolute value":"")}write(e,t){te(e,this.primarySource.toSourceEnum()),te(e,this.destination),te(e,this.transformAmount),te(e,this.secondarySource.toSourceEnum()),te(e,this.transformType),t&&t.mod++}sumTransform(e){let t=hn.copyFrom(this);return t.transformAmount+=e.transformAmount,t}},we=class extends Fe{constructor(A,e,t,s,n){let a=(A===219||A===221)&&e===0&&(t===g.reverbEffectsSend||t===g.chorusEffectsSend),o=A===Va&&e===0&&t===g.initialFilterQ;super(IA.fromSourceEnum(A),IA.fromSourceEnum(e),t,s,n,a,o),this.destination>Br&&(this.destination=g.INVALID)}},Os=960,Ys=me.concave,Mr=[new we(oA(Ys,!1,!0,!1,Ae.noteOnVelocity),0,g.initialAttenuation,Os,0),new we(129,0,g.vibLfoToPitch,50,0),new we(oA(Ys,!1,!0,!0,u.mainVolume),0,g.initialAttenuation,Os,0),new we(13,0,g.vibLfoToPitch,50,0),new we(526,16,g.fineTune,12700,0),new we(650,0,g.pan,500,0),new we(oA(Ys,!1,!0,!0,u.expressionController),0,g.initialAttenuation,Os,0),new we(219,0,g.reverbEffectsSend,200,0),new we(221,0,g.chorusEffectsSend,200,0)],Lr=[new we(oA(me.convex,!0,!1,!0,u.attackTime),0,g.attackVolEnv,6e3,0),new we(oA(me.linear,!0,!1,!0,u.releaseTime),0,g.releaseVolEnv,3600,0),new we(oA(me.linear,!0,!1,!0,u.decayTime),0,g.decayVolEnv,3600,0),new we(oA(me.linear,!0,!1,!0,u.brightness),0,g.initialFilterFc,9600,0),new we(Va,0,g.initialFilterQ,200,0),new we(oA(me.switch,!1,!1,!0,u.softPedal),0,g.initialAttenuation,50,0),new we(oA(me.switch,!1,!1,!0,u.softPedal),0,g.initialFilterFc,-2400,0),new we(oA(me.linear,!0,!1,!0,u.balance),0,g.pan,500,0)],Xa=[...Mr,...Lr],Gn=class{isLooping=!1;sampleData;playbackStep=0;loopStart=0;loopEnd=0;loopLength=0;end=0;cursor=0},Nr=class extends Gn{process(A,e,t){let s=e*this.playbackStep,n=this.sampleData,{loopEnd:a,loopLength:o,loopStart:i,end:r}=this,h=this.cursor;if(this.isLooping)for(let c=0;c<A;c++){h>i&&(h=i+(h-i)%o);let I=h|0,E=I+1;E>=a&&(E-=o);let B=h-I,d=n[E],y=n[I];t[c]=y+(d-y)*B,h+=s}else for(let c=0;c<A;c++){let I=h|0,E=I+1;if(E>=r)return!1;let B=h-I,d=n[E],y=n[I];t[c]=y+(d-y)*B,h+=s}return this.cursor=h,!0}},Tr=class extends Gn{process(A,e,t){let s=e*this.playbackStep,n=this.sampleData,{loopLength:a,loopStart:o,end:i}=this,r=this.cursor;if(this.isLooping)for(let h=0;h<A;h++)r>o&&(r=o+(r-o)%a),t[h]=n[r|0],r+=s;else for(let h=0;h<A;h++){if(r>=i)return!1;t[h]=n[r|0],r+=s}return this.cursor=r,!0}},Ur=class extends Gn{process(A,e,t){let s=e*this.playbackStep,n=this.sampleData,{loopEnd:a,loopLength:o,loopStart:i,end:r}=this,h=this.cursor;if(this.isLooping)for(let c=0;c<A;c++){h>i&&(h=i+(h-i)%o);let I=h|0,E=I+1,B=I+2,d=I+3,y=h-I;E>=a&&(E-=o),B>=a&&(B-=o),d>=a&&(d-=o);let D=n[I],M=n[E],F=n[B],w=n[d],S=(F-D)*.5,P=M-F,C=S+P,x=C+P+(w-M)*.5,J=C+x;t[c]=((x*y-J)*y+S)*y+M,h+=s}else for(let c=0;c<A;c++){let I=h|0,E=I+1,B=I+2,d=I+3,y=h-I;if(d>=r)return!1;let D=n[I],M=n[E],F=n[B],w=n[d],S=(F-D)*.5,P=M-F,C=S+P,x=C+P+(w-M)*.5,J=C+x;t[c]=((x*y-J)*y+S)*y+M,h+=s}return this.cursor=h,!0}},Pr=-2320,xr=1e3/200,gn=class{oscillators=[new Nr,new Tr,new Ur];wavetable=this.oscillators[Oa.interpolationType];filter;generators=new Int16Array(ot);modulatedGenerators=new Int16Array(ot);modulators=new Array;modulatorValues=new Int16Array(64);modEnv=new Gr;volEnv;resonanceOffset=0;priority=0;isActive=!1;hasRendered=!1;isInRelease=!1;isHeld=!1;channel=0;velocity=0;midiNote=0;rootKey=0;targetKey=0;pressure=0;gainModifier=1;loopingMode=0;startTime=0;releaseStartTime=1/0;tuningCents=0;tuningRatio=1;currentPan=0;realKey=60;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){this.volEnv=new Fr(A),this.filter=new Fn(A)}computeModulator(A,e,t){let s=this.modulators[t];if(s.transformAmount===0)return this.modulatorValues[t]=0,0;let n=s.primarySource.getValue(A,e,this),a=s.secondarySource.getValue(A,e,this),o=s.transformAmount;s.isEffectModulator&&o<=1e3&&(o*=xr,o=Math.min(o,1e3));let i=n*a*o;return s.transformType===2&&(i=Math.abs(i)),s.isDefaultResonantModulator&&(this.resonanceOffset=Math.max(0,i/2)),this.modulatorValues[t]=i,i}exclusiveRelease(A,e=Li){this.overrideReleaseVolEnv=Pr,this.isInRelease=!1,this.releaseVoice(A,e)}releaseVoice(A,e=Mi){this.releaseStartTime=A,this.releaseStartTime-this.startTime<e&&(this.releaseStartTime=this.startTime+e)}setup(A,e,t,s,n){this.startTime=A,this.isActive=!0,this.isInRelease=!1,this.hasRendered=!1,this.isHeld=!1,this.releaseStartTime=1/0,this.pressure=0,this.channel=e,this.midiNote=t,this.velocity=s,this.realKey=n,this.overrideReleaseVolEnv=0,this.portamentoDuration=0,this.portamentoFromKey=-1,this.vibLfoPhase=.25,this.modLfoPhase=.25}},Hr=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,this.generators=a,this.rootKey=n.originalKey,a[g.overridingRootKey]>-1&&(this.rootKey=a[g.overridingRootKey]),this.targetKey=e,a[g.keyNum]>-1&&(this.targetKey=a[g.keyNum]),this.velocity=t,a[g.velocity]>-1&&(this.velocity=a[g.velocity]),this.exclusiveClass=a[g.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[g.sampleModes]}},Or=Math.PI*2;function Yr(A,e,t){if(t<A)return 0;let s=t-A;return Math.sin(Or*e*s)}var Aa=Math.PI/2,$t=-500,Za=500,Mn=Za-$t,Wa=new Float32Array(Mn+1),za=new Float32Array(Mn+1);for(let A=$t;A<=Za;A++){let e=(A-$t)/Mn,t=A-$t;Wa[t]=Math.cos(Aa*e),za[t]=Math.sin(Aa*e)}function qr(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 o=this.synthCore,i=o.sampleRate,r=A.modulatedGenerators,h=A.targetKey,c=A.pitchOffset+r[g.fineTune]+this.octaveTuning[A.midiNote]+this.channelTuningCents,I=r[g.coarseTune],E=o.tunings[this.preset.program*128+A.realKey];if(E!==-1&&(h=Math.trunc(E),c+=(E-h)*100),A.portamentoFromKey>-1){let m=Math.min((e-A.startTime)/A.portamentoDuration,1),v=h-A.portamentoFromKey;I-=v*(1-m)}c+=(h-A.rootKey)*r[g.scaleTuning];let B=0,d=0,y=A.gainModifier*(1+r[g.amplitude]/1e3);if(e>=A.vibLfoStartTime){let m=r[g.vibLfoToPitch],v=r[g.vibLfoToFilterFc],H=r[g.vibLfoAmplitudeDepth];if(m!==0||v!==0||H){let b=Math.max(0,an(r[g.freqVibLFO])+r[g.vibLfoRate]/100)*a/i,G=1-4*Math.abs(A.vibLfoPhase-.5);(A.vibLfoPhase+=b)>=1&&(A.vibLfoPhase-=1),c+=G*(m*this.customControllers[Ce.modulationMultiplier]),B+=G*v,y*=1-(G+1)/2*(H/1e3)}}if(e>=A.modLfoStartTime){let m=r[g.modLfoToPitch],v=r[g.modLfoToVolume],H=r[g.modLfoToFilterFc],O=r[g.modLfoAmplitudeDepth];if(m!==0||H!==0||v!==0||O!==0){let G=Math.max(0,an(r[g.freqModLFO])+r[g.modLfoRate]/100)*a/i,K=1-4*Math.abs(A.modLfoPhase-.5);(A.modLfoPhase+=G)>=1&&(A.modLfoPhase-=1),c+=K*(m*this.customControllers[Ce.modulationMultiplier]),d+=-K*v,B+=K*H,y*=1-(K+1)/2*(O/1e3)}}this.midiControllers[u.modulationWheel]==0&&this.channelVibrato.depth>0&&(c+=Yr(A.startTime+this.channelVibrato.delay,this.channelVibrato.rate,e)*this.channelVibrato.depth);let D=r[g.modEnvToPitch],M=r[g.modEnvToFilterFc];if(M!==0||D!==0){let m=A.modEnv.process(A,e);B+=m*M,c+=m*D}d-=A.resonanceOffset;let F=c+I*100|0;F!==A.tuningCents&&(A.tuningCents=F,A.tuningRatio=Math.pow(2,F/1200));let w=is(r[g.initialAttenuation])*is(d),S=o.voiceBuffer;if(A.loopingMode===2&&!A.isInRelease){A.isActive=A.volEnv.process(a,S,w);return}A.isActive=A.wavetable.process(a,A.tuningRatio,S);{let m=A.filter,v=r[g.initialFilterFc];m.initialized?m.currentInitialFc+=(v-m.currentInitialFc)*Fn.smoothingConstant:(m.initialized=!0,m.currentInitialFc=v);let H=m.currentInitialFc+B,O=r[g.initialFilterQ];if(m.currentInitialFc>13499&&H>13499&&O===0)m.currentInitialFc=13500;else{(Math.abs(m.lastTargetCutoff-H)>1||m.resonanceCb!==O)&&(m.lastTargetCutoff=H,m.resonanceCb=O,m.calculateCoefficients(H));let{a0:b,a1:G,a2:K,a3:ee,a4:ie}=m,{x1:Ee,x2:oe,y1:le,y2:re}=m;for(let Ie=0;Ie<a;Ie++){let ke=S[Ie],_=b*ke+G*Ee+K*oe-ee*le-re*ie;oe=Ee,Ee=ke,re=le,le=_,S[Ie]=_}m.x1=Ee,m.x2=oe,m.y1=le,m.y2=re}}let P=A.volEnv.process(a,S,w);A.isActive=A.isActive&&P;let C;A.overridePan?C=A.overridePan:(A.currentPan+=(r[g.pan]-A.currentPan)*o.panSmoothingFactor,C=A.currentPan);let x=o.masterParameters.masterGain*o.midiVolume*y,J=C+500|0,Y=Wa[J]*x*o.panLeft,T=za[J]*x*o.panRight;if(this.insertionEnabled){let m=o.insertionInputL,v=o.insertionInputR;for(let H=0;H<a;H++){let O=S[H];m[H]+=Y*O,v[H]+=T*O}return}for(let m=0;m<a;m++){let v=S[m],H=m+n;t[H]+=Y*v,s[H]+=T*v}if(!o.enableEffects)return;let U=r[g.reverbEffectsSend]*A.reverbSend;if(U>0){let m=o.masterParameters.reverbGain*x*(U/1e3),v=o.reverbInput;for(let H=0;H<a;H++)v[H]+=m*S[H]}let q=r[g.chorusEffectsSend]*A.chorusSend;if(q>0){let m=o.masterParameters.chorusGain*(q/1e3)*x,v=o.chorusInput;for(let H=0;H<a;H++)v[H]+=m*S[H]}if(o.delayActive){let m=this.midiControllers[u.variationDepth]*A.delaySend;if(m>0){let v=x*o.masterParameters.delayGain*((m>>7)/127),H=o.delayInput;for(let O=0;O<a;O++)H[O]+=v*S[O]}}}var MA={pitchWheelRange:0,fineTuning:1,coarseTuning:2,modulationDepth:5,resetParameters:16383},Ve={partParameter:1,drumPitch:24,drumPitchFine:25,drumLevel:26,drumPan:28,drumReverb:29,drumChorus:30,drumDelay:31,awe32:127,SF2:120},GA={vibratoRate:8,vibratoDepth:9,vibratoDelay:10,TVFFilterCutoff:32,TVFFilterResonance:33,EGAttackTime:99,EGDecayTime:100,EGReleaseTime:102},He=(A,e,t,s)=>{s.length>0&&(s=" "+s),k(`%c${e} for %c${A}%c is now set to %c${t}%c${s}.`,l.info,l.recognized,l.info,l.value,l.info)},qs=A=>{A.channelVibrato.delay===0&&A.channelVibrato.rate===0&&A.channelVibrato.depth===0&&(A.channelVibrato.depth=50,A.channelVibrato.rate=8,A.channelVibrato.delay=.6)};function Jr(A){switch(this.midiControllers[u.dataEntryMSB]=A<<7,this.dataEntryState){default:case _e.Idle:break;case _e.NRPCoarse:case _e.NRPFine:{let e=this.midiControllers[u.nonRegisteredParameterMSB]>>7,t=this.midiControllers[u.nonRegisteredParameterLSB]>>7,s=this.midiControllers[u.dataEntryLSB]>>7;if(this.synthCore.masterParameters.drumLock&&e>=Ve.drumPitch&&e<=Ve.drumDelay)return;switch(e){default:{if(A===64)return;k(`%cUnrecognized NRPN for %c${this.channel}%c: %c(0x${t.toString(16).toUpperCase()} 0x${t.toString(16).toUpperCase()})%c data value: %c${A}`,l.warn,l.recognized,l.warn,l.unrecognized,l.warn,l.value);break}case Ve.partParameter:{let n=this.synthCore.masterParameters.nprnParamLock,a=this.synthCore.masterParameters.customVibratoLock||n;switch(t){default:{if(A===64)return;k(`%cUnrecognized NRPN for %c${this.channel}%c: %c(0x${e.toString(16)} 0x${t.toString(16)})%c data value: %c${A}`,l.warn,l.recognized,l.warn,l.unrecognized,l.warn,l.value);break}case GA.vibratoRate:{if(this.sysExModulators.active){this.controllerChange(u.vibratoRate,A);return}if(a||A===64)return;qs(this),this.channelVibrato.rate=A/64*8,He(this.channel,"Vibrato rate",`${A} = ${this.channelVibrato.rate}`,"Hz");break}case GA.vibratoDepth:{if(a||A===64)return;qs(this),this.channelVibrato.depth=A/2,He(this.channel,"Vibrato depth",`${A} = ${this.channelVibrato.depth}`,"cents of detune");break}case GA.vibratoDelay:{if(a||A===64)return;qs(this),this.channelVibrato.delay=A/64/3,He(this.channel,"Vibrato delay",`${A} = ${this.channelVibrato.delay}`,"seconds");break}case GA.TVFFilterCutoff:{if(n)return;this.controllerChange(u.brightness,A),He(this.channel,"Filter cutoff",A.toString(),"");break}case GA.TVFFilterResonance:{if(n)return;this.controllerChange(u.filterResonance,A),He(this.channel,"Filter resonance",A.toString(),"");break}case GA.EGAttackTime:{if(n)return;this.controllerChange(u.attackTime,A),He(this.channel,"EG attack time",A.toString(),"");break}case GA.EGDecayTime:{if(n)return;this.controllerChange(u.decayTime,A),He(this.channel,"EG decay time",A.toString(),"");break}case GA.EGReleaseTime:{if(n)return;this.controllerChange(u.releaseTime,A),He(this.channel,"EG release time",A.toString(),"");break}}break}case Ve.drumPitch:{let n=this.channelSystem==="xg"||this.patch.bankLSB===1?(A-64)*100:(A-64)*50;this.drumParams[t].pitch=n,He(this.channel,`Drum ${t} pitch`,n,"cents");break}case Ve.drumPitchFine:{let n=A-64;this.drumParams[t].pitch+=n,He(this.channel,`Drum ${t} pitch fine`,this.drumParams[t].pitch,"cents");break}case Ve.drumLevel:{this.drumParams[t].gain=A/120,He(this.channel,`Drum ${t} level`,A,"");break}case Ve.drumPan:{this.drumParams[t].pan=A,He(this.channel,`Drum ${t} pan`,A,"");break}case Ve.drumReverb:{this.drumParams[t].reverbGain=A/127,He(this.channel,`Drum ${t} reverb level`,A,"");break}case Ve.drumChorus:{this.drumParams[t].chorusGain=A/127,He(this.channel,`Drum ${t} chorus level`,A,"");break}case Ve.drumDelay:{this.drumParams[t].delayGain=A/127,He(this.channel,`Drum ${t} delay level`,A,"");break}case Ve.awe32:break;case Ve.SF2:{if(t>100)break;let n=this.customControllers[Ce.sf2NPRNGeneratorLSB],a=(A<<7|s)-8192;this.setGeneratorOffset(n,a);break}}break}case _e.RPCoarse:case _e.RPFine:{let e=this.midiControllers[u.registeredParameterMSB]|this.midiControllers[u.registeredParameterLSB]>>7;switch(e){default:{k(`%cUnrecognized RPN for %c${this.channel}%c: %c(0x${e.toString(16)})%c data value: %c${A}`,l.warn,l.recognized,l.warn,l.unrecognized,l.warn,l.value);break}case MA.pitchWheelRange:{this.midiControllers[ve+Ae.pitchWheelRange]=A<<7,He(this.channel,"Pitch wheel range",A.toString(),"semitones");break}case MA.coarseTuning:{let t=A-64;this.setCustomController(Ce.channelTuningSemitones,t),He(this.channel,"Coarse tuning",t.toString(),"semitones");break}case MA.fineTuning:{this.setTuning(A-64,!1);break}case MA.modulationDepth:{this.setModulationDepth(A*100);break}case MA.resetParameters:{this.resetParameters();break}}}}}var Kr=[g.delayModLFO,g.freqModLFO,g.delayVibLFO,g.freqVibLFO,g.delayModEnv,g.attackModEnv,g.holdModEnv,g.decayModEnv,g.sustainModEnv,g.releaseModEnv,g.delayVolEnv,g.attackVolEnv,g.holdVolEnv,g.decayVolEnv,g.sustainVolEnv,g.releaseVolEnv,g.fineTune,g.modLfoToPitch,g.vibLfoToPitch,g.modEnvToPitch,g.modLfoToVolume,g.initialFilterFc,g.initialFilterQ,g.modLfoToFilterFc,g.modEnvToFilterFc,g.chorusEffectsSend,g.reverbEffectsSend],kA=(A,e,t)=>Math.max(e,Math.min(t,A)),Kt=A=>Math.max(-32768,1200*Math.log2(A/1e3)),Vr=A=>6900+1200*Math.log2(A/440);function Xr(A,e,t){let s=t<<7|e;s-=8192;let n=Kr[A];n||ne(`Invalid AWE32 LSB: %c${A}`,l.unrecognized);let a,o,i,r;switch(n){default:break;case g.delayModLFO:case g.delayVibLFO:case g.delayVolEnv:case g.delayModEnv:{a=4*kA(s,0,5900),this.setGeneratorOverride(n,Kt(a));break}case g.attackVolEnv:case g.attackModEnv:{a=kA(s,0,5940),this.setGeneratorOverride(n,Kt(a));break}case g.holdVolEnv:case g.holdModEnv:{a=kA(s,0,8191),this.setGeneratorOverride(n,Kt(a));break}case g.decayModEnv:case g.decayVolEnv:case g.releaseVolEnv:case g.releaseModEnv:{a=4*kA(s,0,5940),this.setGeneratorOverride(n,Kt(a));break}case g.freqVibLFO:case g.freqModLFO:{o=.084*e,this.setGeneratorOverride(n,Vr(o),!0);break}case g.sustainVolEnv:case g.sustainModEnv:{i=e*7.5,this.setGeneratorOverride(n,i);break}case g.fineTune:{this.setGeneratorOverride(n,s,!0);break}case g.modLfoToPitch:case g.vibLfoToPitch:{r=kA(s,-127,127)*9.375,this.setGeneratorOverride(n,r,!0);break}case g.modEnvToPitch:{r=kA(s,-127,127)*9.375,this.setGeneratorOverride(n,r);break}case g.modLfoToVolume:{i=1.875*e,this.setGeneratorOverride(n,i,!0);break}case g.initialFilterFc:{let h=4335+59*e;this.setGeneratorOverride(n,h,!0);break}case g.initialFilterQ:{i=215*(e/127),this.setGeneratorOverride(n,i,!0);break}case g.modLfoToFilterFc:{r=kA(s,-64,63)*56.25,this.setGeneratorOverride(n,r,!0);break}case g.modEnvToFilterFc:{r=kA(s,-64,63)*56.25,this.setGeneratorOverride(n,r);break}case g.chorusEffectsSend:case g.reverbEffectsSend:{this.setGeneratorOverride(n,kA(s,0,255)*(1e3/255));break}}}function Zr(A){switch(this.midiControllers[u.dataEntryLSB]=A<<7,this.dataEntryState){default:break;case _e.RPCoarse:case _e.RPFine:{switch(this.midiControllers[u.registeredParameterMSB]|this.midiControllers[u.registeredParameterLSB]>>7){default:break;case MA.pitchWheelRange:{if(A===0)break;this.midiControllers[ve+Ae.pitchWheelRange]|=A;let t=(this.midiControllers[ve+Ae.pitchWheelRange]>>7)+A/128;k(`%cChannel ${this.channel} pitch wheel range. Semitones: %c${t}`,l.info,l.value);break}case MA.fineTuning:{let s=this.customControllers[Ce.channelTuning]<<7|A;this.setTuning(s*.01220703125);break}case MA.modulationDepth:{let s=this.customControllers[Ce.modulationMultiplier]*50+A/128*100;this.setModulationDepth(s);break}case 16383:{this.resetParameters();break}}break}case _e.NRPFine:{let e=this.midiControllers[u.nonRegisteredParameterMSB]>>7,t=this.midiControllers[u.nonRegisteredParameterLSB]>>7;if(e===Ve.SF2)return;e===Ve.awe32?Xr.call(this,t,A,this.midiControllers[u.dataEntryMSB]>>7):k(`%cUnrecognized NRPN LSB for %c${this.channel}%c: %c(0x${t.toString(16).toUpperCase()} 0x${t.toString(16).toUpperCase()})%c data value: %c${A}`,l.warn,l.recognized,l.warn,l.unrecognized,l.warn,l.value)}}}function Wr(A,e,t=!0){if(A>127)throw new Error("Invalid MIDI Controller.");if(A>=u.modulationWheelLSB&&A<=u.effectControl2LSB&&A!==u.dataEntryLSB){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,A){case u.omniModeOff:case u.omniModeOn:case u.allNotesOff:{this.stopAllNotes();break}case u.allSoundOff:{this.stopAllNotes(!0);break}case u.polyModeOn:{this.stopAllNotes(!0),this.polyMode=!0;break}case u.monoModeOn:{this.stopAllNotes(!0),this.polyMode=!1;break}case u.bankSelect:{this.setBankMSB(e),this.channel%16===bA&&Re.isSystemXG(this.channelSystem)&&this.setBankMSB(127);break}case u.bankSelectLSB:{this.setBankLSB(e);break}case u.variationDepth:{this.synthCore.delayActive=!0;break}case u.registeredParameterLSB:{this.dataEntryState=_e.RPFine;break}case u.registeredParameterMSB:{this.dataEntryState=_e.RPCoarse;break}case u.nonRegisteredParameterMSB:{this.customControllers[Ce.sf2NPRNGeneratorLSB]=0,this.dataEntryState=_e.NRPCoarse;break}case u.nonRegisteredParameterLSB:{if(this.midiControllers[u.nonRegisteredParameterMSB]>>7===Ve.SF2)switch(this.customControllers[Ce.sf2NPRNGeneratorLSB]%100!==0&&(this.customControllers[Ce.sf2NPRNGeneratorLSB]=0),e){case 100:{this.customControllers[Ce.sf2NPRNGeneratorLSB]+=100;break}case 101:{this.customControllers[Ce.sf2NPRNGeneratorLSB]+=1e3;break}case 102:{this.customControllers[Ce.sf2NPRNGeneratorLSB]+=1e4;break}default:e<100&&(this.customControllers[Ce.sf2NPRNGeneratorLSB]+=e)}this.dataEntryState=_e.NRPFine;break}case u.dataEntryMSB:{this.dataEntryCoarse(e);break}case u.dataEntryLSB:{this.dataEntryFine(e);break}case u.resetAllControllers:{this.resetControllersRP15Compliant();break}case u.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}default:{this.computeModulatorsAll(1,A);break}}t&&this.synthCore.callEvent("controllerChange",{channel:this.channel,controllerNumber:A,controllerValue:e})}}var zr=40;function _r(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],o=[-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],r=-1;for(let c=i.length-1;c>=0;c--)if(i[c]<A){r=c;break}r+=1;let h=(A-e[r])*t[r];return Math.exp(2.302585092994046*(((s[r]*h+n[r])*h+a[r])*h+o[r]))/zr}}function $r(A,e){return _r(A)*e}var Vt=(A,e,t)=>Math.max(e,Math.min(t,A));function jr(A,e){if(e<1){this.noteOff(A);return}if(e=Math.min(127,e),this.synthCore.masterParameters.blackMIDIMode&&this.synthCore.voiceCount>200&&e<40||this.synthCore.masterParameters.blackMIDIMode&&e<10||this._isMuted||!this.preset)return;let t=A+this.keyShift+this.customControllers[Ce.channelKeyShift],s=t;if(t>127||t<0)return;let n=this.preset.program,a=this.synthCore.tunings[n*128+t];a>=0&&(s=Math.trunc(a)),this.synthCore.masterParameters.monophonicRetriggerMode&&this.killNote(A);let o=this.synthCore.keyModifierManager.getVelocity(this.channel,t);o>-1&&(e=o);let i=this.synthCore.keyModifierManager.getGain(this.channel,t),r=-1,h=0,c=this.midiControllers[u.portamentoTime]>>7,I=this.midiControllers[u.portamentoControl]>>7;if(!this.drumChannel&&I!==s&&this.midiControllers[u.portamentoOnOff]>=8192&&c>0){if(I>0){let w=Math.abs(s-I);h=$r(c,w),r=I}this.controllerChange(u.portamentoControl,s)}if(!this.polyMode){let w=0;if(this.voiceCount>0){for(let S of this.synthCore.voices)if(S.isActive&&S.channel===this.channel&&(S.exclusiveRelease(this.synthCore.currentTime,0),++w>=this.voiceCount))break}}let E=this.synthCore.getVoices(this.channel,s,e),B=0,d=0,y=0,D=1,M=1,F=1;if(this.randomPan&&(B=Math.round(Math.random()*1e3-500)),this.drumChannel){let w=this.drumParams[s];if(!w.rxNoteOn)return;let S=w.pan;if(S!==64){let P=Math.max(-63,Math.min(S-64+((this.midiControllers[u.pan]>>7)-64),63))||1;B=S===0?Math.round(Math.random()*1e3-500):P/63*500}y=w.pitch,d=w.exclusiveClass,D=w.reverbGain,M=w.chorusGain,F=w.delayGain,i===1&&(i=w.gain)}for(let w of E){let S=this.synthCore.assignVoice(),P=this.synthCore.currentTime;if(S.setup(P,this.channel,s,e,t),S.wavetable=S.oscillators[this.synthCore.masterParameters.interpolationType],S.generators.set(w.generators),S.exclusiveClass=d||w.exclusiveClass,S.rootKey=w.rootKey,S.loopingMode=w.loopingMode,S.wavetable.sampleData=w.sampleData,S.wavetable.playbackStep=w.playbackStep,S.targetKey=w.targetKey,this.sysExModulators.active){S.modulators=[...w.modulators];for(let U of this.sysExModulators.modulatorList){let q=S.modulators.findIndex(m=>Fe.isIdentical(m,U.mod));q===-1?S.modulators.push(U.mod):S.modulators[q]=U.mod}}else S.modulators=w.modulators;if(S.modulators.length>S.modulatorValues.length&&(ne(`${S.modulators.length} modulators! Increasing modulatorValues table.`),S.modulatorValues=new Int16Array(S.modulators.length)),this.generatorOverridesEnabled)for(let[U,q]of this.generatorOverrides.entries())q!==Ra&&(S.generators[U]=q);if(S.exclusiveClass!==0&&this.polyMode){let U=0;if(this.voiceCount>0){for(let q of this.synthCore.voices)if(q.isActive&&q.channel===this.channel&&q.exclusiveClass===S.exclusiveClass&&q.hasRendered&&(q.exclusiveRelease(this.synthCore.currentTime),++U>=this.voiceCount))break}}this.computeModulators(S),S.volEnv.init(S),S.modEnv.init(S),S.filter.init(),S.vibLfoStartTime=P+ns(S.modulatedGenerators[g.delayVibLFO]),S.modLfoStartTime=P+ns(S.modulatedGenerators[g.delayModLFO]);let C=S.modulatedGenerators[g.startAddrsOffset]+S.modulatedGenerators[g.startAddrsCoarseOffset]*32768,x=S.modulatedGenerators[g.endAddrOffset]+S.modulatedGenerators[g.endAddrsCoarseOffset]*32768,J=S.modulatedGenerators[g.startloopAddrsOffset]+S.modulatedGenerators[g.startloopAddrsCoarseOffset]*32768,Y=S.modulatedGenerators[g.endloopAddrsOffset]+S.modulatedGenerators[g.endloopAddrsCoarseOffset]*32768,T=w.sampleData.length-1;if(S.wavetable.cursor=Vt(C,0,T),S.wavetable.end=Vt(T+x,0,T),S.wavetable.loopStart=Vt(w.loopStart+J,0,T),S.wavetable.loopEnd=Vt(w.loopEnd+Y,0,T),S.wavetable.loopEnd<S.wavetable.loopStart){let U=S.wavetable.loopStart;S.wavetable.loopStart=S.wavetable.loopEnd,S.wavetable.loopEnd=U}S.wavetable.loopEnd-S.wavetable.loopStart<1&&(S.loopingMode===1||S.loopingMode===3)&&(S.loopingMode=0),S.wavetable.loopLength=S.wavetable.loopEnd-S.wavetable.loopStart,S.wavetable.isLooping=S.loopingMode===1||S.loopingMode===3,S.portamentoFromKey=r,S.portamentoDuration=h,S.overridePan=B,S.gainModifier=i,S.pitchOffset=y,S.reverbSend=D,S.chorusSend=M,S.delaySend=F,S.currentPan=Math.max(-500,Math.min(500,B||S.modulatedGenerators[g.pan]))}this.voiceCount+=E.length,this.sendChannelProperty(),this.synthCore.callEvent("noteOn",{midiNote:A,channel:this.channel,velocity:e})}function eo(A){if(A>127||A<0){ne("Received a noteOn for note",A,"Ignoring.");return}let e=A+this.keyShift+this.customControllers[Ce.channelKeyShift];if(this.synthCore.masterParameters.blackMIDIMode&&!this.drumChannel||this.drumChannel&&this.drumParams[e].rxNoteOff){this.killNote(e),this.synthCore.callEvent("noteOff",{midiNote:A,channel:this.channel});return}let t=this.midiControllers[u.sustainPedal]>=8192,s=0;if(this.voiceCount>0){for(let n of this.synthCore.voices)if(n.channel===this.channel&&n.isActive&&n.realKey===e&&!n.isInRelease&&(t?n.isHeld=!0:n.releaseVoice(this.synthCore.currentTime),++s>=this.voiceCount))break}this.synthCore.callEvent("noteOff",{midiNote:A,channel:this.channel})}function Ao(A){if(this.lockPreset)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.isAnyDrums!==this.drumChannel&&this.setDrumFlag(e.isAnyDrums),this.resetDrumParams(),this.synthCore.callEvent("programChange",{channel:this.channel,bankLSB:this.preset.bankLSB,bankMSB:this.preset.bankMSB,program:this.preset.program,isGMGSDrum:this.preset.isGMGSDrum}),this.sendChannelProperty())}function AA(A,e,t,s){k(`%cChannel %c${A}%c ${t} is now set to %c${e} ${s}.`,l.info,l.recognized,l.info,l.value)}function qe(A,e){k(`%cUnrecognized %c${e} %cSysEx: %c${gs(A)}`,l.warn,l.recognized,l.warn,l.unrecognized)}var to=[new we(oA(me.linear,!0,!1,!0,u.vibratoRate),0,g.vibLfoRate,1e3,0)],so=class{modulatorList=[];active=!1;channelNumber;constructor(A){this.channelNumber=A}resetModulators(){this.modulatorList=to.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=!1){this.active=!0;let a=e-64,o=a/64,i=e/127;switch(A&15){case 0:{this.setModulator(t,g.fineTune,a*100,n),AA(this.channelNumber,a,`${s} pitch control`,"semitones");break}case 1:{this.setModulator(t,g.initialFilterFc,o*9600,n),AA(this.channelNumber,o*9600,`${s} filter control`,"cents");break}case 2:{this.setModulator(t,g.amplitude,o*1e3,n),AA(this.channelNumber,o*100,`${s} amplitude`,"%");break}case 3:{this.setModulator(t,g.vibLfoRate,o*1e3,n),AA(this.channelNumber,o*10,`${s} LFO1 rate`,"Hz");break}case 4:{this.setModulator(t,g.vibLfoToPitch,i*600,n),AA(this.channelNumber,i*600,`${s} LFO1 pitch depth`,"cents");break}case 5:{this.setModulator(t,g.vibLfoToFilterFc,i*2400,n),AA(this.channelNumber,i*2400,`${s} LFO1 filter depth`,"cents");break}case 6:{this.setModulator(t,g.vibLfoAmplitudeDepth,i*1e3,n),AA(this.channelNumber,i*100,`${s} LFO1 amplitude depth`,"%");break}case 7:{this.setModulator(t,g.modLfoRate,o*1e3,n),AA(this.channelNumber,o*10,`${s} LFO2 rate`,"Hz");break}case 8:{this.setModulator(t,g.modLfoToPitch,i*600,n),AA(this.channelNumber,i*600,`${s} LFO2 pitch depth`,"cents");break}case 9:{this.setModulator(t,g.modLfoToFilterFc,i*2400,n),AA(this.channelNumber,i*2400,`${s} LFO2 filter depth`,"cents");break}case 10:{this.setModulator(t,g.modLfoAmplitudeDepth,i*1e3,n),AA(this.channelNumber,i*100,`${s} LFO2 amplitude depth`,"%");break}}}setModulator(A,e,t,s=!1,n=!1){let a=this.getModulatorID(A,e,s,n);t===0&&this.deleteModulator(a);let o=this.modulatorList.find(i=>i.id===a);if(o)o.mod.transformAmount=t;else{let i,r;A>=ve?(i=A-ve,r=!1):(i=A,r=!0);let h=new Fe(new IA(i,me.linear,r,s),new IA,e,t,0);this.modulatorList.push({mod:h,id:a})}}getModulatorID(A,e,t,s){return`${A}-${e}-${t}-${s}`}deleteModulator(A){this.modulatorList=this.modulatorList.filter(e=>e.id!==A)}};function no(A,e=-1,t=0){let s=A.modulators,n=A.generators;if(this.generatorOffsetsEnabled){n=new Int16Array(n);for(let r=0;r<n.length;r++)n[r]+=this.generatorOffsets[r]}let a=A.modulatedGenerators,o=this.perNotePitch?this.pitchWheels[A.realKey]:this.midiControllers[Ae.pitchWheel+ve];if(e===-1){a.set(n);for(let r=0;r<s.length;r++){let h=s[r];a[h.destination]=Math.min(32767,Math.max(-32768,a[h.destination]+A.computeModulator(this.midiControllers,o,r)))}for(let r=0;r<a.length;r++){let h=hA[r];h&&(a[r]=Math.min(h.max,Math.max(h.min,a[r])))}return}let i=!!e;for(let r=0;r<s.length;r++){let h=s[r];if(h.primarySource.isCC===i&&h.primarySource.index===t||h.secondarySource.isCC===i&&h.secondarySource.index===t){let c=h.destination,I=n[c];A.computeModulator(this.midiControllers,o,r);for(let B=0;B<s.length;B++)s[B].destination===c&&(I+=A.modulatorValues[B]);let E=hA[c];a[c]=Math.max(E.min,Math.min(I,E.max))}}}var ao=class{midiControllers=new Int16Array(js);pitchWheels=new Int16Array(128).fill(8192);lockedControllers=new Array(js).fill(!1);customControllers=new Float32Array(Ta);octaveTuning=new Int8Array(128);drumParams=[];sysExModulators;keyShift=0;drumChannel=!1;randomPan=!1;insertionEnabled=!1;cc1=16;cc2=17;drumMap=0;dataEntryState=_e.Idle;patch={bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1};preset;lockPreset=!1;lockedSystem="gs";channelVibrato={delay:0,depth:0,rate:0};polyMode=!0;voiceCount=0;channel;rxChannel;synthCore;noteOn=jr.bind(this);noteOff=eo.bind(this);programChange=Ao.bind(this);controllerChange=Wr.bind(this);resetControllers=Qr.bind(this);resetPreset=fr.bind(this);resetControllersRP15Compliant=ur.bind(this);resetParameters=mr.bind(this);dataEntryFine=Zr.bind(this);dataEntryCoarse=Jr.bind(this);renderVoice=qr.bind(this);perNotePitch=!1;channelTuningCents=0;generatorOffsets=new Int16Array(ot);generatorOffsetsEnabled=!1;generatorOverrides=new Int16Array(ot);generatorOverridesEnabled=!1;computeModulators=no.bind(this);previousVoiceCount=0;constructor(A,e,t){this.synthCore=A,this.preset=e,this.channel=t,this.rxChannel=t,this.sysExModulators=new so(t),this.resetGeneratorOverrides(),this.resetGeneratorOffsets();for(let s=0;s<128;s++)this.drumParams.push(new en);this.resetDrumParams(),this.resetVibratoParams()}_isMuted=!1;get isMuted(){return this._isMuted}get channelSystem(){return this.lockPreset?this.lockedSystem:this.synthCore.masterParameters.midiSystem}clearVoiceCount(){this.previousVoiceCount=this.voiceCount,this.voiceCount=0}updateVoiceCount(){this.voiceCount!==this.previousVoiceCount&&this.sendChannelProperty()}transposeChannel(A,e=!1){this.drumChannel||(A+=this.synthCore.masterParameters.transposition);let t=Math.trunc(A),s=this.keyShift+this.customControllers[Ce.channelTransposeFine]/100;this.drumChannel&&!e||A===s||(t!==this.keyShift&&this.stopAllNotes(),this.keyShift=t,this.setCustomController(Ce.channelTransposeFine,(A-t)*100),this.sendChannelProperty())}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]}setModulationDepth(A){A=Math.round(A),k(`%cChannel ${this.channel} modulation depth. Cents: %c${A}`,l.info,l.value),this.setCustomController(Ce.modulationMultiplier,A/50)}setTuning(A,e=!0){A=Math.round(A),this.setCustomController(Ce.channelTuning,A),e&&k(`%cFine tuning for %c${this.channel}%c is now set to %c${A}%c cents.`,l.info,l.recognized,l.info,l.value,l.info)}pitchWheel(A,e=-1){if(!this.lockedControllers[ve+Ae.pitchWheel]){if(e===-1)this.perNotePitch=!1,this.midiControllers[ve+Ae.pitchWheel]=A,this.computeModulatorsAll(0,Ae.pitchWheel),this.sendChannelProperty();else{this.perNotePitch||this.pitchWheels.fill(this.midiControllers[ve+Ae.pitchWheel]),this.perNotePitch=!0,this.pitchWheels[e]=A;let t=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.isActive&&s.channel===this.channel&&s.midiNote===e&&(this.computeModulators(s,0,Ae.polyPressure),++t>=this.voiceCount))break}}this.synthCore.callEvent("pitchWheel",{channel:this.channel,pitch:A,midiNote:e})}}channelPressure(A){this.midiControllers[ve+Ae.channelPressure]=A<<7,this.updateChannelTuning(),this.computeModulatorsAll(0,Ae.channelPressure),this.synthCore.callEvent("channelPressure",{channel:this.channel,pressure:A})}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,Ae.polyPressure),++t>=this.voiceCount))break}this.synthCore.callEvent("polyPressure",{channel:this.channel,midiNote:A,pressure:e})}setCustomController(A,e){this.customControllers[A]=e,this.updateChannelTuning()}updateChannelTuning(){this.channelTuningCents=this.customControllers[Ce.channelTuning]+this.customControllers[Ce.channelTransposeFine]+this.customControllers[Ce.masterTuning]+this.customControllers[Ce.channelTuningSemitones]*100}setPresetLock(A){this.lockPreset!==A&&(this.lockPreset=A,A&&(this.lockedSystem=this.synthCore.masterParameters.midiSystem))}setDrums(A){if(Re.isSystemXG(this.channelSystem))if(A)this.setBankMSB(Re.getDrumBank(this.channelSystem)),this.setBankLSB(0);else{if(this.channel%16===bA)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)}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)}resetGeneratorOverrides(){this.generatorOverrides.fill(Ra),this.generatorOverridesEnabled=!1}setGeneratorOverride(A,e,t=!1){if(this.generatorOverrides[A]=e,this.generatorOverridesEnabled=!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.generatorOffsets.fill(0),this.generatorOffsetsEnabled=!1}setGeneratorOffset(A,e){this.generatorOffsets[A]=e*hA[A].nrpn,this.generatorOffsetsEnabled=!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}}killNote(A,e=-12e3){A+=this.customControllers[Ce.channelKeyShift];let t=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&s.realKey===A&&(s.overrideReleaseVolEnv=e,s.isInRelease=!1,s.releaseVoice(this.synthCore.currentTime),++t>=this.voiceCount))break}}stopAllNotes(A=!1){if(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(),this.updateVoiceCount()}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})}muteChannel(A){A&&this.stopAllNotes(!0),this._isMuted=A,this.sendChannelProperty(),this.synthCore.callEvent("muteChannel",{channel:this.channel,isMuted:A})}sendChannelProperty(){if(!this.synthCore.enableEventSystem)return;let A={voicesAmount:this.voiceCount,pitchWheel:this.midiControllers[ve+Ae.pitchWheel],pitchWheelRange:this.midiControllers[ve+Ae.pitchWheelRange]/128,isMuted:this.isMuted,transposition:this.keyShift+this.customControllers[Ce.channelTransposeFine]/100,isDrum:this.drumChannel,isEFX:this.insertionEnabled};this.synthCore.callEvent("channelPropertyChange",{channel:this.channel,property:A})}resetDrumParams(){if(!(this.synthCore.masterParameters.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=bn[A]/127,e.chorusGain=0,e.delayGain=0,e.rxNoteOn=!0,e.rxNoteOff=!1}}resetVibratoParams(){this.synthCore.masterParameters.customVibratoLock||(this.channelVibrato.rate=0,this.channelVibrato.depth=0,this.channelVibrato.delay=0)}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.lockPreset||(this.patch.bankMSB=A)}setBankLSB(A){this.lockPreset||(this.patch.bankLSB=A)}setDrumFlag(A){this.lockPreset||!this.preset||this.drumChannel!==A&&(A?(this.keyShift=0,this.drumChannel=!0):this.drumChannel=!1,this.synthCore.callEvent("drumChange",{channel:this.channel,isDrumChannel:this.drumChannel}))}},ta=4,Ye=class{generatorType;generatorValue=0;constructor(A,e,t=!0){if(this.generatorType=A,e===void 0)throw new Error("No value provided.");if(this.generatorValue=Math.round(e),t){let s=hA[A];s!==void 0&&(this.generatorValue=Math.max(s.min,Math.min(s.max,this.generatorValue)))}}write(A){te(A,this.generatorType),te(A,this.generatorValue)}toString(){return`${Object.keys(g).find(A=>g[A]===this.generatorType)}: ${this.generatorValue}`}},io=4,Es=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(g.coarseTune,0),e=this.getGenerator(g.fineTune,0);return A*100+e}set fineTuning(A){let e=Math.trunc(A/100),t=A%100;this.setGenerator(g.coarseTune,e),this.setGenerator(g.fineTune,t)}addToGenerator(A,e,t=!0){let s=this.getGenerator(A,hA[A].def);this.setGenerator(A,e+s,t)}setGenerator(A,e,t=!0){switch(A){case g.sampleID:throw new Error("Use setSample()");case g.instrument:throw new Error("Use setInstrument()");case g.velRange:case g.keyRange:throw new Error("Set the range manually")}if(e===null){this.generators=this.generators.filter(n=>n.generatorType!==A);return}let s=this.generators.findIndex(n=>n.generatorType===A);s===-1?this.addGenerators(new Ye(A,e,t)):this.generators[s]=new Ye(A,e,t)}addGenerators(...A){for(let e of A)switch(e.generatorType){default:{this.generators.push(e);break}case g.sampleID:case g.instrument:break;case g.velRange:{this.velRange.min=e.generatorValue&127,this.velRange.max=e.generatorValue>>8&127;break}case g.keyRange:this.keyRange.min=e.generatorValue&127,this.keyRange.max=e.generatorValue>>8&127}}addModulators(...A){this.modulators.push(...A)}getGenerator(A,e){return this.generators.find(t=>t.generatorType===A)?.generatorValue??e}copyFrom(A){this.generators=A.generators.map(e=>new Ye(e.generatorType,e.generatorValue,!1)),this.modulators=A.modulators.map(Fe.copyFrom.bind(Fe)),this.velRange={...A.velRange},this.keyRange={...A.keyRange}}getWriteGenerators(A){let e=this.generators.filter(t=>t.generatorType!==g.sampleID&&t.generatorType!==g.instrument&&t.generatorType!==g.keyRange&&t.generatorType!==g.velRange);if(!A)throw new Error("No bank provided! ");return this.hasVelRange&&e.unshift(new Ye(g.velRange,this.velRange.max<<8|Math.max(this.velRange.min,0),!1)),this.hasKeyRange&&e.unshift(new Ye(g.keyRange,this.keyRange.max<<8|Math.max(this.keyRange.min,0),!1)),e}},_a=class extends Es{},$a=class extends Es{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 Ye(g.instrument,t,!1)),e}},ja=class extends Es{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 Ye(g.sampleID,t,!1)),e}},ro=22,oo=new Set([g.velRange,g.keyRange,g.instrument,g.sampleID,g.exclusiveClass,g.endOper,g.sampleModes,g.startloopAddrsOffset,g.startloopAddrsCoarseOffset,g.endloopAddrsOffset,g.endloopAddrsCoarseOffset,g.startAddrsOffset,g.startAddrsCoarseOffset,g.endAddrOffset,g.endAddrsCoarseOffset,g.initialAttenuation,g.fineTune,g.coarseTune,g.keyNumToVolEnvHold,g.keyNumToVolEnvDecay,g.keyNumToModEnvHold,g.keyNumToModEnvDecay]),vt=class{name="";zones=[];globalZone=new _a;linkedTo=[];get useCount(){return this.linkedTo.length}createZone(A){let e=new ja(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){ne(`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 s=0;s<58;s++){if(oo.has(s))continue;s=s;let n={},a=hA[s]?.def||0;n[a]=0;for(let o of this.zones){let i=o.getGenerator(s,void 0);i===void 0?n[a]++:n[i]===void 0?n[i]=1:n[i]++;let r;switch(s){default:continue;case g.decayVolEnv:{r=g.keyNumToVolEnvDecay;break}case g.holdVolEnv:{r=g.keyNumToVolEnvHold;break}case g.decayModEnv:{r=g.keyNumToModEnvDecay;break}case g.holdModEnv:r=g.keyNumToModEnvHold}if(o.getGenerator(r,void 0)!==void 0){n={};break}}if(Object.keys(n).length>0){let o=["0",0];for(let[r,h]of Object.entries(n))h>o[1]&&(o=[r,h]);let i=Number.parseInt(o[0]);i!==a&&A.setGenerator(s,i,!1);for(let r of this.zones){let h=r.getGenerator(s,void 0);h===void 0?i!==a&&r.setGenerator(s,a):h===i&&r.setGenerator(s,null)}}}let t=this.zones[0].modulators.map(s=>Fe.copyFrom(s));for(let s of t){let n=!0;for(let a of this.zones){if(!n)continue;a.modulators.find(i=>Fe.isIdentical(i,s))||(n=!1)}if(n){A.addModulators(Fe.copyFrom(s));for(let a of this.zones){let o=a.modulators.find(i=>Fe.isIdentical(i,s));o&&o.transformAmount===s.transformAmount&&a.modulators.splice(a.modulators.indexOf(o),1)}}}}write(A,e){k(`%cWriting ${this.name}...`,l.info),Ne(A.pdta,this.name.slice(0,20),20),Ne(A.xdta,this.name.slice(20),20),te(A.pdta,e&65535),te(A.xdta,e>>>16)}},ho=38,Rt=class dA{parentSoundBank;name="";program=0;bankMSB=0;bankLSB=0;isGMGSDrum=!1;zones=[];globalZone;library=0;genre=0;morphology=0;constructor(e,t=new _a){this.parentSoundBank=e,this.globalZone=t}get isXGDrums(){return this.parentSoundBank.isXGBank&&Re.isXGDrums(this.bankMSB)}get isAnyDrums(){let e=this.parentSoundBank.isXGBank;return this.isGMGSDrum||e&&Re.isXGDrums(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=>Fe.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 $a(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 CA.matches(this,e)}getVoiceParameters(e,t){let s=new Array;for(let n of this.zones){if(!dA.isInRange(n.hasKeyRange?n.keyRange:this.globalZone.keyRange,e)||!dA.isInRange(n.hasVelRange?n.velRange:this.globalZone.velRange,t))continue;let a=n.instrument;if(!a||a.zones.length===0)continue;let o=new Int16Array(ot);for(let r of this.globalZone.generators)o[r.generatorType]=r.generatorValue;for(let r of n.generators)o[r.generatorType]=r.generatorValue;let i=[...n.modulators];dA.addUniqueModulators(i,this.globalZone.modulators);for(let r of a.zones){if(!dA.isInRange(r.hasKeyRange?r.keyRange:a.globalZone.keyRange,e)||!dA.isInRange(r.hasVelRange?r.velRange:a.globalZone.velRange,t))continue;let h=[...r.modulators];dA.addUniqueModulators(h,a.globalZone.modulators),dA.addUniqueModulators(h,this.parentSoundBank.defaultModulators);for(let I of i){let E=h.findIndex(B=>Fe.isIdentical(I,B));E===-1?h.push(I):h[E]=h[E].sumTransform(I)}let c=new Int16Array($s);for(let I of a.globalZone.generators)c[I.generatorType]=I.generatorValue;for(let I of r.generators)c[I.generatorType]=I.generatorValue;for(let I=0;I<c.length;I++)c[I]=Math.max(-32768,Math.min(32767,c[I]+o[I]));c[g.initialAttenuation]=Math.floor(c[g.initialAttenuation]*.4),s.push({sample:r.sample,generators:c,modulators:h})}}return s}toMIDIString(){return CA.toMIDIString(this)}toString(){return CA.toNamedMIDIString(this)}toFlattenedInstrument(){let e=(h,c)=>{h.push(...c.filter(I=>!h.some(E=>E.generatorType===I.generatorType)))},t=(h,c)=>{h.push(...c.filter(I=>!h.some(E=>Fe.isIdentical(I,E))))},s=new vt;s.name=this.name;let n=[],a=[],o=this.globalZone;n.push(...o.generators),a.push(...o.modulators);let i=o.keyRange,r=o.velRange;for(let h of this.zones){if(!h.instrument)throw new Error("No instrument in a preset zone.");let c=h.keyRange;h.hasKeyRange||(c=i);let I=h.velRange;h.hasVelRange||(I=r);let E=h.generators.map(P=>new Ye(P.generatorType,P.generatorValue));e(E,n);let B=[...h.modulators];t(B,a);let d=h.instrument,y=d.zones,D=[],M=[],F=d.globalZone;D.push(...F.generators),M.push(...F.modulators);let w=F.keyRange,S=F.velRange;for(let P of y){if(!P.sample)throw new Error("No sample in an instrument zone.");let C=P.keyRange;P.hasKeyRange||(C=w);let x=P.velRange;if(P.hasVelRange||(x=S),C=dA.subtractRanges(C,c),x=dA.subtractRanges(x,I),C.max<C.min||x.max<x.min)continue;let J=P.generators.map(m=>new Ye(m.generatorType,m.generatorValue));e(J,D);let Y=[...P.modulators];t(Y,M);let T=[...Y];for(let m of B){let v=T.findIndex(H=>Fe.isIdentical(m,H));v===-1?T.push(m):T[v]=T[v].sumTransform(m)}let U=J.map(m=>new Ye(m.generatorType,m.generatorValue));for(let m of E){if(m.generatorType===g.velRange||m.generatorType===g.keyRange||m.generatorType===g.instrument||m.generatorType===g.endOper||m.generatorType===g.sampleModes)continue;let v=J.findIndex(H=>H.generatorType===m.generatorType);if(v===-1){let H=hA[m.generatorType].def+m.generatorValue;U.push(new Ye(m.generatorType,H))}else{let H=U[v].generatorValue+m.generatorValue;U[v]=new Ye(m.generatorType,H)}}U=U.filter(m=>m.generatorType!==g.sampleID&&m.generatorType!==g.keyRange&&m.generatorType!==g.velRange&&m.generatorType!==g.endOper&&m.generatorType!==g.instrument&&m.generatorValue!==hA[m.generatorType].def);let q=s.createZone(P.sample);q.keyRange=C,q.velRange=x,q.keyRange.min===0&&q.keyRange.max===127&&(q.keyRange.min=-1),q.velRange.min===0&&q.velRange.max===127&&(q.velRange.min=-1),q.addGenerators(...U),q.addModulators(...T)}}return s}write(e,t){k(`%cWriting ${this.name}...`,l.info),Ne(e.pdta,this.name.slice(0,20),20),Ne(e.xdta,this.name.slice(20),20),te(e.pdta,this.program);let s=this.bankMSB;this.isGMGSDrum?s=128:this.bankMSB===0&&(s=this.bankLSB),te(e.pdta,s),e.xdta.currentIndex+=4,te(e.pdta,t&65535),te(e.xdta,t>>16),de(e.pdta,this.library),de(e.pdta,this.genre),de(e.pdta,this.morphology),e.xdta.currentIndex+=12}};function sa(A,e){let t=e?A.find(s=>s.isXGDrums):A.find(s=>s.isGMGSDrum);return t||(A.find(s=>s.isAnyDrums)??A[0])}function ei(A,e,t){if(A.length===0)throw new Error("No presets!");e.isGMGSDrum&&Re.isSystemXG(t)&&(e={...e,isGMGSDrum:!1,bankLSB:0,bankMSB:Re.getDrumBank(t)});let{isGMGSDrum:s,bankLSB:n,bankMSB:a,program:o}=e,i=Re.isSystemXG(t),r=Re.isXGDrums(a)&&i,h=A.find(E=>E.matches(e));if(h&&(!r||r&&h.isXGDrums))return h;let c=E=>{k(`%cPreset %c${CA.toMIDIString(e)}%c not found. (${t}) Replaced with %c${E.toString()}`,l.warn,l.unrecognized,l.warn,l.value)};if(s){let E=A.find(B=>B.isGMGSDrum&&B.program===o);return E||(E=A.find(B=>B.isAnyDrums&&B.program===o),E)?(c(E),E):(E=sa(A,!1),c(E),E)}if(r){let E=A.find(B=>B.program===o&&B.isXGDrums);return E||(E=A.find(B=>B.isAnyDrums&&B.program===o),E)?(c(E),E):(E=sa(A,!0),c(E),E)}let I=A.filter(E=>E.program===o&&!E.isAnyDrums);if(I.length===0)return c(A[0]),A[0];if(h=i?I.find(E=>E.bankLSB===n):I.find(E=>E.bankMSB===a),h)return c(h),h;if(n!==64||!i){let E=Math.max(a,n);if(h=I.find(B=>B.bankLSB===E||B.bankMSB===E),h)return c(h),h}return c(I[0]),I[0]}var go=class extends Rt{constructor(A,e){super(A.parentSoundBank,A.globalZone),this.bankMSB=Re.addBankOffset(A.bankMSB,e,A.isXGDrums),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}},co=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){ne("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 ei(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 o=new go(a,n);e.has(o.toMIDIString())||(e.add(o.toMIDIString()),A.push(o))}}A.sort(CA.sorter.bind(CA)),this.selectablePresetList=A,this._presetList=A.map(t=>({bankMSB:t.bankMSB,bankLSB:t.bankLSB,program:t.program,isGMGSDrum:t.isGMGSDrum,name:t.name,isAnyDrums:t.isAnyDrums})),this.presetListChangeCallback()}};function Io(A,e){switch(this.masterParameters[A]=e,A){default:break;case"masterPan":{let t=e;t=t/2+.5,this.panLeft=Math.cos(Math.PI/2*t),this.panRight=Math.sin(Math.PI/2*t);break}case"voiceCap":{let t=Math.min(e,1e6);this.masterParameters.voiceCap=t;for(let s=t;s<this.voices.length;s++)this.voices[s].isActive=!1;if(t>this.voices.length){ne(`Allocating ${t-this.voices.length} new voices!`);for(let s=this.voices.length;s<t;s++)this.voices.push(new gn(this.sampleRate))}break}case"transposition":{let t=e;this.masterParameters.transposition=0;for(let s of this.midiChannels)s.transposeChannel(t);this.masterParameters.transposition=t}}this.callEvent("masterParameterChange",{parameter:A,value:e})}function lo(A){return this.masterParameters[A]}function Co(){return{...this.masterParameters}}function na(A,e,t){let s=A,n=e<<7|t;return A===127&&e===127&&t===127?-1:s+n*61e-6}function Eo(A,e=0){switch(A[2]){case 4:{let t;switch(A[3]){case 1:{let s=A[5]<<7|A[4];this.setMIDIVolume(s/16384),k(`%cMaster Volume. Volume: %c${s}`,l.info,l.value);break}case 2:{let n=((A[5]<<7|A[4])-8192)/8192;this.setMasterParameter("masterPan",n),k(`%cMaster Pan. Pan: %c${n}`,l.info,l.value);break}case 3:{let s=(A[5]<<7|A[6])-8192;t=Math.floor(s/81.92),this.setMasterTuning(t),k(`%cMaster Fine Tuning. Cents: %c${t}`,l.info,l.value);break}case 4:{t=(A[5]-64)*100,this.setMasterTuning(t),k(`%cMaster Coarse Tuning. Cents: %c${t}`,l.info,l.value);break}default:k(`%cUnrecognized MIDI Device Control Real-time message: %c${gs(A)}`,l.warn,l.unrecognized)}break}case 9:{A[3]===1?(k("%cGM1 system on",l.info),this.resetAllControllers("gm")):A[3]===3?(k("%cGM2 system on",l.info),this.resetAllControllers("gm2")):(k("%cGM system off, defaulting to GS",l.info),this.setMasterParameter("midiSystem","gs"));break}case 8:{let t=4;switch(A[3]){case 1:{let s=A[t++],n=cA(A,16,t);if(t+=16,A.length<384){ne(`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]=na(A[t++],A[t++],A[t++]);k(`%cBulk Tuning Dump %c${n}%c Program: %c${s}`,l.info,l.value,l.info,l.recognized);break}case 2:case 7:{A[3]===7&&t++;let s=A[t++],n=A[t++];for(let a=0;a<n;a++){let o=A[t++];this.tunings[s*128+o]=na(A[t++],A[t++],A[t++])}k(`%cSingle Note Tuning. Program: %c${s}%c Keys affected: %c${n}`,l.info,l.recognized,l.info,l.recognized);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);k(`%cMIDI Octave Scale ${A[3]===8?"(1 byte)":"(2 bytes)"} tuning via Tuning: %c${s.join(" ")}`,l.info,l.value);break}default:{qe(A,"MIDI Tuning Standard");break}}break}default:qe(A,"General MIDI")}}var z=(A,e)=>{k(`%cRoland GS ${A}%c is now set to %c${e}%c.`,l.recognized,l.info,l.value,l.info)};function Bo(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){k("%cGS Reset received!",l.info),this.resetAllControllers("gs");return}if(t===64){if(s===0){switch(n){case 0:{let i=((a<<12|A[8]<<8|A[9]<<4|A[10])-1024)/10;this.setMasterTuning(i),z("Master Tune",i);break}case 4:{z("Master Volume",a);break}case 5:{let o=a-64;z("Master Key-Shift",o),this.setMasterTuning(o*100);break}case 6:{z("Master Pan",a),this.setMasterParameter("masterPan",(a-64)/64);break}case 127:{a===0?(k("%cGS Reset received!",l.info),this.resetAllControllers("gs")):a===127&&(k("%cGS system off, switching to GM",l.info),this.resetAllControllers("gm"));break}default:{qe(A,"Roland GS");break}}return}if(s===1){let o=n>=48&&n<=55,i=n>=56&&n<=64,r=n>=80&&n<=90;if(o&&this.masterParameters.reverbLock||i&&this.masterParameters.chorusLock||r&&this.masterParameters.delayLock)return;switch(this.delayActive||=n===64||r,n){default:{k(`%cUnsupported Patch Common parameter: %c${n.toString(16)}`,l.warn,l.unrecognized);break}case 0:{let h=cA(A,16,7);z(`Patch Name for ${n&15}`,h);break}case 48:{this.setReverbMacro(a),z("Reverb Macro",a);break}case 49:{this.reverbProcessor.character=a,z("Reverb Character",a),this.callEvent("effectChange",{effect:"reverb",parameter:"character",value:a});break}case 50:{this.reverbProcessor.preLowpass=a,z("Reverb Pre-LPF",a),this.callEvent("effectChange",{effect:"reverb",parameter:"preLowpass",value:a});break}case 51:{this.reverbProcessor.level=a,z("Reverb Level",a),this.callEvent("effectChange",{effect:"reverb",parameter:"level",value:a});break}case 52:{this.reverbProcessor.time=a,z("Reverb Time",a),this.callEvent("effectChange",{effect:"reverb",parameter:"time",value:a});break}case 53:{this.reverbProcessor.delayFeedback=a,z("Reverb Delay Feedback",a),this.callEvent("effectChange",{effect:"reverb",parameter:"delayFeedback",value:a});break}case 54:break;case 55:{this.reverbProcessor.preDelayTime=a,z("Reverb Predelay Time",a),this.callEvent("effectChange",{effect:"reverb",parameter:"preDelayTime",value:a});break}case 56:{this.setChorusMacro(a),z("Chorus Macro",a);break}case 57:{this.chorusProcessor.preLowpass=a,z("Pre-LPF",a),this.callEvent("effectChange",{effect:"chorus",parameter:"preLowpass",value:a});break}case 58:{this.chorusProcessor.level=a,z("Chorus Level",a),this.callEvent("effectChange",{effect:"chorus",parameter:"level",value:a});break}case 59:{this.chorusProcessor.feedback=a,z("Chorus Feedback",a),this.callEvent("effectChange",{effect:"chorus",parameter:"feedback",value:a});break}case 60:{this.chorusProcessor.delay=a,z("Chorus Delay",a),this.callEvent("effectChange",{effect:"chorus",parameter:"delay",value:a});break}case 61:{this.chorusProcessor.rate=a,z("Chorus Rate",a),this.callEvent("effectChange",{effect:"chorus",parameter:"rate",value:a});break}case 62:{this.chorusProcessor.depth=a,z("Chorus Depth",a),this.callEvent("effectChange",{effect:"chorus",parameter:"depth",value:a});break}case 63:{this.chorusProcessor.sendLevelToReverb=a,z("Chorus Send Level To Reverb",a),this.callEvent("effectChange",{effect:"chorus",parameter:"sendLevelToReverb",value:a});break}case 64:{this.chorusProcessor.sendLevelToDelay=a,z("Chorus Send Level To Delay",a),this.callEvent("effectChange",{effect:"chorus",parameter:"sendLevelToDelay",value:a});break}case 80:{this.setDelayMacro(a),z("Delay Macro",a);break}case 81:{this.delayProcessor.preLowpass=a,z("Delay Pre-LPF",a),this.callEvent("effectChange",{effect:"delay",parameter:"preLowpass",value:a});break}case 82:{this.delayProcessor.timeCenter=a,z("Delay Time Center",a),this.callEvent("effectChange",{effect:"delay",parameter:"timeCenter",value:a});break}case 83:{this.delayProcessor.timeRatioLeft=a,z("Delay Time Ratio Left",a),this.callEvent("effectChange",{effect:"delay",parameter:"timeRatioLeft",value:a});break}case 84:{this.delayProcessor.timeRatioRight=a,z("Delay Time Ratio Right",a),this.callEvent("effectChange",{effect:"delay",parameter:"timeRatioRight",value:a});break}case 85:{this.delayProcessor.levelCenter=a,z("Delay Level Center",a),this.callEvent("effectChange",{effect:"delay",parameter:"levelCenter",value:a});break}case 86:{this.delayProcessor.levelLeft=a,z("Delay Level Left",a),this.callEvent("effectChange",{effect:"delay",parameter:"levelLeft",value:a});break}case 87:{this.delayProcessor.levelRight=a,z("Delay Level Right",a),this.callEvent("effectChange",{effect:"delay",parameter:"levelRight",value:a});break}case 88:{this.delayProcessor.level=a,z("Delay Level",a),this.callEvent("effectChange",{effect:"delay",parameter:"level",value:a});break}case 89:{this.delayProcessor.feedback=a,z("Delay Feedback",a),this.callEvent("effectChange",{effect:"delay",parameter:"feedback",value:a});break}case 90:{this.delayProcessor.sendLevelToReverb=a,z("Delay Send Level To Reverb",a),this.callEvent("effectChange",{effect:"delay",parameter:"sendLevelToReverb",value:a});break}}break}if(s===3){if(this.masterParameters.insertionEffectLock)return;if(n>=3&&n<=25&&(this.insertionParams[n-3]=a),n>=3&&n<=22){this.insertionProcessor.setParameter(n,a),z(`EFX Parameter ${n-2}`,a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return}switch(n){default:{qe(A,"Roland GS EFX");return}case 0:{let o=a<<8|A[8],i=this.insertionEffects.get(o);i?(z("EFX Type",o.toString(16)),this.insertionProcessor=i):(this.insertionProcessor=this.insertionFallback,k(`%cUnsupported EFX processor: %c${o.toString(16)}%c, using Thru.`,l.warn,l.unrecognized,l.warn)),this.resetInsertionParams(),this.insertionProcessor.reset(),this.callEvent("effectChange",{effect:"insertion",parameter:0,value:o});return}case 23:{this.insertionProcessor.sendLevelToReverb=a/127*zt,z("EFX Send Level to Reverb",a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return}case 24:{this.insertionProcessor.sendLevelToChorus=a/127*zt,z("EFX Send Level to Chorus",a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return}case 25:{this.insertionProcessor.sendLevelToDelay=a/127*zt,this.delayActive=!0,z("EFX Send Level to Delay",a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return}}}if(s>>4===1){let o=it(s&15)+e,i=this.midiChannels[o];switch(n){default:{qe(A,"Roland GS");return}case 0:{i.controllerChange(u.bankSelect,a),i.programChange(A[8]);break}case 2:{i.rxChannel=a===16?-1:a+e,this.customChannelNumbers||=i.rxChannel!==i.channel,z(`Rx. Channel on ${o}`,i.rxChannel);break}case 19:{i.polyMode=a===1,z(`Mono/poly on ${o}`,i.polyMode?"POLY":"MONO");break}case 20:{z(`Assign mode on ${o}`,a);break}case 21:{i.drumMap=a;let r=a>0;i.setGSDrums(r),z(`Drums on ${o}`,r.toString());return}case 22:{let r=a-64;i.setCustomController(Ce.channelKeyShift,r),z(`Key shift on ${o}`,r);return}case 25:{i.controllerChange(u.mainVolume,a);return}case 28:{let r=a;r===0?(i.randomPan=!0,z(`Random pan on ${o}`,"ON")):(i.randomPan=!1,i.controllerChange(u.pan,r));break}case 31:{i.cc1=a,z("CC1 Controller Number",a);break}case 32:{i.cc2=a,z("CC2 Controller Number",a);break}case 33:{i.controllerChange(u.chorusDepth,a);break}case 34:{i.controllerChange(u.reverbDepth,a);break}case 42:{let h=((a<<7|A[8])-8192)/81.92;i.setTuning(h);break}case 44:{i.controllerChange(u.variationDepth,a);break}case 48:{i.controllerChange(u.vibratoRate,a);break}case 49:{i.controllerChange(u.vibratoDepth,a);break}case 50:{i.controllerChange(u.brightness,a);break}case 51:{i.controllerChange(u.filterResonance,a);break}case 52:{i.controllerChange(u.attackTime,a);break}case 53:{i.controllerChange(u.decayTime,a);break}case 54:{i.controllerChange(u.releaseTime,a);break}case 55:{i.controllerChange(u.vibratoDelay,a);break}case 64:{let r=A.length-9,h=new Int8Array(12);for(let I=0;I<r;I++)h[I]=A[I+7]-64;i.setOctaveTuning(h);let c=a-64;z(`Octave Scale Tuning on ${o}`,h.join(", ")),i.setTuning(c);break}}return}if(s>>4===2){let o=it(s&15)+e,i=this.midiChannels[o];switch(n&240){default:{qe(A,"Roland GS Patch Parameter Controller");break}case 0:{if((n&15)===4){let r=a/127*600;i.customControllers[Ce.modulationMultiplier]=r/50,AA(i.channel,r,"modulation wheel depth","cents");break}i.sysExModulators.setupReceiver(n,a,u.modulationWheel,"mod wheel");break}case 16:{if((n&15)===0){let r=a-64;i.midiControllers[ve+Ae.pitchWheelRange]=r<<7,AA(i.channel,r,"pitch wheel range","semitones");break}i.sysExModulators.setupReceiver(n,a,ve+Ae.pitchWheel,"pitch wheel",!0);break}case 32:{i.sysExModulators.setupReceiver(n,a,ve+Ae.channelPressure,"channel pressure");break}case 48:{i.sysExModulators.setupReceiver(n,a,ve+Ae.polyPressure,"poly pressure");break}case 64:{i.sysExModulators.setupReceiver(n,a,i.cc1,"CC1");break}case 80:i.sysExModulators.setupReceiver(n,a,i.cc2,"CC2")}return}if(s>>4===4){let o=it(s&15)+e,i=this.midiChannels[o];switch(n){default:{qe(A,"Roland GS Patch Part Parameter");break}case 0:case 1:{i.controllerChange(u.bankSelectLSB,a);break}case 34:{if(this.masterParameters.insertionEffectLock)return;let r=a===1;i.insertionEnabled=r,this.insertionActive||=r,z(`Insertion for ${o}`,r?"ON":"OFF"),this.callEvent("effectChange",{effect:"insertion",parameter:r?-1:-2,value:o})}}return}qe(A,"Roland GS Patch Parameter");return}if(t===65){if(this.masterParameters.drumLock)return;let o=(s>>4)+1,i=n;switch(s&15){default:{qe(A,"Roland GS Drum Setup");return}case 0:{let h=cA(A,12,7);z(`Patch Name for MAP${o}`,h);break}case 1:{let h=a-60;for(let c of this.midiChannels)c.drumMap===o&&(c.drumParams[i].pitch=h*(c.patch.bankLSB===1?100:50));z(`Drum Pitch for MAP${o}, key ${i}`,h);break}case 2:{for(let h of this.midiChannels)h.drumMap===o&&(h.drumParams[i].gain=a/120);z(`Drum Level for MAP${o}, key ${i}`,a);break}case 3:{for(let h of this.midiChannels)h.drumMap===o&&(h.drumParams[i].exclusiveClass=a);z(`Drum Assign Group for MAP${o}, key ${i}`,a);break}case 4:{for(let h of this.midiChannels)h.drumMap===o&&(h.drumParams[i].pan=a);z(`Drum Pan for MAP${o}, key ${i}`,a);break}case 5:{for(let h of this.midiChannels)h.drumMap===o&&(h.drumParams[i].reverbGain=a/127);z(`Drum Reverb for MAP${o}, key ${i}`,a);break}case 6:{for(let h of this.midiChannels)h.drumMap===o&&(h.drumParams[i].chorusGain=a/127);z(`Drum Chorus for MAP${o}, key ${i}`,a);break}case 7:{for(let h of this.midiChannels)h.drumMap===o&&(h.drumParams[i].rxNoteOff=a===1);z(`Drum Note Off for MAP${o}, key ${i}`,a===1);break}case 8:{for(let h of this.midiChannels)h.drumMap===o&&(h.drumParams[i].rxNoteOn=a===1);z(`Drum Note On for MAP${o}, key ${i}`,a===1);break}case 9:{for(let h of this.midiChannels)h.drumMap===o&&(h.drumParams[i].delayGain=a/127);z(`Drum Delay for MAP${o}, key ${i}`,a);break}}return}qe(A,"Roland GS");return}case 69:{A[4]===16&&(A[5]===0?this.callEvent("synthDisplay",[...A]):A[5]===1?this.callEvent("synthDisplay",[...A]):qe(A,"Roland GS Display"));return}case 22:if(A[4]===16){this.setMIDIVolume(A[7]/100),k(`%cRoland Master Volume control set to: %c${A[7]}`,l.info,l.value);return}else qe(A,"Roland")}else{qe(A,"Roland");return}}var Oe=(A,e)=>{k(`%cYamaha XG ${A}%c for is now set to %c${e}%c.`,l.recognized,l.info,l.value,l.info)};function Qo(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.setMasterTuning(i),Oe("Master Tune",i)}break}case 4:{this.setMIDIVolume(a/127),Oe("Master Volume",a);break}case 5:{let o=127-a;this.setMIDIVolume(o/127),Oe("Master Attenuation",a);break}case 6:{let o=a-64;this.setMasterParameter("transposition",o),Oe("Master Transpose",o);break}case 127:case 126:{k("%cXG system on",l.info),this.resetAllControllers("xg");break}}return}if(t===2&&s===1){let o,i=n;i<=21?o="Reverb":i<=35?o="Chorus":o="Variation",k(`%cUnsupported XG ${o} Parameter: %c${i.toString(16)}`,l.warn,l.unrecognized);return}if(t===8){if(!Re.isSystemXG(this.masterParameters.midiSystem))return;let o=s+e;if(o>=this.midiChannels.length)return;let i=this.midiChannels[o];switch(n){case 1:{i.controllerChange(u.bankSelect,a);break}case 2:{i.controllerChange(u.bankSelectLSB,a);break}case 3:{i.programChange(a);break}case 4:{i.rxChannel=a+e,this.customChannelNumbers||=i.rxChannel!==i.channel,Oe(`Rev. Channel on ${o}`,i.rxChannel);break}case 5:{i.polyMode=a===1,Oe(`Mono/poly on ${o}`,i.polyMode?"POLY":"MONO");break}case 7:{i.setDrums(a!=0);break}case 8:{if(i.drumChannel)break;let r=a-64;i.setCustomController(Ce.channelKeyShift,r),Oe(`Key shift on ${o}`,r);break}case 11:{i.controllerChange(u.mainVolume,a);break}case 14:{let r=a;r===0?(i.randomPan=!0,Oe(`Random Pan for ${o}`,"ON")):i.controllerChange(u.pan,r);break}case 18:{i.controllerChange(u.chorusDepth,a);break}case 19:{i.controllerChange(u.reverbDepth,a);break}case 21:{i.controllerChange(u.vibratoRate,a);break}case 22:{i.controllerChange(u.vibratoDepth,a);break}case 23:{i.controllerChange(u.vibratoDelay,a);break}case 24:{i.controllerChange(u.brightness,a);break}case 25:{i.controllerChange(u.filterResonance,a);break}case 26:{i.controllerChange(u.attackTime,a);break}case 27:{i.controllerChange(u.decayTime,a);break}case 28:{i.controllerChange(u.releaseTime,a);break}default:k(`%cUnsupported Yamaha XG Part Setup: %c${A[5].toString(16).toUpperCase()}%c for channel ${o}`,l.warn,l.unrecognized,l.warn)}return}if(t>>4===3){if(this.masterParameters.drumLock)return;let o=s;switch(n){default:{qe([n],"Yamaha XG Drum Setup");return}case 0:{let i=(a-64)*100;for(let r of this.midiChannels)r.drumChannel&&(r.drumParams[o].pitch=i);Oe(`Drum Pitch, key ${o}`,i);break}case 1:{let i=a-64;for(let r of this.midiChannels)r.drumChannel&&(r.drumParams[o].pitch+=i);Oe(`Drum Pitch Fine, key ${o}`,i);break}case 2:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[o].gain=a/120);Oe(`Drum Level, key ${o}`,a);break}case 3:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[o].exclusiveClass=a);Oe(`Drum Alternate Group, key ${o}`,a);break}case 4:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[o].pan=a);Oe(`Drum Pan, key ${o}`,a);break}case 5:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[o].reverbGain=a/127);Oe(`Drum Reverb, key ${o}`,a);break}case 6:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[o].chorusGain=a/127);Oe(`Drum Chorus, key ${o}`,a);break}case 9:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[o].rxNoteOff=a===1);Oe(`Drum Note Off, key ${o}`,a===1);break}case 10:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[o].rxNoteOn=a===1);Oe(`Drum Note On, key ${o}`,a===1);break}}return}t===6||t===7?this.callEvent("synthDisplay",[...A]):Re.isSystemXG(this.masterParameters.midiSystem)&&qe(A,"Yamaha XG")}else qe(A,"Yamaha")}function fo(A,e=0){e+=this.portSelectChannelOffset;let t=A[0];if(!(this.masterParameters.deviceID!==gt&&A[1]!==127&&this.masterParameters.deviceID!==A[1]))switch(t){default:{k(`%cUnknown manufacturer: %c${gs(A)}`,l.warn,l.unrecognized);break}case 126:case 127:{Eo.call(this,A,e);break}case 65:{Bo.call(this,A,e);break}case 67:{Qo.call(this,A,e);break}case 245:{if(A.length<2)return;for(this.portSelectChannelOffset=(A[1]-1)*16;this.midiChannels.length<=this.portSelectChannelOffset;){k(`%cPort select, channel offset %c${this.portSelectChannelOffset}%c. Creating a new port!`,l.info,l.value,l.info);for(let s=0;s<16;s++)this.createMIDIChannel(!0)}break}}}var Ai=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=0;reset(){}process(A,e,t,s,n,a,o,i,r){let{sendLevelToReverb:h,sendLevelToChorus:c,sendLevelToDelay:I}=this;for(let E=0;E<r;E++){let B=A[E],d=e[E],y=i+E;t[y]+=B,s[y]+=d;let D=(B+d)*.5;n[E]+=D*h,a[E]+=D*c,o[E]+=D*I}}setParameter(A,e){}},wA=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]}},aa=Math.PI/2,jt=-64,ti=63,Ln=ti-jt,os=new Float32Array(Ln+1),hs=new Float32Array(Ln+1);for(let A=jt;A<=ti;A++){let e=(A-jt)/Ln,t=A-jt;os[t]=Math.cos(aa*e),hs[t]=Math.sin(aa*e)}function be(A){A.x1=A.x2=A.y1=A.y2=0}var $e={b0:1,b1:0,b2:0,a0:1,a1:0,a2:0};function XA(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 o=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=o,o}function QA(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 NA(A,e,t,s,n){let a=Math.pow(10,e/40),o=2*Math.PI*t/s,i=Math.cos(o),c=Math.sin(o)/2*Math.sqrt((a+1/a)*(1/1-1)+2),I,E,B,d,y,D;n?(I=a*(a+1-(a-1)*i+2*Math.sqrt(a)*c),E=2*a*(a-1-(a+1)*i),B=a*(a+1-(a-1)*i-2*Math.sqrt(a)*c),d=a+1+(a-1)*i+2*Math.sqrt(a)*c,y=-2*(a-1+(a+1)*i),D=a+1+(a-1)*i-2*Math.sqrt(a)*c):(I=a*(a+1+(a-1)*i+2*Math.sqrt(a)*c),E=-2*a*(a-1+(a+1)*i),B=a*(a+1+(a-1)*i-2*Math.sqrt(a)*c),d=a+1-(a-1)*i+2*Math.sqrt(a)*c,y=2*(a-1-(a+1)*i),D=a+1-(a-1)*i-2*Math.sqrt(a)*c),A.b0=I/d,A.b1=E/d,A.b2=B/d,A.a0=1,A.a1=y/d,A.a2=D/d}var Le={x1:0,x2:0,y1:0,y2:0},uo=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={...$e};m1Coeffs={...$e};m2Coeffs={...$e};hiCoeffs={...$e};lowStateL={...Le};lowStateR={...Le};m1StateL={...Le};m1StateR={...Le};m2StateL={...Le};m2StateR={...Le};hiStateL={...Le};hiStateR={...Le};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,be(this.lowStateL),be(this.lowStateR),be(this.m1StateL),be(this.m1StateR),be(this.m2StateL),be(this.m2StateR),be(this.hiStateL),be(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=wA.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=wA.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,o,i,r){let{level:h,sendLevelToChorus:c,sendLevelToDelay:I,sendLevelToReverb:E,lowCoeffs:B,lowStateL:d,lowStateR:y,m1Coeffs:D,m1StateL:M,m1StateR:F,m2StateL:w,m2StateR:S,m2Coeffs:P,hiCoeffs:C,hiStateL:x,hiStateR:J}=this;for(let Y=0;Y<r;Y++){let T=A[Y],U=e[Y];T=QA(T,B,d),U=QA(U,B,y),T=QA(T,D,M),U=QA(U,D,F),T=QA(T,P,w),U=QA(U,P,S),T=QA(T,C,x),U=QA(U,C,J);let q=i+Y;t[q]+=T*h,s[q]+=U*h;let m=.5*(T+U);n[Y]+=m*E,a[Y]+=m*c,o[Y]+=m*I}}updateCoefficients(){mo(this.lowCoeffs,this.lowFreq,this.lowGain/2,this.sampleRate),ia(this.m1Coeffs,this.m1Freq,this.m1Gain,this.m1Q,this.sampleRate),ia(this.m2Coeffs,this.m2Freq,this.m2Gain,this.m2Q,this.sampleRate),po(this.hiCoeffs,this.hiFreq,this.hiGain/2,this.sampleRate)}},si=1;function ia(A,e,t,s,n){let a=Math.pow(10,t/40),o=2*Math.PI*e/n,i=Math.cos(o),h=Math.sin(o)/(2*s),c=1+h*a,I=-2*i,E=1-h*a,B=1+h/a,d=-2*i,y=1-h/a;A.a0=1,A.a1=d/B,A.a2=y/B,A.b0=c/B,A.b1=I/B,A.b2=E/B}function mo(A,e,t,s){let n=Math.pow(10,t/40),a=2*Math.PI*e/s,o=Math.cos(a),r=Math.sin(a)/2*Math.sqrt((n+1/n)*(1/si-1)+2),h=n*(n+1-(n-1)*o+2*Math.sqrt(n)*r),c=2*n*(n-1-(n+1)*o),I=n*(n+1-(n-1)*o-2*Math.sqrt(n)*r),E=n+1+(n-1)*o+2*Math.sqrt(n)*r,B=-2*(n-1+(n+1)*o),d=n+1+(n-1)*o-2*Math.sqrt(n)*r;A.a0=1,A.a1=B/E,A.a2=d/E,A.b0=h/E,A.b1=c/E,A.b2=I/E}function po(A,e,t,s){let n=Math.pow(10,t/40),a=2*Math.PI*e/s,o=Math.cos(a),r=Math.sin(a)/2*Math.sqrt((n+1/n)*(1/si-1)+2),h=n*(n+1+(n-1)*o+2*Math.sqrt(n)*r),c=-2*n*(n-1+(n+1)*o),I=n*(n+1+(n-1)*o-2*Math.sqrt(n)*r),E=n+1-(n-1)*o+2*Math.sqrt(n)*r,B=2*(n-1-(n+1)*o),d=n+1-(n-1)*o-2*Math.sqrt(n)*r;A.a0=1,A.a1=B/E,A.a2=d/E,A.b0=h/E,A.b1=c/E,A.b2=I/E}var st=8,Js=128,ra=4,Ks=600,yo=.9,oa=.35,ni=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=288;manual=620;rate=.85;depth=64/Js;reso=16/127;mix=1;lowGain=0;hiGain=0;prevInL;prevOutL;prevInR;prevOutR;lowShelfCoef={...$e};highShelfCoef={...$e};manualOffset=Ks;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=oa;sampleRate;constructor(A){this.sampleRate=A,this.prevInL=new Float32Array(st),this.prevOutL=new Float32Array(st),this.prevInR=new Float32Array(st),this.prevOutR=new Float32Array(st),this.reset()}reset(){this.phase=oa,this.setManual(620),this.rate=.85,this.depth=64/Js,this.reso=16/127,this.mix=1,this.lowGain=0,this.hiGain=0,this.level=104/127,be(this.highShelfStateL),be(this.highShelfStateR),be(this.lowShelfStateL),be(this.lowShelfStateR),this.updateShelves(),this.clearAllPass()}process(A,e,t,s,n,a,o,i,r){let{sendLevelToReverb:h,sendLevelToChorus:c,sendLevelToDelay:I,level:E,manual:B,manualOffset:d,mix:y,lowShelfCoef:D,lowShelfStateR:M,lowShelfStateL:F,highShelfCoef:w,highShelfStateL:S,highShelfStateR:P,prevInL:C,prevInR:x,prevOutL:J,prevOutR:Y,sampleRate:T,depth:U}=this,{prevL:q,prevR:m,phase:v}=this,H=this.rate/this.sampleRate,O=this.reso*yo;for(let b=0;b<r;b++){let G=XA(A[b],D,w,F,S),K=XA(e[b],D,w,M,P),ee=2*Math.abs(v-.5);(v+=H)>=1&&(v-=1);let ie=1-U*ee,Ee=d+B*ie,oe=Math.tan(Math.PI*Ee/T),le=Math.max(-.9999,Math.min(.9999,(1-oe)/(1+oe))),re=G+O*q,Ie=K+O*m;for(let Be=0;Be<st;Be++){let Ue=-le*re+C[Be]+le*J[Be];C[Be]=re,J[Be]=Ue,re=Ue;let Je=-le*Ie+x[Be]+le*Y[Be];x[Be]=Ie,Y[Be]=Je,Ie=Je}q=re,m=Ie;let ke=(G+re*y)*E,_=(K+Ie*y)*E,ce=i+b;t[ce]+=ke,s[ce]+=_;let Te=(ke+_)*.5;n[b]+=Te*h,a[b]+=Te*c,o[b]+=Te*I}this.phase=v,this.prevL=q,this.prevR=m}setParameter(A,e){switch(A){default:break;case 3:{this.setManual(wA.manual(e));break}case 4:{this.rate=wA.rate1(e);break}case 5:{this.depth=e/Js;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=Ks*1.5*ra,this.manual=A):(this.manualOffset=Ks,this.manual=A*ra)}clearAllPass(){this.prevR=0,this.prevL=0;for(let A=0;A<st;A++)this.prevInL[A]=0,this.prevOutL[A]=0,this.prevInR[A]=0,this.prevOutR[A]=0}updateShelves(){NA(this.lowShelfCoef,this.lowGain,200,this.sampleRate,!0),NA(this.highShelfCoef,this.hiGain,4e3,this.sampleRate,!1)}},ha=Math.PI*2,So=.935,ko=2,Do=.01,ga=127,wo=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=294;modWave=1;modRate=3.05;modDepth=96;lowGain=0;hiGain=0;level=ga/127;currentPan=0;phase=0;lsCoeffs={...$e};hsCoeffs={...$e};lsStateR={...Le};lsStateL={...Le};hsStateR={...Le};hsStateL={...Le};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=ga/127,this.currentPan=0,this.phase=0,be(this.hsStateR),be(this.hsStateL),be(this.lsStateR),be(this.lsStateL),this.updateShelves()}process(A,e,t,s,n,a,o,i,r){let{sendLevelToReverb:h,sendLevelToChorus:c,sendLevelToDelay:I,level:E,lsCoeffs:B,lsStateL:d,lsStateR:y,hsCoeffs:D,hsStateR:M,hsStateL:F,modWave:w}=this,S=Math.pow(this.modDepth/127,ko),P=2/(1+S)*So,C=this.modRate/this.sampleRate,{phase:x,currentPan:J}=this;for(let Y=0;Y<r;Y++){let T=XA(A[Y],B,D,d,F),U=XA(e[Y],B,D,y,M),q;switch(w){default:{q=1-4*Math.abs(x-.5);break}case 1:{q=x>.5?-1:-Math.cos((x-.75)*ha);break}case 2:{q=Math.sin(ha*x);break}case 3:{q=1-2*x;break}case 4:{q=2*x-1;break}}(x+=C)>=1&&(x-=1),J+=(q-J)*Do;let m=J*S,v=(1-m)*.5*P,H=(1+m)*.5*P,O=T*E*v,b=U*E*H,G=i+Y;t[G]+=O,s[G]+=b;let K=(O+b)*.5;n[Y]+=K*h,a[Y]+=K*c,o[Y]+=K*I}this.currentPan=J,this.phase=x}setParameter(A,e){switch(A){default:break;case 3:{this.modWave=e;break}case 4:{this.modRate=wA.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(){NA(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),NA(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}},ca=96,bo=.1,vo=.1,Ro=27,Fo=28,Go=-28,Mo=400,Lo=.62,No=.005,ai=5,Ia=ai*.5,ii=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=ca/127;coeffs={...$e};state={...Le};hpCoeffs={...$e};hpState={...Le};phase=0;lsCoeffs={...$e};hsCoeffs={...$e};lsState={...Le};hsState={...Le};sampleRate;lastFc=this.manual;attackCoeff;releaseCoeff;envelope=0;constructor(A){this.sampleRate=A,this.attackCoeff=Math.exp(-1/(bo*A)),this.releaseCoeff=Math.exp(-1/(vo*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=ca/127,this.phase=.2,this.lastFc=this.manual,be(this.hsState),be(this.lsState),be(this.state),be(this.hpState),this.updateShelves()}process(A,e,t,s,n,a,o,i,r){let{sendLevelToReverb:h,sendLevelToChorus:c,sendLevelToDelay:I,level:E,lsCoeffs:B,lsState:d,hsCoeffs:y,hsState:D,coeffs:M,state:F,sampleRate:w,filType:S,manual:P,pan:C,attackCoeff:x,releaseCoeff:J,hpState:Y,hpCoeffs:T}=this,{phase:U,lastFc:q,envelope:m}=this,v=this.rate/this.sampleRate,H=Math.pow(10,this.peak/127*Fo/20),O=Math.pow(10,this.peak/127*Go/20),b=this.polarity===0?-1:ai,G=this.depth/127*b,K=this.sens/127,ee=C+64|0,ie=os[ee],Ee=hs[ee];for(let oe=0;oe<r;oe++){let le=XA((A[oe]+e[oe])*.5,B,y,d,D),re=Math.abs(le);m=re>m?x*m+(1-x)*re:J*m+(1-J)*re;let Ie=2*Math.abs(U-.5)*G;(U+=v)>=1&&(U-=1);let ke=Ie>=Ia||b<0?1:Math.sin(Ie*Math.PI/(2*Ia)),_=P*(1+K*m*Ro),ce=Math.max(20,_*(1+ke*Ie)),Te=Math.max(10,ce);q+=(Te-q)*No,To(M,q,H,w);let Be=le;S===1&&(Uo(T,Mo,O,w),Be=QA(Be,T,Y));let Ue=QA(Be,M,F)*E,Je=Ue*ie,TA=Ue*Ee,uA=i+oe;t[uA]+=Je,s[uA]+=TA,n[oe]+=Ue*h,a[oe]+=Ue*c,o[oe]+=Ue*I}this.phase=U,this.lastFc=q,this.envelope=m}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=wA.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*Lo,t=wA.manual(Math.floor(e)),s=wA.manual(Math.ceil(e)),n=e-Math.floor(e);this.manual=t+(s-t)*n}updateShelves(){NA(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),NA(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}};function To(A,e,t,s){let n=2*Math.PI*e/s,a=Math.cos(n),i=Math.sin(n)/(2*t),r=1-a,h=r/2,c=h,I=1+i,E=-2*a,B=1-i;A.a0=1,A.a1=E/I,A.a2=B/I,A.b0=h/I,A.b1=r/I,A.b2=c/I}function Uo(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,h=-(1+a),c=r,I=1+i,E=-2*a,B=1-i;A.a0=1,A.a1=E/I,A.a2=B/I,A.b0=r/I,A.b1=h/I,A.b2=c/I}var la=127,Po=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=4360;phPan=0;awPan=127;level=la/127;phaser;autoWah;bufferPh;bufferAw;constructor(A,e){this.phaser=new ni(A),this.autoWah=new ii(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=la/127,this.phaser.reset(),this.autoWah.reset(),this.phaser.setParameter(22,127),this.autoWah.setParameter(22,127)}process(A,e,t,s,n,a,o,i,r){let{sendLevelToReverb:h,sendLevelToChorus:c,sendLevelToDelay:I,level:E}=this,{bufferPh:B,bufferAw:d}=this;this.bufferPh.fill(0),this.phaser.process(A,A,B,B,B,B,B,0,r),this.bufferAw.fill(0),this.autoWah.process(e,e,d,d,d,d,d,0,r);let y=this.phPan|0,D=os[y],M=hs[y],F=this.awPan|0,w=os[F],S=hs[F];for(let P=0;P<r;P++){let C=B[P]*.5*E,x=d[P]*.5*E,J=C*D+x*w,Y=C*M+x*S,T=i+P;t[T]+=J,s[T]+=Y;let U=(J+Y)*.5;n[P]+=U*h,a[P]+=U*c,o[P]+=U*I}}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}}}},Ca=127,Ea=Math.PI*2,xo=.01,Ho=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=293;modWave=1;modRate=3.05;modDepth=96;lowGain=0;hiGain=0;level=Ca/127;phase=0;currentGain=1;lsCoeffs={...$e};hsCoeffs={...$e};lsStateR={...Le};lsStateL={...Le};hsStateR={...Le};hsStateL={...Le};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=Ca/127,this.phase=0,this.currentGain=1,be(this.hsStateR),be(this.hsStateL),be(this.lsStateR),be(this.lsStateL),this.updateShelves()}process(A,e,t,s,n,a,o,i,r){let{sendLevelToReverb:h,sendLevelToChorus:c,sendLevelToDelay:I,level:E,lsCoeffs:B,lsStateL:d,lsStateR:y,hsCoeffs:D,hsStateR:M,hsStateL:F,modDepth:w,modWave:S}=this,P=this.modRate/this.sampleRate,{currentGain:C,phase:x}=this;for(let J=0;J<r;J++){let Y=XA(A[J],B,D,d,F),T=XA(e[J],B,D,y,M),U;switch(S){default:{U=1-4*Math.abs(x-.5);break}case 1:{U=x>.5?-1:-Math.cos((x-.75)*Ea);break}case 2:{U=Math.sin(Ea*x);break}case 3:{U=1-2*x;break}case 4:{U=2*x-1;break}}(x+=P)>=1&&(x-=1);let q=1-(U/2+.5)*(w/127);C+=(q-C)*xo;let m=Y*E*C,v=T*E*C,H=i+J;t[H]+=m,s[H]+=v;let O=(m+v)*.5;n[J]+=O*h,a[J]+=O*c,o[J]+=O*I}this.phase=x,this.currentGain=C}setParameter(A,e){switch(A){default:break;case 3:{this.modWave=e;break}case 4:{this.modRate=wA.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(){NA(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),NA(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}},Oo=[Ai,uo,ni,wo,ii,Po,Ho],Yo=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);let e=[.004771345,.003595309,.012734787,.009307483,.022579886,.149625349,.060481839,.1249958,.030509727,.141695508,.089244313,.106280031];for(let t of e)this.makeDelayLine(t);this.taps=Int16Array.from([.008937872,.099929438,.064278754,.067067639,.066866033,.006283391,.035818689,.011861161,.121870905,.041262054,.08981553,.070931756,.011256342,.004065724],t=>Math.round(t*this.sampleRate))}process(A,e,t,s,n){let a=this.preDelay|0,o=this.inputDiffusion1,i=this.inputDiffusion2,r=this.decay,h=this.decayDiffusion1,c=this.decayDiffusion2,I=1-this.damping,E=this.excursionRate/this.sampleRate,B=this.excursionDepth*this.sampleRate/1e3,d=this.pDWrite;for(let y=0;y<n;y++)this.pDelay[(d+y)%this.pDLength]=A[y];for(let y=0;y<n;y++){this.lp1+=this.preLPF*(this.pDelay[(this.pDLength+this.pDWrite-a+y)%this.pDLength]-this.lp1);let D=this.writeDelay(0,this.lp1-o*this.readDelay(0));D=this.writeDelay(1,o*(D-this.readDelay(1))+this.readDelay(0)),D=this.writeDelay(2,o*D+this.readDelay(1)-i*this.readDelay(2)),D=this.writeDelay(3,i*(D-this.readDelay(3))+this.readDelay(2));let M=i*D+this.readDelay(3),F=B*(1+Math.cos(this.excPhase*6.28)),w=B*(1+Math.sin(this.excPhase*6.2847)),S=this.writeDelay(4,M+r*this.readDelay(11)+h*this.readDelayCAt(4,F));this.writeDelay(5,this.readDelayCAt(4,F)-h*S),this.lp2+=I*(this.readDelay(5)-this.lp2),S=this.writeDelay(6,r*this.lp2-c*this.readDelay(6)),this.writeDelay(7,this.readDelay(6)+c*S),S=this.writeDelay(8,M+r*this.readDelay(7)+h*this.readDelayCAt(8,w)),this.writeDelay(9,this.readDelayCAt(8,w)-h*S),this.lp3+=I*(this.readDelay(9)-this.lp3),S=this.writeDelay(10,r*this.lp3-c*this.readDelay(10)),this.writeDelay(11,this.readDelay(10)+c*S);let P=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]),C=y+s;e[C]+=P*this.gain;let x=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[C]+=x*this.gain,this.excPhase+=E;for(let J=0,Y=this.delays[0];J<this.delays.length;Y=this.delays[++J])Y[1]=Y[1]+1&Y[3],Y[2]=Y[2]+1&Y[3]}this.pDWrite=(d+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,o=t[0][a++&n],i=t[0][a++&n],r=t[0][a++&n],h=t[0][a&n],c=(3*(i-r)-o+h)/2,I=2*r+o-(5*i+h)/2,E=(r-o)/2;return((c*s+I)*s+E)*s+i}},Dt=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,o=this.bufferLength,i=this.feedback,r=this.gain;for(let h=0;h<t;h++){let c=s-n;c<0&&(c+=o);let I=a[c];e[h]=I*r,a[s]=A[h]+I*i,++s>=o&&(s=0)}this.writeIndex=s}},qo=1.5,Jo=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 Yo(A),this.delayLeft=new Dt(A),this.delayRight=new Dt(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=.7,this.characterLPFCoefficient=.2;break}case 1:{this.dattorro.damping=.2,this.characterGainCoefficient=.5,this.characterTimeCoefficient=1,this.dattorro.decayDiffusion2=.64,this.dattorro.decayDiffusion1=.6,this.characterLPFCoefficient=.2;break}case 2:{this.dattorro.damping=.56,this.characterGainCoefficient=.55,this.characterTimeCoefficient=1,this.dattorro.decayDiffusion2=.64,this.dattorro.decayDiffusion1=.6,this.characterLPFCoefficient=.1;break}case 3:{this.dattorro.damping=.6,this.characterGainCoefficient=1,this.characterLPFCoefficient=0,this.dattorro.decayDiffusion2=.7,this.dattorro.decayDiffusion1=.66;break}case 4:{this.characterGainCoefficient=.75,this.dattorro.damping=.2,this.characterLPFCoefficient=.2;break}case 5:{this.characterGainCoefficient=.55,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 r=this.delayPreLPF,h=this.preLPFz,c=this.preLPFa;for(let I=0;I<n;I++){let E=A[I];h+=c*(E-h),r[I]=h}this.preLPFz=h,a=r}else a=A;this.delayLeft.process(a,this.delayLeftOutput,n);let o=this.delayGain,i=this.delayLeftOutput;for(let r=0,h=s;r<n;r++,h++){let c=i[r]*o;t[h]+=c,e[h]+=c}return}case 7:{let a;if(this._preLowpass>0){let I=this.delayPreLPF,E=this.preLPFz,B=this.preLPFa;for(let d=0;d<n;d++){let y=A[d];E+=B*(y-E),I[d]=E}this.preLPFz=E,a=I}else a=A;let o=this.panDelayFeedback,{delayLeftInput:i,delayLeftOutput:r,delayRightOutput:h}=this;for(let I=0;I<n;I++)i[I]=a[I]+h[I]*o;this.delayLeft.process(i,r,n),this.delayRight.process(r,h,n);let c=this.delayGain;for(let I=0,E=s;I<n;I++,E++)e[E]+=r[I]*c,t[E]+=h[I]*c;return}}}getSnapshot(){return{level:this._level,preLowpass:this._preLowpass,character:this._character,time:this._time,delayFeedback:this._delayFeedback,preDelayTime:this._preDelayTime}}updateFeedback(){let e=1-(1-this._delayFeedback/127)**1.9;this._character===6?this.delayLeft.feedback=e*.73:(this.delayLeft.feedback=this.delayRight.feedback=0,this.panDelayFeedback=e*.73)}updateLowpass(){this.dattorro.preLPF=Math.min(1,.1+(7-this.preLowpass)/14+this.characterLPFCoefficient)}updateGain(){this.dattorro.gain=this._level/348*this.characterGainCoefficient,this.delayGain=this._level/127*qo}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}},Ko=1.3,Vo=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/128}_rate=0;get rate(){return this._rate}set rate(A){this._rate=A;let e=15.5*(A/127);this.rateInc=e/this.sampleRate}_level=64;get level(){return this._level}set level(A){this.gain=A/127*Ko,this._level=A}process(A,e,t,s,n,a,o){let i=this.leftDelayBuffer,r=this.rightDelayBuffer,h=this.rateInc,c=i.length,I=this.depthSamples,E=this.delaySamples,B=this.gain,d=this.reverbGain,y=this.delayGain,D=this.feedbackGain,M=this._preLowpass>0,F=this.phase,w=this.write,S=this.preLPFz,P=this.preLPFa;for(let C=0;C<o;C++){let x=A[C];M&&(S+=P*(x-S),x=S);let J=2*Math.abs(F-.5),Y=Math.max(1,Math.min(E+J*I,c)),T=w-Y;T<0&&(T+=c);let U=T|0,q=U+1;q>=c&&(q-=c);let m=T-U,v=i[U]*(1-m)+i[q]*m;i[w]=x+v*D;let H=Math.max(1,Math.min(E+(1-J)*I,c)),O=w-H;O<0&&(O+=c),U=O|0,q=U+1,q>=c&&(q-=c),m=O-U;let b=r[U]*(1-m)+r[q]*m,G=C+a;e[G]+=v*B,t[G]+=b*B;let K=(v+b)/2;s[C]+=K*d,n[C]+=K*y,r[w]=x+b*D,++w>=c&&(w=0),(F+=h)>=1&&(F-=1)}this.write=w,this.phase=F,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}}},Xo=[{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}],Zo=1.66,Wo=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 Dt(A),this.delayLeft=new Dt(A),this.delayRight=new Dt(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*Zo}_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 Xo)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 o;if(this._preLowpass>0){let I=this.delayPreLPF,E=this.preLPFz,B=this.preLPFa;for(let d=0;d<a;d++){let y=A[d];E+=B*(y-E),I[d]=E}this.preLPFz=E,o=I}else o=A;let{gain:i,reverbGain:r}=this;this.delayCenter.process(o,this.delayCenterOutput,a);let h=this.delayCenterOutput;for(let I=0,E=n;I<a;I++,E++){let B=h[I];s[I]+=B*r;let d=B*i;e[E]+=d,t[E]+=d}for(let I=0;I<a;I++)h[I]+=A[I];let c=this.delayPreLPF;this.delayLeft.process(h,c,a);for(let I=0,E=n;I<a;I++,E++){let B=c[I];e[E]+=B*i,s[I]+=B*r}this.delayRight.process(h,c,a);for(let I=0,E=n;I<a;I++,E++){let B=c[I];t[E]+=B*i,s[I]+=B*r}}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}},zo=.01,_o=.05,$o=class{voices;midiChannels=[];maxBufferSize;voiceBuffer;insertionInputL;insertionInputR;reverbInput;chorusInput;delayInput;delayActive=!1;soundBankManager=new co(this.updatePresetList.bind(this));keyModifierManager=new Dr;sampleRate;tunings=new Float32Array(16384).fill(-1);masterParameters={...Oa};currentTime=0;midiVolume=1;enableEffects;enableEventSystem;panLeft=Math.cos(Math.PI/4);panRight=Math.cos(Math.PI/4);defaultPreset;drumPreset;gainSmoothingFactor;panSmoothingFactor;eventCallbackHandler;missingPresetHandler;cachedVoices=new Map;setMasterParameter=Io.bind(this);getMasterParameter=lo.bind(this);getAllMasterParameters=Co.bind(this);systemExclusive=fo.bind(this);voiceCount=0;customChannelNumbers=!1;reverbProcessor;chorusProcessor;delayProcessor;insertionFallback=new Ai;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.enableEffects=s.enableEffects,this.enableEventSystem=s.enableEventSystem,this.maxBufferSize=s.maxBufferSize,this.gainSmoothingFactor=zo*(44100/t),this.panSmoothingFactor=_o*(44100/t),Fn.initCache(this.sampleRate);let n=this.maxBufferSize;this.reverbProcessor=s.reverbProcessor??new Jo(t,n),this.chorusProcessor=s.chorusProcessor??new Vo(t,n),this.delayProcessor=s.delayProcessor??new Wo(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 Oo)this.registerInsertionProcessor(a);this.resetInsertionParams(),this.voices=[];for(let a=0;a<this.masterParameters.voiceCap;a++)this.voices.push(new gn(this.sampleRate))}controllerChange(A,e,t){if(this.customChannelNumbers){for(let s of this.midiChannels)s.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.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.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.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.rxChannel===A&&t.channelPressure(e);return}this.midiChannels[A+this.portSelectChannelOffset].channelPressure(e)}pitchWheel(A,e,t=-1){if(this.customChannelNumbers){for(let s of this.midiChannels)s.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.rxChannel===A&&t.programChange(e);return}this.midiChannels[A+this.portSelectChannelOffset].programChange(e)}assignVoice(){for(let e=0;e<this.masterParameters.voiceCap;e++){let t=this.voices[e];if(!t.isActive)return t.priority=1/0,t}if(this.masterParameters.autoAllocateVoices){let e=new gn(this.sampleRate);return this.voices.push(e),this.masterParameters.voiceCap++,this.callEvent("masterParameterChange",{parameter:"voiceCap",value:this.masterParameters.voiceCap}),e}this.assignVoicePriorities();let A=this.voices[0];for(let e=0;e<this.masterParameters.voiceCap;e++){let t=this.voices[e];t.priority<A.priority&&(A=t)}return A.priority=1/0,A}stopAllChannels(A){k("%cStop all received!",l.info);for(let e of this.midiChannels)e.stopAllNotes(A)}processMessage(A,e=0,t=Gi){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.lockedControllers=[],A.preset=void 0;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 o=this.keyModifierManager.getPatch(A,e);a=this.soundBankManager.getPreset(o,this.masterParameters.midiSystem)}return a?this.getVoicesForPreset(a,e,t):[]}createMIDIChannel(A){let e=new ao(this,this.defaultPreset,this.midiChannels.length);this.midiChannels.push(e),A&&(this.callEvent("newChannel",void 0),e.sendChannelProperty(),e.setDrums(!0))}resetAllControllers(A=un){if(this.callEvent("allControllerReset",void 0),this.setMasterParameter("midiSystem",A),this.tunings.fill(-1),this.portSelectChannelOffset=0,this.customChannelNumbers=!1,this.setMIDIVolume(1),this.setReverbMacro(4),this.setChorusMacro(2),this.setDelayMacro(0),this.masterParameters.delayLock||(this.delayActive=!1),this.resetInsertion(),!(!this.drumPreset||!this.defaultPreset))for(let e=0;e<this.midiChannels.length;e++){let t=this.midiChannels[e];t.resetControllers(!1),t.resetPreset();for(let s=0;s<128;s++)this.midiChannels[e].lockedControllers[s]&&this.callEvent("controllerChange",{channel:e,controllerNumber:s,controllerValue:this.midiChannels[e].midiControllers[s]>>7});if(!this.midiChannels[e].lockedControllers[ve+Ae.pitchWheel]){let s=this.midiChannels[e].midiControllers[ve+Ae.pitchWheel];this.callEvent("pitchWheel",{channel:e,pitch:s,midiNote:-1})}if(!this.midiChannels[e].lockedControllers[ve+Ae.channelPressure]){let s=this.midiChannels[e].midiControllers[ve+Ae.channelPressure]>>7;this.callEvent("channelPressure",{channel:e,pressure:s})}}}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 r=this.currentTime;for(;this.eventQueue[0]?.time<=r;){let h=this.eventQueue.shift();h&&this.processMessageInternal(h.message,h.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 r of this.midiChannels)r.clearVoiceCount();this.voiceCount=0;let o=this.masterParameters.voiceCap,i=A.length;for(let r=0;r<o;r++){let h=this.voices[r],c=this.midiChannels[h.channel];if(!h.isActive||c.isMuted)continue;let I=h.channel%i;c.renderVoice(h,this.currentTime,A[I][0],A[I][1],s,a),c.voiceCount++,this.voiceCount++}if(this.enableEffects){let{chorusInput:r,delayInput:h,reverbInput:c,insertionInputR:I,insertionInputL:E}=this;this.insertionActive&&this.insertionProcessor.process(E,I,e,t,c,r,h,s,a),this.chorusProcessor.process(r,e,t,c,h,s,a),this.delayActive&&this.masterParameters.midiSystem!=="xg"&&this.delayProcessor.process(h,e,t,c,s,a),this.reverbProcessor.process(c,e,t,s,a)}for(let r of this.midiChannels)r.updateVoiceCount();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 o=a.sample;if(a.sample.getAudioData()===void 0){ne(`Discarding invalid sample: ${o.name}`);continue}n.push(new Hr(a,e,t,this.sampleRate))}return this.setCachedVoice(A,e,t,n),n}clearCache(){this.cachedVoices.clear()}getInsertionSnapshot(){return{type:this.insertionProcessor.type,params:this.insertionParams.slice(),channels:this.midiChannels.map(A=>A.insertionEnabled)}}callEvent(A,e){this.eventCallbackHandler(A,e)}resetInsertionParams(){this.insertionParams.fill(255),this.insertionParams[20]=40,this.insertionParams[21]=0,this.insertionParams[22]=0}resetInsertion(){this.masterParameters.insertionEffectLock||(this.insertionActive=!1,this.insertionProcessor=this.insertionFallback,this.insertionProcessor.reset(),this.insertionProcessor.sendLevelToReverb=40/127*zt,this.insertionProcessor.sendLevelToChorus=0,this.insertionProcessor.sendLevelToDelay=0,this.resetInsertionParams(),this.callEvent("effectChange",{effect:"insertion",parameter:0,value:this.insertionProcessor.type}))}setMIDIVolume(A){this.midiVolume=Math.pow(A,Math.E)}setMasterTuning(A){A=Math.round(A);for(let e of this.midiChannels)e.setCustomController(Ce.masterTuning,A)}setReverbMacro(A){if(this.masterParameters.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:{ne(`Invalid reverb macro: ${A}`);return}}this.callEvent("effectChange",{effect:"reverb",parameter:"macro",value:A})}setChorusMacro(A){if(this.masterParameters.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:{ne(`Invalid chorus macro: ${A}`);return}}this.callEvent("effectChange",{effect:"chorus",parameter:"macro",value:A})}setDelayMacro(A){if(this.masterParameters.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:{ne(`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)}registerInsertionProcessor(A){let e=new A(this.sampleRate,this.maxBufferSize);this.insertionEffects.set(e.type,e)}processMessageInternal(A,e){let t=fn(A[0]),s=t.channel+e;switch(t.status){case N.noteOn:{let n=A[2];n>0?this.noteOn(s,A[1],n):this.noteOff(s,A[1]);break}case N.noteOff:{this.noteOff(s,A[1]);break}case N.pitchWheel:{this.pitchWheel(s,A[2]<<7|A[1]);break}case N.controllerChange:{this.controllerChange(s,A[1],A[2]);break}case N.programChange:{this.programChange(s,A[1]);break}case N.polyPressure:{this.polyPressure(s,A[1],A[2]);break}case N.channelPressure:{this.channelPressure(s,A[1]);break}case N.systemExclusive:{this.systemExclusive(new $(A.slice(1)),e);break}case N.reset:{this.stopAllChannels(!1),this.resetAllControllers();break}default:break}}assignVoicePriorities(){if(this.lastPriorityAssignmentTime===this.currentTime)return;k("%cPolyphony exceeded, stealing voices",l.warn),this.lastPriorityAssignmentTime=this.currentTime;let A=this.masterParameters.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)e.setPresetLock(!1);this.resetAllControllers()}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:o}=A;return a&&(s=128,n=0),s+n*128+o*16384+2097152*e+268435456*t}},Vs=20;async function jo(A,e,t,s,n,a,o){let i=0,r=0,h=[];for(let E of A.samples){s&&a&&await E.compressSample(a),n&&E.setAudioData(E.getAudioData(),E.sampleRate);let B=E.getRawData(!0);i++,await o?.(E.name,i,A.samples.length),k(`%cEncoded sample %c${i}. ${E.name}%c of %c${A.samples.length}%c. Compressed: %c${E.isCompressed}%c.`,l.info,l.recognized,l.info,l.recognized,l.info,E.isCompressed?l.recognized:l.unrecognized,l.info),r+=B.length+(E.isCompressed?0:92),h.push(B)}r%2!==0&&r++;let c=new $(r+Vs);Ne(c,"LIST"),wt(c,r+Vs-8,4),Ne(c,"sdta"),Ne(c,"smpl"),wt(c,r,4);let I=0;for(let[E,B]of A.samples.entries()){let d=h[E];c.set(d,I+Vs);let y,D;B.isCompressed?(y=I,D=y+d.length):(y=I/2,D=y+d.length/2,I+=92),I+=d.length,e.push(y),t.push(D)}return c}var eh=48e3,Bs=class{name;sampleRate;originalKey;pitchCorrection;linkedSample;sampleType;loopStart;loopEnd;linkedTo=[];dataOverridden=!0;compressedData;audioData;constructor(A,e,t,s,n,a,o){this.name=A,this.sampleRate=e,this.originalKey=t,this.pitchCorrection=s,this.loopStart=a,this.loopEnd=o,this.sampleType=n}get isCompressed(){return this.compressedData!==void 0}get isLinked(){return this.sampleType===xe.rightSample||this.sampleType===xe.leftSample||this.sampleType===xe.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(eh),e=this.getAudioData());let t=await A(e,this.sampleRate);this.setCompressedData(t)}catch(e){ne(`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(xe.monoSample)}setLinkedSample(A,e){if(A.linkedSample)throw new Error(`${A.name} is linked tp ${A.linkedSample.name}. Unlink it first.`);switch(this.linkedSample=A,A.linkedSample=this,e){case xe.leftSample:{this.setSampleType(xe.leftSample),A.setSampleType(xe.rightSample);break}case xe.rightSample:{this.setSampleType(xe.rightSample),A.setSampleType(xe.leftSample);break}case xe.linkedSample:{this.setSampleType(xe.linkedSample),A.setSampleType(xe.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){ne(`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 $(e.buffer)}decodeVorbis(){if(this.audioData)return this.audioData;if(!this.compressedData)throw new Error("Compressed data is missing.");try{let e=Cs.decode(this.compressedData).data[0];if(e===void 0)return ne(`Error decoding sample ${this.name}: Vorbis decode returned undefined.`),new Float32Array(0);for(let t=0;t<e.length;t++)e[t]=Math.max(-1,Math.min(e[t],.999969482421875));return e}catch(A){return ne(`Error decoding sample ${this.name}: ${A}`),new Float32Array(this.loopEnd+1)}}},Ah=class extends Bs{constructor(){super("",44100,60,0,xe.monoSample,0,0)}},cn=16,th=class extends Bs{linkedSampleIndex;s16leData;startByteOffset;endByteOffset;sampleID;constructor(A,e,t,s,n,a,o,i,r,h,c,I){let E=(h&cn)>0;h&=~cn,super(A,a,o,i,h,s-e/2,n-e/2),this.dataOverridden=!1,this.name=A,this.startByteOffset=e,this.endByteOffset=t,this.sampleID=I;let B=c instanceof $?c.currentIndex:0;c instanceof $?E?(this.loopStart+=this.startByteOffset/2,this.loopEnd+=this.startByteOffset/2,this.setCompressedData(c.slice(this.startByteOffset/2+B,this.endByteOffset/2+B))):this.s16leData=c.slice(B+this.startByteOffset,B+this.endByteOffset):this.setAudioData(c.slice(this.startByteOffset/2,this.endByteOffset/2),a),this.linkedSampleIndex=r}getLinkedSample(A){if(this.linkedSample||!this.isLinked)return;let e=A[this.linkedSampleIndex];e?e.linkedSample?(k(`%cInvalid linked sample for ${this.name}: ${e.name} is already linked to ${e.linkedSample.name}`,l.warn),this.unlinkSample()):this.setLinkedSample(e,this.sampleType):(k(`%cInvalid linked sample for ${this.name}. Setting to mono.`,l.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 ne(`Invalid sample ${this.name}! Invalid length: ${A}`),new Float32Array(1);let e=new Float32Array(A/2),t=new Int16Array(this.s16leData.buffer);for(let[s,n]of t.entries())e[s]=n/32768;return this.audioData=e,e}getRawData(A){return this.dataOverridden||this.compressedData?super.getRawData(A):this.s16leData??new Uint8Array(0)}};function Ba(A,e,t=!0){let s=[],n=0;for(;A.data.length>A.data.currentIndex;){let a=sh(n,A.data,e);s.push(a),n++}if(s.pop(),t)for(let a of s)a.getLinkedSample(s);return s}function sh(A,e,t){let s=pe(e,20),n=V(e,4)*2,a=V(e,4)*2,o=V(e,4),i=V(e,4),r=V(e,4),h=e[e.currentIndex++];h>127&&(h=60);let c=wi(e[e.currentIndex++]),I=V(e,2),E=V(e,2);return new th(s,n,a,o,i,r,h,c,I,E,t,A)}function nh(A,e,t){let n=46*(A.samples.length+1),a=new $(n),o=new $(n),i=0;for(let[c,I]of A.samples.entries()){Ne(a,I.name.slice(0,20),20),Ne(o,I.name.slice(20),20);let E=e[c];de(a,E),o.currentIndex+=4;let B=t[c];de(a,B),o.currentIndex+=4;let d=I.loopStart+E,y=I.loopEnd+E;I.isCompressed&&(d-=E,y-=E),de(a,d),de(a,y),de(a,I.sampleRate),a[a.currentIndex++]=I.originalKey,a[a.currentIndex++]=I.pitchCorrection,o.currentIndex+=14;let D=I.linkedSample?A.samples.indexOf(I.linkedSample):0;te(a,Math.max(0,D)&65535),te(o,Math.max(0,D)>>16),i=Math.max(i,D);let M=I.sampleType;I.isCompressed&&(M|=cn),te(a,M),o.currentIndex+=2}Ne(a,"EOS",46),Ne(o,"EOS",46);let r=Qe("shdr",a),h=Qe("shdr",o);return{pdta:r,xdta:h}}function da(A,e=!1){let t=e?A.presets:A.instruments,s=e?"pgen":"igen",n=e?"pmod":"imod",a=e?"pbag":"ibag",o=e?"phdr":"inst",i=e?ho:ro,r=0,h=new Array,c=0,I=new Array,E=new Array,B=new Array,d=0,y=new Array,D=Y=>{h.push(r);let T=Y.getWriteGenerators(A);r+=T.length,E.push(...T),I.push(c);let U=Y.modulators;c+=U.length,B.push(...U)};for(let Y of t){y.push(d),D(Y.globalZone);for(let T of Y.zones)D(T);d+=Y.zones.length+1}E.push(new Ye(0,0,!1)),B.push(new we(0,0,0,0,0)),h.push(r),I.push(c),y.push(d);let M=E.length*ta,F=new $(M);for(let Y of E)Y.write(F);let w=B.length*kt,S=new $(w);for(let Y of B)Y.write(S);let P=I.length*io,C={pdta:new $(P),xdta:new $(P)};for(let[Y,T]of I.entries()){let U=h[Y];te(C.pdta,U&65535),te(C.pdta,T&65535),te(C.xdta,U>>16),te(C.xdta,T>>16)}let x=(t.length+1)*i,J={pdta:new $(x),xdta:new $(x)};for(let[Y,T]of t.entries())T.write(J,y[Y]);return e?(Ne(J.pdta,"EOP",20),J.pdta.currentIndex+=4,te(J.pdta,d&65535),J.pdta.currentIndex+=12,Ne(J.xdta,"",20),J.xdta.currentIndex+=4,te(J.xdta,d>>16),J.xdta.currentIndex+=12):(Ne(J.pdta,"EOI",20),te(J.pdta,d&65535),Ne(J.xdta,"",20),te(J.xdta,d>>16)),{writeXdta:Math.max(r,c,d)>65535,gen:{pdta:Qe(s,F),xdta:Qe(n,new $(ta))},mod:{pdta:Qe(n,S),xdta:Qe(n,new $(kt))},bag:{pdta:Qe(a,C.pdta),xdta:Qe(a,C.xdta)},hdr:{pdta:Qe(o,J.pdta),xdta:Qe(o,J.xdta)}}}var In={compress:!1,compressionFunction:void 0,progressFunction:void 0,writeDefaultModulators:!0,writeExtendedLimits:!0,decompress:!1};async function ah(A,e=In){let t=Qn(e,In);if(t?.compress){if(typeof t?.compressionFunction!="function")throw new TypeError("No compression function supplied but compression enabled.");if(t?.decompress)throw new Error("Decompressed and compressed at the same time.")}Xe("%cSaving soundbank...",l.info),k(`%cCompression: %c${t?.compress||"false"}%c`,l.info,l.recognized,l.info,l.recognized),tA("%cWriting INFO...",l.info);let s=[];A.soundBankInfo.software="SpessaSynth",(t?.compress||A.samples.some(w=>w.isCompressed))&&(A.soundBankInfo.version.major=3,A.soundBankInfo.version.minor=0),t?.decompress&&(A.soundBankInfo.version.major=2,A.soundBankInfo.version.minor=4);let n=(w,S)=>{s.push(Qe(w,fA(S,!0,!0)))},a=new $(4);if(te(a,A.soundBankInfo.version.major),te(a,A.soundBankInfo.version.minor),s.push(Qe("ifil",a)),A.soundBankInfo.romVersion){let w=new $(4);te(w,A.soundBankInfo.romVersion.major),te(w,A.soundBankInfo.romVersion.minor),s.push(Qe("iver",w))}let o=(A.soundBankInfo?.comment??"")+(A.soundBankInfo.subject?`
|
|
6
|
+
${A.soundBankInfo.subject}`:"");for(let[w,S]of Object.entries(A.soundBankInfo)){let P=w,C=S;if(C)switch(P){case"name":{n("INAM",C);break}case"comment":{n("ICMT",o);break}case"copyright":{n("ICOP",C);break}case"creationDate":{n("ICRD",Dn(C));break}case"engineer":{n("IENG",C);break}case"product":{n("IPRD",C);break}case"romInfo":{n("irom",C);break}case"software":{n("ISFT",C);break}case"soundEngine":{n("isng",C);break}case"subject":break}}if(A.defaultModulators.some(w=>!Xa.some(S=>Fe.isIdentical(S,w,!0)))&&t?.writeDefaultModulators){let w=A.defaultModulators;k(`%cWriting %c${w.length}%c default modulators...`,l.info,l.recognized,l.info);let S=kt+w.length*kt,P=new $(S);for(let C of w)C.write(P);wt(P,0,kt),s.push(Qe("DMOD",P))}j(),k("%cWriting SDTA...",l.info);let r=[],h=[],c=await jo(A,r,h,t.compress,t.decompress,t?.compressionFunction,t?.progressFunction);k("%cWriting PDTA...",l.info),k("%cWriting SHDR...",l.info);let I=nh(A,r,h);tA("%cWriting instruments...",l.info);let E=da(A,!1);j(),tA("%cWriting presets...",l.info);let B=da(A,!0);j();let d=[B.hdr,B.bag,B.mod,B.gen,E.hdr,E.bag,E.mod,E.gen,I],y=Ze("pdta",d.map(w=>w.pdta),!0);if(t.writeExtendedLimits&&(E.writeXdta||B.writeXdta||A.presets.some(w=>w.name.length>20)||A.instruments.some(w=>w.name.length>20)||A.samples.some(w=>w.name.length>20))){k("%cWriting the xdta chunk as writeExendedLimits is enabled and at least one condition was met.",l.info,l.value);let w=Ze("xdta",d.map(S=>S.xdta),!0);s.push(w)}let M=Ze("INFO",s,!0);k("%cWriting the output file...",l.info);let F=Ze("RIFF",[fA("sfbk"),M,c,y]);return k(`%cSaved succesfully! Final file size: %c${F.length}`,l.info,l.recognized),j(),F.buffer}var ct=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 j(),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(pe(A.data,4),...e);let t=[];for(;A.data.length>A.data.currentIndex;)t.push(ge(A.data));return t}},Xt=20,Zt=16,rt=class St extends ct{gain=0;unityNote=60;fineTune=0;loops=new Array;fulOptions=2;static copyFrom(e){let t=new St;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 St,s=V(e.data,4);if(s!==Xt&&ne(`Wsmp cbSize mismatch: got ${s}, expected ${Xt}.`),t.unityNote=V(e.data,2),t.fineTune=dn(e.data[e.data.currentIndex++],e.data[e.data.currentIndex++]),t.gain=V(e.data,4)|0,t.fulOptions=V(e.data,4),V(e.data,4)!==0){let a=V(e.data,4);a!==Zt&&ne(`CbSize for loop in wsmp mismatch. Expected ${Zt}, got ${a}.`);let o=V(e.data,4),i=V(e.data,4),r=V(e.data,4);t.loops.push({loopStart:i,loopLength:r,loopType:o})}return t}static fromSFSample(e){let t=new St;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:_n.forward}),t}static fromSFZone(e){let t=new St;t.unityNote=e.getGenerator(g.overridingRootKey,e.sample.originalKey),e.getGenerator(g.scaleTuning,100)===0&&e.keyRange.max-e.keyRange.min===0&&(t.unityNote=e.keyRange.min),t.fineTune=e.fineTuning+e.sample.pitchCorrection;let s=e.getGenerator(g.initialAttenuation,0)*.4;t.gain=-s<<16;let n=e.getGenerator(g.sampleModes,0);if(n!==0){let a=e.sample.loopStart+e.getGenerator(g.startloopAddrsOffset,0)+e.getGenerator(g.startloopAddrsCoarseOffset,0)*32768,o=e.sample.loopEnd+e.getGenerator(g.endloopAddrsOffset,0)+e.getGenerator(g.endloopAddrsCoarseOffset,0)*32768,i;switch(n){case 1:default:{i=0;break}case 3:i=1}t.loops.push({loopType:i,loopStart:a,loopLength:o-a})}return t}toSFZone(e,t){let s=0,n=this.loops[0];n&&(s=n.loopType===_n.loopAndRelease?3:1),s!==0&&e.setGenerator(g.sampleModes,s);let i=-(this.gain>>16)/.4;if(i!==0&&e.setGenerator(g.initialAttenuation,i),e.fineTuning=this.fineTune-t.pitchCorrection,this.unityNote!==t.originalKey&&e.setGenerator(g.overridingRootKey,this.unityNote),n){let r=n.loopStart-t.loopStart,c=n.loopStart+n.loopLength-t.loopEnd;if(r!==0){let I=r%32768;e.setGenerator(g.startloopAddrsOffset,I);let E=Math.trunc(r/32768);E!==0&&e.setGenerator(g.startloopAddrsCoarseOffset,E)}if(c!==0){let I=c%32768;e.setGenerator(g.endloopAddrsOffset,I);let E=Math.trunc(c/32768);E!==0&&e.setGenerator(g.endloopAddrsCoarseOffset,E)}}}write(){let e=new $(Xt+this.loops.length*Zt);de(e,Xt),te(e,this.unityNote),te(e,this.fineTune),de(e,this.gain),de(e,this.fulOptions),de(e,this.loops.length);for(let t of this.loops)de(e,Zt),de(e,t.loopType),de(e,t.loopStart),de(e,t.loopLength);return Qe("wsmp",e)}},Xs={PCM:1,ALAW:6};function ih(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 o=A.length/e,i=new Float32Array(o);if(e===2){let r=new Int16Array(A.buffer);for(let[h,c]of r.entries())i[h]=c/32768}else for(let r=0;r<i.length;r++){let h=V(A,e);a?i[r]=h/n-.5:(h>=t&&(h-=s),i[r]=h/n)}return i}function rh(A,e){let t=A.length/e,s=new Float32Array(t);for(let n=0;n<s.length;n++){let a=V(A,e),o=a^85;o&=127;let i=o>>4,r=o&15;i>0&&(r+=16),r=(r<<4)+8,i>1&&(r=r<<i-1);let h=a>127?r:-r;s[n]=h/32768}return s}var oh=class extends Bs{wFormatTag;bytesPerSample;rawData;constructor(A,e,t,s,n,a,o,i,r){super(A,e,t,s,xe.monoSample,n,a),this.dataOverridden=!1,this.rawData=o.data,this.wFormatTag=i,this.bytesPerSample=r}getAudioData(){if(!this.rawData)return new Float32Array(0);if(!this.audioData){let A;switch(this.wFormatTag){default:{ne(`Failed to decode sample. Unknown wFormatTag: ${this.wFormatTag}`),A=new Float32Array(this.rawData.length/this.bytesPerSample);break}case Xs.PCM:{A=ih(this.rawData,this.bytesPerSample);break}case Xs.ALAW:{A=rh(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===Xs.PCM&&this.bytesPerSample===2?this.rawData:this.encodeS16LE()}},Qa=class ln extends ct{waveSample=new rt;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(B=>B.header==="fmt ");if(!s)throw new Error("No fmt chunk in the wave file!");let n=V(s.data,2),a=V(s.data,2);if(a!==1)throw new Error(`Only mono samples are supported. Fmt reports ${a} channels.`);let o=V(s.data,4);V(s.data,4),V(s.data,2);let r=V(s.data,2)/8,h=t.find(B=>B.header==="data");if(!h)throw new Error("No data chunk in the WAVE chunk!");let c=new ln(n,r,o,h),I=LA(t,"INFO");if(I){let B=ge(I.data);for(;B.header!=="INAM"&&I.data.currentIndex<I.data.length;)B=ge(I.data);B.header==="INAM"&&(c.name=pe(B.data,B.size).trim())}let E=t.find(B=>B.header==="wsmp");return E&&(c.waveSample=rt.read(E)),c}static fromSFSample(e){let t=e.getRawData(!1),s=new ln(1,2,e.sampleRate,new ba("data",t.length,new $(t.buffer)));return s.name=e.name,s.waveSample=rt.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,o=0,i=this.waveSample.loops?.[0];i&&(a=i.loopStart,o=i.loopStart+i.loopLength);let r=new oh(this.name,this.sampleRate,t,s,a,o,this.dataChunk,this.wFormatTag,this.bytesPerSample);e.addSamples(r)}write(){let e=this.writeFmt(),t=this.waveSample.write(),s=Qe("data",this.dataChunk.data),n=Qe("INAM",fA(this.name,!0)),a=Qe("INFO",n,!1,!0);return k(`%cSaved %c${this.name}%c successfully!`,l.recognized,l.value,l.recognized),Ze("wave",[e,t,s,a],!0)}writeFmt(){let e=new $(18);return te(e,this.wFormatTag),te(e,1),de(e,this.sampleRate),de(e,this.sampleRate*2),te(e,2),te(e,this.bytesPerSample*8),Qe("fmt ",e)}},gA=class Cn{source;transform;bipolar;invert;constructor(e=Z.none,t=me.linear,s=!1,n=!1){this.source=e,this.transform=t,this.bipolar=s,this.invert=n}get sourceName(){return Object.keys(Z).find(e=>Z[e]===this.source)??this.source.toString()}get transformName(){return Object.keys(me).find(e=>me[e]===this.transform)??this.transform.toString()}static copyFrom(e){return new Cn(e.source,e.transform,e.bipolar,e.invert)}static fromSFSource(e){let t;if(e.isCC)switch(e.index){case u.modulationWheel:{t=Z.modulationWheel;break}case u.mainVolume:{t=Z.volume;break}case u.pan:{t=Z.pan;break}case u.expressionController:{t=Z.expression;break}case u.chorusDepth:{t=Z.chorus;break}case u.reverbDepth:{t=Z.reverb;break}}else switch(e.index){case Ae.noController:{t=Z.none;break}case Ae.noteOnKeyNum:{t=Z.keyNum;break}case Ae.noteOnVelocity:{t=Z.velocity;break}case Ae.pitchWheel:{t=Z.pitchWheel;break}case Ae.pitchWheelRange:{t=Z.pitchWheelRange;break}case Ae.polyPressure:{t=Z.polyPressure;break}case Ae.channelPressure:t=Z.channelPressure}if(t!==void 0)return new Cn(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 Z.modLfo:case Z.vibratoLfo:case Z.coarseTune:case Z.fineTune:case Z.modEnv:return;case Z.keyNum:{e=Ae.noteOnKeyNum;break}case Z.none:{e=Ae.noController;break}case Z.modulationWheel:{e=u.modulationWheel,t=!0;break}case Z.pan:{e=u.pan,t=!0;break}case Z.reverb:{e=u.reverbDepth,t=!0;break}case Z.chorus:{e=u.chorusDepth,t=!0;break}case Z.expression:{e=u.expressionController,t=!0;break}case Z.volume:{e=u.mainVolume,t=!0;break}case Z.velocity:{e=Ae.noteOnVelocity;break}case Z.polyPressure:{e=Ae.polyPressure;break}case Z.channelPressure:{e=Ae.channelPressure;break}case Z.pitchWheel:{e=Ae.pitchWheel;break}case Z.pitchWheelRange:{e=Ae.pitchWheelRange;break}}if(e!==void 0)return new IA(e,this.transform,t,this.bipolar,this.invert)}},ri=new we(219,0,g.reverbEffectsSend,1e3,0),oi=new we(221,0,g.chorusEffectsSend,1e3,0),Fh=new we(129,0,g.vibLfoToPitch,0,0),Gh=new we(13,0,g.vibLfoToPitch,0,0),hh=new Set([g.sampleModes,g.initialAttenuation,g.keyRange,g.velRange,g.sampleID,g.fineTune,g.coarseTune,g.startAddrsOffset,g.startAddrsCoarseOffset,g.endAddrOffset,g.endAddrsCoarseOffset,g.startloopAddrsOffset,g.startloopAddrsCoarseOffset,g.endloopAddrsOffset,g.endloopAddrsCoarseOffset,g.overridingRootKey,g.exclusiveClass]),pt=class YA{source;control;destination;scale;transform;constructor(e=new gA,t=new gA,s,n,a){this.source=e,this.control=t,this.destination=s,this.transform=n,this.scale=a}get isStaticParameter(){return this.source.source===Z.none&&this.control.source===Z.none}get shortScale(){return this.scale>>16}get transformName(){return Object.keys(me).find(e=>me[e]===this.transform)??this.transform.toString()}get destinationName(){return Object.keys(L).find(e=>L[e]===this.destination)??this.destination.toString()}static read(e){let t=V(e,2),s=V(e,2),n=V(e,2),a=V(e,2),o=V(e,4)|0,i=a&15,r=a>>4&15,h=KA(a,8),c=KA(a,9),I=new gA(s,r,h,c),E=a>>10&15,B=KA(a,14),d=KA(a,15),y=new gA(t,E,B,d);return new YA(y,I,n,i,o)}static fromSFModulator(e,t){let s=c=>{ne(`Failed converting SF modulator into DLS:
|
|
7
7
|
${e.toString()}
|
|
8
|
-
(${
|
|
8
|
+
(${c})`)};if(e.transformType!==0){s("Absolute transform type is not supported");return}if(Fe.isIdentical(e,oi,!0)||Fe.isIdentical(e,ri,!0))return;let n=gA.fromSFSource(e.primarySource);if(!n){s("Invalid primary source");return}let a=gA.fromSFSource(e.secondarySource);if(!a){s("Invalid secondary source");return}let o=YA.fromSFDestination(e.destination,e.transformAmount);if(o===void 0){s("Invalid destination");return}let i=e.transformAmount,r;if(typeof o=="number")r=o;else if(r=o.destination,i=o.amount,o.source!==Z.none){if(a.source!==Z.none&&n.source!==Z.none){s("Articulation generators with secondary source are not supported");return}n.source!==Z.none&&(a=n),n=new gA(o.source,me.linear,o.isBipolar)}let h=new YA(n,a,r,0,i<<16);t.connectionBlocks.push(h)}static copyFrom(e){return new YA(gA.copyFrom(e.source),gA.copyFrom(e.control),e.destination,e.transform,e.scale)}static fromSFGenerator(e,t){if(hh.has(e.generatorType))return;let s=r=>{ne(`Failed converting SF2 generator into DLS:
|
|
9
9
|
${e.toString()}
|
|
10
|
-
(${
|
|
10
|
+
(${r})`)},n=YA.fromSFDestination(e.generatorType,e.generatorValue);if(n===void 0){s("Invalid type");return}let a=new gA,o,i=e.generatorValue;typeof n=="number"?o=n:(o=n.destination,i=n.amount,a.source=n.source,a.bipolar=n.isBipolar),t.connectionBlocks.push(new YA(a,new gA,o,0,i<<16))}static fromSFDestination(e,t){switch(e){default:return;case g.initialAttenuation:return{destination:L.gain,amount:-t,isBipolar:!1,source:Z.none};case g.fineTune:return L.pitch;case g.pan:return L.pan;case g.keyNum:return L.keyNum;case g.reverbEffectsSend:return L.reverbSend;case g.chorusEffectsSend:return L.chorusSend;case g.freqModLFO:return L.modLfoFreq;case g.delayModLFO:return L.modLfoDelay;case g.delayVibLFO:return L.vibLfoDelay;case g.freqVibLFO:return L.vibLfoFreq;case g.delayVolEnv:return L.volEnvDelay;case g.attackVolEnv:return L.volEnvAttack;case g.holdVolEnv:return L.volEnvHold;case g.decayVolEnv:return L.volEnvDecay;case g.sustainVolEnv:return{destination:L.volEnvSustain,amount:1e3-t,isBipolar:!1,source:Z.none};case g.releaseVolEnv:return L.volEnvRelease;case g.delayModEnv:return L.modEnvDelay;case g.attackModEnv:return L.modEnvAttack;case g.holdModEnv:return L.modEnvHold;case g.decayModEnv:return L.modEnvDecay;case g.sustainModEnv:return{destination:L.modEnvSustain,amount:1e3-t,isBipolar:!1,source:Z.none};case g.releaseModEnv:return L.modEnvRelease;case g.initialFilterFc:return L.filterCutoff;case g.initialFilterQ:return L.filterQ;case g.modEnvToFilterFc:return{source:Z.modEnv,destination:L.filterCutoff,amount:t,isBipolar:!1};case g.modEnvToPitch:return{source:Z.modEnv,destination:L.pitch,amount:t,isBipolar:!1};case g.modLfoToFilterFc:return{source:Z.modLfo,destination:L.filterCutoff,amount:t,isBipolar:!0};case g.modLfoToVolume:return{source:Z.modLfo,destination:L.gain,amount:t,isBipolar:!0};case g.modLfoToPitch:return{source:Z.modLfo,destination:L.pitch,amount:t,isBipolar:!0};case g.vibLfoToPitch:return{source:Z.vibratoLfo,destination:L.pitch,amount:t,isBipolar:!0};case g.keyNumToVolEnvHold:return{source:Z.keyNum,destination:L.volEnvHold,amount:t,isBipolar:!0};case g.keyNumToVolEnvDecay:return{source:Z.keyNum,destination:L.volEnvDecay,amount:t,isBipolar:!0};case g.keyNumToModEnvHold:return{source:Z.keyNum,destination:L.modEnvHold,amount:t,isBipolar:!0};case g.keyNumToModEnvDecay:return{source:Z.keyNum,destination:L.modEnvDecay,amount:t,isBipolar:!0};case g.scaleTuning:return{source:Z.keyNum,destination:L.pitch,amount:t*128,isBipolar:!1}}}toString(){return`Source: ${this.source.toString()},
|
|
11
11
|
Control: ${this.control.toString()},
|
|
12
12
|
Scale: ${this.scale} >> 16 = ${this.shortScale},
|
|
13
13
|
Output transform: ${this.transformName}
|
|
14
|
-
Destination: ${this.destinationName}`}write(){let e=new $(12);te(e,this.source.source),te(e,this.control.source),te(e,this.destination);let t=this.transform|this.control.toTransformFlag()<<4|this.source.toTransformFlag()<<10;return te(e,t),
|
|
15
|
-
(invalid destination)`,
|
|
14
|
+
Destination: ${this.destinationName}`}write(){let e=new $(12);te(e,this.source.source),te(e,this.control.source),te(e,this.destination);let t=this.transform|this.control.toTransformFlag()<<4|this.source.toTransformFlag()<<10;return te(e,t),de(e,this.scale),e}toSFGenerator(e){let t=this.destination,s=this.shortScale;switch(t){default:{k(`%cFailed converting DLS articulator into SF generator: %c${this.toString()}%c
|
|
15
|
+
(invalid destination)`,l.warn,l.value,l.unrecognized);return}case L.pan:{e.setGenerator(g.pan,s);break}case L.gain:{e.addToGenerator(g.initialAttenuation,-s/.4);break}case L.filterCutoff:{e.setGenerator(g.initialFilterFc,s);break}case L.filterQ:{e.setGenerator(g.initialFilterQ,s);break}case L.modLfoFreq:{e.setGenerator(g.freqModLFO,s);break}case L.modLfoDelay:{e.setGenerator(g.delayModLFO,s);break}case L.vibLfoFreq:{e.setGenerator(g.freqVibLFO,s);break}case L.vibLfoDelay:{e.setGenerator(g.delayVibLFO,s);break}case L.volEnvDelay:{e.setGenerator(g.delayVolEnv,s);break}case L.volEnvAttack:{e.setGenerator(g.attackVolEnv,s);break}case L.volEnvHold:{e.setGenerator(g.holdVolEnv,s);break}case L.volEnvDecay:{e.setGenerator(g.decayVolEnv,s);break}case L.volEnvRelease:{e.setGenerator(g.releaseVolEnv,s);break}case L.volEnvSustain:{e.setGenerator(g.sustainVolEnv,1e3-s);break}case L.modEnvDelay:{e.setGenerator(g.delayModEnv,s);break}case L.modEnvAttack:{e.setGenerator(g.attackModEnv,s);break}case L.modEnvHold:{e.setGenerator(g.holdModEnv,s);break}case L.modEnvDecay:{e.setGenerator(g.decayModEnv,s);break}case L.modEnvRelease:{e.setGenerator(g.releaseModEnv,s);break}case L.modEnvSustain:{e.setGenerator(g.sustainModEnv,1e3-s);break}case L.reverbSend:{e.setGenerator(g.reverbEffectsSend,s);break}case L.chorusSend:{e.setGenerator(g.chorusEffectsSend,s);break}case L.pitch:{e.fineTuning+=s;break}}}toSFModulator(e){let t=this.shortScale,s,n,a=new IA,o=this.toCombinedSFDestination();if(o){s=o;let r=this.control.toSFSource();if(!r){this.failedConversion("Invalid control");return}n=r}else{let r=this.toSFDestination();if(!r){this.failedConversion("Invalid destination");return}typeof r=="object"?(t=r.newAmount,s=r.gen):s=r;let h=this.source.toSFSource();if(!h){this.failedConversion("Invalid source");return}n=h;let c=this.control.toSFSource();if(!c){this.failedConversion("Invalid control");return}a=c}this.transform!==me.linear&&n.curveType===me.linear&&(n.curveType=this.transform),s===g.initialAttenuation&&((this.source.source===Z.velocity||this.source.source===Z.volume||this.source.source===Z.expression)&&(n.isNegative=!0),t=Math.min(960,Math.max(0,t)));let i=new Fe(n,a,s,t,0);e.addModulators(i)}toCombinedSFDestination(){let e=this.source.source,t=this.destination;return e===Z.vibratoLfo&&t===L.pitch?g.vibLfoToPitch:e===Z.modLfo&&t===L.pitch?g.modLfoToPitch:e===Z.modLfo&&t===L.filterCutoff?g.modLfoToFilterFc:e===Z.modLfo&&t===L.gain?g.modLfoToVolume:e===Z.modEnv&&t===L.filterCutoff?g.modEnvToFilterFc:e===Z.modEnv&&t===L.pitch?g.modEnvToPitch:void 0}failedConversion(e){k(`%cFailed converting DLS articulator into SF2:
|
|
16
16
|
%c${this.toString()}%c
|
|
17
|
-
(${e})`,C.warn,C.value,C.unrecognized)}toSFDestination(){let e=this.shortScale;switch(this.destination){default:case N.none:return;case N.pan:return g.pan;case N.gain:return{gen:g.initialAttenuation,newAmount:-e};case N.pitch:return g.fineTune;case N.keyNum:return g.overridingRootKey;case N.volEnvDelay:return g.delayVolEnv;case N.volEnvAttack:return g.attackVolEnv;case N.volEnvHold:return g.holdVolEnv;case N.volEnvDecay:return g.decayVolEnv;case N.volEnvSustain:return{gen:g.sustainVolEnv,newAmount:1e3-e};case N.volEnvRelease:return g.releaseVolEnv;case N.modEnvDelay:return g.delayModEnv;case N.modEnvAttack:return g.attackModEnv;case N.modEnvHold:return g.holdModEnv;case N.modEnvDecay:return g.decayModEnv;case N.modEnvSustain:return{gen:g.sustainModEnv,newAmount:1e3-e};case N.modEnvRelease:return g.releaseModEnv;case N.filterCutoff:return g.initialFilterFc;case N.filterQ:return g.initialFilterQ;case N.chorusSend:return g.chorusEffectsSend;case N.reverbSend:return g.reverbEffectsSend;case N.modLfoFreq:return g.freqModLFO;case N.modLfoDelay:return g.delayModLFO;case N.vibLfoFreq:return g.freqVibLFO;case N.vibLfoDelay:return g.delayVibLFO}}},hi=class Cn extends gt{connectionBlocks=new Array;mode="dls2";get length(){return this.connectionBlocks.length}copyFrom(e){this.mode=e.mode;for(let t of e.connectionBlocks)this.connectionBlocks.push(mt.copyFrom(t))}fromSFZone(e){this.mode="dls2";let t=new ls;t.copyFrom(e);for(let s of t.generators){let n;switch(s.generatorType){default:continue;case g.keyNumToVolEnvDecay:{n=g.decayVolEnv;break}case g.keyNumToVolEnvHold:{n=g.holdVolEnv;break}case g.keyNumToModEnvDecay:{n=g.decayModEnv;break}case g.keyNumToModEnvHold:n=g.holdModEnv}let a=t.getGenerator(n,void 0),r=s.generatorValue*-128;if(a===void 0)continue;let i=60/128*r,o=a-i;t.setGenerator(s.generatorType,r,!1),t.setGenerator(n,o,!1)}for(let s of t.generators)mt.fromSFGenerator(s,this);for(let s of t.modulators)mt.fromSFModulator(s,this)}read(e){let t=NA(e,"lart"),s=NA(e,"lar2");if(t)for(this.mode="dls1";t.data.currentIndex<t.data.length;){let n=ge(t.data);Cn.verifyHeader(n,"art1","art2");let a=n.data,r=K(a,4);r!==8&&ne(`CbSize in articulation mismatch. Expected 8, got ${r}`);let i=K(a,4);for(let o=0;o<i;o++)this.connectionBlocks.push(mt.read(a))}else if(s)for(this.mode="dls2";s.data.currentIndex<s.data.length;){let n=ge(s.data);Cn.verifyHeader(n,"art2","art1");let a=n.data,r=K(a,4);r!==8&&ne(`CbSize in articulation mismatch. Expected 8, got ${r}`);let i=K(a,4);for(let o=0;o<i;o++)this.connectionBlocks.push(mt.read(a))}}write(){let e=new $(8);Be(e,8),Be(e,this.connectionBlocks.length);let t=this.connectionBlocks.map(n=>n.write()),s=Ze(this.mode==="dls2"?"art2":"art1",[e,...t]);return de(this.mode==="dls2"?"lar2":"lart",s,!1,!0)}toSFZone(e){let t=(s,n,a,r)=>{let i=s/-128;if(e.setGenerator(n,i),i<=120){let o=Math.round(.46875*s),h=this.connectionBlocks.find(I=>I.isStaticParameter&&I.destination===r);h&&e.setGenerator(a,o+h.shortScale)}};for(let s of this.connectionBlocks){let n=s.shortScale,a=s.source.source,r=s.control.source,i=s.destination;if(s.isStaticParameter){s.toSFGenerator(e);continue}if(r===X.none)if(a===X.keyNum){if(i===N.pitch){e.setGenerator(g.scaleTuning,n/128);continue}if(i===N.modEnvHold||i===N.modEnvDecay||i===N.volEnvHold||i==N.volEnvDecay)continue}else{let o=s.toCombinedSFDestination();if(o){e.setGenerator(o,n);continue}}s.toSFModulator(e)}this.mode==="dls1"&&e.addModulators(Fe.copyFrom(oh),Fe.copyFrom(hh));for(let s of this.connectionBlocks){if(s.source.source!==X.keyNum)continue;let n=s.shortScale;switch(s.destination){default:case N.volEnvHold:{t(n,g.keyNumToVolEnvHold,g.holdVolEnv,N.volEnvHold);break}case N.volEnvDecay:{t(n,g.keyNumToVolEnvDecay,g.decayVolEnv,N.volEnvDecay);break}case N.modEnvHold:{t(n,g.keyNumToModEnvHold,g.holdModEnv,N.modEnvHold);break}case N.modEnvDecay:{t(n,g.keyNumToModEnvDecay,g.decayModEnv,N.modEnvDecay);break}}}}},Vs=class jt{channel=1;tableIndex;fusOptions=0;phaseGroup=0;constructor(e){this.tableIndex=e}static copyFrom(e){let t=new jt(e.tableIndex);return t.channel=e.channel,t.phaseGroup=e.phaseGroup,t.fusOptions=e.fusOptions,t}static read(e){let t=K(e.data,2),s=K(e.data,2),n=K(e.data,4),a=K(e.data,4),r=new jt(a);return r.channel=n,r.fusOptions=t,r.phaseGroup=s,r}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 jt(s);switch(t.sample.sampleType){default:case xe.leftSample:case xe.monoSample:{n.channel=Math.trunc(1);break}case xe.rightSample:n.channel=2}return n}write(){let e=new $(12);return te(e,this.fusOptions),te(e,this.phaseGroup),Be(e,this.channel),Be(e,this.tableIndex),de("wlnk",e)}},es=class st extends gt{articulation=new hi;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 st(Vs.copyFrom(e.waveLink),it.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?it.read(n):void 0,r=s.find(p=>p.header==="wlnk");if(!r){ne("Invalid DLS region: missing 'wlnk' chunk! Discarding...");return}let i=Vs.read(r),o=s.find(p=>p.header==="rgnh");if(!o){ne("Invalid DLS region: missing 'rgnh' chunk! Discarding...");return}let h=e[i.tableIndex];h||st.parsingError(`Invalid sample index: ${i.tableIndex}. Samples available: ${e.length}`),a??=h.waveSample;let I=new st(i,a),c=K(o.data,2),l=K(o.data,2),E=K(o.data,2),d=K(o.data,2);return E===0&&d===0&&(d=127,E=0),I.keyRange.max=l,I.keyRange.min=c,I.velRange.max=d,I.velRange.min=E,I.fusOptions=K(o.data,2),I.keyGroup=K(o.data,2),o.data.length-o.data.currentIndex>=2&&(I.usLayer=K(o.data,2)),I.articulation.read(s),I}static fromSFZone(e,t){let s=it.fromSFZone(e),n=Vs.fromSFZone(t,e),a=new st(n,s);return a.keyRange.min=Math.max(e.keyRange.min,0),a.keyRange.max=e.keyRange.max,a.velRange.min=Math.max(e.velRange.min,0),a.velRange.max=e.velRange.max,a.keyGroup=e.getGenerator(g.exclusiveClass,0),a.articulation.fromSFZone(e),a}write(){let e=[this.writeHeader(),this.waveSample.write(),this.waveLink.write(),this.articulation.write()];return Ze("rgn2",e,!0)}toSFZone(e,t){let s=t[this.waveLink.tableIndex];s||st.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(g.exclusiveClass,this.keyGroup),this.waveSample.toSFZone(n,s),this.articulation.toSFZone(n),n.generators=n.generators.filter(a=>a.generatorValue!==rA[a.generatorType].def),n}writeHeader(){let e=new $(12);return te(e,Math.max(this.keyRange.min,0)),te(e,this.keyRange.max),te(e,Math.max(this.velRange.min,0)),te(e,this.velRange.max),te(e,this.fusOptions),te(e,this.keyGroup),te(e,this.usLayer),de("rgnh",e)}},Xs=class As extends gt{articulation=new hi;regions=new Array;name="Unnamed";bankLSB=0;bankMSB=0;isGMGSDrum=!1;program=0;static copyFrom(e){let t=new As;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(es.copyFrom(s));return t}static read(e,t){let s=this.verifyAndReadList(t,"ins "),n=s.find(l=>l.header==="insh");if(!n)throw j(),new Error("No instrument header!");let a="",r=NA(s,"INFO");if(r){let l=ge(r.data);for(;l.header!=="INAM";)l=ge(r.data);a=ye(l.data,l.data.length).trim()}a.length===0&&(a="Unnamed Instrument");let i=new As;i.name=a;let o=K(n.data,4),h=K(n.data,4),I=K(n.data,4);i.program=I&127,i.bankMSB=h>>>8&127,i.bankLSB=h&127,i.isGMGSDrum=h>>>31>0,Xe(`%cParsing %c"${a}"%c...`,C.info,C.recognized,C.info);let c=NA(s,"lrgn");if(!c)throw j(),new Error("No region list!");i.articulation.read(s);for(let l=0;l<o;l++){let E=ge(c.data);this.verifyHeader(E,"LIST");let d=ye(E.data,4);d!=="rgn "&&d!=="rgn2"&&(j(),this.parsingError(`Invalid DLS region! Expected "rgn " or "rgn2" got "${d}"`));let p=es.read(e,E);p&&i.regions.push(p)}return j(),i}static fromSFPreset(e,t){let s=new As;s.name=e.name,s.bankLSB=e.bankLSB,s.bankMSB=e.bankMSB,s.program=e.program,s.isGMGSDrum=e.isGMGSDrum,AA(`%cConverting %c${e.toString()}%c to DLS...`,C.info,C.value,C.info);let n=e.toFlattenedInstrument();for(let a of n.zones)s.regions.push(es.fromSFZone(a,t));return j(),s}write(){Xe(`%cWriting %c${this.name}%c...`,C.info,C.recognized,C.info);let e=[this.writeHeader()],t=this.regions.map(n=>n.write());e.push(Ze("lrgn",t,!0)),this.articulation.length>0&&e.push(this.articulation.write());let s=de("INAM",QA(this.name,!0));return e.push(de("INFO",s,!1,!0)),j(),Ze("ins ",e,!0)}toSFPreset(e){let t=new vt(e);t.name=this.name,t.bankMSB=this.bankMSB,t.bankLSB=this.bankLSB,t.isGMGSDrum=this.isGMGSDrum,t.program=this.program;let s=new bt;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===g.reverbEffectsSend)||s.globalZone.addModulators(Fe.copyFrom(ri)),s.globalZone.modulators.some(n=>n.destination===g.chorusEffectsSend)||s.globalZone.addModulators(Fe.copyFrom(oi)),s.globalZone.generators=s.globalZone.generators.filter(n=>n.generatorValue!==rA[n.generatorType].def),e.addPresets(t),e.addInstruments(s)}writeHeader(){let e=new $(12);Be(e,this.regions.length);let t=(this.bankMSB&127)<<8|this.bankLSB&127;return this.isGMGSDrum&&(t|=1<<31),Be(e,t),Be(e,this.program&127),de("insh",e)}},gi={progressFunction:void 0},Ii=class Bn extends gt{samples=new Array;instruments=new Array;soundBankInfo={name:"Unnamed",creationDate:new Date,software:"SpessaSynth",soundEngine:"DLS Level 2.2",version:{major:2,minor:4}};static read(e){if(!e)throw new Error("No data provided!");let t=new $(e);AA("%cParsing DLS file...",C.info);let s=ge(t,!1);this.verifyHeader(s,"RIFF"),this.verifyText(ye(t,4).toLowerCase(),"dls ");let n=[];for(;t.currentIndex<t.length;)n.push(ge(t));let a=new Bn;a.soundBankInfo.name="Unnamed DLS",a.soundBankInfo.product="SpessaSynth DLS",a.soundBankInfo.comment="(no description)";let r=NA(n,"INFO");if(r)for(;r.data.currentIndex<r.data.length;){let d=ge(r.data),p=d.header,w=ye(d.data,d.size);switch(p){case"INAM":{a.soundBankInfo.name=w;break}case"ICRD":{a.soundBankInfo.creationDate=kn(w);break}case"ICMT":{a.soundBankInfo.comment=w;break}case"ISBJ":{a.soundBankInfo.subject=w;break}case"ICOP":{a.soundBankInfo.copyright=w;break}case"IENG":{a.soundBankInfo.engineer=w;break}case"IPRD":{a.soundBankInfo.product=w;break}case"ISFT":a.soundBankInfo.software=w}}this.printInfo(a);let i=n.find(d=>d.header==="colh");if(!i)return this.parsingError("No colh chunk!"),5;let o=K(i.data,4);D(`%cInstruments amount: %c${o}`,C.info,C.recognized);let h=NA(n,"wvpl");if(!h)return this.parsingError("No wvpl chunk!"),5;let I=this.verifyAndReadList(h,"wvpl");for(let d of I)a.samples.push(Qa.read(d));let c=NA(n,"lins");if(!c)return this.parsingError("No lins chunk!"),5;let l=this.verifyAndReadList(c,"lins");Xe("%cLoading instruments...",C.info),l.length!==o&&ne(`Colh reported invalid amount of instruments. Detected ${l.length}, expected ${o}`);for(let d of l)a.instruments.push(Xs.read(a.samples,d));j();let E=n.find(d=>d.header==="pgal");if(E){D("%cFound the instrument aliasing chunk!",C.recognized);let d=E.data;(d[0]!==0||d[1]!==1||d[2]!==2||d[3]!==3)&&(d.currentIndex+=4);let p=a.instruments.find(L=>Re.isXGDrums(L.bankMSB)||L.isGMGSDrum);if(!p)return ne("MobileBAE aliasing chunk without a drum preset. Aborting!"),a;let w=d.slice(d.currentIndex,d.currentIndex+128);d.currentIndex+=128;for(let L=0;L<128;L++){let F=w[L];if(F===L)continue;let b=p.regions.find(H=>H.keyRange.max===F&&H.keyRange.min===F);if(!b){ne(`Invalid drum alias ${L} to ${F}: region does not exist.`);continue}let S=es.copyFrom(b);S.keyRange.max=L,S.keyRange.min=L,p.regions.push(S)}for(d.currentIndex+=4;d.currentIndex<d.length;){let L=K(d,2),F=L&127,b=L>>7&127,S=d[d.currentIndex++],H=d[d.currentIndex++];H!==0&&ne(`Invalid alias byte. Expected 0, got ${H}`);let B=K(d,2),x=B&127,q=B>>7&127,O=d[d.currentIndex++];H=d[d.currentIndex++],H!==0&&ne(`Invalid alias header. Expected 0, got ${H}`);let M=a.instruments.find(J=>J.bankLSB===x&&J.bankMSB===q&&J.program===O&&!J.isGMGSDrum);if(!M){ne(`Invalid alias. Missing instrument: ${x}:${q}:${O}`);continue}let P=Xs.copyFrom(M);P.bankMSB=b,P.bankLSB=F,P.program=S,a.instruments.push(P)}}return D(`%cParsing finished! %c"${a.soundBankInfo.name||"UNNAMED"}"%c has %c${a.instruments.length}%c instruments and %c${a.samples.length}%c samples.`,C.info,C.recognized,C.info,C.recognized,C.info,C.recognized,C.info),j(),a}static fromSF(e){Xe("%cSaving SF2 to DLS level 2...",C.info);let t=new Bn;t.soundBankInfo={...e.soundBankInfo},t.soundBankInfo.comment=(t.soundBankInfo.comment??"(No description)")+`
|
|
18
|
-
Converted from SF2 to DLS with SpessaSynth`;for(let s of e.samples)t.samples.push(Qa.fromSFSample(s));for(let s of e.presets)t.instruments.push(
|
|
19
|
-
Converted from DLS to SF2 with SpessaSynth`;for(let t of this.samples)t.toSFSample(e);for(let t of this.instruments)t.toSFPreset(e);return e.flush(),D("%cConversion complete!",C.recognized),j(),e}},ci=class ts{static isSF3DecoderReady=cs.isInitialized;soundBankInfo={name:"Unnamed",creationDate:new Date,software:"SpessaSynth",soundEngine:"E-mu 10K2",version:{major:2,minor:4}};presets=[];samples=[];instruments=[];defaultModulators=Xa.map(Fe.copyFrom.bind(Fe));customDefaultModulators=!1;_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 ts;return n.addCompletePresets(s),n.soundBankInfo={...t.soundBankInfo},n}static async getSampleSoundBankFile(){let e=new ts,t=new Float32Array(128);for(let i=0;i<128;i++)t[i]=i/128*2-1;let s=new eh;s.name="Saw",s.originalKey=65,s.pitchCorrection=20,s.loopEnd=127,s.setAudioData(t,44100),e.addSamples(s);let n=new bt;n.name="Saw Wave",n.globalZone.addGenerators(new He(g.initialAttenuation,375),new He(g.releaseVolEnv,-1e3),new He(g.sampleModes,1)),n.createZone(s),n.createZone(s).addGenerators(new He(g.fineTune,-9)),e.addInstruments(n);let r=new vt(e);return r.name="Saw Wave",r.createZone(n),e.addPresets(r),e.soundBankInfo.name="Dummy",e.flush(),await e.writeSF2()}static copyFrom(e){let t=new ts;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 writeDLS(e=gi){return Ii.fromSF(this).write(e)}async writeSF2(e=In){return nh(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 Cs(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 bt;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 vt(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(lA.sorter.bind(lA)),this.parseInternal()}trimSoundBank(e){let t=(n,a)=>{let r=0;for(let i=0;i<n.zones.length;i++){let o=n.zones[i],h=o.keyRange,I=o.velRange,c=!1;for(let l of a)if(l.key>=h.min&&l.key<=h.max&&l.velocity>=I.min&&l.velocity<=I.max){c=!0;break}!c&&o.sample&&(D(`%c${o.sample.name}%c removed from %c${n.name}%c.`,C.recognized,C.info,C.recognized,C.info),n.deleteZone(i)&&(r++,i--,D(`%c${o.sample.name}%c deleted`,C.recognized,C.info)),o.sample.useCount<1&&this.deleteSample(o.sample))}return r};AA("%cTrimming sound bank...",C.info);let s=e.getUsedProgramsAndKeys(this);Xe("%cModifying sound bank...",C.info),D("Detected keys for midi:",s);for(let n=0;n<this.presets.length;n++){let a=this.presets[n],r=s.get(a);if(r===void 0)D(`%cDeleting preset %c${a.name}%c and its zones`,C.info,C.recognized,C.info),this.deletePreset(a),n--;else{let i=[...r].map(h=>{let I=h.split("-");return{key:Number.parseInt(I[0]),velocity:Number.parseInt(I[1])}});Xe(`%cTrimming %c${a.name}`,C.info,C.recognized),D(`Keys for ${a.name}:`,i);let o=0;for(let h=0;h<a.zones.length;h++){let I=a.zones[h],c=I.keyRange,l=I.velRange,E=!1;for(let d of i)if(d.key>=c.min&&d.key<=c.max&&d.velocity>=l.min&&d.velocity<=l.max&&I.instrument){E=!0;let p=t(I.instrument,i);D(`%cTrimmed off %c${p}%c zones from %c${I.instrument.name}`,C.info,C.recognized,C.info,C.recognized);break}!E&&I.instrument&&(o++,a.deleteZone(h),I.instrument.useCount<1&&this.deleteInstrument(I.instrument),h--)}D(`%cTrimmed off %c${o}%c zones from %c${a.name}`,C.info,C.recognized,C.info,C.recognized),j()}}this.removeUnusedElements(),D("%cSound bank modified!",C.recognized),j(),j()}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 ei(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(Re.isXGDrums(t.bankMSB)&&(this._isXGBank=!0,!e.has(t.program))){this._isXGBank=!1,D(`%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.`,C.info,C.value,C.info);break}}printInfo(){for(let[e,t]of Object.entries(this.soundBankInfo)){if(typeof t=="object"&&"major"in t){let s=t;D(`%c${e}: %c"${s.major}.${s.minor}"`,C.info,C.recognized)}D(`%c${e}: %c${t.toLocaleString()}`,C.info,C.recognized)}}},Ih=class extends He{constructor(A){let e=A.currentIndex,t=A[e+1]<<8|A[e],s=En(A[e+2],A[e+3]);A.currentIndex+=4,super(t,s,!1)}};function fa(A){let e=[];for(;A.data.length>A.data.currentIndex;)e.push(new Ih(A.data));return e.pop(),e}var ch=class extends $a{constructor(A,e,t,s){let n=t.find(r=>r.generatorType===g.instrument),a;if(n)a=s[n.generatorValue];else throw new Error("No instrument ID found in preset zone.");if(!a)throw new Error(`Invalid instrument ID: ${n.generatorValue}, available instruments: ${s.length}`);super(A,a),this.addGenerators(...t),this.addModulators(...e)}};function lh(A,e,t,s,n){let a=A.gen,r=A.mod,i=0,o=0;for(let h of n)for(let I=0;I<h.zonesCount;I++){let c=a[o++],l=a[o],E=e.slice(c,l),d=r[i++],p=r[i],w=t.slice(d,p);E.some(L=>L.generatorType===g.instrument)?h.createSoundFontZone(w,E,s):(h.globalZone.addGenerators(...E),h.globalZone.addModulators(...w))}}var Ch=class extends vt{zoneStartIndex;zonesCount=0;constructor(A,e){super(e),this.name=ye(A.data,20).replace(/\d{3}:\d{3}/,""),this.program=K(A.data,2);let t=K(A.data,2);this.bankMSB=t&127,this.isGMGSDrum=(t&128)>0,this.bankLSB=t>>8,this.zoneStartIndex=K(A.data,2),this.library=K(A.data,4),this.genre=K(A.data,4),this.morphology=K(A.data,4)}createSoundFontZone(A,e,t){let s=new ch(this,A,e,t);return this.zones.push(s),s}};function ua(A,e){let t=[];for(;A.data.length>A.data.currentIndex;){let s=new Ch(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 Bh=class extends ja{constructor(A,e,t,s){let n=t.find(r=>r.generatorType===g.sampleID),a;if(n)a=s[n.generatorValue];else throw new Error("No sample ID found in instrument zone.");if(!a)throw new Error(`Invalid sample ID: ${n.generatorValue}, available samples: ${s.length}`);super(A,a),this.addGenerators(...t),this.addModulators(...e)}};function Eh(A,e,t,s,n){let a=A.gen,r=A.mod,i=0,o=0;for(let h of n)for(let I=0;I<h.zonesCount;I++){let c=a[o++],l=a[o],E=e.slice(c,l),d=r[i++],p=r[i],w=t.slice(d,p);E.some(L=>L.generatorType===g.sampleID)?h.createSoundFontZone(w,E,s):(h.globalZone.addGenerators(...E),h.globalZone.addModulators(...w))}}var dh=class extends bt{zoneStartIndex;zonesCount=0;constructor(A){super(),this.name=ye(A.data,20),this.zoneStartIndex=K(A.data,2)}createSoundFontZone(A,e,t){let s=new Bh(this,A,e,t);return this.zones.push(s),s}};function ma(A){let e=[];for(;A.data.length>A.data.currentIndex;){let t=new dh(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 Zs(A){let e=[];for(;A.data.length>A.data.currentIndex;){let t=A.data,s=K(t,2),n=K(t,2),a=En(t[t.currentIndex++],t[t.currentIndex++]),r=K(t,2),i=K(t,2);e.push(new be(s,r,n,a,i))}return e.pop(),e}function Zt(A){let e=[],t=[];for(;A.data.length>A.data.currentIndex;)t.push(K(A.data,2)),e.push(K(A.data,2));return{mod:e,gen:t}}var Qh=class extends ci{sampleDataStartIndex=0;constructor(A,e=!0){if(super(),e)throw new Error("Using the constructor directly is deprecated. Use SoundBankLoader.fromArrayBuffer() instead.");let t=new $(A);AA("%cParsing a SoundFont2 file...",C.info),t||(j(),this.parsingError("No data provided!"));let s=ge(t,!1);this.verifyHeader(s,"riff");let n=ye(t,4).toLowerCase();if(n!=="sfbk"&&n!=="sfpk")throw j(),new SyntaxError(`Invalid soundFont! Expected "sfbk" or "sfpk" got "${n}"`);let a=n==="sfpk",r=ge(t);this.verifyHeader(r,"list");let i=ye(r.data,4);if(i!=="INFO")throw j(),new SyntaxError(`Invalid soundFont! Expected "INFO" or "${i}"`);let o;for(;r.data.length>r.data.currentIndex;){let G=ge(r.data),k=gA(G.data,G.data.length),v=G.header;switch(v){case"ifil":case"iver":{let Y=K(G.data,2),ee=K(G.data,2);v==="ifil"?this.soundBankInfo.version={major:Y,minor:ee}:this.soundBankInfo.romVersion={major:Y,minor:ee};break}case"DMOD":{this.defaultModulators=Zs(G),this.customDefaultModulators=!0;break}case"LIST":{ye(G.data,4)==="xdta"&&(D("%cExtended SF2 found!",C.recognized),o=G);break}case"ICRD":{this.soundBankInfo.creationDate=kn(ye(G.data,G.data.length));break}case"ISFT":{this.soundBankInfo.software=k;break}case"IPRD":{this.soundBankInfo.product=k;break}case"IENG":{this.soundBankInfo.engineer=k;break}case"ICOP":{this.soundBankInfo.copyright=k;break}case"INAM":{this.soundBankInfo.name=k;break}case"ICMT":{this.soundBankInfo.comment=k;break}case"irom":{this.soundBankInfo.romInfo=k;break}case"isng":this.soundBankInfo.soundEngine=k}}this.printInfo();let h={};o!==void 0&&(h.phdr=ge(o.data),h.pbag=ge(o.data),h.pmod=ge(o.data),h.pgen=ge(o.data),h.inst=ge(o.data),h.ibag=ge(o.data),h.imod=ge(o.data),h.igen=ge(o.data),h.shdr=ge(o.data));let I=ge(t,!1);this.verifyHeader(I,"list"),this.verifyText(ye(t,4),"sdta"),D("%cVerifying smpl chunk...",C.warn);let c=ge(t,!1);this.verifyHeader(c,"smpl");let l;if(a){D("%cSF2Pack detected, attempting to decode the smpl chunk...",C.info);try{l=cs.decode(t.buffer.slice(t.currentIndex,t.currentIndex+I.size-12)).data[0]}catch(G){throw j(),new Error(`SF2Pack Ogg Vorbis decode error: ${G}`)}D(`%cDecoded the smpl chunk! Length: %c${l.length}`,C.info,C.value)}else l=t,this.sampleDataStartIndex=t.currentIndex;D(`%cSkipping sample chunk, length: %c${I.size-12}`,C.info,C.value),t.currentIndex+=I.size-12,D("%cLoading preset data chunk...",C.warn);let E=ge(t);this.verifyHeader(E,"list"),ye(E.data,4);let d=ge(E.data);this.verifyHeader(d,"phdr");let p=ge(E.data);this.verifyHeader(p,"pbag");let w=ge(E.data);this.verifyHeader(w,"pmod");let L=ge(E.data);this.verifyHeader(L,"pgen");let F=ge(E.data);this.verifyHeader(F,"inst");let b=ge(E.data);this.verifyHeader(b,"ibag");let S=ge(E.data);this.verifyHeader(S,"imod");let H=ge(E.data);this.verifyHeader(H,"igen");let B=ge(E.data);this.verifyHeader(B,"shdr"),D("%cParsing samples...",C.info),t.currentIndex=this.sampleDataStartIndex;let x=Ea(B,l,o===void 0);if(o&&h.shdr){let G=Ea(h.shdr,new Float32Array(1),!1);if(G.length===x.length)for(let[k,v]of x.entries())v.name+=G[k].name,v.linkedSampleIndex|=G[k].linkedSampleIndex<<16}for(let G of x)G.name=G.name.trim();this.samples.push(...x);let q=fa(H),O=Zs(S),M=ma(F);if(o&&h.inst){let G=ma(h.inst);if(G.length===M.length){for(let[k,v]of M.entries())v.name+=G[k].name,v.zoneStartIndex|=G[k].zoneStartIndex;for(let[k,v]of M.entries())k<M.length-1&&(v.zonesCount=M[k+1].zoneStartIndex-v.zoneStartIndex)}}for(let G of M)G.name=G.name.trim();this.instruments.push(...M);let P=Zt(b);if(o&&h.ibag){let G=Zt(h.ibag);for(let k=0;k<P.mod.length;k++)P.mod[k]|=G.mod[k]<<16;for(let k=0;k<P.gen.length;k++)P.gen[k]|=G.gen[k]<<16}Eh(P,q,O,this.samples,M);let J=fa(L),y=Zs(w),U=ua(d,this);if(o&&h.phdr){let G=ua(h.phdr,this);if(G.length===U.length){for(let[k,v]of U.entries())v.name+=G[k].name,v.zoneStartIndex|=G[k].zoneStartIndex;for(let[k,v]of U.entries())k<U.length-1&&(v.zonesCount=U[k+1].zoneStartIndex-v.zoneStartIndex)}}for(let G of U)G.name=G.name.trim();this.addPresets(...U);let _=Zt(p);if(o&&h.pbag){let G=Zt(h.pbag);for(let k=0;k<_.mod.length;k++)_.mod[k]|=G.mod[k]<<16;for(let k=0;k<_.gen.length;k++)_.gen[k]|=G.gen[k]<<16}lh(_,J,y,this.instruments,U),this.flush(),D(`%cParsing finished! %c"${this.soundBankInfo.name}"%c has %c${this.presets.length}%c presets,
|
|
20
|
-
%c${this.instruments.length}%c instruments and %c${this.samples.length}%c samples.`,C.info,C.recognized,C.info,C.recognized,C.info,C.recognized,C.info,C.recognized,C.info),j()}verifyHeader(A,e){A.header.toLowerCase()!==e.toLowerCase()&&(j(),this.parsingError(`Invalid chunk header! Expected "${e.toLowerCase()}" got "${A.header.toLowerCase()}"`))}verifyText(A,e){A.toLowerCase()!==e.toLowerCase()&&(j(),this.parsingError(`Invalid FourCC: Expected "${e.toLowerCase()}" got "${A.toLowerCase()}"\``))}},Rt=class{static fromArrayBuffer(A){let e=A.slice(8,12),t=new $(e);return ye(t,4).toLowerCase()==="dls "?this.loadDLS(A):new Qh(A,!1)}static loadDLS(A){return Ii.read(A).toSF()}},li=class{processorInitialized=cs.isInitialized;sampleRate;onEventCall;process;processSplit;systemExclusive;controllerChange;noteOn;noteOff;polyPressure;channelPressure;pitchWheel;programChange;processMessage;synthCore;savedSnapshot;constructor(A,e={}){let t=dn(e,kr);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 _o(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<va;n++)this.synthCore.createMIDIChannel(!1);this.processorInitialized.then(()=>{D("%cSpessaSynth is ready!",C.recognized)})}get enableEffects(){return this.synthCore.enableEffects}set enableEffects(A){this.synthCore.enableEffects=A}get enableEventSystem(){return this.synthCore.enableEventSystem}set enableEventSystem(A){this.synthCore.enableEventSystem=A}get midiChannels(){return this.synthCore.midiChannels}get totalVoicesAmount(){return this.synthCore.voiceCount}get currentSynthTime(){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}renderAudio(A,e,t,s=0,n=0){let a=this.synthCore.maxBufferSize;if(n>a){let r=0;for(;r<n;){let i=Math.min(a,n-r);this.synthCore.process(A[0],A[1],s+r,i),r+=i}}else this.synthCore.process(A[0],A[1],s,n)}renderAudioSplit(A,e,t,s=0,n=0){let a=this.synthCore.maxBufferSize;if(n>a){let r=0;for(;r<n;){let i=Math.min(a,n-r);this.synthCore.processSplit(t,A[0],A[1],s+r,i),r+=i}}else this.synthCore.processSplit(t,A[0],A[1],s,n)}onMissingPreset=(A,e)=>{ne(`No preset found for ${lA.toMIDIString(A)}! Did you forget to add a sound bank?`)};setMasterParameter(A,e){this.synthCore.setMasterParameter(A,e)}getMasterParameter(A){return this.synthCore.getMasterParameter(A)}getAllMasterParameters(){return this.synthCore.getAllMasterParameters()}resetAllControllers(A=fn){this.synthCore.resetAllControllers(A)}applySynthesizerSnapshot(A){this.savedSnapshot=A,A.apply(this),D("%cFinished applying snapshot!",C.info),this.resetAllControllers()}getSnapshot(){return wn.create(this)}getInsertionSnapshot(){return this.synthCore.getInsertionSnapshot()}setEmbeddedSoundBank(A,e){let t=Rt.fromArrayBuffer(A);this.synthCore.soundBankManager.addSoundBank(t,Ot,e);let s=this.synthCore.soundBankManager.priorityOrder;s.pop(),s.unshift(Ot),this.synthCore.soundBankManager.priorityOrder=s,this.savedSnapshot!==void 0&&this.applySynthesizerSnapshot(this.savedSnapshot),D(`%cEmbedded sound bank set at offset %c${e}`,C.recognized,C.value)}clearEmbeddedBank(){this.synthCore.soundBankManager.soundBankList.some(A=>A.id===Ot)&&this.synthCore.soundBankManager.deleteSoundBank(Ot)}createMIDIChannel(){this.synthCore.createMIDIChannel(!0)}stopAllChannels(A=!1){this.synthCore.stopAllChannels(A)}destroySynthProcessor(){this.synthCore.destroySynthProcessor()}killVoices(A){ne(`killVoices is deprecated, don't use it! Amount requested: ${A}`)}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 Bs=RA.consoleColors;var Ci="spessasynth-worklet-processor";function Bi(A,e){return{...e,...A}}var Ei={skipToFirstNoteOn:!0,initialPlaybackRate:1};var Ln=class extends gs{events=[];constructor(e){super(),super.copyFrom(e),this.events=[]}},Es=class A extends XA{tracks;embeddedSoundBank=void 0;embeddedSoundBankSize;constructor(e){super(),super.copyMetadataFrom(e),this.tracks=e.tracks.map(t=>new Ln(t)),this.embeddedSoundBankSize=e instanceof A?e.embeddedSoundBankSize:e?.embeddedSoundBank?.byteLength}};var ds={shuffleOn:1,shuffleOff:2,index:3};var di=1,Qs=class{synthesizer;sequencers=new Array;post;lastSequencerSync=0;alive=!1;enableEventSystem;constructor(e,t,s){this.synthesizer=new li(e,t),this.enableEventSystem=t.enableEventSystem??!1,this.post=s,this.synthesizer.onEventCall=n=>{this.post({type:"eventCall",data:n,currentTime:this.synthesizer.currentSynthTime})}}createNewSequencer(){let e=new xa(this.synthesizer),t=this.sequencers.length;this.sequencers.push(e),e.onEventCall=s=>{if(this.enableEventSystem){if(s.type==="songListChange"){let a=s.data.newSongList.map(r=>new Es(r));this.post({type:"sequencerReturn",data:{type:s.type,data:{newSongList:a,shuffledSongIndexes:e.shuffledSongIndexes},id:t},currentTime:this.synthesizer.currentSynthTime});return}this.post({type:"sequencerReturn",data:{...s,id:t},currentTime:this.synthesizer.currentSynthTime})}}}postReady(e,t,s=[]){this.post({type:"isFullyInitialized",data:{type:e,data:t},currentTime:this.synthesizer.currentSynthTime},s)}postProgress(e,t){this.post({type:"renderingProgress",data:{type:e,data:t},currentTime:this.synthesizer.currentSynthTime})}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)){RA.SpessaSynthWarn(`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"customCcChange":{s?.setCustomController(e.data.ccNumber,e.data.ccValue);break}case"ccReset":{t===ht?this.synthesizer.resetAllControllers():s?.resetControllers();break}case"stopAll":{t===ht?this.synthesizer.stopAllChannels(e.data===1):s?.stopAllNotes(e.data===1);break}case"muteChannel":{s?.muteChannel(e.data);break}case"addNewChannel":{this.synthesizer.createMIDIChannel();break}case"setMasterParameter":{this.synthesizer.setMasterParameter(e.data.type,e.data.data);break}case"setDrums":{s?.setDrums(e.data);break}case"transposeChannel":{s?.transposeChannel(e.data.semitones,e.data.force);break}case"lockController":{if(e.data.controllerNumber===ht)s?.setPresetLock(e.data.isLocked);else{if(!s)return;s.lockedControllers[e.data.controllerNumber]=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?XA.copyFrom(o):XA.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.currentSynthTime})}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 ds.shuffleOff:{n.shuffleMode=!1;break}case ds.shuffleOn:{n.shuffleMode=!0;break}case ds.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.currentSynthTime});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=Rt.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.currentSynthTime})}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=wn.create(this.synthesizer);this.postReady("synthesizerSnapshot",n);break}case"requestNewSequencer":{this.createNewSequencer();break}case"setLogLevel":{wa(e.data.enableInfo,e.data.enableWarning,e.data.enableGroup);break}case"destroyWorklet":{this.alive=!1,this.synthesizer.destroySynthProcessor(),this.destroy();break}default:{RA.SpessaSynthWarn("Unrecognized event!",e);break}}}};var fs=class extends Qs{alive=!0;oneOutputMode;port;constructor(e,t,s,n){super(e,{enableEffects:!n.oneOutput,enableEventSystem:n?.enableEventSystem,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 n of this.sequencers)n.processTick();if(this.oneOutputMode){let n=t[0],a=[];for(let r=0;r<32;r+=2)a.push([n[r],n[r+1]]);this.synthesizer.enableEffects=!1,this.synthesizer.processSplit(a,n[0],n[0])}else this.synthesizer.processSplit(t.slice(1),t[0][0],t[0][1]);let s=this.synthesizer.currentSynthTime;if(this.enableEventSystem&&s-this.lastSequencerSync>di){for(let n=0;n<this.sequencers.length;n++)this.post({type:"sequencerReturn",data:{type:"sync",data:this.sequencers[n].currentTime,id:n},currentTime:s});this.lastSequencerSync=s}return!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(Rt.fromArrayBuffer(a.soundBankBuffer),`bank-${n}`,a.bankOffset)}catch(r){this.post({type:"soundBankError",data:r,currentTime:this.synthesizer.currentSynthTime})}e.snapshot!==void 0&&this.synthesizer.applySynthesizerSnapshot(e.snapshot),RA.SpessaSynthInfo("%cRendering enabled! Starting render.",Bs.info),t.loopCount=e.loopCount,this.synthesizer.setMasterParameter("autoAllocateVoices",!0);let s=Bi(e.sequencerOptions,Ei);t.skipToFirstNoteOn=s.skipToFirstNoteOn,t.playbackRate=s.initialPlaybackRate;try{t.loadNewSongList([XA.copyFrom(e.midiSequence)]),t.play()}catch(n){console.error(n),this.post({type:"sequencerReturn",data:{type:"midiError",data:n,id:0},currentTime:this.synthesizer.currentSynthTime})}this.postReady("startOfflineRender",null)}};var Nn=class extends AudioWorkletProcessor{process;core;constructor(e){super(),this.core=new fs(sampleRate,currentTime,this.port,e.processorOptions),this.process=this.core.process.bind(this.core)}};registerProcessor(Ci,Nn);RA.SpessaSynthInfo("%cProcessor successfully registered!",Bs.recognized);
|
|
17
|
+
(${e})`,l.warn,l.value,l.unrecognized)}toSFDestination(){let e=this.shortScale;switch(this.destination){default:case L.none:return;case L.pan:return g.pan;case L.gain:return{gen:g.initialAttenuation,newAmount:-e};case L.pitch:return g.fineTune;case L.keyNum:return g.overridingRootKey;case L.volEnvDelay:return g.delayVolEnv;case L.volEnvAttack:return g.attackVolEnv;case L.volEnvHold:return g.holdVolEnv;case L.volEnvDecay:return g.decayVolEnv;case L.volEnvSustain:return{gen:g.sustainVolEnv,newAmount:1e3-e};case L.volEnvRelease:return g.releaseVolEnv;case L.modEnvDelay:return g.delayModEnv;case L.modEnvAttack:return g.attackModEnv;case L.modEnvHold:return g.holdModEnv;case L.modEnvDecay:return g.decayModEnv;case L.modEnvSustain:return{gen:g.sustainModEnv,newAmount:1e3-e};case L.modEnvRelease:return g.releaseModEnv;case L.filterCutoff:return g.initialFilterFc;case L.filterQ:return g.initialFilterQ;case L.chorusSend:return g.chorusEffectsSend;case L.reverbSend:return g.reverbEffectsSend;case L.modLfoFreq:return g.freqModLFO;case L.modLfoDelay:return g.delayModLFO;case L.vibLfoFreq:return g.freqVibLFO;case L.vibLfoDelay:return g.delayVibLFO}}},hi=class En extends ct{connectionBlocks=new Array;mode="dls2";get length(){return this.connectionBlocks.length}copyFrom(e){this.mode=e.mode;for(let t of e.connectionBlocks)this.connectionBlocks.push(pt.copyFrom(t))}fromSFZone(e){this.mode="dls2";let t=new Es;t.copyFrom(e);for(let s of t.generators){let n;switch(s.generatorType){default:continue;case g.keyNumToVolEnvDecay:{n=g.decayVolEnv;break}case g.keyNumToVolEnvHold:{n=g.holdVolEnv;break}case g.keyNumToModEnvDecay:{n=g.decayModEnv;break}case g.keyNumToModEnvHold:n=g.holdModEnv}let a=t.getGenerator(n,void 0),o=s.generatorValue*-128;if(a===void 0)continue;let i=60/128*o,r=a-i;t.setGenerator(s.generatorType,o,!1),t.setGenerator(n,r,!1)}for(let s of t.generators)pt.fromSFGenerator(s,this);for(let s of t.modulators)pt.fromSFModulator(s,this)}read(e){let t=LA(e,"lart"),s=LA(e,"lar2");if(t)for(this.mode="dls1";t.data.currentIndex<t.data.length;){let n=ge(t.data);En.verifyHeader(n,"art1","art2");let a=n.data,o=V(a,4);o!==8&&ne(`CbSize in articulation mismatch. Expected 8, got ${o}`);let i=V(a,4);for(let r=0;r<i;r++)this.connectionBlocks.push(pt.read(a))}else if(s)for(this.mode="dls2";s.data.currentIndex<s.data.length;){let n=ge(s.data);En.verifyHeader(n,"art2","art1");let a=n.data,o=V(a,4);o!==8&&ne(`CbSize in articulation mismatch. Expected 8, got ${o}`);let i=V(a,4);for(let r=0;r<i;r++)this.connectionBlocks.push(pt.read(a))}}write(){let e=new $(8);de(e,8),de(e,this.connectionBlocks.length);let t=this.connectionBlocks.map(n=>n.write()),s=Ze(this.mode==="dls2"?"art2":"art1",[e,...t]);return Qe(this.mode==="dls2"?"lar2":"lart",s,!1,!0)}toSFZone(e){let t=(s,n,a,o)=>{let i=s/-128;if(e.setGenerator(n,i),i<=120){let r=Math.round(.46875*s),h=this.connectionBlocks.find(c=>c.isStaticParameter&&c.destination===o);h&&e.setGenerator(a,r+h.shortScale)}};for(let s of this.connectionBlocks){let n=s.shortScale,a=s.source.source,o=s.control.source,i=s.destination;if(s.isStaticParameter){s.toSFGenerator(e);continue}if(o===Z.none)if(a===Z.keyNum){if(i===L.pitch){e.setGenerator(g.scaleTuning,n/128);continue}if(i===L.modEnvHold||i===L.modEnvDecay||i===L.volEnvHold||i==L.volEnvDecay)continue}else{let r=s.toCombinedSFDestination();if(r){e.setGenerator(r,n);continue}}s.toSFModulator(e)}for(let s of this.connectionBlocks){if(s.source.source!==Z.keyNum)continue;let n=s.shortScale;switch(s.destination){default:case L.volEnvHold:{t(n,g.keyNumToVolEnvHold,g.holdVolEnv,L.volEnvHold);break}case L.volEnvDecay:{t(n,g.keyNumToVolEnvDecay,g.decayVolEnv,L.volEnvDecay);break}case L.modEnvHold:{t(n,g.keyNumToModEnvHold,g.holdModEnv,L.modEnvHold);break}case L.modEnvDecay:{t(n,g.keyNumToModEnvDecay,g.decayModEnv,L.modEnvDecay);break}}}if(this.mode==="dls1"){e.setGenerator(g.delayVibLFO,e.getGenerator(g.delayModLFO,null)),e.setGenerator(g.freqVibLFO,e.getGenerator(g.freqModLFO,null)),e.setGenerator(g.vibLfoToPitch,e.getGenerator(g.modLfoToPitch,null)),e.setGenerator(g.modLfoToPitch,null);for(let s of e.modulators)s.destination===g.modLfoToPitch&&(s.destination=g.vibLfoToPitch)}}},Zs=class es{channel=1;tableIndex;fusOptions=0;phaseGroup=0;constructor(e){this.tableIndex=e}static copyFrom(e){let t=new es(e.tableIndex);return t.channel=e.channel,t.phaseGroup=e.phaseGroup,t.fusOptions=e.fusOptions,t}static read(e){let t=V(e.data,2),s=V(e.data,2),n=V(e.data,4),a=V(e.data,4),o=new es(a);return o.channel=n,o.fusOptions=t,o.phaseGroup=s,o}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 es(s);switch(t.sample.sampleType){default:case xe.leftSample:case xe.monoSample:{n.channel=Math.trunc(1);break}case xe.rightSample:n.channel=2}return n}write(){let e=new $(12);return te(e,this.fusOptions),te(e,this.phaseGroup),de(e,this.channel),de(e,this.tableIndex),Qe("wlnk",e)}},As=class nt extends ct{articulation=new hi;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 nt(Zs.copyFrom(e.waveLink),rt.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(y=>y.header==="wsmp"),a=n?rt.read(n):void 0,o=s.find(y=>y.header==="wlnk");if(!o){ne("Invalid DLS region: missing 'wlnk' chunk! Discarding...");return}let i=Zs.read(o),r=s.find(y=>y.header==="rgnh");if(!r){ne("Invalid DLS region: missing 'rgnh' chunk! Discarding...");return}let h=e[i.tableIndex];h||nt.parsingError(`Invalid sample index: ${i.tableIndex}. Samples available: ${e.length}`),a??=h.waveSample;let c=new nt(i,a),I=V(r.data,2),E=V(r.data,2),B=V(r.data,2),d=V(r.data,2);return B===0&&d===0&&(d=127,B=0),c.keyRange.max=E,c.keyRange.min=I,c.velRange.max=d,c.velRange.min=B,c.fusOptions=V(r.data,2),c.keyGroup=V(r.data,2),r.data.length-r.data.currentIndex>=2&&(c.usLayer=V(r.data,2)),c.articulation.read(s),c}static fromSFZone(e,t){let s=rt.fromSFZone(e),n=Zs.fromSFZone(t,e),a=new nt(n,s);return a.keyRange.min=Math.max(e.keyRange.min,0),a.keyRange.max=e.keyRange.max,a.velRange.min=Math.max(e.velRange.min,0),a.velRange.max=e.velRange.max,a.keyGroup=e.getGenerator(g.exclusiveClass,0),a.articulation.fromSFZone(e),a}write(){let e=[this.writeHeader(),this.waveSample.write(),this.waveLink.write(),this.articulation.write()];return Ze("rgn2",e,!0)}toSFZone(e,t){let s=t[this.waveLink.tableIndex];s||nt.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(g.exclusiveClass,this.keyGroup),this.waveSample.toSFZone(n,s),this.articulation.toSFZone(n),n.generators=n.generators.filter(a=>a.generatorValue!==hA[a.generatorType].def),n}writeHeader(){let e=new $(12);return te(e,Math.max(this.keyRange.min,0)),te(e,this.keyRange.max),te(e,Math.max(this.velRange.min,0)),te(e,this.velRange.max),te(e,this.fusOptions),te(e,this.keyGroup),te(e,this.usLayer),Qe("rgnh",e)}},Ws=class ts extends ct{articulation=new hi;regions=new Array;name="Unnamed";bankLSB=0;bankMSB=0;isGMGSDrum=!1;program=0;static copyFrom(e){let t=new ts;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(As.copyFrom(s));return t}static read(e,t){let s=this.verifyAndReadList(t,"ins "),n=s.find(E=>E.header==="insh");if(!n)throw j(),new Error("No instrument header!");let a="",o=LA(s,"INFO");if(o){let E=ge(o.data);for(;E.header!=="INAM";)E=ge(o.data);a=pe(E.data,E.data.length).trim()}a.length===0&&(a="Unnamed Instrument");let i=new ts;i.name=a;let r=V(n.data,4),h=V(n.data,4),c=V(n.data,4);i.program=c&127,i.bankMSB=h>>>8&127,i.bankLSB=h&127,i.isGMGSDrum=h>>>31>0,Xe(`%cParsing %c"${a}"%c...`,l.info,l.recognized,l.info);let I=LA(s,"lrgn");if(!I)throw j(),new Error("No region list!");i.articulation.read(s);for(let E=0;E<r;E++){let B=ge(I.data);this.verifyHeader(B,"LIST");let d=pe(B.data,4);d!=="rgn "&&d!=="rgn2"&&(j(),this.parsingError(`Invalid DLS region! Expected "rgn " or "rgn2" got "${d}"`));let y=As.read(e,B);y&&i.regions.push(y)}return j(),i}static fromSFPreset(e,t){let s=new ts;s.name=e.name,s.bankLSB=e.bankLSB,s.bankMSB=e.bankMSB,s.program=e.program,s.isGMGSDrum=e.isGMGSDrum,tA(`%cConverting %c${e.toString()}%c to DLS...`,l.info,l.value,l.info);let n=e.toFlattenedInstrument();for(let a of n.zones)s.regions.push(As.fromSFZone(a,t));return j(),s}write(){Xe(`%cWriting %c${this.name}%c...`,l.info,l.recognized,l.info);let e=[this.writeHeader()],t=this.regions.map(n=>n.write());e.push(Ze("lrgn",t,!0)),this.articulation.length>0&&e.push(this.articulation.write());let s=Qe("INAM",fA(this.name,!0));return e.push(Qe("INFO",s,!1,!0)),j(),Ze("ins ",e,!0)}toSFPreset(e){let t=new Rt(e);t.name=this.name,t.bankMSB=this.bankMSB,t.bankLSB=this.bankLSB,t.isGMGSDrum=this.isGMGSDrum,t.program=this.program;let s=new vt;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===g.reverbEffectsSend)||s.globalZone.addModulators(Fe.copyFrom(ri)),s.globalZone.modulators.some(n=>n.destination===g.chorusEffectsSend)||s.globalZone.addModulators(Fe.copyFrom(oi)),s.globalZone.generators=s.globalZone.generators.filter(n=>n.generatorValue!==hA[n.generatorType].def),e.addPresets(t),e.addInstruments(s)}writeHeader(){let e=new $(12);de(e,this.regions.length);let t=(this.bankMSB&127)<<8|this.bankLSB&127;return this.isGMGSDrum&&(t|=1<<31),de(e,t),de(e,this.program&127),Qe("insh",e)}},gi={progressFunction:void 0},ci=class Bn extends ct{samples=new Array;instruments=new Array;soundBankInfo={name:"Unnamed",creationDate:new Date,software:"SpessaSynth",soundEngine:"DLS Level 2.2",version:{major:2,minor:4}};static read(e){if(!e)throw new Error("No data provided!");let t=new $(e);tA("%cParsing DLS file...",l.info);let s=ge(t,!1);this.verifyHeader(s,"RIFF"),this.verifyText(pe(t,4).toLowerCase(),"dls ");let n=[];for(;t.currentIndex<t.length;)n.push(ge(t));let a=new Bn;a.soundBankInfo.name="Unnamed DLS",a.soundBankInfo.product="SpessaSynth DLS",a.soundBankInfo.comment="(no description)";let o=LA(n,"INFO");if(o)for(;o.data.currentIndex<o.data.length;){let d=ge(o.data),y=d.header,D=pe(d.data,d.size);switch(y){case"INAM":{a.soundBankInfo.name=D;break}case"ICRD":{a.soundBankInfo.creationDate=wn(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(d=>d.header==="colh");if(!i)return this.parsingError("No colh chunk!"),5;let r=V(i.data,4);k(`%cInstruments amount: %c${r}`,l.info,l.recognized);let h=LA(n,"wvpl");if(!h)return this.parsingError("No wvpl chunk!"),5;let c=this.verifyAndReadList(h,"wvpl");for(let d of c)a.samples.push(Qa.read(d));let I=LA(n,"lins");if(!I)return this.parsingError("No lins chunk!"),5;let E=this.verifyAndReadList(I,"lins");Xe("%cLoading instruments...",l.info),E.length!==r&&ne(`Colh reported invalid amount of instruments. Detected ${E.length}, expected ${r}`);for(let d of E)a.instruments.push(Ws.read(a.samples,d));j();let B=n.find(d=>d.header==="pgal");if(B){k("%cFound the instrument aliasing chunk!",l.recognized);let d=B.data;(d[0]!==0||d[1]!==1||d[2]!==2||d[3]!==3)&&(d.currentIndex+=4);let y=a.instruments.find(M=>Re.isXGDrums(M.bankMSB)||M.isGMGSDrum);if(!y)return ne("MobileBAE aliasing chunk without a drum preset. Aborting!"),a;let D=d.slice(d.currentIndex,d.currentIndex+128);d.currentIndex+=128;for(let M=0;M<128;M++){let F=D[M];if(F===M)continue;let w=y.regions.find(P=>P.keyRange.max===F&&P.keyRange.min===F);if(!w){ne(`Invalid drum alias ${M} to ${F}: region does not exist.`);continue}let S=As.copyFrom(w);S.keyRange.max=M,S.keyRange.min=M,y.regions.push(S)}for(d.currentIndex+=4;d.currentIndex<d.length;){let M=V(d,2),F=M&127,w=M>>7&127,S=d[d.currentIndex++],P=d[d.currentIndex++];P!==0&&ne(`Invalid alias byte. Expected 0, got ${P}`);let C=V(d,2),x=C&127,J=C>>7&127,Y=d[d.currentIndex++];P=d[d.currentIndex++],P!==0&&ne(`Invalid alias header. Expected 0, got ${P}`);let T=a.instruments.find(q=>q.bankLSB===x&&q.bankMSB===J&&q.program===Y&&!q.isGMGSDrum);if(!T){ne(`Invalid alias. Missing instrument: ${x}:${J}:${Y}`);continue}let U=Ws.copyFrom(T);U.bankMSB=w,U.bankLSB=F,U.program=S,a.instruments.push(U)}}return k(`%cParsing finished! %c"${a.soundBankInfo.name||"UNNAMED"}"%c has %c${a.instruments.length}%c instruments and %c${a.samples.length}%c samples.`,l.info,l.recognized,l.info,l.recognized,l.info,l.recognized,l.info),j(),a}static fromSF(e){Xe("%cSaving SF2 to DLS level 2...",l.info);let t=new Bn;t.soundBankInfo={...e.soundBankInfo},t.soundBankInfo.comment=(t.soundBankInfo.comment??"(No description)")+`
|
|
18
|
+
Converted from SF2 to DLS with SpessaSynth`;for(let s of e.samples)t.samples.push(Qa.fromSFSample(s));for(let s of e.presets)t.instruments.push(Ws.fromSFPreset(s,e.samples));return k("%cConversion complete!",l.recognized),j(),t}static printInfo(e){for(let[t,s]of Object.entries(e.soundBankInfo)){if(typeof s=="object"&&"major"in s){let n=s;k(`%c${t}: %c"${n.major}.${n.minor}"`,l.info,l.recognized)}k(`%c${t}: %c${s.toLocaleString()}`,l.info,l.recognized)}}async write(e=gi){Xe("%cSaving DLS...",l.info);let t=new $(4);de(t,this.instruments.length);let s=Qe("colh",t);Xe("%cWriting instruments...",l.info);let n=Ze("lins",this.instruments.map(D=>D.write()),!0);k("%cSuccess!",l.recognized),j(),Xe("%cWriting WAVE samples...",l.info);let a=0,o=[],i=[],r=0;for(let D of this.samples){let M=D.write();await e?.progressFunction?.(D.name,r,this.samples.length),o.push(a),a+=M.length,i.push(M),r++}let h=Ze("wvpl",i,!0);k("%cSucceeded!",l.recognized);let c=new $(8+4*o.length);de(c,8),de(c,o.length);for(let D of o)de(c,D);let I=Qe("ptbl",c);this.soundBankInfo.software="SpessaSynth";let E=[],B=(D,M)=>{E.push(Qe(D,fA(M,!0)))};for(let[D,M]of Object.entries(this.soundBankInfo)){let F=D,w=M;if(w)switch(F){case"name":{B("INAM",w);break}case"comment":{B("ICMT",w);break}case"copyright":{B("ICOP",w);break}case"creationDate":{B("ICRD",Dn(w));break}case"engineer":{B("IENG",w);break}case"product":{B("IPRD",w);break}case"romVersion":case"version":case"soundEngine":case"romInfo":break;case"software":{B("ISFT",w);break}case"subject":B("ISBJ",w)}}let d=Ze("INFO",E,!0);k("%cCombining everything...");let y=Ze("RIFF",[fA("DLS "),s,n,I,h,d]);return k("%cSaved successfully!",l.recognized),j(),y.buffer}toSF(){tA("%cConverting DLS to SF2...",l.info);let e=new Ii;e.soundBankInfo.version.minor=4,e.soundBankInfo.version.major=2,e.soundBankInfo={...this.soundBankInfo},e.soundBankInfo.comment=(e.soundBankInfo.comment??"(No description)")+`
|
|
19
|
+
Converted from DLS to SF2 with SpessaSynth`;for(let t of this.samples)t.toSFSample(e);for(let t of this.instruments)t.toSFPreset(e);return e.flush(),k("%cConversion complete!",l.recognized),j(),e}},Ii=class ss{static isSF3DecoderReady=Cs.isInitialized;soundBankInfo={name:"Unnamed",creationDate:new Date,software:"SpessaSynth",soundEngine:"E-mu 10K2",version:{major:2,minor:4}};presets=[];samples=[];instruments=[];defaultModulators=Xa.map(Fe.copyFrom.bind(Fe));customDefaultModulators=!1;_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 o of a)s.some(i=>o.matches(i))||s.push(o)}let n=new ss;return n.addCompletePresets(s),n.soundBankInfo={...t.soundBankInfo},n}static async getSampleSoundBankFile(){let e=new ss,t=new Float32Array(128);for(let i=0;i<128;i++)t[i]=i/128*2-1;let s=new Ah;s.name="Saw",s.originalKey=65,s.pitchCorrection=20,s.loopEnd=127,s.setAudioData(t,44100),e.addSamples(s);let n=new vt;n.name="Saw Wave",n.globalZone.addGenerators(new Ye(g.initialAttenuation,375),new Ye(g.releaseVolEnv,-1e3),new Ye(g.sampleModes,1)),n.createZone(s),n.createZone(s).setGenerator(g.fineTune,-9),e.addInstruments(n);let o=new Rt(e);return o.name="Saw Wave",o.createZone(n),e.addPresets(o),e.soundBankInfo.name="Dummy",e.flush(),await e.writeSF2()}static copyFrom(e){let t=new ss;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 writeDLS(e=gi){return ci.fromSF(this).write(e)}async writeSF2(e=In){return ah(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 Bs(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 vt;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 Rt(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(CA.sorter.bind(CA)),this.parseInternal()}trimSoundBank(e){let t=(n,a)=>{let o=0;for(let i=0;i<n.zones.length;i++){let r=n.zones[i],h=r.keyRange,c=r.velRange,I=!1;for(let E of a)if(E.key>=h.min&&E.key<=h.max&&E.velocity>=c.min&&E.velocity<=c.max){I=!0;break}!I&&r.sample&&(k(`%c${r.sample.name}%c removed from %c${n.name}%c.`,l.recognized,l.info,l.recognized,l.info),n.deleteZone(i)&&(o++,i--,k(`%c${r.sample.name}%c deleted`,l.recognized,l.info)),r.sample.useCount<1&&this.deleteSample(r.sample))}return o};tA("%cTrimming sound bank...",l.info);let s=e.getUsedProgramsAndKeys(this);Xe("%cModifying sound bank...",l.info),k("Detected keys for midi:",s);for(let n=0;n<this.presets.length;n++){let a=this.presets[n],o=s.get(a);if(o===void 0)k(`%cDeleting preset %c${a.name}%c and its zones`,l.info,l.recognized,l.info),this.deletePreset(a),n--;else{let i=[...o].map(h=>{let c=h.split("-");return{key:Number.parseInt(c[0]),velocity:Number.parseInt(c[1])}});Xe(`%cTrimming %c${a.name}`,l.info,l.recognized),k(`Keys for ${a.name}:`,i);let r=0;for(let h=0;h<a.zones.length;h++){let c=a.zones[h],I=c.keyRange,E=c.velRange,B=!1;for(let d of i)if(d.key>=I.min&&d.key<=I.max&&d.velocity>=E.min&&d.velocity<=E.max&&c.instrument){B=!0;let y=t(c.instrument,i);k(`%cTrimmed off %c${y}%c zones from %c${c.instrument.name}`,l.info,l.recognized,l.info,l.recognized);break}!B&&c.instrument&&(r++,a.deleteZone(h),c.instrument.useCount<1&&this.deleteInstrument(c.instrument),h--)}k(`%cTrimmed off %c${r}%c zones from %c${a.name}`,l.info,l.recognized,l.info,l.recognized),j()}}this.removeUnusedElements(),k("%cSound bank modified!",l.recognized),j(),j()}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 ei(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(Re.isXGDrums(t.bankMSB)&&(this._isXGBank=!0,!e.has(t.program))){this._isXGBank=!1,k(`%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.`,l.info,l.value,l.info);break}}printInfo(){for(let[e,t]of Object.entries(this.soundBankInfo)){if(typeof t=="object"&&"major"in t){let s=t;k(`%c${e}: %c"${s.major}.${s.minor}"`,l.info,l.recognized)}k(`%c${e}: %c${t.toLocaleString()}`,l.info,l.recognized)}}},gh=class extends Ye{constructor(A){let e=A.currentIndex,t=A[e+1]<<8|A[e],s=dn(A[e+2],A[e+3]);A.currentIndex+=4,super(t,s,!1)}};function fa(A){let e=[];for(;A.data.length>A.data.currentIndex;)e.push(new gh(A.data));return e.pop(),e}function ch(A,e,t,s,n){let a=A.gen,o=A.mod,i=0,r=0;for(let h of n)for(let c=0;c<h.zonesCount;c++){let I=a[r++],E=a[r],B=e.slice(I,E),d=o[i++],y=o[i],D=t.slice(d,y);B.some(M=>M.generatorType===g.instrument)?h.createSoundFontZone(D,B,s):(h.globalZone.addGenerators(...B),h.globalZone.addModulators(...D))}}var Ih=class extends Rt{zoneStartIndex;zonesCount=0;constructor(A,e){super(e),this.name=pe(A.data,20).replace(/\d{3}:\d{3}/,""),this.program=V(A.data,2);let t=V(A.data,2);this.bankMSB=t&127,this.isGMGSDrum=(t&128)>0,this.bankLSB=t>>8,this.zoneStartIndex=V(A.data,2),this.library=V(A.data,4),this.genre=V(A.data,4),this.morphology=V(A.data,4)}createSoundFontZone(A,e,t){let s=e.find(o=>o.generatorType===g.instrument),n;if(s)n=t[s.generatorValue];else throw new Error("No instrument ID found in preset zone.");if(!n)throw new Error(`Invalid instrument ID: ${s.generatorValue}, available instruments: ${t.length}`);let a=new $a(this,n);return a.addGenerators(...e),a.addModulators(...A),this.zones.push(a),a}};function ua(A,e){let t=[];for(;A.data.length>A.data.currentIndex;){let s=new Ih(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 lh=class extends vt{zoneStartIndex;zonesCount=0;constructor(A){super(),this.name=pe(A.data,20),this.zoneStartIndex=V(A.data,2)}createSoundFontZone(A,e,t){let s=e.find(o=>o.generatorType===g.sampleID),n;if(s)n=t[s.generatorValue];else throw new Error("No sample ID found in instrument zone.");if(!n)throw new Error(`Invalid sample ID: ${s.generatorValue}, available samples: ${t.length}`);let a=new ja(this,n);return a.addGenerators(...e),a.addModulators(...A),this.zones.push(a),a}};function ma(A){let e=[];for(;A.data.length>A.data.currentIndex;){let t=new lh(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 zs(A){let e=[];for(;A.data.length>A.data.currentIndex;){let t=A.data,s=V(t,2),n=V(t,2),a=dn(t[t.currentIndex++],t[t.currentIndex++]),o=V(t,2),i=V(t,2);e.push(new we(s,o,n,a,i))}return e.pop(),e}function Ch(A,e,t,s,n){let a=A.gen,o=A.mod,i=0,r=0;for(let h of n)for(let c=0;c<h.zonesCount;c++){let I=a[r++],E=a[r],B=e.slice(I,E),d=o[i++],y=o[i],D=t.slice(d,y);B.some(M=>M.generatorType===g.sampleID)?h.createSoundFontZone(D,B,s):(h.globalZone.addGenerators(...B),h.globalZone.addModulators(...D))}}function Wt(A){let e=[],t=[];for(;A.data.length>A.data.currentIndex;)t.push(V(A.data,2)),e.push(V(A.data,2));return{mod:e,gen:t}}var Eh=class extends Ii{sampleDataStartIndex=0;constructor(A,e=!0){if(super(),e)throw new Error("Using the constructor directly is deprecated. Use SoundBankLoader.fromArrayBuffer() instead.");let t=new $(A);tA("%cParsing a SoundFont2 file...",l.info),t||(j(),this.parsingError("No data provided!"));let s=ge(t,!1);this.verifyHeader(s,"riff");let n=pe(t,4).toLowerCase();if(n!=="sfbk"&&n!=="sfpk")throw j(),new SyntaxError(`Invalid soundFont! Expected "sfbk" or "sfpk" got "${n}"`);let a=n==="sfpk",o=ge(t);this.verifyHeader(o,"list");let i=pe(o.data,4);if(i!=="INFO")throw j(),new SyntaxError(`Invalid soundFont! Expected "INFO" or "${i}"`);let r;for(;o.data.length>o.data.currentIndex;){let O=ge(o.data),b=cA(O.data,O.data.length),G=O.header;switch(G){case"ifil":case"iver":{let K=V(O.data,2),ee=V(O.data,2);G==="ifil"?this.soundBankInfo.version={major:K,minor:ee}:this.soundBankInfo.romVersion={major:K,minor:ee};break}case"DMOD":{this.defaultModulators=zs(O),this.customDefaultModulators=!0;break}case"LIST":{pe(O.data,4)==="xdta"&&(k("%cExtended SF2 found!",l.recognized),r=O);break}case"ICRD":{this.soundBankInfo.creationDate=wn(pe(O.data,O.data.length));break}case"ISFT":{this.soundBankInfo.software=b;break}case"IPRD":{this.soundBankInfo.product=b;break}case"IENG":{this.soundBankInfo.engineer=b;break}case"ICOP":{this.soundBankInfo.copyright=b;break}case"INAM":{this.soundBankInfo.name=b;break}case"ICMT":{this.soundBankInfo.comment=b;break}case"irom":{this.soundBankInfo.romInfo=b;break}case"isng":this.soundBankInfo.soundEngine=b}}this.printInfo();let h={};r!==void 0&&(h.phdr=ge(r.data),h.pbag=ge(r.data),h.pmod=ge(r.data),h.pgen=ge(r.data),h.inst=ge(r.data),h.ibag=ge(r.data),h.imod=ge(r.data),h.igen=ge(r.data),h.shdr=ge(r.data));let c=ge(t,!1);this.verifyHeader(c,"list"),this.verifyText(pe(t,4),"sdta"),k("%cVerifying smpl chunk...",l.warn);let I=ge(t,!1);this.verifyHeader(I,"smpl");let E;if(a){k("%cSF2Pack detected, attempting to decode the smpl chunk...",l.info);try{E=Cs.decode(t.buffer.slice(t.currentIndex,t.currentIndex+c.size-12)).data[0]}catch(O){throw j(),new Error(`SF2Pack Ogg Vorbis decode error: ${O}`)}k(`%cDecoded the smpl chunk! Length: %c${E.length}`,l.info,l.value)}else E=t,this.sampleDataStartIndex=t.currentIndex;k(`%cSkipping sample chunk, length: %c${c.size-12}`,l.info,l.value),t.currentIndex+=c.size-12,k("%cLoading preset data chunk...",l.warn);let B=ge(t);this.verifyHeader(B,"list"),pe(B.data,4);let d=ge(B.data);this.verifyHeader(d,"phdr");let y=ge(B.data);this.verifyHeader(y,"pbag");let D=ge(B.data);this.verifyHeader(D,"pmod");let M=ge(B.data);this.verifyHeader(M,"pgen");let F=ge(B.data);this.verifyHeader(F,"inst");let w=ge(B.data);this.verifyHeader(w,"ibag");let S=ge(B.data);this.verifyHeader(S,"imod");let P=ge(B.data);this.verifyHeader(P,"igen");let C=ge(B.data);this.verifyHeader(C,"shdr"),k("%cParsing samples...",l.info),t.currentIndex=this.sampleDataStartIndex;let x=Ba(C,E,r===void 0);if(r&&h.shdr){let O=Ba(h.shdr,new Float32Array(1),!1);if(O.length===x.length)for(let[b,G]of x.entries())G.name+=O[b].name,G.linkedSampleIndex|=O[b].linkedSampleIndex<<16}for(let O of x)O.name=O.name.trim();this.samples.push(...x);let J=fa(P),Y=zs(S),T=ma(F);if(r&&h.inst){let O=ma(h.inst);if(O.length===T.length){for(let[b,G]of T.entries())G.name+=O[b].name,G.zoneStartIndex|=O[b].zoneStartIndex;for(let[b,G]of T.entries())b<T.length-1&&(G.zonesCount=T[b+1].zoneStartIndex-G.zoneStartIndex)}}for(let O of T)O.name=O.name.trim();this.instruments.push(...T);let U=Wt(w);if(r&&h.ibag){let O=Wt(h.ibag);for(let b=0;b<U.mod.length;b++)U.mod[b]|=O.mod[b]<<16;for(let b=0;b<U.gen.length;b++)U.gen[b]|=O.gen[b]<<16}Ch(U,J,Y,this.samples,T);let q=fa(M),m=zs(D),v=ua(d,this);if(r&&h.phdr){let O=ua(h.phdr,this);if(O.length===v.length){for(let[b,G]of v.entries())G.name+=O[b].name,G.zoneStartIndex|=O[b].zoneStartIndex;for(let[b,G]of v.entries())b<v.length-1&&(G.zonesCount=v[b+1].zoneStartIndex-G.zoneStartIndex)}}for(let O of v)O.name=O.name.trim();this.addPresets(...v);let H=Wt(y);if(r&&h.pbag){let O=Wt(h.pbag);for(let b=0;b<H.mod.length;b++)H.mod[b]|=O.mod[b]<<16;for(let b=0;b<H.gen.length;b++)H.gen[b]|=O.gen[b]<<16}ch(H,q,m,this.instruments,v),this.flush(),k(`%cParsing finished! %c"${this.soundBankInfo.name}"%c has %c${this.presets.length}%c presets,
|
|
20
|
+
%c${this.instruments.length}%c instruments and %c${this.samples.length}%c samples.`,l.info,l.recognized,l.info,l.recognized,l.info,l.recognized,l.info,l.recognized,l.info),j()}verifyHeader(A,e){A.header.toLowerCase()!==e.toLowerCase()&&(j(),this.parsingError(`Invalid chunk header! Expected "${e.toLowerCase()}" got "${A.header.toLowerCase()}"`))}verifyText(A,e){A.toLowerCase()!==e.toLowerCase()&&(j(),this.parsingError(`Invalid FourCC: Expected "${e.toLowerCase()}" got "${A.toLowerCase()}"\``))}},Ft=class{static fromArrayBuffer(A){let e=A.slice(8,12),t=new $(e);return pe(t,4).toLowerCase()==="dls "?this.loadDLS(A):new Eh(A,!1)}static loadDLS(A){return ci.read(A).toSF()}},li=class{processorInitialized=Cs.isInitialized;sampleRate;onEventCall;process;processSplit;systemExclusive;controllerChange;noteOn;noteOff;polyPressure;channelPressure;pitchWheel;programChange;processMessage;synthCore;savedSnapshot;constructor(A,e={}){let t=Qn(e,kr);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 $o(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<va;n++)this.synthCore.createMIDIChannel(!1);this.processorInitialized.then(()=>{k("%cSpessaSynth is ready!",l.recognized)})}get enableEffects(){return this.synthCore.enableEffects}set enableEffects(A){this.synthCore.enableEffects=A}get enableEventSystem(){return this.synthCore.enableEventSystem}set enableEventSystem(A){this.synthCore.enableEventSystem=A}get midiChannels(){return this.synthCore.midiChannels}get totalVoicesAmount(){return this.synthCore.voiceCount}get currentSynthTime(){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}renderAudio(A,e,t,s=0,n=0){let a=this.synthCore.maxBufferSize;if(n>a){let o=0;for(;o<n;){let i=Math.min(a,n-o);this.synthCore.process(A[0],A[1],s+o,i),o+=i}}else this.synthCore.process(A[0],A[1],s,n)}renderAudioSplit(A,e,t,s=0,n=0){let a=this.synthCore.maxBufferSize;if(n>a){let o=0;for(;o<n;){let i=Math.min(a,n-o);this.synthCore.processSplit(t,A[0],A[1],s+o,i),o+=i}}else this.synthCore.processSplit(t,A[0],A[1],s,n)}onMissingPreset=(A,e)=>{ne(`No preset found for ${CA.toMIDIString(A)}! Did you forget to add a sound bank?`)};setMasterParameter(A,e){this.synthCore.setMasterParameter(A,e)}getMasterParameter(A){return this.synthCore.getMasterParameter(A)}getAllMasterParameters(){return this.synthCore.getAllMasterParameters()}resetAllControllers(A=un){this.synthCore.resetAllControllers(A)}applySynthesizerSnapshot(A){this.savedSnapshot=A,A.apply(this),k("%cFinished applying snapshot!",l.info),this.resetAllControllers()}getSnapshot(){return vn.create(this)}getInsertionSnapshot(){return this.synthCore.getInsertionSnapshot()}setEmbeddedSoundBank(A,e){let t=Ft.fromArrayBuffer(A);this.synthCore.soundBankManager.addSoundBank(t,Yt,e);let s=this.synthCore.soundBankManager.priorityOrder;s.pop(),s.unshift(Yt),this.synthCore.soundBankManager.priorityOrder=s,this.savedSnapshot!==void 0&&this.applySynthesizerSnapshot(this.savedSnapshot),k(`%cEmbedded sound bank set at offset %c${e}`,l.recognized,l.value)}clearEmbeddedBank(){this.synthCore.soundBankManager.soundBankList.some(A=>A.id===Yt)&&this.synthCore.soundBankManager.deleteSoundBank(Yt)}createMIDIChannel(){this.synthCore.createMIDIChannel(!0)}stopAllChannels(A=!1){this.synthCore.stopAllChannels(A)}destroySynthProcessor(){this.synthCore.destroySynthProcessor()}killVoices(A){ne(`killVoices is deprecated, don't use it! Amount requested: ${A}`)}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 ds=vA.consoleColors;var Ci="spessasynth-worklet-processor";function Ei(A,e){return{...e,...A}}var Bi={skipToFirstNoteOn:!0,initialPlaybackRate:1};var Nn=class extends Is{events=[];constructor(e){super(),super.copyFrom(e),this.events=[]}},Qs=class A extends ZA{tracks;embeddedSoundBank=void 0;embeddedSoundBankSize;constructor(e){super(),super.copyMetadataFrom(e),this.tracks=e.tracks.map(t=>new Nn(t)),this.embeddedSoundBankSize=e instanceof A?e.embeddedSoundBankSize:e?.embeddedSoundBank?.byteLength}};var fs={shuffleOn:1,shuffleOff:2,index:3};var di=1,us=class{synthesizer;sequencers=new Array;post;lastSequencerSync=0;alive=!1;enableEventSystem;constructor(e,t,s){this.synthesizer=new li(e,t),this.enableEventSystem=t.enableEventSystem??!1,this.post=s,this.synthesizer.onEventCall=n=>{this.post({type:"eventCall",data:n,currentTime:this.synthesizer.currentSynthTime})}}createNewSequencer(){let e=new xa(this.synthesizer),t=this.sequencers.length;this.sequencers.push(e),e.onEventCall=s=>{if(this.enableEventSystem){if(s.type==="songListChange"){let a=s.data.newSongList.map(o=>new Qs(o));this.post({type:"sequencerReturn",data:{type:s.type,data:{newSongList:a,shuffledSongIndexes:e.shuffledSongIndexes},id:t},currentTime:this.synthesizer.currentSynthTime});return}this.post({type:"sequencerReturn",data:{...s,id:t},currentTime:this.synthesizer.currentSynthTime})}}}postReady(e,t,s=[]){this.post({type:"isFullyInitialized",data:{type:e,data:t},currentTime:this.synthesizer.currentSynthTime},s)}postProgress(e,t){this.post({type:"renderingProgress",data:{type:e,data:t},currentTime:this.synthesizer.currentSynthTime})}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)){vA.SpessaSynthWarn(`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"customCcChange":{s?.setCustomController(e.data.ccNumber,e.data.ccValue);break}case"ccReset":{t===gt?this.synthesizer.resetAllControllers():s?.resetControllers();break}case"stopAll":{t===gt?this.synthesizer.stopAllChannels(e.data===1):s?.stopAllNotes(e.data===1);break}case"muteChannel":{s?.muteChannel(e.data);break}case"addNewChannel":{this.synthesizer.createMIDIChannel();break}case"setMasterParameter":{this.synthesizer.setMasterParameter(e.data.type,e.data.data);break}case"setDrums":{s?.setDrums(e.data);break}case"transposeChannel":{s?.transposeChannel(e.data.semitones,e.data.force);break}case"lockController":{if(e.data.controllerNumber===gt)s?.setPresetLock(e.data.isLocked);else{if(!s)return;s.lockedControllers[e.data.controllerNumber]=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(r=>"duration"in r?ZA.copyFrom(r):ZA.fromArrayBuffer(r.binary,r.fileName));n.loadNewSongList(i)}catch(o){console.error(o),this.post({type:"sequencerReturn",data:{type:"midiError",data:o,id:e.data.id},currentTime:this.synthesizer.currentSynthTime})}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 fs.shuffleOff:{n.shuffleMode=!1;break}case fs.shuffleOn:{n.shuffleMode=!0;break}case fs.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.currentSynthTime});break}case"setSkipToFirstNote":{n.skipToFirstNoteOn=a.data;break}}break}case"soundBankManager":{try{let n=this.synthesizer.soundBankManager,a=e.data,o;switch(a.type){case"addSoundBank":{o=Ft.fromArrayBuffer(a.data.soundBankBuffer),n.addSoundBank(o,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.currentSynthTime})}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=vn.create(this.synthesizer);this.postReady("synthesizerSnapshot",n);break}case"requestNewSequencer":{this.createNewSequencer();break}case"setLogLevel":{wa(e.data.enableInfo,e.data.enableWarning,e.data.enableGroup);break}case"destroyWorklet":{this.alive=!1,this.synthesizer.destroySynthProcessor(),this.destroy();break}default:{vA.SpessaSynthWarn("Unrecognized event!",e);break}}}};var ms=class extends us{alive=!0;oneOutputMode;port;constructor(e,t,s,n){super(e,{enableEffects:!n.oneOutput,enableEventSystem:n?.enableEventSystem,initialTime:t},(a,o)=>{s.postMessage(a,o)}),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 n of this.sequencers)n.processTick();if(this.oneOutputMode){let n=t[0],a=[];for(let o=0;o<32;o+=2)a.push([n[o],n[o+1]]);this.synthesizer.enableEffects=!1,this.synthesizer.processSplit(a,n[0],n[0])}else this.synthesizer.processSplit(t.slice(1),t[0][0],t[0][1]);let s=this.synthesizer.currentSynthTime;if(this.enableEventSystem&&s-this.lastSequencerSync>di){for(let n=0;n<this.sequencers.length;n++)this.post({type:"sequencerReturn",data:{type:"sync",data:this.sequencers[n].currentTime,id:n},currentTime:s});this.lastSequencerSync=s}return!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(Ft.fromArrayBuffer(a.soundBankBuffer),`bank-${n}`,a.bankOffset)}catch(o){this.post({type:"soundBankError",data:o,currentTime:this.synthesizer.currentSynthTime})}e.snapshot!==void 0&&this.synthesizer.applySynthesizerSnapshot(e.snapshot),vA.SpessaSynthInfo("%cRendering enabled! Starting render.",ds.info),t.loopCount=e.loopCount,this.synthesizer.setMasterParameter("autoAllocateVoices",!0);let s=Ei(e.sequencerOptions,Bi);t.skipToFirstNoteOn=s.skipToFirstNoteOn,t.playbackRate=s.initialPlaybackRate;try{t.loadNewSongList([ZA.copyFrom(e.midiSequence)]),t.play()}catch(n){console.error(n),this.post({type:"sequencerReturn",data:{type:"midiError",data:n,id:0},currentTime:this.synthesizer.currentSynthTime})}this.postReady("startOfflineRender",null)}};var Tn=class extends AudioWorkletProcessor{process;core;constructor(e){super(),this.core=new ms(sampleRate,currentTime,this.port,e.processorOptions),this.process=this.core.process.bind(this.core)}};registerProcessor(Ci,Tn);vA.SpessaSynthInfo("%cProcessor successfully registered!",ds.recognized);
|
|
21
21
|
//# sourceMappingURL=spessasynth_processor.min.js.map
|