spessasynth_lib 4.0.9 → 4.0.11

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 De=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(A,t)=>(typeof require<"u"?require:A)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var xa=(e=>typeof De<"u"?De:typeof Proxy<"u"?new Proxy(e,{get:(A,t)=>(typeof De<"u"?De:A)[t]}):e)(function(e){if(typeof De<"u")return De.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')}),O=class extends Uint8Array{currentIndex=0;slice(e,A){let t=super.slice(e,A);return t.currentIndex=0,t}};function ee(e,A=e.length,t=0){let n="";for(let s=0;s<A;s++){let a=e[t+s];if(a===0)return n;n+=String.fromCharCode(a)}return n}function hA(e,A){let t=e.currentIndex;return e.currentIndex+=A,ee(e,A,t)}function ne(e,A=!1,t=!1){let n=e.length;A&&n++,t&&n%2!==0&&n++;let s=new O(n);return kA(s,e),s}function kA(e,A,t=0){t>0&&A.length>t&&(A=A.slice(0,t));for(let n=0;n<A.length;n++)e[e.currentIndex++]=A.charCodeAt(n);if(t>A.length)for(let n=0;n<t-A.length;n++)e[e.currentIndex++]=0;return e}function v(e,A){let t=Hs(e,A,e.currentIndex);return e.currentIndex+=A,t}function Hs(e,A,t=0){let n=0;for(let s=0;s<A;s++)n|=e[t+s]<<s*8;return n>>>0}function Ct(e,A,t){for(let n=0;n<t;n++)e[e.currentIndex++]=A>>n*8&255}function W(e,A){e[e.currentIndex++]=A&255,e[e.currentIndex++]=A>>8}function iA(e,A){Ct(e,A,4)}function Wn(e,A){let t=A<<8|e;return t>32767?t-65536:t}function Ha(e){return e>127?e-256:e}var Ys=class{header;size;data;constructor(e,A,t){this.header=e,this.size=A,this.data=t}};function aA(e,A=!0,t=!1){let n=hA(e,4),s=v(e,4);n===""&&(s=0);let a;return A?a=e.slice(e.currentIndex,e.currentIndex+s):a=new O(0),(A||t)&&(e.currentIndex+=s,s%2!==0&&e.currentIndex++),new Ys(n,s,a)}function IA(e,A,t=!1,n=!1){if(e.length!==4)throw new Error(`Invalid header length: ${e}`);let s=8,a=e,o=A.length;t&&o++;let i=o;n&&(s+=4,i+=4,a="LIST");let r=s+o;r%2!==0&&r++;let g=new O(r);return kA(g,a),iA(g,i),n&&kA(g,e),g.set(A,s),g}function MA(e,A,t=!1){let n=8,s=e,a=A.reduce((g,E)=>E.length+g,0),o=a;t&&(n+=4,o+=4,s="LIST");let i=n+a;i%2!==0&&i++;let r=new O(i);return kA(r,s),iA(r,o),t&&kA(r,e),A.forEach(g=>{r.set(g,n),n+=g.length}),r}function fe(e,A){return e.find(t=>t.header!=="LIST"?!1:(t.data.currentIndex=4,ee(t.data,4)===A))}function zn(e,A){return{...A,...e??{}}}function dt(e,A,t=0){let n=0;for(let s=0;s<A;s++)n=n<<8|e[t+s];return n>>>0}function Oe(e,A){let t=dt(e,A,e.currentIndex);return e.currentIndex+=A,t}function Ft(e,A){let t=new Array(A).fill(0);for(let n=A-1;n>=0;n--)t[n]=e&255,e>>=8;return t}function uA(e){let A=0;for(;e;){let t=e[e.currentIndex++];if(A=A<<7|t&127,t>>7!==1)break}return A}function En(e){let A=[e&127];for(e>>=7;e>0;)A.unshift(e&127|128),e>>=7;return A}function fs(e){e=Math.floor(e);let A=Math.floor(e/60),t=Math.round(e-A*60);return{minutes:A,seconds:t,time:`${A.toString().padStart(2,"0")}:${t.toString().padStart(2,"0")}`}}function vA(e){let A="";for(let t of e){let n=t.toString(16).padStart(2,"0").toUpperCase();A+=n,A+=" "}return A}var c={warn:"color: orange;",unrecognized:"color: red;",info:"color: aqua;",recognized:"color: lime",value:"color: yellow; background-color: black;"},Ps;(()=>{var e=Uint8Array,A=Uint16Array,t=Int32Array,n=new e([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]),s=new e([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 e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),o=function(F,b){for(var X=new A(31),tA=0;tA<31;++tA)X[tA]=b+=1<<F[tA-1];for(var rA=new t(X[30]),tA=1;tA<30;++tA)for(var NA=X[tA];NA<X[tA+1];++NA)rA[NA]=NA-X[tA]<<5|tA;return{b:X,r:rA}},i=o(n,2),r=i.b,g=i.r;r[28]=258,g[258]=28;var E=o(s,0),d=E.b,l=E.r,C=new A(32768);for(w=0;w<32768;++w)Q=(w&43690)>>1|(w&21845)<<1,Q=(Q&52428)>>2|(Q&13107)<<2,Q=(Q&61680)>>4|(Q&3855)<<4,C[w]=((Q&65280)>>8|(Q&255)<<8)>>1;var Q,w,m=function(F,b,X){for(var tA=F.length,rA=0,NA=new A(b);rA<tA;++rA)F[rA]&&++NA[F[rA]-1];var se=new A(b);for(rA=1;rA<b;++rA)se[rA]=se[rA-1]+NA[rA-1]<<1;var WA;if(X){WA=new A(1<<b);var zA=15-b;for(rA=0;rA<tA;++rA)if(F[rA])for(var ve=rA<<4|F[rA],ae=b-F[rA],eA=se[F[rA]-1]++<<ae,EA=eA|(1<<ae)-1;eA<=EA;++eA)WA[C[eA]>>zA]=ve}else for(WA=new A(tA),rA=0;rA<tA;++rA)F[rA]&&(WA[rA]=C[se[F[rA]-1]++]>>15-F[rA]);return WA},S=new e(288);for(w=0;w<144;++w)S[w]=8;var w;for(w=144;w<256;++w)S[w]=9;var w;for(w=256;w<280;++w)S[w]=7;var w;for(w=280;w<288;++w)S[w]=8;var w,D=new e(32);for(w=0;w<32;++w)D[w]=5;var w,M=m(S,9,1),P=m(D,5,1),x=function(F){for(var b=F[0],X=1;X<F.length;++X)F[X]>b&&(b=F[X]);return b},B=function(F,b,X){var tA=b/8|0;return(F[tA]|F[tA+1]<<8)>>(b&7)&X},j=function(F,b){var X=b/8|0;return(F[X]|F[X+1]<<8|F[X+2]<<16)>>(b&7)},J=function(F){return(F+7)/8|0},Y=function(F,b,X){return(b==null||b<0)&&(b=0),(X==null||X>F.length)&&(X=F.length),new e(F.subarray(b,X))},U=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],K=function(F,b,X){var tA=new Error(b||U[F]);if(tA.code=F,Error.captureStackTrace&&Error.captureStackTrace(tA,K),!X)throw tA;return tA},q=function(F,b,X,tA){var rA=F.length,NA=tA?tA.length:0;if(!rA||b.f&&!b.l)return X||new e(0);var se=!X,WA=se||b.i!=2,zA=b.i;se&&(X=new e(rA*3));var ve=function(pt){var de=X.length;if(pt>de){var nt=new e(Math.max(de*2,pt));nt.set(X),X=nt}},ae=b.f||0,eA=b.p||0,EA=b.b||0,_A=b.l,UA=b.d,Ce=b.m,he=b.n,je=rA*8;do{if(!_A){ae=B(F,eA,1);var Le=B(F,eA+1,3);if(eA+=3,Le)if(Le==1)_A=M,UA=P,Ce=9,he=5;else if(Le==2){var $e=B(F,eA,31)+257,jt=B(F,eA+10,15)+4,$t=$e+B(F,eA+5,31)+1;eA+=14;for(var Ne=new e($t),le=new e(19),TA=0;TA<jt;++TA)le[a[TA]]=B(F,eA+TA*3,7);eA+=jt*3;for(var An=x(le),ut=(1<<An)-1,Ue=m(le,An,1),TA=0;TA<$t;){var At=Ue[B(F,eA,ut)];eA+=At&15;var GA=At>>4;if(GA<16)Ne[TA++]=GA;else{var re=0,et=0;for(GA==16?(et=3+B(F,eA,3),eA+=2,re=Ne[TA-1]):GA==17?(et=3+B(F,eA,7),eA+=3):GA==18&&(et=11+B(F,eA,127),eA+=7);et--;)Ne[TA++]=re}}var en=Ne.subarray(0,$e),oe=Ne.subarray($e);Ce=x(en),he=x(oe),_A=m(en,Ce,1),UA=m(oe,he,1)}else K(1);else{var GA=J(eA)+4,ft=F[GA-4]|F[GA-3]<<8,mt=GA+ft;if(mt>rA){zA&&K(0);break}WA&&ve(EA+ft),X.set(F.subarray(GA,mt),EA),b.b=EA+=ft,b.p=eA=mt*8,b.f=ae;continue}if(eA>je){zA&&K(0);break}}WA&&ve(EA+131072);for(var gs=(1<<Ce)-1,cs=(1<<he)-1,St=eA;;St=eA){var re=_A[j(F,eA)&gs],Se=re>>4;if(eA+=re&15,eA>je){zA&&K(0);break}if(re||K(2),Se<256)X[EA++]=Se;else if(Se==256){St=eA,_A=null;break}else{var tn=Se-254;if(Se>264){var TA=Se-257,ie=n[TA];tn=B(F,eA,(1<<ie)-1)+r[TA],eA+=ie}var Te=UA[j(F,eA)&cs],pe=Te>>4;Te||K(3),eA+=Te&15;var oe=d[pe];if(pe>3){var ie=s[pe];oe+=j(F,eA)&(1<<ie)-1,eA+=ie}if(eA>je){zA&&K(0);break}WA&&ve(EA+131072);var tt=EA+tn;if(EA<oe){var xe=NA-oe,yA=Math.min(oe,tt);for(xe+EA<0&&K(3);EA<yA;++EA)X[EA]=tA[xe+EA]}for(;EA<tt;++EA)X[EA]=X[EA-oe]}}b.l=_A,b.p=St,b.b=EA,b.f=ae,_A&&(ae=1,b.m=Ce,b.d=UA,b.n=he)}while(!ae);return EA!=X.length&&se?Y(X,0,EA):X.subarray(0,EA)},Z=new e(0);function CA(F,b){return q(F,{i:2},b&&b.out,b&&b.dictionary)}var gA=typeof TextDecoder<"u"&&new TextDecoder,V=0;try{gA.decode(Z,{stream:!0}),V=1}catch{}Ps=CA})();var Js=Ps,qs=!1,Ks=!0,Pt=!1;function Os(e,A,t){qs=e,Ks=A,Pt=t}function y(...e){qs&&console.info(...e)}function nA(...e){Ks&&console.warn(...e)}function OA(...e){Pt&&console.group(...e)}function RA(...e){Pt&&console.groupCollapsed(...e)}function z(){Pt&&console.groupEnd()}var Ee={consoleColors:c,SpessaSynthInfo:y,SpessaSynthWarn:nA,SpessaSynthGroupCollapsed:RA,SpessaSynthGroup:OA,SpessaSynthGroupEnd:z,readBytesAsUintBigEndian:dt,readLittleEndian:v,readBytesAsString:hA,readVariableLengthQuantity:uA,inflateSync:Js};var ZA=class{ticks;statusByte;data;constructor(e,A,t){this.ticks=e,this.statusByte=A,this.data=t}};function Ya(e){let A=e&240,t=e&15,n=t;switch(A){case 128:case 144:case 160:case 176:case 192:case 208:case 224:break;case 240:switch(t){case 0:n=-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:n=-1;break;case 15:n=-2;break}break;default:n=-1}return n}function _n(e){let A=e&240,t=e&15,n=-1,s=e;return A>=128&&A<=224&&(n=t,s=A),{status:s,channel:n}}var Pa={8:2,9:2,10:2,11:2,12:1,13:1,14:2},R={noteOff:128,noteOn:144,polyPressure:160,controllerChange:176,programChange:192,channelPressure:208,pitchWheel:224,systemExclusive:240,timecode:241,songPosition:242,songSelect:243,tuneRequest:246,clock:248,start:250,continue:251,stop:252,activeSensing:254,reset:255,sequenceNumber:0,text:1,copyright:2,trackName:3,instrumentName:4,lyric:5,marker:6,cuePoint:7,programName:8,midiChannelPrefix:32,midiPort:33,endOfTrack:47,setTempo:81,smpteOffset:84,timeSignature:88,keySignature:89,sequenceSpecific:127},p={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,detuneDepth: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};function Ja(e){if(!e.tracks)throw new Error("MIDI has no tracks!");let A=[];for(let s of e.tracks){let a=[],o=0,i;for(let r of s.events){let g=Math.max(0,r.ticks-o);if(r.statusByte===R.endOfTrack){o+=g;continue}let E;r.statusByte<=R.sequenceSpecific?(E=[255,r.statusByte,...En(r.data.length),...r.data],i=void 0):r.statusByte===R.systemExclusive?(E=[240,...En(r.data.length),...r.data],i=void 0):(E=[],i!==r.statusByte&&(i=r.statusByte,E.push(r.statusByte)),E.push(...r.data)),a.push(...En(g)),a.push(...E),o+=g}a.push(0),a.push(255),a.push(R.endOfTrack),a.push(0),A.push(new Uint8Array(a))}let t=(s,a)=>{for(let o=0;o<s.length;o++)a.push(s.charCodeAt(o))},n=[];t("MThd",n),n.push(...Ft(6,4)),n.push(0,e.format),n.push(...Ft(e.tracks.length,2)),n.push(...Ft(e.timeDivision,2));for(let s of A)t("MTrk",n),n.push(...Ft(s.length,4)),n.push(...s);return new Uint8Array(n).buffer}var qa=350,me=9,wn=16,Vs="gs",Be=-1,Gt=`SPESSASYNTH_EMBEDDED_BANK_${Math.random()}_DO_NOT_DELETE`,Xs=32767,Ka={time:0},Oa=.03,Va=.07,Xa=1,Za=64,ms=121,fA=class{static getDefaultBank(e){return e==="gm2"?ms:0}static getDrumBank(e){switch(e){default:throw new Error(`${e} doesn't have a bank MSB for drums.`);case"gm2":return 120;case"xg":return 127}}static isXGDrums(e){return e===120||e===126||e===127}static isValidXGMSB(e){return this.isXGDrums(e)||e===Za||e===ms}static isSystemXG(e){return e==="gm2"||e==="xg"}static addBankOffset(e,A,t=!0){return this.isXGDrums(e)&&t?e:Math.min(e+A,127)}static subtrackBankOffset(e,A,t=!0){return this.isXGDrums(e)&&t?e:Math.max(0,e-A)}};function jn(e){return e.data[0]===67&&e.data[2]===76&&e.data[5]===126&&e.data[6]===0}function Zs(e){return e.data[0]===65&&e.data[2]===66&&e.data[3]===18&&e.data[4]===64&&(e.data[5]&16)!==0&&e.data[6]===21}function $n(e){return e.data[0]===65&&e.data[2]===66&&e.data[6]===127}function As(e){return e.data[0]===126&&e.data[2]===9&&e.data[3]===1}function es(e){return e.data[0]===126&&e.data[2]===9&&e.data[3]===3}function Ws(e){return new ZA(e,R.systemExclusive,new O([65,16,66,18,64,0,127,0,65,247]))}var te=class zs{static toMIDIString(A){return A.isGMGSDrum?`DRUM:${A.program}`:`${A.bankLSB}:${A.bankMSB}:${A.program}`}static fromMIDIString(A){let t=A.split(":");if(t.length>3||t.length<2)throw new Error("Invalid MIDI string:");return A.startsWith("DRUM")?{bankMSB:0,bankLSB:0,program:parseInt(t[1]),isGMGSDrum:!0}:{bankLSB:parseInt(t[0]),bankMSB:parseInt(t[1]),program:parseInt(t[2]),isGMGSDrum:!1}}static toNamedMIDIString(A){return`${zs.toMIDIString(A)} ${A.name}`}static matches(A,t){return A.isGMGSDrum||t.isGMGSDrum?A.isGMGSDrum===t.isGMGSDrum&&A.program===t.program:A.program===t.program&&A.bankLSB===t.bankLSB&&A.bankMSB===t.bankMSB}static fromNamedMIDIString(A){let t=A.indexOf(" ");if(t<0)throw new Error(`Invalid named MIDI string: ${A}`);let n=this.fromMIDIString(A.substring(0,t)),s=A.substring(t+1);return{...n,name:s}}static sorter(A,t){return A.program!==t.program?A.program-t.program:A.isGMGSDrum&&!t.isGMGSDrum?1:!A.isGMGSDrum&&t.isGMGSDrum?-1:A.bankMSB!==t.bankMSB?A.bankMSB-t.bankMSB:A.bankLSB-t.bankLSB}},Wa="Created using SpessaSynth";function za(e,A,t){let n="gm",s=[],a=Array(e.tracks.length).fill(0),o=16+Math.max(...e.portChannelOffsetMap),i=[];for(let r=0;r<o;r++)i.push({program:0,drums:r%16===me,lastBank:void 0,lastBankLSB:void 0,hasBankSelect:!1});if(e.iterate((r,g)=>{let E=e.portChannelOffsetMap[a[g]];if(r.statusByte===R.midiPort){a[g]=r.data[0];return}let d=r.statusByte&240;if(d!==R.controllerChange&&d!==R.programChange&&d!==R.systemExclusive)return;if(d===R.systemExclusive){if(!Zs(r)){jn(r)?n="xg":$n(r)?n="gs":As(r)?(n="gm",s.push({tNum:g,e:r})):es(r)&&(n="gm2");return}let m=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][r.data[5]&15]+E;i[m].drums=!!(r.data[7]>0&&r.data[5]>>4);return}let l=(r.statusByte&15)+E,C=i[l];if(d===R.programChange){let S={program:r.data[0],bankLSB:C.lastBankLSB?.data?.[1]??0,bankMSB:fA.subtrackBankOffset(C.lastBank?.data?.[1]??0,e.bankOffset),isGMGSDrum:C.drums},D=t.getPreset(S,n);if(y(`%cInput patch: %c${te.toMIDIString(S)}%c. Channel %c${l}%c. Changing patch to ${D.toString()}.`,c.info,c.unrecognized,c.info,c.recognized,c.info),r.data[0]=D.program,D.isGMGSDrum&&fA.isSystemXG(n)||C.lastBank===void 0||(C.lastBank.data[1]=fA.addBankOffset(D.bankMSB,A,D.isXGDrums),C.lastBankLSB===void 0))return;C.lastBankLSB.data[1]=D.bankLSB;return}let Q=r.data[0]===p.bankSelectLSB;r.data[0]!==p.bankSelect&&!Q||(C.hasBankSelect=!0,Q?C.lastBankLSB=r:C.lastBank=r)}),i.forEach((r,g)=>{if(r.hasBankSelect)return;let E=g%16,d=R.programChange|E,l=Math.floor(g/16)*16,C=e.portChannelOffsetMap.indexOf(l),Q=e.tracks.find(M=>M.port===C&&M.channels.has(E));if(Q===void 0)return;let m=Q.events.findIndex(M=>M.statusByte===d);if(m===-1){let M=Q.events.findIndex(B=>B.statusByte>128&&B.statusByte<240&&(B.statusByte&15)===E);if(M===-1)return;let P=Q.events[M].ticks,x=t.getPreset({bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1},n).program;Q.addEvent(new ZA(P,R.programChange|E,new O([x])),M),m=M}y(`%cAdding bank select for %c${g}`,c.info,c.recognized);let S=Q.events[m].ticks,D=t.getPreset({bankLSB:0,bankMSB:0,program:r.program,isGMGSDrum:r.drums},n),w=fA.addBankOffset(D.bankMSB,A,D.isXGDrums);Q.addEvent(new ZA(S,R.controllerChange|E,new O([p.bankSelect,w])),m)}),n==="gm"&&!fA.isSystemXG(n)){for(let g of s){let E=e.tracks[g.tNum];E.deleteEvent(E.events.indexOf(g.e))}let r=0;e.tracks[0].events[0].statusByte===R.trackName&&r++,e.tracks[0].addEvent(Ws(0),r)}}var Ss={bankOffset:0,metadata:{},correctBankOffset:!0,soundBank:void 0};function _a(e,A,t){let n=t.metadata;if(OA("%cWriting the RMIDI File...",c.info),y("metadata",n),y("Initial bank offset",e.bankOffset),t.correctBankOffset){if(!t.soundBank)throw new Error("Sound bank must be provided if correcting bank offset.");za(e,t.bankOffset,t.soundBank)}let s=new O(e.writeMIDI());n.name??=e.getName(),n.creationDate??=new Date,n.copyright??=Wa,n.software??="SpessaSynth",Object.entries(n).forEach(i=>{let r=i;r[1]&&e.setRMIDInfo(r[0],r[1])});let a=[];Object.entries(e.rmidiInfo).forEach(i=>{let r=i[0],g=i[1],E=d=>{a.push(IA(d,g))};switch(r){case"album":E("IALB"),E("IPRD");break;case"software":E("ISFT");break;case"infoEncoding":E("IENC");break;case"creationDate":E("ICRD");break;case"picture":E("IPIC");break;case"name":E("INAM");break;case"artist":E("IART");break;case"genre":E("IGNR");break;case"copyright":E("ICOP");break;case"comment":E("ICMT");break;case"engineer":E("IENG");break;case"subject":E("ISBJ");break;case"midiEncoding":E("MENC");break}});let o=new O(2);return Ct(o,t.bankOffset,2),a.push(IA("DBNK",o)),y("%cFinished!",c.info),z(),MA("RIFF",[ne("RMID"),IA("data",s),MA("INFO",a,!0),new O(A)]).buffer}function ja(e,A){RA("%cSearching for all used programs and keys...",c.info);let t=16+Math.max(...e.portChannelOffsetMap),n=[],s="gs";for(let i=0;i<t;i++){let r=i%16===me;n.push({preset:A.getPreset({bankLSB:0,bankMSB:0,isGMGSDrum:r,program:0},s),bankMSB:0,bankLSB:0,isDrum:r})}let a=new Map,o=e.tracks.map(i=>i.port);return e.iterate((i,r)=>{if(i.statusByte===R.midiPort){o[r]=i.data[0];return}let g=i.statusByte&240;if(g!==R.noteOn&&g!==R.controllerChange&&g!==R.programChange&&g!==R.systemExclusive)return;let E=(i.statusByte&15)+e.portChannelOffsetMap[o[r]]||0,d=n[E];switch(g){case R.programChange:d.preset=A.getPreset({bankMSB:d.bankMSB,bankLSB:d.bankLSB,program:i.data[0],isGMGSDrum:d.isDrum},s);break;case R.controllerChange:switch(i.data[0]){default:return;case p.bankSelectLSB:d.bankLSB=i.data[1];break;case p.bankSelect:d.bankMSB=i.data[1]}break;case R.noteOn:if(i.data[1]===0)return;let l=a.get(d.preset);l||(l=new Set,a.set(d.preset,l)),l.add(`${i.data[0]}-${i.data[1]}`);break;case R.systemExclusive:{if(!Zs(i)){jn(i)?(s="xg",y("%cXG on detected!",c.recognized)):es(i)?(s="gm2",y("%cGM2 on detected!",c.recognized)):As(i)?(s="gm",y("%cGM on detected!",c.recognized)):$n(i)&&(s="gs",y("%cGS on detected!",c.recognized));return}let C=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][i.data[5]&15]+e.portChannelOffsetMap[o[r]],Q=!!(i.data[7]>0&&i.data[5]>>4);d=n[C],d.isDrum=Q}break}}),a.forEach((i,r)=>{i.size===0&&(y(`%cDetected change but no keys for %c${r.name}`,c.info,c.value),a.delete(r))}),z(),a}function $a(e,A=0){let t=l=>(l.data=new O(l.data.buffer),6e7/dt(l.data,3)),n=[],a=e.tracks.map(l=>l.events).flat();a.sort((l,C)=>l.ticks-C.ticks);for(let l=0;l<16;l++)n.push([]);let o=0,i=60/(120*e.timeDivision),r=0,g=0,E=[];for(let l=0;l<16;l++)E.push([]);let d=(l,C)=>{let Q=E[C].findIndex(S=>S.midiNote===l),m=E[C][Q];if(m){let S=o-m.start;m.length=S,C===me&&(m.length=S<A?A:S),E[C].splice(Q,1)}g--};for(;r<a.length;){let l=a[r],C=l.statusByte>>4,Q=l.statusByte&15;if(C===8)d(l.data[0],Q);else if(C===9)if(l.data[1]===0)d(l.data[0],Q);else{d(l.data[0],Q);let m={midiNote:l.data[0],start:o,length:-1,velocity:l.data[1]/127};n[Q].push(m),E[Q].push(m),g++}else l.statusByte===81&&(i=60/(t(l)*e.timeDivision));if(++r>=a.length)break;o+=i*(a[r].ticks-l.ticks)}return g>0&&E.forEach((l,C)=>{l.forEach(Q=>{let m=o-Q.start;Q.length=m,C===me&&(Q.length=m<A?A:m)})}),n}var bt={linear:0,nearestNeighbor:1,hermite:2},YA={Idle:0,RPCoarse:1,RPFine:2,NRPCoarse:3,NRPFine:4,DataCoarse:5,DataFine:6},oA={channelTuning:0,channelTransposeFine:1,modulationMultiplier:2,masterTuning:3,channelTuningSemitones:4,channelKeyShift:5,sf2NPRNGeneratorLSB:6};function Pe(e,A,t,n){return new ZA(n,R.controllerChange|e%16,new O([A,t]))}function Ar(e,A){let t=16|[1,2,3,4,5,6,7,8,0,9,10,11,12,13,14,15][e%16],n=[65,16,66,18,64,t,21,1],a=128-(64+t+21+1)%128;return new ZA(A,R.systemExclusive,new O([...n,a,247]))}function er(e,A=[],t=[],n=[],s=[]){RA("%cApplying changes to the MIDI file...",c.info),y("Desired program changes:",A),y("Desired CC changes:",t),y("Desired channels to clear:",n),y("Desired channels to transpose:",s);let a=new Set;A.forEach(S=>{a.add(S.channel)});let o="gs",i=!1,r=e.tracks.map(S=>S.port),g={},E=0,d=(S,D)=>{e.tracks[S].channels.size!==0&&(E===0&&(E+=16,g[D]=0),g[D]===void 0&&(g[D]=E,E+=16),r[S]=D)};e.tracks.forEach((S,D)=>{d(D,S.port)});let l=E,C=Array(l).fill(!0),Q=Array(l).fill(0),m=Array(l).fill(0);if(s.forEach(S=>{let D=Math.trunc(S.keyShift),w=S.keyShift-D;Q[S.channel]=D,m[S.channel]=w}),e.iterate((S,D,w)=>{let M=e.tracks[D],P=w[D],x=()=>{M.deleteEvent(P),w[D]--},B=(K,q=0)=>{M.addEvent(K,P+q),w[D]++},j=g[r[D]]||0;if(S.statusByte===R.midiPort){d(D,S.data[0]);return}if(S.statusByte<=R.sequenceSpecific&&S.statusByte>=R.sequenceNumber)return;let J=S.statusByte&240,Y=S.statusByte&15,U=Y+j;if(n.includes(U)){x();return}switch(J){case R.noteOn:if(C[U]){C[U]=!1,t.filter(q=>q.channel===U).forEach(q=>{let Z=Pe(Y,q.controllerNumber,q.controllerValue,S.ticks);B(Z)});let K=m[U];if(K!==0){let q=K*64+64,Z=Pe(Y,p.registeredParameterMSB,0,S.ticks),CA=Pe(Y,p.registeredParameterLSB,1,S.ticks),gA=Pe(U,p.dataEntryMSB,q,S.ticks),V=Pe(Y,p.dataEntryLSB,0,S.ticks);B(V),B(gA),B(CA),B(Z)}if(a.has(U)){let q=A.find(b=>b.channel===U);if(!q)return;y(`%cSetting %c${q.channel}%c to %c${te.toMIDIString(q)}%c. Track num: %c${D}`,c.info,c.recognized,c.info,c.recognized,c.info,c.recognized);let Z=q.bankMSB,CA=q.bankLSB,gA=q.program,V=new ZA(S.ticks,R.programChange|Y,new O([gA]));B(V);let F=(b,X)=>{let tA=Pe(Y,b?p.bankSelectLSB:p.bankSelect,X,S.ticks);B(tA)};fA.isSystemXG(o)&&q.isGMGSDrum&&(y(`%cAdding XG Drum change on track %c${D}`,c.recognized,c.value),Z=fA.getDrumBank(o),CA=0),F(!1,Z),F(!0,CA),q.isGMGSDrum&&!fA.isSystemXG(o)&&Y!==me&&(y(`%cAdding GS Drum change on track %c${D}`,c.recognized,c.value),B(Ar(Y,S.ticks)))}}S.data[0]+=Q[U];break;case R.noteOff:S.data[0]+=Q[U];break;case R.programChange:if(a.has(U)){x();return}break;case R.controllerChange:{let K=S.data[0];if(t.find(Z=>Z.channel===U&&K===Z.controllerNumber)!==void 0){x();return}(K===p.bankSelect||K===p.bankSelectLSB)&&a.has(U)&&x()}break;case R.systemExclusive:if(jn(S))y("%cXG system on detected",c.info),o="xg",i=!0;else if(S.data[0]===67&&S.data[2]===76&&S.data[3]===8&&S.data[5]===3)a.has(S.data[4]+j)&&x();else if(es(S))y("%cGM2 system on detected",c.info),o="gm2",i=!0;else if($n(S)){i=!0,y("%cGS on detected!",c.recognized);break}else As(S)&&(y("%cGM on detected, removing!",c.info),x(),i=!1)}}),!i&&A.length>0){let S=0;e.tracks[0].events[0].statusByte===R.trackName&&S++,e.tracks[0].addEvent(Ws(0),S),y("%cGS on not detected. Adding it.",c.info)}e.flush(),z()}function tr(e,A){let t=[],n=[],s=[],a=[];A.channelSnapshots.forEach((o,i)=>{if(o.isMuted){n.push(i);return}let r=o.channelTransposeKeyShift+o.customControllers[oA.channelTransposeFine]/100;r!==0&&t.push({channel:i,keyShift:r}),o.lockPreset&&s.push({channel:i,...o.patch}),o.lockedControllers.forEach((g,E)=>{if(!g||E>127||E===p.bankSelect)return;let d=o.midiControllers[E]>>7;a.push({channel:i,controllerNumber:E,controllerValue:d})})}),e.modify(s,a,n,t)}var Bn={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},Je={inLineResource:1,inFileResource:2,inFileNode:3,externalFile:4,externalXMF:5,XMFFileURIandNodeID:6},Cn={StandardMIDIFile:0,StandardMIDIFileType1:1,DLS1:2,DLS2:3,DLS22:4,mobileDLS:5,unknown:-1,folder:-2},nr={standard:0,MMA:1,registered:2,nonRegistered:3},Rt={none:0,MMAUnpacker:1,registered:2,nonRegistered:3},sr=class _s{length;itemCount;metadataLength;metadata={};nodeData;innerNodes=[];packedContent=!1;nodeUnpackers=[];resourceFormat="unknown";referenceTypeID;constructor(A){let t=A.currentIndex;this.length=uA(A),this.itemCount=uA(A);let n=uA(A),s=A.currentIndex-t,a=n-s,o=A.slice(A.currentIndex,A.currentIndex+a);A.currentIndex+=a,this.metadataLength=uA(o);let i=o.slice(o.currentIndex,o.currentIndex+this.metadataLength);o.currentIndex+=this.metadataLength;let r,g;for(;i.currentIndex<i.length;){if(i[i.currentIndex]===0)i.currentIndex++,r=uA(i),Object.values(Bn).includes(r)?g=Object.keys(Bn).find(m=>Bn[m]===r)??"":(y(`Unknown field specifier: ${r}`),g=`unknown_${r}`);else{let m=uA(i);r=hA(i,m),g=r}let Q=uA(i);if(Q===0){let m=uA(i),S=i.slice(i.currentIndex,i.currentIndex+m);i.currentIndex+=m,uA(S)<4?this.metadata[g]=hA(S,m-1):this.metadata[g]=S.slice(S.currentIndex)}else y(`International content: ${Q}`),i.currentIndex+=uA(i)}let E=o.currentIndex,d=uA(o),l=o.slice(o.currentIndex,E+d);if(o.currentIndex=E+d,d>0)for(this.packedContent=!0;l.currentIndex<d;){let C={};switch(C.id=uA(l),C.id){case Rt.nonRegistered:case Rt.registered:throw z(),new Error(`Unsupported unpacker ID: ${C.id}`);default:throw z(),new Error(`Unknown unpacker ID: ${C.id}`);case Rt.none:C.standardID=uA(l);break;case Rt.MMAUnpacker:{let Q=l[l.currentIndex++];Q===0&&(Q<<=8,Q|=l[l.currentIndex++],Q<<=8,Q|=l[l.currentIndex++]);let m=uA(l);C.manufacturerID=Q,C.manufacturerInternalID=m}break}C.decodedSize=uA(l),this.nodeUnpackers.push(C)}switch(A.currentIndex=t+n,this.referenceTypeID=uA(A),this.nodeData=A.slice(A.currentIndex,t+this.length),A.currentIndex=t+this.length,this.referenceTypeID){case Je.inLineResource:break;case Je.externalXMF:case Je.inFileNode:case Je.XMFFileURIandNodeID:case Je.externalFile:case Je.inFileResource:throw z(),new Error(`Unsupported reference type: ${this.referenceTypeID}`);default:throw z(),new Error(`Unknown reference type: ${this.referenceTypeID}`)}if(this.isFile){if(this.packedContent){let Q=this.nodeData.slice(2,this.nodeData.length);y(`%cPacked content. Attempting to deflate. Target size: %c${this.nodeUnpackers[0].decodedSize}`,c.warn,c.value);try{this.nodeData=new O(Js(Q).buffer)}catch(m){if(z(),m instanceof Error)throw new Error(`Error unpacking XMF file contents: ${m.message}.`)}}let C=this.metadata.resourceFormat;if(C===void 0)nA("No resource format for this file node!");else{C[0]!==nr.standard&&(y(`Non-standard formatTypeID: ${C.toString()}`),this.resourceFormat=C.toString());let m=C[1];Object.values(Cn).includes(m)?this.resourceFormat=Object.keys(Cn).find(S=>Cn[S]===m):y(`Unrecognized resource format: ${m}`)}}else for(this.resourceFormat="folder";this.nodeData.currentIndex<this.nodeData.length;){let C=this.nodeData.currentIndex,Q=uA(this.nodeData),m=this.nodeData.slice(C,C+Q);this.nodeData.currentIndex=C+Q,this.innerNodes.push(new _s(m))}}get isFile(){return this.itemCount===0}};function ar(e,A){e.bankOffset=0;let t=hA(A,4);if(t!=="XMF_")throw z(),new SyntaxError(`Invalid XMF Header! Expected "_XMF", got "${t}"`);OA("%cParsing XMF file...",c.info);let n=hA(A,4);if(y(`%cXMF version: %c${n}`,c.info,c.recognized),n==="2.00"){let r=Oe(A,4),g=Oe(A,4);y(`%cFile Type ID: %c${r}%c, File Type Revision ID: %c${g}`,c.info,c.recognized,c.info,c.recognized)}uA(A);let s=uA(A);A.currentIndex+=s,A.currentIndex=uA(A);let a=new sr(A),o,i=r=>{let g=(E,d)=>{r.metadata[E]!==void 0&&typeof r.metadata[E]=="string"&&(e.rmidiInfo[d]=ne(r.metadata[E]))};if(g("nodeName","name"),g("title","name"),g("copyrightNotice","copyright"),g("comment","comment"),r.isFile)switch(r.resourceFormat){default:return;case"DLS1":case"DLS2":case"DLS22":case"mobileDLS":y("%cFound embedded DLS!",c.recognized),e.embeddedSoundBank=r.nodeData.buffer;break;case"StandardMIDIFile":case"StandardMIDIFileType1":y("%cFound embedded MIDI!",c.recognized),o=r.nodeData;break}else for(let E of r.innerNodes)i(E)};if(i(a),z(),!o)throw new Error("No MIDI data in the XMF file!");return o}var Jt=class js{name="";port=0;channels=new Set;events=[];static copyFrom(A){let t=new js;return t.copyFrom(A),t}copyFrom(A){this.name=A.name,this.port=A.port,this.channels=new Set(A.channels),this.events=A.events.map(t=>new ZA(t.ticks,t.statusByte,new O(t.data)))}addEvent(A,t){this.events.splice(t,0,A)}deleteEvent(A){this.events.splice(A,1)}pushEvent(A){this.events.push(A)}};function ps(e,A,t){RA("%cParsing MIDI File...",c.info),e.fileName=t;let n=new O(A),s=n,a=g=>{let E=hA(g,4),d=Oe(g,4),l=new O(d),C={type:E,size:d,data:l},Q=g.slice(g.currentIndex,g.currentIndex+C.size);return C.data.set(Q,0),g.currentIndex+=C.size,C},o=ee(n,4);if(o==="RIFF"){n.currentIndex+=8;let g=hA(n,4);if(g!=="RMID")throw z(),new SyntaxError(`Invalid RMIDI Header! Expected "RMID", got "${g}"`);let E=aA(n);if(E.header!=="data")throw z(),new SyntaxError(`Invalid RMIDI Chunk header! Expected "data", got "${g}"`);s=E.data;let d=!1,l=!1;for(;n.currentIndex<=n.length;){let C=n.currentIndex,Q=aA(n,!0);if(Q.header==="RIFF"){let m=hA(Q.data,4).toLowerCase();m==="sfbk"||m==="sfpk"||m==="dls "?(y("%cFound embedded soundbank!",c.recognized),e.embeddedSoundBank=n.slice(C,C+Q.size).buffer):nA(`Unknown RIFF chunk: "${m}"`),m==="dls "?e.isDLSRMIDI=!0:d=!0}else if(Q.header==="LIST"&&hA(Q.data,4)==="INFO")for(y("%cFound RMIDI INFO chunk!",c.recognized);Q.data.currentIndex<=Q.size;){let S=aA(Q.data,!0),D=S.header,w=S.data;switch(D){default:nA(`Unknown RMIDI Info: ${D}`);break;case"INAM":e.rmidiInfo.name=w;break;case"IALB":case"IPRD":e.rmidiInfo.album=w;break;case"ICRT":case"ICRD":e.rmidiInfo.creationDate=w;break;case"IART":e.rmidiInfo.artist=w;break;case"IGNR":e.rmidiInfo.genre=w;break;case"IPIC":e.rmidiInfo.picture=w;break;case"ICOP":e.rmidiInfo.copyright=w;break;case"ICMT":e.rmidiInfo.comment=w;break;case"IENG":e.rmidiInfo.engineer=w;break;case"ISFT":e.rmidiInfo.software=w;break;case"ISBJ":e.rmidiInfo.subject=w;break;case"IENC":e.rmidiInfo.infoEncoding=w;break;case"MENC":e.rmidiInfo.midiEncoding=w;break;case"DBNK":e.bankOffset=Hs(w,2),l=!0;break}}}d&&!l&&(e.bankOffset=1),e.isDLSRMIDI&&(e.bankOffset=0),e.embeddedSoundBank===void 0&&(e.bankOffset=0)}else o==="XMF_"?s=ar(e,n):s=n;let i=a(s);if(i.type!=="MThd")throw z(),new SyntaxError(`Invalid MIDI Header! Expected "MThd", got "${i.type}"`);if(i.size!==6)throw z(),new RangeError(`Invalid MIDI header chunk size! Expected 6, got ${i.size}`);e.format=Oe(i.data,2);let r=Oe(i.data,2);e.timeDivision=Oe(i.data,2);for(let g=0;g<r;g++){let E=new Jt,d=a(s);if(d.type!=="MTrk")throw z(),new SyntaxError(`Invalid track header! Expected "MTrk" got "${d.type}"`);let l,C=0;for(e.format===2&&g>0&&(C+=e.tracks[g-1].events[e.tracks[g-1].events.length-1].ticks);d.data.currentIndex<d.size;){C+=uA(d.data);let Q=d.data[d.data.currentIndex],m;if(l!==void 0&&Q<128)m=l;else{if(Q<128)throw z(),new SyntaxError(`Unexpected byte with no running byte. (${Q})`);m=d.data[d.data.currentIndex++]}let S=Ya(m),D;switch(S){case-1:D=0;break;case-2:m=d.data[d.data.currentIndex++],D=uA(d.data);break;case-3:D=uA(d.data);break;default:D=Pa[m>>4],l=m;break}let w=new O(D);w.set(d.data.slice(d.data.currentIndex,d.data.currentIndex+D),0);let M=new ZA(C,m,w);E.pushEvent(M),d.data.currentIndex+=D}e.tracks.push(E),y(`%cParsed %c${e.tracks.length}%c / %c${e.tracks.length}`,c.info,c.value,c.info,c.value)}y("%cAll tracks parsed correctly!",c.recognized),e.flush(!1),z(),y(`%cMIDI file parsed. Total tick time: %c${e.lastVoiceEventTick}%c, total seconds time: %c${e.duration}`,c.info,c.recognized,c.info,c.recognized)}var rr=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"]]),or=[rr];function ir(e){for(let A of or){let t=e;A.forEach((s,a)=>{let o=new RegExp(a,"gi");t=t.replace(o,s)});let n=new Date(t);if(!isNaN(n.getTime()))return n}}function Ir(e){let A=/^(\d{2})\.(\d{2})\.(\d{4})$/.exec(e);if(A){let t=parseInt(A[1]),n=parseInt(A[2])-1,s=parseInt(A[3]),a=new Date(s,n,t);if(!isNaN(a.getTime()))return a}}function gr(e){let A=/^(\d{1,2})\s{1,2}(\d{1,2})\s{1,2}(\d{2})$/.exec(e);if(A){let t=A[1],n=(parseInt(A[2])+1).toString(),s=A[3],a=new Date(`${n}/${t}/${s}`);if(!isNaN(a.getTime()))return a}}function cr(e){let t=/\b\d{4}\b/.exec(e);return t?new Date(t[0]):void 0}function ts(e){if(e=e.trim(),e.length<1)return new Date;let A=e.replace(/\b(\d+)(st|nd|rd|th)\b/g,"$1"),t=new Date(A);if(isNaN(t.getTime())){let n=ir(e);if(n)return n;let s=Ir(e);if(s)return s;let a=gr(e);if(a)return a;let o=cr(e);return o||(nA(`Invalid date: "${e}". Replacing with the current date!`),new Date)}return t}var be=class vt{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};fileName;format=0;rmidiInfo={};bankOffset=0;isKaraokeFile=!1;isMultiPort=!1;isDLSRMIDI=!1;embeddedSoundBank;binaryName;get infoEncoding(){let A=this.rmidiInfo.infoEncoding;if(!A)return;let t=A.byteLength;return A[A.byteLength-1]===0&&t--,ee(A,t)}static fromArrayBuffer(A,t=""){let n=new vt;return ps(n,A,t),n}static async fromFile(A){let t=new vt;return ps(t,await A.arrayBuffer(),A.name),t}static copyFrom(A){let t=new vt;return t.copyFrom(A),t}copyFrom(A){this.copyMetadataFrom(A),this.embeddedSoundBank=A?.embeddedSoundBank?.slice(0)??void 0,this.tracks=A.tracks.map(t=>Jt.copyFrom(t))}midiTicksToSeconds(A){let t=0;for(;A>0;){let n=this.tempoChanges.find(a=>a.ticks<A);if(!n)return t;let s=A-n.ticks;t+=s*60/(n.tempo*this.timeDivision),A-=s}return t}getUsedProgramsAndKeys(A){return ja(this,A)}flush(A=!0){if(A)for(let t of this.tracks)t.events.sort((n,s)=>n.ticks-s.ticks);this.parseInternal()}getNoteTimes(A=0){return $a(this,A)}writeMIDI(){return Ja(this)}writeRMIDI(A,t=Ss){return _a(this,A,zn(t,Ss))}modify(A=[],t=[],n=[],s=[]){er(this,A,t,n,s)}applySnapshot(A){tr(this,A)}getName(A="Shift_JIS"){let t="",n=this.getRMIDInfo("name");if(n)return n.trim();if(this.binaryName){A=this.getRMIDInfo("midiEncoding")??A;try{t=new TextDecoder(A).decode(this.binaryName).trim()}catch(s){nA(`Failed to decode MIDI name: ${s}`)}}return t||this.fileName}getExtraMetadata(A="Shift_JIS"){A=this.infoEncoding??A;let t=new TextDecoder(A);return this.extraMetadata.map(n=>t.decode(n.data).replace(/@T|@A/g,"").trim())}setRMIDInfo(A,t){if(this.rmidiInfo.infoEncoding=ne("utf-8",!0),A==="picture")this.rmidiInfo.picture=new Uint8Array(t);else if(A==="creationDate")this.rmidiInfo.creationDate=ne(t.toISOString(),!0);else{let n=new TextEncoder().encode(t);this.rmidiInfo[A]=new Uint8Array([...n,0])}}getRMIDInfo(A){if(!this.rmidiInfo[A])return;let t=this.infoEncoding??"UTF-8";if(A==="picture")return this.rmidiInfo[A].buffer;if(A==="creationDate")return ts(ee(this.rmidiInfo[A]));try{let n=new TextDecoder(t),s=this.rmidiInfo[A];return s[s.length-1]===0&&(s=s?.slice(0,s.length-1)),n.decode(s.buffer).trim()}catch(n){nA(`Failed to decode ${A} name: ${n}`);return}}iterate(A){let t=Array(this.tracks.length).fill(0),n=this.tracks.length,s=()=>{let a=0,o=1/0;return this.tracks.forEach(({events:i},r)=>{t[r]>=i.length||i[t[r]].ticks<o&&(a=r,o=i[t[r]].ticks)}),a};for(;n>0;){let a=s(),o=this.tracks[a].events;if(t[a]>=o.length){n--;continue}let i=o[t[a]];A(i,a,t),t[a]++}}copyMetadataFrom(A){this.fileName=A.fileName,this.timeDivision=A.timeDivision,this.duration=A.duration,this.firstNoteOn=A.firstNoteOn,this.lastVoiceEventTick=A.lastVoiceEventTick,this.format=A.format,this.bankOffset=A.bankOffset,this.isKaraokeFile=A.isKaraokeFile,this.isMultiPort=A.isMultiPort,this.isDLSRMIDI=A.isDLSRMIDI,this.isDLSRMIDI=A.isDLSRMIDI,this.tempoChanges=[...A.tempoChanges],this.extraMetadata=A.extraMetadata.map(t=>new ZA(t.ticks,t.statusByte,new O(t.data))),this.lyrics=A.lyrics.map(t=>new ZA(t.ticks,t.statusByte,new O(t.data))),this.portChannelOffsetMap=[...A.portChannelOffsetMap],this.binaryName=A?.binaryName?.slice(),this.loop={...A.loop},this.keyRange={...A.keyRange},this.rmidiInfo={},Object.entries(A.rmidiInfo).forEach(t=>{let n=t[0],s=t[1];this.rmidiInfo[n]=s.slice()})}parseInternal(){OA("%cInterpreting MIDI events...",c.info);let A=!1;this.keyRange={max:0,min:127},this.extraMetadata=[];let t=!1;typeof this.rmidiInfo.name<"u"&&(t=!0);let n=null,s=null;for(let r of this.tracks){let g=new Set,E=!1;for(let l=0;l<r.events.length;l++){let C=r.events[l];if(C.statusByte>=128&&C.statusByte<240){E=!0;for(let m=0;m<C.data.length;m++)C.data[m]=Math.min(127,C.data[m]);switch(C.ticks>this.lastVoiceEventTick&&(this.lastVoiceEventTick=C.ticks),C.statusByte&240){case R.controllerChange:switch(C.data[0]){case 2:case 116:n=C.ticks;break;case 4:case 117:s===null?s=C.ticks:s=0;break;case 0:this.isDLSRMIDI&&C.data[1]!==0&&C.data[1]!==127&&(y("%cDLS RMIDI with offset 1 detected!",c.recognized),this.bankOffset=1)}break;case R.noteOn:{g.add(C.statusByte&15);let m=C.data[0];this.keyRange.min=Math.min(this.keyRange.min,m),this.keyRange.max=Math.max(this.keyRange.max,m);break}}}let Q=ee(C.data);switch(C.statusByte){case R.endOfTrack:l!==r.events.length-1&&(r.deleteEvent(l),l--,nA("Unexpected EndOfTrack. Removing!"));break;case R.setTempo:this.tempoChanges.push({ticks:C.ticks,tempo:6e7/dt(C.data,3)});break;case R.marker:switch(Q.trim().toLowerCase()){default:break;case"start":case"loopstart":n=C.ticks;break;case"loopend":s=C.ticks}break;case R.copyright:this.extraMetadata.push(C);break;case R.lyric:Q.trim().startsWith("@KMIDI KARAOKE FILE")&&(this.isKaraokeFile=!0,y("%cKaraoke MIDI detected!",c.recognized)),this.isKaraokeFile?C.statusByte=R.text:this.lyrics.push(C);case R.text:{let m=Q.trim();m.startsWith("@KMIDI KARAOKE FILE")?(this.isKaraokeFile=!0,y("%cKaraoke MIDI detected!",c.recognized)):this.isKaraokeFile&&(m.startsWith("@T")||m.startsWith("@A")?A?this.extraMetadata.push(C):(this.binaryName=C.data.slice(2),A=!0,t=!0):m.startsWith("@")||this.lyrics.push(C));break}}}r.channels=g,r.name="";let d=r.events.find(l=>l.statusByte===R.trackName);d&&this.tracks.indexOf(r)>0&&(r.name=ee(d.data),!E&&!r.name.toLowerCase().includes("setup")&&this.extraMetadata.push(d))}this.tempoChanges.reverse(),y("%cCorrecting loops, ports and detecting notes...",c.info);let a=[];for(let r of this.tracks){let g=r.events.find(E=>(E.statusByte&240)===R.noteOn);g&&a.push(g.ticks)}this.firstNoteOn=Math.min(...a),y(`%cFirst note-on detected at: %c${this.firstNoteOn}%c ticks!`,c.info,c.recognized,c.info),n!==null&&s===null?(n=this.firstNoteOn,s=this.lastVoiceEventTick):(n??=this.firstNoteOn,(s===null||s===0)&&(s=this.lastVoiceEventTick)),this.loop={start:n,end:s},y(`%cLoop points: start: %c${this.loop.start}%c end: %c${this.loop.end}`,c.info,c.recognized,c.info,c.recognized);let o=0;this.portChannelOffsetMap=[];for(let r of this.tracks)if(r.port=-1,r.channels.size!==0)for(let g of r.events){if(g.statusByte!==R.midiPort)continue;let E=g.data[0];r.port=E,this.portChannelOffsetMap[E]===void 0&&(this.portChannelOffsetMap[E]=o,o+=16)}this.portChannelOffsetMap=[...this.portChannelOffsetMap].map(r=>r??0);let i=1/0;for(let r of this.tracks)r.port!==-1&&i>r.port&&(i=r.port);i===1/0&&(i=0);for(let r of this.tracks)(r.port===-1||r.port===void 0)&&(r.port=i);if(this.portChannelOffsetMap.length===0&&(this.portChannelOffsetMap=[0]),this.portChannelOffsetMap.length<2?y("%cNo additional MIDI Ports detected.",c.info):(this.isMultiPort=!0,y("%cMIDI Ports detected!",c.recognized)),!t)if(this.tracks.length>1){if(this.tracks[0].events.find(r=>r.statusByte>=R.noteOn&&r.statusByte<R.polyPressure)===void 0){let r=this.tracks[0].events.find(g=>g.statusByte===R.trackName);r&&(this.binaryName=r.data)}}else{let r=this.tracks[0].events.find(g=>g.statusByte===R.trackName);r&&(this.binaryName=r.data)}if(this.extraMetadata=this.extraMetadata.filter(r=>r.data.length>0),this.lyrics.sort((r,g)=>r.ticks-g.ticks),!this.tracks.some(r=>r.events[0].ticks===0)){let r=this.tracks[0],g=this?.binaryName?.buffer;g||(g=new Uint8Array(0).buffer),r.events.unshift(new ZA(0,R.trackName,new O(g)))}this.duration=this.midiTicksToSeconds(this.lastVoiceEventTick),this.binaryName&&this.binaryName.length<1&&(this.binaryName=void 0),y("%cSuccess!",c.recognized),z()}};function Er(e,A){if(this.externalMIDIPlayback&&e.statusByte>=128){this.sendMIDIMessage([e.statusByte,...e.data]);return}let t=this._midiData.tracks[A],n=_n(e.statusByte),s=this.midiPortChannelOffsets[this.currentMIDIPorts[A]]||0;switch(n.channel+=s,n.status){case R.noteOn:{let a=e.data[1];if(a>0)this.synth.noteOn(n.channel,e.data[0],a),this.playingNotes.push({midiNote:e.data[0],channel:n.channel,velocity:a});else{this.synth.noteOff(n.channel,e.data[0]);let o=this.playingNotes.findIndex(i=>i.midiNote===e.data[0]&&i.channel===n.channel);o!==-1&&this.playingNotes.splice(o,1)}break}case R.noteOff:{this.synth.noteOff(n.channel,e.data[0]);let a=this.playingNotes.findIndex(o=>o.midiNote===e.data[0]&&o.channel===n.channel);a!==-1&&this.playingNotes.splice(a,1);break}case R.pitchWheel:this.synth.pitchWheel(n.channel,e.data[1]<<7|e.data[0]);break;case R.controllerChange:if(this._midiData.isMultiPort&&t.channels.size===0)return;this.synth.controllerChange(n.channel,e.data[0],e.data[1]);break;case R.programChange:if(this._midiData.isMultiPort&&t.channels.size===0)return;this.synth.programChange(n.channel,e.data[0]);break;case R.polyPressure:this.synth.polyPressure(n.channel,e.data[0],e.data[1]);break;case R.channelPressure:this.synth.channelPressure(n.channel,e.data[0]);break;case R.systemExclusive:this.synth.systemExclusive(e.data,s);break;case R.setTempo:{let a=6e7/dt(e.data,3);this.oneTickToSeconds=60/(a*this._midiData.timeDivision),this.oneTickToSeconds===0&&(this.oneTickToSeconds=60/(120*this._midiData.timeDivision),y("invalid tempo! falling back to 120 BPM"),a=120);break}case R.timeSignature:case R.endOfTrack:case R.midiChannelPrefix:case R.songPosition:case R.activeSensing:case R.keySignature:case R.sequenceNumber:case R.sequenceSpecific:case R.text:case R.lyric:case R.copyright:case R.trackName:case R.marker:case R.cuePoint:case R.instrumentName:case R.programName:break;case R.midiPort:this.assignMIDIPort(A,e.data[0]);break;case R.reset:this.synth.stopAllChannels(),this.synth.resetAllControllers();break;default:y(`%cUnrecognized Event: %c${e.statusByte}%c status byte: %c${Object.keys(R).find(a=>R[a]===n.status)}`,c.warn,c.unrecognized,c.warn,c.value);break}n.status>=0&&n.status<128&&this.callEvent("metaEvent",{event:e,trackIndex:A})}function Br(){if(this.paused||!this._midiData)return;let e=this.currentTime;for(;this.playedTime<e;){let A=this.findFirstEventIndex(),n=this._midiData.tracks[A].events[this.eventIndexes[A]++];this.processEvent(n,A);let s=this.findFirstEventIndex(),a=this._midiData.tracks[s];if(this.loopCount>0&&this._midiData.loop.end<=n.ticks){this.loopCount!==1/0&&(this.loopCount--,this.callEvent("loopCountChange",{newCount:this.loopCount})),this.setTimeTicks(this._midiData.loop.start);return}if(a.events.length<=this.eventIndexes[s]){this.songIsFinished();return}let o=a.events[this.eventIndexes[s]];this.playedTime+=this.oneTickToSeconds*(o.ticks-n.ticks)}}function Cr(e,A){this._midiData.tracks[e].channels.size!==0&&(this.midiPortChannelOffset===0&&(this.midiPortChannelOffset+=16,this.midiPortChannelOffsets[A]=0),this.midiPortChannelOffsets[A]===void 0&&(this.synth.midiChannels.length<this.midiPortChannelOffset+15&&this.addNewMIDIPort(),this.midiPortChannelOffsets[A]=this.midiPortChannelOffset,this.midiPortChannelOffset+=16),this.currentMIDIPorts[e]=A)}function hr(e){if(!e.tracks)throw new Error("This MIDI has no tracks!");this.oneTickToSeconds=60/(120*e.timeDivision),this._midiData=e,this.synth.clearEmbeddedBank(),this._midiData.embeddedSoundBank!==void 0&&(y("%cEmbedded soundbank detected! Using it.",c.recognized),this.synth.setEmbeddedSoundBank(this._midiData.embeddedSoundBank,this._midiData.bankOffset)),RA("%cPreloading samples...",c.info),this._midiData.getUsedProgramsAndKeys(this.synth.soundBankManager).forEach((t,n)=>{y(`%cPreloading used samples on %c${n.name}%c...`,c.info,c.recognized,c.info);for(let s of t){let[a,o]=s.split("-").map(Number);this.synth.getVoicesForPreset(n,a,o,a)}}),z(),this.currentMIDIPorts=this._midiData.tracks.map(t=>t.port),this.midiPortChannelOffset=0,this.midiPortChannelOffsets={},this._midiData.tracks.forEach((t,n)=>{this.assignMIDIPort(n,t.port)}),this.firstNoteTime=this._midiData.midiTicksToSeconds(this._midiData.firstNoteOn),y(`%cTotal song time: ${fs(Math.ceil(this._midiData.duration)).time}`,c.recognized),this.callEvent("songChange",{songIndex:this._songIndex}),this._midiData.duration<=.2&&(nA(`%cVery short song: (${fs(Math.round(this._midiData.duration)).time}). Disabling loop!`,c.warn),this.loopCount=0),this.currentTime=0}var I={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},Fn=Object.keys(I).length,lr=Math.max(...Object.values(I)),T=[];T[I.startAddrsOffset]={min:0,max:32768,def:0,nrpn:1};T[I.endAddrOffset]={min:-32768,max:32768,def:0,nrpn:1};T[I.startloopAddrsOffset]={min:-32768,max:32768,def:0,nrpn:1};T[I.endloopAddrsOffset]={min:-32768,max:32768,def:0,nrpn:1};T[I.startAddrsCoarseOffset]={min:0,max:32768,def:0,nrpn:1};T[I.modLfoToPitch]={min:-12e3,max:12e3,def:0,nrpn:2};T[I.vibLfoToPitch]={min:-12e3,max:12e3,def:0,nrpn:2};T[I.modEnvToPitch]={min:-12e3,max:12e3,def:0,nrpn:2};T[I.initialFilterFc]={min:1500,max:13500,def:13500,nrpn:2};T[I.initialFilterQ]={min:0,max:960,def:0,nrpn:1};T[I.modLfoToFilterFc]={min:-12e3,max:12e3,def:0,nrpn:2};T[I.vibLfoToFilterFc]={min:-12e3,max:12e3,def:0,nrpn:2};T[I.modEnvToFilterFc]={min:-12e3,max:12e3,def:0,nrpn:2};T[I.endAddrsCoarseOffset]={min:-32768,max:32768,def:0,nrpn:1};T[I.modLfoToVolume]={min:-960,max:960,def:0,nrpn:1};T[I.vibLfoToVolume]={min:-960,max:960,def:0,nrpn:1};T[I.chorusEffectsSend]={min:0,max:1e3,def:0,nrpn:1};T[I.reverbEffectsSend]={min:0,max:1e3,def:0,nrpn:1};T[I.pan]={min:-500,max:500,def:0,nrpn:1};T[I.delayModLFO]={min:-12e3,max:5e3,def:-12e3,nrpn:2};T[I.freqModLFO]={min:-16e3,max:4500,def:0,nrpn:4};T[I.delayVibLFO]={min:-12e3,max:5e3,def:-12e3,nrpn:2};T[I.freqVibLFO]={min:-16e3,max:4500,def:0,nrpn:4};T[I.delayModEnv]={min:-32768,max:5e3,def:-32768,nrpn:2};T[I.attackModEnv]={min:-32768,max:8e3,def:-32768,nrpn:2};T[I.holdModEnv]={min:-12e3,max:5e3,def:-12e3,nrpn:2};T[I.decayModEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};T[I.sustainModEnv]={min:0,max:1e3,def:0,nrpn:1};T[I.releaseModEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};T[I.keyNumToModEnvHold]={min:-1200,max:1200,def:0,nrpn:1};T[I.keyNumToModEnvDecay]={min:-1200,max:1200,def:0,nrpn:1};T[I.delayVolEnv]={min:-12e3,max:5e3,def:-12e3,nrpn:2};T[I.attackVolEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};T[I.holdVolEnv]={min:-12e3,max:5e3,def:-12e3,nrpn:2};T[I.decayVolEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};T[I.sustainVolEnv]={min:0,max:1440,def:0,nrpn:1};T[I.releaseVolEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};T[I.keyNumToVolEnvHold]={min:-1200,max:1200,def:0,nrpn:1};T[I.keyNumToVolEnvDecay]={min:-1200,max:1200,def:0,nrpn:1};T[I.startloopAddrsCoarseOffset]={min:-32768,max:32768,def:0,nrpn:1};T[I.keyNum]={min:-1,max:127,def:-1,nrpn:1};T[I.velocity]={min:-1,max:127,def:-1,nrpn:1};T[I.initialAttenuation]={min:0,max:1440,def:0,nrpn:1};T[I.endloopAddrsCoarseOffset]={min:-32768,max:32768,def:0,nrpn:1};T[I.coarseTune]={min:-120,max:120,def:0,nrpn:1};T[I.fineTune]={min:-12700,max:12700,def:0,nrpn:1};T[I.scaleTuning]={min:0,max:1200,def:100,nrpn:1};T[I.exclusiveClass]={min:0,max:99999,def:0,nrpn:0};T[I.overridingRootKey]={min:-1,max:127,def:-1,nrpn:0};T[I.sampleModes]={min:0,max:3,def:0,nrpn:0};var wA={monoSample:1,rightSample:2,leftSample:4,linkedSample:8,romMonoSample:32769,romRightSample:32770,romLeftSample:32772,romLinkedSample:32776},AA={noController:0,noteOnVelocity:2,noteOnKeyNum:3,polyPressure:10,channelPressure:13,pitchWheel:14,pitchWheelRange:16,link:127},QA={linear:0,concave:1,convex:2,switch:3};var N={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},G={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},ys={forward:0,loopAndRelease:1},SA=128,Gn=147,Ze=new Int16Array(Gn).fill(0),pA=(e,A)=>Ze[e]=A<<7;pA(p.mainVolume,100);pA(p.balance,64);pA(p.expressionController,127);pA(p.pan,64);pA(p.portamentoOnOff,127);pA(p.filterResonance,64);pA(p.releaseTime,64);pA(p.attackTime,64);pA(p.brightness,64);pA(p.decayTime,64);pA(p.vibratoRate,64);pA(p.vibratoDepth,64);pA(p.vibratoDelay,64);pA(p.generalPurposeController6,64);pA(p.generalPurposeController8,64);pA(p.registeredParameterLSB,127);pA(p.registeredParameterMSB,127);pA(p.nonRegisteredParameterLSB,127);pA(p.nonRegisteredParameterMSB,127);var ns=1;Ze[p.portamentoControl]=ns;pA(SA+AA.pitchWheel,64);pA(SA+AA.pitchWheelRange,2);var $s=Object.keys(oA).length,Aa=new Float32Array($s);Aa[oA.modulationMultiplier]=1;function dr(e=!0){if(e&&y("%cResetting all controllers!",c.info),this.privateProps.callEvent("allControllerReset",void 0),this.setMasterParameter("midiSystem",Vs),!(!this.privateProps.drumPreset||!this.privateProps.defaultPreset)){for(let A=0;A<this.midiChannels.length;A++){let t=this.midiChannels[A];t.resetControllers(!1),t.resetPreset();for(let n=0;n<128;n++)this.midiChannels[A].lockedControllers[n]&&this.privateProps.callEvent("controllerChange",{channel:A,controllerNumber:n,controllerValue:this.midiChannels[A].midiControllers[n]>>7});if(!this.midiChannels[A].lockedControllers[SA+AA.pitchWheel]){let n=this.midiChannels[A].midiControllers[SA+AA.pitchWheel];this.privateProps.callEvent("pitchWheel",{channel:A,pitch:n})}if(!this.midiChannels[A].lockedControllers[SA+AA.channelPressure]){let n=this.midiChannels[A].midiControllers[SA+AA.channelPressure]>>7;this.privateProps.callEvent("channelPressure",{channel:A,pressure:n})}}this.privateProps.tunings.length=0,this.privateProps.tunings.length=0;for(let A=0;A<128;A++)this.privateProps.tunings.push([]);this.setMIDIVolume(1)}}function Qr(e=!0){this.channelOctaveTuning.fill(0);for(let t=0;t<Ze.length;t++){if(this.lockedControllers[t])continue;let n=Ze[t];this.midiControllers[t]!==n&&t<127?t===p.portamentoControl?this.midiControllers[t]=ns:t!==p.portamentoControl&&t!==p.dataEntryMSB&&t!==p.registeredParameterMSB&&t!==p.registeredParameterLSB&&t!==p.nonRegisteredParameterMSB&&t!==p.nonRegisteredParameterLSB&&this.controllerChange(t,n>>7,e):this.midiControllers[t]=n}this.channelVibrato={rate:0,depth:0,delay:0},this.randomPan=!1,this.sysExModulators.resetModulators();let A=this.customControllers[oA.channelTransposeFine];this.customControllers.set(Aa),this.setCustomController(oA.channelTransposeFine,A),this.resetParameters()}function ur(){this.setBankMSB(fA.getDefaultBank(this.channelSystem)),this.setBankLSB(0),this.setGSDrums(!1),this.setDrums(this.channelNumber%16===me),this.programChange(0)}var ea=new Set([p.bankSelect,p.bankSelectLSB,p.mainVolume,p.mainVolumeLSB,p.pan,p.panLSB,p.reverbDepth,p.tremoloDepth,p.chorusDepth,p.detuneDepth,p.phaserDepth,p.soundVariation,p.filterResonance,p.releaseTime,p.attackTime,p.brightness,p.decayTime,p.vibratoRate,p.vibratoDepth,p.vibratoDelay,p.soundController10]);function fr(){this.channelOctaveTuning.fill(0),this.pitchWheel(8192),this.channelVibrato={rate:0,depth:0,delay:0};for(let e=0;e<128;e++){let A=Ze[e];!ea.has(e)&&A!==this.midiControllers[e]&&(e===p.portamentoControl?this.midiControllers[e]=ns:this.controllerChange(e,A>>7))}this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}function mr(){this.dataEntryState=YA.Idle,this.midiControllers[p.nonRegisteredParameterLSB]=16256,this.midiControllers[p.nonRegisteredParameterMSB]=16256,this.midiControllers[p.registeredParameterLSB]=16256,this.midiControllers[p.registeredParameterMSB]=16256,this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}var we=Ze.slice(0,128);function Sr(e,A=void 0){if(!this._midiData)return!1;this.oneTickToSeconds=60/(120*this._midiData.timeDivision),this.externalMIDIPlayback?this.sendMIDIReset():(this.synth.resetAllControllers(),this.synth.stopAllChannels(!1)),this.playedTime=0,this.eventIndexes=Array(this._midiData.tracks.length).fill(0);let t=this.synth.midiChannels.length,n=Array(t).fill(8192),s=[];for(let r=0;r<t;r++)s.push({program:-1,bank:0,actualBank:0});let a=r=>r===p.dataDecrement||r===p.dataIncrement||r===p.dataEntryMSB||r===p.dataEntryLSB||r===p.registeredParameterLSB||r===p.registeredParameterMSB||r===p.nonRegisteredParameterLSB||r===p.nonRegisteredParameterMSB||r===p.bankSelect||r===p.bankSelectLSB||r===p.resetAllControllers,o=[];for(let r=0;r<t;r++)o.push(Array.from(we));function i(r){if(n[r]=8192,o?.[r]!==void 0)for(let g=0;g<we.length;g++)ea.has(g)||(o[r][g]=we[g])}for(;;){let r=this.findFirstEventIndex(),g=this._midiData.tracks[r],E=g.events[this.eventIndexes[r]];if(A!==void 0){if(E.ticks>=A)break}else if(this.playedTime>=e)break;let d=_n(E.statusByte),l=d.channel+(this.midiPortChannelOffsets[g.port]||0);switch(d.status){case R.noteOn:o[l]??=Array.from(we),o[l][p.portamentoControl]=E.data[0];break;case R.noteOff:break;case R.pitchWheel:n[l]=E.data[1]<<7|E.data[0];break;case R.programChange:{if(this._midiData.isMultiPort&&g.channels.size===0)break;let Q=s[l];Q.program=E.data[0],Q.actualBank=Q.bank;break}case R.controllerChange:{if(this._midiData.isMultiPort&&g.channels.size===0)break;let Q=E.data[0];if(a(Q)){let m=E.data[1];if(Q===p.bankSelect){s[l].bank=m;break}else Q===p.resetAllControllers&&i(l);this.externalMIDIPlayback?this.sendMIDICC(l,Q,m):this.synth.controllerChange(l,Q,m)}else o[l]??=Array.from(we),o[l][Q]=E.data[1];break}default:this.processEvent(E,r);break}this.eventIndexes[r]++,r=this.findFirstEventIndex();let C=this._midiData.tracks[r].events[this.eventIndexes[r]];if(C===void 0)return this.stop(),!1;this.playedTime+=this.oneTickToSeconds*(C.ticks-E.ticks)}if(this.externalMIDIPlayback){for(let r=0;r<t;r++)if(n[r]!==void 0&&this.sendMIDIPitchWheel(r,n[r]>>7,n[r]&127),o[r]!==void 0&&o[r].forEach((g,E)=>{g!==we[E]&&!a(E)&&this.sendMIDICC(r,E,g)}),s[r].program>=0&&s[r].actualBank>=0){let g=s[r].actualBank;this.sendMIDICC(r,p.bankSelect,g),this.sendMIDIProgramChange(r,s[r].program)}}else for(let r=0;r<t;r++)if(n[r]!==void 0&&this.synth.pitchWheel(r,n[r]),o[r]!==void 0&&o[r].forEach((g,E)=>{g!==we[E]&&!a(E)&&this.synth.controllerChange(r,E,g)}),s[r].actualBank>=0){let g=s[r];g.program!==-1?(this.synth.controllerChange(r,p.bankSelect,g.actualBank),this.synth.programChange(r,g.program)):this.synth.controllerChange(r,p.bankSelect,g.bank)}return this.paused&&(this.pausedTime=this.playedTime),!0}var ta=class{songs=[];shuffledSongIndexes=[];synth;externalMIDIPlayback=!1;loopCount=0;skipToFirstNoteOn=!0;onEventCall;processTick=Br.bind(this);firstNoteTime=0;oneTickToSeconds=0;eventIndexes=[];playedTime=0;pausedTime=-1;absoluteStartTime=0;playingNotes=[];currentMIDIPorts=[];midiPortChannelOffset=0;midiPortChannelOffsets={};assignMIDIPort=Cr.bind(this);loadNewSequence=hr.bind(this);processEvent=Er.bind(this);setTimeTo=Sr.bind(this);constructor(e){this.synth=e,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(e){this._songIndex=e,this._songIndex=Math.max(0,e%this.songs.length),this.loadCurrentSong()}_shuffleMode=!1;get shuffleMode(){return this._shuffleMode}set shuffleMode(e){this._shuffleMode=e,e?(this.shuffleSongIndexes(),this._songIndex=0,this.loadCurrentSong()):this._songIndex=this.shuffledSongIndexes[this._songIndex]}_playbackRate=1;get playbackRate(){return this._playbackRate}set playbackRate(e){let A=this.currentTime;this._playbackRate=e,this.currentTime=A}get currentTime(){return this.pausedTime!==void 0?this.pausedTime:(this.synth.currentSynthTime-this.absoluteStartTime)*this._playbackRate}set currentTime(e){if(this._midiData)if(this.paused&&(this.pausedTime=e),e>this._midiData.duration||e<0)this.skipToFirstNoteOn?this.setTimeTicks(this._midiData.firstNoteOn-1):this.setTimeTicks(0);else if(this.skipToFirstNoteOn&&e<this.firstNoteTime){this.setTimeTicks(this._midiData.firstNoteOn-1);return}else{if(this.playingNotes=[],this.callEvent("timeChange",{newTime:e}),this._midiData.duration===0){nA("No duration!"),this.callEvent("pause",{isFinished:!0});return}this.setTimeTo(e),this.recalculateStartTime(e)}}get paused(){return this.pausedTime!==void 0}play(){if(!this._midiData)throw new Error("No songs loaded in the sequencer!");this.currentTime>=this._midiData.duration&&(this.currentTime=0),this.paused&&this.recalculateStartTime(this.pausedTime??0),this.externalMIDIPlayback||this.playingNotes.forEach(e=>{this.synth.noteOn(e.channel,e.midiNote,e.velocity)}),this.pausedTime=void 0}pause(){this.pauseInternal(!1)}loadNewSongList(e){this.songs=e,!(this.songs.length<1)&&(this._songIndex=0,this.shuffleSongIndexes(),this.callEvent("songListChange",{newSongList:[...this.songs]}),this.loadCurrentSong())}callEvent(e,A){this?.onEventCall?.({type:e,data:A})}pauseInternal(e){this.paused||(this.stop(),this.callEvent("pause",{isFinished:e}))}songIsFinished(){if(this.songs.length===1){this.pauseInternal(!0);return}this._songIndex++,this._songIndex%=this.songs.length,this.loadCurrentSong()}stop(){this.pausedTime=this.currentTime;for(let e=0;e<16;e++)this.synth.controllerChange(e,p.sustainPedal,0);if(this.synth.stopAllChannels(),this.externalMIDIPlayback){for(let e of this.playingNotes)this.sendMIDIMessage([R.noteOff|e.channel%16,e.midiNote]);for(let e=0;e<wn;e++)this.sendMIDICC(e,p.allNotesOff,0)}}findFirstEventIndex(){let e=0,A=1/0;return this._midiData.tracks.forEach((t,n)=>{if(this.eventIndexes[n]>=t.events.length)return;let s=t.events[this.eventIndexes[n]];s.ticks<A&&(e=n,A=s.ticks)}),e}addNewMIDIPort(){for(let e=0;e<16;e++)this.synth.createMIDIChannel()}sendMIDIMessage(e){this.externalMIDIPlayback&&this.callEvent("midiMessage",{message:e})}sendMIDIReset(){this.sendMIDIMessage([R.reset]);for(let e=0;e<wn;e++)this.sendMIDIMessage([R.controllerChange|e,p.allSoundOff,0]),this.sendMIDIMessage([R.controllerChange|e,p.resetAllControllers,0])}loadCurrentSong(){let e=this._songIndex;this._shuffleMode&&(e=this.shuffledSongIndexes[this._songIndex]),this.loadNewSequence(this.songs[e])}shuffleSongIndexes(){let e=this.songs.map((A,t)=>t);for(this.shuffledSongIndexes=[];e.length>0;){let A=e[Math.floor(Math.random()*e.length)];this.shuffledSongIndexes.push(A),e.splice(e.indexOf(A),1)}}sendMIDICC(e,A,t){e%=16,this.externalMIDIPlayback&&this.sendMIDIMessage([R.controllerChange|e,A,t])}sendMIDIProgramChange(e,A){e%=16,this.externalMIDIPlayback&&this.sendMIDIMessage([R.programChange|e,A])}sendMIDIPitchWheel(e,A,t){e%=16,this.externalMIDIPlayback&&this.sendMIDIMessage([R.pitchWheel|e,t,A])}setTimeTicks(e){if(!this._midiData)return;this.playingNotes=[];let A=this._midiData.midiTicksToSeconds(e);this.callEvent("timeChange",{newTime:A});let t=this.setTimeTo(0,e);this.recalculateStartTime(this.playedTime)}recalculateStartTime(e){this.absoluteStartTime=this.synth.currentSynthTime-e/this._playbackRate}},ht=ht!==void 0?ht:{},ks=!1,na;ht.isInitialized=new Promise(e=>na=e);var pr=function(e){var A,t,n,s,a,o,i,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",g="",E=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");do s=r.indexOf(e.charAt(E++)),a=r.indexOf(e.charAt(E++)),o=r.indexOf(e.charAt(E++)),i=r.indexOf(e.charAt(E++)),A=s<<2|a>>4,t=(15&a)<<4|o>>2,n=(3&o)<<6|i,g+=String.fromCharCode(A),o!==64&&(g+=String.fromCharCode(t)),i!==64&&(g+=String.fromCharCode(n));while(E<e.length);return g};(function(){var e,A,t,n,s,a,o,i,r,g,E,d,l,C,Q,m,S,D,w,M,P,x,B=B!==void 0?B:{};B.wasmBinary=Uint8Array.from(pr("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(h){return h.charCodeAt(0)});var B=B!==void 0?B:{},j={};for(e in B)B.hasOwnProperty(e)&&(j[e]=B[e]);B.arguments=[],B.thisProgram="./this.program",B.quit=function(h,u){throw u},B.preRun=[],B.postRun=[];var J=!1,Y=!1,U=!1,K=!1;J=typeof window=="object",Y=typeof importScripts=="function",U=typeof process=="object"&&typeof xa=="function"&&!J&&!Y,K=!J&&!U&&!Y;var q="";function Z(h){return B.locateFile?B.locateFile(h,q):q+h}U?(q="/",B.read=function(u,f){var k;return A||(A=void 0),t||(t=void 0),u=t.normalize(u),k=A.readFileSync(u),f?k:k.toString()},B.readBinary=function(u){var f=B.read(u,!0);return f.buffer||(f=new Uint8Array(f)),UA(f.buffer),f},process.argv.length>1&&(B.thisProgram=process.argv[1].replace(/\\/g,"/")),B.arguments=process.argv.slice(2),typeof module<"u",process.on("uncaughtException",function(h){if(!(h instanceof at))throw h}),process.on("unhandledRejection",function(h,u){process.exit(1)}),B.quit=function(h){process.exit(h)},B.inspect=function(){return"[Emscripten Module object]"}):K?(typeof read<"u"&&(B.read=function(u){return read(u)}),B.readBinary=function(u){var f;return typeof readbuffer=="function"?new Uint8Array(readbuffer(u)):(UA(typeof(f=read(u,"binary"))=="object"),f)},typeof scriptArgs<"u"?B.arguments=scriptArgs:typeof arguments<"u"&&(B.arguments=arguments),typeof quit=="function"&&(B.quit=function(h){quit(h)})):(J||Y)&&(J?document.currentScript&&(q=document.currentScript.src):q=self.location.href,q=q.indexOf("blob:")!==0?q.split("/").slice(0,-1).join("/")+"/":"",B.read=function(u){var f=new XMLHttpRequest;return f.open("GET",u,!1),f.send(null),f.responseText},Y&&(B.readBinary=function(u){var f=new XMLHttpRequest;return f.open("GET",u,!1),f.responseType="arraybuffer",f.send(null),new Uint8Array(f.response)}),B.readAsync=function(u,f,k){var L=new XMLHttpRequest;L.open("GET",u,!0),L.responseType="arraybuffer",L.onload=function(){if(L.status==200||L.status==0&&L.response){f(L.response);return}k()},L.onerror=k,L.send(null)},B.setWindowTitle=function(h){document.title=h});var CA=B.print||(typeof console<"u"?console.log.bind(console):typeof print<"u"?print:null),gA=B.printErr||(typeof printErr<"u"?printErr:typeof console<"u"&&console.warn.bind(console)||CA);for(e in j)j.hasOwnProperty(e)&&(B[e]=j[e]);function V(h){var u=C;return C=C+h+15&-16,u}function F(h){var u=r[M>>2],f=u+h+15&-16;return r[M>>2]=f,f>=yA&&!tt()?(r[M>>2]=u,0):u}function b(h,u){return u||(u=16),h=Math.ceil(h/u)*u}function X(h){switch(h){case"i1":case"i8":return 1;case"i16":return 2;case"i32":case"float":return 4;case"i64":case"double":return 8;default:if(h[h.length-1]==="*")return 4;if(h[0]!=="i")return 0;var u=parseInt(h.substr(1));return UA(u%8==0),u/8}}function tA(h){tA.shown||(tA.shown={}),tA.shown[h]||(tA.shown[h]=1,gA(h))}j=void 0;var rA={"f64-rem":function(h,u){return h%u},debugger:function(){}},NA=[];function se(h,u){for(var f=0,k=f;k<f+0;k++)if(!NA[k])return NA[k]=h,1+k;throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS."}function WA(h){NA[h-1]=null}var zA={};function ve(h,u){if(h){UA(u),zA[u]||(zA[u]={});var f=zA[u];return f[h]||(u.length===1?f[h]=function(){return eA(u,h)}:u.length===2?f[h]=function(L){return eA(u,h,[L])}:f[h]=function(){return eA(u,h,Array.prototype.slice.call(arguments))}),f[h]}}function ae(h,u,f){return f?+(h>>>0)+4294967296*+(u>>>0):+(h>>>0)+4294967296*+(0|u)}function eA(h,u,f){return f&&f.length?B["dynCall_"+h].apply(null,[u].concat(f)):B["dynCall_"+h].call(null,u)}var EA=0,_A=0;function UA(h,u){h||Ie("Assertion failed: "+u)}function Ce(h){var u=B["_"+h];return UA(u,"Cannot call unknown function "+h+", make sure it is exported"),u}var he={stackSave:function(){on()},stackRestore:function(){rn()},arrayToC:function(h){var u,f,k=Dt(h.length);return u=h,f=k,s.set(u,f),k},stringToC:function(h){var u=0;if(h!=null&&h!==0){var f=(h.length<<2)+1;u=Dt(f),At(h,u,f)}return u}},je={string:he.stringToC,array:he.arrayToC};function Le(h,u,f,k,L){var $=Ce(h),sA=[],H=0;if(k)for(var DA=0;DA<k.length;DA++){var lA=je[f[DA]];lA?(H===0&&(H=on()),sA[DA]=lA(k[DA])):sA[DA]=k[DA]}var dA,BA=$.apply(null,sA);return BA=(dA=BA,u==="string"?le(dA):u==="boolean"?!!dA:dA),H!==0&&rn(H),BA}function $e(h,u,f,k){switch((f=f||"i8").charAt(f.length-1)==="*"&&(f="i32"),f){case"i1":case"i8":s[h>>0]=u;break;case"i16":o[h>>1]=u;break;case"i32":r[h>>2]=u;break;case"i64":tempI64=[u>>>0,+va(tempDouble=u)>=1?tempDouble>0?(0|Na(+hs(tempDouble/4294967296),4294967295))>>>0:~~+La((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0],r[h>>2]=tempI64[0],r[h+4>>2]=tempI64[1];break;case"float":E[h>>2]=u;break;case"double":d[h>>3]=u;break;default:Ie("invalid type for setValue: "+f)}}function jt(h,u,f){switch((u=u||"i8").charAt(u.length-1)==="*"&&(u="i32"),u){case"i1":case"i8":return s[h>>0];case"i16":return o[h>>1];case"i32":case"i64":return r[h>>2];case"float":return E[h>>2];case"double":return d[h>>3];default:Ie("invalid type for getValue: "+u)}return null}function $t(h,u,f,k){typeof h=="number"?($=!0,sA=h):($=!1,sA=h.length);var L=typeof u=="string"?u:null;if(H=f==4?k:[typeof kt=="function"?kt:V,Dt,V,F][f===void 0?2:f](Math.max(sA,L?1:u.length)),$){for(k=H,UA((3&H)==0),DA=H+(-4&sA);k<DA;k+=4)r[k>>2]=0;for(DA=H+sA;k<DA;)s[k++>>0]=0;return H}if(L==="i8")return h.subarray||h.slice?a.set(h,H):a.set(new Uint8Array(h),H),H;for(var $,sA,H,DA,lA,dA,BA,_=0;_<sA;){var bA=h[_];if((lA=L||u[_])===0){_++;continue}lA=="i64"&&(lA="i32"),$e(H+_,bA,lA),BA!==lA&&(dA=X(lA),BA=lA),_+=dA}return H}function Ne(h){return Q?sn?kt(h):F(h):V(h)}function le(h,u){if(u===0||!h)return"";for(var f,k,L,$=0,sA=0;$|=k=a[h+sA>>0],(k!=0||u)&&(sA++,!u||sA!=u););u||(u=sA);var H="";if($<128){for(;u>0;)L=String.fromCharCode.apply(String,a.subarray(h,h+Math.min(u,1024))),H=H?H+L:L,h+=1024,u-=1024;return H}return f=h,(function(lA,dA){for(var BA=dA;lA[BA];)++BA;if(BA-dA>16&&lA.subarray&&ut)return ut.decode(lA.subarray(dA,BA));for(var _,bA,PA,JA,qA,ke,KA="";;){if(!(_=lA[dA++]))return KA;if(!(128&_)){KA+=String.fromCharCode(_);continue}if(bA=63&lA[dA++],(224&_)==192){KA+=String.fromCharCode((31&_)<<6|bA);continue}if(PA=63&lA[dA++],(240&_)==224?_=(15&_)<<12|bA<<6|PA:(JA=63&lA[dA++],(248&_)==240?_=(7&_)<<18|bA<<12|PA<<6|JA:(qA=63&lA[dA++],_=(252&_)==248?(3&_)<<24|bA<<18|PA<<12|JA<<6|qA:(1&_)<<30|bA<<24|PA<<18|JA<<12|qA<<6|(ke=63&lA[dA++]))),_<65536)KA+=String.fromCharCode(_);else{var rt=_-65536;KA+=String.fromCharCode(55296|rt>>10,56320|1023&rt)}}})(a,f)}function TA(h){for(var u="";;){var f=s[h++>>0];if(!f)return u;u+=String.fromCharCode(f)}}function An(h,u){return(function(k,L,$){for(var sA=0;sA<k.length;++sA)s[L++>>0]=k.charCodeAt(sA);$||(s[L>>0]=0)})(h,u,!1)}var ut=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function Ue(h,u,f,k){if(!(k>0))return 0;for(var L=f,$=f+k-1,sA=0;sA<h.length;++sA){var H=h.charCodeAt(sA);if(H>=55296&&H<=57343&&(H=65536+((1023&H)<<10)|1023&h.charCodeAt(++sA)),H<=127){if(f>=$)break;u[f++]=H}else if(H<=2047){if(f+1>=$)break;u[f++]=192|H>>6,u[f++]=128|63&H}else if(H<=65535){if(f+2>=$)break;u[f++]=224|H>>12,u[f++]=128|H>>6&63,u[f++]=128|63&H}else if(H<=2097151){if(f+3>=$)break;u[f++]=240|H>>18,u[f++]=128|H>>12&63,u[f++]=128|H>>6&63,u[f++]=128|63&H}else if(H<=67108863){if(f+4>=$)break;u[f++]=248|H>>24,u[f++]=128|H>>18&63,u[f++]=128|H>>12&63,u[f++]=128|H>>6&63,u[f++]=128|63&H}else{if(f+5>=$)break;u[f++]=252|H>>30,u[f++]=128|H>>24&63,u[f++]=128|H>>18&63,u[f++]=128|H>>12&63,u[f++]=128|H>>6&63,u[f++]=128|63&H}}return u[f]=0,f-L}function At(h,u,f){return Ue(h,a,u,f)}function GA(h){for(var u=0,f=0;f<h.length;++f){var k=h.charCodeAt(f);k>=55296&&k<=57343&&(k=65536+((1023&k)<<10)|1023&h.charCodeAt(++f)),k<=127?++u:k<=2047?u+=2:k<=65535?u+=3:k<=2097151?u+=4:k<=67108863?u+=5:u+=6}return u}var re=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function et(h){for(var u=h,f=u>>1;o[f];)++f;if((u=f<<1)-h>32&&re)return re.decode(a.subarray(h,u));for(var k=0,L="";;){var $=o[h+2*k>>1];if($==0)return L;++k,L+=String.fromCharCode($)}}function en(h,u,f){if(f===void 0&&(f=2147483647),f<2)return 0;for(var k=u,L=(f-=2)<2*h.length?f/2:h.length,$=0;$<L;++$){var sA=h.charCodeAt($);o[u>>1]=sA,u+=2}return o[u>>1]=0,u-k}function oe(h){return 2*h.length}function ft(h){for(var u=0,f="";;){var k=r[h+4*u>>2];if(k==0)return f;if(++u,k>=65536){var L=k-65536;f+=String.fromCharCode(55296|L>>10,56320|1023&L)}else f+=String.fromCharCode(k)}}function mt(h,u,f){if(f===void 0&&(f=2147483647),f<4)return 0;for(var k=u,L=k+f-4,$=0;$<h.length;++$){var sA=h.charCodeAt($);if(sA>=55296&&sA<=57343&&(sA=65536+((1023&sA)<<10)|1023&h.charCodeAt(++$)),r[u>>2]=sA,(u+=4)+4>L)break}return r[u>>2]=0,u-k}function gs(h){for(var u=0,f=0;f<h.length;++f){var k=h.charCodeAt(f);k>=55296&&k<=57343&&++f,u+=4}return u}function cs(h){var u=GA(h)+1,f=kt(u);return f&&Ue(h,s,f,u),f}function St(h){var u=GA(h)+1,f=Dt(u);return Ue(h,s,f,u),f}function Se(h){return h}function tn(){var h,u=(function(){var k=Error();if(!k.stack){try{throw Error(0)}catch(L){k=L}if(!k.stack)return"(no stack trace available)"}return k.stack.toString()})();return B.extraStackTrace&&(u+=`
2
- `+B.extraStackTrace()),(h=u).replace(/__Z[\w\d_]+/g,function(f){var k,L=k=f;return f===L?f:f+" ["+L+"]"})}function ie(h,u){return h%u>0&&(h+=u-h%u),h}function Te(h){B.buffer=n=h}function pe(){B.HEAP8=s=new Int8Array(n),B.HEAP16=o=new Int16Array(n),B.HEAP32=r=new Int32Array(n),B.HEAPU8=a=new Uint8Array(n),B.HEAPU16=i=new Uint16Array(n),B.HEAPU32=g=new Uint32Array(n),B.HEAPF32=E=new Float32Array(n),B.HEAPF64=d=new Float64Array(n)}function tt(){var h=B.usingWasm?65536:16777216,u=2147483648-h;if(r[M>>2]>u)return!1;var f=yA;for(yA=Math.max(yA,16777216);yA<r[M>>2];)yA=yA<=536870912?ie(2*yA,h):Math.min(ie((3*yA+2147483648)/4,h),u);var k=B.reallocBuffer(yA);return k&&k.byteLength==yA?(Te(k),pe(),!0):(yA=f,!1)}l=C=m=S=D=w=M=0,Q=!1,B.reallocBuffer||(B.reallocBuffer=function(h){try{if(ArrayBuffer.transfer)u=ArrayBuffer.transfer(n,h);else{var u,f=s;u=new ArrayBuffer(h),new Int8Array(u).set(f)}}catch{return!1}return!!Ua(u)&&u});try{(P=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get))(new ArrayBuffer(4))}catch{P=function(u){return u.byteLength}}var xe=B.TOTAL_STACK||5242880,yA=B.TOTAL_MEMORY||16777216;function pt(){return yA}function de(h){for(;h.length>0;){var u=h.shift();if(typeof u=="function"){u();continue}var f=u.func;typeof f=="number"?u.arg===void 0?B.dynCall_v(f):B.dynCall_vi(f,u.arg):f(u.arg===void 0?null:u.arg)}}yA<xe&&gA("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+yA+"! (TOTAL_STACK="+xe+")"),B.buffer?n=B.buffer:(typeof WebAssembly=="object"&&typeof WebAssembly.Memory=="function"?(B.wasmMemory=new WebAssembly.Memory({initial:yA/65536}),n=B.wasmMemory.buffer):n=new ArrayBuffer(yA),B.buffer=n),pe();var nt=[],nn=[],Es=[],Bs=[],Cs=[],sn=!1,Ra=!1;function Ma(h){nt.unshift(h)}function Ho(h){nn.unshift(h)}function Yo(h){Es.unshift(h)}function Po(h){Bs.unshift(h)}function ba(h){Cs.unshift(h)}function Jo(h,u,f){var k,L;tA("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!"),f&&(k=s[L=u+GA(h)]),At(h,u,1/0),f&&(s[L]=k)}function qo(h,u,f){return h>=0?h:u<=32?2*Math.abs(1<<u-1)+h:Math.pow(2,u)+h}function Ko(h,u,f){if(h<=0)return h;var k=u<=32?Math.abs(1<<u-1):Math.pow(2,u-1);return h>=k&&(u<=32||h>k)&&(h=-2*k+h),h}var va=Math.abs,La=Math.ceil,hs=Math.floor,Na=Math.min,ye=0,an=null,st=null;function Oo(h){return h}B.preloadedImages={},B.preloadedAudios={};var ls="data:application/octet-stream;base64,";function yt(h){return String.prototype.startsWith?h.startsWith(ls):h.indexOf(ls)===0}(function(){var u="main.wast",f="main.wasm",k="main.temp.asm";yt(u)||(u=Z(u)),yt(f)||(f=Z(f)),yt(k)||(k=Z(k));var L={global:null,env:null,asm2wasm:rA,parent:B},$=null;function sA(BA){return BA}function H(){try{if(B.wasmBinary)return new Uint8Array(B.wasmBinary);if(B.readBinary)return B.readBinary(f);throw"both async and sync fetching of the wasm failed"}catch(BA){Ie(BA)}}B.asmPreload=B.asm;var DA=B.reallocBuffer,lA=function(BA){BA=ie(BA,B.usingWasm?65536:16777216);var _=B.buffer.byteLength;if(B.usingWasm)try{var bA=B.wasmMemory.grow((BA-_)/65536);return bA!==-1?B.buffer=B.wasmMemory.buffer:null}catch{return null}};B.reallocBuffer=function(BA){return dA==="asmjs"?DA(BA):lA(BA)};var dA="";B.asm=function(BA,_,bA){var PA;if(!(_=PA=_).table){var JA,qA=B.wasmTableSize;qA===void 0&&(qA=1024);var ke=B.wasmMaxTableSize;typeof WebAssembly=="object"&&typeof WebAssembly.Table=="function"?ke!==void 0?_.table=new WebAssembly.Table({initial:qA,maximum:ke,element:"anyfunc"}):_.table=new WebAssembly.Table({initial:qA,element:"anyfunc"}):_.table=Array(qA),B.wasmTable=_.table}return _.memoryBase||(_.memoryBase=B.STATIC_BASE),_.tableBase||(_.tableBase=0),JA=(function(rt,He,gn){if(typeof WebAssembly!="object")return gA("no native wasm support detected"),!1;if(!(B.wasmMemory instanceof WebAssembly.Memory))return gA("no native wasm Memory in use"),!1;function wt(jA,$A){if(($=jA.exports).memory){var ot,cn,us;ot=$.memory,cn=B.buffer,ot.byteLength<cn.byteLength&&gA("the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here"),us=new Int8Array(cn),new Int8Array(ot).set(us),Te(ot),pe()}B.asm=$,B.usingWasm=!0,(function(jo){if(ye--,B.monitorRunDependencies&&B.monitorRunDependencies(ye),ye==0&&(an!==null&&(clearInterval(an),an=null),st)){var Ta=st;st=null,Ta()}})("wasm-instantiate")}if(He.memory=B.wasmMemory,L.global={NaN:NaN,Infinity:1/0},L["global.Math"]=Math,L.env=He,ye++,B.monitorRunDependencies&&B.monitorRunDependencies(ye),B.instantiateWasm)try{return B.instantiateWasm(L,wt)}catch(jA){return gA("Module.instantiateWasm callback failed with error: "+jA),!1}function Ye(jA){wt(jA.instance,jA.module)}function Qs(jA){(!B.wasmBinary&&(J||Y)&&typeof fetch=="function"?fetch(f,{credentials:"same-origin"}).then(function($A){if(!$A.ok)throw"failed to load wasm binary file at '"+f+"'";return $A.arrayBuffer()}).catch(function(){return H()}):new Promise(function($A,ot){$A(H())})).then(function($A){return WebAssembly.instantiate($A,L)}).then(jA).catch(function($A){gA("failed to asynchronously prepare wasm: "+$A),Ie($A)})}return B.wasmBinary||typeof WebAssembly.instantiateStreaming!="function"||yt(f)||typeof fetch!="function"?Qs(Ye):WebAssembly.instantiateStreaming(fetch(f,{credentials:"same-origin"}),L).then(Ye).catch(function(jA){gA("wasm streaming compile failed: "+jA),gA("falling back to ArrayBuffer instantiation"),Qs(Ye)}),{}})(BA,_,bA),UA(JA,"no binaryen method succeeded."),JA},B.asm})(),C=(l=1024)+4816,nn.push(),B.STATIC_BASE=l,B.STATIC_BUMP=4816;var xA=C;function Vo(h){s[xA]=s[h],s[xA+1]=s[h+1],s[xA+2]=s[h+2],s[xA+3]=s[h+3]}function Xo(h){s[xA]=s[h],s[xA+1]=s[h+1],s[xA+2]=s[h+2],s[xA+3]=s[h+3],s[xA+4]=s[h+4],s[xA+5]=s[h+5],s[xA+6]=s[h+6],s[xA+7]=s[h+7]}function Zo(h,u,f){var k=f>0?f:GA(h)+1,L=Array(k),$=Ue(h,L,0,L.length);return u&&(L.length=$),L}function Wo(h){for(var u=[],f=0;f<h.length;f++){var k=h[f];k>255&&(k&=255),u.push(String.fromCharCode(k))}return u.join("")}C+=16,M=V(4),D=(m=S=b(C))+xe,w=b(D),r[M>>2]=w,Q=!0,B.wasmTableSize=4,B.wasmMaxTableSize=4,B.asmGlobalArg={},B.asmLibraryArg={abort:Ie,assert:UA,enlargeMemory:tt,getTotalMemory:pt,abortOnCannotGrowMemory:function(){Ie("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+yA+", (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(u,f,k){var L=on();try{return B.dynCall_iii(u,f,k)}catch($){if(rn(L),typeof $!="number"&&$!=="longjmp")throw $;B.setThrew(1,0)}},___assert_fail:function(u,f,k,L){Ie("Assertion failed: "+le(u)+", at: "+[f?le(f):"unknown filename",k,L?le(L):"unknown function"])},___setErrNo:function(u){return B.___errno_location&&(r[B.___errno_location()>>2]=u),u},_abort:function(){B.abort()},_emscripten_memcpy_big:function(u,f,k){return a.set(a.subarray(f,f+k),u),u},_llvm_floor_f64:hs,DYNAMICTOP_PTR:M,tempDoublePtr:xA,ABORT:EA,STACKTOP:S,STACK_MAX:D};var ds=B.asm(B.asmGlobalArg,B.asmLibraryArg,n);B.asm=ds,B.___errno_location=function(){return B.asm.___errno_location.apply(null,arguments)};var Ua=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 kt=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 Dt=B.stackAlloc=function(){return B.asm.stackAlloc.apply(null,arguments)},rn=B.stackRestore=function(){return B.asm.stackRestore.apply(null,arguments)},on=B.stackSave=function(){return B.asm.stackSave.apply(null,arguments)};function at(h){this.name="ExitStatus",this.message="Program terminated with exit("+h+")",this.status=h}function In(h){h=h||B.arguments,!(ye>0)&&((function(){if(B.preRun)for(typeof B.preRun=="function"&&(B.preRun=[B.preRun]);B.preRun.length;)Ma(B.preRun.shift());de(nt)})(),!(ye>0)&&(B.calledRun||(B.setStatus?(B.setStatus("Running..."),setTimeout(function(){setTimeout(function(){B.setStatus("")},1),u()},1)):u())));function u(){!B.calledRun&&(B.calledRun=!0,EA||(sn||(sn=!0,de(nn)),de(Es),B.onRuntimeInitialized&&B.onRuntimeInitialized(),(function(){if(B.postRun)for(typeof B.postRun=="function"&&(B.postRun=[B.postRun]);B.postRun.length;)ba(B.postRun.shift());de(Cs)})()))}}function zo(h,u){(!u||!B.noExitRuntime||h!==0)&&(B.noExitRuntime||(EA=!0,_A=h,S=x,de(Bs),Ra=!0,B.onExit&&B.onExit(h)),B.quit(h,new at(h)))}function Ie(h){throw B.onAbort&&B.onAbort(h),h!==void 0?(CA(h),gA(h),h=JSON.stringify(h)):h="",EA=!0,_A=1,"abort("+h+"). Build with -s ASSERTIONS=1 for more info."}if(B.dynCall_iii=function(){return B.asm.dynCall_iii.apply(null,arguments)},B.asm=ds,B.ccall=Le,B.cwrap=function(u,f,k,L){var $=(k=k||[]).every(function(sA){return sA==="number"});return f!=="string"&&$&&!L?Ce(u):function(){return Le(u,f,k,arguments,L)}},at.prototype=Error(),at.prototype.constructor=at,st=function h(){B.calledRun||In(),B.calledRun||(st=h)},B.run=In,B.abort=Ie,B.preInit)for(typeof B.preInit=="function"&&(B.preInit=[B.preInit]);B.preInit.length>0;)B.preInit.pop()();B.noExitRuntime=!0,In(),B.onRuntimeInitialized=()=>{ks=!0,na()},ht.decode=function(h){return(function(f){if(!ks)throw Error("SF3 decoder has not been initialized yet. Did you await synth.isReady?");var k={};function L(He){return new Int32Array(B.HEAPU8.buffer,He,1)[0]}function $(He,gn){var wt=new ArrayBuffer(gn*Float32Array.BYTES_PER_ELEMENT),Ye=new Float32Array(wt);return Ye.set(new Float32Array(B.HEAPU8.buffer,He,gn)),Ye}k.open=B.cwrap("stb_vorbis_js_open","number",[]),k.close=B.cwrap("stb_vorbis_js_close","void",["number"]),k.channels=B.cwrap("stb_vorbis_js_channels","number",["number"]),k.sampleRate=B.cwrap("stb_vorbis_js_sample_rate","number",["number"]),k.decode=B.cwrap("stb_vorbis_js_decode","number",["number","number","number","number","number"]);var sA,H,DA,lA,dA=k.open(),BA=(sA=f,H=f.byteLength,DA=B._malloc(H),(lA=new Uint8Array(B.HEAPU8.buffer,DA,H)).set(new Uint8Array(sA,0,H)),lA),_=B._malloc(4),bA=B._malloc(4),PA=k.decode(dA,BA.byteOffset,BA.byteLength,_,bA);if(B._free(BA.byteOffset),PA<0)throw k.close(dA),B._free(_),Error("stbvorbis decode failed: "+PA);for(var JA=k.channels(dA),qA=Array(JA),ke=new Int32Array(B.HEAPU32.buffer,L(_),JA),KA=0;KA<JA;KA++)qA[KA]=$(ke[KA],PA),B._free(ke[KA]);var rt=k.sampleRate(dA);return k.close(dA),B._free(L(_)),B._free(_),{data:qA,sampleRate:rt,eof:!0,error:null}})(h)}})();var qt=ht,ss=-15e3,yr=15e3,Rn=new Float32Array(yr-ss+1);for(let e=0;e<Rn.length;e++){let A=ss+e;Rn[e]=Math.pow(2,A/1200)}function Qe(e){return e<=-32767?0:Rn[e-ss]}var Ht=-2e4,sa=16500,Mn=new Float32Array(sa-Ht+1);for(let e=0;e<Mn.length;e++){let A=Ht+e;Mn[e]=440*Math.pow(2,(A-6900)/1200)}function bn(e){return e<Ht||e>sa?440*Math.pow(2,(e-6900)/1200):Mn[~~e-Ht]}var as=-1660,kr=1600,vn=new Float32Array((kr-as)*100+1);for(let e=0;e<vn.length;e++){let A=(as*100+e)/100;vn[e]=Math.pow(10,-A/20)}function Ae(e){return vn[Math.floor((e-as)*100)]}var Dr=.01,HA=100,hn=90,wr=15e-6,Re=class aa{sampleRate;currentAttenuationDb=HA;state=0;attenuation=0;attenuationTargetGain=0;currentSampleTime=0;releaseStartDb=HA;releaseStartTimeSamples=0;currentReleaseGain=1;attackDuration=0;decayDuration=0;releaseDuration=0;attenuationTarget=0;sustainDbRelative=0;delayEnd=0;attackEnd=0;holdEnd=0;decayEnd=0;canEndOnSilentSustain;constructor(A,t){this.sampleRate=A,this.canEndOnSilentSustain=t/10>=hn}static startRelease(A){A.volumeEnvelope.releaseStartTimeSamples=A.volumeEnvelope.currentSampleTime,A.volumeEnvelope.currentReleaseGain=Ae(A.volumeEnvelope.currentAttenuationDb),aa.recalculate(A)}static recalculate(A){let t=A.volumeEnvelope,n=g=>Math.max(0,Math.floor(Qe(g)*t.sampleRate));t.attenuationTarget=Math.max(0,Math.min(A.modulatedGenerators[I.initialAttenuation],1440))/10,t.attenuationTargetGain=Ae(t.attenuationTarget),t.sustainDbRelative=Math.min(HA,A.modulatedGenerators[I.sustainVolEnv]/10);let s=Math.min(HA,t.sustainDbRelative);t.attackDuration=n(A.modulatedGenerators[I.attackVolEnv]);let a=A.modulatedGenerators[I.decayVolEnv],o=(60-A.targetKey)*A.modulatedGenerators[I.keyNumToVolEnvDecay],i=s/HA;t.decayDuration=n(a+o)*i,t.releaseDuration=n(Math.max(-7200,A.modulatedGenerators[I.releaseVolEnv])),t.delayEnd=n(A.modulatedGenerators[I.delayVolEnv]),t.attackEnd=t.attackDuration+t.delayEnd;let r=(60-A.targetKey)*A.modulatedGenerators[I.keyNumToVolEnvHold];if(t.holdEnd=n(A.modulatedGenerators[I.holdVolEnv]+r)+t.attackEnd,t.decayEnd=t.decayDuration+t.holdEnd,t.state===0&&t.attackEnd===0&&(t.state=2),A.isInRelease){let g=Math.max(0,Math.min(HA,t.sustainDbRelative)),E=g/HA;switch(t.decayDuration=n(a+o)*E,t.state){case 0:t.releaseStartDb=HA;break;case 1:{let l=1-(t.attackEnd-t.releaseStartTimeSamples)/t.attackDuration;t.releaseStartDb=20*Math.log10(l)*-1;break}case 2:t.releaseStartDb=0;break;case 3:t.releaseStartDb=(1-(t.decayEnd-t.releaseStartTimeSamples)/t.decayDuration)*g;break;case 4:t.releaseStartDb=g;break}t.releaseStartDb=Math.max(0,Math.min(t.releaseStartDb,HA)),t.releaseStartDb>=hn&&(A.finished=!0),t.currentReleaseGain=Ae(t.releaseStartDb);let d=(HA-t.releaseStartDb)/HA;t.releaseDuration*=d}}static apply(A,t,n,s){let a=A.volumeEnvelope,o=n/10,i=s;if(A.isInRelease){let g=a.currentSampleTime-a.releaseStartTimeSamples;if(g>=a.releaseDuration){for(let d=0;d<t.length;d++)t[d]=0;A.finished=!0;return}let E=HA-a.releaseStartDb;for(let d=0;d<t.length;d++){a.attenuation+=(a.attenuationTargetGain-a.attenuation)*i;let l=g/a.releaseDuration*E+a.releaseStartDb;a.currentReleaseGain=a.attenuation*Ae(l+o),t[d]*=a.currentReleaseGain,a.currentSampleTime++,g++}a.currentReleaseGain<=wr&&(A.finished=!0);return}let r=0;switch(a.state){case 0:for(;a.currentSampleTime<a.delayEnd;)if(a.currentAttenuationDb=HA,t[r]=0,a.currentSampleTime++,++r>=t.length)return;a.state++;case 1:for(;a.currentSampleTime<a.attackEnd;){a.attenuation+=(a.attenuationTargetGain-a.attenuation)*i;let g=1-(a.attackEnd-a.currentSampleTime)/a.attackDuration;if(t[r]*=g*a.attenuation*Ae(o),a.currentAttenuationDb=0,a.currentSampleTime++,++r>=t.length)return}a.state++;case 2:for(;a.currentSampleTime<a.holdEnd;)if(a.attenuation+=(a.attenuationTargetGain-a.attenuation)*i,t[r]*=a.attenuation*Ae(o),a.currentAttenuationDb=0,a.currentSampleTime++,++r>=t.length)return;a.state++;case 3:for(;a.currentSampleTime<a.decayEnd;)if(a.attenuation+=(a.attenuationTargetGain-a.attenuation)*i,a.currentAttenuationDb=(1-(a.decayEnd-a.currentSampleTime)/a.decayDuration)*a.sustainDbRelative,t[r]*=a.attenuation*Ae(a.currentAttenuationDb+o),a.currentSampleTime++,++r>=t.length)return;a.state++;case 4:for(a.canEndOnSilentSustain&&a.sustainDbRelative>=hn&&(A.finished=!0);;)if(a.attenuation+=(a.attenuationTargetGain-a.attenuation)*i,t[r]*=a.attenuation*Ae(a.sustainDbRelative+o),a.currentAttenuationDb=a.sustainDbRelative,a.currentSampleTime++,++r>=t.length)return}}};function Fr(e,A){switch(this.privateProps.masterParameters[e]=A,e){case"masterPan":{let t=A;t=t/2+.5,this.privateProps.panLeft=1-t,this.privateProps.panRight=t;break}case"masterGain":break;case"voiceCap":break;case"interpolationType":break;case"midiSystem":break;case"monophonicRetriggerMode":break;case"transposition":{let t=A;this.privateProps.masterParameters.transposition=0;for(let n of this.midiChannels)n.transposeChannel(t);this.privateProps.masterParameters.transposition=t}}this.callEvent("masterParameterChange",{parameter:e,value:A})}function Gr(e){return this.privateProps.masterParameters[e]}function Rr(){return{...this.privateProps.masterParameters}}function Ge(e,A){return(e>>A&1)>0}function ln(e){return e?1:0}var LA=16384,Yt=Object.keys(QA).length,ra=4,ce=new Float32Array(LA+1),Me=new Float32Array(LA+1);ce[0]=0;ce[ce.length-1]=1;Me[0]=0;Me[Me.length-1]=1;for(let e=1;e<LA-1;e++){let A=-.4166666666666667*Math.log(e/(ce.length-1))/Math.LN10;Me[e]=1-A,ce[ce.length-1-e]=A}function oa(e,A,t){let n=!!(e&2);switch(!!(e&1)&&(t=1-t),A){case QA.linear:return n?t*2-1:t;case QA.switch:return t=t>.5?1:0,n?t*2-1:t;case QA.concave:return n?(t=t*2-1,t<0?-ce[~~(t*-LA)]:ce[~~(t*LA)]):ce[~~(t*LA)];case QA.convex:return n?(t=t*2-1,t<0?-Me[~~(t*-LA)]:Me[~~(t*LA)]):Me[~~(t*LA)]}}var XA=class Ln{isBipolar;isNegative;index;isCC;curveType;constructor(A=AA.noController,t=QA.linear,n=!1,s=!1,a=!1){this.isBipolar=s,this.isNegative=a,this.index=A,this.isCC=n,this.curveType=t}get sourceName(){return this.isCC?Object.keys(p).find(A=>p[A]===this.index)??this.index.toString():Object.keys(AA).find(A=>AA[A]===this.index)??this.index.toString()}get curveTypeName(){return Object.keys(QA).find(A=>QA[A]===this.curveType)??this.curveType.toString()}static fromSourceEnum(A){let t=Ge(A,9),n=Ge(A,8),s=Ge(A,7),a=A&127,o=A>>10&3;return new Ln(a,o,s,t,n)}static copyFrom(A){return new Ln(A.index,A.curveType,A.isCC,A.isBipolar,A.isNegative)}toString(){return`${this.sourceName} ${this.curveTypeName} ${this.isBipolar?"bipolar":"unipolar"} ${this.isNegative?"negative":"positive"}`}toSourceEnum(){return this.curveType<<10|ln(this.isBipolar)<<9|ln(this.isNegative)<<8|ln(this.isCC)<<7|this.index}isIdentical(A){return this.index===A.index&&this.isNegative===A.isNegative&&this.isCC===A.isCC&&this.isBipolar===A.isBipolar&&this.curveType===A.curveType}getValue(A,t){let n;if(this.isCC)n=A[this.index];else switch(this.index){case AA.noController:n=16383;break;case AA.noteOnKeyNum:n=t.midiNote<<7;break;case AA.noteOnVelocity:n=t.velocity<<7;break;case AA.polyPressure:n=t.pressure<<7;break;default:n=A[this.index+SA];break}let s=(this.isBipolar?2:0)|(this.isNegative?1:0);return ia[LA*(this.curveType*Yt+s)+n]}},ia=new Float32Array(LA*ra*Yt);for(let e=0;e<Yt;e++)for(let A=0;A<ra;A++){let t=LA*(e*Yt+A);for(let n=0;n<LA;n++)ia[t+n]=oa(A,e,n/LA)}var Bt=10;function ge(e,A,t,n,s){return new XA(s,e,n,A,t).toSourceEnum()}var Ia=ge(QA.linear,!0,!1,!0,p.filterResonance),cA=class Nn{currentValue=0;destination=I.initialAttenuation;transformAmount=0;transformType=0;isEffectModulator=!1;isDefaultResonantModulator=!1;primarySource;secondarySource;constructor(A=new XA,t=new XA,n=I.INVALID,s=0,a=0,o=!1,i=!1){this.primarySource=A,this.secondarySource=t,this.destination=n,this.transformAmount=s,this.transformType=a,this.isEffectModulator=o,this.isDefaultResonantModulator=i}get destinationName(){return Object.keys(I).find(A=>I[A]===this.destination)}static isIdentical(A,t,n=!1){return A.primarySource.isIdentical(t.primarySource)&&A.secondarySource.isIdentical(t.secondarySource)&&A.destination===t.destination&&A.transformType===t.transformType&&(!n||A.transformAmount===t.transformAmount)}static copyFrom(A){return new Nn(XA.copyFrom(A.primarySource),XA.copyFrom(A.secondarySource),A.destination,A.transformAmount,A.transformType,A.isEffectModulator,A.isDefaultResonantModulator)}toString(){return`Source: ${this.primarySource.toString()}
1
+ var De=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(A,t)=>(typeof require<"u"?require:A)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var xa=(e=>typeof De<"u"?De:typeof Proxy<"u"?new Proxy(e,{get:(A,t)=>(typeof De<"u"?De:A)[t]}):e)(function(e){if(typeof De<"u")return De.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')}),O=class extends Uint8Array{currentIndex=0;slice(e,A){let t=super.slice(e,A);return t.currentIndex=0,t}};function ee(e,A=e.length,t=0){let n="";for(let s=0;s<A;s++){let a=e[t+s];if(a===0)return n;n+=String.fromCharCode(a)}return n}function hA(e,A){let t=e.currentIndex;return e.currentIndex+=A,ee(e,A,t)}function ne(e,A=!1,t=!1){let n=e.length;A&&n++,t&&n%2!==0&&n++;let s=new O(n);return kA(s,e),s}function kA(e,A,t=0){t>0&&A.length>t&&(A=A.slice(0,t));for(let n=0;n<A.length;n++)e[e.currentIndex++]=A.charCodeAt(n);if(t>A.length)for(let n=0;n<t-A.length;n++)e[e.currentIndex++]=0;return e}function v(e,A){let t=Hs(e,A,e.currentIndex);return e.currentIndex+=A,t}function Hs(e,A,t=0){let n=0;for(let s=0;s<A;s++)n|=e[t+s]<<s*8;return n>>>0}function ht(e,A,t){for(let n=0;n<t;n++)e[e.currentIndex++]=A>>n*8&255}function W(e,A){e[e.currentIndex++]=A&255,e[e.currentIndex++]=A>>8}function iA(e,A){ht(e,A,4)}function zn(e,A){let t=A<<8|e;return t>32767?t-65536:t}function Ha(e){return e>127?e-256:e}var Ys=class{header;size;data;constructor(e,A,t){this.header=e,this.size=A,this.data=t}};function aA(e,A=!0,t=!1){let n=hA(e,4),s=v(e,4);n===""&&(s=0);let a;return A?a=e.slice(e.currentIndex,e.currentIndex+s):a=new O(0),(A||t)&&(e.currentIndex+=s,s%2!==0&&e.currentIndex++),new Ys(n,s,a)}function IA(e,A,t=!1,n=!1){if(e.length!==4)throw new Error(`Invalid header length: ${e}`);let s=8,a=e,r=A.length;t&&r++;let i=r;n&&(s+=4,i+=4,a="LIST");let o=s+r;o%2!==0&&o++;let g=new O(o);return kA(g,a),iA(g,i),n&&kA(g,e),g.set(A,s),g}function MA(e,A,t=!1){let n=8,s=e,a=A.reduce((g,c)=>c.length+g,0),r=a;t&&(n+=4,r+=4,s="LIST");let i=n+a;i%2!==0&&i++;let o=new O(i);return kA(o,s),iA(o,r),t&&kA(o,e),A.forEach(g=>{o.set(g,n),n+=g.length}),o}function fe(e,A){return e.find(t=>t.header!=="LIST"?!1:(t.data.currentIndex=4,ee(t.data,4)===A))}function _n(e,A){return{...A,...e??{}}}function _e(e,A,t=0){let n=0;for(let s=0;s<A;s++)n=n<<8|e[t+s];return n>>>0}function Oe(e,A){let t=_e(e,A,e.currentIndex);return e.currentIndex+=A,t}function Ft(e,A){let t=new Array(A).fill(0);for(let n=A-1;n>=0;n--)t[n]=e&255,e>>=8;return t}function uA(e){let A=0;for(;e;){let t=e[e.currentIndex++];if(A=A<<7|t&127,t>>7!==1)break}return A}function En(e){let A=[e&127];for(e>>=7;e>0;)A.unshift(e&127|128),e>>=7;return A}function Fn(e){e=Math.floor(e);let A=Math.floor(e/60),t=Math.round(e-A*60);return{minutes:A,seconds:t,time:`${A.toString().padStart(2,"0")}:${t.toString().padStart(2,"0")}`}}function vA(e){let A="";for(let t of e){let n=t.toString(16).padStart(2,"0").toUpperCase();A+=n,A+=" "}return A}var E={warn:"color: orange;",unrecognized:"color: red;",info:"color: aqua;",recognized:"color: lime",value:"color: yellow; background-color: black;"},Ps;(()=>{var e=Uint8Array,A=Uint16Array,t=Int32Array,n=new e([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]),s=new e([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 e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),r=function(F,b){for(var X=new A(31),tA=0;tA<31;++tA)X[tA]=b+=1<<F[tA-1];for(var oA=new t(X[30]),tA=1;tA<30;++tA)for(var NA=X[tA];NA<X[tA+1];++NA)oA[NA]=NA-X[tA]<<5|tA;return{b:X,r:oA}},i=r(n,2),o=i.b,g=i.r;o[28]=258,g[258]=28;var c=r(s,0),h=c.b,C=c.r,d=new A(32768);for(w=0;w<32768;++w)u=(w&43690)>>1|(w&21845)<<1,u=(u&52428)>>2|(u&13107)<<2,u=(u&61680)>>4|(u&3855)<<4,d[w]=((u&65280)>>8|(u&255)<<8)>>1;var u,w,S=function(F,b,X){for(var tA=F.length,oA=0,NA=new A(b);oA<tA;++oA)F[oA]&&++NA[F[oA]-1];var se=new A(b);for(oA=1;oA<b;++oA)se[oA]=se[oA-1]+NA[oA-1]<<1;var WA;if(X){WA=new A(1<<b);var zA=15-b;for(oA=0;oA<tA;++oA)if(F[oA])for(var ve=oA<<4|F[oA],ae=b-F[oA],eA=se[F[oA]-1]++<<ae,EA=eA|(1<<ae)-1;eA<=EA;++eA)WA[d[eA]>>zA]=ve}else for(WA=new A(tA),oA=0;oA<tA;++oA)F[oA]&&(WA[oA]=d[se[F[oA]-1]++]>>15-F[oA]);return WA},m=new e(288);for(w=0;w<144;++w)m[w]=8;var w;for(w=144;w<256;++w)m[w]=9;var w;for(w=256;w<280;++w)m[w]=7;var w;for(w=280;w<288;++w)m[w]=8;var w,k=new e(32);for(w=0;w<32;++w)k[w]=5;var w,M=S(m,9,1),P=S(k,5,1),x=function(F){for(var b=F[0],X=1;X<F.length;++X)F[X]>b&&(b=F[X]);return b},B=function(F,b,X){var tA=b/8|0;return(F[tA]|F[tA+1]<<8)>>(b&7)&X},j=function(F,b){var X=b/8|0;return(F[X]|F[X+1]<<8|F[X+2]<<16)>>(b&7)},J=function(F){return(F+7)/8|0},Y=function(F,b,X){return(b==null||b<0)&&(b=0),(X==null||X>F.length)&&(X=F.length),new e(F.subarray(b,X))},U=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],K=function(F,b,X){var tA=new Error(b||U[F]);if(tA.code=F,Error.captureStackTrace&&Error.captureStackTrace(tA,K),!X)throw tA;return tA},q=function(F,b,X,tA){var oA=F.length,NA=tA?tA.length:0;if(!oA||b.f&&!b.l)return X||new e(0);var se=!X,WA=se||b.i!=2,zA=b.i;se&&(X=new e(oA*3));var ve=function(pt){var de=X.length;if(pt>de){var st=new e(Math.max(de*2,pt));st.set(X),X=st}},ae=b.f||0,eA=b.p||0,EA=b.b||0,_A=b.l,UA=b.d,Ce=b.m,he=b.n,$e=oA*8;do{if(!_A){ae=B(F,eA,1);var Le=B(F,eA+1,3);if(eA+=3,Le)if(Le==1)_A=M,UA=P,Ce=9,he=5;else if(Le==2){var At=B(F,eA,31)+257,jt=B(F,eA+10,15)+4,$t=At+B(F,eA+5,31)+1;eA+=14;for(var Ne=new e($t),le=new e(19),TA=0;TA<jt;++TA)le[a[TA]]=B(F,eA+TA*3,7);eA+=jt*3;for(var An=x(le),ut=(1<<An)-1,Ue=S(le,An,1),TA=0;TA<$t;){var et=Ue[B(F,eA,ut)];eA+=et&15;var GA=et>>4;if(GA<16)Ne[TA++]=GA;else{var oe=0,tt=0;for(GA==16?(tt=3+B(F,eA,3),eA+=2,oe=Ne[TA-1]):GA==17?(tt=3+B(F,eA,7),eA+=3):GA==18&&(tt=11+B(F,eA,127),eA+=7);tt--;)Ne[TA++]=oe}}var en=Ne.subarray(0,At),re=Ne.subarray(At);Ce=x(en),he=x(re),_A=S(en,Ce,1),UA=S(re,he,1)}else K(1);else{var GA=J(eA)+4,ft=F[GA-4]|F[GA-3]<<8,mt=GA+ft;if(mt>oA){zA&&K(0);break}WA&&ve(EA+ft),X.set(F.subarray(GA,mt),EA),b.b=EA+=ft,b.p=eA=mt*8,b.f=ae;continue}if(eA>$e){zA&&K(0);break}}WA&&ve(EA+131072);for(var cs=(1<<Ce)-1,Es=(1<<he)-1,St=eA;;St=eA){var oe=_A[j(F,eA)&cs],Se=oe>>4;if(eA+=oe&15,eA>$e){zA&&K(0);break}if(oe||K(2),Se<256)X[EA++]=Se;else if(Se==256){St=eA,_A=null;break}else{var tn=Se-254;if(Se>264){var TA=Se-257,ie=n[TA];tn=B(F,eA,(1<<ie)-1)+o[TA],eA+=ie}var Te=UA[j(F,eA)&Es],pe=Te>>4;Te||K(3),eA+=Te&15;var re=h[pe];if(pe>3){var ie=s[pe];re+=j(F,eA)&(1<<ie)-1,eA+=ie}if(eA>$e){zA&&K(0);break}WA&&ve(EA+131072);var nt=EA+tn;if(EA<re){var xe=NA-re,yA=Math.min(re,nt);for(xe+EA<0&&K(3);EA<yA;++EA)X[EA]=tA[xe+EA]}for(;EA<nt;++EA)X[EA]=X[EA-re]}}b.l=_A,b.p=St,b.b=EA,b.f=ae,_A&&(ae=1,b.m=Ce,b.d=UA,b.n=he)}while(!ae);return EA!=X.length&&se?Y(X,0,EA):X.subarray(0,EA)},Z=new e(0);function CA(F,b){return q(F,{i:2},b&&b.out,b&&b.dictionary)}var gA=typeof TextDecoder<"u"&&new TextDecoder,V=0;try{gA.decode(Z,{stream:!0}),V=1}catch{}Ps=CA})();var Js=Ps,qs=!1,Ks=!0,Pt=!1;function Os(e,A,t){qs=e,Ks=A,Pt=t}function y(...e){qs&&console.info(...e)}function nA(...e){Ks&&console.warn(...e)}function OA(...e){Pt&&console.group(...e)}function RA(...e){Pt&&console.groupCollapsed(...e)}function z(){Pt&&console.groupEnd()}var Ee={consoleColors:E,SpessaSynthInfo:y,SpessaSynthWarn:nA,SpessaSynthGroupCollapsed:RA,SpessaSynthGroup:OA,SpessaSynthGroupEnd:z,readBytesAsUintBigEndian:_e,readLittleEndian:v,readBytesAsString:hA,readVariableLengthQuantity:uA,inflateSync:Js};var ZA=class{ticks;statusByte;data;constructor(e,A,t){this.ticks=e,this.statusByte=A,this.data=t}};function Ya(e){let A=e&240,t=e&15,n=t;switch(A){case 128:case 144:case 160:case 176:case 192:case 208:case 224:break;case 240:switch(t){case 0:n=-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:n=-1;break;case 15:n=-2;break}break;default:n=-1}return n}function jn(e){let A=e&240,t=e&15,n=-1,s=e;return A>=128&&A<=224&&(n=t,s=A),{status:s,channel:n}}var Pa={8:2,9:2,10:2,11:2,12:1,13:1,14:2},R={noteOff:128,noteOn:144,polyPressure:160,controllerChange:176,programChange:192,channelPressure:208,pitchWheel:224,systemExclusive:240,timecode:241,songPosition:242,songSelect:243,tuneRequest:246,clock:248,start:250,continue:251,stop:252,activeSensing:254,reset:255,sequenceNumber:0,text:1,copyright:2,trackName:3,instrumentName:4,lyric:5,marker:6,cuePoint:7,programName:8,midiChannelPrefix:32,midiPort:33,endOfTrack:47,setTempo:81,smpteOffset:84,timeSignature:88,keySignature:89,sequenceSpecific:127},p={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,detuneDepth: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};function Ja(e){if(!e.tracks)throw new Error("MIDI has no tracks!");let A=[];for(let s of e.tracks){let a=[],r=0,i;for(let o of s.events){let g=Math.max(0,o.ticks-r);if(o.statusByte===R.endOfTrack){r+=g;continue}let c;o.statusByte<=R.sequenceSpecific?(c=[255,o.statusByte,...En(o.data.length),...o.data],i=void 0):o.statusByte===R.systemExclusive?(c=[240,...En(o.data.length),...o.data],i=void 0):(c=[],i!==o.statusByte&&(i=o.statusByte,c.push(o.statusByte)),c.push(...o.data)),a.push(...En(g)),a.push(...c),r+=g}a.push(0),a.push(255),a.push(R.endOfTrack),a.push(0),A.push(new Uint8Array(a))}let t=(s,a)=>{for(let r=0;r<s.length;r++)a.push(s.charCodeAt(r))},n=[];t("MThd",n),n.push(...Ft(6,4)),n.push(0,e.format),n.push(...Ft(e.tracks.length,2)),n.push(...Ft(e.timeDivision,2));for(let s of A)t("MTrk",n),n.push(...Ft(s.length,4)),n.push(...s);return new Uint8Array(n).buffer}var qa=350,me=9,Gn=16,Vs="gs",Be=-1,Gt=`SPESSASYNTH_EMBEDDED_BANK_${Math.random()}_DO_NOT_DELETE`,Xs=32767,Ka={time:0},Oa=.03,Va=.07,Xa=1,Za=64,ms=121,fA=class{static getDefaultBank(e){return e==="gm2"?ms:0}static getDrumBank(e){switch(e){default:throw new Error(`${e} doesn't have a bank MSB for drums.`);case"gm2":return 120;case"xg":return 127}}static isXGDrums(e){return e===120||e===126||e===127}static isValidXGMSB(e){return this.isXGDrums(e)||e===Za||e===ms}static isSystemXG(e){return e==="gm2"||e==="xg"}static addBankOffset(e,A,t=!0){return this.isXGDrums(e)&&t?e:Math.min(e+A,127)}static subtrackBankOffset(e,A,t=!0){return this.isXGDrums(e)&&t?e:Math.max(0,e-A)}};function $n(e){return e.data[0]===67&&e.data[2]===76&&e.data[5]===126&&e.data[6]===0}function Zs(e){return e.data[0]===65&&e.data[2]===66&&e.data[3]===18&&e.data[4]===64&&(e.data[5]&16)!==0&&e.data[6]===21}function As(e){return e.data[0]===65&&e.data[2]===66&&e.data[6]===127}function es(e){return e.data[0]===126&&e.data[2]===9&&e.data[3]===1}function ts(e){return e.data[0]===126&&e.data[2]===9&&e.data[3]===3}function Ws(e){return new ZA(e,R.systemExclusive,new O([65,16,66,18,64,0,127,0,65,247]))}var te=class zs{static toMIDIString(A){return A.isGMGSDrum?`DRUM:${A.program}`:`${A.bankLSB}:${A.bankMSB}:${A.program}`}static fromMIDIString(A){let t=A.split(":");if(t.length>3||t.length<2)throw new Error("Invalid MIDI string:");return A.startsWith("DRUM")?{bankMSB:0,bankLSB:0,program:parseInt(t[1]),isGMGSDrum:!0}:{bankLSB:parseInt(t[0]),bankMSB:parseInt(t[1]),program:parseInt(t[2]),isGMGSDrum:!1}}static toNamedMIDIString(A){return`${zs.toMIDIString(A)} ${A.name}`}static matches(A,t){return A.isGMGSDrum||t.isGMGSDrum?A.isGMGSDrum===t.isGMGSDrum&&A.program===t.program:A.program===t.program&&A.bankLSB===t.bankLSB&&A.bankMSB===t.bankMSB}static fromNamedMIDIString(A){let t=A.indexOf(" ");if(t<0)throw new Error(`Invalid named MIDI string: ${A}`);let n=this.fromMIDIString(A.substring(0,t)),s=A.substring(t+1);return{...n,name:s}}static sorter(A,t){return A.program!==t.program?A.program-t.program:A.isGMGSDrum&&!t.isGMGSDrum?1:!A.isGMGSDrum&&t.isGMGSDrum?-1:A.bankMSB!==t.bankMSB?A.bankMSB-t.bankMSB:A.bankLSB-t.bankLSB}},Wa="Created using SpessaSynth";function za(e,A,t){let n="gm",s=[],a=Array(e.tracks.length).fill(0),r=16+Math.max(...e.portChannelOffsetMap),i=[];for(let o=0;o<r;o++)i.push({program:0,drums:o%16===me,lastBank:void 0,lastBankLSB:void 0,hasBankSelect:!1});if(e.iterate((o,g)=>{let c=e.portChannelOffsetMap[a[g]];if(o.statusByte===R.midiPort){a[g]=o.data[0];return}let h=o.statusByte&240;if(h!==R.controllerChange&&h!==R.programChange&&h!==R.systemExclusive)return;if(h===R.systemExclusive){if(!Zs(o)){$n(o)?n="xg":As(o)?n="gs":es(o)?(n="gm",s.push({tNum:g,e:o})):ts(o)&&(n="gm2");return}let S=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][o.data[5]&15]+c;i[S].drums=!!(o.data[7]>0&&o.data[5]>>4);return}let C=(o.statusByte&15)+c,d=i[C];if(h===R.programChange){let m={program:o.data[0],bankLSB:d.lastBankLSB?.data?.[1]??0,bankMSB:fA.subtrackBankOffset(d.lastBank?.data?.[1]??0,e.bankOffset),isGMGSDrum:d.drums},k=t.getPreset(m,n);if(y(`%cInput patch: %c${te.toMIDIString(m)}%c. Channel %c${C}%c. Changing patch to ${k.toString()}.`,E.info,E.unrecognized,E.info,E.recognized,E.info),o.data[0]=k.program,k.isGMGSDrum&&fA.isSystemXG(n)||d.lastBank===void 0||(d.lastBank.data[1]=fA.addBankOffset(k.bankMSB,A,k.isXGDrums),d.lastBankLSB===void 0))return;d.lastBankLSB.data[1]=k.bankLSB;return}let u=o.data[0]===p.bankSelectLSB;o.data[0]!==p.bankSelect&&!u||(d.hasBankSelect=!0,u?d.lastBankLSB=o:d.lastBank=o)}),i.forEach((o,g)=>{if(o.hasBankSelect)return;let c=g%16,h=R.programChange|c,C=Math.floor(g/16)*16,d=e.portChannelOffsetMap.indexOf(C),u=e.tracks.find(M=>M.port===d&&M.channels.has(c));if(u===void 0)return;let S=u.events.findIndex(M=>M.statusByte===h);if(S===-1){let M=u.events.findIndex(B=>B.statusByte>128&&B.statusByte<240&&(B.statusByte&15)===c);if(M===-1)return;let P=u.events[M].ticks,x=t.getPreset({bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1},n).program;u.addEvent(new ZA(P,R.programChange|c,new O([x])),M),S=M}y(`%cAdding bank select for %c${g}`,E.info,E.recognized);let m=u.events[S].ticks,k=t.getPreset({bankLSB:0,bankMSB:0,program:o.program,isGMGSDrum:o.drums},n),w=fA.addBankOffset(k.bankMSB,A,k.isXGDrums);u.addEvent(new ZA(m,R.controllerChange|c,new O([p.bankSelect,w])),S)}),n==="gm"&&!fA.isSystemXG(n)){for(let g of s){let c=e.tracks[g.tNum];c.deleteEvent(c.events.indexOf(g.e))}let o=0;e.tracks[0].events[0].statusByte===R.trackName&&o++,e.tracks[0].addEvent(Ws(0),o)}}var Ss={bankOffset:0,metadata:{},correctBankOffset:!0,soundBank:void 0};function _a(e,A,t){let n=t.metadata;if(OA("%cWriting the RMIDI File...",E.info),y("metadata",n),y("Initial bank offset",e.bankOffset),t.correctBankOffset){if(!t.soundBank)throw new Error("Sound bank must be provided if correcting bank offset.");za(e,t.bankOffset,t.soundBank)}let s=new O(e.writeMIDI());n.name??=e.getName(),n.creationDate??=new Date,n.copyright??=Wa,n.software??="SpessaSynth",Object.entries(n).forEach(i=>{let o=i;o[1]&&e.setRMIDInfo(o[0],o[1])});let a=[];Object.entries(e.rmidiInfo).forEach(i=>{let o=i[0],g=i[1],c=h=>{a.push(IA(h,g))};switch(o){case"album":c("IALB"),c("IPRD");break;case"software":c("ISFT");break;case"infoEncoding":c("IENC");break;case"creationDate":c("ICRD");break;case"picture":c("IPIC");break;case"name":c("INAM");break;case"artist":c("IART");break;case"genre":c("IGNR");break;case"copyright":c("ICOP");break;case"comment":c("ICMT");break;case"engineer":c("IENG");break;case"subject":c("ISBJ");break;case"midiEncoding":c("MENC");break}});let r=new O(2);return ht(r,t.bankOffset,2),a.push(IA("DBNK",r)),y("%cFinished!",E.info),z(),MA("RIFF",[ne("RMID"),IA("data",s),MA("INFO",a,!0),new O(A)]).buffer}function ja(e,A){RA("%cSearching for all used programs and keys...",E.info);let t=16+Math.max(...e.portChannelOffsetMap),n=[],s="gs";for(let i=0;i<t;i++){let o=i%16===me;n.push({preset:A.getPreset({bankLSB:0,bankMSB:0,isGMGSDrum:o,program:0},s),bankMSB:0,bankLSB:0,isDrum:o})}let a=new Map,r=e.tracks.map(i=>i.port);return e.iterate((i,o)=>{if(i.statusByte===R.midiPort){r[o]=i.data[0];return}let g=i.statusByte&240;if(g!==R.noteOn&&g!==R.controllerChange&&g!==R.programChange&&g!==R.systemExclusive)return;let c=(i.statusByte&15)+e.portChannelOffsetMap[r[o]]||0,h=n[c];switch(g){case R.programChange:h.preset=A.getPreset({bankMSB:h.bankMSB,bankLSB:h.bankLSB,program:i.data[0],isGMGSDrum:h.isDrum},s);break;case R.controllerChange:switch(i.data[0]){default:return;case p.bankSelectLSB:h.bankLSB=i.data[1];break;case p.bankSelect:h.bankMSB=i.data[1]}break;case R.noteOn:if(i.data[1]===0)return;let C=a.get(h.preset);C||(C=new Set,a.set(h.preset,C)),C.add(`${i.data[0]}-${i.data[1]}`);break;case R.systemExclusive:{if(!Zs(i)){$n(i)?(s="xg",y("%cXG on detected!",E.recognized)):ts(i)?(s="gm2",y("%cGM2 on detected!",E.recognized)):es(i)?(s="gm",y("%cGM on detected!",E.recognized)):As(i)&&(s="gs",y("%cGS on detected!",E.recognized));return}let d=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][i.data[5]&15]+e.portChannelOffsetMap[r[o]],u=!!(i.data[7]>0&&i.data[5]>>4);h=n[d],h.isDrum=u}break}}),a.forEach((i,o)=>{i.size===0&&(y(`%cDetected change but no keys for %c${o.name}`,E.info,E.value),a.delete(o))}),z(),a}function $a(e,A=0){let t=C=>(C.data=new O(C.data.buffer),6e7/_e(C.data,3)),n=[],a=e.tracks.map(C=>C.events).flat();a.sort((C,d)=>C.ticks-d.ticks);for(let C=0;C<16;C++)n.push([]);let r=0,i=60/(120*e.timeDivision),o=0,g=0,c=[];for(let C=0;C<16;C++)c.push([]);let h=(C,d)=>{let u=c[d].findIndex(m=>m.midiNote===C),S=c[d][u];if(S){let m=r-S.start;S.length=m,d===me&&(S.length=m<A?A:m),c[d].splice(u,1)}g--};for(;o<a.length;){let C=a[o],d=C.statusByte>>4,u=C.statusByte&15;if(d===8)h(C.data[0],u);else if(d===9)if(C.data[1]===0)h(C.data[0],u);else{h(C.data[0],u);let S={midiNote:C.data[0],start:r,length:-1,velocity:C.data[1]/127};n[u].push(S),c[u].push(S),g++}else C.statusByte===81&&(i=60/(t(C)*e.timeDivision));if(++o>=a.length)break;r+=i*(a[o].ticks-C.ticks)}return g>0&&c.forEach((C,d)=>{C.forEach(u=>{let S=r-u.start;u.length=S,d===me&&(u.length=S<A?A:S)})}),n}var bt={linear:0,nearestNeighbor:1,hermite:2},YA={Idle:0,RPCoarse:1,RPFine:2,NRPCoarse:3,NRPFine:4,DataCoarse:5,DataFine:6},rA={channelTuning:0,channelTransposeFine:1,modulationMultiplier:2,masterTuning:3,channelTuningSemitones:4,channelKeyShift:5,sf2NPRNGeneratorLSB:6};function Pe(e,A,t,n){return new ZA(n,R.controllerChange|e%16,new O([A,t]))}function Ao(e,A){let t=16|[1,2,3,4,5,6,7,8,0,9,10,11,12,13,14,15][e%16],n=[65,16,66,18,64,t,21,1],a=128-(64+t+21+1)%128;return new ZA(A,R.systemExclusive,new O([...n,a,247]))}function eo(e,A=[],t=[],n=[],s=[]){RA("%cApplying changes to the MIDI file...",E.info),y("Desired program changes:",A),y("Desired CC changes:",t),y("Desired channels to clear:",n),y("Desired channels to transpose:",s);let a=new Set;A.forEach(m=>{a.add(m.channel)});let r="gs",i=!1,o=e.tracks.map(m=>m.port),g={},c=0,h=(m,k)=>{e.tracks[m].channels.size!==0&&(c===0&&(c+=16,g[k]=0),g[k]===void 0&&(g[k]=c,c+=16),o[m]=k)};e.tracks.forEach((m,k)=>{h(k,m.port)});let C=c,d=Array(C).fill(!0),u=Array(C).fill(0),S=Array(C).fill(0);if(s.forEach(m=>{let k=Math.trunc(m.keyShift),w=m.keyShift-k;u[m.channel]=k,S[m.channel]=w}),e.iterate((m,k,w)=>{let M=e.tracks[k],P=w[k],x=()=>{M.deleteEvent(P),w[k]--},B=(K,q=0)=>{M.addEvent(K,P+q),w[k]++},j=g[o[k]]||0;if(m.statusByte===R.midiPort){h(k,m.data[0]);return}if(m.statusByte<=R.sequenceSpecific&&m.statusByte>=R.sequenceNumber)return;let J=m.statusByte&240,Y=m.statusByte&15,U=Y+j;if(n.includes(U)){x();return}switch(J){case R.noteOn:if(d[U]){d[U]=!1,t.filter(q=>q.channel===U).forEach(q=>{let Z=Pe(Y,q.controllerNumber,q.controllerValue,m.ticks);B(Z)});let K=S[U];if(K!==0){let q=K*64+64,Z=Pe(Y,p.registeredParameterMSB,0,m.ticks),CA=Pe(Y,p.registeredParameterLSB,1,m.ticks),gA=Pe(U,p.dataEntryMSB,q,m.ticks),V=Pe(Y,p.dataEntryLSB,0,m.ticks);B(V),B(gA),B(CA),B(Z)}if(a.has(U)){let q=A.find(b=>b.channel===U);if(!q)return;y(`%cSetting %c${q.channel}%c to %c${te.toMIDIString(q)}%c. Track num: %c${k}`,E.info,E.recognized,E.info,E.recognized,E.info,E.recognized);let Z=q.bankMSB,CA=q.bankLSB,gA=q.program,V=new ZA(m.ticks,R.programChange|Y,new O([gA]));B(V);let F=(b,X)=>{let tA=Pe(Y,b?p.bankSelectLSB:p.bankSelect,X,m.ticks);B(tA)};fA.isSystemXG(r)&&q.isGMGSDrum&&(y(`%cAdding XG Drum change on track %c${k}`,E.recognized,E.value),Z=fA.getDrumBank(r),CA=0),F(!1,Z),F(!0,CA),q.isGMGSDrum&&!fA.isSystemXG(r)&&Y!==me&&(y(`%cAdding GS Drum change on track %c${k}`,E.recognized,E.value),B(Ao(Y,m.ticks)))}}m.data[0]+=u[U];break;case R.noteOff:m.data[0]+=u[U];break;case R.programChange:if(a.has(U)){x();return}break;case R.controllerChange:{let K=m.data[0];if(t.find(Z=>Z.channel===U&&K===Z.controllerNumber)!==void 0){x();return}(K===p.bankSelect||K===p.bankSelectLSB)&&a.has(U)&&x()}break;case R.systemExclusive:if($n(m))y("%cXG system on detected",E.info),r="xg",i=!0;else if(m.data[0]===67&&m.data[2]===76&&m.data[3]===8&&m.data[5]===3)a.has(m.data[4]+j)&&x();else if(ts(m))y("%cGM2 system on detected",E.info),r="gm2",i=!0;else if(As(m)){i=!0,y("%cGS on detected!",E.recognized);break}else es(m)&&(y("%cGM on detected, removing!",E.info),x(),i=!1)}}),!i&&A.length>0){let m=0;e.tracks[0].events[0].statusByte===R.trackName&&m++,e.tracks[0].addEvent(Ws(0),m),y("%cGS on not detected. Adding it.",E.info)}e.flush(),z()}function to(e,A){let t=[],n=[],s=[],a=[];A.channelSnapshots.forEach((r,i)=>{if(r.isMuted){n.push(i);return}let o=r.channelTransposeKeyShift+r.customControllers[rA.channelTransposeFine]/100;o!==0&&t.push({channel:i,keyShift:o}),r.lockPreset&&s.push({channel:i,...r.patch}),r.lockedControllers.forEach((g,c)=>{if(!g||c>127||c===p.bankSelect)return;let h=r.midiControllers[c]>>7;a.push({channel:i,controllerNumber:c,controllerValue:h})})}),e.modify(s,a,n,t)}var Bn={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},Je={inLineResource:1,inFileResource:2,inFileNode:3,externalFile:4,externalXMF:5,XMFFileURIandNodeID:6},Cn={StandardMIDIFile:0,StandardMIDIFileType1:1,DLS1:2,DLS2:3,DLS22:4,mobileDLS:5,unknown:-1,folder:-2},no={standard:0,MMA:1,registered:2,nonRegistered:3},Rt={none:0,MMAUnpacker:1,registered:2,nonRegistered:3},so=class _s{length;itemCount;metadataLength;metadata={};nodeData;innerNodes=[];packedContent=!1;nodeUnpackers=[];resourceFormat="unknown";referenceTypeID;constructor(A){let t=A.currentIndex;this.length=uA(A),this.itemCount=uA(A);let n=uA(A),s=A.currentIndex-t,a=n-s,r=A.slice(A.currentIndex,A.currentIndex+a);A.currentIndex+=a,this.metadataLength=uA(r);let i=r.slice(r.currentIndex,r.currentIndex+this.metadataLength);r.currentIndex+=this.metadataLength;let o,g;for(;i.currentIndex<i.length;){if(i[i.currentIndex]===0)i.currentIndex++,o=uA(i),Object.values(Bn).includes(o)?g=Object.keys(Bn).find(S=>Bn[S]===o)??"":(y(`Unknown field specifier: ${o}`),g=`unknown_${o}`);else{let S=uA(i);o=hA(i,S),g=o}let u=uA(i);if(u===0){let S=uA(i),m=i.slice(i.currentIndex,i.currentIndex+S);i.currentIndex+=S,uA(m)<4?this.metadata[g]=hA(m,S-1):this.metadata[g]=m.slice(m.currentIndex)}else y(`International content: ${u}`),i.currentIndex+=uA(i)}let c=r.currentIndex,h=uA(r),C=r.slice(r.currentIndex,c+h);if(r.currentIndex=c+h,h>0)for(this.packedContent=!0;C.currentIndex<h;){let d={};switch(d.id=uA(C),d.id){case Rt.nonRegistered:case Rt.registered:throw z(),new Error(`Unsupported unpacker ID: ${d.id}`);default:throw z(),new Error(`Unknown unpacker ID: ${d.id}`);case Rt.none:d.standardID=uA(C);break;case Rt.MMAUnpacker:{let u=C[C.currentIndex++];u===0&&(u<<=8,u|=C[C.currentIndex++],u<<=8,u|=C[C.currentIndex++]);let S=uA(C);d.manufacturerID=u,d.manufacturerInternalID=S}break}d.decodedSize=uA(C),this.nodeUnpackers.push(d)}switch(A.currentIndex=t+n,this.referenceTypeID=uA(A),this.nodeData=A.slice(A.currentIndex,t+this.length),A.currentIndex=t+this.length,this.referenceTypeID){case Je.inLineResource:break;case Je.externalXMF:case Je.inFileNode:case Je.XMFFileURIandNodeID:case Je.externalFile:case Je.inFileResource:throw z(),new Error(`Unsupported reference type: ${this.referenceTypeID}`);default:throw z(),new Error(`Unknown reference type: ${this.referenceTypeID}`)}if(this.isFile){if(this.packedContent){let u=this.nodeData.slice(2,this.nodeData.length);y(`%cPacked content. Attempting to deflate. Target size: %c${this.nodeUnpackers[0].decodedSize}`,E.warn,E.value);try{this.nodeData=new O(Js(u).buffer)}catch(S){if(z(),S instanceof Error)throw new Error(`Error unpacking XMF file contents: ${S.message}.`)}}let d=this.metadata.resourceFormat;if(d===void 0)nA("No resource format for this file node!");else{d[0]!==no.standard&&(y(`Non-standard formatTypeID: ${d.toString()}`),this.resourceFormat=d.toString());let S=d[1];Object.values(Cn).includes(S)?this.resourceFormat=Object.keys(Cn).find(m=>Cn[m]===S):y(`Unrecognized resource format: ${S}`)}}else for(this.resourceFormat="folder";this.nodeData.currentIndex<this.nodeData.length;){let d=this.nodeData.currentIndex,u=uA(this.nodeData),S=this.nodeData.slice(d,d+u);this.nodeData.currentIndex=d+u,this.innerNodes.push(new _s(S))}}get isFile(){return this.itemCount===0}};function ao(e,A){e.bankOffset=0;let t=hA(A,4);if(t!=="XMF_")throw z(),new SyntaxError(`Invalid XMF Header! Expected "_XMF", got "${t}"`);OA("%cParsing XMF file...",E.info);let n=hA(A,4);if(y(`%cXMF version: %c${n}`,E.info,E.recognized),n==="2.00"){let o=Oe(A,4),g=Oe(A,4);y(`%cFile Type ID: %c${o}%c, File Type Revision ID: %c${g}`,E.info,E.recognized,E.info,E.recognized)}uA(A);let s=uA(A);A.currentIndex+=s,A.currentIndex=uA(A);let a=new so(A),r,i=o=>{let g=(c,h)=>{o.metadata[c]!==void 0&&typeof o.metadata[c]=="string"&&(e.rmidiInfo[h]=ne(o.metadata[c]))};if(g("nodeName","name"),g("title","name"),g("copyrightNotice","copyright"),g("comment","comment"),o.isFile)switch(o.resourceFormat){default:return;case"DLS1":case"DLS2":case"DLS22":case"mobileDLS":y("%cFound embedded DLS!",E.recognized),e.embeddedSoundBank=o.nodeData.buffer;break;case"StandardMIDIFile":case"StandardMIDIFileType1":y("%cFound embedded MIDI!",E.recognized),r=o.nodeData;break}else for(let c of o.innerNodes)i(c)};if(i(a),z(),!r)throw new Error("No MIDI data in the XMF file!");return r}var Jt=class js{name="";port=0;channels=new Set;events=[];static copyFrom(A){let t=new js;return t.copyFrom(A),t}copyFrom(A){this.name=A.name,this.port=A.port,this.channels=new Set(A.channels),this.events=A.events.map(t=>new ZA(t.ticks,t.statusByte,new O(t.data)))}addEvent(A,t){this.events.splice(t,0,A)}deleteEvent(A){this.events.splice(A,1)}pushEvent(A){this.events.push(A)}};function ps(e,A,t){RA("%cParsing MIDI File...",E.info),e.fileName=t;let n=new O(A),s=n,a=g=>{let c=hA(g,4),h=Oe(g,4),C=new O(h),d={type:c,size:h,data:C},u=g.slice(g.currentIndex,g.currentIndex+d.size);return d.data.set(u,0),g.currentIndex+=d.size,d},r=ee(n,4);if(r==="RIFF"){n.currentIndex+=8;let g=hA(n,4);if(g!=="RMID")throw z(),new SyntaxError(`Invalid RMIDI Header! Expected "RMID", got "${g}"`);let c=aA(n);if(c.header!=="data")throw z(),new SyntaxError(`Invalid RMIDI Chunk header! Expected "data", got "${g}"`);s=c.data;let h=!1,C=!1;for(;n.currentIndex<=n.length;){let d=n.currentIndex,u=aA(n,!0);if(u.header==="RIFF"){let S=hA(u.data,4).toLowerCase();S==="sfbk"||S==="sfpk"||S==="dls "?(y("%cFound embedded soundbank!",E.recognized),e.embeddedSoundBank=n.slice(d,d+u.size).buffer):nA(`Unknown RIFF chunk: "${S}"`),S==="dls "?e.isDLSRMIDI=!0:h=!0}else if(u.header==="LIST"&&hA(u.data,4)==="INFO")for(y("%cFound RMIDI INFO chunk!",E.recognized);u.data.currentIndex<=u.size;){let m=aA(u.data,!0),k=m.header,w=m.data;switch(k){default:nA(`Unknown RMIDI Info: ${k}`);break;case"INAM":e.rmidiInfo.name=w;break;case"IALB":case"IPRD":e.rmidiInfo.album=w;break;case"ICRT":case"ICRD":e.rmidiInfo.creationDate=w;break;case"IART":e.rmidiInfo.artist=w;break;case"IGNR":e.rmidiInfo.genre=w;break;case"IPIC":e.rmidiInfo.picture=w;break;case"ICOP":e.rmidiInfo.copyright=w;break;case"ICMT":e.rmidiInfo.comment=w;break;case"IENG":e.rmidiInfo.engineer=w;break;case"ISFT":e.rmidiInfo.software=w;break;case"ISBJ":e.rmidiInfo.subject=w;break;case"IENC":e.rmidiInfo.infoEncoding=w;break;case"MENC":e.rmidiInfo.midiEncoding=w;break;case"DBNK":e.bankOffset=Hs(w,2),C=!0;break}}}h&&!C&&(e.bankOffset=1),e.isDLSRMIDI&&(e.bankOffset=0),e.embeddedSoundBank===void 0&&(e.bankOffset=0)}else r==="XMF_"?s=ao(e,n):s=n;let i=a(s);if(i.type!=="MThd")throw z(),new SyntaxError(`Invalid MIDI Header! Expected "MThd", got "${i.type}"`);if(i.size!==6)throw z(),new RangeError(`Invalid MIDI header chunk size! Expected 6, got ${i.size}`);e.format=Oe(i.data,2);let o=Oe(i.data,2);e.timeDivision=Oe(i.data,2);for(let g=0;g<o;g++){let c=new Jt,h=a(s);if(h.type!=="MTrk")throw z(),new SyntaxError(`Invalid track header! Expected "MTrk" got "${h.type}"`);let C,d=0;for(e.format===2&&g>0&&(d+=e.tracks[g-1].events[e.tracks[g-1].events.length-1].ticks);h.data.currentIndex<h.size;){d+=uA(h.data);let u=h.data[h.data.currentIndex],S;if(C!==void 0&&u<128)S=C;else{if(u<128)throw z(),new SyntaxError(`Unexpected byte with no running byte. (${u})`);S=h.data[h.data.currentIndex++]}let m=Ya(S),k;switch(m){case-1:k=0;break;case-2:S=h.data[h.data.currentIndex++],k=uA(h.data);break;case-3:k=uA(h.data);break;default:k=Pa[S>>4],C=S;break}let w=new O(k);w.set(h.data.slice(h.data.currentIndex,h.data.currentIndex+k),0);let M=new ZA(d,S,w);c.pushEvent(M),h.data.currentIndex+=k}e.tracks.push(c),y(`%cParsed %c${e.tracks.length}%c / %c${e.tracks.length}`,E.info,E.value,E.info,E.value)}y("%cAll tracks parsed correctly!",E.recognized),e.flush(!1),z()}var oo=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"]]),ro=[oo];function io(e){for(let A of ro){let t=e;A.forEach((s,a)=>{let r=new RegExp(a,"gi");t=t.replace(r,s)});let n=new Date(t);if(!isNaN(n.getTime()))return n}}function Io(e){let A=/^(\d{2})\.(\d{2})\.(\d{4})$/.exec(e);if(A){let t=parseInt(A[1]),n=parseInt(A[2])-1,s=parseInt(A[3]),a=new Date(s,n,t);if(!isNaN(a.getTime()))return a}}function go(e){let A=/^(\d{1,2})\s{1,2}(\d{1,2})\s{1,2}(\d{2})$/.exec(e);if(A){let t=A[1],n=(parseInt(A[2])+1).toString(),s=A[3],a=new Date(`${n}/${t}/${s}`);if(!isNaN(a.getTime()))return a}}function co(e){let t=/\b\d{4}\b/.exec(e);return t?new Date(t[0]):void 0}function ns(e){if(e=e.trim(),e.length<1)return new Date;let A=e.replace(/\b(\d+)(st|nd|rd|th)\b/g,"$1"),t=new Date(A);if(isNaN(t.getTime())){let n=io(e);if(n)return n;let s=Io(e);if(s)return s;let a=go(e);if(a)return a;let r=co(e);return r||(nA(`Invalid date: "${e}". Replacing with the current date!`),new Date)}return t}var be=class vt{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};fileName;format=0;rmidiInfo={};bankOffset=0;isKaraokeFile=!1;isMultiPort=!1;isDLSRMIDI=!1;embeddedSoundBank;binaryName;get infoEncoding(){let A=this.rmidiInfo.infoEncoding;if(!A)return;let t=A.byteLength;return A[A.byteLength-1]===0&&t--,ee(A,t)}static fromArrayBuffer(A,t=""){let n=new vt;return ps(n,A,t),n}static async fromFile(A){let t=new vt;return ps(t,await A.arrayBuffer(),A.name),t}static copyFrom(A){let t=new vt;return t.copyFrom(A),t}copyFrom(A){this.copyMetadataFrom(A),this.embeddedSoundBank=A?.embeddedSoundBank?.slice(0)??void 0,this.tracks=A.tracks.map(t=>Jt.copyFrom(t))}midiTicksToSeconds(A){if(A=Math.max(A,0),this.tempoChanges.length<1)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(s=>s.ticks<=A),n=0;for(;t<this.tempoChanges.length;){let s=this.tempoChanges[t++],a=A-s.ticks;n+=a*60/(s.tempo*this.timeDivision),A=s.ticks}return n}getUsedProgramsAndKeys(A){return ja(this,A)}flush(A=!0){if(A)for(let t of this.tracks)t.events.sort((n,s)=>n.ticks-s.ticks);this.parseInternal()}getNoteTimes(A=0){return $a(this,A)}writeMIDI(){return Ja(this)}writeRMIDI(A,t=Ss){return _a(this,A,_n(t,Ss))}modify(A=[],t=[],n=[],s=[]){eo(this,A,t,n,s)}applySnapshot(A){to(this,A)}getName(A="Shift_JIS"){let t="",n=this.getRMIDInfo("name");if(n)return n.trim();if(this.binaryName){A=this.getRMIDInfo("midiEncoding")??A;try{t=new TextDecoder(A).decode(this.binaryName).trim()}catch(s){nA(`Failed to decode MIDI name: ${s}`)}}return t||this.fileName}getExtraMetadata(A="Shift_JIS"){A=this.infoEncoding??A;let t=new TextDecoder(A);return this.extraMetadata.map(n=>t.decode(n.data).replace(/@T|@A/g,"").trim())}setRMIDInfo(A,t){if(this.rmidiInfo.infoEncoding=ne("utf-8",!0),A==="picture")this.rmidiInfo.picture=new Uint8Array(t);else if(A==="creationDate")this.rmidiInfo.creationDate=ne(t.toISOString(),!0);else{let n=new TextEncoder().encode(t);this.rmidiInfo[A]=new Uint8Array([...n,0])}}getRMIDInfo(A){if(!this.rmidiInfo[A])return;let t=this.infoEncoding??"UTF-8";if(A==="picture")return this.rmidiInfo[A].buffer;if(A==="creationDate")return ns(ee(this.rmidiInfo[A]));try{let n=new TextDecoder(t),s=this.rmidiInfo[A];return s[s.length-1]===0&&(s=s?.slice(0,s.length-1)),n.decode(s.buffer).trim()}catch(n){nA(`Failed to decode ${A} name: ${n}`);return}}iterate(A){let t=Array(this.tracks.length).fill(0),n=this.tracks.length,s=()=>{let a=0,r=1/0;return this.tracks.forEach(({events:i},o)=>{t[o]>=i.length||i[t[o]].ticks<r&&(a=o,r=i[t[o]].ticks)}),a};for(;n>0;){let a=s(),r=this.tracks[a].events;if(t[a]>=r.length){n--;continue}let i=r[t[a]];A(i,a,t),t[a]++}}copyMetadataFrom(A){this.fileName=A.fileName,this.timeDivision=A.timeDivision,this.duration=A.duration,this.firstNoteOn=A.firstNoteOn,this.lastVoiceEventTick=A.lastVoiceEventTick,this.format=A.format,this.bankOffset=A.bankOffset,this.isKaraokeFile=A.isKaraokeFile,this.isMultiPort=A.isMultiPort,this.isDLSRMIDI=A.isDLSRMIDI,this.isDLSRMIDI=A.isDLSRMIDI,this.tempoChanges=[...A.tempoChanges],this.extraMetadata=A.extraMetadata.map(t=>new ZA(t.ticks,t.statusByte,new O(t.data))),this.lyrics=A.lyrics.map(t=>new ZA(t.ticks,t.statusByte,new O(t.data))),this.portChannelOffsetMap=[...A.portChannelOffsetMap],this.binaryName=A?.binaryName?.slice(),this.loop={...A.loop},this.keyRange={...A.keyRange},this.rmidiInfo={},Object.entries(A.rmidiInfo).forEach(t=>{let n=t[0],s=t[1];this.rmidiInfo[n]=s.slice()})}parseInternal(){OA("%cInterpreting MIDI events...",E.info);let A=!1;this.keyRange={max:0,min:127},this.extraMetadata=[];let t=!1;typeof this.rmidiInfo.name<"u"&&(t=!0);let n=null,s=null;for(let o of this.tracks){let g=new Set,c=!1;for(let C=0;C<o.events.length;C++){let d=o.events[C];if(d.statusByte>=128&&d.statusByte<240)switch(c=!0,d.ticks>this.lastVoiceEventTick&&(this.lastVoiceEventTick=d.ticks),d.statusByte&240){case R.controllerChange:switch(d.data[0]){case 2:case 116:n=d.ticks;break;case 4:case 117:s===null?s=d.ticks:s=0;break;case 0:this.isDLSRMIDI&&d.data[1]!==0&&d.data[1]!==127&&(y("%cDLS RMIDI with offset 1 detected!",E.recognized),this.bankOffset=1)}break;case R.noteOn:{g.add(d.statusByte&15);let S=d.data[0];this.keyRange.min=Math.min(this.keyRange.min,S),this.keyRange.max=Math.max(this.keyRange.max,S);break}}let u=ee(d.data);switch(d.statusByte){case R.endOfTrack:C!==o.events.length-1&&(o.deleteEvent(C),C--,nA("Unexpected EndOfTrack. Removing!"));break;case R.setTempo:this.tempoChanges.push({ticks:d.ticks,tempo:6e7/_e(d.data,3)});break;case R.marker:switch(u.trim().toLowerCase()){default:break;case"start":case"loopstart":n=d.ticks;break;case"loopend":s=d.ticks}break;case R.copyright:this.extraMetadata.push(d);break;case R.lyric:u.trim().startsWith("@KMIDI KARAOKE FILE")&&(this.isKaraokeFile=!0,y("%cKaraoke MIDI detected!",E.recognized)),this.isKaraokeFile?d.statusByte=R.text:this.lyrics.push(d);case R.text:{let S=u.trim();S.startsWith("@KMIDI KARAOKE FILE")?(this.isKaraokeFile=!0,y("%cKaraoke MIDI detected!",E.recognized)):this.isKaraokeFile&&(S.startsWith("@T")||S.startsWith("@A")?A?this.extraMetadata.push(d):(this.binaryName=d.data.slice(2),A=!0,t=!0):S.startsWith("@")||this.lyrics.push(d));break}}}o.channels=g,o.name="";let h=o.events.find(C=>C.statusByte===R.trackName);h&&this.tracks.indexOf(o)>0&&(o.name=ee(h.data),!c&&!o.name.toLowerCase().includes("setup")&&this.extraMetadata.push(h))}this.tempoChanges.reverse(),y("%cCorrecting loops, ports and detecting notes...",E.info);let a=[];for(let o of this.tracks){let g=o.events.find(c=>(c.statusByte&240)===R.noteOn);g&&a.push(g.ticks)}this.firstNoteOn=Math.min(...a),y(`%cFirst note-on detected at: %c${this.firstNoteOn}%c ticks!`,E.info,E.recognized,E.info),n!==null&&s===null?(n=this.firstNoteOn,s=this.lastVoiceEventTick):(n??=this.firstNoteOn,(s===null||s===0)&&(s=this.lastVoiceEventTick)),this.loop={start:n,end:s},y(`%cLoop points: start: %c${this.loop.start}%c end: %c${this.loop.end}`,E.info,E.recognized,E.info,E.recognized);let r=0;this.portChannelOffsetMap=[];for(let o of this.tracks)if(o.port=-1,o.channels.size!==0)for(let g of o.events){if(g.statusByte!==R.midiPort)continue;let c=g.data[0];o.port=c,this.portChannelOffsetMap[c]===void 0&&(this.portChannelOffsetMap[c]=r,r+=16)}this.portChannelOffsetMap=[...this.portChannelOffsetMap].map(o=>o??0);let i=1/0;for(let o of this.tracks)o.port!==-1&&i>o.port&&(i=o.port);i===1/0&&(i=0);for(let o of this.tracks)(o.port===-1||o.port===void 0)&&(o.port=i);if(this.portChannelOffsetMap.length===0&&(this.portChannelOffsetMap=[0]),this.portChannelOffsetMap.length<2?y("%cNo additional MIDI Ports detected.",E.info):(this.isMultiPort=!0,y("%cMIDI Ports detected!",E.recognized)),!t)if(this.tracks.length>1){if(this.tracks[0].events.find(o=>o.statusByte>=R.noteOn&&o.statusByte<R.polyPressure)===void 0){let o=this.tracks[0].events.find(g=>g.statusByte===R.trackName);o&&(this.binaryName=o.data)}}else{let o=this.tracks[0].events.find(g=>g.statusByte===R.trackName);o&&(this.binaryName=o.data)}if(this.extraMetadata=this.extraMetadata.filter(o=>o.data.length>0),this.lyrics.sort((o,g)=>o.ticks-g.ticks),!this.tracks.some(o=>o.events[0].ticks===0)){let o=this.tracks[0],g=this?.binaryName?.buffer;g||(g=new Uint8Array(0).buffer),o.events.unshift(new ZA(0,R.trackName,new O(g)))}if(this.duration=this.midiTicksToSeconds(this.lastVoiceEventTick),this.duration===0)throw new Error("The MIDI file no duration.");this.binaryName&&this.binaryName.length<1&&(this.binaryName=void 0),y(`%cMIDI file parsed. Total tick time: %c${this.lastVoiceEventTick}%c, total seconds time: %c${Fn(Math.ceil(this.duration)).time}`,E.info,E.recognized,E.info,E.recognized),z()}};function Eo(e,A){if(this.externalMIDIPlayback&&e.statusByte>=128){this.sendMIDIMessage([e.statusByte,...e.data]);return}let t=this._midiData.tracks[A],n=jn(e.statusByte),s=this.midiPortChannelOffsets[this.currentMIDIPorts[A]]||0;switch(n.channel+=s,n.status){case R.noteOn:{let a=e.data[1];if(a>0)this.synth.noteOn(n.channel,e.data[0],a),this.playingNotes.push({midiNote:e.data[0],channel:n.channel,velocity:a});else{this.synth.noteOff(n.channel,e.data[0]);let r=this.playingNotes.findIndex(i=>i.midiNote===e.data[0]&&i.channel===n.channel);r!==-1&&this.playingNotes.splice(r,1)}break}case R.noteOff:{this.synth.noteOff(n.channel,e.data[0]);let a=this.playingNotes.findIndex(r=>r.midiNote===e.data[0]&&r.channel===n.channel);a!==-1&&this.playingNotes.splice(a,1);break}case R.pitchWheel:this.synth.pitchWheel(n.channel,e.data[1]<<7|e.data[0]);break;case R.controllerChange:if(this._midiData.isMultiPort&&t.channels.size===0)return;this.synth.controllerChange(n.channel,e.data[0],e.data[1]);break;case R.programChange:if(this._midiData.isMultiPort&&t.channels.size===0)return;this.synth.programChange(n.channel,e.data[0]);break;case R.polyPressure:this.synth.polyPressure(n.channel,e.data[0],e.data[1]);break;case R.channelPressure:this.synth.channelPressure(n.channel,e.data[0]);break;case R.systemExclusive:this.synth.systemExclusive(e.data,s);break;case R.setTempo:{let a=6e7/_e(e.data,3);this.oneTickToSeconds=60/(a*this._midiData.timeDivision),this.oneTickToSeconds===0&&(this.oneTickToSeconds=60/(120*this._midiData.timeDivision),y("invalid tempo! falling back to 120 BPM"),a=120);break}case R.timeSignature:case R.endOfTrack:case R.midiChannelPrefix:case R.songPosition:case R.activeSensing:case R.keySignature:case R.sequenceNumber:case R.sequenceSpecific:case R.text:case R.lyric:case R.copyright:case R.trackName:case R.marker:case R.cuePoint:case R.instrumentName:case R.programName:break;case R.midiPort:this.assignMIDIPort(A,e.data[0]);break;case R.reset:this.synth.stopAllChannels(),this.synth.resetAllControllers();break;default:y(`%cUnrecognized Event: %c${e.statusByte}%c status byte: %c${Object.keys(R).find(a=>R[a]===n.status)}`,E.warn,E.unrecognized,E.warn,E.value);break}n.status>=0&&n.status<128&&this.callEvent("metaEvent",{event:e,trackIndex:A})}function Bo(){if(this.paused||!this._midiData)return;let e=this.currentTime;for(;this.playedTime<e;){let A=this.findFirstEventIndex(),n=this._midiData.tracks[A].events[this.eventIndexes[A]++];this.processEvent(n,A);let s=this.findFirstEventIndex(),a=this._midiData.tracks[s];if(this.loopCount>0&&this._midiData.loop.end<=n.ticks){this.loopCount!==1/0&&(this.loopCount--,this.callEvent("loopCountChange",{newCount:this.loopCount})),this.setTimeTicks(this._midiData.loop.start);return}if(a.events.length<=this.eventIndexes[s]){this.songIsFinished();return}let r=a.events[this.eventIndexes[s]];this.playedTime+=this.oneTickToSeconds*(r.ticks-n.ticks)}}function Co(e,A){this._midiData.tracks[e].channels.size!==0&&(this.midiPortChannelOffset===0&&(this.midiPortChannelOffset+=16,this.midiPortChannelOffsets[A]=0),this.midiPortChannelOffsets[A]===void 0&&(this.synth.midiChannels.length<this.midiPortChannelOffset+15&&this.addNewMIDIPort(),this.midiPortChannelOffsets[A]=this.midiPortChannelOffset,this.midiPortChannelOffset+=16),this.currentMIDIPorts[e]=A)}function ho(e){if(!e.tracks)throw new Error("This MIDI has no tracks!");this.oneTickToSeconds=60/(120*e.timeDivision),this._midiData=e,this.synth.clearEmbeddedBank(),this._midiData.embeddedSoundBank!==void 0&&(y("%cEmbedded soundbank detected! Using it.",E.recognized),this.synth.setEmbeddedSoundBank(this._midiData.embeddedSoundBank,this._midiData.bankOffset)),RA("%cPreloading samples...",E.info),this._midiData.getUsedProgramsAndKeys(this.synth.soundBankManager).forEach((t,n)=>{y(`%cPreloading used samples on %c${n.name}%c...`,E.info,E.recognized,E.info);for(let s of t){let[a,r]=s.split("-").map(Number);this.synth.getVoicesForPreset(n,a,r,a)}}),z(),this.currentMIDIPorts=this._midiData.tracks.map(t=>t.port),this.midiPortChannelOffset=0,this.midiPortChannelOffsets={},this._midiData.tracks.forEach((t,n)=>{this.assignMIDIPort(n,t.port)}),this.firstNoteTime=this._midiData.midiTicksToSeconds(this._midiData.firstNoteOn),y(`%cTotal song time: ${Fn(Math.ceil(this._midiData.duration)).time}`,E.recognized),this.callEvent("songChange",{songIndex:this._songIndex}),this._midiData.duration<=.2&&(nA(`%cVery short song: (${Fn(Math.round(this._midiData.duration)).time}). Disabling loop!`,E.warn),this.loopCount=0),this.currentTime=0}var I={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},Rn=Object.keys(I).length,lo=Math.max(...Object.values(I)),T=[];T[I.startAddrsOffset]={min:0,max:32768,def:0,nrpn:1};T[I.endAddrOffset]={min:-32768,max:32768,def:0,nrpn:1};T[I.startloopAddrsOffset]={min:-32768,max:32768,def:0,nrpn:1};T[I.endloopAddrsOffset]={min:-32768,max:32768,def:0,nrpn:1};T[I.startAddrsCoarseOffset]={min:0,max:32768,def:0,nrpn:1};T[I.modLfoToPitch]={min:-12e3,max:12e3,def:0,nrpn:2};T[I.vibLfoToPitch]={min:-12e3,max:12e3,def:0,nrpn:2};T[I.modEnvToPitch]={min:-12e3,max:12e3,def:0,nrpn:2};T[I.initialFilterFc]={min:1500,max:13500,def:13500,nrpn:2};T[I.initialFilterQ]={min:0,max:960,def:0,nrpn:1};T[I.modLfoToFilterFc]={min:-12e3,max:12e3,def:0,nrpn:2};T[I.vibLfoToFilterFc]={min:-12e3,max:12e3,def:0,nrpn:2};T[I.modEnvToFilterFc]={min:-12e3,max:12e3,def:0,nrpn:2};T[I.endAddrsCoarseOffset]={min:-32768,max:32768,def:0,nrpn:1};T[I.modLfoToVolume]={min:-960,max:960,def:0,nrpn:1};T[I.vibLfoToVolume]={min:-960,max:960,def:0,nrpn:1};T[I.chorusEffectsSend]={min:0,max:1e3,def:0,nrpn:1};T[I.reverbEffectsSend]={min:0,max:1e3,def:0,nrpn:1};T[I.pan]={min:-500,max:500,def:0,nrpn:1};T[I.delayModLFO]={min:-12e3,max:5e3,def:-12e3,nrpn:2};T[I.freqModLFO]={min:-16e3,max:4500,def:0,nrpn:4};T[I.delayVibLFO]={min:-12e3,max:5e3,def:-12e3,nrpn:2};T[I.freqVibLFO]={min:-16e3,max:4500,def:0,nrpn:4};T[I.delayModEnv]={min:-32768,max:5e3,def:-32768,nrpn:2};T[I.attackModEnv]={min:-32768,max:8e3,def:-32768,nrpn:2};T[I.holdModEnv]={min:-12e3,max:5e3,def:-12e3,nrpn:2};T[I.decayModEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};T[I.sustainModEnv]={min:0,max:1e3,def:0,nrpn:1};T[I.releaseModEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};T[I.keyNumToModEnvHold]={min:-1200,max:1200,def:0,nrpn:1};T[I.keyNumToModEnvDecay]={min:-1200,max:1200,def:0,nrpn:1};T[I.delayVolEnv]={min:-12e3,max:5e3,def:-12e3,nrpn:2};T[I.attackVolEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};T[I.holdVolEnv]={min:-12e3,max:5e3,def:-12e3,nrpn:2};T[I.decayVolEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};T[I.sustainVolEnv]={min:0,max:1440,def:0,nrpn:1};T[I.releaseVolEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};T[I.keyNumToVolEnvHold]={min:-1200,max:1200,def:0,nrpn:1};T[I.keyNumToVolEnvDecay]={min:-1200,max:1200,def:0,nrpn:1};T[I.startloopAddrsCoarseOffset]={min:-32768,max:32768,def:0,nrpn:1};T[I.keyNum]={min:-1,max:127,def:-1,nrpn:1};T[I.velocity]={min:-1,max:127,def:-1,nrpn:1};T[I.initialAttenuation]={min:0,max:1440,def:0,nrpn:1};T[I.endloopAddrsCoarseOffset]={min:-32768,max:32768,def:0,nrpn:1};T[I.coarseTune]={min:-120,max:120,def:0,nrpn:1};T[I.fineTune]={min:-12700,max:12700,def:0,nrpn:1};T[I.scaleTuning]={min:0,max:1200,def:100,nrpn:1};T[I.exclusiveClass]={min:0,max:99999,def:0,nrpn:0};T[I.overridingRootKey]={min:-1,max:127,def:-1,nrpn:0};T[I.sampleModes]={min:0,max:3,def:0,nrpn:0};var wA={monoSample:1,rightSample:2,leftSample:4,linkedSample:8,romMonoSample:32769,romRightSample:32770,romLeftSample:32772,romLinkedSample:32776},AA={noController:0,noteOnVelocity:2,noteOnKeyNum:3,polyPressure:10,channelPressure:13,pitchWheel:14,pitchWheelRange:16,link:127},QA={linear:0,concave:1,convex:2,switch:3};var N={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},G={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},ys={forward:0,loopAndRelease:1},SA=128,Mn=147,Ze=new Int16Array(Mn).fill(0),pA=(e,A)=>Ze[e]=A<<7;pA(p.mainVolume,100);pA(p.balance,64);pA(p.expressionController,127);pA(p.pan,64);pA(p.portamentoOnOff,127);pA(p.filterResonance,64);pA(p.releaseTime,64);pA(p.attackTime,64);pA(p.brightness,64);pA(p.decayTime,64);pA(p.vibratoRate,64);pA(p.vibratoDepth,64);pA(p.vibratoDelay,64);pA(p.generalPurposeController6,64);pA(p.generalPurposeController8,64);pA(p.registeredParameterLSB,127);pA(p.registeredParameterMSB,127);pA(p.nonRegisteredParameterLSB,127);pA(p.nonRegisteredParameterMSB,127);var ss=1;Ze[p.portamentoControl]=ss;pA(SA+AA.pitchWheel,64);pA(SA+AA.pitchWheelRange,2);var $s=Object.keys(rA).length,Aa=new Float32Array($s);Aa[rA.modulationMultiplier]=1;function Qo(e=!0){if(e&&y("%cResetting all controllers!",E.info),this.privateProps.callEvent("allControllerReset",void 0),this.setMasterParameter("midiSystem",Vs),!(!this.privateProps.drumPreset||!this.privateProps.defaultPreset)){for(let A=0;A<this.midiChannels.length;A++){let t=this.midiChannels[A];t.resetControllers(!1),t.resetPreset();for(let n=0;n<128;n++)this.midiChannels[A].lockedControllers[n]&&this.privateProps.callEvent("controllerChange",{channel:A,controllerNumber:n,controllerValue:this.midiChannels[A].midiControllers[n]>>7});if(!this.midiChannels[A].lockedControllers[SA+AA.pitchWheel]){let n=this.midiChannels[A].midiControllers[SA+AA.pitchWheel];this.privateProps.callEvent("pitchWheel",{channel:A,pitch:n})}if(!this.midiChannels[A].lockedControllers[SA+AA.channelPressure]){let n=this.midiChannels[A].midiControllers[SA+AA.channelPressure]>>7;this.privateProps.callEvent("channelPressure",{channel:A,pressure:n})}}this.privateProps.tunings.length=0,this.privateProps.tunings.length=0;for(let A=0;A<128;A++)this.privateProps.tunings.push([]);this.setMIDIVolume(1)}}function uo(e=!0){this.channelOctaveTuning.fill(0);for(let t=0;t<Ze.length;t++){if(this.lockedControllers[t])continue;let n=Ze[t];this.midiControllers[t]!==n&&t<127?t===p.portamentoControl?this.midiControllers[t]=ss:t!==p.portamentoControl&&t!==p.dataEntryMSB&&t!==p.registeredParameterMSB&&t!==p.registeredParameterLSB&&t!==p.nonRegisteredParameterMSB&&t!==p.nonRegisteredParameterLSB&&this.controllerChange(t,n>>7,e):this.midiControllers[t]=n}this.channelVibrato={rate:0,depth:0,delay:0},this.randomPan=!1,this.sysExModulators.resetModulators();let A=this.customControllers[rA.channelTransposeFine];this.customControllers.set(Aa),this.setCustomController(rA.channelTransposeFine,A),this.resetParameters()}function fo(){this.setBankMSB(fA.getDefaultBank(this.channelSystem)),this.setBankLSB(0),this.setGSDrums(!1),this.setDrums(this.channelNumber%16===me),this.programChange(0)}var ea=new Set([p.bankSelect,p.bankSelectLSB,p.mainVolume,p.mainVolumeLSB,p.pan,p.panLSB,p.reverbDepth,p.tremoloDepth,p.chorusDepth,p.detuneDepth,p.phaserDepth,p.soundVariation,p.filterResonance,p.releaseTime,p.attackTime,p.brightness,p.decayTime,p.vibratoRate,p.vibratoDepth,p.vibratoDelay,p.soundController10]);function mo(){this.channelOctaveTuning.fill(0),this.pitchWheel(8192),this.channelVibrato={rate:0,depth:0,delay:0};for(let e=0;e<128;e++){let A=Ze[e];!ea.has(e)&&A!==this.midiControllers[e]&&(e===p.portamentoControl?this.midiControllers[e]=ss:this.controllerChange(e,A>>7))}this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}function So(){this.dataEntryState=YA.Idle,this.midiControllers[p.nonRegisteredParameterLSB]=16256,this.midiControllers[p.nonRegisteredParameterMSB]=16256,this.midiControllers[p.registeredParameterLSB]=16256,this.midiControllers[p.registeredParameterMSB]=16256,this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}var we=Ze.slice(0,128);function po(e,A=void 0){if(!this._midiData)return!1;this.oneTickToSeconds=60/(120*this._midiData.timeDivision),this.externalMIDIPlayback?this.sendMIDIReset():(this.synth.resetAllControllers(),this.synth.stopAllChannels(!1)),this.playedTime=0,this.eventIndexes=Array(this._midiData.tracks.length).fill(0);let t=this.synth.midiChannels.length,n=Array(t).fill(8192),s=[];for(let c=0;c<t;c++)s.push({program:-1,bank:0,actualBank:0});let a=c=>c===p.dataDecrement||c===p.dataIncrement||c===p.dataEntryMSB||c===p.dataEntryLSB||c===p.registeredParameterLSB||c===p.registeredParameterMSB||c===p.nonRegisteredParameterLSB||c===p.nonRegisteredParameterMSB||c===p.bankSelect||c===p.bankSelectLSB||c===p.resetAllControllers,r=[];for(let c=0;c<t;c++)r.push(Array.from(we));let i,o=0;function g(c){if(n[c]=8192,r?.[c]!==void 0)for(let h=0;h<we.length;h++)ea.has(h)||(r[c][h]=we[h])}for(;;){let c=this.findFirstEventIndex(),h=this._midiData.tracks[c],C=h.events[this.eventIndexes[c]];if(A!==void 0){if(C.ticks>=A)break}else if(this.playedTime>=e)break;let d=jn(C.statusByte),u=d.channel+(this.midiPortChannelOffsets[h.port]||0);switch(d.status){case R.noteOn:r[u]??=Array.from(we),r[u][p.portamentoControl]=C.data[0];break;case R.noteOff:break;case R.pitchWheel:n[u]=C.data[1]<<7|C.data[0];break;case R.programChange:{if(this._midiData.isMultiPort&&h.channels.size===0)break;let k=s[u];k.program=C.data[0],k.actualBank=k.bank;break}case R.controllerChange:{if(this._midiData.isMultiPort&&h.channels.size===0)break;let k=C.data[0];if(a(k)){let w=C.data[1];if(k===p.bankSelect){s[u].bank=w;break}else k===p.resetAllControllers&&g(u);this.externalMIDIPlayback?this.sendMIDICC(u,k,w):this.synth.controllerChange(u,k,w)}else r[u]??=Array.from(we),r[u][k]=C.data[1];break}case R.setTempo:let m=6e7/_e(C.data,3);this.oneTickToSeconds=60/(m*this._midiData.timeDivision),i=C,o=c;break;default:this.processEvent(C,c);break}this.eventIndexes[c]++,c=this.findFirstEventIndex();let S=this._midiData.tracks[c].events[this.eventIndexes[c]];if(S===void 0)return this.stop(),!1;this.playedTime+=this.oneTickToSeconds*(S.ticks-C.ticks)}if(this.externalMIDIPlayback){for(let c=0;c<t;c++)if(n[c]!==void 0&&this.sendMIDIPitchWheel(c,n[c]>>7,n[c]&127),r[c]!==void 0&&r[c].forEach((h,C)=>{h!==we[C]&&!a(C)&&this.sendMIDICC(c,C,h)}),s[c].program>=0&&s[c].actualBank>=0){let h=s[c].actualBank;this.sendMIDICC(c,p.bankSelect,h),this.sendMIDIProgramChange(c,s[c].program)}}else for(let c=0;c<t;c++)if(n[c]!==void 0&&this.synth.pitchWheel(c,n[c]),r[c]!==void 0&&r[c].forEach((h,C)=>{h!==we[C]&&!a(C)&&this.synth.controllerChange(c,C,h)}),s[c].actualBank>=0){let h=s[c];h.program!==-1?(this.synth.controllerChange(c,p.bankSelect,h.actualBank),this.synth.programChange(c,h.program)):this.synth.controllerChange(c,p.bankSelect,h.bank)}return i&&this.callEvent("metaEvent",{event:i,trackIndex:o}),this.paused&&(this.pausedTime=this.playedTime),!0}var ta=class{songs=[];shuffledSongIndexes=[];synth;externalMIDIPlayback=!1;loopCount=0;skipToFirstNoteOn=!0;onEventCall;processTick=Bo.bind(this);firstNoteTime=0;oneTickToSeconds=0;eventIndexes=[];playedTime=0;pausedTime=-1;absoluteStartTime=0;playingNotes=[];currentMIDIPorts=[];midiPortChannelOffset=0;midiPortChannelOffsets={};assignMIDIPort=Co.bind(this);loadNewSequence=ho.bind(this);processEvent=Eo.bind(this);setTimeTo=po.bind(this);constructor(e){this.synth=e,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(e){this._songIndex=e,this._songIndex=Math.max(0,e%this.songs.length),this.loadCurrentSong()}_shuffleMode=!1;get shuffleMode(){return this._shuffleMode}set shuffleMode(e){this._shuffleMode=e,e?(this.shuffleSongIndexes(),this._songIndex=0,this.loadCurrentSong()):this._songIndex=this.shuffledSongIndexes[this._songIndex]}_playbackRate=1;get playbackRate(){return this._playbackRate}set playbackRate(e){let A=this.currentTime;this._playbackRate=e,this.currentTime=A}get currentTime(){return this.pausedTime!==void 0?this.pausedTime:(this.synth.currentSynthTime-this.absoluteStartTime)*this._playbackRate}set currentTime(e){if(this._midiData)if(this.paused&&(this.pausedTime=e),e>this._midiData.duration||e<0)this.skipToFirstNoteOn?this.setTimeTicks(this._midiData.firstNoteOn-1):this.setTimeTicks(0);else if(this.skipToFirstNoteOn&&e<this.firstNoteTime){this.setTimeTicks(this._midiData.firstNoteOn-1);return}else{if(this.playingNotes=[],this.callEvent("timeChange",{newTime:e}),this._midiData.duration===0){nA("No duration!"),this.callEvent("pause",{isFinished:!0});return}this.setTimeTo(e),this.recalculateStartTime(e)}}get paused(){return this.pausedTime!==void 0}play(){if(!this._midiData)throw new Error("No songs loaded in the sequencer!");this.currentTime>=this._midiData.duration&&(this.currentTime=0),this.paused&&this.recalculateStartTime(this.pausedTime??0),this.externalMIDIPlayback||this.playingNotes.forEach(e=>{this.synth.noteOn(e.channel,e.midiNote,e.velocity)}),this.pausedTime=void 0}pause(){this.pauseInternal(!1)}loadNewSongList(e){this.songs=e,!(this.songs.length<1)&&(this._songIndex=0,this.shuffleSongIndexes(),this.callEvent("songListChange",{newSongList:[...this.songs]}),this.loadCurrentSong())}callEvent(e,A){this?.onEventCall?.({type:e,data:A})}pauseInternal(e){this.paused||(this.stop(),this.callEvent("pause",{isFinished:e}))}songIsFinished(){if(this.songs.length===1){this.pauseInternal(!0);return}this._songIndex++,this._songIndex%=this.songs.length,this.loadCurrentSong()}stop(){this.pausedTime=this.currentTime;for(let e=0;e<16;e++)this.synth.controllerChange(e,p.sustainPedal,0);if(this.synth.stopAllChannels(),this.externalMIDIPlayback){for(let e of this.playingNotes)this.sendMIDIMessage([R.noteOff|e.channel%16,e.midiNote]);for(let e=0;e<Gn;e++)this.sendMIDICC(e,p.allNotesOff,0)}}findFirstEventIndex(){let e=0,A=1/0;return this._midiData.tracks.forEach((t,n)=>{if(this.eventIndexes[n]>=t.events.length)return;let s=t.events[this.eventIndexes[n]];s.ticks<A&&(e=n,A=s.ticks)}),e}addNewMIDIPort(){for(let e=0;e<16;e++)this.synth.createMIDIChannel()}sendMIDIMessage(e){this.externalMIDIPlayback&&this.callEvent("midiMessage",{message:e})}sendMIDIReset(){this.sendMIDIMessage([R.reset]);for(let e=0;e<Gn;e++)this.sendMIDIMessage([R.controllerChange|e,p.allSoundOff,0]),this.sendMIDIMessage([R.controllerChange|e,p.resetAllControllers,0])}loadCurrentSong(){let e=this._songIndex;this._shuffleMode&&(e=this.shuffledSongIndexes[this._songIndex]),this.loadNewSequence(this.songs[e])}shuffleSongIndexes(){let e=this.songs.map((A,t)=>t);for(this.shuffledSongIndexes=[];e.length>0;){let A=e[Math.floor(Math.random()*e.length)];this.shuffledSongIndexes.push(A),e.splice(e.indexOf(A),1)}}sendMIDICC(e,A,t){e%=16,this.externalMIDIPlayback&&this.sendMIDIMessage([R.controllerChange|e,A,t])}sendMIDIProgramChange(e,A){e%=16,this.externalMIDIPlayback&&this.sendMIDIMessage([R.programChange|e,A])}sendMIDIPitchWheel(e,A,t){e%=16,this.externalMIDIPlayback&&this.sendMIDIMessage([R.pitchWheel|e,t,A])}setTimeTicks(e){if(!this._midiData)return;this.playingNotes=[];let A=this._midiData.midiTicksToSeconds(e);this.callEvent("timeChange",{newTime:A});let t=this.setTimeTo(0,e);this.recalculateStartTime(this.playedTime)}recalculateStartTime(e){this.absoluteStartTime=this.synth.currentSynthTime-e/this._playbackRate}},lt=lt!==void 0?lt:{},ks=!1,na;lt.isInitialized=new Promise(e=>na=e);var yo=function(e){var A,t,n,s,a,r,i,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",g="",c=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");do s=o.indexOf(e.charAt(c++)),a=o.indexOf(e.charAt(c++)),r=o.indexOf(e.charAt(c++)),i=o.indexOf(e.charAt(c++)),A=s<<2|a>>4,t=(15&a)<<4|r>>2,n=(3&r)<<6|i,g+=String.fromCharCode(A),r!==64&&(g+=String.fromCharCode(t)),i!==64&&(g+=String.fromCharCode(n));while(c<e.length);return g};(function(){var e,A,t,n,s,a,r,i,o,g,c,h,C,d,u,S,m,k,w,M,P,x,B=B!==void 0?B:{};B.wasmBinary=Uint8Array.from(yo("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///////////wCDQgBRBEBEAAAAAAAA8L8gACAAoqMPCyACRQRAIABEAAAAAAAAUEOivSIDQiCIpyEBIANC/////w+DIQNBy3cMAgsgACAAoUQAAAAAAAAAAKMPBSABQf//v/8HSwRAIAAPCyADQv////8PgyIDQgBRIAFBgIDA/wNGcQR/RAAAAAAAAAAADwVBgXgLCwshAiABQeK+JWoiAUH//z9xQZ7Bmv8Daq1CIIYgA4S/RAAAAAAAAPC/oCIFIAVEAAAAAAAA4D+ioiEGIAUgBUQAAAAAAAAAQKCjIgcgB6IiCCAIoiEEIAIgAUEUdmq3IgBEAADg/kIu5j+iIAUgAER2PHk17znqPaIgByAGIAQgBCAERJ/GeNAJmsM/okSveI4dxXHMP6CiRAT6l5mZmdk/oKIgCCAEIAQgBEREUj7fEvHCP6JE3gPLlmRGxz+gokRZkyKUJEnSP6CiRJNVVVVVVeU/oKKgoKKgIAahoKAL8Q8DC38Cfgh8AkACQAJAIAG9Ig1CIIinIgVB/////wdxIgMgDaciBnJFBEBEAAAAAAAA8D8PCyAAvSIOQiCIpyEHIA6nIghFIgogB0GAgMD/A0ZxBEBEAAAAAAAA8D8PCyAHQf////8HcSIEQYCAwP8HTQRAIAhBAEcgBEGAgMD/B0ZxIANBgIDA/wdLckUEQCAGQQBHIANBgIDA/wdGIgtxRQRAAkACQAJAIAdBAEgiCUUNACADQf///5kESwR/QQIhAgwBBSADQf//v/8DSwR/IANBFHYhAiADQf///4kESwRAQQIgBkGzCCACayICdiIMQQFxa0EAIAwgAnQgBkYbIQIMAwsgBgR/QQAFQQIgA0GTCCACayICdiIGQQFxa0EAIAYgAnQgA0YbIQIMBAsFDAILCyECDAILIAZFDQAMAQsgCwRAIARBgIDAgHxqIAhyRQRARAAAAAAAAPA/DwsgBUF/SiECIARB//+//wNLBEAgAUQAAAAAAAAAACACGw8FRAAAAAAAAAAAIAGaIAIbDwsACyADQYCAwP8DRgRAIABEAAAAAAAA8D8gAKMgBUF/ShsPCyAFQYCAgIAERgRAIAAgAKIPCyAHQX9KIAVBgICA/wNGcQRAIACfDwsLIACZIQ8gCgRAIARFIARBgICAgARyQYCAwP8HRnIEQEQAAAAAAADwPyAPoyAPIAVBAEgbIQAgCUUEQCAADwsgAiAEQYCAwIB8anIEQCAAmiAAIAJBAUYbDwsMBQsLAnwgCQR8AkACQAJAIAIOAgABAgsMBwtEAAAAAAAA8L8MAgtEAAAAAAAA8D8MAQVEAAAAAAAA8D8LCyERAnwgA0GAgICPBEsEfCADQYCAwJ8ESwRAIARBgIDA/wNJBEAjCkQAAAAAAAAAACAFQQBIGw8FIwpEAAAAAAAAAAAgBUEAShsPCwALIARB//+//wNJBEAgEUScdQCIPOQ3fqJEnHUAiDzkN36iIBFEWfP4wh9upQGiRFnz+MIfbqUBoiAFQQBIGw8LIARBgIDA/wNNBEAgD0QAAAAAAADwv6AiAEQAAABgRxX3P6IiECAARETfXfgLrlQ+oiAAIACiRAAAAAAAAOA/IABEVVVVVVVV1T8gAEQAAAAAAADQP6KhoqGiRP6CK2VHFfc/oqEiAKC9QoCAgIBwg78iEiEPIBIgEKEMAgsgEUScdQCIPOQ3fqJEnHUAiDzkN36iIBFEWfP4wh9upQGiRFnz+MIfbqUBoiAFQQBKGw8FIA9EAAAAAAAAQEOiIgC9QiCIpyAEIARBgIDAAEkiBRshAkHMd0GBeCAFGyACQRR1aiEDIAJB//8/cSIEQYCAwP8DciECIARBj7EOSQRAQQAhBAUgBEH67C5JIgYhBCADIAZBAXNBAXFqIQMgAiACQYCAQGogBhshAgsgBEEDdEGwE2orAwAiFCACrUIghiAAIA8gBRu9Qv////8Pg4S/IhAgBEEDdEGQE2orAwAiEqEiE0QAAAAAAADwPyASIBCgoyIVoiIPvUKAgICAcIO/IgAgACAAoiIWRAAAAAAAAAhAoCAPIACgIBUgEyACQQF1QYCAgIACckGAgCBqIARBEnRqrUIghr8iEyAAoqEgECATIBKhoSAAoqGiIhCiIA8gD6IiACAAoiAAIAAgACAAIABE705FSih+yj+iRGXbyZNKhs0/oKJEAUEdqWB00T+gokRNJo9RVVXVP6CiRP+rb9u2bds/oKJEAzMzMzMz4z+goqAiEqC9QoCAgIBwg78iAKIiEyAQIACiIA8gEiAARAAAAAAAAAjAoCAWoaGioCIPoL1CgICAgHCDvyIARAAAAOAJx+4/oiIQIARBA3RBoBNqKwMAIA8gACAToaFE/QM63AnH7j+iIABE9QFbFOAvPj6ioaAiAKCgIAO3IhKgvUKAgICAcIO/IhMhDyATIBKhIBShIBChCwshECAAIBChIAGiIAEgDUKAgICAcIO/IgChIA+ioCEBIA8gAKIiACABoCIPvSINQiCIpyECIA2nIQMgAkH//7+EBEoEQCACQYCAwPt7aiADciABRP6CK2VHFZc8oCAPIAChZHINBgUgAkGA+P//B3FB/5fDhARLBEAgAkGA6Lz7A2ogA3IgASAPIAChZXINBgsLIBEgAkH/////B3EiA0GAgID/A0sEfyAAQYCAQEGAgMAAIANBFHZBgnhqdiACaiIDQRR2Qf8PcSIEQYF4anUgA3GtQiCGv6EiDyEAIAEgD6C9IQ1BACADQf//P3FBgIDAAHJBkwggBGt2IgNrIAMgAkEASBsFQQALIgJBFHREAAAAAAAA8D8gDUKAgICAcIO/Ig9EAAAAAEMu5j+iIhAgASAPIAChoUTvOfr+Qi7mP6IgD0Q5bKgMYVwgPqKhIg+gIgAgACAAIACiIgEgASABIAEgAUTQpL5yaTdmPqJE8WvSxUG9u76gokQs3iWvalYRP6CiRJO9vhZswWa/oKJEPlVVVVVVxT+goqEiAaIgAUQAAAAAAAAAwKCjIA8gACAQoaEiASAAIAGioKEgAKGhIgC9Ig1CIIinaiIDQYCAwABIBHwgACACEGUFIAOtQiCGIA1C/////w+DhL8LIgCiDwsLCyAAIAGgDwsgACAAoSIAIACjDwsgEURZ8/jCH26lAaJEWfP4wh9upQGiDwsgEUScdQCIPOQ3fqJEnHUAiDzkN36iCwMAAQvDAwEDfyACQYDAAE4EQCAAIAEgAhAHDwsgACEEIAAgAmohAyAAQQNxIAFBA3FGBEADQCAAQQNxBEAgAkUEQCAEDwsgACABLAAAOgAAIABBAWohACABQQFqIQEgAkEBayECDAELCyADQXxxIgJBQGohBQNAIAAgBUwEQCAAIAEoAgA2AgAgACABKAIENgIEIAAgASgCCDYCCCAAIAEoAgw2AgwgACABKAIQNgIQIAAgASgCFDYCFCAAIAEoAhg2AhggACABKAIcNgIcIAAgASgCIDYCICAAIAEoAiQ2AiQgACABKAIoNgIoIAAgASgCLDYCLCAAIAEoAjA2AjAgACABKAI0NgI0IAAgASgCODYCOCAAIAEoAjw2AjwgAEFAayEAIAFBQGshAQwBCwsDQCAAIAJIBEAgACABKAIANgIAIABBBGohACABQQRqIQEMAQsLBSADQQRrIQIDQCAAIAJIBEAgACABLAAAOgAAIAAgASwAAToAASAAIAEsAAI6AAIgACABLAADOgADIABBBGohACABQQRqIQEMAQsLCwNAIAAgA0gEQCAAIAEsAAA6AAAgAEEBaiEAIAFBAWohAQwBCwsgBAuYAgEEfyAAIAJqIQQgAUH/AXEhASACQcMATgRAA0AgAEEDcQRAIAAgAToAACAAQQFqIQAMAQsLIARBfHEiBUFAaiEGIAEgAUEIdHIgAUEQdHIgAUEYdHIhAwNAIAAgBkwEQCAAIAM2AgAgACADNgIEIAAgAzYCCCAAIAM2AgwgACADNgIQIAAgAzYCFCAAIAM2AhggACADNgIcIAAgAzYCICAAIAM2AiQgACADNgIoIAAgAzYCLCAAIAM2AjAgACADNgI0IAAgAzYCOCAAIAM2AjwgAEFAayEADAELCwNAIAAgBUgEQCAAIAM2AgAgAEEEaiEADAELCwsDQCAAIARIBEAgACABOgAAIABBAWohAAwBCwsgBCACawtVAQJ/IABBAEojBSgCACIBIABqIgAgAUhxIABBAEhyBEAQAxpBDBAFQX8PCyMFIAA2AgAQAiECIAAgAkoEQBABRQRAIwUgATYCAEEMEAVBfw8LCyABCw4AIAEgAiAAQQNxEQAACwgAQQAQAEEACwvAEQQAQYEIC7YKAQICAwMDAwQEBAQEBAQEAAEAAIAAAABWAAAAQAAAAD605DMJkfMzi7IBNDwgCjQjGhM0YKkcNKfXJjRLrzE0UDs9NHCHSTQjoFY0uJJkNFVtczSIn4E0/AuKNJMEkzRpkpw0Mr+mND+VsTSTH7005GnJNK2A1jQ2ceQ0pknzNIiMATXA9wk1Bu8SNXZ7HDXApiY1N3sxNdoDPTVeTEk1O2FWNblPZDX8JXM1inmBNYbjiTV82ZI1hWScNVKOpjUzYbE1Jei8NdwuyTXOQdY1QS7kNVcC8zWPZgE2T88JNvXDEjaYTRw26HUmNjJHMTZ0zDw2XhFJNmUiVjbODGQ2uN5yNpdTgTYcu4k2cq6SNq82nDaBXaY2NS2xNsewvDbk88g2AQPWNmDr4zYeu/I2okABN+umCTfxmBI3yR8cNx5FJjc9EzE3HpU8N2/WSDei41U398ljN4mXcjevLYE3vpKJN3SDkjfmCJw3viymN0f5sDd5ebw3/rjIN0fE1TeSqOM3+HPyN8AaATiTfgk4+W0SOAbyGzhiFCY4Vt8wONhdPDiSm0g48qRVODOHYzhuUHI40weBOGtqiTiCWJI4KtubOAn8pThoxbA4O0K8OCl+yDighdU42WXjOOgs8jjp9AA5RlYJOQ5DEjlRxBs5teMlOX+rMDmiJjw5xWBIOVNmVTmDRGM5aAlyOQHigDkkQok5nS2SOXutmzljy6U5mZGwOQ0LvDlmQ8g5C0fVOTIj4znt5fE5Hc8AOgUuCTowGBI6qZYbOhWzJTq3dzA6fO87OgomSDrHJ1U65gFjOnjCcTo7vIA66RmJOsYCkjrbf5s6y5qlOthdsDrv07s6swjIOogI1Tqf4OI6B5/xOlypADvQBQk7Xu0ROw9pGzuEgiU7/UMwO2e4Ozth60c7TelUO12/Yjuce3E7f5aAO7rxiDv515E7R1KbO0FqpTsnKrA74py7OxLOxzsXytQ7IJ7iOzVY8TumgwA8p90IPJjCETyCOxs8AVIlPFQQMDxhgTs8yLBHPOWqVDzofGI81DRxPM9wgDyWyYg8Oq2RPMAkmzzFOaU8hfavPOVluzyCk8c8uYvUPLRb4jx5EfE8+10APYm1CD3flxE9Ag4bPY0hJT253C89bUo7PUB2Rz2RbFQ9hTpiPSLucD0qS4A9f6GIPYiCkT1I95o9WAmlPfLCrz34Lrs9A1nHPW1N1D1cGeI90crwPVs4AD53jQg+M20RPpDgGj4n8SQ+LqkvPocTOz7KO0c+TS5UPjf4YT6Ep3A+jyWAPnN5iD7iV5E+3MmaPvnYpD5tj68+G/i6PpUexz4zD9Q+F9fhPj2E8D7GEgA/cmUIP5NCET8rsxo/zsAkP7F1Lz+y3Do/ZQFHPx3wUz/7tWE/+2BwPwAAgD8DAAAABAAAAAQAAAAGAAAAg/miAERObgD8KRUA0VcnAN009QBi28AAPJmVAEGQQwBjUf4Au96rALdhxQA6biQA0k1CAEkG4AAJ6i4AHJLRAOsd/gApsRwA6D6nAPU1ggBEuy4AnOmEALQmcABBfl8A1pE5AFODOQCc9DkAi1+EACj5vQD4HzsA3v+XAA+YBQARL+8AClqLAG0fbQDPfjYACcsnAEZPtwCeZj8ALepfALondQDl68cAPXvxAPc5BwCSUooA+2vqAB+xXwAIXY0AMANWAHv8RgDwq2sAILzPADb0mgDjqR0AXmGRAAgb5gCFmWUAoBRfAI1AaACA2P8AJ3NNAAYGMQDKVhUAyahzAHviYABrjMAAQcMSC11A+yH5PwAAAAAtRHQ+AAAAgJhG+DwAAABgUcx4OwAAAICDG/A5AAAAQCAlejgAAACAIoLjNgAAAAAd82k1AAAAAAAA4D8AAAAAAADgvwAAAAAAAPA/AAAAAAAA+D8AQagTCwgG0M9D6/1MPgBBuxMLigZAA7jiP09nZ1MuL3N0Yl92b3JiaXMuYwBmLT5hbGxvYy5hbGxvY19idWZmZXJfbGVuZ3RoX2luX2J5dGVzID09IGYtPnRlbXBfb2Zmc2V0AHZvcmJpc19kZWNvZGVfaW5pdGlhbABmLT5ieXRlc19pbl9zZWcgPiAwAGdldDhfcGFja2V0X3JhdwBmLT5ieXRlc19pbl9zZWcgPT0gMABuZXh0X3NlZ21lbnQAdm9yYmlzX2RlY29kZV9wYWNrZXRfcmVzdAAhYy0+c3BhcnNlAGNvZGVib29rX2RlY29kZV9zY2FsYXJfcmF3ACFjLT5zcGFyc2UgfHwgeiA8IGMtPnNvcnRlZF9lbnRyaWVzAGNvZGVib29rX2RlY29kZV9kZWludGVybGVhdmVfcmVwZWF0AHogPCBjLT5zb3J0ZWRfZW50cmllcwBjb2RlYm9va19kZWNvZGVfc3RhcnQAKG4gJiAzKSA9PSAwAGltZGN0X3N0ZXAzX2l0ZXIwX2xvb3AAMABnZXRfd2luZG93AGYtPnRlbXBfb2Zmc2V0ID09IGYtPmFsbG9jLmFsbG9jX2J1ZmZlcl9sZW5ndGhfaW5fYnl0ZXMAc3RhcnRfZGVjb2RlcgB2b3JiaXNjLT5zb3J0ZWRfZW50cmllcyA9PSAwAGNvbXB1dGVfY29kZXdvcmRzAHogPj0gMCAmJiB6IDwgMzIAbGVuW2ldID49IDAgJiYgbGVuW2ldIDwgMzIAYXZhaWxhYmxlW3ldID09IDAAayA9PSBjLT5zb3J0ZWRfZW50cmllcwBjb21wdXRlX3NvcnRlZF9odWZmbWFuAGMtPnNvcnRlZF9jb2Rld29yZHNbeF0gPT0gY29kZQBsZW4gIT0gTk9fQ09ERQBpbmNsdWRlX2luX3NvcnQAcG93KChmbG9hdCkgcisxLCBkaW0pID4gZW50cmllcwBsb29rdXAxX3ZhbHVlcwAoaW50KSBmbG9vcihwb3coKGZsb2F0KSByLCBkaW0pKSA8PSBlbnRyaWVzAOoPBG5hbWUB4g9+AAVhYm9ydAENZW5sYXJnZU1lbW9yeQIOZ2V0VG90YWxNZW1vcnkDF2Fib3J0T25DYW5ub3RHcm93TWVtb3J5BA5fX19hc3NlcnRfZmFpbAULX19fc2V0RXJyTm8GBl9hYm9ydAcWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwgQX19ncm93V2FzbU1lbW9yeQkKc3RhY2tBbGxvYwoJc3RhY2tTYXZlCwxzdGFja1Jlc3RvcmUME2VzdGFibGlzaFN0YWNrU3BhY2UNCHNldFRocmV3DgtzZXRUZW1wUmV0MA8LZ2V0VGVtcFJldDAQEV9zdGJfdm9yYmlzX2Nsb3NlEQ5fdm9yYmlzX2RlaW5pdBILX3NldHVwX2ZyZWUTGl9zdGJfdm9yYmlzX2ZsdXNoX3B1c2hkYXRhFCFfc3RiX3ZvcmJpc19kZWNvZGVfZnJhbWVfcHVzaGRhdGEVBl9lcnJvchYgX3ZvcmJpc19zZWFyY2hfZm9yX3BhZ2VfcHVzaGRhdGEXGF9pc193aG9sZV9wYWNrZXRfcHJlc2VudBgVX3ZvcmJpc19kZWNvZGVfcGFja2V0GQxfZ2V0OF9wYWNrZXQaFF92b3JiaXNfZmluaXNoX2ZyYW1lGxlfc3RiX3ZvcmJpc19vcGVuX3B1c2hkYXRhHAxfdm9yYmlzX2luaXQdDl9zdGFydF9kZWNvZGVyHg1fdm9yYmlzX2FsbG9jHxtfc3RiX3ZvcmJpc19nZXRfZmlsZV9vZmZzZXQgE19tYXliZV9zdGFydF9wYWNrZXQhDV9mbHVzaF9wYWNrZXQiBV9nZXRuIwZfZ2V0MzIkE19zdGJfdm9yYmlzX2pzX29wZW4lFF9zdGJfdm9yYmlzX2pzX2Nsb3NlJhdfc3RiX3ZvcmJpc19qc19jaGFubmVscycaX3N0Yl92b3JiaXNfanNfc2FtcGxlX3JhdGUoFV9zdGJfdm9yYmlzX2pzX2RlY29kZSkNX2NyYzMyX3VwZGF0ZSoWX3ZvcmJpc19kZWNvZGVfaW5pdGlhbCsaX3ZvcmJpc19kZWNvZGVfcGFja2V0X3Jlc3QsCV9nZXRfYml0cy0FX2lsb2cuEF9nZXQ4X3BhY2tldF9yYXcvDV9uZXh0X3NlZ21lbnQwBV9nZXQ4MQtfc3RhcnRfcGFnZTIQX2NhcHR1cmVfcGF0dGVybjMdX3N0YXJ0X3BhZ2Vfbm9fY2FwdHVyZXBhdHRlcm40DV9wcmVwX2h1ZmZtYW41G19jb2RlYm9va19kZWNvZGVfc2NhbGFyX3JhdzYOX3ByZWRpY3RfcG9pbnQ3D19kZWNvZGVfcmVzaWR1ZTgJX2RvX2Zsb29yOQ1faW52ZXJzZV9tZGN0OgxfYml0X3JldmVyc2U7EV9tYWtlX2Jsb2NrX2FycmF5PBJfc2V0dXBfdGVtcF9tYWxsb2M9JF9jb2RlYm9va19kZWNvZGVfZGVpbnRlcmxlYXZlX3JlcGVhdD4PX3Jlc2lkdWVfZGVjb2RlPxVfY29kZWJvb2tfZGVjb2RlX3N0ZXBAEF9jb2RlYm9va19kZWNvZGVBFl9jb2RlYm9va19kZWNvZGVfc3RhcnRCCl9kcmF3X2xpbmVDF19pbWRjdF9zdGVwM19pdGVyMF9sb29wRBlfaW1kY3Rfc3RlcDNfaW5uZXJfcl9sb29wRRlfaW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wRh9faW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wX2xkNjU0RwhfaXRlcl81NEgLX2dldF93aW5kb3dJEF92b3JiaXNfdmFsaWRhdGVKDV9zdGFydF9wYWNrZXRLBV9za2lwTAtfY3JjMzJfaW5pdE0NX3NldHVwX21hbGxvY04QX3NldHVwX3RlbXBfZnJlZU8SX2NvbXB1dGVfY29kZXdvcmRzUBdfY29tcHV0ZV9zb3J0ZWRfaHVmZm1hblEcX2NvbXB1dGVfYWNjZWxlcmF0ZWRfaHVmZm1hblIPX2Zsb2F0MzJfdW5wYWNrUw9fbG9va3VwMV92YWx1ZXNUDl9wb2ludF9jb21wYXJlVQpfbmVpZ2hib3JzVg9faW5pdF9ibG9ja3NpemVXCl9hZGRfZW50cnlYEF9pbmNsdWRlX2luX3NvcnRZD191aW50MzJfY29tcGFyZVoYX2NvbXB1dGVfdHdpZGRsZV9mYWN0b3JzWw9fY29tcHV0ZV93aW5kb3dcE19jb21wdXRlX2JpdHJldmVyc2VdB19zcXVhcmVeB19tYWxsb2NfBV9mcmVlYAhfcmVhbGxvY2ESX3RyeV9yZWFsbG9jX2NodW5rYg5fZGlzcG9zZV9jaHVua2MRX19fZXJybm9fbG9jYXRpb25kB19tZW1jbXBlB19zY2FsYm5mBl9xc29ydGcFX3NpZnRoBF9zaHJpCF90cmlua2xlagRfc2hsawVfcG50emwIX2FfY3R6X2xtBl9jeWNsZW4LX19fcmVtX3BpbzJvEV9fX3JlbV9waW8yX2xhcmdlcAZfX19zaW5xBl9sZGV4cHIGX19fY29zcwRfY29zdARfc2ludQRfZXhwdgRfbG9ndwRfcG93eAtydW5Qb3N0U2V0c3kHX21lbWNweXoHX21lbXNldHsFX3Nicmt8C2R5bkNhbGxfaWlpfQJiMA=="),function(l){return l.charCodeAt(0)});var B=B!==void 0?B:{},j={};for(e in B)B.hasOwnProperty(e)&&(j[e]=B[e]);B.arguments=[],B.thisProgram="./this.program",B.quit=function(l,Q){throw Q},B.preRun=[],B.postRun=[];var J=!1,Y=!1,U=!1,K=!1;J=typeof window=="object",Y=typeof importScripts=="function",U=typeof process=="object"&&typeof xa=="function"&&!J&&!Y,K=!J&&!U&&!Y;var q="";function Z(l){return B.locateFile?B.locateFile(l,q):q+l}U?(q="/",B.read=function(Q,f){var D;return A||(A=void 0),t||(t=void 0),Q=t.normalize(Q),D=A.readFileSync(Q),f?D:D.toString()},B.readBinary=function(Q){var f=B.read(Q,!0);return f.buffer||(f=new Uint8Array(f)),UA(f.buffer),f},process.argv.length>1&&(B.thisProgram=process.argv[1].replace(/\\/g,"/")),B.arguments=process.argv.slice(2),typeof module<"u",process.on("uncaughtException",function(l){if(!(l instanceof ot))throw l}),process.on("unhandledRejection",function(l,Q){process.exit(1)}),B.quit=function(l){process.exit(l)},B.inspect=function(){return"[Emscripten Module object]"}):K?(typeof read<"u"&&(B.read=function(Q){return read(Q)}),B.readBinary=function(Q){var f;return typeof readbuffer=="function"?new Uint8Array(readbuffer(Q)):(UA(typeof(f=read(Q,"binary"))=="object"),f)},typeof scriptArgs<"u"?B.arguments=scriptArgs:typeof arguments<"u"&&(B.arguments=arguments),typeof quit=="function"&&(B.quit=function(l){quit(l)})):(J||Y)&&(J?document.currentScript&&(q=document.currentScript.src):q=self.location.href,q=q.indexOf("blob:")!==0?q.split("/").slice(0,-1).join("/")+"/":"",B.read=function(Q){var f=new XMLHttpRequest;return f.open("GET",Q,!1),f.send(null),f.responseText},Y&&(B.readBinary=function(Q){var f=new XMLHttpRequest;return f.open("GET",Q,!1),f.responseType="arraybuffer",f.send(null),new Uint8Array(f.response)}),B.readAsync=function(Q,f,D){var L=new XMLHttpRequest;L.open("GET",Q,!0),L.responseType="arraybuffer",L.onload=function(){if(L.status==200||L.status==0&&L.response){f(L.response);return}D()},L.onerror=D,L.send(null)},B.setWindowTitle=function(l){document.title=l});var CA=B.print||(typeof console<"u"?console.log.bind(console):typeof print<"u"?print:null),gA=B.printErr||(typeof printErr<"u"?printErr:typeof console<"u"&&console.warn.bind(console)||CA);for(e in j)j.hasOwnProperty(e)&&(B[e]=j[e]);function V(l){var Q=d;return d=d+l+15&-16,Q}function F(l){var Q=o[M>>2],f=Q+l+15&-16;return o[M>>2]=f,f>=yA&&!nt()?(o[M>>2]=Q,0):Q}function b(l,Q){return Q||(Q=16),l=Math.ceil(l/Q)*Q}function X(l){switch(l){case"i1":case"i8":return 1;case"i16":return 2;case"i32":case"float":return 4;case"i64":case"double":return 8;default:if(l[l.length-1]==="*")return 4;if(l[0]!=="i")return 0;var Q=parseInt(l.substr(1));return UA(Q%8==0),Q/8}}function tA(l){tA.shown||(tA.shown={}),tA.shown[l]||(tA.shown[l]=1,gA(l))}j=void 0;var oA={"f64-rem":function(l,Q){return l%Q},debugger:function(){}},NA=[];function se(l,Q){for(var f=0,D=f;D<f+0;D++)if(!NA[D])return NA[D]=l,1+D;throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS."}function WA(l){NA[l-1]=null}var zA={};function ve(l,Q){if(l){UA(Q),zA[Q]||(zA[Q]={});var f=zA[Q];return f[l]||(Q.length===1?f[l]=function(){return eA(Q,l)}:Q.length===2?f[l]=function(L){return eA(Q,l,[L])}:f[l]=function(){return eA(Q,l,Array.prototype.slice.call(arguments))}),f[l]}}function ae(l,Q,f){return f?+(l>>>0)+4294967296*+(Q>>>0):+(l>>>0)+4294967296*+(0|Q)}function eA(l,Q,f){return f&&f.length?B["dynCall_"+l].apply(null,[Q].concat(f)):B["dynCall_"+l].call(null,Q)}var EA=0,_A=0;function UA(l,Q){l||Ie("Assertion failed: "+Q)}function Ce(l){var Q=B["_"+l];return UA(Q,"Cannot call unknown function "+l+", make sure it is exported"),Q}var he={stackSave:function(){rn()},stackRestore:function(){on()},arrayToC:function(l){var Q,f,D=Dt(l.length);return Q=l,f=D,s.set(Q,f),D},stringToC:function(l){var Q=0;if(l!=null&&l!==0){var f=(l.length<<2)+1;Q=Dt(f),et(l,Q,f)}return Q}},$e={string:he.stringToC,array:he.arrayToC};function Le(l,Q,f,D,L){var $=Ce(l),sA=[],H=0;if(D)for(var DA=0;DA<D.length;DA++){var lA=$e[f[DA]];lA?(H===0&&(H=rn()),sA[DA]=lA(D[DA])):sA[DA]=D[DA]}var dA,BA=$.apply(null,sA);return BA=(dA=BA,Q==="string"?le(dA):Q==="boolean"?!!dA:dA),H!==0&&on(H),BA}function At(l,Q,f,D){switch((f=f||"i8").charAt(f.length-1)==="*"&&(f="i32"),f){case"i1":case"i8":s[l>>0]=Q;break;case"i16":r[l>>1]=Q;break;case"i32":o[l>>2]=Q;break;case"i64":tempI64=[Q>>>0,+va(tempDouble=Q)>=1?tempDouble>0?(0|Na(+ls(tempDouble/4294967296),4294967295))>>>0:~~+La((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0],o[l>>2]=tempI64[0],o[l+4>>2]=tempI64[1];break;case"float":c[l>>2]=Q;break;case"double":h[l>>3]=Q;break;default:Ie("invalid type for setValue: "+f)}}function jt(l,Q,f){switch((Q=Q||"i8").charAt(Q.length-1)==="*"&&(Q="i32"),Q){case"i1":case"i8":return s[l>>0];case"i16":return r[l>>1];case"i32":case"i64":return o[l>>2];case"float":return c[l>>2];case"double":return h[l>>3];default:Ie("invalid type for getValue: "+Q)}return null}function $t(l,Q,f,D){typeof l=="number"?($=!0,sA=l):($=!1,sA=l.length);var L=typeof Q=="string"?Q:null;if(H=f==4?D:[typeof kt=="function"?kt:V,Dt,V,F][f===void 0?2:f](Math.max(sA,L?1:Q.length)),$){for(D=H,UA((3&H)==0),DA=H+(-4&sA);D<DA;D+=4)o[D>>2]=0;for(DA=H+sA;D<DA;)s[D++>>0]=0;return H}if(L==="i8")return l.subarray||l.slice?a.set(l,H):a.set(new Uint8Array(l),H),H;for(var $,sA,H,DA,lA,dA,BA,_=0;_<sA;){var bA=l[_];if((lA=L||Q[_])===0){_++;continue}lA=="i64"&&(lA="i32"),At(H+_,bA,lA),BA!==lA&&(dA=X(lA),BA=lA),_+=dA}return H}function Ne(l){return u?sn?kt(l):F(l):V(l)}function le(l,Q){if(Q===0||!l)return"";for(var f,D,L,$=0,sA=0;$|=D=a[l+sA>>0],(D!=0||Q)&&(sA++,!Q||sA!=Q););Q||(Q=sA);var H="";if($<128){for(;Q>0;)L=String.fromCharCode.apply(String,a.subarray(l,l+Math.min(Q,1024))),H=H?H+L:L,l+=1024,Q-=1024;return H}return f=l,(function(lA,dA){for(var BA=dA;lA[BA];)++BA;if(BA-dA>16&&lA.subarray&&ut)return ut.decode(lA.subarray(dA,BA));for(var _,bA,PA,JA,qA,ke,KA="";;){if(!(_=lA[dA++]))return KA;if(!(128&_)){KA+=String.fromCharCode(_);continue}if(bA=63&lA[dA++],(224&_)==192){KA+=String.fromCharCode((31&_)<<6|bA);continue}if(PA=63&lA[dA++],(240&_)==224?_=(15&_)<<12|bA<<6|PA:(JA=63&lA[dA++],(248&_)==240?_=(7&_)<<18|bA<<12|PA<<6|JA:(qA=63&lA[dA++],_=(252&_)==248?(3&_)<<24|bA<<18|PA<<12|JA<<6|qA:(1&_)<<30|bA<<24|PA<<18|JA<<12|qA<<6|(ke=63&lA[dA++]))),_<65536)KA+=String.fromCharCode(_);else{var rt=_-65536;KA+=String.fromCharCode(55296|rt>>10,56320|1023&rt)}}})(a,f)}function TA(l){for(var Q="";;){var f=s[l++>>0];if(!f)return Q;Q+=String.fromCharCode(f)}}function An(l,Q){return(function(D,L,$){for(var sA=0;sA<D.length;++sA)s[L++>>0]=D.charCodeAt(sA);$||(s[L>>0]=0)})(l,Q,!1)}var ut=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function Ue(l,Q,f,D){if(!(D>0))return 0;for(var L=f,$=f+D-1,sA=0;sA<l.length;++sA){var H=l.charCodeAt(sA);if(H>=55296&&H<=57343&&(H=65536+((1023&H)<<10)|1023&l.charCodeAt(++sA)),H<=127){if(f>=$)break;Q[f++]=H}else if(H<=2047){if(f+1>=$)break;Q[f++]=192|H>>6,Q[f++]=128|63&H}else if(H<=65535){if(f+2>=$)break;Q[f++]=224|H>>12,Q[f++]=128|H>>6&63,Q[f++]=128|63&H}else if(H<=2097151){if(f+3>=$)break;Q[f++]=240|H>>18,Q[f++]=128|H>>12&63,Q[f++]=128|H>>6&63,Q[f++]=128|63&H}else if(H<=67108863){if(f+4>=$)break;Q[f++]=248|H>>24,Q[f++]=128|H>>18&63,Q[f++]=128|H>>12&63,Q[f++]=128|H>>6&63,Q[f++]=128|63&H}else{if(f+5>=$)break;Q[f++]=252|H>>30,Q[f++]=128|H>>24&63,Q[f++]=128|H>>18&63,Q[f++]=128|H>>12&63,Q[f++]=128|H>>6&63,Q[f++]=128|63&H}}return Q[f]=0,f-L}function et(l,Q,f){return Ue(l,a,Q,f)}function GA(l){for(var Q=0,f=0;f<l.length;++f){var D=l.charCodeAt(f);D>=55296&&D<=57343&&(D=65536+((1023&D)<<10)|1023&l.charCodeAt(++f)),D<=127?++Q:D<=2047?Q+=2:D<=65535?Q+=3:D<=2097151?Q+=4:D<=67108863?Q+=5:Q+=6}return Q}var oe=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function tt(l){for(var Q=l,f=Q>>1;r[f];)++f;if((Q=f<<1)-l>32&&oe)return oe.decode(a.subarray(l,Q));for(var D=0,L="";;){var $=r[l+2*D>>1];if($==0)return L;++D,L+=String.fromCharCode($)}}function en(l,Q,f){if(f===void 0&&(f=2147483647),f<2)return 0;for(var D=Q,L=(f-=2)<2*l.length?f/2:l.length,$=0;$<L;++$){var sA=l.charCodeAt($);r[Q>>1]=sA,Q+=2}return r[Q>>1]=0,Q-D}function re(l){return 2*l.length}function ft(l){for(var Q=0,f="";;){var D=o[l+4*Q>>2];if(D==0)return f;if(++Q,D>=65536){var L=D-65536;f+=String.fromCharCode(55296|L>>10,56320|1023&L)}else f+=String.fromCharCode(D)}}function mt(l,Q,f){if(f===void 0&&(f=2147483647),f<4)return 0;for(var D=Q,L=D+f-4,$=0;$<l.length;++$){var sA=l.charCodeAt($);if(sA>=55296&&sA<=57343&&(sA=65536+((1023&sA)<<10)|1023&l.charCodeAt(++$)),o[Q>>2]=sA,(Q+=4)+4>L)break}return o[Q>>2]=0,Q-D}function cs(l){for(var Q=0,f=0;f<l.length;++f){var D=l.charCodeAt(f);D>=55296&&D<=57343&&++f,Q+=4}return Q}function Es(l){var Q=GA(l)+1,f=kt(Q);return f&&Ue(l,s,f,Q),f}function St(l){var Q=GA(l)+1,f=Dt(Q);return Ue(l,s,f,Q),f}function Se(l){return l}function tn(){var l,Q=(function(){var D=Error();if(!D.stack){try{throw Error(0)}catch(L){D=L}if(!D.stack)return"(no stack trace available)"}return D.stack.toString()})();return B.extraStackTrace&&(Q+=`
2
+ `+B.extraStackTrace()),(l=Q).replace(/__Z[\w\d_]+/g,function(f){var D,L=D=f;return f===L?f:f+" ["+L+"]"})}function ie(l,Q){return l%Q>0&&(l+=Q-l%Q),l}function Te(l){B.buffer=n=l}function pe(){B.HEAP8=s=new Int8Array(n),B.HEAP16=r=new Int16Array(n),B.HEAP32=o=new Int32Array(n),B.HEAPU8=a=new Uint8Array(n),B.HEAPU16=i=new Uint16Array(n),B.HEAPU32=g=new Uint32Array(n),B.HEAPF32=c=new Float32Array(n),B.HEAPF64=h=new Float64Array(n)}function nt(){var l=B.usingWasm?65536:16777216,Q=2147483648-l;if(o[M>>2]>Q)return!1;var f=yA;for(yA=Math.max(yA,16777216);yA<o[M>>2];)yA=yA<=536870912?ie(2*yA,l):Math.min(ie((3*yA+2147483648)/4,l),Q);var D=B.reallocBuffer(yA);return D&&D.byteLength==yA?(Te(D),pe(),!0):(yA=f,!1)}C=d=S=m=k=w=M=0,u=!1,B.reallocBuffer||(B.reallocBuffer=function(l){try{if(ArrayBuffer.transfer)Q=ArrayBuffer.transfer(n,l);else{var Q,f=s;Q=new ArrayBuffer(l),new Int8Array(Q).set(f)}}catch{return!1}return!!Ua(Q)&&Q});try{(P=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get))(new ArrayBuffer(4))}catch{P=function(Q){return Q.byteLength}}var xe=B.TOTAL_STACK||5242880,yA=B.TOTAL_MEMORY||16777216;function pt(){return yA}function de(l){for(;l.length>0;){var Q=l.shift();if(typeof Q=="function"){Q();continue}var f=Q.func;typeof f=="number"?Q.arg===void 0?B.dynCall_v(f):B.dynCall_vi(f,Q.arg):f(Q.arg===void 0?null:Q.arg)}}yA<xe&&gA("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+yA+"! (TOTAL_STACK="+xe+")"),B.buffer?n=B.buffer:(typeof WebAssembly=="object"&&typeof WebAssembly.Memory=="function"?(B.wasmMemory=new WebAssembly.Memory({initial:yA/65536}),n=B.wasmMemory.buffer):n=new ArrayBuffer(yA),B.buffer=n),pe();var st=[],nn=[],Bs=[],Cs=[],hs=[],sn=!1,Ra=!1;function Ma(l){st.unshift(l)}function Hr(l){nn.unshift(l)}function Yr(l){Bs.unshift(l)}function Pr(l){Cs.unshift(l)}function ba(l){hs.unshift(l)}function Jr(l,Q,f){var D,L;tA("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!"),f&&(D=s[L=Q+GA(l)]),et(l,Q,1/0),f&&(s[L]=D)}function qr(l,Q,f){return l>=0?l:Q<=32?2*Math.abs(1<<Q-1)+l:Math.pow(2,Q)+l}function Kr(l,Q,f){if(l<=0)return l;var D=Q<=32?Math.abs(1<<Q-1):Math.pow(2,Q-1);return l>=D&&(Q<=32||l>D)&&(l=-2*D+l),l}var va=Math.abs,La=Math.ceil,ls=Math.floor,Na=Math.min,ye=0,an=null,at=null;function Or(l){return l}B.preloadedImages={},B.preloadedAudios={};var ds="data:application/octet-stream;base64,";function yt(l){return String.prototype.startsWith?l.startsWith(ds):l.indexOf(ds)===0}(function(){var Q="main.wast",f="main.wasm",D="main.temp.asm";yt(Q)||(Q=Z(Q)),yt(f)||(f=Z(f)),yt(D)||(D=Z(D));var L={global:null,env:null,asm2wasm:oA,parent:B},$=null;function sA(BA){return BA}function H(){try{if(B.wasmBinary)return new Uint8Array(B.wasmBinary);if(B.readBinary)return B.readBinary(f);throw"both async and sync fetching of the wasm failed"}catch(BA){Ie(BA)}}B.asmPreload=B.asm;var DA=B.reallocBuffer,lA=function(BA){BA=ie(BA,B.usingWasm?65536:16777216);var _=B.buffer.byteLength;if(B.usingWasm)try{var bA=B.wasmMemory.grow((BA-_)/65536);return bA!==-1?B.buffer=B.wasmMemory.buffer:null}catch{return null}};B.reallocBuffer=function(BA){return dA==="asmjs"?DA(BA):lA(BA)};var dA="";B.asm=function(BA,_,bA){var PA;if(!(_=PA=_).table){var JA,qA=B.wasmTableSize;qA===void 0&&(qA=1024);var ke=B.wasmMaxTableSize;typeof WebAssembly=="object"&&typeof WebAssembly.Table=="function"?ke!==void 0?_.table=new WebAssembly.Table({initial:qA,maximum:ke,element:"anyfunc"}):_.table=new WebAssembly.Table({initial:qA,element:"anyfunc"}):_.table=Array(qA),B.wasmTable=_.table}return _.memoryBase||(_.memoryBase=B.STATIC_BASE),_.tableBase||(_.tableBase=0),JA=(function(rt,He,gn){if(typeof WebAssembly!="object")return gA("no native wasm support detected"),!1;if(!(B.wasmMemory instanceof WebAssembly.Memory))return gA("no native wasm Memory in use"),!1;function wt(jA,$A){if(($=jA.exports).memory){var it,cn,fs;it=$.memory,cn=B.buffer,it.byteLength<cn.byteLength&&gA("the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here"),fs=new Int8Array(cn),new Int8Array(it).set(fs),Te(it),pe()}B.asm=$,B.usingWasm=!0,(function(jr){if(ye--,B.monitorRunDependencies&&B.monitorRunDependencies(ye),ye==0&&(an!==null&&(clearInterval(an),an=null),at)){var Ta=at;at=null,Ta()}})("wasm-instantiate")}if(He.memory=B.wasmMemory,L.global={NaN:NaN,Infinity:1/0},L["global.Math"]=Math,L.env=He,ye++,B.monitorRunDependencies&&B.monitorRunDependencies(ye),B.instantiateWasm)try{return B.instantiateWasm(L,wt)}catch(jA){return gA("Module.instantiateWasm callback failed with error: "+jA),!1}function Ye(jA){wt(jA.instance,jA.module)}function us(jA){(!B.wasmBinary&&(J||Y)&&typeof fetch=="function"?fetch(f,{credentials:"same-origin"}).then(function($A){if(!$A.ok)throw"failed to load wasm binary file at '"+f+"'";return $A.arrayBuffer()}).catch(function(){return H()}):new Promise(function($A,it){$A(H())})).then(function($A){return WebAssembly.instantiate($A,L)}).then(jA).catch(function($A){gA("failed to asynchronously prepare wasm: "+$A),Ie($A)})}return B.wasmBinary||typeof WebAssembly.instantiateStreaming!="function"||yt(f)||typeof fetch!="function"?us(Ye):WebAssembly.instantiateStreaming(fetch(f,{credentials:"same-origin"}),L).then(Ye).catch(function(jA){gA("wasm streaming compile failed: "+jA),gA("falling back to ArrayBuffer instantiation"),us(Ye)}),{}})(BA,_,bA),UA(JA,"no binaryen method succeeded."),JA},B.asm})(),d=(C=1024)+4816,nn.push(),B.STATIC_BASE=C,B.STATIC_BUMP=4816;var xA=d;function Vr(l){s[xA]=s[l],s[xA+1]=s[l+1],s[xA+2]=s[l+2],s[xA+3]=s[l+3]}function Xr(l){s[xA]=s[l],s[xA+1]=s[l+1],s[xA+2]=s[l+2],s[xA+3]=s[l+3],s[xA+4]=s[l+4],s[xA+5]=s[l+5],s[xA+6]=s[l+6],s[xA+7]=s[l+7]}function Zr(l,Q,f){var D=f>0?f:GA(l)+1,L=Array(D),$=Ue(l,L,0,L.length);return Q&&(L.length=$),L}function Wr(l){for(var Q=[],f=0;f<l.length;f++){var D=l[f];D>255&&(D&=255),Q.push(String.fromCharCode(D))}return Q.join("")}d+=16,M=V(4),k=(S=m=b(d))+xe,w=b(k),o[M>>2]=w,u=!0,B.wasmTableSize=4,B.wasmMaxTableSize=4,B.asmGlobalArg={},B.asmLibraryArg={abort:Ie,assert:UA,enlargeMemory:nt,getTotalMemory:pt,abortOnCannotGrowMemory:function(){Ie("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+yA+", (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(Q,f,D){var L=rn();try{return B.dynCall_iii(Q,f,D)}catch($){if(on(L),typeof $!="number"&&$!=="longjmp")throw $;B.setThrew(1,0)}},___assert_fail:function(Q,f,D,L){Ie("Assertion failed: "+le(Q)+", at: "+[f?le(f):"unknown filename",D,L?le(L):"unknown function"])},___setErrNo:function(Q){return B.___errno_location&&(o[B.___errno_location()>>2]=Q),Q},_abort:function(){B.abort()},_emscripten_memcpy_big:function(Q,f,D){return a.set(a.subarray(f,f+D),Q),Q},_llvm_floor_f64:ls,DYNAMICTOP_PTR:M,tempDoublePtr:xA,ABORT:EA,STACKTOP:m,STACK_MAX:k};var Qs=B.asm(B.asmGlobalArg,B.asmLibraryArg,n);B.asm=Qs,B.___errno_location=function(){return B.asm.___errno_location.apply(null,arguments)};var Ua=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 kt=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 Dt=B.stackAlloc=function(){return B.asm.stackAlloc.apply(null,arguments)},on=B.stackRestore=function(){return B.asm.stackRestore.apply(null,arguments)},rn=B.stackSave=function(){return B.asm.stackSave.apply(null,arguments)};function ot(l){this.name="ExitStatus",this.message="Program terminated with exit("+l+")",this.status=l}function In(l){l=l||B.arguments,!(ye>0)&&((function(){if(B.preRun)for(typeof B.preRun=="function"&&(B.preRun=[B.preRun]);B.preRun.length;)Ma(B.preRun.shift());de(st)})(),!(ye>0)&&(B.calledRun||(B.setStatus?(B.setStatus("Running..."),setTimeout(function(){setTimeout(function(){B.setStatus("")},1),Q()},1)):Q())));function Q(){!B.calledRun&&(B.calledRun=!0,EA||(sn||(sn=!0,de(nn)),de(Bs),B.onRuntimeInitialized&&B.onRuntimeInitialized(),(function(){if(B.postRun)for(typeof B.postRun=="function"&&(B.postRun=[B.postRun]);B.postRun.length;)ba(B.postRun.shift());de(hs)})()))}}function zr(l,Q){(!Q||!B.noExitRuntime||l!==0)&&(B.noExitRuntime||(EA=!0,_A=l,m=x,de(Cs),Ra=!0,B.onExit&&B.onExit(l)),B.quit(l,new ot(l)))}function Ie(l){throw B.onAbort&&B.onAbort(l),l!==void 0?(CA(l),gA(l),l=JSON.stringify(l)):l="",EA=!0,_A=1,"abort("+l+"). Build with -s ASSERTIONS=1 for more info."}if(B.dynCall_iii=function(){return B.asm.dynCall_iii.apply(null,arguments)},B.asm=Qs,B.ccall=Le,B.cwrap=function(Q,f,D,L){var $=(D=D||[]).every(function(sA){return sA==="number"});return f!=="string"&&$&&!L?Ce(Q):function(){return Le(Q,f,D,arguments,L)}},ot.prototype=Error(),ot.prototype.constructor=ot,at=function l(){B.calledRun||In(),B.calledRun||(at=l)},B.run=In,B.abort=Ie,B.preInit)for(typeof B.preInit=="function"&&(B.preInit=[B.preInit]);B.preInit.length>0;)B.preInit.pop()();B.noExitRuntime=!0,In(),B.onRuntimeInitialized=()=>{ks=!0,na()},lt.decode=function(l){return(function(f){if(!ks)throw Error("SF3 decoder has not been initialized yet. Did you await synth.isReady?");var D={};function L(He){return new Int32Array(B.HEAPU8.buffer,He,1)[0]}function $(He,gn){var wt=new ArrayBuffer(gn*Float32Array.BYTES_PER_ELEMENT),Ye=new Float32Array(wt);return Ye.set(new Float32Array(B.HEAPU8.buffer,He,gn)),Ye}D.open=B.cwrap("stb_vorbis_js_open","number",[]),D.close=B.cwrap("stb_vorbis_js_close","void",["number"]),D.channels=B.cwrap("stb_vorbis_js_channels","number",["number"]),D.sampleRate=B.cwrap("stb_vorbis_js_sample_rate","number",["number"]),D.decode=B.cwrap("stb_vorbis_js_decode","number",["number","number","number","number","number"]);var sA,H,DA,lA,dA=D.open(),BA=(sA=f,H=f.byteLength,DA=B._malloc(H),(lA=new Uint8Array(B.HEAPU8.buffer,DA,H)).set(new Uint8Array(sA,0,H)),lA),_=B._malloc(4),bA=B._malloc(4),PA=D.decode(dA,BA.byteOffset,BA.byteLength,_,bA);if(B._free(BA.byteOffset),PA<0)throw D.close(dA),B._free(_),Error("stbvorbis decode failed: "+PA);for(var JA=D.channels(dA),qA=Array(JA),ke=new Int32Array(B.HEAPU32.buffer,L(_),JA),KA=0;KA<JA;KA++)qA[KA]=$(ke[KA],PA),B._free(ke[KA]);var rt=D.sampleRate(dA);return D.close(dA),B._free(L(_)),B._free(_),{data:qA,sampleRate:rt,eof:!0,error:null}})(l)}})();var qt=lt,as=-15e3,ko=15e3,bn=new Float32Array(ko-as+1);for(let e=0;e<bn.length;e++){let A=as+e;bn[e]=Math.pow(2,A/1200)}function Qe(e){return e<=-32767?0:bn[e-as]}var Ht=-2e4,sa=16500,vn=new Float32Array(sa-Ht+1);for(let e=0;e<vn.length;e++){let A=Ht+e;vn[e]=440*Math.pow(2,(A-6900)/1200)}function Ln(e){return e<Ht||e>sa?440*Math.pow(2,(e-6900)/1200):vn[~~e-Ht]}var os=-1660,Do=1600,Nn=new Float32Array((Do-os)*100+1);for(let e=0;e<Nn.length;e++){let A=(os*100+e)/100;Nn[e]=Math.pow(10,-A/20)}function Ae(e){return Nn[Math.floor((e-os)*100)]}var wo=.01,HA=100,hn=90,Fo=15e-6,Re=class aa{sampleRate;currentAttenuationDb=HA;state=0;attenuation=0;attenuationTargetGain=0;currentSampleTime=0;releaseStartDb=HA;releaseStartTimeSamples=0;currentReleaseGain=1;attackDuration=0;decayDuration=0;releaseDuration=0;attenuationTarget=0;sustainDbRelative=0;delayEnd=0;attackEnd=0;holdEnd=0;decayEnd=0;canEndOnSilentSustain;constructor(A,t){this.sampleRate=A,this.canEndOnSilentSustain=t/10>=hn}static startRelease(A){A.volumeEnvelope.releaseStartTimeSamples=A.volumeEnvelope.currentSampleTime,A.volumeEnvelope.currentReleaseGain=Ae(A.volumeEnvelope.currentAttenuationDb),aa.recalculate(A)}static recalculate(A){let t=A.volumeEnvelope,n=g=>Math.max(0,Math.floor(Qe(g)*t.sampleRate));t.attenuationTarget=Math.max(0,Math.min(A.modulatedGenerators[I.initialAttenuation],1440))/10,t.attenuationTargetGain=Ae(t.attenuationTarget),t.sustainDbRelative=Math.min(HA,A.modulatedGenerators[I.sustainVolEnv]/10);let s=Math.min(HA,t.sustainDbRelative);t.attackDuration=n(A.modulatedGenerators[I.attackVolEnv]);let a=A.modulatedGenerators[I.decayVolEnv],r=(60-A.targetKey)*A.modulatedGenerators[I.keyNumToVolEnvDecay],i=s/HA;t.decayDuration=n(a+r)*i,t.releaseDuration=n(Math.max(-7200,A.modulatedGenerators[I.releaseVolEnv])),t.delayEnd=n(A.modulatedGenerators[I.delayVolEnv]),t.attackEnd=t.attackDuration+t.delayEnd;let o=(60-A.targetKey)*A.modulatedGenerators[I.keyNumToVolEnvHold];if(t.holdEnd=n(A.modulatedGenerators[I.holdVolEnv]+o)+t.attackEnd,t.decayEnd=t.decayDuration+t.holdEnd,t.state===0&&t.attackEnd===0&&(t.state=2),A.isInRelease){let g=Math.max(0,Math.min(HA,t.sustainDbRelative)),c=g/HA;switch(t.decayDuration=n(a+r)*c,t.state){case 0:t.releaseStartDb=HA;break;case 1:{let C=1-(t.attackEnd-t.releaseStartTimeSamples)/t.attackDuration;t.releaseStartDb=20*Math.log10(C)*-1;break}case 2:t.releaseStartDb=0;break;case 3:t.releaseStartDb=(1-(t.decayEnd-t.releaseStartTimeSamples)/t.decayDuration)*g;break;case 4:t.releaseStartDb=g;break}t.releaseStartDb=Math.max(0,Math.min(t.releaseStartDb,HA)),t.releaseStartDb>=hn&&(A.finished=!0),t.currentReleaseGain=Ae(t.releaseStartDb);let h=(HA-t.releaseStartDb)/HA;t.releaseDuration*=h}}static apply(A,t,n,s){let a=A.volumeEnvelope,r=n/10,i=s;if(A.isInRelease){let g=a.currentSampleTime-a.releaseStartTimeSamples;if(g>=a.releaseDuration){for(let h=0;h<t.length;h++)t[h]=0;A.finished=!0;return}let c=HA-a.releaseStartDb;for(let h=0;h<t.length;h++){a.attenuation+=(a.attenuationTargetGain-a.attenuation)*i;let C=g/a.releaseDuration*c+a.releaseStartDb;a.currentReleaseGain=a.attenuation*Ae(C+r),t[h]*=a.currentReleaseGain,a.currentSampleTime++,g++}a.currentReleaseGain<=Fo&&(A.finished=!0);return}let o=0;switch(a.state){case 0:for(;a.currentSampleTime<a.delayEnd;)if(a.currentAttenuationDb=HA,t[o]=0,a.currentSampleTime++,++o>=t.length)return;a.state++;case 1:for(;a.currentSampleTime<a.attackEnd;){a.attenuation+=(a.attenuationTargetGain-a.attenuation)*i;let g=1-(a.attackEnd-a.currentSampleTime)/a.attackDuration;if(t[o]*=g*a.attenuation*Ae(r),a.currentAttenuationDb=0,a.currentSampleTime++,++o>=t.length)return}a.state++;case 2:for(;a.currentSampleTime<a.holdEnd;)if(a.attenuation+=(a.attenuationTargetGain-a.attenuation)*i,t[o]*=a.attenuation*Ae(r),a.currentAttenuationDb=0,a.currentSampleTime++,++o>=t.length)return;a.state++;case 3:for(;a.currentSampleTime<a.decayEnd;)if(a.attenuation+=(a.attenuationTargetGain-a.attenuation)*i,a.currentAttenuationDb=(1-(a.decayEnd-a.currentSampleTime)/a.decayDuration)*a.sustainDbRelative,t[o]*=a.attenuation*Ae(a.currentAttenuationDb+r),a.currentSampleTime++,++o>=t.length)return;a.state++;case 4:for(a.canEndOnSilentSustain&&a.sustainDbRelative>=hn&&(A.finished=!0);;)if(a.attenuation+=(a.attenuationTargetGain-a.attenuation)*i,t[o]*=a.attenuation*Ae(a.sustainDbRelative+r),a.currentAttenuationDb=a.sustainDbRelative,a.currentSampleTime++,++o>=t.length)return}}};function Go(e,A){switch(this.privateProps.masterParameters[e]=A,e){case"masterPan":{let t=A;t=t/2+.5,this.privateProps.panLeft=1-t,this.privateProps.panRight=t;break}case"masterGain":break;case"voiceCap":break;case"interpolationType":break;case"midiSystem":break;case"monophonicRetriggerMode":break;case"transposition":{let t=A;this.privateProps.masterParameters.transposition=0;for(let n of this.midiChannels)n.transposeChannel(t);this.privateProps.masterParameters.transposition=t}}this.callEvent("masterParameterChange",{parameter:e,value:A})}function Ro(e){return this.privateProps.masterParameters[e]}function Mo(){return{...this.privateProps.masterParameters}}function Ge(e,A){return(e>>A&1)>0}function ln(e){return e?1:0}var LA=16384,Yt=Object.keys(QA).length,oa=4,ce=new Float32Array(LA+1),Me=new Float32Array(LA+1);ce[0]=0;ce[ce.length-1]=1;Me[0]=0;Me[Me.length-1]=1;for(let e=1;e<LA-1;e++){let A=-.4166666666666667*Math.log(e/(ce.length-1))/Math.LN10;Me[e]=1-A,ce[ce.length-1-e]=A}function ra(e,A,t){let n=!!(e&2);switch(!!(e&1)&&(t=1-t),A){case QA.linear:return n?t*2-1:t;case QA.switch:return t=t>.5?1:0,n?t*2-1:t;case QA.concave:return n?(t=t*2-1,t<0?-ce[~~(t*-LA)]:ce[~~(t*LA)]):ce[~~(t*LA)];case QA.convex:return n?(t=t*2-1,t<0?-Me[~~(t*-LA)]:Me[~~(t*LA)]):Me[~~(t*LA)]}}var XA=class Un{isBipolar;isNegative;index;isCC;curveType;constructor(A=AA.noController,t=QA.linear,n=!1,s=!1,a=!1){this.isBipolar=s,this.isNegative=a,this.index=A,this.isCC=n,this.curveType=t}get sourceName(){return this.isCC?Object.keys(p).find(A=>p[A]===this.index)??this.index.toString():Object.keys(AA).find(A=>AA[A]===this.index)??this.index.toString()}get curveTypeName(){return Object.keys(QA).find(A=>QA[A]===this.curveType)??this.curveType.toString()}static fromSourceEnum(A){let t=Ge(A,9),n=Ge(A,8),s=Ge(A,7),a=A&127,r=A>>10&3;return new Un(a,r,s,t,n)}static copyFrom(A){return new Un(A.index,A.curveType,A.isCC,A.isBipolar,A.isNegative)}toString(){return`${this.sourceName} ${this.curveTypeName} ${this.isBipolar?"bipolar":"unipolar"} ${this.isNegative?"negative":"positive"}`}toSourceEnum(){return this.curveType<<10|ln(this.isBipolar)<<9|ln(this.isNegative)<<8|ln(this.isCC)<<7|this.index}isIdentical(A){return this.index===A.index&&this.isNegative===A.isNegative&&this.isCC===A.isCC&&this.isBipolar===A.isBipolar&&this.curveType===A.curveType}getValue(A,t){let n;if(this.isCC)n=A[this.index];else switch(this.index){case AA.noController:n=16383;break;case AA.noteOnKeyNum:n=t.midiNote<<7;break;case AA.noteOnVelocity:n=t.velocity<<7;break;case AA.polyPressure:n=t.pressure<<7;break;default:n=A[this.index+SA];break}let s=(this.isBipolar?2:0)|(this.isNegative?1:0);return ia[LA*(this.curveType*Yt+s)+n]}},ia=new Float32Array(LA*oa*Yt);for(let e=0;e<Yt;e++)for(let A=0;A<oa;A++){let t=LA*(e*Yt+A);for(let n=0;n<LA;n++)ia[t+n]=ra(A,e,n/LA)}var Ct=10;function ge(e,A,t,n,s){return new XA(s,e,n,A,t).toSourceEnum()}var Ia=ge(QA.linear,!0,!1,!0,p.filterResonance),cA=class Tn{currentValue=0;destination=I.initialAttenuation;transformAmount=0;transformType=0;isEffectModulator=!1;isDefaultResonantModulator=!1;primarySource;secondarySource;constructor(A=new XA,t=new XA,n=I.INVALID,s=0,a=0,r=!1,i=!1){this.primarySource=A,this.secondarySource=t,this.destination=n,this.transformAmount=s,this.transformType=a,this.isEffectModulator=r,this.isDefaultResonantModulator=i}get destinationName(){return Object.keys(I).find(A=>I[A]===this.destination)}static isIdentical(A,t,n=!1){return A.primarySource.isIdentical(t.primarySource)&&A.secondarySource.isIdentical(t.secondarySource)&&A.destination===t.destination&&A.transformType===t.transformType&&(!n||A.transformAmount===t.transformAmount)}static copyFrom(A){return new Tn(XA.copyFrom(A.primarySource),XA.copyFrom(A.secondarySource),A.destination,A.transformAmount,A.transformType,A.isEffectModulator,A.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(A,t){W(A,this.primarySource.toSourceEnum()),W(A,this.destination),W(A,this.transformAmount),W(A,this.secondarySource.toSourceEnum()),W(A,this.transformType),t&&t.mod++}sumTransform(A){let t=Nn.copyFrom(this);return t.transformAmount+=A.transformAmount,t}},mA=class extends cA{constructor(e,A,t,n,s){let a=(e===219||e===221)&&A===0&&(t===I.reverbEffectsSend||t===I.chorusEffectsSend),o=e===Ia&&A===0&&t===I.initialFilterQ;super(XA.fromSourceEnum(e),XA.fromSourceEnum(A),t,n,s,a,o),this.destination>lr&&(this.destination=I.INVALID)}},dn=960,Qn=QA.concave,Mr=[new mA(ge(Qn,!1,!0,!1,AA.noteOnVelocity),0,I.initialAttenuation,dn,0),new mA(129,0,I.vibLfoToPitch,50,0),new mA(ge(Qn,!1,!0,!0,p.mainVolume),0,I.initialAttenuation,dn,0),new mA(13,0,I.vibLfoToPitch,50,0),new mA(526,16,I.fineTune,12700,0),new mA(650,0,I.pan,500,0),new mA(ge(Qn,!1,!0,!0,p.expressionController),0,I.initialAttenuation,dn,0),new mA(219,0,I.reverbEffectsSend,200,0),new mA(221,0,I.chorusEffectsSend,200,0)],br=[new mA(ge(QA.linear,!1,!1,!1,AA.polyPressure),0,I.vibLfoToPitch,50,0),new mA(ge(QA.linear,!1,!1,!0,p.tremoloDepth),0,I.modLfoToVolume,24,0),new mA(ge(QA.convex,!0,!1,!0,p.attackTime),0,I.attackVolEnv,6e3,0),new mA(ge(QA.linear,!0,!1,!0,p.releaseTime),0,I.releaseVolEnv,3600,0),new mA(ge(QA.linear,!0,!1,!0,p.brightness),0,I.initialFilterFc,6e3,0),new mA(Ia,0,I.initialFilterQ,250,0)],ga=Mr.concat(br),Ds=4,FA=class{generatorType;generatorValue=0;constructor(e,A,t=!0){if(this.generatorType=e,A===void 0)throw new Error("No value provided.");if(this.generatorValue=Math.round(A),t){let n=T[e];n!==void 0&&(this.generatorValue=Math.max(n.min,Math.min(n.max,this.generatorValue)))}}write(e){W(e,this.generatorType),W(e,this.generatorValue)}toString(){return`${Object.keys(I).find(e=>I[e]===this.generatorType)}: ${this.generatorValue}`}};function vr(e,A,t){let n=T[e]||{min:0,max:32768,def:0},s=A.find(r=>r.generatorType===e),a=0;s&&(a=s.generatorValue);let o=t.find(r=>r.generatorType===e),i=n.def;return o&&(i=o.generatorValue),Math.max(-32767,Math.min(32767,i+a))}var Lr=4,Kt=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 e=this.getGenerator(I.coarseTune,0),A=this.getGenerator(I.fineTune,0);return e*100+A}set fineTuning(e){let A=Math.trunc(e/100),t=e%100;this.setGenerator(I.coarseTune,A),this.setGenerator(I.fineTune,t)}addToGenerator(e,A,t=!0){let n=this.getGenerator(e,T[e].def);this.setGenerator(e,A+n,t)}setGenerator(e,A,t=!0){switch(e){case I.sampleID:throw new Error("Use setSample()");case I.instrument:throw new Error("Use setInstrument()");case I.velRange:case I.keyRange:throw new Error("Set the range manually")}if(A===null){this.generators=this.generators.filter(s=>s.generatorType!==e);return}let n=this.generators.findIndex(s=>s.generatorType===e);n>=0?this.generators[n]=new FA(e,A,t):this.addGenerators(new FA(e,A,t))}addGenerators(...e){e.forEach(A=>{switch(A.generatorType){default:this.generators.push(A);break;case I.sampleID:case I.instrument:break;case I.velRange:this.velRange.min=A.generatorValue&127,this.velRange.max=A.generatorValue>>8&127;break;case I.keyRange:this.keyRange.min=A.generatorValue&127,this.keyRange.max=A.generatorValue>>8&127}})}addModulators(...e){this.modulators.push(...e)}getGenerator(e,A){return this.generators.find(t=>t.generatorType===e)?.generatorValue??A}copyFrom(e){this.generators=e.generators.map(A=>new FA(A.generatorType,A.generatorValue,!1)),this.modulators=e.modulators.map(cA.copyFrom.bind(cA)),this.velRange={...e.velRange},this.keyRange={...e.keyRange}}getWriteGenerators(e){let A=this.generators.filter(t=>t.generatorType!==I.sampleID&&t.generatorType!==I.instrument&&t.generatorType!==I.keyRange&&t.generatorType!==I.velRange);if(!e)throw new Error("No bank provided! ");return this.hasVelRange&&A.unshift(new FA(I.velRange,this.velRange.max<<8|Math.max(this.velRange.min,0),!1)),this.hasKeyRange&&A.unshift(new FA(I.keyRange,this.keyRange.max<<8|Math.max(this.keyRange.min,0),!1)),A}},ca=class extends Kt{},Ea=class extends Kt{parentPreset;constructor(e,A){super(),this.parentPreset=e,this._instrument=A,this._instrument.linkTo(this.parentPreset)}_instrument;get instrument(){return this._instrument}set instrument(e){this._instrument&&this._instrument.unlinkFrom(this.parentPreset),this._instrument=e,this._instrument.linkTo(this.parentPreset)}getWriteGenerators(e){let A=super.getWriteGenerators(e);if(!e)throw new Error("Instrument ID cannot be determined without the sound bank itself.");let t=e.instruments.indexOf(this.instrument);if(t<0)throw new Error(`${this.instrument.name} does not exist in ${e.soundBankInfo.name}! Cannot write instrument generator.`);return A.push(new FA(I.instrument,t,!1)),A}},Ba=class extends Kt{parentInstrument;useCount;constructor(e,A){super(),this.parentInstrument=e,this._sample=A,A.linkTo(this.parentInstrument),this.useCount=e.useCount}_sample;get sample(){return this._sample}set sample(e){this._sample&&this._sample.unlinkFrom(this.parentInstrument),this._sample=e,e.linkTo(this.parentInstrument)}getWriteGenerators(e){let A=super.getWriteGenerators(e),t=e.samples.indexOf(this.sample);if(t<0)throw new Error(`${this.sample.name} does not exist in ${e.soundBankInfo.name}! Cannot write sampleID generator.`);return A.push(new FA(I.sampleID,t,!1)),A}},Nr=22,Ur=new Set([I.velRange,I.keyRange,I.instrument,I.sampleID,I.exclusiveClass,I.endOper,I.sampleModes,I.startloopAddrsOffset,I.startloopAddrsCoarseOffset,I.endloopAddrsOffset,I.endloopAddrsCoarseOffset,I.startAddrsOffset,I.startAddrsCoarseOffset,I.endAddrOffset,I.endAddrsCoarseOffset,I.initialAttenuation,I.fineTune,I.coarseTune,I.keyNumToVolEnvHold,I.keyNumToVolEnvDecay,I.keyNumToModEnvHold,I.keyNumToModEnvDecay]),lt=class{name="";zones=[];globalZone=new ca;linkedTo=[];get useCount(){return this.linkedTo.length}createZone(e){let A=new Ba(this,e);return this.zones.push(A),A}linkTo(e){this.linkedTo.push(e),this.zones.forEach(A=>A.useCount++)}unlinkFrom(e){let A=this.linkedTo.indexOf(e);if(A<0){nA(`Cannot unlink ${e.name} from ${this.name}: not linked.`);return}this.linkedTo.splice(A,1),this.zones.forEach(t=>t.useCount--)}deleteUnusedZones(){this.zones=this.zones.filter(e=>{let A=e.useCount>0;return A||e.sample.unlinkFrom(this),A})}delete(){if(this.useCount>0)throw new Error(`Cannot delete an instrument that is used by: ${this.linkedTo.map(e=>e.name).toString()}.`);this.zones.forEach(e=>e.sample.unlinkFrom(this))}deleteZone(e,A=!1){let t=this.zones[e];return t.useCount-=1,t.useCount<1||A?(t.sample.unlinkFrom(this),this.zones.splice(e,1),!0):!1}globalize(){let e=this.globalZone;for(let n=0;n<58;n++){if(Ur.has(n))continue;n=n;let s={},a=T[n]?.def||0;s[a]=0;for(let o of this.zones){let i=o.getGenerator(n,void 0);i!==void 0?s[i]===void 0?s[i]=1:s[i]++:s[a]++;let r;switch(n){default:continue;case I.decayVolEnv:r=I.keyNumToVolEnvDecay;break;case I.holdVolEnv:r=I.keyNumToVolEnvHold;break;case I.decayModEnv:r=I.keyNumToModEnvDecay;break;case I.holdModEnv:r=I.keyNumToModEnvHold}if(o.getGenerator(r,void 0)!==void 0){s={};break}}if(Object.keys(s).length>0){let i=Object.entries(s).reduce((g,E)=>g[1]<E[1]?E:g,["0",0]),r=parseInt(i[0]);r!==a&&e.setGenerator(n,r,!1),this.zones.forEach(g=>{let E=g.getGenerator(n,void 0);E!==void 0?E===r&&g.setGenerator(n,null):r!==a&&g.setGenerator(n,a)})}}let t=this.zones[0].modulators.map(n=>cA.copyFrom(n));for(let n of t){let s=!0;for(let a of this.zones){if(!s)continue;a.modulators.find(i=>cA.isIdentical(i,n))||(s=!1)}if(s){e.addModulators(cA.copyFrom(n));for(let a of this.zones){let o=a.modulators.find(i=>cA.isIdentical(i,n));o&&o.transformAmount===n.transformAmount&&a.modulators.splice(a.modulators.indexOf(o),1)}}}}write(e,A){y(`%cWriting ${this.name}...`,c.info),kA(e.pdta,this.name.substring(0,20),20),kA(e.xdta,this.name.substring(20),20),W(e.pdta,A&65535),W(e.xdta,A>>>16)}},Tr=38,We=class{parentSoundBank;name="";program=0;bankMSB=0;bankLSB=0;isGMGSDrum=!1;zones=[];globalZone;library=0;genre=0;morphology=0;constructor(e,A=new ca){this.parentSoundBank=e,this.globalZone=A}get isXGDrums(){return this.parentSoundBank.isXGBank&&fA.isXGDrums(this.bankMSB)}get isAnyDrums(){let e=this.parentSoundBank.isXGBank;return this.isGMGSDrum||e&&fA.isXGDrums(this.bankMSB)&&this.bankMSB!==126}delete(){this.zones.forEach(e=>e.instrument?.unlinkFrom(this))}deleteZone(e){this.zones[e]?.instrument?.unlinkFrom(this),this.zones.splice(e,1)}createZone(e){let A=new Ea(this,e);return this.zones.push(A),A}preload(e,A){for(let t=e;t<A+1;t++)for(let n=0;n<128;n++)this.getSynthesisData(t,n).forEach(s=>{s.sample.getAudioData()})}matches(e){return te.matches(this,e)}getSynthesisData(e,A){if(this.zones.length<1)return[];function t(d,l){return l>=d.min&&l<=d.max}function n(d,l){d.push(...l.filter(C=>!d.find(Q=>Q.generatorType===C.generatorType)))}function s(d,l){d.push(...l.filter(C=>!d.find(Q=>cA.isIdentical(C,Q))))}let a=[],o=[...this.globalZone.generators],i=[...this.globalZone.modulators],r=this.globalZone.keyRange,g=this.globalZone.velRange;return this.zones.filter(d=>t(d.hasKeyRange?d.keyRange:r,e)&&t(d.hasVelRange?d.velRange:g,A)).forEach(d=>{let l=d.instrument;if(!l||l.zones.length<1)return;let C=d.generators,Q=d.modulators,m=[...l.globalZone.generators],S=[...l.globalZone.modulators],D=l.globalZone.keyRange,w=l.globalZone.velRange;l.zones.filter(P=>t(P.hasKeyRange?P.keyRange:D,e)&&t(P.hasVelRange?P.velRange:w,A)).forEach(P=>{let x=[...P.generators],B=[...P.modulators];n(C,o),n(x,m),s(Q,i),s(B,S),s(B,this.parentSoundBank.defaultModulators);let j=[...B];for(let J of Q){let Y=j.findIndex(U=>cA.isIdentical(J,U));Y!==-1?j[Y]=j[Y].sumTransform(J):j.push(J)}P.sample&&a.push({instrumentGenerators:x,presetGenerators:C,modulators:j,sample:P.sample})})}),a}toMIDIString(){return te.toMIDIString(this)}toString(){return te.toNamedMIDIString(this)}toFlattenedInstrument(){let e=(g,E)=>{g.push(...E.filter(d=>!g.find(l=>l.generatorType===d.generatorType)))},A=(g,E)=>({min:Math.max(g.min,E.min),max:Math.min(g.max,E.max)}),t=(g,E)=>{g.push(...E.filter(d=>!g.find(l=>cA.isIdentical(d,l))))},n=new lt;n.name=this.name;let s=[],a=[],o=this.globalZone;s.push(...o.generators),a.push(...o.modulators);let i=o.keyRange,r=o.velRange;for(let g of this.zones){if(!g.instrument)throw new Error("No instrument in a preset zone.");let E=g.keyRange;g.hasKeyRange||(E=i);let d=g.velRange;g.hasVelRange||(d=r);let l=g.generators.map(x=>new FA(x.generatorType,x.generatorValue));e(l,s);let C=[...g.modulators];t(C,a);let Q=g.instrument,m=Q.zones,S=[],D=[],w=Q.globalZone;S.push(...w.generators),D.push(...w.modulators);let M=w.keyRange,P=w.velRange;for(let x of m){if(!x.sample)throw new Error("No sample in an instrument zone.");let B=x.keyRange;x.hasKeyRange||(B=M);let j=x.velRange;if(x.hasVelRange||(j=P),B=A(B,E),j=A(j,d),B.max<B.min||j.max<j.min)continue;let J=x.generators.map(Z=>new FA(Z.generatorType,Z.generatorValue));e(J,S);let Y=[...x.modulators];t(Y,D);let U=[...Y];for(let Z of C){let CA=U.findIndex(gA=>cA.isIdentical(Z,gA));CA!==-1?U[CA]=U[CA].sumTransform(Z):U.push(Z)}let K=J.map(Z=>new FA(Z.generatorType,Z.generatorValue));for(let Z of l){if(Z.generatorType===I.velRange||Z.generatorType===I.keyRange||Z.generatorType===I.instrument||Z.generatorType===I.endOper||Z.generatorType===I.sampleModes)continue;let CA=J.findIndex(gA=>gA.generatorType===Z.generatorType);if(CA!==-1){let gA=K[CA].generatorValue+Z.generatorValue;K[CA]=new FA(Z.generatorType,gA)}else{let gA=T[Z.generatorType].def+Z.generatorValue;K.push(new FA(Z.generatorType,gA))}}K=K.filter(Z=>Z.generatorType!==I.sampleID&&Z.generatorType!==I.keyRange&&Z.generatorType!==I.velRange&&Z.generatorType!==I.endOper&&Z.generatorType!==I.instrument&&Z.generatorValue!==T[Z.generatorType].def);let q=n.createZone(x.sample);q.keyRange=B,q.velRange=j,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(...K),q.addModulators(...U)}}return n}write(e,A){y(`%cWriting ${this.name}...`,c.info),kA(e.pdta,this.name.substring(0,20),20),kA(e.xdta,this.name.substring(20),20),W(e.pdta,this.program);let t=this.bankMSB;this.isGMGSDrum?t=128:this.bankMSB===0&&(t=this.bankLSB),W(e.pdta,t),e.xdta.currentIndex+=4,W(e.pdta,A&65535),W(e.xdta,A>>16),iA(e.pdta,this.library),iA(e.pdta,this.genre),iA(e.pdta,this.morphology),e.xdta.currentIndex+=12}};function ws(e,A){let t;return A?t=e.find(n=>n.isXGDrums):t=e.find(n=>n.isGMGSDrum),t||(e.find(n=>n.isAnyDrums)??e[0])}function Ca(e,A,t){if(e.length<1)throw new Error("No presets!");A.isGMGSDrum&&fA.isSystemXG(t)&&(A={...A,isGMGSDrum:!1,bankLSB:0,bankMSB:fA.getDrumBank(t)});let{isGMGSDrum:n,bankLSB:s,bankMSB:a,program:o}=A,i=fA.isSystemXG(t),r=fA.isXGDrums(a)&&i,g=e.find(C=>C.matches(A));if(g&&(!r||r&&g.isXGDrums))return g;let E=C=>{y(`%cPreset %c${te.toMIDIString(A)}%c not found. (${t}) Replaced with %c${C.toString()}`,c.warn,c.unrecognized,c.warn,c.value)};if(n){let C=e.find(Q=>Q.isGMGSDrum&&Q.program===o);return C||(C=e.find(Q=>Q.isAnyDrums&&Q.program===o),C)?(E(C),C):(C=ws(e,!1),E(C),C)}if(r){let C=e.find(Q=>Q.program===o&&Q.isXGDrums);return C||(C=e.find(Q=>Q.isAnyDrums&&Q.program===o),C)?(E(C),C):(C=ws(e,!0),E(C),C)}let d=e.filter(C=>C.program===o&&!C.isAnyDrums);if(d.length<1)return E(e[0]),e[0];if(i?g=d.find(C=>C.bankLSB===s):g=d.find(C=>C.bankMSB===a),g)return E(g),g;let l=Math.max(a,s);return g=d.find(C=>C.bankLSB===l||C.bankMSB===l),g?(E(g),g):(E(d[0]),d[0])}var xr=class extends We{constructor(e,A){super(e.parentSoundBank,e.globalZone),this.bankMSB=fA.addBankOffset(e.bankMSB,A,e.isXGDrums),this.name=e.name,this.bankLSB=e.bankLSB,this.isGMGSDrum=e.isGMGSDrum,this.program=e.program,this.genre=e.genre,this.morphology=e.morphology,this.library=e.library,this.zones=e.zones}},Hr=class{soundBankList=[];presetListChangeCallback;selectablePresetList=[];constructor(e){this.presetListChangeCallback=e}_presetList=[];get presetList(){return[...this._presetList]}get priorityOrder(){return this.soundBankList.map(e=>e.id)}set priorityOrder(e){this.soundBankList.sort((A,t)=>e.indexOf(A.id)-e.indexOf(t.id)),this.generatePresetList()}deleteSoundBank(e){if(this.soundBankList.length===0){nA("1 soundbank left. Aborting!");return}let A=this.soundBankList.findIndex(t=>t.id===e);if(A===-1)throw new Error(`No sound bank with id "${e}"`);this.soundBankList.splice(A,1),this.generatePresetList()}addSoundBank(e,A,t=0){let n=this.soundBankList.find(s=>s.id===A);n!==void 0?(n.soundBank=e,n.bankOffset=t):this.soundBankList.push({id:A,soundBank:e,bankOffset:t}),this.generatePresetList()}getPreset(e,A){if(this.soundBankList.length<1)throw new Error("No sound banks! Did you forget to add one?");return Ca(this.selectablePresetList,e,A)}destroy(){this.soundBankList.forEach(e=>{e.soundBank.destroySoundBank()}),this.soundBankList=[]}generatePresetList(){let e=new Array,A=new Set;this.soundBankList.forEach(t=>{let n=t.soundBank,s=t.bankOffset;n.presets.forEach(a=>{let o=new xr(a,s);A.has(o.toMIDIString())||(A.add(o.toMIDIString()),e.push(o))})}),e.sort(te.sorter.bind(te)),this.selectablePresetList=e,this._presetList=e.map(t=>({bankMSB:t.bankMSB,bankLSB:t.bankLSB,program:t.program,isGMGSDrum:t.isGMGSDrum,name:t.name,isAnyDrums:t.isAnyDrums})),this.presetListChangeCallback()}},Yr=.05,Pr=3070,Jr=2e3,Fs=Math.PI/2,Lt=-500,ha=500,rs=ha-Lt,la=new Float32Array(rs+1),da=new Float32Array(rs+1);for(let e=Lt;e<=ha;e++){let A=(e-Lt)/rs,t=e-Lt;la[t]=Math.cos(Fs*A),da[t]=Math.sin(Fs*A)}function qr(e,A,t,n,s,a,o,i,r){if(isNaN(A[0]))return;let g;e.overridePan?g=e.overridePan:(e.currentPan+=(e.modulatedGenerators[I.pan]-e.currentPan)*this.synthProps.panSmoothingFactor,g=e.currentPan);let E=this.synthProps.masterParameters.masterGain*this.synthProps.midiVolume*e.gain,d=~~(g+500),l=la[d]*E*this.synthProps.panLeft,C=da[d]*E*this.synthProps.panRight;if(this.synth.enableEffects){let Q=e.modulatedGenerators[I.reverbEffectsSend];if(Q>0){let S=this.synthProps.masterParameters.reverbGain*this.synthProps.reverbSend*E*(Q/Pr);for(let D=0;D<A.length;D++){let w=D+r;s[w]+=S*A[D],a[w]+=S*A[D]}}let m=e.modulatedGenerators[I.chorusEffectsSend];if(m>0){let S=this.synthProps.masterParameters.chorusGain*this.synthProps.chorusSend*(m/Jr),D=l*S,w=C*S;for(let M=0;M<A.length;M++){let P=M+r;o[P]+=D*A[M],i[P]+=w*A[M]}}}if(l>0)for(let Q=0;Q<A.length;Q++)t[Q+r]+=l*A[Q];if(C>0)for(let Q=0;Q<A.length;Q++)n[Q+r]+=C*A[Q]}var Kr=.1,Ot=class ct{static cachedCoefficients=[];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(A){this.sampleRate=A,this.maxCutoff=A*.45}static apply(A,t,n,s){let a=A.modulatedGenerators[I.initialFilterFc],o=A.filter;o.initialized?o.currentInitialFc+=(a-o.currentInitialFc)*s:(o.initialized=!0,o.currentInitialFc=a);let i=o.currentInitialFc+n,r=A.modulatedGenerators[I.initialFilterQ];if(o.currentInitialFc>13499&&i>13499&&r===0){o.currentInitialFc=13500;return}(Math.abs(o.lastTargetCutoff-i)>1||o.resonanceCb!==r)&&(o.lastTargetCutoff=i,o.resonanceCb=r,ct.calculateCoefficients(o,i));for(let g=0;g<t.length;g++){let E=t[g],d=o.a0*E+o.a1*o.x1+o.a2*o.x2-o.a3*o.y1-o.a4*o.y2;o.x2=o.x1,o.x1=E,o.y2=o.y1,o.y1=d,t[g]=d}}static calculateCoefficients(A,t){t=~~t;let n=A.resonanceCb,s=ct.cachedCoefficients?.[n]?.[t];if(s!==void 0){A.a0=s.a0,A.a1=s.a1,A.a2=s.a2,A.a3=s.a3,A.a4=s.a4;return}let a=bn(t);a=Math.min(a,A.maxCutoff);let o=n/10,i=Ae(-(o-3.01)),r=1/Math.sqrt(Ae(-o)),g=2*Math.PI*a/A.sampleRate,E=Math.cos(g),d=Math.sin(g)/(2*i),l=(1-E)*r,C=l/2,Q=C,m=1+d,S=-2*E,D=1-d,w={a0:C/m,a1:l/m,a2:Q/m,a3:S/m,a4:D/m};A.a0=w.a0,A.a1=w.a1,A.a2=w.a2,A.a3=w.a3,A.a4=w.a4,ct.cachedCoefficients[n]??=[],ct.cachedCoefficients[n][t]=w}},Un=new Ot(44100);Un.resonanceCb=0;for(let e=1500;e<13500;e++)Un.currentInitialFc=e,Ot.calculateCoefficients(Un,e);var Gs={enableEventSystem:!0,initialTime:0,enableEffects:!0};function Or(e,A){let t=0;return e.drumChannel&&(t+=5),A.isInRelease&&(t-=5),t+=A.velocity/25,t-=A.volumeEnvelope.state,A.isInRelease&&(t-=5),t-=A.volumeEnvelope.currentAttenuationDb/50,t}function Vr(e){let A=[];for(let n of this.midiChannels)for(let s of n.voices)if(!s.finished){let a=Or(n,s);A.push({channel:n,voice:s,priority:a})}A.sort((n,s)=>n.priority-s.priority);let t=A.slice(0,e);for(let{channel:n,voice:s}of t){let a=n.voices.indexOf(s);a>-1&&n.voices.splice(a,1)}}var un=1,Tn=new Float32Array(1e3);for(let e=0;e<Tn.length;e++)Tn[e]=oa(0,QA.convex,e/1e3);var ze=class xn{attackDuration=0;decayDuration=0;holdDuration=0;releaseDuration=0;sustainLevel=0;delayEnd=0;attackEnd=0;holdEnd=0;decayEnd=0;releaseStartLevel=0;currentValue=0;static startRelease(A){xn.recalculate(A)}static recalculate(A){let t=A.modulationEnvelope;A.isInRelease&&(t.releaseStartLevel=xn.getValue(A,A.releaseStartTime,!0)),t.sustainLevel=1-A.modulatedGenerators[I.sustainModEnv]/1e3,t.attackDuration=Qe(A.modulatedGenerators[I.attackModEnv]);let n=(60-A.midiNote)*A.modulatedGenerators[I.keyNumToModEnvDecay],s=Qe(A.modulatedGenerators[I.decayModEnv]+n);t.decayDuration=s*(1-t.sustainLevel);let a=(60-A.midiNote)*A.modulatedGenerators[I.keyNumToModEnvHold];t.holdDuration=Qe(a+A.modulatedGenerators[I.holdModEnv]);let o=Qe(Math.max(A.modulatedGenerators[I.releaseModEnv],-7200));t.releaseDuration=o*t.releaseStartLevel,t.delayEnd=A.startTime+Qe(A.modulatedGenerators[I.delayModEnv]),t.attackEnd=t.delayEnd+t.attackDuration,t.holdEnd=t.attackEnd+t.holdDuration,t.decayEnd=t.holdEnd+t.decayDuration}static getValue(A,t,n=!1){let s=A.modulationEnvelope;return A.isInRelease&&!n?s.releaseStartLevel===0?0:Math.max(0,(1-(t-A.releaseStartTime)/s.releaseDuration)*s.releaseStartLevel):(t<s.delayEnd?s.currentValue=0:t<s.attackEnd?s.currentValue=Tn[~~((1-(s.attackEnd-t)/s.attackDuration)*1e3)]:t<s.holdEnd?s.currentValue=un:t<s.decayEnd?s.currentValue=(1-(s.decayEnd-t)/s.decayDuration)*(s.sustainLevel-un)+un:s.currentValue=s.sustainLevel,s.currentValue)}},Qa=class{sampleData;playbackStep=0;cursor=0;rootKey=0;loopStart=0;loopEnd=0;end=0;loopingMode=0;isLooping=!1;constructor(e,A,t,n,s,a,o,i){this.sampleData=e,this.playbackStep=A,this.cursor=t,this.rootKey=n,this.loopStart=s,this.loopEnd=a,this.end=o,this.loopingMode=i,this.isLooping=this.loopingMode===1||this.loopingMode===3}},Xr=-2320,Zr=-1130,Hn=class ua{sample;filter;gain=1;generators;modulators=[];resonanceOffset=0;modulatedGenerators;finished=!1;isInRelease=!1;velocity=0;midiNote=0;pressure=0;targetKey=0;modulationEnvelope=new ze;volumeEnvelope;startTime=0;releaseStartTime=1/0;currentTuningCents=0;currentTuningCalculated=1;currentPan=0;realKey;portamentoFromKey=-1;portamentoDuration=0;overridePan=0;exclusiveClass=0;constructor(A,t,n,s,a,o,i,r,g){this.sample=t,this.generators=r,this.exclusiveClass=this.generators[I.exclusiveClass],this.modulatedGenerators=new Int16Array(r),this.modulators=g,this.filter=new Ot(A),this.velocity=s,this.midiNote=n,this.startTime=a,this.targetKey=o,this.realKey=i,this.volumeEnvelope=new Re(A,r[I.sustainVolEnv])}static copyFrom(A,t,n){let s=A.sample,a=new Qa(s.sampleData,s.playbackStep,s.cursor,s.rootKey,s.loopStart,s.loopEnd,s.end,s.loopingMode);return new ua(A.volumeEnvelope.sampleRate,a,A.midiNote,A.velocity,t,A.targetKey,n,new Int16Array(A.generators),A.modulators.map(cA.copyFrom.bind(cA)))}exclusiveRelease(A){this.release(A,Va),this.modulatedGenerators[I.releaseVolEnv]=Xr,this.modulatedGenerators[I.releaseModEnv]=Zr,Re.recalculate(this),ze.recalculate(this)}release(A,t=Oa){this.releaseStartTime=A,this.releaseStartTime-this.startTime<t&&(this.releaseStartTime=this.startTime+t)}};function Wr(e,A,t,n){let s=e.getSynthesisData(A,t).reduce((a,o)=>{if(o.sample.getAudioData()===void 0)return nA(`Discarding invalid sample: ${o.sample.name}`),a;let i=new Int16Array(Fn);for(let m=0;m<60;m++)i[m]=vr(m,o.presetGenerators,o.instrumentGenerators);i[I.initialAttenuation]=Math.floor(i[I.initialAttenuation]*.4);let r=o.sample.originalKey;i[I.overridingRootKey]>-1&&(r=i[I.overridingRootKey]);let g=A;i[I.keyNum]>-1&&(g=i[I.keyNum]);let E=o.sample.loopStart,d=o.sample.loopEnd,l=i[I.sampleModes],C=o.sample.getAudioData(),Q=new Qa(C,o.sample.sampleRate/this.sampleRate*Math.pow(2,o.sample.pitchCorrection/1200),0,r,E,d,Math.floor(C.length)-1,l);return i[I.velocity]>-1&&(t=i[I.velocity]),a.push(new Hn(this.sampleRate,Q,A,t,this.currentSynthTime,g,n,i,o.modulators.map(cA.copyFrom.bind(cA)))),a},[]);return this.setCachedVoice(e,A,t,s),s.map(a=>Hn.copyFrom(a,this.currentSynthTime,n))}function zr(e,A,t,n){let s=this.midiChannels[e],a=this.keyModifierManager.hasOverridePatch(e,A),o=s.preset;if(!o)return nA(`No preset for channel ${e}!`),[];let i={...o};a&&(i=this.keyModifierManager.getPatch(e,A));let r=this.getCachedVoice(i,A,t);return r!==void 0?r.map(g=>Hn.copyFrom(g,this.currentSynthTime,n)):(a&&(o=this.soundBankManager.getPreset(i,this.privateProps.masterParameters.midiSystem)),this.getVoicesForPreset(o,A,t,n))}function Rs(e,A,t){let n=e,s=A<<7|t;return e===127&&A===127&&t===127?{midiNote:-1,centTuning:null}:{midiNote:n,centTuning:s*.0061}}function _r(e,A=0){let t=e[0];if(this.privateProps.masterParameters.deviceID!==Be&&e[1]!==127&&this.privateProps.masterParameters.deviceID!==e[1])return;function n(a,o,i,r){y(`%cChannel %c${a}%c ${i}. %c${o} ${r}%c, with %c${vA(e)}`,c.info,c.recognized,c.info,c.value,c.info,c.value)}switch(t){default:y(`%cUnrecognized SysEx: %c${vA(e)}`,c.warn,c.unrecognized);break;case 126:case 127:switch(e[2]){case 4:{let a;switch(e[3]){case 1:{let o=e[5]<<7|e[4];this.setMIDIVolume(o/16384),y(`%cMaster Volume. Volume: %c${o}`,c.info,c.value);break}case 2:{let i=((e[5]<<7|e[4])-8192)/8192;this.setMasterParameter("masterPan",i),y(`%cMaster Pan. Pan: %c${i}`,c.info,c.value);break}case 3:{let o=(e[5]<<7|e[6])-8192;a=Math.floor(o/81.92),this.setMasterTuning(a),y(`%cMaster Fine Tuning. Cents: %c${a}`,c.info,c.value);break}case 4:{a=(e[5]-64)*100,this.setMasterTuning(a),y(`%cMaster Coarse Tuning. Cents: %c${a}`,c.info,c.value);break}default:y(`%cUnrecognized MIDI Device Control Real-time message: %c${vA(e)}`,c.warn,c.unrecognized)}break}case 9:e[3]===1?(y("%cGM1 system on",c.info),this.setMasterParameter("midiSystem","gm")):e[3]===3?(y("%cGM2 system on",c.info),this.setMasterParameter("midiSystem","gm2")):(y("%cGM system off, defaulting to GS",c.info),this.setMasterParameter("midiSystem","gs"));break;case 8:{let a=4;switch(e[3]){case 1:{let o=e[a++],i=ee(e,16,a);if(a+=16,e.length<384){nA(`The Bulk Tuning Dump is too short! (${e.length} bytes, at least 384 are expected)`);return}for(let r=0;r<128;r++)this.privateProps.tunings[o][r]=Rs(e[a++],e[a++],e[a++]);y(`%cBulk Tuning Dump %c${i}%c Program: %c${o}`,c.info,c.value,c.info,c.recognized);break}case 2:case 7:{e[3]===7&&a++;let o=e[a++],i=e[a++];for(let r=0;r<i;r++)this.privateProps.tunings[o][e[a++]]=Rs(e[a++],e[a++],e[a++]);y(`%cSingle Note Tuning. Program: %c${o}%c Keys affected: %c${i}`,c.info,c.recognized,c.info,c.recognized);break}case 9:case 8:{let o=new Int8Array(12);if(e[3]===8)for(let i=0;i<12;i++)o[i]=e[7+i]-64;else for(let i=0;i<24;i+=2){let r=(e[7+i]<<7|e[8+i])-8192;o[i/2]=Math.floor(r/81.92)}(e[4]&1)===1&&this.midiChannels[14+A].setOctaveTuning(o),(e[4]>>1&1)===1&&this.midiChannels[15+A].setOctaveTuning(o);for(let i=0;i<7;i++)(e[5]>>i&1)===1&&this.midiChannels[7+i+A].setOctaveTuning(o);for(let i=0;i<7;i++)(e[6]>>i&1)===1&&this.midiChannels[i+A].setOctaveTuning(o);y(`%cMIDI Octave Scale ${e[3]===8?"(1 byte)":"(2 bytes)"} tuning via Tuning: %c${o.join(" ")}`,c.info,c.value);break}default:y(`%cUnrecognized MIDI Tuning standard message: %c${vA(e)}`,c.warn,c.unrecognized);break}break}default:y(`%cUnrecognized MIDI Realtime/non realtime message: %c${vA(e)}`,c.warn,c.unrecognized)}break;case 65:if(e[3]===18){let a=function(){y(`%cUnrecognized Roland %cGS %cSysEx: %c${vA(e)}`,c.warn,c.recognized,c.warn,c.unrecognized)};var s=a;switch(e[2]){case 66:{let o=e[7];if(e[4]===64||e[4]===0&&e[6]===127){if((e[5]&16)>0){let i=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][e[5]&15]+A,r=this.midiChannels[i];switch(e[6]){default:a();break;case 21:{let g=o>0&&e[5]>>4>0;r.setGSDrums(g),y(`%cChannel %c${i}%c ${g?"is now a drum channel":"now isn't a drum channel"}%c via: %c${vA(e)}`,c.info,c.value,c.recognized,c.info,c.value);return}case 22:{let g=o-64;r.setCustomController(oA.channelKeyShift,g),n(i,g,"key shift","keys");return}case 28:{let g=o;g===0?(r.randomPan=!0,y(`%cRandom pan is set to %cON%c for %c${i}`,c.info,c.recognized,c.info,c.value)):(r.randomPan=!1,r.controllerChange(p.pan,g));break}case 33:r.controllerChange(p.chorusDepth,o);break;case 34:r.controllerChange(p.reverbDepth,o);break;case 64:case 65:case 66:case 67:case 68:case 69:case 70:case 71:case 72:case 73:case 74:case 75:{let g=e.length-9,E=new Int8Array(12);for(let l=0;l<g;l++)E[l]=e[l+7]-64;r.setOctaveTuning(E);let d=o-64;n(i,E.join(" "),"octave scale tuning","cents"),r.setTuning(d);break}}return}else if((e[5]&32)>0){let i=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][e[5]&15]+A,r=this.midiChannels[i],g=o-64,E=g/64,d=o/128,l=(C,Q,m=!1)=>{switch(e[6]&15){case 0:C===SA+AA.pitchWheel?(r.controllerChange(p.registeredParameterMSB,0),r.controllerChange(p.registeredParameterLSB,0),r.controllerChange(p.dataEntryMSB,Math.floor(g))):(r.sysExModulators.setModulator(C,I.fineTune,g*100,m),n(i,g,`${Q} pitch control`,"semitones"));break;case 1:r.sysExModulators.setModulator(C,I.initialFilterFc,E*9600,m),n(i,E*9600,`${Q} pitch control`,"cents");break;case 2:r.sysExModulators.setModulator(C,I.initialAttenuation,E*960,m),n(i,E*960,`${Q} amplitude`,"cB");break;case 4:r.sysExModulators.setModulator(C,I.vibLfoToPitch,d*600,m),n(i,d*600,`${Q} LFO1 pitch depth`,"cents");break;case 5:r.sysExModulators.setModulator(C,I.vibLfoToFilterFc,d*2400,m),n(i,d*2400,`${Q} LFO1 filter depth`,"cents");break;case 6:r.sysExModulators.setModulator(C,I.vibLfoToVolume,E*960,m),n(i,E*960,`${Q} LFO1 amplitude depth`,"cB");break;case 8:r.sysExModulators.setModulator(C,I.modLfoToPitch,d*600,m),n(i,d*600,`${Q} LFO2 pitch depth`,"cents");break;case 9:r.sysExModulators.setModulator(C,I.modLfoToFilterFc,d*2400,m),n(i,d*2400,`${Q} LFO2 filter depth`,"cents");break;case 10:r.sysExModulators.setModulator(C,I.modLfoToVolume,E*960,m),n(i,E*960,`${Q} LFO2 amplitude depth`,"cB");break}};switch(e[6]&240){default:a();break;case 0:l(p.modulationWheel,"mod wheel");break;case 16:l(SA+AA.pitchWheel,"pitch wheel",!0);break;case 32:l(SA+AA.channelPressure,"channel pressure");break;case 48:l(SA+AA.polyPressure,"poly pressure");break}return}else if(e[5]===0){switch(e[6]){default:a();break;case 127:o===0?(y("%cGS Reset received!",c.info),this.resetAllControllers(!1),this.setMasterParameter("midiSystem","gs")):o===127&&(y("%cGS system off, switching to GM",c.info),this.resetAllControllers(!1),this.setMasterParameter("midiSystem","gm"));break;case 6:y(`%cRoland GS Master Pan set to: %c${o}%c with: %c${vA(e)}`,c.info,c.value,c.info,c.value),this.setMasterParameter("masterPan",(o-64)/64);break;case 4:y(`%cRoland GS Master Volume set to: %c${o}%c with: %c${vA(e)}`,c.info,c.value,c.info,c.value),this.setMIDIVolume(o/127);break;case 5:{let i=o-64;y(`%cRoland GS Master Key-Shift set to: %c${i}%c with: %c${vA(e)}`,c.info,c.value,c.info,c.value),this.setMasterTuning(i*100);break}}return}else if(e[5]===1)switch(e[6]){default:a();break;case 0:{let i=ee(e,16,7);y(`%cGS Patch name: %c${i}`,c.info,c.value);break}case 51:y(`%cGS Reverb level: %c${o}`,c.info,c.value),this.privateProps.reverbSend=o/64;break;case 48:case 49:case 50:case 52:case 53:case 55:y(`%cUnsupported GS Reverb Parameter: %c${e[6].toString(16)}`,c.warn,c.unrecognized);break;case 58:y(`%cGS Chorus level: %c${o}`,c.info,c.value),this.privateProps.chorusSend=o/64;break;case 56:case 57:case 59:case 60:case 61:case 62:case 63:case 64:y(`%cUnsupported GS Chorus Parameter: %c${e[6].toString(16)}`,c.warn,c.unrecognized);break}}else a();return}case 69:{e[4]===16&&(e[5]===0?this.privateProps.callEvent("synthDisplay",Array.from(e)):e[5]===1?this.privateProps.callEvent("synthDisplay",Array.from(e)):a());return}case 22:if(e[4]===16){this.setMIDIVolume(e[7]/100),y(`%cRoland Master Volume control set to: %c${e[7]}%c via: %c${vA(e)}`,c.info,c.value,c.info,c.value);return}}}else{y(`%cUnrecognized Roland SysEx: %c${vA(e)}`,c.warn,c.unrecognized);return}break;case 67:if(e[2]===76)if(e[3]===0&&e[4]===0)switch(e[5]){case 4:{let a=e[6];this.setMIDIVolume(a/127),y(`%cXG master volume. Volume: %c${a}`,c.info,c.recognized);break}case 6:{let a=e[6]-64;this.setMasterParameter("transposition",a),y(`%cXG master transpose. Volume: %c${a}`,c.info,c.recognized);break}case 126:y("%cXG system on",c.info),this.resetAllControllers(!1),this.setMasterParameter("midiSystem","xg");break}else if(e[3]===8){if(!fA.isSystemXG(this.privateProps.masterParameters.midiSystem))return;let a=e[4]+A;if(a>=this.midiChannels.length)return;let o=this.midiChannels[a],i=e[6];switch(e[5]){case 1:o.controllerChange(p.bankSelect,i);break;case 2:o.controllerChange(p.bankSelectLSB,i);break;case 3:o.programChange(i);break;case 8:{if(o.drumChannel)return;o.channelTransposeKeyShift=i-64;break}case 11:o.controllerChange(p.mainVolume,i);break;case 14:{let r=i;r===0?(o.randomPan=!0,y(`%cRandom pan is set to %cON%c for %c${a}`,c.info,c.recognized,c.info,c.value)):o.controllerChange(p.pan,r);break}case 19:o.controllerChange(p.reverbDepth,i);break;case 18:o.controllerChange(p.chorusDepth,i);break;default:y(`%cUnrecognized Yamaha XG Part Setup: %c${e[5].toString(16).toUpperCase()}`,c.warn,c.unrecognized)}}else e[3]===6&&e[4]===0?this.privateProps.callEvent("synthDisplay",Array.from(e)):fA.isSystemXG(this.privateProps.masterParameters.midiSystem)&&y(`%cUnrecognized Yamaha XG SysEx: %c${vA(e)}`,c.warn,c.unrecognized);else fA.isSystemXG(this.privateProps.masterParameters.midiSystem)&&y(`%cUnrecognized Yamaha SysEx: %c${vA(e)}`,c.warn,c.unrecognized);break}}var Ms=class Yn{patch;lockPreset;lockedSystem;midiControllers;lockedControllers;customControllers;lockVibrato;channelVibrato;channelTransposeKeyShift;channelOctaveTuning;isMuted;drumChannel;channelNumber;constructor(A,t,n,s,a,o,i,r,g,E,d,l,C){this.patch=A,this.lockPreset=t,this.lockedSystem=n,this.midiControllers=s,this.lockedControllers=a,this.customControllers=o,this.lockVibrato=i,this.channelVibrato=r,this.channelTransposeKeyShift=g,this.channelOctaveTuning=E,this.isMuted=d,this.drumChannel=l,this.channelNumber=C}static copyFrom(A){return new Yn({...A.patch},A.lockPreset,A.lockedSystem,A.midiControllers.slice(),[...A.lockedControllers],A.customControllers.slice(),A.lockVibrato,{...A.channelVibrato},A.channelTransposeKeyShift,A.channelOctaveTuning,A.isMuted,A.drumChannel,A.channelNumber)}static create(A,t){let n=A.midiChannels[t];return new Yn({...n.patch,name:n?.preset?.name??"undefined"},n.lockPreset,n.lockedSystem,n.midiControllers.slice(),[...n.lockedControllers],n.customControllers.slice(),n.lockGSNRPNParams,{...n.channelVibrato},n.channelTransposeKeyShift,n.channelOctaveTuning.slice(),n.isMuted,n.drumChannel,t)}apply(A){let t=A.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=this.channelVibrato,t.lockGSNRPNParams=this.lockVibrato,t.channelTransposeKeyShift=this.channelTransposeKeyShift,t.channelOctaveTuning=this.channelOctaveTuning,t.setPresetLock(!1),t.setPatch(this.patch),t.setPresetLock(this.lockPreset),t.lockedSystem=this.lockedSystem}};var jr=class{keyMappings=[];addMapping(e,A,t){this.keyMappings[e]??=[],this.keyMappings[e][A]=t}deleteMapping(e,A){this.keyMappings[e]?.[A]!==void 0&&(this.keyMappings[e][A]=void 0)}clearMappings(){this.keyMappings=[]}setMappings(e){this.keyMappings=e}getMappings(){return this.keyMappings}getVelocity(e,A){return this.keyMappings[e]?.[A]?.velocity??-1}getGain(e,A){return this.keyMappings[e]?.[A]?.gain??1}hasOverridePatch(e,A){let t=this.keyMappings[e]?.[A]?.patch?.bankMSB;return t!==void 0&&t>=0}getPatch(e,A){let t=this.keyMappings[e]?.[A];if(t)return t.patch;throw new Error("No modifier.")}},os=class Pn{channelSnapshots;keyMappings;masterParameters;constructor(A,t,n){this.channelSnapshots=A,this.masterParameters=t,this.keyMappings=n}static create(A){let t=A.midiChannels.map((n,s)=>Ms.create(A,s));return new Pn(t,A.getAllMasterParameters(),A.keyModifierManager.getMappings())}static copyFrom(A){return new Pn(A.channelSnapshots.map(t=>Ms.copyFrom(t)),{...A.masterParameters},[...A.keyMappings])}apply(A){for(Object.entries(this.masterParameters).forEach(([n,s])=>{A.setMasterParameter(n,s)}),A.keyModifierManager.setMappings(this.keyMappings);A.midiChannels.length<this.channelSnapshots.length;)A.createMIDIChannel();this.channelSnapshots.forEach(n=>{n.apply(A)})}},$r={masterGain:Xa,masterPan:0,voiceCap:qa,interpolationType:bt.hermite,midiSystem:Vs,monophonicRetriggerMode:!1,reverbGain:1,chorusGain:1,blackMIDIMode:!1,transposition:0,deviceID:Be},Ao=class{tunings=[];masterParameters=$r;midiVolume=1;reverbSend=1;chorusSend=1;panLeft=.5;panRight=.5;defaultPreset;drumPreset;volumeEnvelopeSmoothingFactor;panSmoothingFactor;filterSmoothingFactor;eventCallbackHandler;getVoices;voiceKilling;cachedVoices=[];constructor(e,A,t,n,s,a){this.eventCallbackHandler=e,this.getVoices=A,this.voiceKilling=t,this.volumeEnvelopeSmoothingFactor=n,this.panSmoothingFactor=s,this.filterSmoothingFactor=a;for(let o=0;o<128;o++)this.tunings.push([])}callEvent(e,A){this.eventCallbackHandler(e,A)}};function fn(e,A,t){if(t<e)return 0;let n=(t-e)/(1/A)+.25;return Math.abs(n-~~(n+.5))*4-1}var eo=class Jn{static getSample(A,t,n){let s=A.currentTuningCalculated*A.sample.playbackStep;if(s===1){Jn.getSampleNearest(A,t,s);return}switch(n){case bt.hermite:this.getSampleHermite(A,t,s);return;case bt.linear:default:this.getSampleLinear(A,t,s);return;case bt.nearestNeighbor:Jn.getSampleNearest(A,t,s);return}}static getSampleLinear(A,t,n){let s=A.sample,a=s.cursor,o=s.sampleData;if(s.isLooping){let i=s.loopEnd-s.loopStart;for(let r=0;r<t.length;r++){for(;a>=s.loopEnd;)a-=i;let g=~~a,E=g+1;for(;E>=s.loopEnd;)E-=i;let d=a-g,l=o[E],C=o[g];t[r]=C+(l-C)*d,a+=n}}else for(let i=0;i<t.length;i++){let r=~~a,g=r+1;if(g>=s.end){A.finished=!0;return}let E=a-r,d=o[g],l=o[r];t[i]=l+(d-l)*E,a+=n}A.sample.cursor=a}static getSampleNearest(A,t,n){let s=A.sample,a=s.cursor,o=s.sampleData;if(s.isLooping){let i=s.loopEnd-s.loopStart;for(let r=0;r<t.length;r++){for(;a>=s.loopEnd;)a-=i;let g=~~a+1;for(;g>=s.loopEnd;)g-=i;t[r]=o[g],a+=n}}else for(let i=0;i<t.length;i++){let r=~~a+1;if(r>=s.end){A.finished=!0;return}t[i]=o[r],a+=n}s.cursor=a}static getSampleHermite(A,t,n){let s=A.sample,a=s.cursor,o=s.sampleData;if(s.isLooping){let i=s.loopEnd-s.loopStart;for(let r=0;r<t.length;r++){for(;a>=s.loopEnd;)a-=i;let g=~~a,E=g+1,d=g+2,l=g+3,C=a-g;E>=s.loopEnd&&(E-=i),d>=s.loopEnd&&(d-=i),l>=s.loopEnd&&(l-=i);let Q=o[g],m=o[E],S=o[d],D=o[l],w=(S-Q)*.5,M=m-S,P=w+M,x=P+M+(D-m)*.5,B=P+x;t[r]=((x*C-B)*C+w)*C+m,a+=n}}else for(let i=0;i<t.length;i++){let r=~~a,g=r+1,E=r+2,d=r+3,l=a-r;if(g>=s.end||E>=s.end||d>=s.end){A.finished=!0;return}let C=o[r],Q=o[g],m=o[E],S=o[d],D=(m-C)*.5,w=Q-m,M=D+w,P=M+w+(S-Q)*.5,x=M+P;t[i]=((P*l-x)*l+D)*l+Q,a+=n}A.sample.cursor=a}};function to(e,A,t,n,s,a,o,i,r,g){if(e.isInRelease||A>=e.releaseStartTime&&(e.isInRelease=!0,Re.startRelease(e),ze.startRelease(e),e.sample.loopingMode===3&&(e.sample.isLooping=!1)),e.modulatedGenerators[I.initialAttenuation]>2500)return e.isInRelease&&(e.finished=!0),e.finished;let E=e.targetKey,d=e.modulatedGenerators[I.fineTune]+this.channelOctaveTuning[e.midiNote]+this.channelTuningCents,l=e.modulatedGenerators[I.coarseTune],C=this.synthProps.tunings[this.preset?.program??0]?.[e.realKey];if(C?.centTuning&&(E=C.midiNote,d+=C.centTuning),e.portamentoFromKey>-1){let U=Math.min((A-e.startTime)/e.portamentoDuration,1),K=E-e.portamentoFromKey;l-=K*(1-U)}d+=(E-e.sample.rootKey)*e.modulatedGenerators[I.scaleTuning];let Q=0,m=0,S=e.modulatedGenerators[I.vibLfoToPitch],D=e.modulatedGenerators[I.vibLfoToVolume],w=e.modulatedGenerators[I.vibLfoToFilterFc];if(S!==0||D!==0||w!==0){let U=e.startTime+Qe(e.modulatedGenerators[I.delayVibLFO]),K=bn(e.modulatedGenerators[I.freqVibLFO]),q=fn(U,K,A);d+=q*(S*this.customControllers[oA.modulationMultiplier]),m+=-q*D,Q+=q*w}let M=e.modulatedGenerators[I.modLfoToPitch],P=e.modulatedGenerators[I.modLfoToVolume],x=e.modulatedGenerators[I.modLfoToFilterFc];if(M!==0||x!==0||P!==0){let U=e.startTime+Qe(e.modulatedGenerators[I.delayModLFO]),K=bn(e.modulatedGenerators[I.freqModLFO]),q=fn(U,K,A);d+=q*(M*this.customControllers[oA.modulationMultiplier]),m+=-q*P,Q+=q*x}if(this.channelVibrato.depth>0){let U=fn(e.startTime+this.channelVibrato.delay,this.channelVibrato.rate,A);U&&(d+=U*this.channelVibrato.depth)}let B=e.modulatedGenerators[I.modEnvToPitch],j=e.modulatedGenerators[I.modEnvToFilterFc];if(j!==0||B!==0){let U=ze.getValue(e,A);Q+=U*j,d+=U*B}m-=e.resonanceOffset;let J=~~(d+l*100);J!==e.currentTuningCents&&(e.currentTuningCents=J,e.currentTuningCalculated=Math.pow(2,J/1200));let Y=new Float32Array(g);return e.sample.loopingMode===2&&!e.isInRelease?(Re.apply(e,Y,m,this.synthProps.volumeEnvelopeSmoothingFactor),e.finished):(eo.getSample(e,Y,this.synthProps.masterParameters.interpolationType),Ot.apply(e,Y,Q,this.synthProps.filterSmoothingFactor),Re.apply(e,Y,m,this.synthProps.volumeEnvelopeSmoothingFactor),this.panAndMixVoice(e,Y,t,n,s,a,o,i,r),e.finished)}var ue={pitchWheelRange:0,fineTuning:1,coarseTuning:2,modulationDepth:5,resetParameters:16383},Ve={partParameter:1,awe32:127,SF2:120},qe={vibratoRate:8,vibratoDepth:9,vibratoDelay:10,TVFFilterCutoff:32,TVFFilterResonance:33,EGAttackTime:99,EGReleaseTime:102};function no(e){this.midiControllers[p.dataEntryMSB]=e<<7;let A=()=>{this.channelVibrato.delay===0&&this.channelVibrato.rate===0&&this.channelVibrato.depth===0&&(this.channelVibrato.depth=50,this.channelVibrato.rate=8,this.channelVibrato.delay=.6)},t=(n,s,a)=>{a.length>0&&(a=" "+a),y(`%c${n} for %c${this.channelNumber}%c is now set to %c${s}%c${a}.`,c.info,c.recognized,c.info,c.value,c.info)};switch(this.dataEntryState){default:case YA.Idle:break;case YA.NRPFine:{if(this.lockGSNRPNParams)return;let n=this.midiControllers[p.nonRegisteredParameterMSB]>>7,s=this.midiControllers[p.nonRegisteredParameterLSB]>>7,a=this.midiControllers[p.dataEntryLSB]>>7;switch(n){default:if(e===64)return;y(`%cUnrecognized NRPN for %c${this.channelNumber}%c: %c(0x${s.toString(16).toUpperCase()} 0x${s.toString(16).toUpperCase()})%c data value: %c${e}`,c.warn,c.recognized,c.warn,c.unrecognized,c.warn,c.value);break;case Ve.partParameter:switch(s){default:if(e===64)return;y(`%cUnrecognized NRPN for %c${this.channelNumber}%c: %c(0x${n.toString(16)} 0x${s.toString(16)})%c data value: %c${e}`,c.warn,c.recognized,c.warn,c.unrecognized,c.warn,c.value);break;case qe.vibratoRate:if(e===64)return;A(),this.channelVibrato.rate=e/64*8,t("Vibrato rate",`${e} = ${this.channelVibrato.rate}`,"Hz");break;case qe.vibratoDepth:if(e===64)return;A(),this.channelVibrato.depth=e/2,t("Vibrato depth",`${e} = ${this.channelVibrato.depth}`,"cents of detune");break;case qe.vibratoDelay:if(e===64)return;A(),this.channelVibrato.delay=e/64/3,t("Vibrato delay",`${e} = ${this.channelVibrato.delay}`,"seconds");break;case qe.TVFFilterCutoff:this.controllerChange(p.brightness,e),t("Filter cutoff",e.toString(),"");break;case qe.EGAttackTime:this.controllerChange(p.attackTime,e),t("EG attack time",e.toString(),"");break;case qe.EGReleaseTime:this.controllerChange(p.releaseTime,e),t("EG release time",e.toString(),"");break}break;case Ve.awe32:break;case Ve.SF2:{if(s>100)break;let o=this.customControllers[oA.sf2NPRNGeneratorLSB],i=(e<<7|a)-8192;this.setGeneratorOffset(o,i);break}}break}case YA.RPCoarse:case YA.RPFine:{let n=this.midiControllers[p.registeredParameterMSB]|this.midiControllers[p.registeredParameterLSB]>>7;switch(n){default:y(`%cUnrecognized RPN for %c${this.channelNumber}%c: %c(0x${n.toString(16)})%c data value: %c${e}`,c.warn,c.recognized,c.warn,c.unrecognized,c.warn,c.value);break;case ue.pitchWheelRange:this.midiControllers[SA+AA.pitchWheelRange]=e<<7,t("Pitch wheel range",e.toString(),"semitones");break;case ue.coarseTuning:{let s=e-64;this.setCustomController(oA.channelTuningSemitones,s),t("Coarse tuning",s.toString(),"semitones");break}case ue.fineTuning:this.setTuning(e-64,!1);break;case ue.modulationDepth:this.setModulationDepth(e*100);break;case ue.resetParameters:this.resetParameters();break}}}}var so=[I.delayModLFO,I.freqModLFO,I.delayVibLFO,I.freqVibLFO,I.delayModEnv,I.attackModEnv,I.holdModEnv,I.decayModEnv,I.sustainModEnv,I.releaseModEnv,I.delayVolEnv,I.attackVolEnv,I.holdVolEnv,I.decayVolEnv,I.sustainVolEnv,I.releaseVolEnv,I.fineTune,I.modLfoToPitch,I.vibLfoToPitch,I.modEnvToPitch,I.modLfoToVolume,I.initialFilterFc,I.initialFilterQ,I.modLfoToFilterFc,I.modEnvToFilterFc,I.chorusEffectsSend,I.reverbEffectsSend];function ao(e,A,t){let n=(l,C,Q)=>Math.max(C,Math.min(Q,l)),s=l=>Math.max(-32768,1200*Math.log2(l/1e3)),a=l=>6900+1200*Math.log2(l/440),o=t<<7|A;o-=8192;let i=so[e];i||nA(`Invalid AWE32 LSB: %c${e}`,c.unrecognized);let r,g,E,d;switch(i){default:break;case I.delayModLFO:case I.delayVibLFO:case I.delayVolEnv:case I.delayModEnv:r=4*n(o,0,5900),this.setGeneratorOverride(i,s(r));break;case I.attackVolEnv:case I.attackModEnv:r=n(o,0,5940),this.setGeneratorOverride(i,s(r));break;case I.holdVolEnv:case I.holdModEnv:r=n(o,0,8191),this.setGeneratorOverride(i,s(r));break;case I.decayModEnv:case I.decayVolEnv:case I.releaseVolEnv:case I.releaseModEnv:r=4*n(o,0,5940),this.setGeneratorOverride(i,s(r));break;case I.freqVibLFO:case I.freqModLFO:g=.084*A,this.setGeneratorOverride(i,a(g),!0);break;case I.sustainVolEnv:case I.sustainModEnv:E=A*7.5,this.setGeneratorOverride(i,E);break;case I.fineTune:this.setGeneratorOverride(i,o,!0);break;case I.modLfoToPitch:case I.vibLfoToPitch:d=n(o,-127,127)*9.375,this.setGeneratorOverride(i,d,!0);break;case I.modEnvToPitch:d=n(o,-127,127)*9.375,this.setGeneratorOverride(i,d);break;case I.modLfoToVolume:E=1.875*A,this.setGeneratorOverride(i,E,!0);break;case I.initialFilterFc:{let l=4335+59*A;this.setGeneratorOverride(i,l,!0);break}case I.initialFilterQ:E=215*(A/127),this.setGeneratorOverride(i,E,!0);break;case I.modLfoToFilterFc:d=n(o,-64,63)*56.25,this.setGeneratorOverride(i,d,!0);break;case I.modEnvToFilterFc:d=n(o,-64,63)*56.25,this.setGeneratorOverride(i,d);break;case I.chorusEffectsSend:case I.reverbEffectsSend:this.setGeneratorOverride(i,n(o,0,255)*(1e3/255));break}}function ro(e){switch(this.midiControllers[p.dataEntryLSB]=e<<7,this.dataEntryState){default:break;case YA.RPCoarse:case YA.RPFine:{switch(this.midiControllers[p.registeredParameterMSB]|this.midiControllers[p.registeredParameterLSB]>>7){default:break;case ue.pitchWheelRange:{if(e===0)break;this.midiControllers[SA+AA.pitchWheelRange]|=e;let t=(this.midiControllers[SA+AA.pitchWheelRange]>>7)+e/128;y(`%cChannel ${this.channelNumber} pitch wheel range. Semitones: %c${t}`,c.info,c.value);break}case ue.fineTuning:{let n=this.customControllers[oA.channelTuning]<<7|e;this.setTuning(n*.01220703125);break}case ue.modulationDepth:{let n=this.customControllers[oA.modulationMultiplier]*50+e/128*100;this.setModulationDepth(n);break}case 16383:this.resetParameters();break}break}case YA.NRPFine:{let A=this.midiControllers[p.nonRegisteredParameterMSB]>>7,t=this.midiControllers[p.nonRegisteredParameterLSB]>>7;if(A===Ve.SF2)return;switch(A){default:y(`%cUnrecognized NRPN LSB for %c${this.channelNumber}%c: %c(0x${t.toString(16).toUpperCase()} 0x${t.toString(16).toUpperCase()})%c data value: %c${e}`,c.warn,c.recognized,c.warn,c.unrecognized,c.warn,c.value);break;case Ve.awe32:ao.call(this,t,e,this.midiControllers[p.dataEntryMSB]>>7);break}}}}function oo(e,A,t=!0){if(e>127)throw new Error("Invalid MIDI Controller.");if(e>=p.modulationWheelLSB&&e<=p.effectControl2LSB&&e!==p.dataEntryLSB){let n=e-32;if(this.lockedControllers[n])return;this.midiControllers[n]=this.midiControllers[n]&16256|A&127,this.voices.forEach(s=>this.computeModulators(s,1,n))}if(!this.lockedControllers[e]){switch(this.midiControllers[e]=A<<7,e){case p.allNotesOff:this.stopAllNotes();break;case p.allSoundOff:this.stopAllNotes(!0);break;case p.bankSelect:this.setBankMSB(A),this.channelNumber%16===me&&fA.isSystemXG(this.channelSystem)&&this.setBankMSB(127);break;case p.bankSelectLSB:this.setBankLSB(A);break;case p.registeredParameterLSB:this.dataEntryState=YA.RPFine;break;case p.registeredParameterMSB:this.dataEntryState=YA.RPCoarse;break;case p.nonRegisteredParameterMSB:this.customControllers[oA.sf2NPRNGeneratorLSB]=0,this.dataEntryState=YA.NRPCoarse;break;case p.nonRegisteredParameterLSB:this.midiControllers[p.nonRegisteredParameterMSB]>>7===Ve.SF2&&(this.customControllers[oA.sf2NPRNGeneratorLSB]%100!==0&&(this.customControllers[oA.sf2NPRNGeneratorLSB]=0),A===100?this.customControllers[oA.sf2NPRNGeneratorLSB]+=100:A===101?this.customControllers[oA.sf2NPRNGeneratorLSB]+=1e3:A===102?this.customControllers[oA.sf2NPRNGeneratorLSB]+=1e4:A<100&&(this.customControllers[oA.sf2NPRNGeneratorLSB]+=A)),this.dataEntryState=YA.NRPFine;break;case p.dataEntryMSB:this.dataEntryCoarse(A);break;case p.dataEntryLSB:this.dataEntryFine(A);break;case p.resetAllControllers:this.resetControllersRP15Compliant();break;case p.sustainPedal:A<64&&(this.sustainedVoices.forEach(n=>{n.release(this.synth.currentSynthTime)}),this.sustainedVoices=[]);break;default:this.voices.forEach(n=>this.computeModulators(n,1,e));break}t&&this.synthProps.callEvent("controllerChange",{channel:this.channelNumber,controllerNumber:e,controllerValue:A})}}var it={0:0,1:.006,2:.023,4:.05,8:.11,16:.25,32:.5,64:2.06,80:4.2,96:8.4,112:19.5,116:26.7,120:40,124:80,127:480};function io(e){if(it[e]!==void 0)return it[e];let A=null,t=null;for(let n of Object.keys(it)){let s=parseInt(n);s<e&&(A===null||s>A)&&(A=s),s>e&&(t===null||s<t)&&(t=s)}if(A!==null&&t!==null){let n=it[A],s=it[t];return n+(e-A)*(s-n)/(t-A)}return 0}function Io(e,A){return io(e)*(A/30)}function go(e,A){if(A<1){this.noteOff(e);return}if(A=Math.min(127,A),this.synthProps.masterParameters.blackMIDIMode&&this.synth.totalVoicesAmount>200&&A<40||this.synthProps.masterParameters.blackMIDIMode&&A<10||this._isMuted)return;if(!this.preset){nA(`No preset for channel ${this.channelNumber}!`);return}let t=e+this.channelTransposeKeyShift+this.customControllers[oA.channelKeyShift],n=t;if(t>127||t<0)return;let s=this.preset?.program,a=this.synthProps.tunings[s]?.[t]?.midiNote;a>=0&&(n=a),this.synthProps.masterParameters.monophonicRetriggerMode&&this.killNote(e,-7200);let o=this.synth.keyModifierManager.getVelocity(this.channelNumber,t);o>-1&&(A=o);let i=this.synth.keyModifierManager.getGain(this.channelNumber,t),r=-1,g=0,E=this.midiControllers[p.portamentoTime]>>7,d=this.midiControllers[p.portamentoControl],l=d>>7;if(!this.drumChannel&&l!==n&&this.midiControllers[p.portamentoOnOff]>=8192&&E>0){if(d!==1){let S=Math.abs(n-l);g=Io(E,S),r=l}this.controllerChange(p.portamentoControl,n)}let C=this.synthProps.getVoices(this.channelNumber,n,A,t),Q=0;this.randomPan&&(Q=Math.round(Math.random()*1e3-500));let m=this.voices;C.forEach(S=>{S.portamentoFromKey=r,S.portamentoDuration=g,S.overridePan=Q,S.gain=i,this.sysExModulators.modulatorList.forEach(J=>{let Y=J.mod,U=S.modulators.findIndex(K=>cA.isIdentical(K,Y));U!==-1?S.modulators[U]=cA.copyFrom(Y):S.modulators.push(cA.copyFrom(Y))}),this.generatorOverridesEnabled&&this.generatorOverrides.forEach((J,Y)=>{J!==Xs&&(S.generators[Y]=J)});let D=S.exclusiveClass;D!==0&&m.forEach(J=>{J.exclusiveClass===D&&J.exclusiveRelease(this.synth.currentSynthTime)}),this.computeModulators(S);let w=S.modulatedGenerators[I.startAddrsOffset]+S.modulatedGenerators[I.startAddrsCoarseOffset]*32768,M=S.modulatedGenerators[I.endAddrOffset]+S.modulatedGenerators[I.endAddrsCoarseOffset]*32768,P=S.modulatedGenerators[I.startloopAddrsOffset]+S.modulatedGenerators[I.startloopAddrsCoarseOffset]*32768,x=S.modulatedGenerators[I.endloopAddrsOffset]+S.modulatedGenerators[I.endloopAddrsCoarseOffset]*32768,B=S.sample,j=J=>Math.max(0,Math.min(B.sampleData.length-1,J));if(B.cursor=j(B.cursor+w),B.end=j(B.end+M),B.loopStart=j(B.loopStart+P),B.loopEnd=j(B.loopEnd+x),B.loopEnd<B.loopStart){let J=B.loopStart;B.loopStart=B.loopEnd,B.loopEnd=J}B.loopEnd-B.loopStart<1&&(B.loopingMode===1||B.loopingMode===3)&&(B.loopingMode=0,B.isLooping=!1),S.volumeEnvelope.attenuation=S.volumeEnvelope.attenuationTargetGain,S.currentPan=Math.max(-500,Math.min(500,S.modulatedGenerators[I.pan]))}),this.synth.totalVoicesAmount+=C.length,this.synth.totalVoicesAmount>this.synthProps.masterParameters.voiceCap&&this.synthProps.voiceKilling(C.length),m.push(...C),this.sendChannelProperty(),this.synthProps.callEvent("noteOn",{midiNote:e,channel:this.channelNumber,velocity:A})}function co(e){if(e>127||e<0){nA("Received a noteOn for note",e,"Ignoring.");return}let A=e+this.channelTransposeKeyShift+this.customControllers[oA.channelKeyShift];if(this.synthProps.masterParameters.blackMIDIMode&&!this.drumChannel){this.killNote(A,-6950),this.synthProps.callEvent("noteOff",{midiNote:e,channel:this.channelNumber});return}this.voices.forEach(n=>{n.realKey!==A||n.isInRelease||(this.holdPedal?this.sustainedVoices.push(n):n.release(this.synth.currentSynthTime))}),this.synthProps.callEvent("noteOff",{midiNote:e,channel:this.channelNumber})}function Eo(e){if(this.lockPreset)return;this.patch.program=e;let A=this.synth.soundBankManager.getPreset(this.patch,this.channelSystem);A||(nA("No presets! Using empty fallback."),A=new We(this.synth.soundBankManager.soundBankList[0].soundBank),A.name="SPESSA EMPTY FALLBACK PRESET"),this.preset=A,A.isAnyDrums!==this.drumChannel&&this.setDrumFlag(A.isAnyDrums),this.synthProps.callEvent("programChange",{channel:this.channelNumber,bankLSB:this.preset.bankLSB,bankMSB:this.preset.bankMSB,program:this.preset.program,isGMGSDrum:this.preset.isGMGSDrum}),this.sendChannelProperty()}var Bo=class{modulatorList=[];resetModulators(){this.modulatorList=[]}setModulator(e,A,t,n=!1,s=!1){let a=this.getModulatorID(e,A,n,s);t===0&&this.deleteModulator(a);let o=this.modulatorList.find(i=>i.id===a);if(o)o.mod.transformAmount=t;else{let i,r;e>=SA?(i=e-SA,r=!1):(i=e,r=!0);let g=new cA(new XA(i,QA.linear,r,n),new XA,A,t,0);this.modulatorList.push({mod:g,id:a})}}getModulatorID(e,A,t,n){return`${e}-${A}-${t}-${n}`}deleteModulator(e){this.modulatorList=this.modulatorList.filter(A=>A.id!==e)}},Co=1e3/200;function bs(e,A,t){if(A.transformAmount===0)return A.currentValue=0,0;let n=A.primarySource.getValue(e,t),s=A.secondarySource.getValue(e,t),a=A.transformAmount;A.isEffectModulator&&a<=1e3&&(a*=Co,a=Math.min(a,1e3));let o=n*s*a;return A.transformType===2&&(o=Math.abs(o)),A.isDefaultResonantModulator&&(t.resonanceOffset=Math.max(0,o/2)),A.currentValue=o,o}function ho(e,A=-1,t=0){let n=e.modulators,s=e.generators;if(this.generatorOffsetsEnabled){s=new Int16Array(s);for(let g=0;g<s.length;g++)s[g]+=this.generatorOffsets[g]}let a=e.modulatedGenerators;if(A===-1){a.set(s),n.forEach(g=>{a[g.destination]=Math.min(32767,Math.max(-32768,a[g.destination]+bs(this.midiControllers,g,e)))});for(let g=0;g<a.length;g++){let E=T[g];E&&(a[g]=Math.min(E.max,Math.max(E.min,a[g])))}Re.recalculate(e),ze.recalculate(e);return}let o=new Set([I.initialAttenuation,I.delayVolEnv,I.attackVolEnv,I.holdVolEnv,I.decayVolEnv,I.sustainVolEnv,I.releaseVolEnv,I.keyNumToVolEnvHold,I.keyNumToVolEnvDecay]),i=new Set,r=!!A;n.forEach(g=>{if(g.primarySource.isCC===r&&g.primarySource.index===t||g.secondarySource.isCC===r&&g.secondarySource.index===t){let E=g.destination;if(!i.has(E)){let d=s[E];bs(this.midiControllers,g,e),n.forEach(C=>{C.destination===E&&(d+=C.currentValue)});let l=T[E];a[E]=Math.max(l.min,Math.min(d,l.max)),i.add(E)}}}),[...i].some(g=>o.has(g))&&Re.recalculate(e),ze.recalculate(e)}var lo=class{midiControllers=new Int16Array(Gn);lockedControllers=Array(Gn).fill(!1);customControllers=new Float32Array($s);channelTransposeKeyShift=0;channelOctaveTuning=new Int8Array(128);sysExModulators=new Bo;drumChannel=!1;randomPan=!1;dataEntryState=YA.Idle;patch={bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1};preset;lockPreset=!1;lockedSystem="gs";lockGSNRPNParams=!1;channelVibrato={delay:0,depth:0,rate:0};voices=[];sustainedVoices=[];channelNumber;synth;synthProps;noteOn=go.bind(this);noteOff=co.bind(this);programChange=Eo.bind(this);controllerChange=oo.bind(this);resetControllers=Qr.bind(this);resetPreset=ur.bind(this);resetControllersRP15Compliant=fr.bind(this);resetParameters=mr.bind(this);dataEntryFine=ro.bind(this);dataEntryCoarse=no.bind(this);channelTuningCents=0;generatorOffsets=new Int16Array(Fn);generatorOffsetsEnabled=!1;generatorOverrides=new Int16Array(Fn);generatorOverridesEnabled=!1;renderVoice=to.bind(this);panAndMixVoice=qr.bind(this);computeModulators=ho.bind(this);constructor(e,A,t,n){this.synth=e,this.synthProps=A,this.preset=t,this.channelNumber=n,this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}_isMuted=!1;get isMuted(){return this._isMuted}get holdPedal(){return this.midiControllers[p.sustainPedal]>=8192}get channelSystem(){return this.lockPreset?this.lockedSystem:this.synthProps.masterParameters.midiSystem}transposeChannel(e,A=!1){this.drumChannel||(e+=this.synthProps.masterParameters.transposition);let t=Math.trunc(e),n=this.channelTransposeKeyShift+this.customControllers[oA.channelTransposeFine]/100;this.drumChannel&&!A||e===n||(t!==this.channelTransposeKeyShift&&this.stopAllNotes(),this.channelTransposeKeyShift=t,this.setCustomController(oA.channelTransposeFine,(e-t)*100),this.sendChannelProperty())}setOctaveTuning(e){if(e.length!==12)throw new Error("Tuning is not the length of 12.");this.channelOctaveTuning=new Int8Array(128);for(let A=0;A<128;A++)this.channelOctaveTuning[A]=e[A%12]}setModulationDepth(e){e=Math.round(e),y(`%cChannel ${this.channelNumber} modulation depth. Cents: %c${e}`,c.info,c.value),this.setCustomController(oA.modulationMultiplier,e/50)}setTuning(e,A=!0){e=Math.round(e),this.setCustomController(oA.channelTuning,e),A&&y(`%cFine tuning for %c${this.channelNumber}%c is now set to %c${e}%c cents.`,c.info,c.recognized,c.info,c.value,c.info)}pitchWheel(e){this.lockedControllers[SA+AA.pitchWheel]||(this.synthProps.callEvent("pitchWheel",{channel:this.channelNumber,pitch:e}),this.midiControllers[SA+AA.pitchWheel]=e,this.voices.forEach(A=>this.computeModulators(A,0,AA.pitchWheel)),this.sendChannelProperty())}channelPressure(e){this.midiControllers[SA+AA.channelPressure]=e<<7,this.updateChannelTuning(),this.voices.forEach(A=>this.computeModulators(A,0,AA.channelPressure)),this.synthProps.callEvent("channelPressure",{channel:this.channelNumber,pressure:e})}polyPressure(e,A){this.voices.forEach(t=>{t.midiNote===e&&(t.pressure=A,this.computeModulators(t,0,AA.polyPressure))}),this.synthProps.callEvent("polyPressure",{channel:this.channelNumber,midiNote:e,pressure:A})}setCustomController(e,A){this.customControllers[e]=A,this.updateChannelTuning()}updateChannelTuning(){this.channelTuningCents=this.customControllers[oA.channelTuning]+this.customControllers[oA.channelTransposeFine]+this.customControllers[oA.masterTuning]+this.customControllers[oA.channelTuningSemitones]*100}renderAudio(e,A,t,n,s,a,o,i){this.voices=this.voices.filter(r=>!this.renderVoice(r,this.synth.currentSynthTime,e,A,t,n,s,a,o,i))}setPresetLock(e){this.lockPreset!==e&&(this.lockPreset=e,e&&(this.lockedSystem=this.synthProps.masterParameters.midiSystem))}setDrums(e){if(fA.isSystemXG(this.channelSystem))if(e)this.setBankMSB(fA.getDrumBank(this.channelSystem)),this.setBankLSB(0);else{if(this.channelNumber%16===me)throw new Error(`Cannot disable drums on channel ${this.channelNumber} for XG.`);this.setBankMSB(0),this.setBankLSB(0)}else this.setGSDrums(e);this.setDrumFlag(e),this.programChange(this.patch.program)}setPatch(e){this.setBankMSB(e.bankMSB),this.setBankLSB(e.bankLSB),this.setGSDrums(e.isGMGSDrum),this.programChange(e.program)}setGSDrums(e){e!==this.patch.isGMGSDrum&&(this.setBankLSB(0),this.setBankMSB(0),this.patch.isGMGSDrum=e)}setVibrato(e,A,t){this.lockGSNRPNParams||(this.channelVibrato.rate=A,this.channelVibrato.delay=t,this.channelVibrato.depth=e)}disableAndLockGSNRPN(){this.lockGSNRPNParams=!0,this.channelVibrato.rate=0,this.channelVibrato.delay=0,this.channelVibrato.depth=0}resetGeneratorOverrides(){this.generatorOverrides.fill(Xs),this.generatorOverridesEnabled=!1}setGeneratorOverride(e,A,t=!1){this.generatorOverrides[e]=A,this.generatorOverridesEnabled=!0,t&&this.voices.forEach(n=>{n.generators[e]=A,this.computeModulators(n)})}resetGeneratorOffsets(){this.generatorOffsets.fill(0),this.generatorOffsetsEnabled=!1}setGeneratorOffset(e,A){this.generatorOffsets[e]=A*T[e].nrpn,this.generatorOffsetsEnabled=!0,this.voices.forEach(t=>{this.computeModulators(t)})}killNote(e,A=-12e3){e+=this.customControllers[oA.channelKeyShift],this.voices.forEach(t=>{t.realKey===e&&(t.modulatedGenerators[I.releaseVolEnv]=A,t.release(this.synth.currentSynthTime))})}stopAllNotes(e=!1){e?(this.voices.length=0,this.sustainedVoices.length=0,this.sendChannelProperty()):(this.voices.forEach(A=>{A.isInRelease||A.release(this.synth.currentSynthTime)}),this.sustainedVoices.forEach(A=>{A.release(this.synth.currentSynthTime)})),this.synthProps.callEvent("stopAll",{channel:this.channelNumber,force:e})}muteChannel(e){e&&this.stopAllNotes(!0),this._isMuted=e,this.sendChannelProperty(),this.synthProps.callEvent("muteChannel",{channel:this.channelNumber,isMuted:e})}sendChannelProperty(){if(!this.synth.enableEventSystem)return;let e={voicesAmount:this.voices.length,pitchWheel:this.midiControllers[SA+AA.pitchWheel],pitchWheelRange:this.midiControllers[SA+AA.pitchWheelRange]/128,isMuted:this.isMuted,transposition:this.channelTransposeKeyShift+this.customControllers[oA.channelTransposeFine]/100,isDrum:this.drumChannel};this.synthProps.callEvent("channelPropertyChange",{channel:this.channelNumber,property:e})}setBankMSB(e){this.lockPreset||(this.patch.bankMSB=e)}setBankLSB(e){this.lockPreset||(this.patch.bankLSB=e)}setDrumFlag(e){this.lockPreset||!this.preset||this.drumChannel!==e&&(e?(this.channelTransposeKeyShift=0,this.drumChannel=!0):this.drumChannel=!1,this.synthProps.callEvent("drumChange",{channel:this.channelNumber,isDrumChannel:this.drumChannel}))}},mn=20;async function Qo(e,A,t,n,s,a,o){let i=0,r=0,g=[];for(let l of e.samples){n&&a&&await l.compressSample(a),s&&l.setAudioData(l.getAudioData(),l.sampleRate);let C=l.getRawData(!0);i++,await o?.(l.name,i,e.samples.length),y(`%cEncoded sample %c${i}. ${l.name}%c of %c${e.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),r+=C.length+(l.isCompressed?0:92),g.push(C)}r%2!==0&&r++;let E=new O(r+mn);kA(E,"LIST"),Ct(E,r+mn-8,4),kA(E,"sdta"),kA(E,"smpl"),Ct(E,r,4);let d=0;return e.samples.forEach((l,C)=>{let Q=g[C];E.set(Q,d+mn);let m,S;l.isCompressed?(m=d,S=m+Q.length):(m=d/2,S=m+Q.length/2,d+=92),d+=Q.length,A.push(m),t.push(S)}),E}var uo=48e3,Vt=class{name;sampleRate;originalKey;pitchCorrection;linkedSample;sampleType;loopStart;loopEnd;linkedTo=[];dataOverridden=!0;compressedData;audioData;constructor(e,A,t,n,s,a,o){this.name=e,this.sampleRate=A,this.originalKey=t,this.pitchCorrection=n,this.loopStart=a,this.loopEnd=o,this.sampleType=s}get isCompressed(){return this.compressedData!==void 0}get isLinked(){return this.sampleType===wA.rightSample||this.sampleType===wA.leftSample||this.sampleType===wA.linkedSample}get useCount(){return this.linkedTo.length}getRawData(e){return this.compressedData&&e&&!this.dataOverridden?this.compressedData:this.encodeS16LE()}resampleData(e){let A=this.getAudioData(),t=e/this.sampleRate,n=new Float32Array(Math.floor(A.length*t));for(let s=0;s<n.length;s++)n[s]=A[Math.floor(s*(1/t))];A=n,this.sampleRate=e,this.loopStart=Math.floor(this.loopStart*t),this.loopEnd=Math.floor(this.loopEnd*t),this.audioData=A}async compressSample(e){if(!this.isCompressed)try{let A=this.getAudioData();(this.sampleRate<8e3||this.sampleRate>96e3)&&(this.resampleData(uo),A=this.getAudioData());let t=await e(A,this.sampleRate);this.setCompressedData(t)}catch(A){nA(`Failed to compress ${this.name}. Leaving as uncompressed!`,A),this.compressedData=void 0}}setSampleType(e){if(this.sampleType=e,this.isLinked||(this.linkedSample&&(this.linkedSample.linkedSample=void 0,this.linkedSample.sampleType=e),this.linkedSample=void 0),(e&32768)>0)throw new Error("ROM samples are not supported.")}unlinkSample(){this.setSampleType(wA.monoSample)}setLinkedSample(e,A){if(e.linkedSample)throw new Error(`${e.name} is linked tp ${e.linkedSample.name}. Unlink it first.`);if(this.linkedSample=e,e.linkedSample=this,A===wA.leftSample)this.setSampleType(wA.leftSample),e.setSampleType(wA.rightSample);else if(A===wA.rightSample)this.setSampleType(wA.rightSample),e.setSampleType(wA.leftSample);else if(A===wA.linkedSample)this.setSampleType(wA.linkedSample),e.setSampleType(wA.linkedSample);else throw new Error("Invalid sample type: "+A)}linkTo(e){this.linkedTo.push(e)}unlinkFrom(e){let A=this.linkedTo.indexOf(e);if(A<0){nA(`Cannot unlink ${e.name} from ${this.name}: not linked.`);return}this.linkedTo.splice(A,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(e,A){this.audioData=e,this.sampleRate=A,this.dataOverridden=!0,this.compressedData=void 0}setCompressedData(e){this.audioData=void 0,this.compressedData=e,this.dataOverridden=!1}encodeS16LE(){let e=this.getAudioData(),A=new Int16Array(e.length),t=e.length;for(let n=0;n<t;n++){let s=e[n]*32768;s>32767?s=32767:s<-32768&&(s=-32768),A[n]=s}return new O(A.buffer)}decodeVorbis(){if(this.audioData)return this.audioData;if(!this.compressedData)throw new Error("Compressed data is missing.");try{let A=qt.decode(this.compressedData).data[0];if(A===void 0)return nA(`Error decoding sample ${this.name}: Vorbis decode returned undefined.`),new Float32Array(0);for(let t=0;t<A.length;t++)A[t]=Math.max(-1,Math.min(A[t],.999969482421875));return A}catch(e){return nA(`Error decoding sample ${this.name}: ${e}`),new Float32Array(this.loopEnd+1)}}},fo=class extends Vt{constructor(){super("",44100,60,0,wA.monoSample,0,0)}},qn=16,mo=class extends Vt{linkedSampleIndex;s16leData;startByteOffset;endByteOffset;sampleID;constructor(e,A,t,n,s,a,o,i,r,g,E,d){let l=(g&qn)>0;g&=~qn,super(e,a,o,i,g,n-A/2,s-A/2),this.dataOverridden=!1,this.name=e,this.startByteOffset=A,this.endByteOffset=t,this.sampleID=d;let C=E instanceof O?E.currentIndex:0;E instanceof O?l?(this.loopStart+=this.startByteOffset/2,this.loopEnd+=this.startByteOffset/2,this.setCompressedData(E.slice(this.startByteOffset/2+C,this.endByteOffset/2+C))):this.s16leData=E.slice(C+this.startByteOffset,C+this.endByteOffset):this.setAudioData(E.slice(this.startByteOffset/2,this.endByteOffset/2),a),this.linkedSampleIndex=r}getLinkedSample(e){if(this.linkedSample||!this.isLinked)return;let A=e[this.linkedSampleIndex];A?A.linkedSample?(y(`%cInvalid linked sample for ${this.name}: ${A.name} is already linked to ${A.linkedSample.name}`,c.warn),this.unlinkSample()):this.setLinkedSample(A,this.sampleType):(y(`%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 e=this.endByteOffset-this.startByteOffset;if(e<1)return nA(`Invalid sample ${this.name}! Invalid length: ${e}`),new Float32Array(1);let A=new Float32Array(e/2),t=new Int16Array(this.s16leData.buffer);for(let n=0;n<t.length;n++)A[n]=t[n]/32768;return this.audioData=A,A}getRawData(e){return this.dataOverridden||this.compressedData?super.getRawData(e):this.s16leData??new Uint8Array(0)}};function vs(e,A,t=!0){let n=[],s=0;for(;e.data.length>e.data.currentIndex;){let a=So(s,e.data,A);n.push(a),s++}return n.pop(),t&&n.forEach(a=>a.getLinkedSample(n)),n}function So(e,A,t){let n=hA(A,20),s=v(A,4)*2,a=v(A,4)*2,o=v(A,4),i=v(A,4),r=v(A,4),g=A[A.currentIndex++];g>127&&(g=60);let E=Ha(A[A.currentIndex++]),d=v(A,2),l=v(A,2);return new mo(n,s,a,o,i,r,g,E,d,l,t,e)}function po(e,A,t){let s=46*(e.samples.length+1),a=new O(s),o=new O(s),i=0;e.samples.forEach((E,d)=>{kA(a,E.name.substring(0,20),20),kA(o,E.name.substring(20),20);let l=A[d];iA(a,l),o.currentIndex+=4;let C=t[d];iA(a,C),o.currentIndex+=4;let Q=E.loopStart+l,m=E.loopEnd+l;E.isCompressed&&(Q-=l,m-=l),iA(a,Q),iA(a,m),iA(a,E.sampleRate),a[a.currentIndex++]=E.originalKey,a[a.currentIndex++]=E.pitchCorrection,o.currentIndex+=14;let S=E.linkedSample?e.samples.indexOf(E.linkedSample):0;W(a,Math.max(0,S)&65535),W(o,Math.max(0,S)>>16),i=Math.max(i,S);let D=E.sampleType;E.isCompressed&&(D|=qn),W(a,D),o.currentIndex+=2}),kA(a,"EOS",46),kA(o,"EOS",46);let r=IA("shdr",a),g=IA("shdr",o);return{pdta:r,xdta:g}}function Ls(e,A=!1){let t=A?e.presets:e.instruments,n=A?"pgen":"igen",s=A?"pmod":"imod",a=A?"pbag":"ibag",o=A?"phdr":"inst",i=A?Tr:Nr,r=0,g=new Array,E=0,d=new Array,l=new Array,C=new Array,Q=0,m=new Array,S=Y=>{g.push(r);let U=Y.getWriteGenerators(e);r+=U.length,l.push(...U),d.push(E);let K=Y.modulators;E+=K.length,C.push(...K)};t.forEach(Y=>{m.push(Q),S(Y.globalZone),Y.zones.forEach(S),Q+=Y.zones.length+1}),l.push(new FA(0,0,!1)),C.push(new mA(0,0,0,0,0)),g.push(r),d.push(E),m.push(Q);let D=l.length*Ds,w=new O(D);l.forEach(Y=>Y.write(w));let M=C.length*Bt,P=new O(M);C.forEach(Y=>Y.write(P));let x=d.length*Lr,B={pdta:new O(x),xdta:new O(x)};d.forEach((Y,U)=>{let K=g[U];W(B.pdta,K&65535),W(B.pdta,Y&65535),W(B.xdta,K>>16),W(B.xdta,Y>>16)});let j=(t.length+1)*i,J={pdta:new O(j),xdta:new O(j)};return t.forEach((Y,U)=>Y.write(J,m[U])),A?(kA(J.pdta,"EOP",20),J.pdta.currentIndex+=4,W(J.pdta,Q&65535),J.pdta.currentIndex+=12,kA(J.xdta,"",20),J.xdta.currentIndex+=4,W(J.xdta,Q>>16),J.xdta.currentIndex+=12):(kA(J.pdta,"EOI",20),W(J.pdta,Q&65535),kA(J.xdta,"",20),W(J.xdta,Q>>16)),{writeXdta:Math.max(r,E,Q)>65535,gen:{pdta:IA(n,w),xdta:IA(s,new O(Ds))},mod:{pdta:IA(s,P),xdta:IA(s,new O(Bt))},bag:{pdta:IA(a,B.pdta),xdta:IA(a,B.xdta)},hdr:{pdta:IA(o,J.pdta),xdta:IA(o,J.xdta)}}}var Kn={compress:!1,compressionFunction:void 0,progressFunction:void 0,writeDefaultModulators:!0,writeExtendedLimits:!0,decompress:!1};async function yo(e,A=Kn){let t=zn(A,Kn);if(t?.compress){if(typeof t?.compressionFunction!="function")throw new Error("No compression function supplied but compression enabled.");if(t?.decompress)throw new Error("Decompressed and compressed at the same time.")}RA("%cSaving soundbank...",c.info),y(`%cCompression: %c${t?.compress||"false"}%c`,c.info,c.recognized,c.info,c.recognized),OA("%cWriting INFO...",c.info);let n=[];e.soundBankInfo.software="SpessaSynth",(t?.compress||e.samples.some(M=>M.isCompressed))&&(e.soundBankInfo.version.major=3,e.soundBankInfo.version.minor=0),t?.decompress&&(e.soundBankInfo.version.major=2,e.soundBankInfo.version.minor=4);let s=(M,P)=>{n.push(IA(M,ne(P,!0,!0)))},a=new O(4);if(W(a,e.soundBankInfo.version.major),W(a,e.soundBankInfo.version.minor),n.push(IA("ifil",a)),e.soundBankInfo.romVersion){let M=new O(4);W(M,e.soundBankInfo.romVersion.major),W(M,e.soundBankInfo.romVersion.minor),n.push(IA("iver",M))}let o=(e.soundBankInfo?.comment??"")+(e.soundBankInfo.subject?`
6
- ${e.soundBankInfo.subject}`:"");for(let[M,P]of Object.entries(e.soundBankInfo)){let x=M,B=P;if(B)switch(x){case"name":s("INAM",B);break;case"comment":s("ICMT",o);break;case"copyright":s("ICOP",B);break;case"creationDate":s("ICRD",B.toISOString());break;case"engineer":s("IENG",B);break;case"product":s("IPRD",B);break;case"romInfo":s("irom",B);break;case"software":s("ISFT",B);break;case"soundEngine":s("isng",B);break;case"subject":break}}if(e.defaultModulators.some(M=>ga.findIndex(P=>cA.isIdentical(P,M,!0))===-1)&&t?.writeDefaultModulators){let M=e.defaultModulators;y(`%cWriting %c${M.length}%c default modulators...`,c.info,c.recognized,c.info);let P=Bt+M.length*Bt,x=new O(P);for(let B of M)B.write(x);Ct(x,0,Bt),n.push(IA("DMOD",x))}z(),y("%cWriting SDTA...",c.info);let r=[],g=[],E=await Qo(e,r,g,t.compress,t.decompress,t?.compressionFunction,t?.progressFunction);y("%cWriting PDTA...",c.info),y("%cWriting SHDR...",c.info);let d=po(e,r,g);OA("%cWriting instruments...",c.info);let l=Ls(e,!1);z(),OA("%cWriting presets...",c.info);let C=Ls(e,!0);z();let Q=[C.hdr,C.bag,C.mod,C.gen,l.hdr,l.bag,l.mod,l.gen,d],m=MA("pdta",Q.map(M=>M.pdta),!0);if(t.writeExtendedLimits&&(l.writeXdta||C.writeXdta||e.presets.some(M=>M.name.length>20)||e.instruments.some(M=>M.name.length>20)||e.samples.some(M=>M.name.length>20))){y("%cWriting the xdta chunk as writeExendedLimits is enabled and at least one condition was met.",c.info,c.value);let M=MA("xdta",Q.map(P=>P.xdta),!0);n.push(M)}let D=MA("INFO",n,!0);y("%cWriting the output file...",c.info);let w=MA("RIFF",[ne("sfbk"),D,E,m]);return y(`%cSaved succesfully! Final file size: %c${w.length}`,c.info,c.recognized),z(),w.buffer}var _e=class{static verifyHeader(e,...A){for(let t of A)if(e.header.toLowerCase()===t.toLowerCase())return;this.parsingError(`Invalid DLS chunk header! Expected "${A.join(", or ")}" got "${e.header.toLowerCase()}"`)}static verifyText(e,...A){for(let t of A)if(e.toLowerCase()===t.toLowerCase())return;this.parsingError(`FourCC error: Expected "${A.join(", or ")}" got "${e.toLowerCase()}"`)}static parsingError(e){throw z(),new Error(`DLS parse error: ${e} The file may be corrupted.`)}static verifyAndReadList(e,...A){this.verifyHeader(e,"LIST"),e.data.currentIndex=0,this.verifyText(hA(e.data,4),...A);let t=[];for(;e.data.length>e.data.currentIndex;)t.push(aA(e.data));return t}},It=20,Sn=16,Xe=class Et extends _e{gain=0;unityNote=60;fineTune=0;loops=new Array;fulOptions=2;static copyFrom(A){let t=new Et;return t.unityNote=A.unityNote,t.gain=A.gain,t.fineTune=A.fineTune,t.loops=A.loops.map(n=>({...n})),t.fulOptions=A.fulOptions,t}static read(A){this.verifyHeader(A,"wsmp");let t=new Et,n=v(A.data,4);if(n!==It&&nA(`Wsmp cbSize mismatch: got ${n}, expected ${It}.`),t.unityNote=v(A.data,2),t.fineTune=Wn(A.data[A.data.currentIndex++],A.data[A.data.currentIndex++]),t.gain=v(A.data,4)|0,t.fulOptions=v(A.data,4),v(A.data,4)!==0){let a=v(A.data,4);a!==Sn&&nA(`CbSize for loop in wsmp mismatch. Expected ${It}, got ${a}.`);let o=v(A.data,4),i=v(A.data,4),r=v(A.data,4);t.loops.push({loopStart:i,loopLength:r,loopType:o})}return t}static fromSFSample(A){let t=new Et;return t.unityNote=A.originalKey,t.fineTune=A.pitchCorrection,(A.loopEnd!==0||A.loopStart!==0)&&t.loops.push({loopStart:A.loopStart,loopLength:A.loopEnd-A.loopStart,loopType:ys.forward}),t}static fromSFZone(A){let t=new Et;t.unityNote=A.getGenerator(I.overridingRootKey,A.sample.originalKey),A.getGenerator(I.scaleTuning,100)===0&&A.keyRange.max-A.keyRange.min===0&&(t.unityNote=A.keyRange.min),t.fineTune=A.fineTuning+A.sample.pitchCorrection;let n=A.getGenerator(I.initialAttenuation,0)*.4;t.gain=-n<<16;let s=A.getGenerator(I.sampleModes,0);if(s!==0){let a=A.sample.loopStart+A.getGenerator(I.startloopAddrsOffset,0)+A.getGenerator(I.startloopAddrsCoarseOffset,0)*32768,o=A.sample.loopEnd+A.getGenerator(I.endloopAddrsOffset,0)+A.getGenerator(I.endloopAddrsCoarseOffset,0)*32768,i;switch(s){case 1:default:i=0;break;case 3:i=1}t.loops.push({loopType:i,loopStart:a,loopLength:o-a})}return t}toSFZone(A,t){let n=0,s=this.loops[0];s&&(n=s.loopType===ys.loopAndRelease?3:1),n!==0&&A.setGenerator(I.sampleModes,n);let i=-(this.gain>>16)/.4;if(i!==0&&A.setGenerator(I.initialAttenuation,i),A.fineTuning=this.fineTune-t.pitchCorrection,this.unityNote!==t.originalKey&&A.setGenerator(I.overridingRootKey,this.unityNote),s){let r=s.loopStart-t.loopStart,E=s.loopStart+s.loopLength-t.loopEnd;if(r!==0){let d=r%32768;A.setGenerator(I.startloopAddrsOffset,d);let l=Math.trunc(r/32768);l!==0&&A.setGenerator(I.startloopAddrsCoarseOffset,l)}if(E!==0){let d=E%32768;A.setGenerator(I.endloopAddrsOffset,d);let l=Math.trunc(E/32768);l!==0&&A.setGenerator(I.endloopAddrsCoarseOffset,l)}}}write(){let A=new O(It+this.loops.length*Sn);return iA(A,It),W(A,this.unityNote),W(A,this.fineTune),iA(A,this.gain),iA(A,this.fulOptions),iA(A,this.loops.length),this.loops.forEach(t=>{iA(A,Sn),iA(A,t.loopType),iA(A,t.loopStart),iA(A,t.loopLength)}),IA("wsmp",A)}},pn={PCM:1,ALAW:6};function ko(e,A){let t=Math.pow(2,A*8-1),n=Math.pow(2,A*8),s,a=!1;A===1?(s=255,a=!0):s=t;let o=e.length/A,i=new Float32Array(o);if(A===2){let r=new Int16Array(e.buffer);for(let g=0;g<r.length;g++)i[g]=r[g]/32768}else for(let r=0;r<i.length;r++){let g=v(e,A);a?i[r]=g/s-.5:(g>=t&&(g-=n),i[r]=g/s)}return i}function Do(e,A){let t=e.length/A,n=new Float32Array(t);for(let s=0;s<n.length;s++){let a=v(e,A),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 g=a>127?r:-r;n[s]=g/32678}return n}var wo=class extends Vt{wFormatTag;bytesPerSample;rawData;constructor(e,A,t,n,s,a,o,i,r){super(e,A,t,n,wA.monoSample,s,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 e;switch(this.wFormatTag){default:nA(`Failed to decode sample. Unknown wFormatTag: ${this.wFormatTag}`),e=new Float32Array(this.rawData.length/this.bytesPerSample);break;case pn.PCM:e=ko(this.rawData,this.bytesPerSample);break;case pn.ALAW:e=Do(this.rawData,this.bytesPerSample);break}this.setAudioData(e,this.sampleRate)}return this.audioData??new Float32Array(0)}getRawData(e){return this.dataOverridden||this.isCompressed?super.getRawData(e):this.wFormatTag===pn.PCM&&this.bytesPerSample===2?this.rawData:this.encodeS16LE()}},Ns=class On extends _e{waveSample=new Xe;wFormatTag;bytesPerSample;sampleRate;dataChunk;name="Unnamed sample";constructor(A,t,n,s){super(),this.wFormatTag=A,this.bytesPerSample=t,this.sampleRate=n,this.dataChunk=s}static read(A){let t=this.verifyAndReadList(A,"wave"),n=t.find(C=>C.header==="fmt ");if(!n)throw new Error("No fmt chunk in the wave file!");let s=v(n.data,2),a=v(n.data,2);if(a!==1)throw new Error(`Only mono samples are supported. Fmt reports ${a} channels.`);let o=v(n.data,4);v(n.data,4),v(n.data,2);let r=v(n.data,2)/8,g=t.find(C=>C.header==="data");if(!g)throw new Error("No data chunk in the WAVE chunk!");let E=new On(s,r,o,g),d=fe(t,"INFO");if(d){let C=aA(d.data);for(;C.header!=="INAM"&&d.data.currentIndex<d.data.length;)C=aA(d.data);C.header==="INAM"&&(E.name=hA(C.data,C.size).trim())}let l=t.find(C=>C.header==="wsmp");return l&&(E.waveSample=Xe.read(l)),E}static fromSFSample(A){let t=A.getRawData(!1),n=new On(1,2,A.sampleRate,new Ys("data",t.length,new O(t.buffer)));return n.name=A.name,n.waveSample=Xe.fromSFSample(A),n}toSFSample(A){let t=this.waveSample.unityNote,n=this.waveSample.fineTune,s=Math.trunc(n/100);t+=s,n-=s*100;let a=0,o=0,i=this.waveSample.loops?.[0];i&&(a=i.loopStart,o=i.loopStart+i.loopLength);let r=new wo(this.name,this.sampleRate,t,n,a,o,this.dataChunk,this.wFormatTag,this.bytesPerSample);A.addSamples(r)}write(){let A=this.writeFmt(),t=this.waveSample.write(),n=IA("data",this.dataChunk.data),s=IA("INAM",ne(this.name,!0)),a=IA("INFO",s,!1,!0);return y(`%cSaved %c${this.name}%c successfully!`,c.recognized,c.value,c.recognized),MA("wave",[A,t,n,a],!0)}writeFmt(){let A=new O(18);return W(A,this.wFormatTag),W(A,1),iA(A,this.sampleRate),iA(A,this.sampleRate*2),W(A,2),W(A,this.bytesPerSample*8),IA("fmt ",A)}},fa=new mA(219,0,I.reverbEffectsSend,1e3,0),ma=new mA(221,0,I.chorusEffectsSend,1e3,0),Fo=new mA(129,0,I.vibLfoToPitch,0,0),Go=new mA(13,0,I.vibLfoToPitch,0,0),VA=class Vn{source;transform;bipolar;invert;constructor(A=N.none,t=QA.linear,n=!1,s=!1){this.source=A,this.transform=t,this.bipolar=n,this.invert=s}get sourceName(){return Object.keys(N).find(A=>N[A]===this.source)??this.source.toString()}get transformName(){return Object.keys(QA).find(A=>QA[A]===this.transform)??this.transform.toString()}static copyFrom(A){return new Vn(A.source,A.transform,A.bipolar,A.invert)}static fromSFSource(A){let t;if(A.isCC)switch(A.index){case p.modulationWheel:t=N.modulationWheel;break;case p.mainVolume:t=N.volume;break;case p.pan:t=N.pan;break;case p.expressionController:t=N.expression;break;case p.chorusDepth:t=N.chorus;break;case p.reverbDepth:t=N.reverb;break}else switch(A.index){case AA.noController:t=N.none;break;case AA.noteOnKeyNum:t=N.keyNum;break;case AA.noteOnVelocity:t=N.velocity;break;case AA.pitchWheel:t=N.pitchWheel;break;case AA.pitchWheelRange:t=N.pitchWheelRange;break;case AA.polyPressure:t=N.polyPressure;break;case AA.channelPressure:t=N.channelPressure}if(t!==void 0)return new Vn(t,A.curveType,A.isBipolar,A.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 A,t=!1;switch(this.source){default:case N.modLfo:case N.vibratoLfo:case N.coarseTune:case N.fineTune:case N.modEnv:return;case N.keyNum:A=AA.noteOnKeyNum;break;case N.none:A=AA.noController;break;case N.modulationWheel:A=p.modulationWheel,t=!0;break;case N.pan:A=p.pan,t=!0;break;case N.reverb:A=p.reverbDepth,t=!0;break;case N.chorus:A=p.chorusDepth,t=!0;break;case N.expression:A=p.expressionController,t=!0;break;case N.volume:A=p.mainVolume,t=!0;break;case N.velocity:A=AA.noteOnVelocity;break;case N.polyPressure:A=AA.polyPressure;break;case N.channelPressure:A=AA.channelPressure;break;case N.pitchWheel:A=AA.pitchWheel;break;case N.pitchWheelRange:A=AA.pitchWheelRange;break}if(A!==void 0)return new XA(A,this.transform,t,this.bipolar,this.invert)}},Ro=new Set([I.sampleModes,I.initialAttenuation,I.keyRange,I.velRange,I.sampleID,I.fineTune,I.coarseTune,I.startAddrsOffset,I.startAddrsCoarseOffset,I.endAddrOffset,I.endAddrsCoarseOffset,I.startloopAddrsOffset,I.startloopAddrsCoarseOffset,I.endloopAddrsOffset,I.endloopAddrsCoarseOffset,I.overridingRootKey,I.exclusiveClass]),gt=class Fe{source;control;destination;scale;transform;constructor(A=new VA,t=new VA,n,s,a){this.source=A,this.control=t,this.destination=n,this.transform=s,this.scale=a}get isStaticParameter(){return this.source.source===N.none&&this.control.source===N.none}get shortScale(){return this.scale>>16}get transformName(){return Object.keys(QA).find(A=>QA[A]===this.transform)??this.transform.toString()}get destinationName(){return Object.keys(G).find(A=>G[A]===this.destination)??this.destination.toString()}static read(A){let t=v(A,2),n=v(A,2),s=v(A,2),a=v(A,2),o=v(A,4)|0,i=a&15,r=a>>4&15,g=Ge(a,8),E=Ge(a,9),d=new VA(n,r,g,E),l=a>>10&15,C=Ge(a,14),Q=Ge(a,15),m=new VA(t,l,C,Q);return new Fe(m,d,s,i,o)}static fromSFModulator(A,t){let n=E=>{nA(`Failed converting SF modulator into DLS:
5
+ amount: ${this.transformAmount}`+(this.transformType===2?"absolute value":"")}write(A,t){W(A,this.primarySource.toSourceEnum()),W(A,this.destination),W(A,this.transformAmount),W(A,this.secondarySource.toSourceEnum()),W(A,this.transformType),t&&t.mod++}sumTransform(A){let t=Tn.copyFrom(this);return t.transformAmount+=A.transformAmount,t}},mA=class extends cA{constructor(e,A,t,n,s){let a=(e===219||e===221)&&A===0&&(t===I.reverbEffectsSend||t===I.chorusEffectsSend),r=e===Ia&&A===0&&t===I.initialFilterQ;super(XA.fromSourceEnum(e),XA.fromSourceEnum(A),t,n,s,a,r),this.destination>lo&&(this.destination=I.INVALID)}},dn=960,Qn=QA.concave,bo=[new mA(ge(Qn,!1,!0,!1,AA.noteOnVelocity),0,I.initialAttenuation,dn,0),new mA(129,0,I.vibLfoToPitch,50,0),new mA(ge(Qn,!1,!0,!0,p.mainVolume),0,I.initialAttenuation,dn,0),new mA(13,0,I.vibLfoToPitch,50,0),new mA(526,16,I.fineTune,12700,0),new mA(650,0,I.pan,500,0),new mA(ge(Qn,!1,!0,!0,p.expressionController),0,I.initialAttenuation,dn,0),new mA(219,0,I.reverbEffectsSend,200,0),new mA(221,0,I.chorusEffectsSend,200,0)],vo=[new mA(ge(QA.linear,!1,!1,!1,AA.polyPressure),0,I.vibLfoToPitch,50,0),new mA(ge(QA.linear,!1,!1,!0,p.tremoloDepth),0,I.modLfoToVolume,24,0),new mA(ge(QA.convex,!0,!1,!0,p.attackTime),0,I.attackVolEnv,6e3,0),new mA(ge(QA.linear,!0,!1,!0,p.releaseTime),0,I.releaseVolEnv,3600,0),new mA(ge(QA.linear,!0,!1,!0,p.brightness),0,I.initialFilterFc,6e3,0),new mA(Ia,0,I.initialFilterQ,250,0)],ga=bo.concat(vo),Ds=4,FA=class{generatorType;generatorValue=0;constructor(e,A,t=!0){if(this.generatorType=e,A===void 0)throw new Error("No value provided.");if(this.generatorValue=Math.round(A),t){let n=T[e];n!==void 0&&(this.generatorValue=Math.max(n.min,Math.min(n.max,this.generatorValue)))}}write(e){W(e,this.generatorType),W(e,this.generatorValue)}toString(){return`${Object.keys(I).find(e=>I[e]===this.generatorType)}: ${this.generatorValue}`}};function Lo(e,A,t){let n=T[e]||{min:0,max:32768,def:0},s=A.find(o=>o.generatorType===e),a=0;s&&(a=s.generatorValue);let r=t.find(o=>o.generatorType===e),i=n.def;return r&&(i=r.generatorValue),Math.max(-32767,Math.min(32767,i+a))}var No=4,Kt=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 e=this.getGenerator(I.coarseTune,0),A=this.getGenerator(I.fineTune,0);return e*100+A}set fineTuning(e){let A=Math.trunc(e/100),t=e%100;this.setGenerator(I.coarseTune,A),this.setGenerator(I.fineTune,t)}addToGenerator(e,A,t=!0){let n=this.getGenerator(e,T[e].def);this.setGenerator(e,A+n,t)}setGenerator(e,A,t=!0){switch(e){case I.sampleID:throw new Error("Use setSample()");case I.instrument:throw new Error("Use setInstrument()");case I.velRange:case I.keyRange:throw new Error("Set the range manually")}if(A===null){this.generators=this.generators.filter(s=>s.generatorType!==e);return}let n=this.generators.findIndex(s=>s.generatorType===e);n>=0?this.generators[n]=new FA(e,A,t):this.addGenerators(new FA(e,A,t))}addGenerators(...e){e.forEach(A=>{switch(A.generatorType){default:this.generators.push(A);break;case I.sampleID:case I.instrument:break;case I.velRange:this.velRange.min=A.generatorValue&127,this.velRange.max=A.generatorValue>>8&127;break;case I.keyRange:this.keyRange.min=A.generatorValue&127,this.keyRange.max=A.generatorValue>>8&127}})}addModulators(...e){this.modulators.push(...e)}getGenerator(e,A){return this.generators.find(t=>t.generatorType===e)?.generatorValue??A}copyFrom(e){this.generators=e.generators.map(A=>new FA(A.generatorType,A.generatorValue,!1)),this.modulators=e.modulators.map(cA.copyFrom.bind(cA)),this.velRange={...e.velRange},this.keyRange={...e.keyRange}}getWriteGenerators(e){let A=this.generators.filter(t=>t.generatorType!==I.sampleID&&t.generatorType!==I.instrument&&t.generatorType!==I.keyRange&&t.generatorType!==I.velRange);if(!e)throw new Error("No bank provided! ");return this.hasVelRange&&A.unshift(new FA(I.velRange,this.velRange.max<<8|Math.max(this.velRange.min,0),!1)),this.hasKeyRange&&A.unshift(new FA(I.keyRange,this.keyRange.max<<8|Math.max(this.keyRange.min,0),!1)),A}},ca=class extends Kt{},Ea=class extends Kt{parentPreset;constructor(e,A){super(),this.parentPreset=e,this._instrument=A,this._instrument.linkTo(this.parentPreset)}_instrument;get instrument(){return this._instrument}set instrument(e){this._instrument&&this._instrument.unlinkFrom(this.parentPreset),this._instrument=e,this._instrument.linkTo(this.parentPreset)}getWriteGenerators(e){let A=super.getWriteGenerators(e);if(!e)throw new Error("Instrument ID cannot be determined without the sound bank itself.");let t=e.instruments.indexOf(this.instrument);if(t<0)throw new Error(`${this.instrument.name} does not exist in ${e.soundBankInfo.name}! Cannot write instrument generator.`);return A.push(new FA(I.instrument,t,!1)),A}},Ba=class extends Kt{parentInstrument;useCount;constructor(e,A){super(),this.parentInstrument=e,this._sample=A,A.linkTo(this.parentInstrument),this.useCount=e.useCount}_sample;get sample(){return this._sample}set sample(e){this._sample&&this._sample.unlinkFrom(this.parentInstrument),this._sample=e,e.linkTo(this.parentInstrument)}getWriteGenerators(e){let A=super.getWriteGenerators(e),t=e.samples.indexOf(this.sample);if(t<0)throw new Error(`${this.sample.name} does not exist in ${e.soundBankInfo.name}! Cannot write sampleID generator.`);return A.push(new FA(I.sampleID,t,!1)),A}},Uo=22,To=new Set([I.velRange,I.keyRange,I.instrument,I.sampleID,I.exclusiveClass,I.endOper,I.sampleModes,I.startloopAddrsOffset,I.startloopAddrsCoarseOffset,I.endloopAddrsOffset,I.endloopAddrsCoarseOffset,I.startAddrsOffset,I.startAddrsCoarseOffset,I.endAddrOffset,I.endAddrsCoarseOffset,I.initialAttenuation,I.fineTune,I.coarseTune,I.keyNumToVolEnvHold,I.keyNumToVolEnvDecay,I.keyNumToModEnvHold,I.keyNumToModEnvDecay]),dt=class{name="";zones=[];globalZone=new ca;linkedTo=[];get useCount(){return this.linkedTo.length}createZone(e){let A=new Ba(this,e);return this.zones.push(A),A}linkTo(e){this.linkedTo.push(e),this.zones.forEach(A=>A.useCount++)}unlinkFrom(e){let A=this.linkedTo.indexOf(e);if(A<0){nA(`Cannot unlink ${e.name} from ${this.name}: not linked.`);return}this.linkedTo.splice(A,1),this.zones.forEach(t=>t.useCount--)}deleteUnusedZones(){this.zones=this.zones.filter(e=>{let A=e.useCount>0;return A||e.sample.unlinkFrom(this),A})}delete(){if(this.useCount>0)throw new Error(`Cannot delete an instrument that is used by: ${this.linkedTo.map(e=>e.name).toString()}.`);this.zones.forEach(e=>e.sample.unlinkFrom(this))}deleteZone(e,A=!1){let t=this.zones[e];return t.useCount-=1,t.useCount<1||A?(t.sample.unlinkFrom(this),this.zones.splice(e,1),!0):!1}globalize(){let e=this.globalZone;for(let n=0;n<58;n++){if(To.has(n))continue;n=n;let s={},a=T[n]?.def||0;s[a]=0;for(let r of this.zones){let i=r.getGenerator(n,void 0);i!==void 0?s[i]===void 0?s[i]=1:s[i]++:s[a]++;let o;switch(n){default:continue;case I.decayVolEnv:o=I.keyNumToVolEnvDecay;break;case I.holdVolEnv:o=I.keyNumToVolEnvHold;break;case I.decayModEnv:o=I.keyNumToModEnvDecay;break;case I.holdModEnv:o=I.keyNumToModEnvHold}if(r.getGenerator(o,void 0)!==void 0){s={};break}}if(Object.keys(s).length>0){let i=Object.entries(s).reduce((g,c)=>g[1]<c[1]?c:g,["0",0]),o=parseInt(i[0]);o!==a&&e.setGenerator(n,o,!1),this.zones.forEach(g=>{let c=g.getGenerator(n,void 0);c!==void 0?c===o&&g.setGenerator(n,null):o!==a&&g.setGenerator(n,a)})}}let t=this.zones[0].modulators.map(n=>cA.copyFrom(n));for(let n of t){let s=!0;for(let a of this.zones){if(!s)continue;a.modulators.find(i=>cA.isIdentical(i,n))||(s=!1)}if(s){e.addModulators(cA.copyFrom(n));for(let a of this.zones){let r=a.modulators.find(i=>cA.isIdentical(i,n));r&&r.transformAmount===n.transformAmount&&a.modulators.splice(a.modulators.indexOf(r),1)}}}}write(e,A){y(`%cWriting ${this.name}...`,E.info),kA(e.pdta,this.name.substring(0,20),20),kA(e.xdta,this.name.substring(20),20),W(e.pdta,A&65535),W(e.xdta,A>>>16)}},xo=38,We=class{parentSoundBank;name="";program=0;bankMSB=0;bankLSB=0;isGMGSDrum=!1;zones=[];globalZone;library=0;genre=0;morphology=0;constructor(e,A=new ca){this.parentSoundBank=e,this.globalZone=A}get isXGDrums(){return this.parentSoundBank.isXGBank&&fA.isXGDrums(this.bankMSB)}get isAnyDrums(){let e=this.parentSoundBank.isXGBank;return this.isGMGSDrum||e&&fA.isXGDrums(this.bankMSB)&&this.bankMSB!==126}delete(){this.zones.forEach(e=>e.instrument?.unlinkFrom(this))}deleteZone(e){this.zones[e]?.instrument?.unlinkFrom(this),this.zones.splice(e,1)}createZone(e){let A=new Ea(this,e);return this.zones.push(A),A}preload(e,A){for(let t=e;t<A+1;t++)for(let n=0;n<128;n++)this.getSynthesisData(t,n).forEach(s=>{s.sample.getAudioData()})}matches(e){return te.matches(this,e)}getSynthesisData(e,A){if(this.zones.length<1)return[];function t(h,C){return C>=h.min&&C<=h.max}function n(h,C){h.push(...C.filter(d=>!h.find(u=>u.generatorType===d.generatorType)))}function s(h,C){h.push(...C.filter(d=>!h.find(u=>cA.isIdentical(d,u))))}let a=[],r=[...this.globalZone.generators],i=[...this.globalZone.modulators],o=this.globalZone.keyRange,g=this.globalZone.velRange;return this.zones.filter(h=>t(h.hasKeyRange?h.keyRange:o,e)&&t(h.hasVelRange?h.velRange:g,A)).forEach(h=>{let C=h.instrument;if(!C||C.zones.length<1)return;let d=h.generators,u=h.modulators,S=[...C.globalZone.generators],m=[...C.globalZone.modulators],k=C.globalZone.keyRange,w=C.globalZone.velRange;C.zones.filter(P=>t(P.hasKeyRange?P.keyRange:k,e)&&t(P.hasVelRange?P.velRange:w,A)).forEach(P=>{let x=[...P.generators],B=[...P.modulators];n(d,r),n(x,S),s(u,i),s(B,m),s(B,this.parentSoundBank.defaultModulators);let j=[...B];for(let J of u){let Y=j.findIndex(U=>cA.isIdentical(J,U));Y!==-1?j[Y]=j[Y].sumTransform(J):j.push(J)}P.sample&&a.push({instrumentGenerators:x,presetGenerators:d,modulators:j,sample:P.sample})})}),a}toMIDIString(){return te.toMIDIString(this)}toString(){return te.toNamedMIDIString(this)}toFlattenedInstrument(){let e=(g,c)=>{g.push(...c.filter(h=>!g.find(C=>C.generatorType===h.generatorType)))},A=(g,c)=>({min:Math.max(g.min,c.min),max:Math.min(g.max,c.max)}),t=(g,c)=>{g.push(...c.filter(h=>!g.find(C=>cA.isIdentical(h,C))))},n=new dt;n.name=this.name;let s=[],a=[],r=this.globalZone;s.push(...r.generators),a.push(...r.modulators);let i=r.keyRange,o=r.velRange;for(let g of this.zones){if(!g.instrument)throw new Error("No instrument in a preset zone.");let c=g.keyRange;g.hasKeyRange||(c=i);let h=g.velRange;g.hasVelRange||(h=o);let C=g.generators.map(x=>new FA(x.generatorType,x.generatorValue));e(C,s);let d=[...g.modulators];t(d,a);let u=g.instrument,S=u.zones,m=[],k=[],w=u.globalZone;m.push(...w.generators),k.push(...w.modulators);let M=w.keyRange,P=w.velRange;for(let x of S){if(!x.sample)throw new Error("No sample in an instrument zone.");let B=x.keyRange;x.hasKeyRange||(B=M);let j=x.velRange;if(x.hasVelRange||(j=P),B=A(B,c),j=A(j,h),B.max<B.min||j.max<j.min)continue;let J=x.generators.map(Z=>new FA(Z.generatorType,Z.generatorValue));e(J,m);let Y=[...x.modulators];t(Y,k);let U=[...Y];for(let Z of d){let CA=U.findIndex(gA=>cA.isIdentical(Z,gA));CA!==-1?U[CA]=U[CA].sumTransform(Z):U.push(Z)}let K=J.map(Z=>new FA(Z.generatorType,Z.generatorValue));for(let Z of C){if(Z.generatorType===I.velRange||Z.generatorType===I.keyRange||Z.generatorType===I.instrument||Z.generatorType===I.endOper||Z.generatorType===I.sampleModes)continue;let CA=J.findIndex(gA=>gA.generatorType===Z.generatorType);if(CA!==-1){let gA=K[CA].generatorValue+Z.generatorValue;K[CA]=new FA(Z.generatorType,gA)}else{let gA=T[Z.generatorType].def+Z.generatorValue;K.push(new FA(Z.generatorType,gA))}}K=K.filter(Z=>Z.generatorType!==I.sampleID&&Z.generatorType!==I.keyRange&&Z.generatorType!==I.velRange&&Z.generatorType!==I.endOper&&Z.generatorType!==I.instrument&&Z.generatorValue!==T[Z.generatorType].def);let q=n.createZone(x.sample);q.keyRange=B,q.velRange=j,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(...K),q.addModulators(...U)}}return n}write(e,A){y(`%cWriting ${this.name}...`,E.info),kA(e.pdta,this.name.substring(0,20),20),kA(e.xdta,this.name.substring(20),20),W(e.pdta,this.program);let t=this.bankMSB;this.isGMGSDrum?t=128:this.bankMSB===0&&(t=this.bankLSB),W(e.pdta,t),e.xdta.currentIndex+=4,W(e.pdta,A&65535),W(e.xdta,A>>16),iA(e.pdta,this.library),iA(e.pdta,this.genre),iA(e.pdta,this.morphology),e.xdta.currentIndex+=12}};function ws(e,A){let t;return A?t=e.find(n=>n.isXGDrums):t=e.find(n=>n.isGMGSDrum),t||(e.find(n=>n.isAnyDrums)??e[0])}function Ca(e,A,t){if(e.length<1)throw new Error("No presets!");A.isGMGSDrum&&fA.isSystemXG(t)&&(A={...A,isGMGSDrum:!1,bankLSB:0,bankMSB:fA.getDrumBank(t)});let{isGMGSDrum:n,bankLSB:s,bankMSB:a,program:r}=A,i=fA.isSystemXG(t),o=fA.isXGDrums(a)&&i,g=e.find(C=>C.matches(A));if(g&&(!o||o&&g.isXGDrums))return g;let c=C=>{y(`%cPreset %c${te.toMIDIString(A)}%c not found. (${t}) Replaced with %c${C.toString()}`,E.warn,E.unrecognized,E.warn,E.value)};if(n){let C=e.find(d=>d.isGMGSDrum&&d.program===r);return C||(C=e.find(d=>d.isAnyDrums&&d.program===r),C)?(c(C),C):(C=ws(e,!1),c(C),C)}if(o){let C=e.find(d=>d.program===r&&d.isXGDrums);return C||(C=e.find(d=>d.isAnyDrums&&d.program===r),C)?(c(C),C):(C=ws(e,!0),c(C),C)}let h=e.filter(C=>C.program===r&&!C.isAnyDrums);if(h.length<1)return c(e[0]),e[0];if(i?g=h.find(C=>C.bankLSB===s):g=h.find(C=>C.bankMSB===a),g)return c(g),g;if(s!==64||!i){let C=Math.max(a,s);if(g=h.find(d=>d.bankLSB===C||d.bankMSB===C),g)return c(g),g}return c(h[0]),h[0]}var Ho=class extends We{constructor(e,A){super(e.parentSoundBank,e.globalZone),this.bankMSB=fA.addBankOffset(e.bankMSB,A,e.isXGDrums),this.name=e.name,this.bankLSB=e.bankLSB,this.isGMGSDrum=e.isGMGSDrum,this.program=e.program,this.genre=e.genre,this.morphology=e.morphology,this.library=e.library,this.zones=e.zones}},Yo=class{soundBankList=[];presetListChangeCallback;selectablePresetList=[];constructor(e){this.presetListChangeCallback=e}_presetList=[];get presetList(){return[...this._presetList]}get priorityOrder(){return this.soundBankList.map(e=>e.id)}set priorityOrder(e){this.soundBankList.sort((A,t)=>e.indexOf(A.id)-e.indexOf(t.id)),this.generatePresetList()}deleteSoundBank(e){if(this.soundBankList.length===0){nA("1 soundbank left. Aborting!");return}let A=this.soundBankList.findIndex(t=>t.id===e);if(A===-1)throw new Error(`No sound bank with id "${e}"`);this.soundBankList.splice(A,1),this.generatePresetList()}addSoundBank(e,A,t=0){let n=this.soundBankList.find(s=>s.id===A);n!==void 0?(n.soundBank=e,n.bankOffset=t):this.soundBankList.push({id:A,soundBank:e,bankOffset:t}),this.generatePresetList()}getPreset(e,A){if(this.soundBankList.length<1)throw new Error("No sound banks! Did you forget to add one?");return Ca(this.selectablePresetList,e,A)}destroy(){this.soundBankList.forEach(e=>{e.soundBank.destroySoundBank()}),this.soundBankList=[]}generatePresetList(){let e=new Array,A=new Set;this.soundBankList.forEach(t=>{let n=t.soundBank,s=t.bankOffset;n.presets.forEach(a=>{let r=new Ho(a,s);A.has(r.toMIDIString())||(A.add(r.toMIDIString()),e.push(r))})}),e.sort(te.sorter.bind(te)),this.selectablePresetList=e,this._presetList=e.map(t=>({bankMSB:t.bankMSB,bankLSB:t.bankLSB,program:t.program,isGMGSDrum:t.isGMGSDrum,name:t.name,isAnyDrums:t.isAnyDrums})),this.presetListChangeCallback()}},Po=.05,Jo=3070,qo=2e3,Fs=Math.PI/2,Lt=-500,ha=500,rs=ha-Lt,la=new Float32Array(rs+1),da=new Float32Array(rs+1);for(let e=Lt;e<=ha;e++){let A=(e-Lt)/rs,t=e-Lt;la[t]=Math.cos(Fs*A),da[t]=Math.sin(Fs*A)}function Ko(e,A,t,n,s,a,r,i,o){if(isNaN(A[0]))return;let g;e.overridePan?g=e.overridePan:(e.currentPan+=(e.modulatedGenerators[I.pan]-e.currentPan)*this.synthProps.panSmoothingFactor,g=e.currentPan);let c=this.synthProps.masterParameters.masterGain*this.synthProps.midiVolume*e.gain,h=~~(g+500),C=la[h]*c*this.synthProps.panLeft,d=da[h]*c*this.synthProps.panRight;if(this.synth.enableEffects){let u=e.modulatedGenerators[I.reverbEffectsSend];if(u>0){let m=this.synthProps.masterParameters.reverbGain*this.synthProps.reverbSend*c*(u/Jo);for(let k=0;k<A.length;k++){let w=k+o;s[w]+=m*A[k],a[w]+=m*A[k]}}let S=e.modulatedGenerators[I.chorusEffectsSend];if(S>0){let m=this.synthProps.masterParameters.chorusGain*this.synthProps.chorusSend*(S/qo),k=C*m,w=d*m;for(let M=0;M<A.length;M++){let P=M+o;r[P]+=k*A[M],i[P]+=w*A[M]}}}if(C>0)for(let u=0;u<A.length;u++)t[u+o]+=C*A[u];if(d>0)for(let u=0;u<A.length;u++)n[u+o]+=d*A[u]}var Oo=.1,Ot=class Et{static cachedCoefficients=[];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(A){this.sampleRate=A,this.maxCutoff=A*.45}static apply(A,t,n,s){let a=A.modulatedGenerators[I.initialFilterFc],r=A.filter;r.initialized?r.currentInitialFc+=(a-r.currentInitialFc)*s:(r.initialized=!0,r.currentInitialFc=a);let i=r.currentInitialFc+n,o=A.modulatedGenerators[I.initialFilterQ];if(r.currentInitialFc>13499&&i>13499&&o===0){r.currentInitialFc=13500;return}(Math.abs(r.lastTargetCutoff-i)>1||r.resonanceCb!==o)&&(r.lastTargetCutoff=i,r.resonanceCb=o,Et.calculateCoefficients(r,i));for(let g=0;g<t.length;g++){let c=t[g],h=r.a0*c+r.a1*r.x1+r.a2*r.x2-r.a3*r.y1-r.a4*r.y2;r.x2=r.x1,r.x1=c,r.y2=r.y1,r.y1=h,t[g]=h}}static calculateCoefficients(A,t){t=~~t;let n=A.resonanceCb,s=Et.cachedCoefficients?.[n]?.[t];if(s!==void 0){A.a0=s.a0,A.a1=s.a1,A.a2=s.a2,A.a3=s.a3,A.a4=s.a4;return}let a=Ln(t);a=Math.min(a,A.maxCutoff);let r=n/10,i=Ae(-(r-3.01)),o=1/Math.sqrt(Ae(-r)),g=2*Math.PI*a/A.sampleRate,c=Math.cos(g),h=Math.sin(g)/(2*i),C=(1-c)*o,d=C/2,u=d,S=1+h,m=-2*c,k=1-h,w={a0:d/S,a1:C/S,a2:u/S,a3:m/S,a4:k/S};A.a0=w.a0,A.a1=w.a1,A.a2=w.a2,A.a3=w.a3,A.a4=w.a4,Et.cachedCoefficients[n]??=[],Et.cachedCoefficients[n][t]=w}},xn=new Ot(44100);xn.resonanceCb=0;for(let e=1500;e<13500;e++)xn.currentInitialFc=e,Ot.calculateCoefficients(xn,e);var Gs={enableEventSystem:!0,initialTime:0,enableEffects:!0};function Vo(e,A){let t=0;return e.drumChannel&&(t+=5),A.isInRelease&&(t-=5),t+=A.velocity/25,t-=A.volumeEnvelope.state,A.isInRelease&&(t-=5),t-=A.volumeEnvelope.currentAttenuationDb/50,t}function Xo(e){let A=[];for(let n of this.midiChannels)for(let s of n.voices)if(!s.finished){let a=Vo(n,s);A.push({channel:n,voice:s,priority:a})}A.sort((n,s)=>n.priority-s.priority);let t=A.slice(0,e);for(let{channel:n,voice:s}of t){let a=n.voices.indexOf(s);a>-1&&n.voices.splice(a,1)}}var un=1,Hn=new Float32Array(1e3);for(let e=0;e<Hn.length;e++)Hn[e]=ra(0,QA.convex,e/1e3);var ze=class Yn{attackDuration=0;decayDuration=0;holdDuration=0;releaseDuration=0;sustainLevel=0;delayEnd=0;attackEnd=0;holdEnd=0;decayEnd=0;releaseStartLevel=0;currentValue=0;static startRelease(A){Yn.recalculate(A)}static recalculate(A){let t=A.modulationEnvelope;A.isInRelease&&(t.releaseStartLevel=Yn.getValue(A,A.releaseStartTime,!0)),t.sustainLevel=1-A.modulatedGenerators[I.sustainModEnv]/1e3,t.attackDuration=Qe(A.modulatedGenerators[I.attackModEnv]);let n=(60-A.midiNote)*A.modulatedGenerators[I.keyNumToModEnvDecay],s=Qe(A.modulatedGenerators[I.decayModEnv]+n);t.decayDuration=s*(1-t.sustainLevel);let a=(60-A.midiNote)*A.modulatedGenerators[I.keyNumToModEnvHold];t.holdDuration=Qe(a+A.modulatedGenerators[I.holdModEnv]);let r=Qe(Math.max(A.modulatedGenerators[I.releaseModEnv],-7200));t.releaseDuration=r*t.releaseStartLevel,t.delayEnd=A.startTime+Qe(A.modulatedGenerators[I.delayModEnv]),t.attackEnd=t.delayEnd+t.attackDuration,t.holdEnd=t.attackEnd+t.holdDuration,t.decayEnd=t.holdEnd+t.decayDuration}static getValue(A,t,n=!1){let s=A.modulationEnvelope;return A.isInRelease&&!n?s.releaseStartLevel===0?0:Math.max(0,(1-(t-A.releaseStartTime)/s.releaseDuration)*s.releaseStartLevel):(t<s.delayEnd?s.currentValue=0:t<s.attackEnd?s.currentValue=Hn[~~((1-(s.attackEnd-t)/s.attackDuration)*1e3)]:t<s.holdEnd?s.currentValue=un:t<s.decayEnd?s.currentValue=(1-(s.decayEnd-t)/s.decayDuration)*(s.sustainLevel-un)+un:s.currentValue=s.sustainLevel,s.currentValue)}},Qa=class{sampleData;playbackStep=0;cursor=0;rootKey=0;loopStart=0;loopEnd=0;end=0;loopingMode=0;isLooping=!1;constructor(e,A,t,n,s,a,r,i){this.sampleData=e,this.playbackStep=A,this.cursor=t,this.rootKey=n,this.loopStart=s,this.loopEnd=a,this.end=r,this.loopingMode=i,this.isLooping=this.loopingMode===1||this.loopingMode===3}},Zo=-2320,Wo=-1130,fn=class ua{sample;filter;gain=1;generators;modulators=[];resonanceOffset=0;modulatedGenerators;finished=!1;isInRelease=!1;velocity=0;midiNote=0;pressure=0;targetKey=0;modulationEnvelope=new ze;volumeEnvelope;startTime=0;releaseStartTime=1/0;currentTuningCents=0;currentTuningCalculated=1;currentPan=0;realKey;portamentoFromKey=-1;portamentoDuration=0;overridePan=0;exclusiveClass=0;constructor(A,t,n,s,a,r,i,o,g){this.sample=t,this.generators=o,this.exclusiveClass=this.generators[I.exclusiveClass],this.modulatedGenerators=new Int16Array(o),this.modulators=g,this.filter=new Ot(A),this.velocity=s,this.midiNote=n,this.startTime=a,this.targetKey=r,this.realKey=i,this.volumeEnvelope=new Re(A,o[I.sustainVolEnv])}static copyFrom(A,t,n){let s=A.sample,a=new Qa(s.sampleData,s.playbackStep,s.cursor,s.rootKey,s.loopStart,s.loopEnd,s.end,s.loopingMode);return new ua(A.volumeEnvelope.sampleRate,a,A.midiNote,A.velocity,t,A.targetKey,n,new Int16Array(A.generators),A.modulators.map(cA.copyFrom.bind(cA)))}exclusiveRelease(A){this.release(A,Va),this.modulatedGenerators[I.releaseVolEnv]=Zo,this.modulatedGenerators[I.releaseModEnv]=Wo,Re.recalculate(this),ze.recalculate(this)}release(A,t=Oa){this.releaseStartTime=A,this.releaseStartTime-this.startTime<t&&(this.releaseStartTime=this.startTime+t)}};function zo(e,A,t,n){let s=this.getCachedVoice(e,A,t);if(s!==void 0)return s.map(r=>fn.copyFrom(r,this.currentSynthTime,n));let a=e.getSynthesisData(A,t).reduce((r,i)=>{if(i.sample.getAudioData()===void 0)return nA(`Discarding invalid sample: ${i.sample.name}`),r;let o=new Int16Array(Rn);for(let k=0;k<60;k++)o[k]=Lo(k,i.presetGenerators,i.instrumentGenerators);o[I.initialAttenuation]=Math.floor(o[I.initialAttenuation]*.4);let g=i.sample.originalKey;o[I.overridingRootKey]>-1&&(g=o[I.overridingRootKey]);let c=A;o[I.keyNum]>-1&&(c=o[I.keyNum]);let h=i.sample.loopStart,C=i.sample.loopEnd,d=o[I.sampleModes],u=i.sample.getAudioData(),S=new Qa(u,i.sample.sampleRate/this.sampleRate*Math.pow(2,i.sample.pitchCorrection/1200),0,g,h,C,Math.floor(u.length)-1,d),m=t;return o[I.velocity]>-1&&(m=o[I.velocity]),r.push(new fn(this.sampleRate,S,A,m,this.currentSynthTime,c,n,o,i.modulators.map(cA.copyFrom.bind(cA)))),r},[]);return this.setCachedVoice(e,A,t,a),a.map(r=>fn.copyFrom(r,this.currentSynthTime,n))}function _o(e,A,t,n){let s=this.midiChannels[e],a=this.keyModifierManager.hasOverridePatch(e,A),r=s.preset;if(!r)return nA(`No preset for channel ${e}!`),[];if(a){let i=this.keyModifierManager.getPatch(e,A);r=this.soundBankManager.getPreset(i,this.privateProps.masterParameters.midiSystem)}return this.getVoicesForPreset(r,A,t,n)}function Rs(e,A,t){let n=e,s=A<<7|t;return e===127&&A===127&&t===127?{midiNote:-1,centTuning:null}:{midiNote:n,centTuning:s*.0061}}function jo(e,A=0){let t=e[0];if(this.privateProps.masterParameters.deviceID!==Be&&e[1]!==127&&this.privateProps.masterParameters.deviceID!==e[1])return;function n(a,r,i,o){y(`%cChannel %c${a}%c ${i}. %c${r} ${o}%c, with %c${vA(e)}`,E.info,E.recognized,E.info,E.value,E.info,E.value)}switch(t){default:y(`%cUnrecognized SysEx: %c${vA(e)}`,E.warn,E.unrecognized);break;case 126:case 127:switch(e[2]){case 4:{let a;switch(e[3]){case 1:{let r=e[5]<<7|e[4];this.setMIDIVolume(r/16384),y(`%cMaster Volume. Volume: %c${r}`,E.info,E.value);break}case 2:{let i=((e[5]<<7|e[4])-8192)/8192;this.setMasterParameter("masterPan",i),y(`%cMaster Pan. Pan: %c${i}`,E.info,E.value);break}case 3:{let r=(e[5]<<7|e[6])-8192;a=Math.floor(r/81.92),this.setMasterTuning(a),y(`%cMaster Fine Tuning. Cents: %c${a}`,E.info,E.value);break}case 4:{a=(e[5]-64)*100,this.setMasterTuning(a),y(`%cMaster Coarse Tuning. Cents: %c${a}`,E.info,E.value);break}default:y(`%cUnrecognized MIDI Device Control Real-time message: %c${vA(e)}`,E.warn,E.unrecognized)}break}case 9:e[3]===1?(y("%cGM1 system on",E.info),this.setMasterParameter("midiSystem","gm")):e[3]===3?(y("%cGM2 system on",E.info),this.setMasterParameter("midiSystem","gm2")):(y("%cGM system off, defaulting to GS",E.info),this.setMasterParameter("midiSystem","gs"));break;case 8:{let a=4;switch(e[3]){case 1:{let r=e[a++],i=ee(e,16,a);if(a+=16,e.length<384){nA(`The Bulk Tuning Dump is too short! (${e.length} bytes, at least 384 are expected)`);return}for(let o=0;o<128;o++)this.privateProps.tunings[r][o]=Rs(e[a++],e[a++],e[a++]);y(`%cBulk Tuning Dump %c${i}%c Program: %c${r}`,E.info,E.value,E.info,E.recognized);break}case 2:case 7:{e[3]===7&&a++;let r=e[a++],i=e[a++];for(let o=0;o<i;o++)this.privateProps.tunings[r][e[a++]]=Rs(e[a++],e[a++],e[a++]);y(`%cSingle Note Tuning. Program: %c${r}%c Keys affected: %c${i}`,E.info,E.recognized,E.info,E.recognized);break}case 9:case 8:{let r=new Int8Array(12);if(e[3]===8)for(let i=0;i<12;i++)r[i]=e[7+i]-64;else for(let i=0;i<24;i+=2){let o=(e[7+i]<<7|e[8+i])-8192;r[i/2]=Math.floor(o/81.92)}(e[4]&1)===1&&this.midiChannels[14+A].setOctaveTuning(r),(e[4]>>1&1)===1&&this.midiChannels[15+A].setOctaveTuning(r);for(let i=0;i<7;i++)(e[5]>>i&1)===1&&this.midiChannels[7+i+A].setOctaveTuning(r);for(let i=0;i<7;i++)(e[6]>>i&1)===1&&this.midiChannels[i+A].setOctaveTuning(r);y(`%cMIDI Octave Scale ${e[3]===8?"(1 byte)":"(2 bytes)"} tuning via Tuning: %c${r.join(" ")}`,E.info,E.value);break}default:y(`%cUnrecognized MIDI Tuning standard message: %c${vA(e)}`,E.warn,E.unrecognized);break}break}default:y(`%cUnrecognized MIDI Realtime/non realtime message: %c${vA(e)}`,E.warn,E.unrecognized)}break;case 65:if(e[3]===18){let a=function(){y(`%cUnrecognized Roland %cGS %cSysEx: %c${vA(e)}`,E.warn,E.recognized,E.warn,E.unrecognized)};var s=a;switch(e[2]){case 66:{let r=e[7];if(e[4]===64||e[4]===0&&e[6]===127){if((e[5]&16)>0){let i=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][e[5]&15]+A,o=this.midiChannels[i];switch(e[6]){default:a();break;case 21:{let g=r>0&&e[5]>>4>0;o.setGSDrums(g),y(`%cChannel %c${i}%c ${g?"is now a drum channel":"now isn't a drum channel"}%c via: %c${vA(e)}`,E.info,E.value,E.recognized,E.info,E.value);return}case 22:{let g=r-64;o.setCustomController(rA.channelKeyShift,g),n(i,g,"key shift","keys");return}case 28:{let g=r;g===0?(o.randomPan=!0,y(`%cRandom pan is set to %cON%c for %c${i}`,E.info,E.recognized,E.info,E.value)):(o.randomPan=!1,o.controllerChange(p.pan,g));break}case 33:o.controllerChange(p.chorusDepth,r);break;case 34:o.controllerChange(p.reverbDepth,r);break;case 64:case 65:case 66:case 67:case 68:case 69:case 70:case 71:case 72:case 73:case 74:case 75:{let g=e.length-9,c=new Int8Array(12);for(let C=0;C<g;C++)c[C]=e[C+7]-64;o.setOctaveTuning(c);let h=r-64;n(i,c.join(" "),"octave scale tuning","cents"),o.setTuning(h);break}}return}else if((e[5]&32)>0){let i=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][e[5]&15]+A,o=this.midiChannels[i],g=r-64,c=g/64,h=r/128,C=(d,u,S=!1)=>{switch(e[6]&15){case 0:d===SA+AA.pitchWheel?(o.controllerChange(p.registeredParameterMSB,0),o.controllerChange(p.registeredParameterLSB,0),o.controllerChange(p.dataEntryMSB,Math.floor(g))):(o.sysExModulators.setModulator(d,I.fineTune,g*100,S),n(i,g,`${u} pitch control`,"semitones"));break;case 1:o.sysExModulators.setModulator(d,I.initialFilterFc,c*9600,S),n(i,c*9600,`${u} pitch control`,"cents");break;case 2:o.sysExModulators.setModulator(d,I.initialAttenuation,c*960,S),n(i,c*960,`${u} amplitude`,"cB");break;case 4:o.sysExModulators.setModulator(d,I.vibLfoToPitch,h*600,S),n(i,h*600,`${u} LFO1 pitch depth`,"cents");break;case 5:o.sysExModulators.setModulator(d,I.vibLfoToFilterFc,h*2400,S),n(i,h*2400,`${u} LFO1 filter depth`,"cents");break;case 6:o.sysExModulators.setModulator(d,I.vibLfoToVolume,c*960,S),n(i,c*960,`${u} LFO1 amplitude depth`,"cB");break;case 8:o.sysExModulators.setModulator(d,I.modLfoToPitch,h*600,S),n(i,h*600,`${u} LFO2 pitch depth`,"cents");break;case 9:o.sysExModulators.setModulator(d,I.modLfoToFilterFc,h*2400,S),n(i,h*2400,`${u} LFO2 filter depth`,"cents");break;case 10:o.sysExModulators.setModulator(d,I.modLfoToVolume,c*960,S),n(i,c*960,`${u} LFO2 amplitude depth`,"cB");break}};switch(e[6]&240){default:a();break;case 0:C(p.modulationWheel,"mod wheel");break;case 16:C(SA+AA.pitchWheel,"pitch wheel",!0);break;case 32:C(SA+AA.channelPressure,"channel pressure");break;case 48:C(SA+AA.polyPressure,"poly pressure");break}return}else if(e[5]===0){switch(e[6]){default:a();break;case 127:r===0?(y("%cGS Reset received!",E.info),this.resetAllControllers(!1),this.setMasterParameter("midiSystem","gs")):r===127&&(y("%cGS system off, switching to GM",E.info),this.resetAllControllers(!1),this.setMasterParameter("midiSystem","gm"));break;case 6:y(`%cRoland GS Master Pan set to: %c${r}%c with: %c${vA(e)}`,E.info,E.value,E.info,E.value),this.setMasterParameter("masterPan",(r-64)/64);break;case 4:y(`%cRoland GS Master Volume set to: %c${r}%c with: %c${vA(e)}`,E.info,E.value,E.info,E.value),this.setMIDIVolume(r/127);break;case 5:{let i=r-64;y(`%cRoland GS Master Key-Shift set to: %c${i}%c with: %c${vA(e)}`,E.info,E.value,E.info,E.value),this.setMasterTuning(i*100);break}}return}else if(e[5]===1)switch(e[6]){default:a();break;case 0:{let i=ee(e,16,7);y(`%cGS Patch name: %c${i}`,E.info,E.value);break}case 51:y(`%cGS Reverb level: %c${r}`,E.info,E.value),this.privateProps.reverbSend=r/64;break;case 48:case 49:case 50:case 52:case 53:case 55:y(`%cUnsupported GS Reverb Parameter: %c${e[6].toString(16)}`,E.warn,E.unrecognized);break;case 58:y(`%cGS Chorus level: %c${r}`,E.info,E.value),this.privateProps.chorusSend=r/64;break;case 56:case 57:case 59:case 60:case 61:case 62:case 63:case 64:y(`%cUnsupported GS Chorus Parameter: %c${e[6].toString(16)}`,E.warn,E.unrecognized);break}}else a();return}case 69:{e[4]===16&&(e[5]===0?this.privateProps.callEvent("synthDisplay",Array.from(e)):e[5]===1?this.privateProps.callEvent("synthDisplay",Array.from(e)):a());return}case 22:if(e[4]===16){this.setMIDIVolume(e[7]/100),y(`%cRoland Master Volume control set to: %c${e[7]}%c via: %c${vA(e)}`,E.info,E.value,E.info,E.value);return}}}else{y(`%cUnrecognized Roland SysEx: %c${vA(e)}`,E.warn,E.unrecognized);return}break;case 67:if(e[2]===76)if(e[3]===0&&e[4]===0)switch(e[5]){case 4:{let a=e[6];this.setMIDIVolume(a/127),y(`%cXG master volume. Volume: %c${a}`,E.info,E.recognized);break}case 6:{let a=e[6]-64;this.setMasterParameter("transposition",a),y(`%cXG master transpose. Volume: %c${a}`,E.info,E.recognized);break}case 126:y("%cXG system on",E.info),this.resetAllControllers(!1),this.setMasterParameter("midiSystem","xg");break}else if(e[3]===8){if(!fA.isSystemXG(this.privateProps.masterParameters.midiSystem))return;let a=e[4]+A;if(a>=this.midiChannels.length)return;let r=this.midiChannels[a],i=e[6];switch(e[5]){case 1:r.controllerChange(p.bankSelect,i);break;case 2:r.controllerChange(p.bankSelectLSB,i);break;case 3:r.programChange(i);break;case 8:{if(r.drumChannel)return;r.channelTransposeKeyShift=i-64;break}case 11:r.controllerChange(p.mainVolume,i);break;case 14:{let o=i;o===0?(r.randomPan=!0,y(`%cRandom pan is set to %cON%c for %c${a}`,E.info,E.recognized,E.info,E.value)):r.controllerChange(p.pan,o);break}case 19:r.controllerChange(p.reverbDepth,i);break;case 18:r.controllerChange(p.chorusDepth,i);break;default:y(`%cUnrecognized Yamaha XG Part Setup: %c${e[5].toString(16).toUpperCase()}`,E.warn,E.unrecognized)}}else e[3]===6&&e[4]===0?this.privateProps.callEvent("synthDisplay",Array.from(e)):fA.isSystemXG(this.privateProps.masterParameters.midiSystem)&&y(`%cUnrecognized Yamaha XG SysEx: %c${vA(e)}`,E.warn,E.unrecognized);else fA.isSystemXG(this.privateProps.masterParameters.midiSystem)&&y(`%cUnrecognized Yamaha SysEx: %c${vA(e)}`,E.warn,E.unrecognized);break}}var Ms=class Pn{patch;lockPreset;lockedSystem;midiControllers;lockedControllers;customControllers;lockVibrato;channelVibrato;channelTransposeKeyShift;channelOctaveTuning;isMuted;drumChannel;channelNumber;constructor(A,t,n,s,a,r,i,o,g,c,h,C,d){this.patch=A,this.lockPreset=t,this.lockedSystem=n,this.midiControllers=s,this.lockedControllers=a,this.customControllers=r,this.lockVibrato=i,this.channelVibrato=o,this.channelTransposeKeyShift=g,this.channelOctaveTuning=c,this.isMuted=h,this.drumChannel=C,this.channelNumber=d}static copyFrom(A){return new Pn({...A.patch},A.lockPreset,A.lockedSystem,A.midiControllers.slice(),[...A.lockedControllers],A.customControllers.slice(),A.lockVibrato,{...A.channelVibrato},A.channelTransposeKeyShift,A.channelOctaveTuning,A.isMuted,A.drumChannel,A.channelNumber)}static create(A,t){let n=A.midiChannels[t];return new Pn({...n.patch,name:n?.preset?.name??"undefined"},n.lockPreset,n.lockedSystem,n.midiControllers.slice(),[...n.lockedControllers],n.customControllers.slice(),n.lockGSNRPNParams,{...n.channelVibrato},n.channelTransposeKeyShift,n.channelOctaveTuning.slice(),n.isMuted,n.drumChannel,t)}apply(A){let t=A.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=this.channelVibrato,t.lockGSNRPNParams=this.lockVibrato,t.channelTransposeKeyShift=this.channelTransposeKeyShift,t.channelOctaveTuning=this.channelOctaveTuning,t.setPresetLock(!1),t.setPatch(this.patch),t.setPresetLock(this.lockPreset),t.lockedSystem=this.lockedSystem}};var $o=class{keyMappings=[];addMapping(e,A,t){this.keyMappings[e]??=[],this.keyMappings[e][A]=t}deleteMapping(e,A){this.keyMappings[e]?.[A]!==void 0&&(this.keyMappings[e][A]=void 0)}clearMappings(){this.keyMappings=[]}setMappings(e){this.keyMappings=e}getMappings(){return this.keyMappings}getVelocity(e,A){return this.keyMappings[e]?.[A]?.velocity??-1}getGain(e,A){return this.keyMappings[e]?.[A]?.gain??1}hasOverridePatch(e,A){let t=this.keyMappings[e]?.[A]?.patch?.bankMSB;return t!==void 0&&t>=0}getPatch(e,A){let t=this.keyMappings[e]?.[A];if(t)return t.patch;throw new Error("No modifier.")}},is=class Jn{channelSnapshots;keyMappings;masterParameters;constructor(A,t,n){this.channelSnapshots=A,this.masterParameters=t,this.keyMappings=n}static create(A){let t=A.midiChannels.map((n,s)=>Ms.create(A,s));return new Jn(t,A.getAllMasterParameters(),A.keyModifierManager.getMappings())}static copyFrom(A){return new Jn(A.channelSnapshots.map(t=>Ms.copyFrom(t)),{...A.masterParameters},[...A.keyMappings])}apply(A){for(Object.entries(this.masterParameters).forEach(([n,s])=>{A.setMasterParameter(n,s)}),A.keyModifierManager.setMappings(this.keyMappings);A.midiChannels.length<this.channelSnapshots.length;)A.createMIDIChannel();this.channelSnapshots.forEach(n=>{n.apply(A)})}},Ar={masterGain:Xa,masterPan:0,voiceCap:qa,interpolationType:bt.hermite,midiSystem:Vs,monophonicRetriggerMode:!1,reverbGain:1,chorusGain:1,blackMIDIMode:!1,transposition:0,deviceID:Be},er=class{tunings=[];masterParameters=Ar;midiVolume=1;reverbSend=1;chorusSend=1;panLeft=.5;panRight=.5;defaultPreset;drumPreset;volumeEnvelopeSmoothingFactor;panSmoothingFactor;filterSmoothingFactor;eventCallbackHandler;getVoices;voiceKilling;cachedVoices=[];constructor(e,A,t,n,s,a){this.eventCallbackHandler=e,this.getVoices=A,this.voiceKilling=t,this.volumeEnvelopeSmoothingFactor=n,this.panSmoothingFactor=s,this.filterSmoothingFactor=a;for(let r=0;r<128;r++)this.tunings.push([])}callEvent(e,A){this.eventCallbackHandler(e,A)}};function mn(e,A,t){if(t<e)return 0;let n=(t-e)/(1/A)+.25;return Math.abs(n-~~(n+.5))*4-1}var tr=class qn{static getSample(A,t,n){let s=A.currentTuningCalculated*A.sample.playbackStep;if(s===1){qn.getSampleNearest(A,t,s);return}switch(n){case bt.hermite:this.getSampleHermite(A,t,s);return;case bt.linear:default:this.getSampleLinear(A,t,s);return;case bt.nearestNeighbor:qn.getSampleNearest(A,t,s);return}}static getSampleLinear(A,t,n){let s=A.sample,a=s.cursor,r=s.sampleData;if(s.isLooping){let i=s.loopEnd-s.loopStart;for(let o=0;o<t.length;o++){for(;a>=s.loopEnd;)a-=i;let g=~~a,c=g+1;for(;c>=s.loopEnd;)c-=i;let h=a-g,C=r[c],d=r[g];t[o]=d+(C-d)*h,a+=n}}else for(let i=0;i<t.length;i++){let o=~~a,g=o+1;if(g>=s.end){A.finished=!0;return}let c=a-o,h=r[g],C=r[o];t[i]=C+(h-C)*c,a+=n}A.sample.cursor=a}static getSampleNearest(A,t,n){let s=A.sample,a=s.cursor,r=s.sampleData;if(s.isLooping){let i=s.loopEnd-s.loopStart;for(let o=0;o<t.length;o++){for(;a>=s.loopEnd;)a-=i;let g=~~a+1;for(;g>=s.loopEnd;)g-=i;t[o]=r[g],a+=n}}else for(let i=0;i<t.length;i++){let o=~~a+1;if(o>=s.end){A.finished=!0;return}t[i]=r[o],a+=n}s.cursor=a}static getSampleHermite(A,t,n){let s=A.sample,a=s.cursor,r=s.sampleData;if(s.isLooping){let i=s.loopEnd-s.loopStart;for(let o=0;o<t.length;o++){for(;a>=s.loopEnd;)a-=i;let g=~~a,c=g+1,h=g+2,C=g+3,d=a-g;c>=s.loopEnd&&(c-=i),h>=s.loopEnd&&(h-=i),C>=s.loopEnd&&(C-=i);let u=r[g],S=r[c],m=r[h],k=r[C],w=(m-u)*.5,M=S-m,P=w+M,x=P+M+(k-S)*.5,B=P+x;t[o]=((x*d-B)*d+w)*d+S,a+=n}}else for(let i=0;i<t.length;i++){let o=~~a,g=o+1,c=o+2,h=o+3,C=a-o;if(g>=s.end||c>=s.end||h>=s.end){A.finished=!0;return}let d=r[o],u=r[g],S=r[c],m=r[h],k=(S-d)*.5,w=u-S,M=k+w,P=M+w+(m-u)*.5,x=M+P;t[i]=((P*C-x)*C+k)*C+u,a+=n}A.sample.cursor=a}};function nr(e,A,t,n,s,a,r,i,o,g){if(e.isInRelease||A>=e.releaseStartTime&&(e.isInRelease=!0,Re.startRelease(e),ze.startRelease(e),e.sample.loopingMode===3&&(e.sample.isLooping=!1)),e.modulatedGenerators[I.initialAttenuation]>2500)return e.isInRelease&&(e.finished=!0),e.finished;let c=e.targetKey,h=e.modulatedGenerators[I.fineTune]+this.channelOctaveTuning[e.midiNote]+this.channelTuningCents,C=e.modulatedGenerators[I.coarseTune],d=this.synthProps.tunings[this.preset?.program??0]?.[e.realKey];if(d?.centTuning&&(c=d.midiNote,h+=d.centTuning),e.portamentoFromKey>-1){let U=Math.min((A-e.startTime)/e.portamentoDuration,1),K=c-e.portamentoFromKey;C-=K*(1-U)}h+=(c-e.sample.rootKey)*e.modulatedGenerators[I.scaleTuning];let u=0,S=0,m=e.modulatedGenerators[I.vibLfoToPitch],k=e.modulatedGenerators[I.vibLfoToVolume],w=e.modulatedGenerators[I.vibLfoToFilterFc];if(m!==0||k!==0||w!==0){let U=e.startTime+Qe(e.modulatedGenerators[I.delayVibLFO]),K=Ln(e.modulatedGenerators[I.freqVibLFO]),q=mn(U,K,A);h+=q*(m*this.customControllers[rA.modulationMultiplier]),S+=-q*k,u+=q*w}let M=e.modulatedGenerators[I.modLfoToPitch],P=e.modulatedGenerators[I.modLfoToVolume],x=e.modulatedGenerators[I.modLfoToFilterFc];if(M!==0||x!==0||P!==0){let U=e.startTime+Qe(e.modulatedGenerators[I.delayModLFO]),K=Ln(e.modulatedGenerators[I.freqModLFO]),q=mn(U,K,A);h+=q*(M*this.customControllers[rA.modulationMultiplier]),S+=-q*P,u+=q*x}if(this.channelVibrato.depth>0){let U=mn(e.startTime+this.channelVibrato.delay,this.channelVibrato.rate,A);U&&(h+=U*this.channelVibrato.depth)}let B=e.modulatedGenerators[I.modEnvToPitch],j=e.modulatedGenerators[I.modEnvToFilterFc];if(j!==0||B!==0){let U=ze.getValue(e,A);u+=U*j,h+=U*B}S-=e.resonanceOffset;let J=~~(h+C*100);J!==e.currentTuningCents&&(e.currentTuningCents=J,e.currentTuningCalculated=Math.pow(2,J/1200));let Y=new Float32Array(g);return e.sample.loopingMode===2&&!e.isInRelease?(Re.apply(e,Y,S,this.synthProps.volumeEnvelopeSmoothingFactor),e.finished):(tr.getSample(e,Y,this.synthProps.masterParameters.interpolationType),Ot.apply(e,Y,u,this.synthProps.filterSmoothingFactor),Re.apply(e,Y,S,this.synthProps.volumeEnvelopeSmoothingFactor),this.panAndMixVoice(e,Y,t,n,s,a,r,i,o),e.finished)}var ue={pitchWheelRange:0,fineTuning:1,coarseTuning:2,modulationDepth:5,resetParameters:16383},Ve={partParameter:1,awe32:127,SF2:120},qe={vibratoRate:8,vibratoDepth:9,vibratoDelay:10,TVFFilterCutoff:32,TVFFilterResonance:33,EGAttackTime:99,EGReleaseTime:102};function sr(e){this.midiControllers[p.dataEntryMSB]=e<<7;let A=()=>{this.channelVibrato.delay===0&&this.channelVibrato.rate===0&&this.channelVibrato.depth===0&&(this.channelVibrato.depth=50,this.channelVibrato.rate=8,this.channelVibrato.delay=.6)},t=(n,s,a)=>{a.length>0&&(a=" "+a),y(`%c${n} for %c${this.channelNumber}%c is now set to %c${s}%c${a}.`,E.info,E.recognized,E.info,E.value,E.info)};switch(this.dataEntryState){default:case YA.Idle:break;case YA.NRPFine:{if(this.lockGSNRPNParams)return;let n=this.midiControllers[p.nonRegisteredParameterMSB]>>7,s=this.midiControllers[p.nonRegisteredParameterLSB]>>7,a=this.midiControllers[p.dataEntryLSB]>>7;switch(n){default:if(e===64)return;y(`%cUnrecognized NRPN for %c${this.channelNumber}%c: %c(0x${s.toString(16).toUpperCase()} 0x${s.toString(16).toUpperCase()})%c data value: %c${e}`,E.warn,E.recognized,E.warn,E.unrecognized,E.warn,E.value);break;case Ve.partParameter:switch(s){default:if(e===64)return;y(`%cUnrecognized NRPN for %c${this.channelNumber}%c: %c(0x${n.toString(16)} 0x${s.toString(16)})%c data value: %c${e}`,E.warn,E.recognized,E.warn,E.unrecognized,E.warn,E.value);break;case qe.vibratoRate:if(e===64)return;A(),this.channelVibrato.rate=e/64*8,t("Vibrato rate",`${e} = ${this.channelVibrato.rate}`,"Hz");break;case qe.vibratoDepth:if(e===64)return;A(),this.channelVibrato.depth=e/2,t("Vibrato depth",`${e} = ${this.channelVibrato.depth}`,"cents of detune");break;case qe.vibratoDelay:if(e===64)return;A(),this.channelVibrato.delay=e/64/3,t("Vibrato delay",`${e} = ${this.channelVibrato.delay}`,"seconds");break;case qe.TVFFilterCutoff:this.controllerChange(p.brightness,e),t("Filter cutoff",e.toString(),"");break;case qe.EGAttackTime:this.controllerChange(p.attackTime,e),t("EG attack time",e.toString(),"");break;case qe.EGReleaseTime:this.controllerChange(p.releaseTime,e),t("EG release time",e.toString(),"");break}break;case Ve.awe32:break;case Ve.SF2:{if(s>100)break;let r=this.customControllers[rA.sf2NPRNGeneratorLSB],i=(e<<7|a)-8192;this.setGeneratorOffset(r,i);break}}break}case YA.RPCoarse:case YA.RPFine:{let n=this.midiControllers[p.registeredParameterMSB]|this.midiControllers[p.registeredParameterLSB]>>7;switch(n){default:y(`%cUnrecognized RPN for %c${this.channelNumber}%c: %c(0x${n.toString(16)})%c data value: %c${e}`,E.warn,E.recognized,E.warn,E.unrecognized,E.warn,E.value);break;case ue.pitchWheelRange:this.midiControllers[SA+AA.pitchWheelRange]=e<<7,t("Pitch wheel range",e.toString(),"semitones");break;case ue.coarseTuning:{let s=e-64;this.setCustomController(rA.channelTuningSemitones,s),t("Coarse tuning",s.toString(),"semitones");break}case ue.fineTuning:this.setTuning(e-64,!1);break;case ue.modulationDepth:this.setModulationDepth(e*100);break;case ue.resetParameters:this.resetParameters();break}}}}var ar=[I.delayModLFO,I.freqModLFO,I.delayVibLFO,I.freqVibLFO,I.delayModEnv,I.attackModEnv,I.holdModEnv,I.decayModEnv,I.sustainModEnv,I.releaseModEnv,I.delayVolEnv,I.attackVolEnv,I.holdVolEnv,I.decayVolEnv,I.sustainVolEnv,I.releaseVolEnv,I.fineTune,I.modLfoToPitch,I.vibLfoToPitch,I.modEnvToPitch,I.modLfoToVolume,I.initialFilterFc,I.initialFilterQ,I.modLfoToFilterFc,I.modEnvToFilterFc,I.chorusEffectsSend,I.reverbEffectsSend];function or(e,A,t){let n=(C,d,u)=>Math.max(d,Math.min(u,C)),s=C=>Math.max(-32768,1200*Math.log2(C/1e3)),a=C=>6900+1200*Math.log2(C/440),r=t<<7|A;r-=8192;let i=ar[e];i||nA(`Invalid AWE32 LSB: %c${e}`,E.unrecognized);let o,g,c,h;switch(i){default:break;case I.delayModLFO:case I.delayVibLFO:case I.delayVolEnv:case I.delayModEnv:o=4*n(r,0,5900),this.setGeneratorOverride(i,s(o));break;case I.attackVolEnv:case I.attackModEnv:o=n(r,0,5940),this.setGeneratorOverride(i,s(o));break;case I.holdVolEnv:case I.holdModEnv:o=n(r,0,8191),this.setGeneratorOverride(i,s(o));break;case I.decayModEnv:case I.decayVolEnv:case I.releaseVolEnv:case I.releaseModEnv:o=4*n(r,0,5940),this.setGeneratorOverride(i,s(o));break;case I.freqVibLFO:case I.freqModLFO:g=.084*A,this.setGeneratorOverride(i,a(g),!0);break;case I.sustainVolEnv:case I.sustainModEnv:c=A*7.5,this.setGeneratorOverride(i,c);break;case I.fineTune:this.setGeneratorOverride(i,r,!0);break;case I.modLfoToPitch:case I.vibLfoToPitch:h=n(r,-127,127)*9.375,this.setGeneratorOverride(i,h,!0);break;case I.modEnvToPitch:h=n(r,-127,127)*9.375,this.setGeneratorOverride(i,h);break;case I.modLfoToVolume:c=1.875*A,this.setGeneratorOverride(i,c,!0);break;case I.initialFilterFc:{let C=4335+59*A;this.setGeneratorOverride(i,C,!0);break}case I.initialFilterQ:c=215*(A/127),this.setGeneratorOverride(i,c,!0);break;case I.modLfoToFilterFc:h=n(r,-64,63)*56.25,this.setGeneratorOverride(i,h,!0);break;case I.modEnvToFilterFc:h=n(r,-64,63)*56.25,this.setGeneratorOverride(i,h);break;case I.chorusEffectsSend:case I.reverbEffectsSend:this.setGeneratorOverride(i,n(r,0,255)*(1e3/255));break}}function rr(e){switch(this.midiControllers[p.dataEntryLSB]=e<<7,this.dataEntryState){default:break;case YA.RPCoarse:case YA.RPFine:{switch(this.midiControllers[p.registeredParameterMSB]|this.midiControllers[p.registeredParameterLSB]>>7){default:break;case ue.pitchWheelRange:{if(e===0)break;this.midiControllers[SA+AA.pitchWheelRange]|=e;let t=(this.midiControllers[SA+AA.pitchWheelRange]>>7)+e/128;y(`%cChannel ${this.channelNumber} pitch wheel range. Semitones: %c${t}`,E.info,E.value);break}case ue.fineTuning:{let n=this.customControllers[rA.channelTuning]<<7|e;this.setTuning(n*.01220703125);break}case ue.modulationDepth:{let n=this.customControllers[rA.modulationMultiplier]*50+e/128*100;this.setModulationDepth(n);break}case 16383:this.resetParameters();break}break}case YA.NRPFine:{let A=this.midiControllers[p.nonRegisteredParameterMSB]>>7,t=this.midiControllers[p.nonRegisteredParameterLSB]>>7;if(A===Ve.SF2)return;switch(A){default:y(`%cUnrecognized NRPN LSB for %c${this.channelNumber}%c: %c(0x${t.toString(16).toUpperCase()} 0x${t.toString(16).toUpperCase()})%c data value: %c${e}`,E.warn,E.recognized,E.warn,E.unrecognized,E.warn,E.value);break;case Ve.awe32:or.call(this,t,e,this.midiControllers[p.dataEntryMSB]>>7);break}}}}function ir(e,A,t=!0){if(e>127)throw new Error("Invalid MIDI Controller.");if(e>=p.modulationWheelLSB&&e<=p.effectControl2LSB&&e!==p.dataEntryLSB){let n=e-32;if(this.lockedControllers[n])return;this.midiControllers[n]=this.midiControllers[n]&16256|A&127,this.voices.forEach(s=>this.computeModulators(s,1,n))}if(!this.lockedControllers[e]){switch(this.midiControllers[e]=A<<7,e){case p.allNotesOff:this.stopAllNotes();break;case p.allSoundOff:this.stopAllNotes(!0);break;case p.bankSelect:this.setBankMSB(A),this.channelNumber%16===me&&fA.isSystemXG(this.channelSystem)&&this.setBankMSB(127);break;case p.bankSelectLSB:this.setBankLSB(A);break;case p.registeredParameterLSB:this.dataEntryState=YA.RPFine;break;case p.registeredParameterMSB:this.dataEntryState=YA.RPCoarse;break;case p.nonRegisteredParameterMSB:this.customControllers[rA.sf2NPRNGeneratorLSB]=0,this.dataEntryState=YA.NRPCoarse;break;case p.nonRegisteredParameterLSB:this.midiControllers[p.nonRegisteredParameterMSB]>>7===Ve.SF2&&(this.customControllers[rA.sf2NPRNGeneratorLSB]%100!==0&&(this.customControllers[rA.sf2NPRNGeneratorLSB]=0),A===100?this.customControllers[rA.sf2NPRNGeneratorLSB]+=100:A===101?this.customControllers[rA.sf2NPRNGeneratorLSB]+=1e3:A===102?this.customControllers[rA.sf2NPRNGeneratorLSB]+=1e4:A<100&&(this.customControllers[rA.sf2NPRNGeneratorLSB]+=A)),this.dataEntryState=YA.NRPFine;break;case p.dataEntryMSB:this.dataEntryCoarse(A);break;case p.dataEntryLSB:this.dataEntryFine(A);break;case p.resetAllControllers:this.resetControllersRP15Compliant();break;case p.sustainPedal:A<64&&(this.sustainedVoices.forEach(n=>{n.release(this.synth.currentSynthTime)}),this.sustainedVoices=[]);break;default:this.voices.forEach(n=>this.computeModulators(n,1,e));break}t&&this.synthProps.callEvent("controllerChange",{channel:this.channelNumber,controllerNumber:e,controllerValue:A})}}var It={0:0,1:.006,2:.023,4:.05,8:.11,16:.25,32:.5,64:2.06,80:4.2,96:8.4,112:19.5,116:26.7,120:40,124:80,127:480};function Ir(e){if(It[e]!==void 0)return It[e];let A=null,t=null;for(let n of Object.keys(It)){let s=parseInt(n);s<e&&(A===null||s>A)&&(A=s),s>e&&(t===null||s<t)&&(t=s)}if(A!==null&&t!==null){let n=It[A],s=It[t];return n+(e-A)*(s-n)/(t-A)}return 0}function gr(e,A){return Ir(e)*(A/36)}function cr(e,A){if(A<1){this.noteOff(e);return}if(A=Math.min(127,A),this.synthProps.masterParameters.blackMIDIMode&&this.synth.totalVoicesAmount>200&&A<40||this.synthProps.masterParameters.blackMIDIMode&&A<10||this._isMuted)return;if(!this.preset){nA(`No preset for channel ${this.channelNumber}!`);return}let t=e+this.channelTransposeKeyShift+this.customControllers[rA.channelKeyShift],n=t;if(t>127||t<0)return;let s=this.preset?.program,a=this.synthProps.tunings[s]?.[t]?.midiNote;a>=0&&(n=a),this.synthProps.masterParameters.monophonicRetriggerMode&&this.killNote(e,-7200);let r=this.synth.keyModifierManager.getVelocity(this.channelNumber,t);r>-1&&(A=r);let i=this.synth.keyModifierManager.getGain(this.channelNumber,t),o=-1,g=0,c=this.midiControllers[p.portamentoTime]>>7,h=this.midiControllers[p.portamentoControl],C=h>>7;if(!this.drumChannel&&C!==n&&this.midiControllers[p.portamentoOnOff]>=8192&&c>0){if(h!==1){let m=Math.abs(n-C);g=gr(c,m),o=C}this.controllerChange(p.portamentoControl,n)}let d=this.synthProps.getVoices(this.channelNumber,n,A,t),u=0;this.randomPan&&(u=Math.round(Math.random()*1e3-500));let S=this.voices;d.forEach(m=>{m.portamentoFromKey=o,m.portamentoDuration=g,m.overridePan=u,m.gain=i,this.sysExModulators.modulatorList.forEach(J=>{let Y=J.mod,U=m.modulators.findIndex(K=>cA.isIdentical(K,Y));U!==-1?m.modulators[U]=cA.copyFrom(Y):m.modulators.push(cA.copyFrom(Y))}),this.generatorOverridesEnabled&&this.generatorOverrides.forEach((J,Y)=>{J!==Xs&&(m.generators[Y]=J)});let k=m.exclusiveClass;k!==0&&S.forEach(J=>{J.exclusiveClass===k&&J.exclusiveRelease(this.synth.currentSynthTime)}),this.computeModulators(m);let w=m.modulatedGenerators[I.startAddrsOffset]+m.modulatedGenerators[I.startAddrsCoarseOffset]*32768,M=m.modulatedGenerators[I.endAddrOffset]+m.modulatedGenerators[I.endAddrsCoarseOffset]*32768,P=m.modulatedGenerators[I.startloopAddrsOffset]+m.modulatedGenerators[I.startloopAddrsCoarseOffset]*32768,x=m.modulatedGenerators[I.endloopAddrsOffset]+m.modulatedGenerators[I.endloopAddrsCoarseOffset]*32768,B=m.sample,j=J=>Math.max(0,Math.min(B.sampleData.length-1,J));if(B.cursor=j(B.cursor+w),B.end=j(B.end+M),B.loopStart=j(B.loopStart+P),B.loopEnd=j(B.loopEnd+x),B.loopEnd<B.loopStart){let J=B.loopStart;B.loopStart=B.loopEnd,B.loopEnd=J}B.loopEnd-B.loopStart<1&&(B.loopingMode===1||B.loopingMode===3)&&(B.loopingMode=0,B.isLooping=!1),m.volumeEnvelope.attenuation=m.volumeEnvelope.attenuationTargetGain,m.currentPan=Math.max(-500,Math.min(500,m.modulatedGenerators[I.pan]))}),this.synth.totalVoicesAmount+=d.length,this.synth.totalVoicesAmount>this.synthProps.masterParameters.voiceCap&&this.synthProps.voiceKilling(d.length),S.push(...d),this.sendChannelProperty(),this.synthProps.callEvent("noteOn",{midiNote:e,channel:this.channelNumber,velocity:A})}function Er(e){if(e>127||e<0){nA("Received a noteOn for note",e,"Ignoring.");return}let A=e+this.channelTransposeKeyShift+this.customControllers[rA.channelKeyShift];if(this.synthProps.masterParameters.blackMIDIMode&&!this.drumChannel){this.killNote(A,-6950),this.synthProps.callEvent("noteOff",{midiNote:e,channel:this.channelNumber});return}this.voices.forEach(n=>{n.realKey!==A||n.isInRelease||(this.holdPedal?this.sustainedVoices.push(n):n.release(this.synth.currentSynthTime))}),this.synthProps.callEvent("noteOff",{midiNote:e,channel:this.channelNumber})}function Br(e){if(this.lockPreset)return;this.patch.program=e;let A=this.synth.soundBankManager.getPreset(this.patch,this.channelSystem);A||(nA("No presets! Using empty fallback."),A=new We(this.synth.soundBankManager.soundBankList[0].soundBank),A.name="SPESSA EMPTY FALLBACK PRESET"),this.preset=A,A.isAnyDrums!==this.drumChannel&&this.setDrumFlag(A.isAnyDrums),this.synthProps.callEvent("programChange",{channel:this.channelNumber,bankLSB:this.preset.bankLSB,bankMSB:this.preset.bankMSB,program:this.preset.program,isGMGSDrum:this.preset.isGMGSDrum}),this.sendChannelProperty()}var Cr=class{modulatorList=[];resetModulators(){this.modulatorList=[]}setModulator(e,A,t,n=!1,s=!1){let a=this.getModulatorID(e,A,n,s);t===0&&this.deleteModulator(a);let r=this.modulatorList.find(i=>i.id===a);if(r)r.mod.transformAmount=t;else{let i,o;e>=SA?(i=e-SA,o=!1):(i=e,o=!0);let g=new cA(new XA(i,QA.linear,o,n),new XA,A,t,0);this.modulatorList.push({mod:g,id:a})}}getModulatorID(e,A,t,n){return`${e}-${A}-${t}-${n}`}deleteModulator(e){this.modulatorList=this.modulatorList.filter(A=>A.id!==e)}},hr=1e3/200;function bs(e,A,t){if(A.transformAmount===0)return A.currentValue=0,0;let n=A.primarySource.getValue(e,t),s=A.secondarySource.getValue(e,t),a=A.transformAmount;A.isEffectModulator&&a<=1e3&&(a*=hr,a=Math.min(a,1e3));let r=n*s*a;return A.transformType===2&&(r=Math.abs(r)),A.isDefaultResonantModulator&&(t.resonanceOffset=Math.max(0,r/2)),A.currentValue=r,r}function lr(e,A=-1,t=0){let n=e.modulators,s=e.generators;if(this.generatorOffsetsEnabled){s=new Int16Array(s);for(let g=0;g<s.length;g++)s[g]+=this.generatorOffsets[g]}let a=e.modulatedGenerators;if(A===-1){a.set(s),n.forEach(g=>{a[g.destination]=Math.min(32767,Math.max(-32768,a[g.destination]+bs(this.midiControllers,g,e)))});for(let g=0;g<a.length;g++){let c=T[g];c&&(a[g]=Math.min(c.max,Math.max(c.min,a[g])))}Re.recalculate(e),ze.recalculate(e);return}let r=new Set([I.initialAttenuation,I.delayVolEnv,I.attackVolEnv,I.holdVolEnv,I.decayVolEnv,I.sustainVolEnv,I.releaseVolEnv,I.keyNumToVolEnvHold,I.keyNumToVolEnvDecay]),i=new Set,o=!!A;n.forEach(g=>{if(g.primarySource.isCC===o&&g.primarySource.index===t||g.secondarySource.isCC===o&&g.secondarySource.index===t){let c=g.destination;if(!i.has(c)){let h=s[c];bs(this.midiControllers,g,e),n.forEach(d=>{d.destination===c&&(h+=d.currentValue)});let C=T[c];a[c]=Math.max(C.min,Math.min(h,C.max)),i.add(c)}}}),[...i].some(g=>r.has(g))&&Re.recalculate(e),ze.recalculate(e)}var dr=class{midiControllers=new Int16Array(Mn);lockedControllers=Array(Mn).fill(!1);customControllers=new Float32Array($s);channelTransposeKeyShift=0;channelOctaveTuning=new Int8Array(128);sysExModulators=new Cr;drumChannel=!1;randomPan=!1;dataEntryState=YA.Idle;patch={bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1};preset;lockPreset=!1;lockedSystem="gs";lockGSNRPNParams=!1;channelVibrato={delay:0,depth:0,rate:0};voices=[];sustainedVoices=[];channelNumber;synth;synthProps;noteOn=cr.bind(this);noteOff=Er.bind(this);programChange=Br.bind(this);controllerChange=ir.bind(this);resetControllers=uo.bind(this);resetPreset=fo.bind(this);resetControllersRP15Compliant=mo.bind(this);resetParameters=So.bind(this);dataEntryFine=rr.bind(this);dataEntryCoarse=sr.bind(this);channelTuningCents=0;generatorOffsets=new Int16Array(Rn);generatorOffsetsEnabled=!1;generatorOverrides=new Int16Array(Rn);generatorOverridesEnabled=!1;renderVoice=nr.bind(this);panAndMixVoice=Ko.bind(this);computeModulators=lr.bind(this);constructor(e,A,t,n){this.synth=e,this.synthProps=A,this.preset=t,this.channelNumber=n,this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}_isMuted=!1;get isMuted(){return this._isMuted}get holdPedal(){return this.midiControllers[p.sustainPedal]>=8192}get channelSystem(){return this.lockPreset?this.lockedSystem:this.synthProps.masterParameters.midiSystem}transposeChannel(e,A=!1){this.drumChannel||(e+=this.synthProps.masterParameters.transposition);let t=Math.trunc(e),n=this.channelTransposeKeyShift+this.customControllers[rA.channelTransposeFine]/100;this.drumChannel&&!A||e===n||(t!==this.channelTransposeKeyShift&&this.stopAllNotes(),this.channelTransposeKeyShift=t,this.setCustomController(rA.channelTransposeFine,(e-t)*100),this.sendChannelProperty())}setOctaveTuning(e){if(e.length!==12)throw new Error("Tuning is not the length of 12.");this.channelOctaveTuning=new Int8Array(128);for(let A=0;A<128;A++)this.channelOctaveTuning[A]=e[A%12]}setModulationDepth(e){e=Math.round(e),y(`%cChannel ${this.channelNumber} modulation depth. Cents: %c${e}`,E.info,E.value),this.setCustomController(rA.modulationMultiplier,e/50)}setTuning(e,A=!0){e=Math.round(e),this.setCustomController(rA.channelTuning,e),A&&y(`%cFine tuning for %c${this.channelNumber}%c is now set to %c${e}%c cents.`,E.info,E.recognized,E.info,E.value,E.info)}pitchWheel(e){this.lockedControllers[SA+AA.pitchWheel]||(this.synthProps.callEvent("pitchWheel",{channel:this.channelNumber,pitch:e}),this.midiControllers[SA+AA.pitchWheel]=e,this.voices.forEach(A=>this.computeModulators(A,0,AA.pitchWheel)),this.sendChannelProperty())}channelPressure(e){this.midiControllers[SA+AA.channelPressure]=e<<7,this.updateChannelTuning(),this.voices.forEach(A=>this.computeModulators(A,0,AA.channelPressure)),this.synthProps.callEvent("channelPressure",{channel:this.channelNumber,pressure:e})}polyPressure(e,A){this.voices.forEach(t=>{t.midiNote===e&&(t.pressure=A,this.computeModulators(t,0,AA.polyPressure))}),this.synthProps.callEvent("polyPressure",{channel:this.channelNumber,midiNote:e,pressure:A})}setCustomController(e,A){this.customControllers[e]=A,this.updateChannelTuning()}updateChannelTuning(){this.channelTuningCents=this.customControllers[rA.channelTuning]+this.customControllers[rA.channelTransposeFine]+this.customControllers[rA.masterTuning]+this.customControllers[rA.channelTuningSemitones]*100}renderAudio(e,A,t,n,s,a,r,i){this.voices=this.voices.filter(o=>!this.renderVoice(o,this.synth.currentSynthTime,e,A,t,n,s,a,r,i))}setPresetLock(e){this.lockPreset!==e&&(this.lockPreset=e,e&&(this.lockedSystem=this.synthProps.masterParameters.midiSystem))}setDrums(e){if(fA.isSystemXG(this.channelSystem))if(e)this.setBankMSB(fA.getDrumBank(this.channelSystem)),this.setBankLSB(0);else{if(this.channelNumber%16===me)throw new Error(`Cannot disable drums on channel ${this.channelNumber} for XG.`);this.setBankMSB(0),this.setBankLSB(0)}else this.setGSDrums(e);this.setDrumFlag(e),this.programChange(this.patch.program)}setPatch(e){this.setBankMSB(e.bankMSB),this.setBankLSB(e.bankLSB),this.setGSDrums(e.isGMGSDrum),this.programChange(e.program)}setGSDrums(e){e!==this.patch.isGMGSDrum&&(this.setBankLSB(0),this.setBankMSB(0),this.patch.isGMGSDrum=e)}setVibrato(e,A,t){this.lockGSNRPNParams||(this.channelVibrato.rate=A,this.channelVibrato.delay=t,this.channelVibrato.depth=e)}disableAndLockGSNRPN(){this.lockGSNRPNParams=!0,this.channelVibrato.rate=0,this.channelVibrato.delay=0,this.channelVibrato.depth=0}resetGeneratorOverrides(){this.generatorOverrides.fill(Xs),this.generatorOverridesEnabled=!1}setGeneratorOverride(e,A,t=!1){this.generatorOverrides[e]=A,this.generatorOverridesEnabled=!0,t&&this.voices.forEach(n=>{n.generators[e]=A,this.computeModulators(n)})}resetGeneratorOffsets(){this.generatorOffsets.fill(0),this.generatorOffsetsEnabled=!1}setGeneratorOffset(e,A){this.generatorOffsets[e]=A*T[e].nrpn,this.generatorOffsetsEnabled=!0,this.voices.forEach(t=>{this.computeModulators(t)})}killNote(e,A=-12e3){e+=this.customControllers[rA.channelKeyShift],this.voices.forEach(t=>{t.realKey===e&&(t.modulatedGenerators[I.releaseVolEnv]=A,t.release(this.synth.currentSynthTime))})}stopAllNotes(e=!1){e?(this.voices.length=0,this.sustainedVoices.length=0,this.sendChannelProperty()):(this.voices.forEach(A=>{A.isInRelease||A.release(this.synth.currentSynthTime)}),this.sustainedVoices.forEach(A=>{A.release(this.synth.currentSynthTime)})),this.synthProps.callEvent("stopAll",{channel:this.channelNumber,force:e})}muteChannel(e){e&&this.stopAllNotes(!0),this._isMuted=e,this.sendChannelProperty(),this.synthProps.callEvent("muteChannel",{channel:this.channelNumber,isMuted:e})}sendChannelProperty(){if(!this.synth.enableEventSystem)return;let e={voicesAmount:this.voices.length,pitchWheel:this.midiControllers[SA+AA.pitchWheel],pitchWheelRange:this.midiControllers[SA+AA.pitchWheelRange]/128,isMuted:this.isMuted,transposition:this.channelTransposeKeyShift+this.customControllers[rA.channelTransposeFine]/100,isDrum:this.drumChannel};this.synthProps.callEvent("channelPropertyChange",{channel:this.channelNumber,property:e})}setBankMSB(e){this.lockPreset||(this.patch.bankMSB=e)}setBankLSB(e){this.lockPreset||(this.patch.bankLSB=e)}setDrumFlag(e){this.lockPreset||!this.preset||this.drumChannel!==e&&(e?(this.channelTransposeKeyShift=0,this.drumChannel=!0):this.drumChannel=!1,this.synthProps.callEvent("drumChange",{channel:this.channelNumber,isDrumChannel:this.drumChannel}))}},Sn=20;async function Qr(e,A,t,n,s,a,r){let i=0,o=0,g=[];for(let C of e.samples){n&&a&&await C.compressSample(a),s&&C.setAudioData(C.getAudioData(),C.sampleRate);let d=C.getRawData(!0);i++,await r?.(C.name,i,e.samples.length),y(`%cEncoded sample %c${i}. ${C.name}%c of %c${e.samples.length}%c. Compressed: %c${C.isCompressed}%c.`,E.info,E.recognized,E.info,E.recognized,E.info,C.isCompressed?E.recognized:E.unrecognized,E.info),o+=d.length+(C.isCompressed?0:92),g.push(d)}o%2!==0&&o++;let c=new O(o+Sn);kA(c,"LIST"),ht(c,o+Sn-8,4),kA(c,"sdta"),kA(c,"smpl"),ht(c,o,4);let h=0;return e.samples.forEach((C,d)=>{let u=g[d];c.set(u,h+Sn);let S,m;C.isCompressed?(S=h,m=S+u.length):(S=h/2,m=S+u.length/2,h+=92),h+=u.length,A.push(S),t.push(m)}),c}var ur=48e3,Vt=class{name;sampleRate;originalKey;pitchCorrection;linkedSample;sampleType;loopStart;loopEnd;linkedTo=[];dataOverridden=!0;compressedData;audioData;constructor(e,A,t,n,s,a,r){this.name=e,this.sampleRate=A,this.originalKey=t,this.pitchCorrection=n,this.loopStart=a,this.loopEnd=r,this.sampleType=s}get isCompressed(){return this.compressedData!==void 0}get isLinked(){return this.sampleType===wA.rightSample||this.sampleType===wA.leftSample||this.sampleType===wA.linkedSample}get useCount(){return this.linkedTo.length}getRawData(e){return this.compressedData&&e&&!this.dataOverridden?this.compressedData:this.encodeS16LE()}resampleData(e){let A=this.getAudioData(),t=e/this.sampleRate,n=new Float32Array(Math.floor(A.length*t));for(let s=0;s<n.length;s++)n[s]=A[Math.floor(s*(1/t))];A=n,this.sampleRate=e,this.loopStart=Math.floor(this.loopStart*t),this.loopEnd=Math.floor(this.loopEnd*t),this.audioData=A}async compressSample(e){if(!this.isCompressed)try{let A=this.getAudioData();(this.sampleRate<8e3||this.sampleRate>96e3)&&(this.resampleData(ur),A=this.getAudioData());let t=await e(A,this.sampleRate);this.setCompressedData(t)}catch(A){nA(`Failed to compress ${this.name}. Leaving as uncompressed!`,A),this.compressedData=void 0}}setSampleType(e){if(this.sampleType=e,this.isLinked||(this.linkedSample&&(this.linkedSample.linkedSample=void 0,this.linkedSample.sampleType=e),this.linkedSample=void 0),(e&32768)>0)throw new Error("ROM samples are not supported.")}unlinkSample(){this.setSampleType(wA.monoSample)}setLinkedSample(e,A){if(e.linkedSample)throw new Error(`${e.name} is linked tp ${e.linkedSample.name}. Unlink it first.`);if(this.linkedSample=e,e.linkedSample=this,A===wA.leftSample)this.setSampleType(wA.leftSample),e.setSampleType(wA.rightSample);else if(A===wA.rightSample)this.setSampleType(wA.rightSample),e.setSampleType(wA.leftSample);else if(A===wA.linkedSample)this.setSampleType(wA.linkedSample),e.setSampleType(wA.linkedSample);else throw new Error("Invalid sample type: "+A)}linkTo(e){this.linkedTo.push(e)}unlinkFrom(e){let A=this.linkedTo.indexOf(e);if(A<0){nA(`Cannot unlink ${e.name} from ${this.name}: not linked.`);return}this.linkedTo.splice(A,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(e,A){this.audioData=e,this.sampleRate=A,this.dataOverridden=!0,this.compressedData=void 0}setCompressedData(e){this.audioData=void 0,this.compressedData=e,this.dataOverridden=!1}encodeS16LE(){let e=this.getAudioData(),A=new Int16Array(e.length),t=e.length;for(let n=0;n<t;n++){let s=e[n]*32768;s>32767?s=32767:s<-32768&&(s=-32768),A[n]=s}return new O(A.buffer)}decodeVorbis(){if(this.audioData)return this.audioData;if(!this.compressedData)throw new Error("Compressed data is missing.");try{let A=qt.decode(this.compressedData).data[0];if(A===void 0)return nA(`Error decoding sample ${this.name}: Vorbis decode returned undefined.`),new Float32Array(0);for(let t=0;t<A.length;t++)A[t]=Math.max(-1,Math.min(A[t],.999969482421875));return A}catch(e){return nA(`Error decoding sample ${this.name}: ${e}`),new Float32Array(this.loopEnd+1)}}},fr=class extends Vt{constructor(){super("",44100,60,0,wA.monoSample,0,0)}},Kn=16,mr=class extends Vt{linkedSampleIndex;s16leData;startByteOffset;endByteOffset;sampleID;constructor(e,A,t,n,s,a,r,i,o,g,c,h){let C=(g&Kn)>0;g&=~Kn,super(e,a,r,i,g,n-A/2,s-A/2),this.dataOverridden=!1,this.name=e,this.startByteOffset=A,this.endByteOffset=t,this.sampleID=h;let d=c instanceof O?c.currentIndex:0;c instanceof O?C?(this.loopStart+=this.startByteOffset/2,this.loopEnd+=this.startByteOffset/2,this.setCompressedData(c.slice(this.startByteOffset/2+d,this.endByteOffset/2+d))):this.s16leData=c.slice(d+this.startByteOffset,d+this.endByteOffset):this.setAudioData(c.slice(this.startByteOffset/2,this.endByteOffset/2),a),this.linkedSampleIndex=o}getLinkedSample(e){if(this.linkedSample||!this.isLinked)return;let A=e[this.linkedSampleIndex];A?A.linkedSample?(y(`%cInvalid linked sample for ${this.name}: ${A.name} is already linked to ${A.linkedSample.name}`,E.warn),this.unlinkSample()):this.setLinkedSample(A,this.sampleType):(y(`%cInvalid linked sample for ${this.name}. Setting to mono.`,E.warn),this.unlinkSample())}getAudioData(){if(this.audioData)return this.audioData;if(this.isCompressed)return super.getAudioData();if(!this.s16leData)throw console.error(this),new Error("Unexpected lack of audio data.");let e=this.endByteOffset-this.startByteOffset;if(e<1)return nA(`Invalid sample ${this.name}! Invalid length: ${e}`),new Float32Array(1);let A=new Float32Array(e/2),t=new Int16Array(this.s16leData.buffer);for(let n=0;n<t.length;n++)A[n]=t[n]/32768;return this.audioData=A,A}getRawData(e){return this.dataOverridden||this.compressedData?super.getRawData(e):this.s16leData??new Uint8Array(0)}};function vs(e,A,t=!0){let n=[],s=0;for(;e.data.length>e.data.currentIndex;){let a=Sr(s,e.data,A);n.push(a),s++}return n.pop(),t&&n.forEach(a=>a.getLinkedSample(n)),n}function Sr(e,A,t){let n=hA(A,20),s=v(A,4)*2,a=v(A,4)*2,r=v(A,4),i=v(A,4),o=v(A,4),g=A[A.currentIndex++];g>127&&(g=60);let c=Ha(A[A.currentIndex++]),h=v(A,2),C=v(A,2);return new mr(n,s,a,r,i,o,g,c,h,C,t,e)}function pr(e,A,t){let s=46*(e.samples.length+1),a=new O(s),r=new O(s),i=0;e.samples.forEach((c,h)=>{kA(a,c.name.substring(0,20),20),kA(r,c.name.substring(20),20);let C=A[h];iA(a,C),r.currentIndex+=4;let d=t[h];iA(a,d),r.currentIndex+=4;let u=c.loopStart+C,S=c.loopEnd+C;c.isCompressed&&(u-=C,S-=C),iA(a,u),iA(a,S),iA(a,c.sampleRate),a[a.currentIndex++]=c.originalKey,a[a.currentIndex++]=c.pitchCorrection,r.currentIndex+=14;let m=c.linkedSample?e.samples.indexOf(c.linkedSample):0;W(a,Math.max(0,m)&65535),W(r,Math.max(0,m)>>16),i=Math.max(i,m);let k=c.sampleType;c.isCompressed&&(k|=Kn),W(a,k),r.currentIndex+=2}),kA(a,"EOS",46),kA(r,"EOS",46);let o=IA("shdr",a),g=IA("shdr",r);return{pdta:o,xdta:g}}function Ls(e,A=!1){let t=A?e.presets:e.instruments,n=A?"pgen":"igen",s=A?"pmod":"imod",a=A?"pbag":"ibag",r=A?"phdr":"inst",i=A?xo:Uo,o=0,g=new Array,c=0,h=new Array,C=new Array,d=new Array,u=0,S=new Array,m=Y=>{g.push(o);let U=Y.getWriteGenerators(e);o+=U.length,C.push(...U),h.push(c);let K=Y.modulators;c+=K.length,d.push(...K)};t.forEach(Y=>{S.push(u),m(Y.globalZone),Y.zones.forEach(m),u+=Y.zones.length+1}),C.push(new FA(0,0,!1)),d.push(new mA(0,0,0,0,0)),g.push(o),h.push(c),S.push(u);let k=C.length*Ds,w=new O(k);C.forEach(Y=>Y.write(w));let M=d.length*Ct,P=new O(M);d.forEach(Y=>Y.write(P));let x=h.length*No,B={pdta:new O(x),xdta:new O(x)};h.forEach((Y,U)=>{let K=g[U];W(B.pdta,K&65535),W(B.pdta,Y&65535),W(B.xdta,K>>16),W(B.xdta,Y>>16)});let j=(t.length+1)*i,J={pdta:new O(j),xdta:new O(j)};return t.forEach((Y,U)=>Y.write(J,S[U])),A?(kA(J.pdta,"EOP",20),J.pdta.currentIndex+=4,W(J.pdta,u&65535),J.pdta.currentIndex+=12,kA(J.xdta,"",20),J.xdta.currentIndex+=4,W(J.xdta,u>>16),J.xdta.currentIndex+=12):(kA(J.pdta,"EOI",20),W(J.pdta,u&65535),kA(J.xdta,"",20),W(J.xdta,u>>16)),{writeXdta:Math.max(o,c,u)>65535,gen:{pdta:IA(n,w),xdta:IA(s,new O(Ds))},mod:{pdta:IA(s,P),xdta:IA(s,new O(Ct))},bag:{pdta:IA(a,B.pdta),xdta:IA(a,B.xdta)},hdr:{pdta:IA(r,J.pdta),xdta:IA(r,J.xdta)}}}var On={compress:!1,compressionFunction:void 0,progressFunction:void 0,writeDefaultModulators:!0,writeExtendedLimits:!0,decompress:!1};async function yr(e,A=On){let t=_n(A,On);if(t?.compress){if(typeof t?.compressionFunction!="function")throw new Error("No compression function supplied but compression enabled.");if(t?.decompress)throw new Error("Decompressed and compressed at the same time.")}RA("%cSaving soundbank...",E.info),y(`%cCompression: %c${t?.compress||"false"}%c`,E.info,E.recognized,E.info,E.recognized),OA("%cWriting INFO...",E.info);let n=[];e.soundBankInfo.software="SpessaSynth",(t?.compress||e.samples.some(M=>M.isCompressed))&&(e.soundBankInfo.version.major=3,e.soundBankInfo.version.minor=0),t?.decompress&&(e.soundBankInfo.version.major=2,e.soundBankInfo.version.minor=4);let s=(M,P)=>{n.push(IA(M,ne(P,!0,!0)))},a=new O(4);if(W(a,e.soundBankInfo.version.major),W(a,e.soundBankInfo.version.minor),n.push(IA("ifil",a)),e.soundBankInfo.romVersion){let M=new O(4);W(M,e.soundBankInfo.romVersion.major),W(M,e.soundBankInfo.romVersion.minor),n.push(IA("iver",M))}let r=(e.soundBankInfo?.comment??"")+(e.soundBankInfo.subject?`
6
+ ${e.soundBankInfo.subject}`:"");for(let[M,P]of Object.entries(e.soundBankInfo)){let x=M,B=P;if(B)switch(x){case"name":s("INAM",B);break;case"comment":s("ICMT",r);break;case"copyright":s("ICOP",B);break;case"creationDate":s("ICRD",B.toISOString());break;case"engineer":s("IENG",B);break;case"product":s("IPRD",B);break;case"romInfo":s("irom",B);break;case"software":s("ISFT",B);break;case"soundEngine":s("isng",B);break;case"subject":break}}if(e.defaultModulators.some(M=>ga.findIndex(P=>cA.isIdentical(P,M,!0))===-1)&&t?.writeDefaultModulators){let M=e.defaultModulators;y(`%cWriting %c${M.length}%c default modulators...`,E.info,E.recognized,E.info);let P=Ct+M.length*Ct,x=new O(P);for(let B of M)B.write(x);ht(x,0,Ct),n.push(IA("DMOD",x))}z(),y("%cWriting SDTA...",E.info);let o=[],g=[],c=await Qr(e,o,g,t.compress,t.decompress,t?.compressionFunction,t?.progressFunction);y("%cWriting PDTA...",E.info),y("%cWriting SHDR...",E.info);let h=pr(e,o,g);OA("%cWriting instruments...",E.info);let C=Ls(e,!1);z(),OA("%cWriting presets...",E.info);let d=Ls(e,!0);z();let u=[d.hdr,d.bag,d.mod,d.gen,C.hdr,C.bag,C.mod,C.gen,h],S=MA("pdta",u.map(M=>M.pdta),!0);if(t.writeExtendedLimits&&(C.writeXdta||d.writeXdta||e.presets.some(M=>M.name.length>20)||e.instruments.some(M=>M.name.length>20)||e.samples.some(M=>M.name.length>20))){y("%cWriting the xdta chunk as writeExendedLimits is enabled and at least one condition was met.",E.info,E.value);let M=MA("xdta",u.map(P=>P.xdta),!0);n.push(M)}let k=MA("INFO",n,!0);y("%cWriting the output file...",E.info);let w=MA("RIFF",[ne("sfbk"),k,c,S]);return y(`%cSaved succesfully! Final file size: %c${w.length}`,E.info,E.recognized),z(),w.buffer}var je=class{static verifyHeader(e,...A){for(let t of A)if(e.header.toLowerCase()===t.toLowerCase())return;this.parsingError(`Invalid DLS chunk header! Expected "${A.join(", or ")}" got "${e.header.toLowerCase()}"`)}static verifyText(e,...A){for(let t of A)if(e.toLowerCase()===t.toLowerCase())return;this.parsingError(`FourCC error: Expected "${A.join(", or ")}" got "${e.toLowerCase()}"`)}static parsingError(e){throw z(),new Error(`DLS parse error: ${e} The file may be corrupted.`)}static verifyAndReadList(e,...A){this.verifyHeader(e,"LIST"),e.data.currentIndex=0,this.verifyText(hA(e.data,4),...A);let t=[];for(;e.data.length>e.data.currentIndex;)t.push(aA(e.data));return t}},gt=20,pn=16,Xe=class Bt extends je{gain=0;unityNote=60;fineTune=0;loops=new Array;fulOptions=2;static copyFrom(A){let t=new Bt;return t.unityNote=A.unityNote,t.gain=A.gain,t.fineTune=A.fineTune,t.loops=A.loops.map(n=>({...n})),t.fulOptions=A.fulOptions,t}static read(A){this.verifyHeader(A,"wsmp");let t=new Bt,n=v(A.data,4);if(n!==gt&&nA(`Wsmp cbSize mismatch: got ${n}, expected ${gt}.`),t.unityNote=v(A.data,2),t.fineTune=zn(A.data[A.data.currentIndex++],A.data[A.data.currentIndex++]),t.gain=v(A.data,4)|0,t.fulOptions=v(A.data,4),v(A.data,4)!==0){let a=v(A.data,4);a!==pn&&nA(`CbSize for loop in wsmp mismatch. Expected ${gt}, got ${a}.`);let r=v(A.data,4),i=v(A.data,4),o=v(A.data,4);t.loops.push({loopStart:i,loopLength:o,loopType:r})}return t}static fromSFSample(A){let t=new Bt;return t.unityNote=A.originalKey,t.fineTune=A.pitchCorrection,(A.loopEnd!==0||A.loopStart!==0)&&t.loops.push({loopStart:A.loopStart,loopLength:A.loopEnd-A.loopStart,loopType:ys.forward}),t}static fromSFZone(A){let t=new Bt;t.unityNote=A.getGenerator(I.overridingRootKey,A.sample.originalKey),A.getGenerator(I.scaleTuning,100)===0&&A.keyRange.max-A.keyRange.min===0&&(t.unityNote=A.keyRange.min),t.fineTune=A.fineTuning+A.sample.pitchCorrection;let n=A.getGenerator(I.initialAttenuation,0)*.4;t.gain=-n<<16;let s=A.getGenerator(I.sampleModes,0);if(s!==0){let a=A.sample.loopStart+A.getGenerator(I.startloopAddrsOffset,0)+A.getGenerator(I.startloopAddrsCoarseOffset,0)*32768,r=A.sample.loopEnd+A.getGenerator(I.endloopAddrsOffset,0)+A.getGenerator(I.endloopAddrsCoarseOffset,0)*32768,i;switch(s){case 1:default:i=0;break;case 3:i=1}t.loops.push({loopType:i,loopStart:a,loopLength:r-a})}return t}toSFZone(A,t){let n=0,s=this.loops[0];s&&(n=s.loopType===ys.loopAndRelease?3:1),n!==0&&A.setGenerator(I.sampleModes,n);let i=-(this.gain>>16)/.4;if(i!==0&&A.setGenerator(I.initialAttenuation,i),A.fineTuning=this.fineTune-t.pitchCorrection,this.unityNote!==t.originalKey&&A.setGenerator(I.overridingRootKey,this.unityNote),s){let o=s.loopStart-t.loopStart,c=s.loopStart+s.loopLength-t.loopEnd;if(o!==0){let h=o%32768;A.setGenerator(I.startloopAddrsOffset,h);let C=Math.trunc(o/32768);C!==0&&A.setGenerator(I.startloopAddrsCoarseOffset,C)}if(c!==0){let h=c%32768;A.setGenerator(I.endloopAddrsOffset,h);let C=Math.trunc(c/32768);C!==0&&A.setGenerator(I.endloopAddrsCoarseOffset,C)}}}write(){let A=new O(gt+this.loops.length*pn);return iA(A,gt),W(A,this.unityNote),W(A,this.fineTune),iA(A,this.gain),iA(A,this.fulOptions),iA(A,this.loops.length),this.loops.forEach(t=>{iA(A,pn),iA(A,t.loopType),iA(A,t.loopStart),iA(A,t.loopLength)}),IA("wsmp",A)}},yn={PCM:1,ALAW:6};function kr(e,A){let t=Math.pow(2,A*8-1),n=Math.pow(2,A*8),s,a=!1;A===1?(s=255,a=!0):s=t;let r=e.length/A,i=new Float32Array(r);if(A===2){let o=new Int16Array(e.buffer);for(let g=0;g<o.length;g++)i[g]=o[g]/32768}else for(let o=0;o<i.length;o++){let g=v(e,A);a?i[o]=g/s-.5:(g>=t&&(g-=n),i[o]=g/s)}return i}function Dr(e,A){let t=e.length/A,n=new Float32Array(t);for(let s=0;s<n.length;s++){let a=v(e,A),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 g=a>127?o:-o;n[s]=g/32678}return n}var wr=class extends Vt{wFormatTag;bytesPerSample;rawData;constructor(e,A,t,n,s,a,r,i,o){super(e,A,t,n,wA.monoSample,s,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 e;switch(this.wFormatTag){default:nA(`Failed to decode sample. Unknown wFormatTag: ${this.wFormatTag}`),e=new Float32Array(this.rawData.length/this.bytesPerSample);break;case yn.PCM:e=kr(this.rawData,this.bytesPerSample);break;case yn.ALAW:e=Dr(this.rawData,this.bytesPerSample);break}this.setAudioData(e,this.sampleRate)}return this.audioData??new Float32Array(0)}getRawData(e){return this.dataOverridden||this.isCompressed?super.getRawData(e):this.wFormatTag===yn.PCM&&this.bytesPerSample===2?this.rawData:this.encodeS16LE()}},Ns=class Vn extends je{waveSample=new Xe;wFormatTag;bytesPerSample;sampleRate;dataChunk;name="Unnamed sample";constructor(A,t,n,s){super(),this.wFormatTag=A,this.bytesPerSample=t,this.sampleRate=n,this.dataChunk=s}static read(A){let t=this.verifyAndReadList(A,"wave"),n=t.find(d=>d.header==="fmt ");if(!n)throw new Error("No fmt chunk in the wave file!");let s=v(n.data,2),a=v(n.data,2);if(a!==1)throw new Error(`Only mono samples are supported. Fmt reports ${a} channels.`);let r=v(n.data,4);v(n.data,4),v(n.data,2);let o=v(n.data,2)/8,g=t.find(d=>d.header==="data");if(!g)throw new Error("No data chunk in the WAVE chunk!");let c=new Vn(s,o,r,g),h=fe(t,"INFO");if(h){let d=aA(h.data);for(;d.header!=="INAM"&&h.data.currentIndex<h.data.length;)d=aA(h.data);d.header==="INAM"&&(c.name=hA(d.data,d.size).trim())}let C=t.find(d=>d.header==="wsmp");return C&&(c.waveSample=Xe.read(C)),c}static fromSFSample(A){let t=A.getRawData(!1),n=new Vn(1,2,A.sampleRate,new Ys("data",t.length,new O(t.buffer)));return n.name=A.name,n.waveSample=Xe.fromSFSample(A),n}toSFSample(A){let t=this.waveSample.unityNote,n=this.waveSample.fineTune,s=Math.trunc(n/100);t+=s,n-=s*100;let a=0,r=0,i=this.waveSample.loops?.[0];i&&(a=i.loopStart,r=i.loopStart+i.loopLength);let o=new wr(this.name,this.sampleRate,t,n,a,r,this.dataChunk,this.wFormatTag,this.bytesPerSample);A.addSamples(o)}write(){let A=this.writeFmt(),t=this.waveSample.write(),n=IA("data",this.dataChunk.data),s=IA("INAM",ne(this.name,!0)),a=IA("INFO",s,!1,!0);return y(`%cSaved %c${this.name}%c successfully!`,E.recognized,E.value,E.recognized),MA("wave",[A,t,n,a],!0)}writeFmt(){let A=new O(18);return W(A,this.wFormatTag),W(A,1),iA(A,this.sampleRate),iA(A,this.sampleRate*2),W(A,2),W(A,this.bytesPerSample*8),IA("fmt ",A)}},fa=new mA(219,0,I.reverbEffectsSend,1e3,0),ma=new mA(221,0,I.chorusEffectsSend,1e3,0),Fr=new mA(129,0,I.vibLfoToPitch,0,0),Gr=new mA(13,0,I.vibLfoToPitch,0,0),VA=class Xn{source;transform;bipolar;invert;constructor(A=N.none,t=QA.linear,n=!1,s=!1){this.source=A,this.transform=t,this.bipolar=n,this.invert=s}get sourceName(){return Object.keys(N).find(A=>N[A]===this.source)??this.source.toString()}get transformName(){return Object.keys(QA).find(A=>QA[A]===this.transform)??this.transform.toString()}static copyFrom(A){return new Xn(A.source,A.transform,A.bipolar,A.invert)}static fromSFSource(A){let t;if(A.isCC)switch(A.index){case p.modulationWheel:t=N.modulationWheel;break;case p.mainVolume:t=N.volume;break;case p.pan:t=N.pan;break;case p.expressionController:t=N.expression;break;case p.chorusDepth:t=N.chorus;break;case p.reverbDepth:t=N.reverb;break}else switch(A.index){case AA.noController:t=N.none;break;case AA.noteOnKeyNum:t=N.keyNum;break;case AA.noteOnVelocity:t=N.velocity;break;case AA.pitchWheel:t=N.pitchWheel;break;case AA.pitchWheelRange:t=N.pitchWheelRange;break;case AA.polyPressure:t=N.polyPressure;break;case AA.channelPressure:t=N.channelPressure}if(t!==void 0)return new Xn(t,A.curveType,A.isBipolar,A.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 A,t=!1;switch(this.source){default:case N.modLfo:case N.vibratoLfo:case N.coarseTune:case N.fineTune:case N.modEnv:return;case N.keyNum:A=AA.noteOnKeyNum;break;case N.none:A=AA.noController;break;case N.modulationWheel:A=p.modulationWheel,t=!0;break;case N.pan:A=p.pan,t=!0;break;case N.reverb:A=p.reverbDepth,t=!0;break;case N.chorus:A=p.chorusDepth,t=!0;break;case N.expression:A=p.expressionController,t=!0;break;case N.volume:A=p.mainVolume,t=!0;break;case N.velocity:A=AA.noteOnVelocity;break;case N.polyPressure:A=AA.polyPressure;break;case N.channelPressure:A=AA.channelPressure;break;case N.pitchWheel:A=AA.pitchWheel;break;case N.pitchWheelRange:A=AA.pitchWheelRange;break}if(A!==void 0)return new XA(A,this.transform,t,this.bipolar,this.invert)}},Rr=new Set([I.sampleModes,I.initialAttenuation,I.keyRange,I.velRange,I.sampleID,I.fineTune,I.coarseTune,I.startAddrsOffset,I.startAddrsCoarseOffset,I.endAddrOffset,I.endAddrsCoarseOffset,I.startloopAddrsOffset,I.startloopAddrsCoarseOffset,I.endloopAddrsOffset,I.endloopAddrsCoarseOffset,I.overridingRootKey,I.exclusiveClass]),ct=class Fe{source;control;destination;scale;transform;constructor(A=new VA,t=new VA,n,s,a){this.source=A,this.control=t,this.destination=n,this.transform=s,this.scale=a}get isStaticParameter(){return this.source.source===N.none&&this.control.source===N.none}get shortScale(){return this.scale>>16}get transformName(){return Object.keys(QA).find(A=>QA[A]===this.transform)??this.transform.toString()}get destinationName(){return Object.keys(G).find(A=>G[A]===this.destination)??this.destination.toString()}static read(A){let t=v(A,2),n=v(A,2),s=v(A,2),a=v(A,2),r=v(A,4)|0,i=a&15,o=a>>4&15,g=Ge(a,8),c=Ge(a,9),h=new VA(n,o,g,c),C=a>>10&15,d=Ge(a,14),u=Ge(a,15),S=new VA(t,C,d,u);return new Fe(S,h,s,i,r)}static fromSFModulator(A,t){let n=c=>{nA(`Failed converting SF modulator into DLS:
7
7
  ${A.toString()}
8
- (${E})`)};if(A.transformType!==0){n("Absolute transform type is not supported");return}if(cA.isIdentical(A,ma,!0)||cA.isIdentical(A,fa,!0))return;let s=VA.fromSFSource(A.primarySource);if(!s){n("Invalid primary source");return}let a=VA.fromSFSource(A.secondarySource);if(!a){n("Invalid secondary source");return}let o=Fe.fromSFDestination(A.destination,A.transformAmount);if(o===void 0){n("Invalid destination");return}let i=A.transformAmount,r;if(typeof o=="number")r=o;else if(r=o.destination,i=o.amount,o.source!==N.none){if(a.source!==N.none&&s.source!==N.none){n("Articulation generators with secondary source are not supported");return}s.source!==N.none&&(a=s),s=new VA(o.source,QA.linear,o.isBipolar)}let g=new Fe(s,a,r,0,i<<16);t.connectionBlocks.push(g)}static copyFrom(A){return new Fe(VA.copyFrom(A.source),VA.copyFrom(A.control),A.destination,A.transform,A.scale)}static fromSFGenerator(A,t){if(Ro.has(A.generatorType))return;let n=r=>{nA(`Failed converting SF2 generator into DLS:
8
+ (${c})`)};if(A.transformType!==0){n("Absolute transform type is not supported");return}if(cA.isIdentical(A,ma,!0)||cA.isIdentical(A,fa,!0))return;let s=VA.fromSFSource(A.primarySource);if(!s){n("Invalid primary source");return}let a=VA.fromSFSource(A.secondarySource);if(!a){n("Invalid secondary source");return}let r=Fe.fromSFDestination(A.destination,A.transformAmount);if(r===void 0){n("Invalid destination");return}let i=A.transformAmount,o;if(typeof r=="number")o=r;else if(o=r.destination,i=r.amount,r.source!==N.none){if(a.source!==N.none&&s.source!==N.none){n("Articulation generators with secondary source are not supported");return}s.source!==N.none&&(a=s),s=new VA(r.source,QA.linear,r.isBipolar)}let g=new Fe(s,a,o,0,i<<16);t.connectionBlocks.push(g)}static copyFrom(A){return new Fe(VA.copyFrom(A.source),VA.copyFrom(A.control),A.destination,A.transform,A.scale)}static fromSFGenerator(A,t){if(Rr.has(A.generatorType))return;let n=o=>{nA(`Failed converting SF2 generator into DLS:
9
9
  ${A.toString()}
10
- (${r})`)},s=Fe.fromSFDestination(A.generatorType,A.generatorValue);if(s===void 0){n("Invalid type");return}let a=new VA,o,i=A.generatorValue;typeof s=="number"?o=s:(o=s.destination,i=s.amount,a.source=s.source,a.bipolar=s.isBipolar),t.connectionBlocks.push(new Fe(a,new VA,o,0,i<<16))}static fromSFDestination(A,t){switch(A){default:return;case I.initialAttenuation:return{destination:G.gain,amount:-t,isBipolar:!1,source:N.none};case I.fineTune:return G.pitch;case I.pan:return G.pan;case I.keyNum:return G.keyNum;case I.reverbEffectsSend:return G.reverbSend;case I.chorusEffectsSend:return G.chorusSend;case I.freqModLFO:return G.modLfoFreq;case I.delayModLFO:return G.modLfoDelay;case I.delayVibLFO:return G.vibLfoDelay;case I.freqVibLFO:return G.vibLfoFreq;case I.delayVolEnv:return G.volEnvDelay;case I.attackVolEnv:return G.volEnvAttack;case I.holdVolEnv:return G.volEnvHold;case I.decayVolEnv:return G.volEnvDecay;case I.sustainVolEnv:return{destination:G.volEnvSustain,amount:1e3-t,isBipolar:!1,source:N.none};case I.releaseVolEnv:return G.volEnvRelease;case I.delayModEnv:return G.modEnvDelay;case I.attackModEnv:return G.modEnvAttack;case I.holdModEnv:return G.modEnvHold;case I.decayModEnv:return G.modEnvDecay;case I.sustainModEnv:return{destination:G.modEnvSustain,amount:1e3-t,isBipolar:!1,source:N.none};case I.releaseModEnv:return G.modEnvRelease;case I.initialFilterFc:return G.filterCutoff;case I.initialFilterQ:return G.filterQ;case I.modEnvToFilterFc:return{source:N.modEnv,destination:G.filterCutoff,amount:t,isBipolar:!1};case I.modEnvToPitch:return{source:N.modEnv,destination:G.pitch,amount:t,isBipolar:!1};case I.modLfoToFilterFc:return{source:N.modLfo,destination:G.filterCutoff,amount:t,isBipolar:!0};case I.modLfoToVolume:return{source:N.modLfo,destination:G.gain,amount:t,isBipolar:!0};case I.modLfoToPitch:return{source:N.modLfo,destination:G.pitch,amount:t,isBipolar:!0};case I.vibLfoToPitch:return{source:N.vibratoLfo,destination:G.pitch,amount:t,isBipolar:!0};case I.keyNumToVolEnvHold:return{source:N.keyNum,destination:G.volEnvHold,amount:t,isBipolar:!0};case I.keyNumToVolEnvDecay:return{source:N.keyNum,destination:G.volEnvDecay,amount:t,isBipolar:!0};case I.keyNumToModEnvHold:return{source:N.keyNum,destination:G.modEnvHold,amount:t,isBipolar:!0};case I.keyNumToModEnvDecay:return{source:N.keyNum,destination:G.modEnvDecay,amount:t,isBipolar:!0};case I.scaleTuning:return{source:N.keyNum,destination:G.pitch,amount:t*128,isBipolar:!1}}}toString(){return`Source: ${this.source.toString()},
10
+ (${o})`)},s=Fe.fromSFDestination(A.generatorType,A.generatorValue);if(s===void 0){n("Invalid type");return}let a=new VA,r,i=A.generatorValue;typeof s=="number"?r=s:(r=s.destination,i=s.amount,a.source=s.source,a.bipolar=s.isBipolar),t.connectionBlocks.push(new Fe(a,new VA,r,0,i<<16))}static fromSFDestination(A,t){switch(A){default:return;case I.initialAttenuation:return{destination:G.gain,amount:-t,isBipolar:!1,source:N.none};case I.fineTune:return G.pitch;case I.pan:return G.pan;case I.keyNum:return G.keyNum;case I.reverbEffectsSend:return G.reverbSend;case I.chorusEffectsSend:return G.chorusSend;case I.freqModLFO:return G.modLfoFreq;case I.delayModLFO:return G.modLfoDelay;case I.delayVibLFO:return G.vibLfoDelay;case I.freqVibLFO:return G.vibLfoFreq;case I.delayVolEnv:return G.volEnvDelay;case I.attackVolEnv:return G.volEnvAttack;case I.holdVolEnv:return G.volEnvHold;case I.decayVolEnv:return G.volEnvDecay;case I.sustainVolEnv:return{destination:G.volEnvSustain,amount:1e3-t,isBipolar:!1,source:N.none};case I.releaseVolEnv:return G.volEnvRelease;case I.delayModEnv:return G.modEnvDelay;case I.attackModEnv:return G.modEnvAttack;case I.holdModEnv:return G.modEnvHold;case I.decayModEnv:return G.modEnvDecay;case I.sustainModEnv:return{destination:G.modEnvSustain,amount:1e3-t,isBipolar:!1,source:N.none};case I.releaseModEnv:return G.modEnvRelease;case I.initialFilterFc:return G.filterCutoff;case I.initialFilterQ:return G.filterQ;case I.modEnvToFilterFc:return{source:N.modEnv,destination:G.filterCutoff,amount:t,isBipolar:!1};case I.modEnvToPitch:return{source:N.modEnv,destination:G.pitch,amount:t,isBipolar:!1};case I.modLfoToFilterFc:return{source:N.modLfo,destination:G.filterCutoff,amount:t,isBipolar:!0};case I.modLfoToVolume:return{source:N.modLfo,destination:G.gain,amount:t,isBipolar:!0};case I.modLfoToPitch:return{source:N.modLfo,destination:G.pitch,amount:t,isBipolar:!0};case I.vibLfoToPitch:return{source:N.vibratoLfo,destination:G.pitch,amount:t,isBipolar:!0};case I.keyNumToVolEnvHold:return{source:N.keyNum,destination:G.volEnvHold,amount:t,isBipolar:!0};case I.keyNumToVolEnvDecay:return{source:N.keyNum,destination:G.volEnvDecay,amount:t,isBipolar:!0};case I.keyNumToModEnvHold:return{source:N.keyNum,destination:G.modEnvHold,amount:t,isBipolar:!0};case I.keyNumToModEnvDecay:return{source:N.keyNum,destination:G.modEnvDecay,amount:t,isBipolar:!0};case I.scaleTuning:return{source:N.keyNum,destination:G.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
14
  Destination: ${this.destinationName}`}write(){let A=new O(12);W(A,this.source.source),W(A,this.control.source),W(A,this.destination);let t=this.transform|this.control.toTransformFlag()<<4|this.source.toTransformFlag()<<10;return W(A,t),iA(A,this.scale),A}toSFGenerator(A){let t=this.destination,n=this.shortScale;switch(t){default:y(`%cFailed converting DLS articulator into SF generator: %c${this.toString()}%c
15
- (invalid destination)`,c.warn,c.value,c.unrecognized);return;case G.pan:A.setGenerator(I.pan,n);break;case G.gain:A.addToGenerator(I.initialAttenuation,-n/.4);break;case G.filterCutoff:A.setGenerator(I.initialFilterFc,n);break;case G.filterQ:A.setGenerator(I.initialFilterQ,n);break;case G.modLfoFreq:A.setGenerator(I.freqModLFO,n);break;case G.modLfoDelay:A.setGenerator(I.delayModLFO,n);break;case G.vibLfoFreq:A.setGenerator(I.freqVibLFO,n);break;case G.vibLfoDelay:A.setGenerator(I.delayVibLFO,n);break;case G.volEnvDelay:A.setGenerator(I.delayVolEnv,n);break;case G.volEnvAttack:A.setGenerator(I.attackVolEnv,n);break;case G.volEnvHold:A.setGenerator(I.holdVolEnv,n);break;case G.volEnvDecay:A.setGenerator(I.decayVolEnv,n);break;case G.volEnvRelease:A.setGenerator(I.releaseVolEnv,n);break;case G.volEnvSustain:A.setGenerator(I.sustainVolEnv,1e3-n);break;case G.modEnvDelay:A.setGenerator(I.delayModEnv,n);break;case G.modEnvAttack:A.setGenerator(I.attackModEnv,n);break;case G.modEnvHold:A.setGenerator(I.holdModEnv,n);break;case G.modEnvDecay:A.setGenerator(I.decayModEnv,n);break;case G.modEnvRelease:A.setGenerator(I.releaseModEnv,n);break;case G.modEnvSustain:A.setGenerator(I.sustainModEnv,1e3-n);break;case G.reverbSend:A.setGenerator(I.reverbEffectsSend,n);break;case G.chorusSend:A.setGenerator(I.chorusEffectsSend,n);break;case G.pitch:A.fineTuning+=n;break}}toSFModulator(A){let t=this.shortScale,n,s,a=new XA,o=g=>{y(`%cFailed converting DLS articulator into SF2:
15
+ (invalid destination)`,E.warn,E.value,E.unrecognized);return;case G.pan:A.setGenerator(I.pan,n);break;case G.gain:A.addToGenerator(I.initialAttenuation,-n/.4);break;case G.filterCutoff:A.setGenerator(I.initialFilterFc,n);break;case G.filterQ:A.setGenerator(I.initialFilterQ,n);break;case G.modLfoFreq:A.setGenerator(I.freqModLFO,n);break;case G.modLfoDelay:A.setGenerator(I.delayModLFO,n);break;case G.vibLfoFreq:A.setGenerator(I.freqVibLFO,n);break;case G.vibLfoDelay:A.setGenerator(I.delayVibLFO,n);break;case G.volEnvDelay:A.setGenerator(I.delayVolEnv,n);break;case G.volEnvAttack:A.setGenerator(I.attackVolEnv,n);break;case G.volEnvHold:A.setGenerator(I.holdVolEnv,n);break;case G.volEnvDecay:A.setGenerator(I.decayVolEnv,n);break;case G.volEnvRelease:A.setGenerator(I.releaseVolEnv,n);break;case G.volEnvSustain:A.setGenerator(I.sustainVolEnv,1e3-n);break;case G.modEnvDelay:A.setGenerator(I.delayModEnv,n);break;case G.modEnvAttack:A.setGenerator(I.attackModEnv,n);break;case G.modEnvHold:A.setGenerator(I.holdModEnv,n);break;case G.modEnvDecay:A.setGenerator(I.decayModEnv,n);break;case G.modEnvRelease:A.setGenerator(I.releaseModEnv,n);break;case G.modEnvSustain:A.setGenerator(I.sustainModEnv,1e3-n);break;case G.reverbSend:A.setGenerator(I.reverbEffectsSend,n);break;case G.chorusSend:A.setGenerator(I.chorusEffectsSend,n);break;case G.pitch:A.fineTuning+=n;break}}toSFModulator(A){let t=this.shortScale,n,s,a=new XA,r=g=>{y(`%cFailed converting DLS articulator into SF2:
16
16
  %c${this.toString()}%c
17
- (${g})`,c.warn,c.value,c.unrecognized)},i=this.toCombinedSFDestination();if(i){n=i;let g=this.control.toSFSource();if(!g){o("Invalid control");return}s=g}else{let g=this.toSFDestination();if(!g){o("Invalid destination");return}typeof g=="object"?(t=g.newAmount,n=g.gen):n=g;let E=this.source.toSFSource();if(!E){o("Invalid source");return}s=E;let d=this.control.toSFSource();if(!d){o("Invalid control");return}a=d}this.transform!==QA.linear&&s.curveType===QA.linear&&(s.curveType=this.transform),n===I.initialAttenuation&&((this.source.source===N.velocity||this.source.source===N.volume||this.source.source===N.expression)&&(s.isNegative=!0),t=Math.min(960,Math.max(0,t)));let r=new cA(s,a,n,t,0);A.addModulators(r)}toCombinedSFDestination(){let A=this.source.source,t=this.destination;return A===N.vibratoLfo&&t===G.pitch?I.vibLfoToPitch:A===N.modLfo&&t===G.pitch?I.modLfoToPitch:A===N.modLfo&&t===G.filterCutoff?I.modLfoToFilterFc:A===N.modLfo&&t===G.gain?I.modLfoToVolume:A===N.modEnv&&t===G.filterCutoff?I.modEnvToFilterFc:A===N.modEnv&&t===G.pitch?I.modEnvToPitch:void 0}toSFDestination(){let A=this.shortScale;switch(this.destination){default:case G.none:return;case G.pan:return I.pan;case G.gain:return{gen:I.initialAttenuation,newAmount:-A};case G.pitch:return I.fineTune;case G.keyNum:return I.overridingRootKey;case G.volEnvDelay:return I.delayVolEnv;case G.volEnvAttack:return I.attackVolEnv;case G.volEnvHold:return I.holdVolEnv;case G.volEnvDecay:return I.decayVolEnv;case G.volEnvSustain:return{gen:I.sustainVolEnv,newAmount:1e3-A};case G.volEnvRelease:return I.releaseVolEnv;case G.modEnvDelay:return I.delayModEnv;case G.modEnvAttack:return I.attackModEnv;case G.modEnvHold:return I.holdModEnv;case G.modEnvDecay:return I.decayModEnv;case G.modEnvSustain:return{gen:I.sustainModEnv,newAmount:1e3-A};case G.modEnvRelease:return I.releaseModEnv;case G.filterCutoff:return I.initialFilterFc;case G.filterQ:return I.initialFilterQ;case G.chorusSend:return I.chorusEffectsSend;case G.reverbSend:return I.reverbEffectsSend;case G.modLfoFreq:return I.freqModLFO;case G.modLfoDelay:return I.delayModLFO;case G.vibLfoFreq:return I.freqVibLFO;case G.vibLfoDelay:return I.delayVibLFO}}},Sa=class Xn extends _e{connectionBlocks=new Array;mode="dls2";get length(){return this.connectionBlocks.length}copyFrom(A){this.mode=A.mode,A.connectionBlocks.forEach(t=>{this.connectionBlocks.push(gt.copyFrom(t))})}fromSFZone(A){this.mode="dls2";let t=new Kt;t.copyFrom(A);for(let n of t.generators){let s;switch(n.generatorType){default:continue;case I.keyNumToVolEnvDecay:s=I.decayVolEnv;break;case I.keyNumToVolEnvHold:s=I.holdVolEnv;break;case I.keyNumToModEnvDecay:s=I.decayModEnv;break;case I.keyNumToModEnvHold:s=I.holdModEnv}let a=t.getGenerator(s,void 0),o=n.generatorValue*-128;if(a===void 0)continue;let i=60/128*o,r=a-i;t.setGenerator(n.generatorType,o,!1),t.setGenerator(s,r,!1)}for(let n of t.generators)gt.fromSFGenerator(n,this);for(let n of t.modulators)gt.fromSFModulator(n,this)}read(A){let t=fe(A,"lart"),n=fe(A,"lar2");if(t)for(this.mode="dls1";t.data.currentIndex<t.data.length;){let s=aA(t.data);Xn.verifyHeader(s,"art1","art2");let a=s.data,o=v(a,4);o!==8&&nA(`CbSize in articulation mismatch. Expected 8, got ${o}`);let i=v(a,4);for(let r=0;r<i;r++)this.connectionBlocks.push(gt.read(a))}else if(n)for(this.mode="dls2";n.data.currentIndex<n.data.length;){let s=aA(n.data);Xn.verifyHeader(s,"art2","art1");let a=s.data,o=v(a,4);o!==8&&nA(`CbSize in articulation mismatch. Expected 8, got ${o}`);let i=v(a,4);for(let r=0;r<i;r++)this.connectionBlocks.push(gt.read(a))}}write(){let A=new O(8);iA(A,8),iA(A,this.connectionBlocks.length);let t=this.connectionBlocks.map(s=>s.write()),n=MA(this.mode==="dls2"?"art2":"art1",[A,...t]);return IA(this.mode==="dls2"?"lar2":"lart",n,!1,!0)}toSFZone(A){let t=(n,s,a,o)=>{let i=n/-128;if(A.setGenerator(s,i),i<=120){let r=Math.round(.46875*n),g=this.connectionBlocks.find(E=>E.isStaticParameter&&E.destination===o);g&&A.setGenerator(a,r+g.shortScale)}};for(let n of this.connectionBlocks){let s=n.shortScale,a=n.source.source,o=n.control.source,i=n.destination;if(n.isStaticParameter){n.toSFGenerator(A);continue}if(o===N.none)if(a===N.keyNum){if(i===G.pitch){A.setGenerator(I.scaleTuning,s/128);continue}if(i===G.modEnvHold||i===G.modEnvDecay||i===G.volEnvHold||i==G.volEnvDecay)continue}else{let r=n.toCombinedSFDestination();if(r){A.setGenerator(r,s);continue}}n.toSFModulator(A)}this.mode==="dls1"&&A.addModulators(cA.copyFrom(Fo),cA.copyFrom(Go));for(let n of this.connectionBlocks){if(n.source.source!==N.keyNum)continue;let s=n.shortScale;switch(n.destination){default:continue;case G.volEnvHold:t(s,I.keyNumToVolEnvHold,I.holdVolEnv,G.volEnvHold);break;case G.volEnvDecay:t(s,I.keyNumToVolEnvDecay,I.decayVolEnv,G.volEnvDecay);break;case G.modEnvHold:t(s,I.keyNumToModEnvHold,I.holdModEnv,G.modEnvHold);break;case G.modEnvDecay:t(s,I.keyNumToModEnvDecay,I.decayModEnv,G.modEnvDecay);break}}}},yn=class Nt{channel=1;tableIndex;fusOptions=0;phaseGroup=0;constructor(A){this.tableIndex=A}static copyFrom(A){let t=new Nt(A.tableIndex);return t.channel=A.channel,t.phaseGroup=A.phaseGroup,t.fusOptions=A.fusOptions,t}static read(A){let t=v(A.data,2),n=v(A.data,2),s=v(A.data,4),a=v(A.data,4),o=new Nt(a);return o.channel=s,o.fusOptions=t,o.phaseGroup=n,o}static fromSFZone(A,t){let n=A.indexOf(t.sample);if(n<0)throw new Error(`Wave link error: Sample ${t.sample.name} does not exist in the sample list.`);let s=new Nt(n);switch(t.sample.sampleType){default:case wA.leftSample:case wA.monoSample:s.channel=1;break;case wA.rightSample:s.channel=2}return s}write(){let A=new O(12);return W(A,this.fusOptions),W(A,this.phaseGroup),iA(A,this.channel),iA(A,this.tableIndex),IA("wlnk",A)}},Ut=class Ke extends _e{articulation=new Sa;keyRange={min:0,max:127};velRange={min:0,max:127};keyGroup=0;fusOptions=0;usLayer=0;waveSample;waveLink;constructor(A,t){super(),this.waveSample=t,this.waveLink=A}static copyFrom(A){let t=new Ke(yn.copyFrom(A.waveLink),Xe.copyFrom(A.waveSample));return t.keyGroup=A.keyGroup,t.keyRange={...A.keyRange},t.velRange={...A.velRange},t.usLayer=A.usLayer,t.fusOptions=A.fusOptions,t.articulation.copyFrom(A.articulation),t}static read(A,t){let n=this.verifyAndReadList(t,"rgn ","rgn2"),s=n.find(m=>m.header==="wsmp"),a=s?Xe.read(s):void 0,o=n.find(m=>m.header==="wlnk");if(!o){nA("Invalid DLS region: missing 'wlnk' chunk! Discarding...");return}let i=yn.read(o),r=n.find(m=>m.header==="rgnh");if(!r){nA("Invalid DLS region: missing 'rgnh' chunk! Discarding...");return}let g=A[i.tableIndex];g||Ke.parsingError(`Invalid sample index: ${i.tableIndex}. Samples available: ${A.length}`),a??=g.waveSample;let E=new Ke(i,a),d=v(r.data,2),l=v(r.data,2),C=v(r.data,2),Q=v(r.data,2);return C===0&&Q===0&&(Q=127,C=0),E.keyRange.max=l,E.keyRange.min=d,E.velRange.max=Q,E.velRange.min=C,E.fusOptions=v(r.data,2),E.keyGroup=v(r.data,2),r.data.length-r.data.currentIndex>=2&&(E.usLayer=v(r.data,2)),E.articulation.read(n),E}static fromSFZone(A,t){let n=Xe.fromSFZone(A),s=yn.fromSFZone(t,A),a=new Ke(s,n);return a.keyRange.min=Math.max(A.keyRange.min,0),a.keyRange.max=A.keyRange.max,a.velRange.min=Math.max(A.velRange.min,0),a.velRange.max=A.velRange.max,a.keyGroup=A.getGenerator(I.exclusiveClass,0),a.articulation.fromSFZone(A),a}write(){let A=[this.writeHeader(),this.waveSample.write(),this.waveLink.write(),this.articulation.write()];return MA("rgn2",A,!0)}toSFZone(A,t){let n=t[this.waveLink.tableIndex];n||Ke.parsingError(`Invalid sample index: ${this.waveLink.tableIndex}`);let s=A.createZone(n);return s.keyRange=this.keyRange,s.velRange=this.velRange,this.keyRange.max===127&&this.keyRange.min===0&&(s.keyRange.min=-1),this.velRange.max===127&&this.velRange.min===0&&(s.velRange.min=-1),this.keyGroup!==0&&s.setGenerator(I.exclusiveClass,this.keyGroup),this.waveSample.toSFZone(s,n),this.articulation.toSFZone(s),s.generators=s.generators.filter(a=>a.generatorValue!==T[a.generatorType].def),s}writeHeader(){let A=new O(12);return W(A,Math.max(this.keyRange.min,0)),W(A,this.keyRange.max),W(A,Math.max(this.velRange.min,0)),W(A,this.velRange.max),W(A,this.fusOptions),W(A,this.keyGroup),W(A,this.usLayer),IA("rgnh",A)}},kn=class Tt extends _e{articulation=new Sa;regions=new Array;name="Unnamed";bankLSB=0;bankMSB=0;isGMGSDrum=!1;program=0;static copyFrom(A){let t=new Tt;return t.name=A.name,t.isGMGSDrum=A.isGMGSDrum,t.bankMSB=A.bankMSB,t.bankLSB=A.bankLSB,t.program=A.program,t.articulation.copyFrom(A.articulation),A.regions.forEach(n=>{t.regions.push(Ut.copyFrom(n))}),t}static read(A,t){let n=this.verifyAndReadList(t,"ins "),s=n.find(l=>l.header==="insh");if(!s)throw z(),new Error("No instrument header!");let a="",o=fe(n,"INFO");if(o){let l=aA(o.data);for(;l.header!=="INAM";)l=aA(o.data);a=hA(l.data,l.data.length).trim()}a.length<1&&(a="Unnamed Instrument");let i=new Tt;i.name=a;let r=v(s.data,4),g=v(s.data,4),E=v(s.data,4);i.program=E&127,i.bankMSB=g>>>8&127,i.bankLSB=g&127,i.isGMGSDrum=g>>>31>0,RA(`%cParsing %c"${a}"%c...`,c.info,c.recognized,c.info);let d=fe(n,"lrgn");if(!d)throw z(),new Error("No region list!");i.articulation.read(n);for(let l=0;l<r;l++){let C=aA(d.data);this.verifyHeader(C,"LIST");let Q=hA(C.data,4);Q!=="rgn "&&Q!=="rgn2"&&(z(),this.parsingError(`Invalid DLS region! Expected "rgn " or "rgn2" got "${Q}"`));let m=Ut.read(A,C);m&&i.regions.push(m)}return z(),i}static fromSFPreset(A,t){let n=new Tt;return n.name=A.name,n.bankLSB=A.bankLSB,n.bankMSB=A.bankMSB,n.program=A.program,n.isGMGSDrum=A.isGMGSDrum,OA(`%cConverting %c${A.toString()}%c to DLS...`,c.info,c.value,c.info),A.toFlattenedInstrument().zones.forEach(a=>{n.regions.push(Ut.fromSFZone(a,t))}),z(),n}write(){RA(`%cWriting %c${this.name}%c...`,c.info,c.recognized,c.info);let A=[this.writeHeader()],t=this.regions.map(s=>s.write());A.push(MA("lrgn",t,!0)),this.articulation.length>0&&A.push(this.articulation.write());let n=IA("INAM",ne(this.name,!0));return A.push(IA("INFO",n,!1,!0)),z(),MA("ins ",A,!0)}toSFPreset(A){let t=new We(A);t.name=this.name,t.bankMSB=this.bankMSB,t.bankLSB=this.bankLSB,t.isGMGSDrum=this.isGMGSDrum,t.program=this.program;let n=new lt;n.name=this.name,t.createZone(n),this.articulation.toSFZone(n.globalZone),this.regions.forEach(s=>s.toSFZone(n,A.samples)),n.globalize(),n.globalZone.modulators.find(s=>s.destination===I.reverbEffectsSend)===void 0&&n.globalZone.addModulators(cA.copyFrom(fa)),n.globalZone.modulators.find(s=>s.destination===I.chorusEffectsSend)===void 0&&n.globalZone.addModulators(cA.copyFrom(ma)),n.globalZone.generators=n.globalZone.generators.filter(s=>s.generatorValue!==T[s.generatorType].def),A.addPresets(t),A.addInstruments(n)}writeHeader(){let A=new O(12);iA(A,this.regions.length);let t=(this.bankMSB&127)<<8|this.bankLSB&127;return this.isGMGSDrum&&(t|=1<<31),iA(A,t),iA(A,this.program&127),IA("insh",A)}},pa={progressFunction:void 0},ya=class Zn extends _e{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(A){if(!A)throw new Error("No data provided!");let t=new O(A);OA("%cParsing DLS file...",c.info);let n=aA(t,!1);this.verifyHeader(n,"RIFF"),this.verifyText(hA(t,4).toLowerCase(),"dls ");let s=[];for(;t.currentIndex<t.length;)s.push(aA(t));let a=new Zn;a.soundBankInfo.name="Unnamed DLS",a.soundBankInfo.product="SpessaSynth DLS",a.soundBankInfo.comment="(no description)";let o=fe(s,"INFO");if(o)for(;o.data.currentIndex<o.data.length;){let Q=aA(o.data),m=Q.header,S=hA(Q.data,Q.size);switch(m){case"INAM":a.soundBankInfo.name=S;break;case"ICRD":a.soundBankInfo.creationDate=ts(S);break;case"ICMT":a.soundBankInfo.comment=S;break;case"ISBJ":a.soundBankInfo.subject=S;break;case"ICOP":a.soundBankInfo.copyright=S;break;case"IENG":a.soundBankInfo.engineer=S;break;case"IPRD":a.soundBankInfo.product=S;break;case"ISFT":a.soundBankInfo.software=S}}this.printInfo(a);let i=s.find(Q=>Q.header==="colh");if(!i)return this.parsingError("No colh chunk!"),5;let r=v(i.data,4);y(`%cInstruments amount: %c${r}`,c.info,c.recognized);let g=fe(s,"wvpl");if(!g)return this.parsingError("No wvpl chunk!"),5;this.verifyAndReadList(g,"wvpl").forEach(Q=>{a.samples.push(Ns.read(Q))});let d=fe(s,"lins");if(!d)return this.parsingError("No lins chunk!"),5;let l=this.verifyAndReadList(d,"lins");RA("%cLoading instruments...",c.info),l.length!==r&&nA(`Colh reported invalid amount of instruments. Detected ${l.length}, expected ${r}`),l.forEach(Q=>{a.instruments.push(kn.read(a.samples,Q))}),z();let C=s.find(Q=>Q.header==="pgal");if(C){y("%cFound the instrument aliasing chunk!",c.recognized);let Q=C.data;(Q[0]!==0||Q[1]!==1||Q[2]!==2||Q[3]!==3)&&(Q.currentIndex+=4);let m=a.instruments.find(D=>fA.isXGDrums(D.bankMSB)||D.isGMGSDrum);if(!m)return nA("MobileBAE aliasing chunk without a drum preset. Aborting!"),a;let S=Q.slice(Q.currentIndex,Q.currentIndex+128);Q.currentIndex+=128;for(let D=0;D<128;D++){let w=S[D];if(w===D)continue;let M=m.regions.find(x=>x.keyRange.max===w&&x.keyRange.min===w);if(!M){nA(`Invalid drum alias ${D} to ${w}: region does not exist.`);continue}let P=Ut.copyFrom(M);P.keyRange.max=D,P.keyRange.min=D,m.regions.push(P)}for(Q.currentIndex+=4;Q.currentIndex<Q.length;){let D=v(Q,2),w=D&127,M=D>>7&127,P=Q[Q.currentIndex++],x=Q[Q.currentIndex++];x!==0&&nA(`Invalid alias byte. Expected 0, got ${x}`);let B=v(Q,2),j=B&127,J=B>>7&127,Y=Q[Q.currentIndex++];x=Q[Q.currentIndex++],x!==0&&nA(`Invalid alias header. Expected 0, got ${x}`);let U=a.instruments.find(q=>q.bankLSB===j&&q.bankMSB===J&&q.program===Y&&!q.isGMGSDrum);if(!U){nA(`Invalid alias. Missing instrument: ${j}:${J}:${Y}`);continue}let K=kn.copyFrom(U);K.bankMSB=M,K.bankLSB=w,K.program=P,a.instruments.push(K)}}return y(`%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),z(),a}static fromSF(A){RA("%cSaving SF2 to DLS level 2...",c.info);let t=new Zn;return t.soundBankInfo={...A.soundBankInfo},t.soundBankInfo.comment=(t.soundBankInfo.comment??"(No description)")+`
18
- Converted from SF2 to DLS with SpessaSynth`,A.samples.forEach(n=>{t.samples.push(Ns.fromSFSample(n))}),A.presets.forEach(n=>{t.instruments.push(kn.fromSFPreset(n,A.samples))}),y("%cConversion complete!",c.recognized),z(),t}static printInfo(A){for(let[t,n]of Object.entries(A.soundBankInfo)){if(typeof n=="object"&&"major"in n){let s=n;y(`%c${t}: %c"${s.major}.${s.minor}"`,c.info,c.recognized)}y(`%c${t}: %c${n.toLocaleString()}`,c.info,c.recognized)}}async write(A=pa){RA("%cSaving DLS...",c.info);let t=new O(4);iA(t,this.instruments.length);let n=IA("colh",t);RA("%cWriting instruments...",c.info);let s=MA("lins",this.instruments.map(S=>S.write()),!0);y("%cSuccess!",c.recognized),z(),RA("%cWriting WAVE samples...",c.info);let a=0,o=[],i=[],r=0;for(let S of this.samples){let D=S.write();await A?.progressFunction?.(S.name,r,this.samples.length),o.push(a),a+=D.length,i.push(D),r++}let g=MA("wvpl",i,!0);y("%cSucceeded!",c.recognized);let E=new O(8+4*o.length);iA(E,8),iA(E,o.length);for(let S of o)iA(E,S);let d=IA("ptbl",E);this.soundBankInfo.software="SpessaSynth";let l=[],C=(S,D)=>{l.push(IA(S,ne(D,!0)))};for(let[S,D]of Object.entries(this.soundBankInfo)){let w=S,M=D;if(M)switch(w){case"name":C("INAM",M);break;case"comment":C("ICMT",M);break;case"copyright":C("ICOP",M);break;case"creationDate":C("ICRD",M.toISOString());break;case"engineer":C("IENG",M);break;case"product":C("IPRD",M);break;case"romVersion":case"version":case"soundEngine":case"romInfo":break;case"software":C("ISFT",M);break;case"subject":C("ISBJ",M)}}let Q=MA("INFO",l,!0);y("%cCombining everything...");let m=MA("RIFF",[ne("DLS "),n,s,d,g,Q]);return y("%cSaved successfully!",c.recognized),z(),m.buffer}toSF(){OA("%cConverting DLS to SF2...",c.info);let A=new ka;return A.soundBankInfo.version.minor=4,A.soundBankInfo.version.major=2,A.soundBankInfo={...this.soundBankInfo},A.soundBankInfo.comment=(A.soundBankInfo.comment??"(No description)")+`
19
- Converted from DLS to SF2 with SpessaSynth`,this.samples.forEach(t=>{t.toSFSample(A)}),this.instruments.forEach(t=>{t.toSFPreset(A)}),A.flush(),y("%cConversion complete!",c.recognized),z(),A}},ka=class xt{static isSF3DecoderReady=qt.isInitialized;soundBankInfo={name:"Unnamed",creationDate:new Date,software:"SpessaSynth",soundEngine:"E-mu 10K2",version:{major:2,minor:4}};presets=[];samples=[];instruments=[];defaultModulators=ga.map(cA.copyFrom.bind(cA));customDefaultModulators=!1;_isXGBank=!1;get isXGBank(){return this._isXGBank}static mergeSoundBanks(...A){let t=A.shift();if(!t)throw new Error("No sound banks provided!");let n=t.presets;for(;A.length;){let a=A?.shift()?.presets;a&&a.forEach(o=>{n.find(i=>o.matches(i))===void 0&&n.push(o)})}let s=new xt;return s.addCompletePresets(n),s.soundBankInfo={...t.soundBankInfo},s}static async getSampleSoundBankFile(){let A=new xt,t=new Float32Array(128);for(let i=0;i<128;i++)t[i]=i/128*2-1;let n=new fo;n.name="Saw",n.originalKey=65,n.pitchCorrection=20,n.loopEnd=127,n.setAudioData(t,44100),A.addSamples(n);let s=new lt;s.name="Saw Wave",s.globalZone.addGenerators(new FA(I.initialAttenuation,375),new FA(I.releaseVolEnv,-1e3),new FA(I.sampleModes,1)),s.createZone(n),s.createZone(n).addGenerators(new FA(I.fineTune,-9)),A.addInstruments(s);let o=new We(A);return o.name="Saw Wave",o.createZone(s),A.addPresets(o),A.soundBankInfo.name="Dummy",A.flush(),await A.writeSF2()}static copyFrom(A){let t=new xt;return A.presets.forEach(n=>t.clonePreset(n)),t.soundBankInfo={...A.soundBankInfo},t}addCompletePresets(A){this.addPresets(...A);let t=[];for(let s of A)for(let a of s.zones)a.instrument&&!t.includes(a.instrument)&&t.push(a.instrument);this.addInstruments(...t);let n=[];for(let s of t)for(let a of s.zones)a.sample&&!n.includes(a.sample)&&n.push(a.sample);this.addSamples(...n)}async writeDLS(A=pa){return ya.fromSF(this).write(A)}async writeSF2(A=Kn){return yo(this,A)}addPresets(...A){this.presets.push(...A)}addInstruments(...A){this.instruments.push(...A)}addSamples(...A){this.samples.push(...A)}cloneSample(A){let t=this.samples.find(s=>s.name===A.name);if(t)return t;let n=new Vt(A.name,A.sampleRate,A.originalKey,A.pitchCorrection,A.sampleType,A.loopStart,A.loopEnd);if(A.isCompressed?n.setCompressedData(A.getRawData(!0)):n.setAudioData(A.getAudioData(),A.sampleRate),this.addSamples(n),A.linkedSample){let s=this.cloneSample(A.linkedSample);s.linkedSample||n.setLinkedSample(s,n.sampleType)}return n}cloneInstrument(A){let t=this.instruments.find(s=>s.name===A.name);if(t)return t;let n=new lt;n.name=A.name,n.globalZone.copyFrom(A.globalZone);for(let s of A.zones)n.createZone(this.cloneSample(s.sample)).copyFrom(s);return this.addInstruments(n),n}clonePreset(A){let t=this.presets.find(s=>s.name===A.name);if(t)return t;let n=new We(this);n.name=A.name,n.bankMSB=A.bankMSB,n.bankLSB=A.bankLSB,n.isGMGSDrum=A.isGMGSDrum,n.program=A.program,n.library=A.library,n.genre=A.genre,n.morphology=A.morphology,n.globalZone.copyFrom(A.globalZone);for(let s of A.zones)n.createZone(this.cloneInstrument(s.instrument)).copyFrom(s);return this.addPresets(n),n}flush(){this.presets.sort(te.sorter.bind(te)),this.parseInternal()}trimSoundBank(A){let t=(s,a)=>{let o=0;for(let i=0;i<s.zones.length;i++){let r=s.zones[i],g=r.keyRange,E=r.velRange,d=!1;for(let l of a)if(l.key>=g.min&&l.key<=g.max&&l.velocity>=E.min&&l.velocity<=E.max){d=!0;break}!d&&r.sample&&(y(`%c${r.sample.name}%c removed from %c${s.name}%c.`,c.recognized,c.info,c.recognized,c.info),s.deleteZone(i)&&(o++,i--,y(`%c${r.sample.name}%c deleted`,c.recognized,c.info)),r.sample.useCount<1&&this.deleteSample(r.sample))}return o};OA("%cTrimming sound bank...",c.info);let n=A.getUsedProgramsAndKeys(this);RA("%cModifying sound bank...",c.info),y("Detected keys for midi:",n);for(let s=0;s<this.presets.length;s++){let a=this.presets[s],o=n.get(a);if(o===void 0)y(`%cDeleting preset %c${a.name}%c and its zones`,c.info,c.recognized,c.info),this.deletePreset(a),s--;else{let i=[...o].map(g=>{let E=g.split("-");return{key:parseInt(E[0]),velocity:parseInt(E[1])}});RA(`%cTrimming %c${a.name}`,c.info,c.recognized),y(`Keys for ${a.name}:`,i);let r=0;for(let g=0;g<a.zones.length;g++){let E=a.zones[g],d=E.keyRange,l=E.velRange,C=!1;for(let Q of i)if(Q.key>=d.min&&Q.key<=d.max&&Q.velocity>=l.min&&Q.velocity<=l.max&&E.instrument){C=!0;let m=t(E.instrument,i);y(`%cTrimmed off %c${m}%c zones from %c${E.instrument.name}`,c.info,c.recognized,c.info,c.recognized);break}!C&&E.instrument&&(r++,a.deleteZone(g),E.instrument.useCount<1&&this.deleteInstrument(E.instrument),g--)}y(`%cTrimmed off %c${r}%c zones from %c${a.name}`,c.info,c.recognized,c.info,c.recognized),z()}}this.removeUnusedElements(),y("%cSound bank modified!",c.recognized),z(),z()}removeUnusedElements(){this.instruments=this.instruments.filter(A=>{A.deleteUnusedZones();let t=A.useCount<1;return t&&A.delete(),!t}),this.samples=this.samples.filter(A=>{let t=A.useCount<1;return t&&A.unlinkSample(),!t})}deleteInstrument(A){A.delete(),this.instruments.splice(this.instruments.indexOf(A),1)}deletePreset(A){A.delete(),this.presets.splice(this.presets.indexOf(A),1)}deleteSample(A){A.unlinkSample(),this.samples.splice(this.samples.indexOf(A),1)}getPreset(A,t){return Ca(this.presets,A,t)}destroySoundBank(){this.presets.length=0,this.instruments.length=0,this.samples.length=0}parsingError(A){throw new Error(`SF parsing error: ${A} The file may be corrupted.`)}parseInternal(){this._isXGBank=!1;let A=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(fA.isXGDrums(t.bankMSB)&&(this._isXGBank=!0,!A.has(t.program))){this._isXGBank=!1,y(`%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[A,t]of Object.entries(this.soundBankInfo)){if(typeof t=="object"&&"major"in t){let n=t;y(`%c${A}: %c"${n.major}.${n.minor}"`,c.info,c.recognized)}y(`%c${A}: %c${t.toLocaleString()}`,c.info,c.recognized)}}},Mo=class extends FA{constructor(e){let A=e.currentIndex,t=e[A+1]<<8|e[A],n=Wn(e[A+2],e[A+3]);e.currentIndex+=4,super(t,n,!1)}};function Us(e){let A=[];for(;e.data.length>e.data.currentIndex;)A.push(new Mo(e.data));return A.pop(),A}var bo=class extends Ea{constructor(e,A,t,n){let s=t.find(o=>o.generatorType===I.instrument),a;if(s)a=n[s.generatorValue];else throw new Error("No instrument ID found in preset zone.");if(!a)throw new Error(`Invalid instrument ID: ${s.generatorValue}, available instruments: ${n.length}`);super(e,a),this.addGenerators(...t),this.addModulators(...A)}};function vo(e,A,t,n,s){let a=e.gen,o=e.mod,i=0,r=0;for(let g of s)for(let E=0;E<g.zonesCount;E++){let d=a[r++],l=a[r],C=A.slice(d,l),Q=o[i++],m=o[i],S=t.slice(Q,m);C.find(D=>D.generatorType===I.instrument)!==void 0?g.createSoundFontZone(S,C,n):(g.globalZone.addGenerators(...C),g.globalZone.addModulators(...S))}}var Lo=class extends We{zoneStartIndex;zonesCount=0;constructor(e,A){super(A),this.name=hA(e.data,20).replace(/\d{3}:\d{3}/,""),this.program=v(e.data,2);let t=v(e.data,2);this.bankMSB=t&127,this.isGMGSDrum=(t&128)>0,this.bankLSB=t>>8,this.zoneStartIndex=v(e.data,2),this.library=v(e.data,4),this.genre=v(e.data,4),this.morphology=v(e.data,4)}createSoundFontZone(e,A,t){let n=new bo(this,e,A,t);return this.zones.push(n),n}};function Ts(e,A){let t=[];for(;e.data.length>e.data.currentIndex;){let n=new Lo(e,A);if(t.length>0){let s=t[t.length-1];s.zonesCount=n.zoneStartIndex-s.zoneStartIndex}t.push(n)}return t.pop(),t}var No=class extends Ba{constructor(e,A,t,n){let s=t.find(o=>o.generatorType===I.sampleID),a;if(s)a=n[s.generatorValue];else throw new Error("No sample ID found in instrument zone.");if(!a)throw new Error(`Invalid sample ID: ${s.generatorValue}, available samples: ${n.length}`);super(e,a),this.addGenerators(...t),this.addModulators(...A)}};function Uo(e,A,t,n,s){let a=e.gen,o=e.mod,i=0,r=0;for(let g of s)for(let E=0;E<g.zonesCount;E++){let d=a[r++],l=a[r],C=A.slice(d,l),Q=o[i++],m=o[i],S=t.slice(Q,m);C.find(D=>D.generatorType===I.sampleID)?g.createSoundFontZone(S,C,n):(g.globalZone.addGenerators(...C),g.globalZone.addModulators(...S))}}var To=class extends lt{zoneStartIndex;zonesCount=0;constructor(e){super(),this.name=hA(e.data,20),this.zoneStartIndex=v(e.data,2)}createSoundFontZone(e,A,t){let n=new No(this,e,A,t);return this.zones.push(n),n}};function xs(e){let A=[];for(;e.data.length>e.data.currentIndex;){let t=new To(e);if(A.length>0){let n=A[A.length-1];n.zonesCount=t.zoneStartIndex-n.zoneStartIndex}A.push(t)}return A.pop(),A}function Dn(e){let A=[];for(;e.data.length>e.data.currentIndex;){let t=e.data,n=v(t,2),s=v(t,2),a=Wn(t[t.currentIndex++],t[t.currentIndex++]),o=v(t,2),i=v(t,2);A.push(new mA(n,o,s,a,i))}return A.pop(),A}function Mt(e){let A=[],t=[];for(;e.data.length>e.data.currentIndex;)t.push(v(e.data,2)),A.push(v(e.data,2));return{mod:A,gen:t}}var xo=class extends ka{sampleDataStartIndex=0;constructor(e,A=!0){if(super(),A)throw new Error("Using the constructor directly is deprecated. Use SoundBankLoader.fromArrayBuffer() instead.");let t=new O(e);OA("%cParsing a SoundFont2 file...",c.info),t||(z(),this.parsingError("No data provided!"));let n=aA(t,!1);this.verifyHeader(n,"riff");let s=hA(t,4).toLowerCase();if(s!=="sfbk"&&s!=="sfpk")throw z(),new SyntaxError(`Invalid soundFont! Expected "sfbk" or "sfpk" got "${s}"`);let a=s==="sfpk",o=aA(t);this.verifyHeader(o,"list");let i=hA(o.data,4);if(i!=="INFO")throw z(),new SyntaxError(`Invalid soundFont! Expected "INFO" or "${i}"`);let r;for(;o.data.length>o.data.currentIndex;){let V=aA(o.data),F=ee(V.data,V.data.length),b=V.header;switch(b){case"ifil":case"iver":let X=v(V.data,2),tA=v(V.data,2);b==="ifil"?this.soundBankInfo.version={major:X,minor:tA}:this.soundBankInfo.romVersion={major:X,minor:tA};break;case"DMOD":{this.defaultModulators=Dn(V),this.customDefaultModulators=!0;break}case"LIST":{hA(V.data,4)==="xdta"&&(y("%cExtended SF2 found!",c.recognized),r=V);break}case"ICRD":this.soundBankInfo.creationDate=ts(hA(V.data,V.data.length));break;case"ISFT":this.soundBankInfo.software=F;break;case"IPRD":this.soundBankInfo.product=F;break;case"IENG":this.soundBankInfo.engineer=F;break;case"ICOP":this.soundBankInfo.copyright=F;break;case"INAM":this.soundBankInfo.name=F;break;case"ICMT":this.soundBankInfo.comment=F;break;case"irom":this.soundBankInfo.romInfo=F;break;case"isng":this.soundBankInfo.soundEngine=F}}this.printInfo();let g={};r!==void 0&&(g.phdr=aA(r.data),g.pbag=aA(r.data),g.pmod=aA(r.data),g.pgen=aA(r.data),g.inst=aA(r.data),g.ibag=aA(r.data),g.imod=aA(r.data),g.igen=aA(r.data),g.shdr=aA(r.data));let E=aA(t,!1);this.verifyHeader(E,"list"),this.verifyText(hA(t,4),"sdta"),y("%cVerifying smpl chunk...",c.warn);let d=aA(t,!1);this.verifyHeader(d,"smpl");let l;if(a){y("%cSF2Pack detected, attempting to decode the smpl chunk...",c.info);try{l=qt.decode(t.buffer.slice(t.currentIndex,t.currentIndex+E.size-12)).data[0]}catch(V){throw z(),new Error(`SF2Pack Ogg Vorbis decode error: ${V}`)}y(`%cDecoded the smpl chunk! Length: %c${l.length}`,c.info,c.value)}else l=t,this.sampleDataStartIndex=t.currentIndex;y(`%cSkipping sample chunk, length: %c${E.size-12}`,c.info,c.value),t.currentIndex+=E.size-12,y("%cLoading preset data chunk...",c.warn);let C=aA(t);this.verifyHeader(C,"list"),hA(C.data,4);let Q=aA(C.data);this.verifyHeader(Q,"phdr");let m=aA(C.data);this.verifyHeader(m,"pbag");let S=aA(C.data);this.verifyHeader(S,"pmod");let D=aA(C.data);this.verifyHeader(D,"pgen");let w=aA(C.data);this.verifyHeader(w,"inst");let M=aA(C.data);this.verifyHeader(M,"ibag");let P=aA(C.data);this.verifyHeader(P,"imod");let x=aA(C.data);this.verifyHeader(x,"igen");let B=aA(C.data);this.verifyHeader(B,"shdr"),y("%cParsing samples...",c.info),t.currentIndex=this.sampleDataStartIndex;let j=vs(B,l,r===void 0);if(r&&g.shdr){let V=vs(g.shdr,new Float32Array(1),!1);V.length===j.length&&j.forEach((F,b)=>{F.name+=V[b].name,F.linkedSampleIndex|=V[b].linkedSampleIndex<<16})}j.forEach(V=>V.name=V.name.trim()),this.samples.push(...j);let J=Us(x),Y=Dn(P),U=xs(w);if(r&&g.inst){let V=xs(g.inst);V.length===U.length&&(U.forEach((F,b)=>{F.name+=V[b].name,F.zoneStartIndex|=V[b].zoneStartIndex}),U.forEach((F,b)=>{b<U.length-1&&(F.zonesCount=U[b+1].zoneStartIndex-F.zoneStartIndex)}))}U.forEach(V=>V.name=V.name.trim()),this.instruments.push(...U);let K=Mt(M);if(r&&g.ibag){let V=Mt(g.ibag);for(let F=0;F<K.mod.length;F++)K.mod[F]|=V.mod[F]<<16;for(let F=0;F<K.gen.length;F++)K.gen[F]|=V.gen[F]<<16}Uo(K,J,Y,this.samples,U);let q=Us(D),Z=Dn(S),CA=Ts(Q,this);if(r&&g.phdr){let V=Ts(g.phdr,this);V.length===CA.length&&(CA.forEach((F,b)=>{F.name+=V[b].name,F.zoneStartIndex|=V[b].zoneStartIndex}),CA.forEach((F,b)=>{b<CA.length-1&&(F.zonesCount=CA[b+1].zoneStartIndex-F.zoneStartIndex)}))}CA.forEach(V=>V.name===V.name.trim()),this.addPresets(...CA);let gA=Mt(m);if(r&&g.pbag){let V=Mt(g.pbag);for(let F=0;F<gA.mod.length;F++)gA.mod[F]|=V.mod[F]<<16;for(let F=0;F<gA.gen.length;F++)gA.gen[F]|=V.gen[F]<<16}vo(gA,q,Z,this.instruments,CA),this.flush(),y(`%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),z()}verifyHeader(e,A){e.header.toLowerCase()!==A.toLowerCase()&&(z(),this.parsingError(`Invalid chunk header! Expected "${A.toLowerCase()}" got "${e.header.toLowerCase()}"`))}verifyText(e,A){e.toLowerCase()!==A.toLowerCase()&&(z(),this.parsingError(`Invalid FourCC: Expected "${A.toLowerCase()}" got "${e.toLowerCase()}"\``))}},Qt=class{static fromArrayBuffer(e){let A=e.slice(8,12),t=new O(A);return hA(t,4).toLowerCase()==="dls "?this.loadDLS(e):new xo(e,!1)}static loadDLS(e){return ya.read(e).toSF()}},Da=class{soundBankManager=new Hr(this.updatePresetList.bind(this));midiChannels=[];keyModifierManager=new jr;totalVoicesAmount=0;processorInitialized=qt.isInitialized;currentSynthTime=0;sampleRate;enableEffects=!0;enableEventSystem;onEventCall;systemExclusive=_r.bind(this);resetAllControllers=dr.bind(this);setMasterParameter=Fr.bind(this);getMasterParameter=Gr.bind(this);getAllMasterParameters=Rr.bind(this);getVoicesForPreset=Wr.bind(this);killVoices=Vr.bind(this);getVoices=zr.bind(this);privateProps;savedSnapshot;eventQueue=[];sampleTime;constructor(e,A=Gs){let t=zn(A,Gs);if(this.enableEffects=t.enableEffects,this.enableEventSystem=t.enableEventSystem,this.currentSynthTime=t.initialTime,this.sampleRate=e,this.sampleTime=1/e,isNaN(t.initialTime)||isNaN(e))throw new Error("Initial time or sample rate is NaN!");this.privateProps=new Ao(this.callEvent.bind(this),this.getVoices.bind(this),this.killVoices.bind(this),Dr*(44100/e),Yr*(44100/e),Kr*(44100/e));for(let n=0;n<wn;n++)this.createMIDIChannelInternal(!1);this.processorInitialized.then(()=>{y("%cSpessaSynth is ready!",c.recognized)})}applySynthesizerSnapshot(e){this.savedSnapshot=e,e.apply(this),y("%cFinished applying snapshot!",c.info),this.resetAllControllers()}getSnapshot(){return os.create(this)}setEmbeddedSoundBank(e,A){let t=Qt.fromArrayBuffer(e);this.soundBankManager.addSoundBank(t,Gt,A);let n=this.soundBankManager.priorityOrder;n.pop(),n.unshift(Gt),this.soundBankManager.priorityOrder=n,this.savedSnapshot!==void 0&&this.applySynthesizerSnapshot(this.savedSnapshot),y(`%cEmbedded sound bank set at offset %c${A}`,c.recognized,c.value)}clearEmbeddedBank(){this.soundBankManager.soundBankList.some(e=>e.id===Gt)&&this.soundBankManager.deleteSoundBank(Gt)}createMIDIChannel(){this.createMIDIChannelInternal(!0)}stopAllChannels(e=!1){y("%cStop all received!",c.info);for(let A of this.midiChannels)A.stopAllNotes(e)}renderAudio(e,A,t,n=0,s=0){this.renderAudioSplit(A,t,Array(16).fill(e),n,s)}renderAudioSplit(e,A,t,n=0,s=0){let a=this.currentSynthTime;for(;this.eventQueue[0]?.time<=a;)this.eventQueue.shift()?.callback();let o=e[0],i=e[1],r=A[0],g=A[1];n=Math.max(n,0);let E=s||t[0][0].length-n;this.totalVoicesAmount=0,this.midiChannels.forEach((d,l)=>{if(d.voices.length<1||d.isMuted)return;let C=d.voices.length,Q=l%16;d.renderAudio(t[Q][0],t[Q][1],o,i,r,g,n,E),this.totalVoicesAmount+=d.voices.length,d.voices.length!==C&&d.sendChannelProperty()}),this.currentSynthTime+=E*this.sampleTime}destroySynthProcessor(){this.midiChannels.forEach(e=>{e.voices.length=0,e.sustainedVoices.length=0,e.lockedControllers=[],e.preset=void 0}),this.clearCache(),this.midiChannels.length=0,this.soundBankManager.destroy()}controllerChange(e,A,t){this.midiChannels[e].controllerChange(A,t)}noteOn(e,A,t){this.midiChannels[e].noteOn(A,t)}noteOff(e,A){this.midiChannels[e].noteOff(A)}polyPressure(e,A,t){this.midiChannels[e].polyPressure(A,t)}channelPressure(e,A){this.midiChannels[e].channelPressure(A)}pitchWheel(e,A){this.midiChannels[e].pitchWheel(A)}programChange(e,A){this.midiChannels[e].programChange(A)}processMessage(e,A=0,t=!1,n=Ka){let s=()=>{let o=_n(e[0]),i=o.channel+A;switch(o.status){case R.noteOn:{let r=e[2];r>0?this.noteOn(i,e[1],r):this.noteOff(i,e[1]);break}case R.noteOff:t?this.midiChannels[i].killNote(e[1]):this.noteOff(i,e[1]);break;case R.pitchWheel:this.pitchWheel(i,e[2]<<7|e[1]);break;case R.controllerChange:this.controllerChange(i,e[1],e[2]);break;case R.programChange:this.programChange(i,e[1]);break;case R.polyPressure:this.polyPressure(i,e[0],e[1]);break;case R.channelPressure:this.channelPressure(i,e[1]);break;case R.systemExclusive:this.systemExclusive(new O(e.slice(1)),A);break;case R.reset:this.stopAllChannels(!0),this.resetAllControllers();break;default:break}},a=n.time;a>this.currentSynthTime?(this.eventQueue.push({callback:s.bind(this),time:a}),this.eventQueue.sort((o,i)=>o.time-i.time)):s()}clearCache(){this.privateProps.cachedVoices=[]}setMIDIVolume(e){this.privateProps.midiVolume=Math.pow(e,Math.E)}setMasterTuning(e){e=Math.round(e);for(let A of this.midiChannels)A.setCustomController(oA.masterTuning,e)}callEvent(e,A){this.onEventCall?.({type:e,data:A})}getCachedVoice(e,A,t){let n=e.bankMSB,s=e.bankLSB,{isGMGSDrum:a,program:o}=e;return a&&(n=128,s=0),this.privateProps.cachedVoices?.[n]?.[s]?.[o]?.[A]?.[t]}setCachedVoice(e,A,t,n){let s=e.bankMSB,a=e.bankLSB,{isGMGSDrum:o,program:i}=e;o&&(s=128,a=0),this.privateProps.cachedVoices[s]||(this.privateProps.cachedVoices[s]=[]),this.privateProps.cachedVoices[s][a]||(this.privateProps.cachedVoices[s][a]=[]),this.privateProps.cachedVoices[s][a][i]||(this.privateProps.cachedVoices[s][a][i]=[]),this.privateProps.cachedVoices[s][a][i][A]||(this.privateProps.cachedVoices[s][a][i][A]=[]),this.privateProps.cachedVoices[s][a][i][A][t]=n}createMIDIChannelInternal(e){let A=new lo(this,this.privateProps,this.privateProps.defaultPreset,this.midiChannels.length);this.midiChannels.push(A),e&&(this.callEvent("newChannel",void 0),A.sendChannelProperty(),this.midiChannels[this.midiChannels.length-1].setDrums(!0))}updatePresetList(){let e=this.soundBankManager.presetList;this.clearCache(),this.privateProps.callEvent("presetListChange",e),this.getDefaultPresets(),this.midiChannels.forEach(A=>{A.setPresetLock(!1)}),this.resetAllControllers(!1)}getDefaultPresets(){this.privateProps.defaultPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!1},"xg"),this.privateProps.drumPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!0},"gs")}};var Xt=Ee.consoleColors;var wa="spessasynth-worklet-processor";function Fa(e,A){return{...A,...e??{}}}var Ga={skipToFirstNoteOn:!0,initialPlaybackRate:1};var is=class extends Jt{events=[];constructor(A){super(),super.copyFrom(A),this.events=[]}},Zt=class e extends be{tracks;embeddedSoundBank=void 0;embeddedSoundBankSize;constructor(A){super(),super.copyMetadataFrom(A),this.tracks=A.tracks.map(t=>new is(t)),A instanceof e?this.embeddedSoundBankSize=A.embeddedSoundBankSize:this.embeddedSoundBankSize=A?.embeddedSoundBank?.byteLength}};var Wt={shuffleOn:1,shuffleOff:2,index:3};var zt=class{synthesizer;sequencer;post;alive=!1;constructor(A,t,n){this.synthesizer=new Da(A,t),this.sequencer=new ta(this.synthesizer),this.post=n,this.synthesizer.onEventCall=s=>{this.post({type:"eventCall",data:s,currentTime:this.synthesizer.currentSynthTime})},this.sequencer.onEventCall=s=>{if(s.type==="songListChange"){let o=s.data.newSongList.map(i=>new Zt(i));this.post({type:"sequencerReturn",data:{type:s.type,data:{newSongList:o}},currentTime:this.synthesizer.currentSynthTime});return}this.post({type:"sequencerReturn",data:s,currentTime:this.synthesizer.currentSynthTime})}}postReady(A,t,n=[]){this.post({type:"isFullyInitialized",data:{type:A,data:t},currentTime:this.synthesizer.currentSynthTime},n)}postProgress(A,t){this.post({type:"renderingProgress",data:{type:A,data:t},currentTime:this.synthesizer.currentSynthTime})}destroy(){this.synthesizer.destroySynthProcessor(),delete this.synthesizer,delete this.sequencer}handleMessage(A){let t=A.channelNumber,n;if(t>=0&&(n=this.synthesizer.midiChannels[t],n===void 0)){Ee.SpessaSynthWarn(`Trying to access channel ${t} which does not exist... ignoring!`);return}switch(A.type){case"midiMessage":this.synthesizer.processMessage(A.data.messageData,A.data.channelOffset,A.data.force,A.data.options);break;case"customCcChange":n?.setCustomController(A.data.ccNumber,A.data.ccValue);break;case"ccReset":t===Be?this.synthesizer.resetAllControllers():n?.resetControllers();break;case"setChannelVibrato":if(t===Be)for(let s of this.synthesizer.midiChannels)A.data.rate===Be?s.disableAndLockGSNRPN():s.setVibrato(A.data.depth,A.data.rate,A.data.delay);else A.data.rate===Be?n?.disableAndLockGSNRPN():n?.setVibrato(A.data.depth,A.data.rate,A.data.delay);break;case"stopAll":t===Be?this.synthesizer.stopAllChannels(A.data===1):n?.stopAllNotes(A.data===1);break;case"killNotes":this.synthesizer.killVoices(A.data);break;case"muteChannel":n?.muteChannel(A.data);break;case"addNewChannel":this.synthesizer.createMIDIChannel();break;case"setMasterParameter":this.synthesizer.setMasterParameter(A.data.type,A.data.data);break;case"setDrums":n?.setDrums(A.data);break;case"transposeChannel":n?.transposeChannel(A.data.semitones,A.data.force);break;case"lockController":if(A.data.controllerNumber===Be)n?.setPresetLock(A.data.isLocked);else{if(!n)return;n.lockedControllers[A.data.controllerNumber]=A.data.isLocked}break;case"sequencerSpecific":{if(!this.sequencer)return;let s=this.sequencer,a=A.data;switch(a.type){default:break;case"loadNewSongList":try{let i=a.data.map(r=>"duration"in r?be.copyFrom(r):be.fromArrayBuffer(r.binary,r.fileName));s.loadNewSongList(i)}catch(o){console.error(o),this.post({type:"sequencerReturn",data:{type:"midiError",data:o},currentTime:this.synthesizer.currentSynthTime})}break;case"pause":s.pause();break;case"play":s.play();break;case"setTime":s.currentTime=a.data;break;case"changeMIDIMessageSending":s.externalMIDIPlayback=a.data;break;case"setPlaybackRate":s.playbackRate=a.data;break;case"setLoopCount":s.loopCount=a.data;break;case"changeSong":switch(a.data.changeType){case Wt.shuffleOff:s.shuffleMode=!1;break;case Wt.shuffleOn:s.shuffleMode=!0;break;case Wt.index:a.data.data!==void 0&&(console.log("INDEX",a.data),s.songIndex=a.data.data);break}break;case"getMIDI":if(!s.midiData)throw new Error("No MIDI is loaded!");this.post({type:"sequencerReturn",data:{type:"getMIDI",data:s.midiData},currentTime:this.synthesizer.currentSynthTime});break;case"setSkipToFirstNote":s.skipToFirstNoteOn=a.data;break}break}case"soundBankManager":try{let s=this.synthesizer.soundBankManager,a=A.data,o;switch(a.type){case"addSoundBank":o=Qt.fromArrayBuffer(a.data.soundBankBuffer),s.addSoundBank(o,a.data.id,a.data.bankOffset),this.postReady("soundBankManager",null);break;case"deleteSoundBank":s.deleteSoundBank(a.data),this.postReady("soundBankManager",null);break;case"rearrangeSoundBanks":s.priorityOrder=a.data,this.postReady("soundBankManager",null)}}catch(s){this.post({type:"soundBankError",data:s,currentTime:this.synthesizer.currentSynthTime})}break;case"keyModifierManager":{let s=A.data,a=this.synthesizer.keyModifierManager;switch(s.type){default:return;case"addMapping":a.addMapping(s.data.channel,s.data.midiNote,s.data.mapping);break;case"clearMappings":a.clearMappings();break;case"deleteMapping":a.deleteMapping(s.data.channel,s.data.midiNote)}break}case"requestSynthesizerSnapshot":{let s=os.create(this.synthesizer);this.postReady("synthesizerSnapshot",s);break}case"setLogLevel":Os(A.data.enableInfo,A.data.enableWarning,A.data.enableGroup);break;case"destroyWorklet":this.alive=!1,this.synthesizer.destroySynthProcessor(),this.destroy();break;default:Ee.SpessaSynthWarn("Unrecognized event!",A);break}}};var _t=class extends zt{alive=!0;oneOutputMode;port;constructor(A,t,n,s){super(A,{enableEffects:!s.oneOutput,enableEventSystem:s?.enableEventSystem,initialTime:t},(a,o)=>{n.postMessage(a,o)}),this.port=n,this.oneOutputMode=s.oneOutput,this.synthesizer.processorInitialized.then(()=>{this.port.onmessage=a=>this.handleMessage(a.data),this.postReady("sf3Decoder",null)})}process(A,t){if(!this.alive)return!1;if(this.sequencer.processTick(),this.oneOutputMode){let n=t[0],s=[];for(let a=0;a<32;a+=2)s.push([n[a],n[a+1]]);this.synthesizer.renderAudioSplit([],[],s)}else this.synthesizer.renderAudioSplit(t[0],t[1],t.slice(2));return!0}handleMessage(A){if(A.type==="startOfflineRender"){this.startOfflineRender(A.data);return}super.handleMessage(A)}startOfflineRender(A){if(!this.sequencer)return;A.soundBankList.forEach((n,s)=>{try{this.synthesizer.soundBankManager.addSoundBank(Qt.fromArrayBuffer(n.soundBankBuffer),`bank-${s}`,n.bankOffset)}catch(a){this.post({type:"soundBankError",data:a,currentTime:this.synthesizer.currentSynthTime})}}),A.snapshot!==void 0&&this.synthesizer.applySynthesizerSnapshot(A.snapshot),Ee.SpessaSynthInfo("%cRendering enabled! Starting render.",Xt.info),this.sequencer.loopCount=A.loopCount,this.synthesizer.setMasterParameter("voiceCap",1/0);let t=Fa(A.sequencerOptions,Ga);this.sequencer.skipToFirstNoteOn=t.skipToFirstNoteOn,this.sequencer.playbackRate=t.initialPlaybackRate;try{this.sequencer.loadNewSongList([be.copyFrom(A.midiSequence)]),this.sequencer.play()}catch(n){console.error(n),this.post({type:"sequencerReturn",data:{type:"midiError",data:n},currentTime:this.synthesizer.currentSynthTime})}this.postReady("startOfflineRender",null)}};var Is=class extends AudioWorkletProcessor{process;core;constructor(A){super(),this.core=new _t(sampleRate,currentTime,this.port,A.processorOptions),this.process=this.core.process.bind(this.core)}};registerProcessor(wa,Is);Ee.SpessaSynthInfo("%cProcessor successfully registered!",Xt.recognized);
17
+ (${g})`,E.warn,E.value,E.unrecognized)},i=this.toCombinedSFDestination();if(i){n=i;let g=this.control.toSFSource();if(!g){r("Invalid control");return}s=g}else{let g=this.toSFDestination();if(!g){r("Invalid destination");return}typeof g=="object"?(t=g.newAmount,n=g.gen):n=g;let c=this.source.toSFSource();if(!c){r("Invalid source");return}s=c;let h=this.control.toSFSource();if(!h){r("Invalid control");return}a=h}this.transform!==QA.linear&&s.curveType===QA.linear&&(s.curveType=this.transform),n===I.initialAttenuation&&((this.source.source===N.velocity||this.source.source===N.volume||this.source.source===N.expression)&&(s.isNegative=!0),t=Math.min(960,Math.max(0,t)));let o=new cA(s,a,n,t,0);A.addModulators(o)}toCombinedSFDestination(){let A=this.source.source,t=this.destination;return A===N.vibratoLfo&&t===G.pitch?I.vibLfoToPitch:A===N.modLfo&&t===G.pitch?I.modLfoToPitch:A===N.modLfo&&t===G.filterCutoff?I.modLfoToFilterFc:A===N.modLfo&&t===G.gain?I.modLfoToVolume:A===N.modEnv&&t===G.filterCutoff?I.modEnvToFilterFc:A===N.modEnv&&t===G.pitch?I.modEnvToPitch:void 0}toSFDestination(){let A=this.shortScale;switch(this.destination){default:case G.none:return;case G.pan:return I.pan;case G.gain:return{gen:I.initialAttenuation,newAmount:-A};case G.pitch:return I.fineTune;case G.keyNum:return I.overridingRootKey;case G.volEnvDelay:return I.delayVolEnv;case G.volEnvAttack:return I.attackVolEnv;case G.volEnvHold:return I.holdVolEnv;case G.volEnvDecay:return I.decayVolEnv;case G.volEnvSustain:return{gen:I.sustainVolEnv,newAmount:1e3-A};case G.volEnvRelease:return I.releaseVolEnv;case G.modEnvDelay:return I.delayModEnv;case G.modEnvAttack:return I.attackModEnv;case G.modEnvHold:return I.holdModEnv;case G.modEnvDecay:return I.decayModEnv;case G.modEnvSustain:return{gen:I.sustainModEnv,newAmount:1e3-A};case G.modEnvRelease:return I.releaseModEnv;case G.filterCutoff:return I.initialFilterFc;case G.filterQ:return I.initialFilterQ;case G.chorusSend:return I.chorusEffectsSend;case G.reverbSend:return I.reverbEffectsSend;case G.modLfoFreq:return I.freqModLFO;case G.modLfoDelay:return I.delayModLFO;case G.vibLfoFreq:return I.freqVibLFO;case G.vibLfoDelay:return I.delayVibLFO}}},Sa=class Zn extends je{connectionBlocks=new Array;mode="dls2";get length(){return this.connectionBlocks.length}copyFrom(A){this.mode=A.mode,A.connectionBlocks.forEach(t=>{this.connectionBlocks.push(ct.copyFrom(t))})}fromSFZone(A){this.mode="dls2";let t=new Kt;t.copyFrom(A);for(let n of t.generators){let s;switch(n.generatorType){default:continue;case I.keyNumToVolEnvDecay:s=I.decayVolEnv;break;case I.keyNumToVolEnvHold:s=I.holdVolEnv;break;case I.keyNumToModEnvDecay:s=I.decayModEnv;break;case I.keyNumToModEnvHold:s=I.holdModEnv}let a=t.getGenerator(s,void 0),r=n.generatorValue*-128;if(a===void 0)continue;let i=60/128*r,o=a-i;t.setGenerator(n.generatorType,r,!1),t.setGenerator(s,o,!1)}for(let n of t.generators)ct.fromSFGenerator(n,this);for(let n of t.modulators)ct.fromSFModulator(n,this)}read(A){let t=fe(A,"lart"),n=fe(A,"lar2");if(t)for(this.mode="dls1";t.data.currentIndex<t.data.length;){let s=aA(t.data);Zn.verifyHeader(s,"art1","art2");let a=s.data,r=v(a,4);r!==8&&nA(`CbSize in articulation mismatch. Expected 8, got ${r}`);let i=v(a,4);for(let o=0;o<i;o++)this.connectionBlocks.push(ct.read(a))}else if(n)for(this.mode="dls2";n.data.currentIndex<n.data.length;){let s=aA(n.data);Zn.verifyHeader(s,"art2","art1");let a=s.data,r=v(a,4);r!==8&&nA(`CbSize in articulation mismatch. Expected 8, got ${r}`);let i=v(a,4);for(let o=0;o<i;o++)this.connectionBlocks.push(ct.read(a))}}write(){let A=new O(8);iA(A,8),iA(A,this.connectionBlocks.length);let t=this.connectionBlocks.map(s=>s.write()),n=MA(this.mode==="dls2"?"art2":"art1",[A,...t]);return IA(this.mode==="dls2"?"lar2":"lart",n,!1,!0)}toSFZone(A){let t=(n,s,a,r)=>{let i=n/-128;if(A.setGenerator(s,i),i<=120){let o=Math.round(.46875*n),g=this.connectionBlocks.find(c=>c.isStaticParameter&&c.destination===r);g&&A.setGenerator(a,o+g.shortScale)}};for(let n of this.connectionBlocks){let s=n.shortScale,a=n.source.source,r=n.control.source,i=n.destination;if(n.isStaticParameter){n.toSFGenerator(A);continue}if(r===N.none)if(a===N.keyNum){if(i===G.pitch){A.setGenerator(I.scaleTuning,s/128);continue}if(i===G.modEnvHold||i===G.modEnvDecay||i===G.volEnvHold||i==G.volEnvDecay)continue}else{let o=n.toCombinedSFDestination();if(o){A.setGenerator(o,s);continue}}n.toSFModulator(A)}this.mode==="dls1"&&A.addModulators(cA.copyFrom(Fr),cA.copyFrom(Gr));for(let n of this.connectionBlocks){if(n.source.source!==N.keyNum)continue;let s=n.shortScale;switch(n.destination){default:continue;case G.volEnvHold:t(s,I.keyNumToVolEnvHold,I.holdVolEnv,G.volEnvHold);break;case G.volEnvDecay:t(s,I.keyNumToVolEnvDecay,I.decayVolEnv,G.volEnvDecay);break;case G.modEnvHold:t(s,I.keyNumToModEnvHold,I.holdModEnv,G.modEnvHold);break;case G.modEnvDecay:t(s,I.keyNumToModEnvDecay,I.decayModEnv,G.modEnvDecay);break}}}},kn=class Nt{channel=1;tableIndex;fusOptions=0;phaseGroup=0;constructor(A){this.tableIndex=A}static copyFrom(A){let t=new Nt(A.tableIndex);return t.channel=A.channel,t.phaseGroup=A.phaseGroup,t.fusOptions=A.fusOptions,t}static read(A){let t=v(A.data,2),n=v(A.data,2),s=v(A.data,4),a=v(A.data,4),r=new Nt(a);return r.channel=s,r.fusOptions=t,r.phaseGroup=n,r}static fromSFZone(A,t){let n=A.indexOf(t.sample);if(n<0)throw new Error(`Wave link error: Sample ${t.sample.name} does not exist in the sample list.`);let s=new Nt(n);switch(t.sample.sampleType){default:case wA.leftSample:case wA.monoSample:s.channel=1;break;case wA.rightSample:s.channel=2}return s}write(){let A=new O(12);return W(A,this.fusOptions),W(A,this.phaseGroup),iA(A,this.channel),iA(A,this.tableIndex),IA("wlnk",A)}},Ut=class Ke extends je{articulation=new Sa;keyRange={min:0,max:127};velRange={min:0,max:127};keyGroup=0;fusOptions=0;usLayer=0;waveSample;waveLink;constructor(A,t){super(),this.waveSample=t,this.waveLink=A}static copyFrom(A){let t=new Ke(kn.copyFrom(A.waveLink),Xe.copyFrom(A.waveSample));return t.keyGroup=A.keyGroup,t.keyRange={...A.keyRange},t.velRange={...A.velRange},t.usLayer=A.usLayer,t.fusOptions=A.fusOptions,t.articulation.copyFrom(A.articulation),t}static read(A,t){let n=this.verifyAndReadList(t,"rgn ","rgn2"),s=n.find(S=>S.header==="wsmp"),a=s?Xe.read(s):void 0,r=n.find(S=>S.header==="wlnk");if(!r){nA("Invalid DLS region: missing 'wlnk' chunk! Discarding...");return}let i=kn.read(r),o=n.find(S=>S.header==="rgnh");if(!o){nA("Invalid DLS region: missing 'rgnh' chunk! Discarding...");return}let g=A[i.tableIndex];g||Ke.parsingError(`Invalid sample index: ${i.tableIndex}. Samples available: ${A.length}`),a??=g.waveSample;let c=new Ke(i,a),h=v(o.data,2),C=v(o.data,2),d=v(o.data,2),u=v(o.data,2);return d===0&&u===0&&(u=127,d=0),c.keyRange.max=C,c.keyRange.min=h,c.velRange.max=u,c.velRange.min=d,c.fusOptions=v(o.data,2),c.keyGroup=v(o.data,2),o.data.length-o.data.currentIndex>=2&&(c.usLayer=v(o.data,2)),c.articulation.read(n),c}static fromSFZone(A,t){let n=Xe.fromSFZone(A),s=kn.fromSFZone(t,A),a=new Ke(s,n);return a.keyRange.min=Math.max(A.keyRange.min,0),a.keyRange.max=A.keyRange.max,a.velRange.min=Math.max(A.velRange.min,0),a.velRange.max=A.velRange.max,a.keyGroup=A.getGenerator(I.exclusiveClass,0),a.articulation.fromSFZone(A),a}write(){let A=[this.writeHeader(),this.waveSample.write(),this.waveLink.write(),this.articulation.write()];return MA("rgn2",A,!0)}toSFZone(A,t){let n=t[this.waveLink.tableIndex];n||Ke.parsingError(`Invalid sample index: ${this.waveLink.tableIndex}`);let s=A.createZone(n);return s.keyRange=this.keyRange,s.velRange=this.velRange,this.keyRange.max===127&&this.keyRange.min===0&&(s.keyRange.min=-1),this.velRange.max===127&&this.velRange.min===0&&(s.velRange.min=-1),this.keyGroup!==0&&s.setGenerator(I.exclusiveClass,this.keyGroup),this.waveSample.toSFZone(s,n),this.articulation.toSFZone(s),s.generators=s.generators.filter(a=>a.generatorValue!==T[a.generatorType].def),s}writeHeader(){let A=new O(12);return W(A,Math.max(this.keyRange.min,0)),W(A,this.keyRange.max),W(A,Math.max(this.velRange.min,0)),W(A,this.velRange.max),W(A,this.fusOptions),W(A,this.keyGroup),W(A,this.usLayer),IA("rgnh",A)}},Dn=class Tt extends je{articulation=new Sa;regions=new Array;name="Unnamed";bankLSB=0;bankMSB=0;isGMGSDrum=!1;program=0;static copyFrom(A){let t=new Tt;return t.name=A.name,t.isGMGSDrum=A.isGMGSDrum,t.bankMSB=A.bankMSB,t.bankLSB=A.bankLSB,t.program=A.program,t.articulation.copyFrom(A.articulation),A.regions.forEach(n=>{t.regions.push(Ut.copyFrom(n))}),t}static read(A,t){let n=this.verifyAndReadList(t,"ins "),s=n.find(C=>C.header==="insh");if(!s)throw z(),new Error("No instrument header!");let a="",r=fe(n,"INFO");if(r){let C=aA(r.data);for(;C.header!=="INAM";)C=aA(r.data);a=hA(C.data,C.data.length).trim()}a.length<1&&(a="Unnamed Instrument");let i=new Tt;i.name=a;let o=v(s.data,4),g=v(s.data,4),c=v(s.data,4);i.program=c&127,i.bankMSB=g>>>8&127,i.bankLSB=g&127,i.isGMGSDrum=g>>>31>0,RA(`%cParsing %c"${a}"%c...`,E.info,E.recognized,E.info);let h=fe(n,"lrgn");if(!h)throw z(),new Error("No region list!");i.articulation.read(n);for(let C=0;C<o;C++){let d=aA(h.data);this.verifyHeader(d,"LIST");let u=hA(d.data,4);u!=="rgn "&&u!=="rgn2"&&(z(),this.parsingError(`Invalid DLS region! Expected "rgn " or "rgn2" got "${u}"`));let S=Ut.read(A,d);S&&i.regions.push(S)}return z(),i}static fromSFPreset(A,t){let n=new Tt;return n.name=A.name,n.bankLSB=A.bankLSB,n.bankMSB=A.bankMSB,n.program=A.program,n.isGMGSDrum=A.isGMGSDrum,OA(`%cConverting %c${A.toString()}%c to DLS...`,E.info,E.value,E.info),A.toFlattenedInstrument().zones.forEach(a=>{n.regions.push(Ut.fromSFZone(a,t))}),z(),n}write(){RA(`%cWriting %c${this.name}%c...`,E.info,E.recognized,E.info);let A=[this.writeHeader()],t=this.regions.map(s=>s.write());A.push(MA("lrgn",t,!0)),this.articulation.length>0&&A.push(this.articulation.write());let n=IA("INAM",ne(this.name,!0));return A.push(IA("INFO",n,!1,!0)),z(),MA("ins ",A,!0)}toSFPreset(A){let t=new We(A);t.name=this.name,t.bankMSB=this.bankMSB,t.bankLSB=this.bankLSB,t.isGMGSDrum=this.isGMGSDrum,t.program=this.program;let n=new dt;n.name=this.name,t.createZone(n),this.articulation.toSFZone(n.globalZone),this.regions.forEach(s=>s.toSFZone(n,A.samples)),n.globalize(),n.globalZone.modulators.find(s=>s.destination===I.reverbEffectsSend)===void 0&&n.globalZone.addModulators(cA.copyFrom(fa)),n.globalZone.modulators.find(s=>s.destination===I.chorusEffectsSend)===void 0&&n.globalZone.addModulators(cA.copyFrom(ma)),n.globalZone.generators=n.globalZone.generators.filter(s=>s.generatorValue!==T[s.generatorType].def),A.addPresets(t),A.addInstruments(n)}writeHeader(){let A=new O(12);iA(A,this.regions.length);let t=(this.bankMSB&127)<<8|this.bankLSB&127;return this.isGMGSDrum&&(t|=1<<31),iA(A,t),iA(A,this.program&127),IA("insh",A)}},pa={progressFunction:void 0},ya=class Wn extends je{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(A){if(!A)throw new Error("No data provided!");let t=new O(A);OA("%cParsing DLS file...",E.info);let n=aA(t,!1);this.verifyHeader(n,"RIFF"),this.verifyText(hA(t,4).toLowerCase(),"dls ");let s=[];for(;t.currentIndex<t.length;)s.push(aA(t));let a=new Wn;a.soundBankInfo.name="Unnamed DLS",a.soundBankInfo.product="SpessaSynth DLS",a.soundBankInfo.comment="(no description)";let r=fe(s,"INFO");if(r)for(;r.data.currentIndex<r.data.length;){let u=aA(r.data),S=u.header,m=hA(u.data,u.size);switch(S){case"INAM":a.soundBankInfo.name=m;break;case"ICRD":a.soundBankInfo.creationDate=ns(m);break;case"ICMT":a.soundBankInfo.comment=m;break;case"ISBJ":a.soundBankInfo.subject=m;break;case"ICOP":a.soundBankInfo.copyright=m;break;case"IENG":a.soundBankInfo.engineer=m;break;case"IPRD":a.soundBankInfo.product=m;break;case"ISFT":a.soundBankInfo.software=m}}this.printInfo(a);let i=s.find(u=>u.header==="colh");if(!i)return this.parsingError("No colh chunk!"),5;let o=v(i.data,4);y(`%cInstruments amount: %c${o}`,E.info,E.recognized);let g=fe(s,"wvpl");if(!g)return this.parsingError("No wvpl chunk!"),5;this.verifyAndReadList(g,"wvpl").forEach(u=>{a.samples.push(Ns.read(u))});let h=fe(s,"lins");if(!h)return this.parsingError("No lins chunk!"),5;let C=this.verifyAndReadList(h,"lins");RA("%cLoading instruments...",E.info),C.length!==o&&nA(`Colh reported invalid amount of instruments. Detected ${C.length}, expected ${o}`),C.forEach(u=>{a.instruments.push(Dn.read(a.samples,u))}),z();let d=s.find(u=>u.header==="pgal");if(d){y("%cFound the instrument aliasing chunk!",E.recognized);let u=d.data;(u[0]!==0||u[1]!==1||u[2]!==2||u[3]!==3)&&(u.currentIndex+=4);let S=a.instruments.find(k=>fA.isXGDrums(k.bankMSB)||k.isGMGSDrum);if(!S)return nA("MobileBAE aliasing chunk without a drum preset. Aborting!"),a;let m=u.slice(u.currentIndex,u.currentIndex+128);u.currentIndex+=128;for(let k=0;k<128;k++){let w=m[k];if(w===k)continue;let M=S.regions.find(x=>x.keyRange.max===w&&x.keyRange.min===w);if(!M){nA(`Invalid drum alias ${k} to ${w}: region does not exist.`);continue}let P=Ut.copyFrom(M);P.keyRange.max=k,P.keyRange.min=k,S.regions.push(P)}for(u.currentIndex+=4;u.currentIndex<u.length;){let k=v(u,2),w=k&127,M=k>>7&127,P=u[u.currentIndex++],x=u[u.currentIndex++];x!==0&&nA(`Invalid alias byte. Expected 0, got ${x}`);let B=v(u,2),j=B&127,J=B>>7&127,Y=u[u.currentIndex++];x=u[u.currentIndex++],x!==0&&nA(`Invalid alias header. Expected 0, got ${x}`);let U=a.instruments.find(q=>q.bankLSB===j&&q.bankMSB===J&&q.program===Y&&!q.isGMGSDrum);if(!U){nA(`Invalid alias. Missing instrument: ${j}:${J}:${Y}`);continue}let K=Dn.copyFrom(U);K.bankMSB=M,K.bankLSB=w,K.program=P,a.instruments.push(K)}}return y(`%cParsing finished! %c"${a.soundBankInfo.name||"UNNAMED"}"%c has %c${a.instruments.length}%c instruments and %c${a.samples.length}%c samples.`,E.info,E.recognized,E.info,E.recognized,E.info,E.recognized,E.info),z(),a}static fromSF(A){RA("%cSaving SF2 to DLS level 2...",E.info);let t=new Wn;return t.soundBankInfo={...A.soundBankInfo},t.soundBankInfo.comment=(t.soundBankInfo.comment??"(No description)")+`
18
+ Converted from SF2 to DLS with SpessaSynth`,A.samples.forEach(n=>{t.samples.push(Ns.fromSFSample(n))}),A.presets.forEach(n=>{t.instruments.push(Dn.fromSFPreset(n,A.samples))}),y("%cConversion complete!",E.recognized),z(),t}static printInfo(A){for(let[t,n]of Object.entries(A.soundBankInfo)){if(typeof n=="object"&&"major"in n){let s=n;y(`%c${t}: %c"${s.major}.${s.minor}"`,E.info,E.recognized)}y(`%c${t}: %c${n.toLocaleString()}`,E.info,E.recognized)}}async write(A=pa){RA("%cSaving DLS...",E.info);let t=new O(4);iA(t,this.instruments.length);let n=IA("colh",t);RA("%cWriting instruments...",E.info);let s=MA("lins",this.instruments.map(m=>m.write()),!0);y("%cSuccess!",E.recognized),z(),RA("%cWriting WAVE samples...",E.info);let a=0,r=[],i=[],o=0;for(let m of this.samples){let k=m.write();await A?.progressFunction?.(m.name,o,this.samples.length),r.push(a),a+=k.length,i.push(k),o++}let g=MA("wvpl",i,!0);y("%cSucceeded!",E.recognized);let c=new O(8+4*r.length);iA(c,8),iA(c,r.length);for(let m of r)iA(c,m);let h=IA("ptbl",c);this.soundBankInfo.software="SpessaSynth";let C=[],d=(m,k)=>{C.push(IA(m,ne(k,!0)))};for(let[m,k]of Object.entries(this.soundBankInfo)){let w=m,M=k;if(M)switch(w){case"name":d("INAM",M);break;case"comment":d("ICMT",M);break;case"copyright":d("ICOP",M);break;case"creationDate":d("ICRD",M.toISOString());break;case"engineer":d("IENG",M);break;case"product":d("IPRD",M);break;case"romVersion":case"version":case"soundEngine":case"romInfo":break;case"software":d("ISFT",M);break;case"subject":d("ISBJ",M)}}let u=MA("INFO",C,!0);y("%cCombining everything...");let S=MA("RIFF",[ne("DLS "),n,s,h,g,u]);return y("%cSaved successfully!",E.recognized),z(),S.buffer}toSF(){OA("%cConverting DLS to SF2...",E.info);let A=new ka;return A.soundBankInfo.version.minor=4,A.soundBankInfo.version.major=2,A.soundBankInfo={...this.soundBankInfo},A.soundBankInfo.comment=(A.soundBankInfo.comment??"(No description)")+`
19
+ Converted from DLS to SF2 with SpessaSynth`,this.samples.forEach(t=>{t.toSFSample(A)}),this.instruments.forEach(t=>{t.toSFPreset(A)}),A.flush(),y("%cConversion complete!",E.recognized),z(),A}},ka=class xt{static isSF3DecoderReady=qt.isInitialized;soundBankInfo={name:"Unnamed",creationDate:new Date,software:"SpessaSynth",soundEngine:"E-mu 10K2",version:{major:2,minor:4}};presets=[];samples=[];instruments=[];defaultModulators=ga.map(cA.copyFrom.bind(cA));customDefaultModulators=!1;_isXGBank=!1;get isXGBank(){return this._isXGBank}static mergeSoundBanks(...A){let t=A.shift();if(!t)throw new Error("No sound banks provided!");let n=t.presets;for(;A.length;){let a=A?.shift()?.presets;a&&a.forEach(r=>{n.find(i=>r.matches(i))===void 0&&n.push(r)})}let s=new xt;return s.addCompletePresets(n),s.soundBankInfo={...t.soundBankInfo},s}static async getSampleSoundBankFile(){let A=new xt,t=new Float32Array(128);for(let i=0;i<128;i++)t[i]=i/128*2-1;let n=new fr;n.name="Saw",n.originalKey=65,n.pitchCorrection=20,n.loopEnd=127,n.setAudioData(t,44100),A.addSamples(n);let s=new dt;s.name="Saw Wave",s.globalZone.addGenerators(new FA(I.initialAttenuation,375),new FA(I.releaseVolEnv,-1e3),new FA(I.sampleModes,1)),s.createZone(n),s.createZone(n).addGenerators(new FA(I.fineTune,-9)),A.addInstruments(s);let r=new We(A);return r.name="Saw Wave",r.createZone(s),A.addPresets(r),A.soundBankInfo.name="Dummy",A.flush(),await A.writeSF2()}static copyFrom(A){let t=new xt;return A.presets.forEach(n=>t.clonePreset(n)),t.soundBankInfo={...A.soundBankInfo},t}addCompletePresets(A){this.addPresets(...A);let t=[];for(let s of A)for(let a of s.zones)a.instrument&&!t.includes(a.instrument)&&t.push(a.instrument);this.addInstruments(...t);let n=[];for(let s of t)for(let a of s.zones)a.sample&&!n.includes(a.sample)&&n.push(a.sample);this.addSamples(...n)}async writeDLS(A=pa){return ya.fromSF(this).write(A)}async writeSF2(A=On){return yr(this,A)}addPresets(...A){this.presets.push(...A)}addInstruments(...A){this.instruments.push(...A)}addSamples(...A){this.samples.push(...A)}cloneSample(A){let t=this.samples.find(s=>s.name===A.name);if(t)return t;let n=new Vt(A.name,A.sampleRate,A.originalKey,A.pitchCorrection,A.sampleType,A.loopStart,A.loopEnd);if(A.isCompressed?n.setCompressedData(A.getRawData(!0)):n.setAudioData(A.getAudioData(),A.sampleRate),this.addSamples(n),A.linkedSample){let s=this.cloneSample(A.linkedSample);s.linkedSample||n.setLinkedSample(s,n.sampleType)}return n}cloneInstrument(A){let t=this.instruments.find(s=>s.name===A.name);if(t)return t;let n=new dt;n.name=A.name,n.globalZone.copyFrom(A.globalZone);for(let s of A.zones)n.createZone(this.cloneSample(s.sample)).copyFrom(s);return this.addInstruments(n),n}clonePreset(A){let t=this.presets.find(s=>s.name===A.name);if(t)return t;let n=new We(this);n.name=A.name,n.bankMSB=A.bankMSB,n.bankLSB=A.bankLSB,n.isGMGSDrum=A.isGMGSDrum,n.program=A.program,n.library=A.library,n.genre=A.genre,n.morphology=A.morphology,n.globalZone.copyFrom(A.globalZone);for(let s of A.zones)n.createZone(this.cloneInstrument(s.instrument)).copyFrom(s);return this.addPresets(n),n}flush(){this.presets.sort(te.sorter.bind(te)),this.parseInternal()}trimSoundBank(A){let t=(s,a)=>{let r=0;for(let i=0;i<s.zones.length;i++){let o=s.zones[i],g=o.keyRange,c=o.velRange,h=!1;for(let C of a)if(C.key>=g.min&&C.key<=g.max&&C.velocity>=c.min&&C.velocity<=c.max){h=!0;break}!h&&o.sample&&(y(`%c${o.sample.name}%c removed from %c${s.name}%c.`,E.recognized,E.info,E.recognized,E.info),s.deleteZone(i)&&(r++,i--,y(`%c${o.sample.name}%c deleted`,E.recognized,E.info)),o.sample.useCount<1&&this.deleteSample(o.sample))}return r};OA("%cTrimming sound bank...",E.info);let n=A.getUsedProgramsAndKeys(this);RA("%cModifying sound bank...",E.info),y("Detected keys for midi:",n);for(let s=0;s<this.presets.length;s++){let a=this.presets[s],r=n.get(a);if(r===void 0)y(`%cDeleting preset %c${a.name}%c and its zones`,E.info,E.recognized,E.info),this.deletePreset(a),s--;else{let i=[...r].map(g=>{let c=g.split("-");return{key:parseInt(c[0]),velocity:parseInt(c[1])}});RA(`%cTrimming %c${a.name}`,E.info,E.recognized),y(`Keys for ${a.name}:`,i);let o=0;for(let g=0;g<a.zones.length;g++){let c=a.zones[g],h=c.keyRange,C=c.velRange,d=!1;for(let u of i)if(u.key>=h.min&&u.key<=h.max&&u.velocity>=C.min&&u.velocity<=C.max&&c.instrument){d=!0;let S=t(c.instrument,i);y(`%cTrimmed off %c${S}%c zones from %c${c.instrument.name}`,E.info,E.recognized,E.info,E.recognized);break}!d&&c.instrument&&(o++,a.deleteZone(g),c.instrument.useCount<1&&this.deleteInstrument(c.instrument),g--)}y(`%cTrimmed off %c${o}%c zones from %c${a.name}`,E.info,E.recognized,E.info,E.recognized),z()}}this.removeUnusedElements(),y("%cSound bank modified!",E.recognized),z(),z()}removeUnusedElements(){this.instruments=this.instruments.filter(A=>{A.deleteUnusedZones();let t=A.useCount<1;return t&&A.delete(),!t}),this.samples=this.samples.filter(A=>{let t=A.useCount<1;return t&&A.unlinkSample(),!t})}deleteInstrument(A){A.delete(),this.instruments.splice(this.instruments.indexOf(A),1)}deletePreset(A){A.delete(),this.presets.splice(this.presets.indexOf(A),1)}deleteSample(A){A.unlinkSample(),this.samples.splice(this.samples.indexOf(A),1)}getPreset(A,t){return Ca(this.presets,A,t)}destroySoundBank(){this.presets.length=0,this.instruments.length=0,this.samples.length=0}parsingError(A){throw new Error(`SF parsing error: ${A} The file may be corrupted.`)}parseInternal(){this._isXGBank=!1;let A=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(fA.isXGDrums(t.bankMSB)&&(this._isXGBank=!0,!A.has(t.program))){this._isXGBank=!1,y(`%cThis bank is not valid XG. Preset %c${t.toString()}%c is not a valid XG drum. XG mode will use presets on bank 128.`,E.info,E.value,E.info);break}}printInfo(){for(let[A,t]of Object.entries(this.soundBankInfo)){if(typeof t=="object"&&"major"in t){let n=t;y(`%c${A}: %c"${n.major}.${n.minor}"`,E.info,E.recognized)}y(`%c${A}: %c${t.toLocaleString()}`,E.info,E.recognized)}}},Mr=class extends FA{constructor(e){let A=e.currentIndex,t=e[A+1]<<8|e[A],n=zn(e[A+2],e[A+3]);e.currentIndex+=4,super(t,n,!1)}};function Us(e){let A=[];for(;e.data.length>e.data.currentIndex;)A.push(new Mr(e.data));return A.pop(),A}var br=class extends Ea{constructor(e,A,t,n){let s=t.find(r=>r.generatorType===I.instrument),a;if(s)a=n[s.generatorValue];else throw new Error("No instrument ID found in preset zone.");if(!a)throw new Error(`Invalid instrument ID: ${s.generatorValue}, available instruments: ${n.length}`);super(e,a),this.addGenerators(...t),this.addModulators(...A)}};function vr(e,A,t,n,s){let a=e.gen,r=e.mod,i=0,o=0;for(let g of s)for(let c=0;c<g.zonesCount;c++){let h=a[o++],C=a[o],d=A.slice(h,C),u=r[i++],S=r[i],m=t.slice(u,S);d.find(k=>k.generatorType===I.instrument)!==void 0?g.createSoundFontZone(m,d,n):(g.globalZone.addGenerators(...d),g.globalZone.addModulators(...m))}}var Lr=class extends We{zoneStartIndex;zonesCount=0;constructor(e,A){super(A),this.name=hA(e.data,20).replace(/\d{3}:\d{3}/,""),this.program=v(e.data,2);let t=v(e.data,2);this.bankMSB=t&127,this.isGMGSDrum=(t&128)>0,this.bankLSB=t>>8,this.zoneStartIndex=v(e.data,2),this.library=v(e.data,4),this.genre=v(e.data,4),this.morphology=v(e.data,4)}createSoundFontZone(e,A,t){let n=new br(this,e,A,t);return this.zones.push(n),n}};function Ts(e,A){let t=[];for(;e.data.length>e.data.currentIndex;){let n=new Lr(e,A);if(t.length>0){let s=t[t.length-1];s.zonesCount=n.zoneStartIndex-s.zoneStartIndex}t.push(n)}return t.pop(),t}var Nr=class extends Ba{constructor(e,A,t,n){let s=t.find(r=>r.generatorType===I.sampleID),a;if(s)a=n[s.generatorValue];else throw new Error("No sample ID found in instrument zone.");if(!a)throw new Error(`Invalid sample ID: ${s.generatorValue}, available samples: ${n.length}`);super(e,a),this.addGenerators(...t),this.addModulators(...A)}};function Ur(e,A,t,n,s){let a=e.gen,r=e.mod,i=0,o=0;for(let g of s)for(let c=0;c<g.zonesCount;c++){let h=a[o++],C=a[o],d=A.slice(h,C),u=r[i++],S=r[i],m=t.slice(u,S);d.find(k=>k.generatorType===I.sampleID)?g.createSoundFontZone(m,d,n):(g.globalZone.addGenerators(...d),g.globalZone.addModulators(...m))}}var Tr=class extends dt{zoneStartIndex;zonesCount=0;constructor(e){super(),this.name=hA(e.data,20),this.zoneStartIndex=v(e.data,2)}createSoundFontZone(e,A,t){let n=new Nr(this,e,A,t);return this.zones.push(n),n}};function xs(e){let A=[];for(;e.data.length>e.data.currentIndex;){let t=new Tr(e);if(A.length>0){let n=A[A.length-1];n.zonesCount=t.zoneStartIndex-n.zoneStartIndex}A.push(t)}return A.pop(),A}function wn(e){let A=[];for(;e.data.length>e.data.currentIndex;){let t=e.data,n=v(t,2),s=v(t,2),a=zn(t[t.currentIndex++],t[t.currentIndex++]),r=v(t,2),i=v(t,2);A.push(new mA(n,r,s,a,i))}return A.pop(),A}function Mt(e){let A=[],t=[];for(;e.data.length>e.data.currentIndex;)t.push(v(e.data,2)),A.push(v(e.data,2));return{mod:A,gen:t}}var xr=class extends ka{sampleDataStartIndex=0;constructor(e,A=!0){if(super(),A)throw new Error("Using the constructor directly is deprecated. Use SoundBankLoader.fromArrayBuffer() instead.");let t=new O(e);OA("%cParsing a SoundFont2 file...",E.info),t||(z(),this.parsingError("No data provided!"));let n=aA(t,!1);this.verifyHeader(n,"riff");let s=hA(t,4).toLowerCase();if(s!=="sfbk"&&s!=="sfpk")throw z(),new SyntaxError(`Invalid soundFont! Expected "sfbk" or "sfpk" got "${s}"`);let a=s==="sfpk",r=aA(t);this.verifyHeader(r,"list");let i=hA(r.data,4);if(i!=="INFO")throw z(),new SyntaxError(`Invalid soundFont! Expected "INFO" or "${i}"`);let o;for(;r.data.length>r.data.currentIndex;){let V=aA(r.data),F=ee(V.data,V.data.length),b=V.header;switch(b){case"ifil":case"iver":let X=v(V.data,2),tA=v(V.data,2);b==="ifil"?this.soundBankInfo.version={major:X,minor:tA}:this.soundBankInfo.romVersion={major:X,minor:tA};break;case"DMOD":{this.defaultModulators=wn(V),this.customDefaultModulators=!0;break}case"LIST":{hA(V.data,4)==="xdta"&&(y("%cExtended SF2 found!",E.recognized),o=V);break}case"ICRD":this.soundBankInfo.creationDate=ns(hA(V.data,V.data.length));break;case"ISFT":this.soundBankInfo.software=F;break;case"IPRD":this.soundBankInfo.product=F;break;case"IENG":this.soundBankInfo.engineer=F;break;case"ICOP":this.soundBankInfo.copyright=F;break;case"INAM":this.soundBankInfo.name=F;break;case"ICMT":this.soundBankInfo.comment=F;break;case"irom":this.soundBankInfo.romInfo=F;break;case"isng":this.soundBankInfo.soundEngine=F}}this.printInfo();let g={};o!==void 0&&(g.phdr=aA(o.data),g.pbag=aA(o.data),g.pmod=aA(o.data),g.pgen=aA(o.data),g.inst=aA(o.data),g.ibag=aA(o.data),g.imod=aA(o.data),g.igen=aA(o.data),g.shdr=aA(o.data));let c=aA(t,!1);this.verifyHeader(c,"list"),this.verifyText(hA(t,4),"sdta"),y("%cVerifying smpl chunk...",E.warn);let h=aA(t,!1);this.verifyHeader(h,"smpl");let C;if(a){y("%cSF2Pack detected, attempting to decode the smpl chunk...",E.info);try{C=qt.decode(t.buffer.slice(t.currentIndex,t.currentIndex+c.size-12)).data[0]}catch(V){throw z(),new Error(`SF2Pack Ogg Vorbis decode error: ${V}`)}y(`%cDecoded the smpl chunk! Length: %c${C.length}`,E.info,E.value)}else C=t,this.sampleDataStartIndex=t.currentIndex;y(`%cSkipping sample chunk, length: %c${c.size-12}`,E.info,E.value),t.currentIndex+=c.size-12,y("%cLoading preset data chunk...",E.warn);let d=aA(t);this.verifyHeader(d,"list"),hA(d.data,4);let u=aA(d.data);this.verifyHeader(u,"phdr");let S=aA(d.data);this.verifyHeader(S,"pbag");let m=aA(d.data);this.verifyHeader(m,"pmod");let k=aA(d.data);this.verifyHeader(k,"pgen");let w=aA(d.data);this.verifyHeader(w,"inst");let M=aA(d.data);this.verifyHeader(M,"ibag");let P=aA(d.data);this.verifyHeader(P,"imod");let x=aA(d.data);this.verifyHeader(x,"igen");let B=aA(d.data);this.verifyHeader(B,"shdr"),y("%cParsing samples...",E.info),t.currentIndex=this.sampleDataStartIndex;let j=vs(B,C,o===void 0);if(o&&g.shdr){let V=vs(g.shdr,new Float32Array(1),!1);V.length===j.length&&j.forEach((F,b)=>{F.name+=V[b].name,F.linkedSampleIndex|=V[b].linkedSampleIndex<<16})}j.forEach(V=>V.name=V.name.trim()),this.samples.push(...j);let J=Us(x),Y=wn(P),U=xs(w);if(o&&g.inst){let V=xs(g.inst);V.length===U.length&&(U.forEach((F,b)=>{F.name+=V[b].name,F.zoneStartIndex|=V[b].zoneStartIndex}),U.forEach((F,b)=>{b<U.length-1&&(F.zonesCount=U[b+1].zoneStartIndex-F.zoneStartIndex)}))}U.forEach(V=>V.name=V.name.trim()),this.instruments.push(...U);let K=Mt(M);if(o&&g.ibag){let V=Mt(g.ibag);for(let F=0;F<K.mod.length;F++)K.mod[F]|=V.mod[F]<<16;for(let F=0;F<K.gen.length;F++)K.gen[F]|=V.gen[F]<<16}Ur(K,J,Y,this.samples,U);let q=Us(k),Z=wn(m),CA=Ts(u,this);if(o&&g.phdr){let V=Ts(g.phdr,this);V.length===CA.length&&(CA.forEach((F,b)=>{F.name+=V[b].name,F.zoneStartIndex|=V[b].zoneStartIndex}),CA.forEach((F,b)=>{b<CA.length-1&&(F.zonesCount=CA[b+1].zoneStartIndex-F.zoneStartIndex)}))}CA.forEach(V=>V.name===V.name.trim()),this.addPresets(...CA);let gA=Mt(S);if(o&&g.pbag){let V=Mt(g.pbag);for(let F=0;F<gA.mod.length;F++)gA.mod[F]|=V.mod[F]<<16;for(let F=0;F<gA.gen.length;F++)gA.gen[F]|=V.gen[F]<<16}vr(gA,q,Z,this.instruments,CA),this.flush(),y(`%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.`,E.info,E.recognized,E.info,E.recognized,E.info,E.recognized,E.info,E.recognized,E.info),z()}verifyHeader(e,A){e.header.toLowerCase()!==A.toLowerCase()&&(z(),this.parsingError(`Invalid chunk header! Expected "${A.toLowerCase()}" got "${e.header.toLowerCase()}"`))}verifyText(e,A){e.toLowerCase()!==A.toLowerCase()&&(z(),this.parsingError(`Invalid FourCC: Expected "${A.toLowerCase()}" got "${e.toLowerCase()}"\``))}},Qt=class{static fromArrayBuffer(e){let A=e.slice(8,12),t=new O(A);return hA(t,4).toLowerCase()==="dls "?this.loadDLS(e):new xr(e,!1)}static loadDLS(e){return ya.read(e).toSF()}},Da=class{soundBankManager=new Yo(this.updatePresetList.bind(this));midiChannels=[];keyModifierManager=new $o;totalVoicesAmount=0;processorInitialized=qt.isInitialized;currentSynthTime=0;sampleRate;enableEffects=!0;enableEventSystem;onEventCall;systemExclusive=jo.bind(this);resetAllControllers=Qo.bind(this);setMasterParameter=Go.bind(this);getMasterParameter=Ro.bind(this);getAllMasterParameters=Mo.bind(this);getVoicesForPreset=zo.bind(this);killVoices=Xo.bind(this);getVoices=_o.bind(this);privateProps;savedSnapshot;eventQueue=[];sampleTime;constructor(e,A=Gs){let t=_n(A,Gs);if(this.enableEffects=t.enableEffects,this.enableEventSystem=t.enableEventSystem,this.currentSynthTime=t.initialTime,this.sampleRate=e,this.sampleTime=1/e,isNaN(t.initialTime)||isNaN(e))throw new Error("Initial time or sample rate is NaN!");this.privateProps=new er(this.callEvent.bind(this),this.getVoices.bind(this),this.killVoices.bind(this),wo*(44100/e),Po*(44100/e),Oo*(44100/e));for(let n=0;n<Gn;n++)this.createMIDIChannelInternal(!1);this.processorInitialized.then(()=>{y("%cSpessaSynth is ready!",E.recognized)})}applySynthesizerSnapshot(e){this.savedSnapshot=e,e.apply(this),y("%cFinished applying snapshot!",E.info),this.resetAllControllers()}getSnapshot(){return is.create(this)}setEmbeddedSoundBank(e,A){let t=Qt.fromArrayBuffer(e);this.soundBankManager.addSoundBank(t,Gt,A);let n=this.soundBankManager.priorityOrder;n.pop(),n.unshift(Gt),this.soundBankManager.priorityOrder=n,this.savedSnapshot!==void 0&&this.applySynthesizerSnapshot(this.savedSnapshot),y(`%cEmbedded sound bank set at offset %c${A}`,E.recognized,E.value)}clearEmbeddedBank(){this.soundBankManager.soundBankList.some(e=>e.id===Gt)&&this.soundBankManager.deleteSoundBank(Gt)}createMIDIChannel(){this.createMIDIChannelInternal(!0)}stopAllChannels(e=!1){y("%cStop all received!",E.info);for(let A of this.midiChannels)A.stopAllNotes(e)}renderAudio(e,A,t,n=0,s=0){this.renderAudioSplit(A,t,Array(16).fill(e),n,s)}renderAudioSplit(e,A,t,n=0,s=0){let a=this.currentSynthTime;for(;this.eventQueue[0]?.time<=a;)this.eventQueue.shift()?.callback();let r=e[0],i=e[1],o=A[0],g=A[1];n=Math.max(n,0);let c=s||t[0][0].length-n;this.totalVoicesAmount=0,this.midiChannels.forEach((h,C)=>{if(h.voices.length<1||h.isMuted)return;let d=h.voices.length,u=C%16;h.renderAudio(t[u][0],t[u][1],r,i,o,g,n,c),this.totalVoicesAmount+=h.voices.length,h.voices.length!==d&&h.sendChannelProperty()}),this.currentSynthTime+=c*this.sampleTime}destroySynthProcessor(){this.midiChannels.forEach(e=>{e.voices.length=0,e.sustainedVoices.length=0,e.lockedControllers=[],e.preset=void 0}),this.clearCache(),this.midiChannels.length=0,this.soundBankManager.destroy()}controllerChange(e,A,t){this.midiChannels[e].controllerChange(A,t)}noteOn(e,A,t){this.midiChannels[e].noteOn(A,t)}noteOff(e,A){this.midiChannels[e].noteOff(A)}polyPressure(e,A,t){this.midiChannels[e].polyPressure(A,t)}channelPressure(e,A){this.midiChannels[e].channelPressure(A)}pitchWheel(e,A){this.midiChannels[e].pitchWheel(A)}programChange(e,A){this.midiChannels[e].programChange(A)}processMessage(e,A=0,t=!1,n=Ka){let s=()=>{let r=jn(e[0]),i=r.channel+A;switch(r.status){case R.noteOn:{let o=e[2];o>0?this.noteOn(i,e[1],o):this.noteOff(i,e[1]);break}case R.noteOff:t?this.midiChannels[i].killNote(e[1]):this.noteOff(i,e[1]);break;case R.pitchWheel:this.pitchWheel(i,e[2]<<7|e[1]);break;case R.controllerChange:this.controllerChange(i,e[1],e[2]);break;case R.programChange:this.programChange(i,e[1]);break;case R.polyPressure:this.polyPressure(i,e[0],e[1]);break;case R.channelPressure:this.channelPressure(i,e[1]);break;case R.systemExclusive:this.systemExclusive(new O(e.slice(1)),A);break;case R.reset:this.stopAllChannels(!0),this.resetAllControllers();break;default:break}},a=n.time;a>this.currentSynthTime?(this.eventQueue.push({callback:s.bind(this),time:a}),this.eventQueue.sort((r,i)=>r.time-i.time)):s()}clearCache(){this.privateProps.cachedVoices=[]}setMIDIVolume(e){this.privateProps.midiVolume=Math.pow(e,Math.E)}setMasterTuning(e){e=Math.round(e);for(let A of this.midiChannels)A.setCustomController(rA.masterTuning,e)}callEvent(e,A){this.onEventCall?.({type:e,data:A})}getCachedVoice(e,A,t){let n=e.bankMSB,s=e.bankLSB,{isGMGSDrum:a,program:r}=e;return a&&(n=128,s=0),this.privateProps.cachedVoices?.[n]?.[s]?.[r]?.[A]?.[t]}setCachedVoice(e,A,t,n){let s=e.bankMSB,a=e.bankLSB,{isGMGSDrum:r,program:i}=e;r&&(s=128,a=0),this.privateProps.cachedVoices[s]||(this.privateProps.cachedVoices[s]=[]),this.privateProps.cachedVoices[s][a]||(this.privateProps.cachedVoices[s][a]=[]),this.privateProps.cachedVoices[s][a][i]||(this.privateProps.cachedVoices[s][a][i]=[]),this.privateProps.cachedVoices[s][a][i][A]||(this.privateProps.cachedVoices[s][a][i][A]=[]),this.privateProps.cachedVoices[s][a][i][A][t]=n}createMIDIChannelInternal(e){let A=new dr(this,this.privateProps,this.privateProps.defaultPreset,this.midiChannels.length);this.midiChannels.push(A),e&&(this.callEvent("newChannel",void 0),A.sendChannelProperty(),this.midiChannels[this.midiChannels.length-1].setDrums(!0))}updatePresetList(){let e=this.soundBankManager.presetList;this.clearCache(),this.privateProps.callEvent("presetListChange",e),this.getDefaultPresets(),this.midiChannels.forEach(A=>{A.setPresetLock(!1)}),this.resetAllControllers(!1)}getDefaultPresets(){this.privateProps.defaultPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!1},"xg"),this.privateProps.drumPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!0},"gs")}};var Xt=Ee.consoleColors;var wa="spessasynth-worklet-processor";function Fa(e,A){return{...A,...e??{}}}var Ga={skipToFirstNoteOn:!0,initialPlaybackRate:1};var Is=class extends Jt{events=[];constructor(A){super(),super.copyFrom(A),this.events=[]}},Zt=class e extends be{tracks;embeddedSoundBank=void 0;embeddedSoundBankSize;constructor(A){super(),super.copyMetadataFrom(A),this.tracks=A.tracks.map(t=>new Is(t)),A instanceof e?this.embeddedSoundBankSize=A.embeddedSoundBankSize:this.embeddedSoundBankSize=A?.embeddedSoundBank?.byteLength}};var Wt={shuffleOn:1,shuffleOff:2,index:3};var zt=class{synthesizer;sequencer;post;alive=!1;constructor(A,t,n){this.synthesizer=new Da(A,t),this.sequencer=new ta(this.synthesizer),this.post=n,this.synthesizer.onEventCall=s=>{this.post({type:"eventCall",data:s,currentTime:this.synthesizer.currentSynthTime})},this.sequencer.onEventCall=s=>{if(s.type==="songListChange"){let r=s.data.newSongList.map(i=>new Zt(i));this.post({type:"sequencerReturn",data:{type:s.type,data:{newSongList:r}},currentTime:this.synthesizer.currentSynthTime});return}this.post({type:"sequencerReturn",data:s,currentTime:this.synthesizer.currentSynthTime})}}postReady(A,t,n=[]){this.post({type:"isFullyInitialized",data:{type:A,data:t},currentTime:this.synthesizer.currentSynthTime},n)}postProgress(A,t){this.post({type:"renderingProgress",data:{type:A,data:t},currentTime:this.synthesizer.currentSynthTime})}destroy(){this.synthesizer.destroySynthProcessor(),delete this.synthesizer,delete this.sequencer}handleMessage(A){let t=A.channelNumber,n;if(t>=0&&(n=this.synthesizer.midiChannels[t],n===void 0)){Ee.SpessaSynthWarn(`Trying to access channel ${t} which does not exist... ignoring!`);return}switch(A.type){case"midiMessage":this.synthesizer.processMessage(A.data.messageData,A.data.channelOffset,A.data.force,A.data.options);break;case"customCcChange":n?.setCustomController(A.data.ccNumber,A.data.ccValue);break;case"ccReset":t===Be?this.synthesizer.resetAllControllers():n?.resetControllers();break;case"setChannelVibrato":if(t===Be)for(let s of this.synthesizer.midiChannels)A.data.rate===Be?s.disableAndLockGSNRPN():s.setVibrato(A.data.depth,A.data.rate,A.data.delay);else A.data.rate===Be?n?.disableAndLockGSNRPN():n?.setVibrato(A.data.depth,A.data.rate,A.data.delay);break;case"stopAll":t===Be?this.synthesizer.stopAllChannels(A.data===1):n?.stopAllNotes(A.data===1);break;case"killNotes":this.synthesizer.killVoices(A.data);break;case"muteChannel":n?.muteChannel(A.data);break;case"addNewChannel":this.synthesizer.createMIDIChannel();break;case"setMasterParameter":this.synthesizer.setMasterParameter(A.data.type,A.data.data);break;case"setDrums":n?.setDrums(A.data);break;case"transposeChannel":n?.transposeChannel(A.data.semitones,A.data.force);break;case"lockController":if(A.data.controllerNumber===Be)n?.setPresetLock(A.data.isLocked);else{if(!n)return;n.lockedControllers[A.data.controllerNumber]=A.data.isLocked}break;case"sequencerSpecific":{if(!this.sequencer)return;let s=this.sequencer,a=A.data;switch(a.type){default:break;case"loadNewSongList":try{let i=a.data.map(o=>"duration"in o?be.copyFrom(o):be.fromArrayBuffer(o.binary,o.fileName));s.loadNewSongList(i)}catch(r){console.error(r),this.post({type:"sequencerReturn",data:{type:"midiError",data:r},currentTime:this.synthesizer.currentSynthTime})}break;case"pause":s.pause();break;case"play":s.play();break;case"setTime":s.currentTime=a.data;break;case"changeMIDIMessageSending":s.externalMIDIPlayback=a.data;break;case"setPlaybackRate":s.playbackRate=a.data;break;case"setLoopCount":s.loopCount=a.data;break;case"changeSong":switch(a.data.changeType){case Wt.shuffleOff:s.shuffleMode=!1;break;case Wt.shuffleOn:s.shuffleMode=!0;break;case Wt.index:a.data.data!==void 0&&(console.log("INDEX",a.data),s.songIndex=a.data.data);break}break;case"getMIDI":if(!s.midiData)throw new Error("No MIDI is loaded!");this.post({type:"sequencerReturn",data:{type:"getMIDI",data:s.midiData},currentTime:this.synthesizer.currentSynthTime});break;case"setSkipToFirstNote":s.skipToFirstNoteOn=a.data;break}break}case"soundBankManager":try{let s=this.synthesizer.soundBankManager,a=A.data,r;switch(a.type){case"addSoundBank":r=Qt.fromArrayBuffer(a.data.soundBankBuffer),s.addSoundBank(r,a.data.id,a.data.bankOffset),this.postReady("soundBankManager",null);break;case"deleteSoundBank":s.deleteSoundBank(a.data),this.postReady("soundBankManager",null);break;case"rearrangeSoundBanks":s.priorityOrder=a.data,this.postReady("soundBankManager",null)}}catch(s){this.post({type:"soundBankError",data:s,currentTime:this.synthesizer.currentSynthTime})}break;case"keyModifierManager":{let s=A.data,a=this.synthesizer.keyModifierManager;switch(s.type){default:return;case"addMapping":a.addMapping(s.data.channel,s.data.midiNote,s.data.mapping);break;case"clearMappings":a.clearMappings();break;case"deleteMapping":a.deleteMapping(s.data.channel,s.data.midiNote)}break}case"requestSynthesizerSnapshot":{let s=is.create(this.synthesizer);this.postReady("synthesizerSnapshot",s);break}case"setLogLevel":Os(A.data.enableInfo,A.data.enableWarning,A.data.enableGroup);break;case"destroyWorklet":this.alive=!1,this.synthesizer.destroySynthProcessor(),this.destroy();break;default:Ee.SpessaSynthWarn("Unrecognized event!",A);break}}};var _t=class extends zt{alive=!0;oneOutputMode;port;constructor(A,t,n,s){super(A,{enableEffects:!s.oneOutput,enableEventSystem:s?.enableEventSystem,initialTime:t},(a,r)=>{n.postMessage(a,r)}),this.port=n,this.oneOutputMode=s.oneOutput,this.synthesizer.processorInitialized.then(()=>{this.port.onmessage=a=>this.handleMessage(a.data),this.postReady("sf3Decoder",null)})}process(A,t){if(!this.alive)return!1;if(this.sequencer.processTick(),this.oneOutputMode){let n=t[0],s=[];for(let a=0;a<32;a+=2)s.push([n[a],n[a+1]]);this.synthesizer.renderAudioSplit([],[],s)}else this.synthesizer.renderAudioSplit(t[0],t[1],t.slice(2));return!0}handleMessage(A){if(A.type==="startOfflineRender"){this.startOfflineRender(A.data);return}super.handleMessage(A)}startOfflineRender(A){if(!this.sequencer)return;A.soundBankList.forEach((n,s)=>{try{this.synthesizer.soundBankManager.addSoundBank(Qt.fromArrayBuffer(n.soundBankBuffer),`bank-${s}`,n.bankOffset)}catch(a){this.post({type:"soundBankError",data:a,currentTime:this.synthesizer.currentSynthTime})}}),A.snapshot!==void 0&&this.synthesizer.applySynthesizerSnapshot(A.snapshot),Ee.SpessaSynthInfo("%cRendering enabled! Starting render.",Xt.info),this.sequencer.loopCount=A.loopCount,this.synthesizer.setMasterParameter("voiceCap",1/0);let t=Fa(A.sequencerOptions,Ga);this.sequencer.skipToFirstNoteOn=t.skipToFirstNoteOn,this.sequencer.playbackRate=t.initialPlaybackRate;try{this.sequencer.loadNewSongList([be.copyFrom(A.midiSequence)]),this.sequencer.play()}catch(n){console.error(n),this.post({type:"sequencerReturn",data:{type:"midiError",data:n},currentTime:this.synthesizer.currentSynthTime})}this.postReady("startOfflineRender",null)}};var gs=class extends AudioWorkletProcessor{process;core;constructor(A){super(),this.core=new _t(sampleRate,currentTime,this.port,A.processorOptions),this.process=this.core.process.bind(this.core)}};registerProcessor(wa,gs);Ee.SpessaSynthInfo("%cProcessor successfully registered!",Xt.recognized);
21
21
  //# sourceMappingURL=spessasynth_processor.min.js.map