spessasynth_lib 4.0.18 → 4.0.19

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')}),K=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 K(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=xs(e,A,e.currentIndex);return e.currentIndex+=A,t}function xs(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 rA(e,A){ht(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 Hs=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 K(0),(A||t)&&(e.currentIndex+=s,s%2!==0&&e.currentIndex++),new Hs(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,i=A.length;t&&i++;let o=i;n&&(s+=4,o+=4,a="LIST");let r=s+i;r%2!==0&&r++;let g=new K(r);return kA(g,a),rA(g,o),n&&kA(g,e),g.set(A,s),g}function bA(e,A,t=!1){let n=8,s=e,a=A.reduce((g,c)=>c.length+g,0),i=a;t&&(n+=4,i+=4,s="LIST");let o=n+a;o%2!==0&&o++;let r=new K(o);return kA(r,s),rA(r,i),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 _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 Ke(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 RA(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;"},Ys;(()=>{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]),i=function(F,b){for(var X=new A(31),nA=0;nA<31;++nA)X[nA]=b+=1<<F[nA-1];for(var iA=new t(X[30]),nA=1;nA<30;++nA)for(var NA=X[nA];NA<X[nA+1];++NA)iA[NA]=NA-X[nA]<<5|nA;return{b:X,r:iA}},o=i(n,2),r=o.b,g=o.r;r[28]=258,g[258]=28;var c=i(s,0),h=c.b,C=c.r,Q=new A(32768);for(w=0;w<32768;++w)d=(w&43690)>>1|(w&21845)<<1,d=(d&52428)>>2|(d&13107)<<2,d=(d&61680)>>4|(d&3855)<<4,Q[w]=((d&65280)>>8|(d&255)<<8)>>1;var d,w,p=function(F,b,X){for(var nA=F.length,iA=0,NA=new A(b);iA<nA;++iA)F[iA]&&++NA[F[iA]-1];var se=new A(b);for(iA=1;iA<b;++iA)se[iA]=se[iA-1]+NA[iA-1]<<1;var WA;if(X){WA=new A(1<<b);var zA=15-b;for(iA=0;iA<nA;++iA)if(F[iA])for(var be=iA<<4|F[iA],ae=b-F[iA],eA=se[F[iA]-1]++<<ae,EA=eA|(1<<ae)-1;eA<=EA;++eA)WA[Q[eA]>>zA]=be}else for(WA=new A(nA),iA=0;iA<nA;++iA)F[iA]&&(WA[iA]=Q[se[F[iA]-1]++]>>15-F[iA]);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=p(m,9,1),P=p(k,5,1),T=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 nA=b/8|0;return(F[nA]|F[nA+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},H=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))},Y=["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"],q=function(F,b,X){var nA=new Error(b||Y[F]);if(nA.code=F,Error.captureStackTrace&&Error.captureStackTrace(nA,q),!X)throw nA;return nA},O=function(F,b,X,nA){var iA=F.length,NA=nA?nA.length:0;if(!iA||b.f&&!b.l)return X||new e(0);var se=!X,WA=se||b.i!=2,zA=b.i;se&&(X=new e(iA*3));var be=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=iA*8;do{if(!_A){ae=B(F,eA,1);var ve=B(F,eA+1,3);if(eA+=3,ve)if(ve==1)_A=M,UA=P,Ce=9,he=5;else if(ve==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 Le=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=T(le),ut=(1<<An)-1,Ne=p(le,An,1),TA=0;TA<$t;){var et=Ne[B(F,eA,ut)];eA+=et&15;var GA=et>>4;if(GA<16)Le[TA++]=GA;else{var ie=0,tt=0;for(GA==16?(tt=3+B(F,eA,3),eA+=2,ie=Le[TA-1]):GA==17?(tt=3+B(F,eA,7),eA+=3):GA==18&&(tt=11+B(F,eA,127),eA+=7);tt--;)Le[TA++]=ie}}var en=Le.subarray(0,At),oe=Le.subarray(At);Ce=T(en),he=T(oe),_A=p(en,Ce,1),UA=p(oe,he,1)}else q(1);else{var GA=J(eA)+4,ft=F[GA-4]|F[GA-3]<<8,mt=GA+ft;if(mt>iA){zA&&q(0);break}WA&&be(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&&q(0);break}}WA&&be(EA+131072);for(var gs=(1<<Ce)-1,cs=(1<<he)-1,St=eA;;St=eA){var ie=_A[j(F,eA)&gs],Se=ie>>4;if(eA+=ie&15,eA>$e){zA&&q(0);break}if(ie||q(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,re=n[TA];tn=B(F,eA,(1<<re)-1)+r[TA],eA+=re}var Ue=UA[j(F,eA)&cs],pe=Ue>>4;Ue||q(3),eA+=Ue&15;var oe=h[pe];if(pe>3){var re=s[pe];oe+=j(F,eA)&(1<<re)-1,eA+=re}if(eA>$e){zA&&q(0);break}WA&&be(EA+131072);var nt=EA+tn;if(EA<oe){var Te=NA-oe,yA=Math.min(oe,nt);for(Te+EA<0&&q(3);EA<yA;++EA)X[EA]=nA[Te+EA]}for(;EA<nt;++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?H(X,0,EA):X.subarray(0,EA)},Z=new e(0);function CA(F,b){return O(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{}Ys=CA})();var Ps=Ys,Js=!1,Os=!0,Pt=!1;function qs(e,A,t){Js=e,Os=A,Pt=t}function y(...e){Js&&console.info(...e)}function tA(...e){Os&&console.warn(...e)}function KA(...e){Pt&&console.group(...e)}function MA(...e){Pt&&console.groupCollapsed(...e)}function z(){Pt&&console.groupEnd()}var Ee={consoleColors:E,SpessaSynthInfo:y,SpessaSynthWarn:tA,SpessaSynthGroupCollapsed:MA,SpessaSynthGroup:KA,SpessaSynthGroupEnd:z,readBytesAsUintBigEndian:_e,readLittleEndian:v,readBytesAsString:hA,readVariableLengthQuantity:uA,inflateSync:Ps};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},S={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=[],i=0,o;for(let r of s.events){let g=Math.max(0,r.ticks-i);if(r.statusByte===R.endOfTrack){i+=g;continue}let c;r.statusByte<=R.sequenceSpecific?(c=[255,r.statusByte,...En(r.data.length),...r.data],o=void 0):r.statusByte===R.systemExclusive?(c=[240,...En(r.data.length),...r.data],o=void 0):(c=[],o!==r.statusByte&&(o=r.statusByte,c.push(r.statusByte)),c.push(...r.data)),a.push(...En(g)),a.push(...c),i+=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 i=0;i<s.length;i++)a.push(s.charCodeAt(i))},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 Oa=350,me=9,Ks=16,Vs="gs",Be=-1,Gt=`SPESSASYNTH_EMBEDDED_BANK_${Math.random()}_DO_NOT_DELETE`,Xs=32767,qa={time:0},Ka=.03,Va=.07,Xa=1,Za=64,fs=121,fA=class{static getDefaultBank(e){return e==="gm2"?fs: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===127}static isValidXGMSB(e){return this.isXGDrums(e)||e===Za||e===fs}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 K([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),i=16+Math.max(...e.portChannelOffsetMap),o=[];for(let r=0;r<i;r++)o.push({program:0,drums:r%16===me,lastBank:void 0,lastBankLSB:void 0,hasBankSelect:!1});if(e.iterate((r,g)=>{let c=e.portChannelOffsetMap[a[g]];if(r.statusByte===R.midiPort){a[g]=r.data[0];return}let h=r.statusByte&240;if(h!==R.controllerChange&&h!==R.programChange&&h!==R.systemExclusive)return;if(h===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 p=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][r.data[5]&15]+c;o[p].drums=!!(r.data[7]>0&&r.data[5]>>4);return}let C=(r.statusByte&15)+c,Q=o[C];if(h===R.programChange){let m={program:r.data[0],bankLSB:Q.lastBankLSB?.data?.[1]??0,bankMSB:fA.subtrackBankOffset(Q.lastBank?.data?.[1]??0,e.bankOffset),isGMGSDrum:Q.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),r.data[0]=k.program,k.isGMGSDrum&&fA.isSystemXG(n)||Q.lastBank===void 0||(Q.lastBank.data[1]=fA.addBankOffset(k.bankMSB,A,k.isXGDrums),Q.lastBankLSB===void 0))return;Q.lastBankLSB.data[1]=k.bankLSB;return}let d=r.data[0]===S.bankSelectLSB;r.data[0]!==S.bankSelect&&!d||(Q.hasBankSelect=!0,d?Q.lastBankLSB=r:Q.lastBank=r)}),o.forEach((r,g)=>{if(r.hasBankSelect)return;let c=g%16,h=R.programChange|c,C=Math.floor(g/16)*16,Q=e.portChannelOffsetMap.indexOf(C),d=e.tracks.find(M=>M.port===Q&&M.channels.has(c));if(d===void 0)return;let p=d.events.findIndex(M=>M.statusByte===h);if(p===-1){let M=d.events.findIndex(B=>B.statusByte>128&&B.statusByte<240&&(B.statusByte&15)===c);if(M===-1)return;let P=d.events[M].ticks,T=t.getPreset({bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1},n).program;d.addEvent(new ZA(P,R.programChange|c,new K([T])),M),p=M}y(`%cAdding bank select for %c${g}`,E.info,E.recognized);let m=d.events[p].ticks,k=t.getPreset({bankLSB:0,bankMSB:0,program:r.program,isGMGSDrum:r.drums},n),w=fA.addBankOffset(k.bankMSB,A,k.isXGDrums);d.addEvent(new ZA(m,R.controllerChange|c,new K([S.bankSelect,w])),p)}),n==="gm"&&!fA.isSystemXG(n)){for(let g of s){let c=e.tracks[g.tNum];c.deleteEvent(c.events.indexOf(g.e))}let r=0;e.tracks[0].events[0].statusByte===R.trackName&&r++,e.tracks[0].addEvent(Ws(0),r)}}var ms={bankOffset:0,metadata:{},correctBankOffset:!0,soundBank:void 0};function _a(e,A,t){let n=t.metadata;if(KA("%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 K(e.writeMIDI());n.name??=e.getName(),n.creationDate??=new Date,n.copyright??=Wa,n.software??="SpessaSynth",Object.entries(n).forEach(o=>{let r=o;r[1]&&e.setRMIDInfo(r[0],r[1])});let a=[];Object.entries(e.rmidiInfo).forEach(o=>{let r=o[0],g=o[1],c=h=>{a.push(IA(h,g))};switch(r){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 i=new K(2);return ht(i,t.bankOffset,2),a.push(IA("DBNK",i)),y("%cFinished!",E.info),z(),bA("RIFF",[ne("RMID"),IA("data",s),bA("INFO",a,!0),new K(A)]).buffer}function ja(e,A){MA("%cSearching for all used programs and keys...",E.info);let t=16+Math.max(...e.portChannelOffsetMap),n=[],s="gs";for(let o=0;o<t;o++){let r=o%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,i=e.tracks.map(o=>o.port);return e.iterate((o,r)=>{if(o.statusByte===R.midiPort){i[r]=o.data[0];return}let g=o.statusByte&240;if(g!==R.noteOn&&g!==R.controllerChange&&g!==R.programChange&&g!==R.systemExclusive)return;let c=(o.statusByte&15)+e.portChannelOffsetMap[i[r]]||0,h=n[c];switch(g){case R.programChange:h.preset=A.getPreset({bankMSB:h.bankMSB,bankLSB:h.bankLSB,program:o.data[0],isGMGSDrum:h.isDrum},s);break;case R.controllerChange:switch(o.data[0]){default:return;case S.bankSelectLSB:h.bankLSB=o.data[1];break;case S.bankSelect:h.bankMSB=o.data[1]}break;case R.noteOn:if(o.data[1]===0)return;let C=a.get(h.preset);C||(C=new Set,a.set(h.preset,C)),C.add(`${o.data[0]}-${o.data[1]}`);break;case R.systemExclusive:{if(!Zs(o)){jn(o)?(s="xg",y("%cXG on detected!",E.recognized)):es(o)?(s="gm2",y("%cGM2 on detected!",E.recognized)):As(o)?(s="gm",y("%cGM on detected!",E.recognized)):$n(o)&&(s="gs",y("%cGS on detected!",E.recognized));return}let Q=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][o.data[5]&15]+e.portChannelOffsetMap[i[r]],d=!!(o.data[7]>0&&o.data[5]>>4);h=n[Q],h.isDrum=d}break}}),a.forEach((o,r)=>{o.size===0&&(y(`%cDetected change but no keys for %c${r.name}`,E.info,E.value),a.delete(r))}),z(),a}function $a(e,A=0){let t=C=>(C.data=new K(C.data.buffer),6e7/_e(C.data,3)),n=[],a=e.tracks.map(C=>C.events).flat();a.sort((C,Q)=>C.ticks-Q.ticks);for(let C=0;C<16;C++)n.push([]);let i=0,o=60/(120*e.timeDivision),r=0,g=0,c=[];for(let C=0;C<16;C++)c.push([]);let h=(C,Q)=>{let d=c[Q].findIndex(m=>m.midiNote===C),p=c[Q][d];if(p){let m=i-p.start;p.length=m,Q===me&&(p.length=m<A?A:m),c[Q].splice(d,1)}g--};for(;r<a.length;){let C=a[r],Q=C.statusByte>>4,d=C.statusByte&15;if(Q===8)h(C.data[0],d);else if(Q===9)if(C.data[1]===0)h(C.data[0],d);else{h(C.data[0],d);let p={midiNote:C.data[0],start:i,length:-1,velocity:C.data[1]/127};n[d].push(p),c[d].push(p),g++}else C.statusByte===81&&(o=60/(t(C)*e.timeDivision));if(++r>=a.length)break;i+=o*(a[r].ticks-C.ticks)}return g>0&&c.forEach((C,Q)=>{C.forEach(d=>{let p=i-d.start;d.length=p,Q===me&&(d.length=p<A?A:p)})}),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 Ye(e,A,t,n){return new ZA(n,R.controllerChange|e%16,new K([A,t]))}function Ai(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 K([...n,a,247]))}function ei(e,A=[],t=[],n=[],s=[]){MA("%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 i="gs",o=!1,r=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),r[m]=k)};e.tracks.forEach((m,k)=>{h(k,m.port)});let C=c,Q=Array(C).fill(!0),d=Array(C).fill(0),p=Array(C).fill(0);if(s.forEach(m=>{let k=Math.trunc(m.keyShift),w=m.keyShift-k;d[m.channel]=k,p[m.channel]=w}),e.iterate((m,k,w)=>{let M=e.tracks[k],P=w[k],T=()=>{M.deleteEvent(P),w[k]--},B=(q,O=0)=>{M.addEvent(q,P+O),w[k]++},j=g[r[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,H=m.statusByte&15,Y=H+j;if(n.includes(Y)){T();return}switch(J){case R.noteOn:if(Q[Y]){Q[Y]=!1,t.filter(O=>O.channel===Y).forEach(O=>{let Z=Ye(H,O.controllerNumber,O.controllerValue,m.ticks);B(Z)});let q=p[Y];if(q!==0){let O=q*64+64,Z=Ye(H,S.registeredParameterMSB,0,m.ticks),CA=Ye(H,S.registeredParameterLSB,1,m.ticks),gA=Ye(Y,S.dataEntryMSB,O,m.ticks),V=Ye(H,S.dataEntryLSB,0,m.ticks);B(V),B(gA),B(CA),B(Z)}if(a.has(Y)){let O=A.find(b=>b.channel===Y);if(!O)return;y(`%cSetting %c${O.channel}%c to %c${te.toMIDIString(O)}%c. Track num: %c${k}`,E.info,E.recognized,E.info,E.recognized,E.info,E.recognized);let Z=O.bankMSB,CA=O.bankLSB,gA=O.program,V=new ZA(m.ticks,R.programChange|H,new K([gA]));B(V);let F=(b,X)=>{let nA=Ye(H,b?S.bankSelectLSB:S.bankSelect,X,m.ticks);B(nA)};fA.isSystemXG(i)&&O.isGMGSDrum&&(y(`%cAdding XG Drum change on track %c${k}`,E.recognized,E.value),Z=fA.getDrumBank(i),CA=0),F(!1,Z),F(!0,CA),O.isGMGSDrum&&!fA.isSystemXG(i)&&H!==me&&(y(`%cAdding GS Drum change on track %c${k}`,E.recognized,E.value),B(Ai(H,m.ticks)))}}m.data[0]+=d[Y];break;case R.noteOff:m.data[0]+=d[Y];break;case R.programChange:if(a.has(Y)){T();return}break;case R.controllerChange:{let q=m.data[0];if(t.find(Z=>Z.channel===Y&&q===Z.controllerNumber)!==void 0){T();return}(q===S.bankSelect||q===S.bankSelectLSB)&&a.has(Y)&&T()}break;case R.systemExclusive:if(jn(m))y("%cXG system on detected",E.info),i="xg",o=!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)&&T();else if(es(m))y("%cGM2 system on detected",E.info),i="gm2",o=!0;else if($n(m)){o=!0,y("%cGS on detected!",E.recognized);break}else As(m)&&(y("%cGM on detected, removing!",E.info),T(),o=!1)}}),!o&&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 ti(e,A){let t=[],n=[],s=[],a=[];A.channelSnapshots.forEach((i,o)=>{if(i.isMuted){n.push(o);return}let r=i.channelTransposeKeyShift+i.customControllers[oA.channelTransposeFine]/100;r!==0&&t.push({channel:o,keyShift:r}),i.lockPreset&&s.push({channel:o,...i.patch}),i.lockedControllers.forEach((g,c)=>{if(!g||c>127||c===S.bankSelect)return;let h=i.midiControllers[c]>>7;a.push({channel:o,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},Pe={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},ni={standard:0,MMA:1,registered:2,nonRegistered:3},Rt={none:0,MMAUnpacker:1,registered:2,nonRegistered:3},si=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,i=A.slice(A.currentIndex,A.currentIndex+a);A.currentIndex+=a,this.metadataLength=uA(i);let o=i.slice(i.currentIndex,i.currentIndex+this.metadataLength);i.currentIndex+=this.metadataLength;let r,g;for(;o.currentIndex<o.length;){if(o[o.currentIndex]===0)o.currentIndex++,r=uA(o),Object.values(Bn).includes(r)?g=Object.keys(Bn).find(p=>Bn[p]===r)??"":(y(`Unknown field specifier: ${r}`),g=`unknown_${r}`);else{let p=uA(o);r=hA(o,p),g=r}let d=uA(o);if(d===0){let p=uA(o),m=o.slice(o.currentIndex,o.currentIndex+p);o.currentIndex+=p,uA(m)<4?this.metadata[g]=hA(m,p-1):this.metadata[g]=m.slice(m.currentIndex)}else y(`International content: ${d}`),o.currentIndex+=uA(o)}let c=i.currentIndex,h=uA(i),C=i.slice(i.currentIndex,c+h);if(i.currentIndex=c+h,h>0)for(this.packedContent=!0;C.currentIndex<h;){let Q={};switch(Q.id=uA(C),Q.id){case Rt.nonRegistered:case Rt.registered:throw z(),new Error(`Unsupported unpacker ID: ${Q.id}`);default:throw z(),new Error(`Unknown unpacker ID: ${Q.id}`);case Rt.none:Q.standardID=uA(C);break;case Rt.MMAUnpacker:{let d=C[C.currentIndex++];d===0&&(d<<=8,d|=C[C.currentIndex++],d<<=8,d|=C[C.currentIndex++]);let p=uA(C);Q.manufacturerID=d,Q.manufacturerInternalID=p}break}Q.decodedSize=uA(C),this.nodeUnpackers.push(Q)}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 Pe.inLineResource:break;case Pe.externalXMF:case Pe.inFileNode:case Pe.XMFFileURIandNodeID:case Pe.externalFile:case Pe.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 d=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 K(Ps(d).buffer)}catch(p){if(z(),p instanceof Error)throw new Error(`Error unpacking XMF file contents: ${p.message}.`)}}let Q=this.metadata.resourceFormat;if(Q===void 0)tA("No resource format for this file node!");else{Q[0]!==ni.standard&&(y(`Non-standard formatTypeID: ${Q.toString()}`),this.resourceFormat=Q.toString());let p=Q[1];Object.values(Cn).includes(p)?this.resourceFormat=Object.keys(Cn).find(m=>Cn[m]===p):y(`Unrecognized resource format: ${p}`)}}else for(this.resourceFormat="folder";this.nodeData.currentIndex<this.nodeData.length;){let Q=this.nodeData.currentIndex,d=uA(this.nodeData),p=this.nodeData.slice(Q,Q+d);this.nodeData.currentIndex=Q+d,this.innerNodes.push(new _s(p))}}get isFile(){return this.itemCount===0}};function ai(e,A){e.bankOffset=0;let t=hA(A,4);if(t!=="XMF_")throw z(),new SyntaxError(`Invalid XMF Header! Expected "_XMF", got "${t}"`);KA("%cParsing XMF file...",E.info);let n=hA(A,4);if(y(`%cXMF version: %c${n}`,E.info,E.recognized),n==="2.00"){let r=Ke(A,4),g=Ke(A,4);y(`%cFile Type ID: %c${r}%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 si(A),i,o=r=>{let g=(c,h)=>{r.metadata[c]!==void 0&&typeof r.metadata[c]=="string"&&(e.rmidiInfo[h]=ne(r.metadata[c]))};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!",E.recognized),e.embeddedSoundBank=r.nodeData.buffer;break;case"StandardMIDIFile":case"StandardMIDIFileType1":y("%cFound embedded MIDI!",E.recognized),i=r.nodeData;break}else for(let c of r.innerNodes)o(c)};if(o(a),z(),!i)throw new Error("No MIDI data in the XMF file!");return i}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 K(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 Ss(e,A,t){MA("%cParsing MIDI File...",E.info),e.fileName=t;let n=new K(A),s=n,a=g=>{let c=hA(g,4),h=Ke(g,4),C=new K(h),Q={type:c,size:h,data:C},d=g.slice(g.currentIndex,g.currentIndex+Q.size);return Q.data.set(d,0),g.currentIndex+=Q.size,Q},i=ee(n,4);if(i==="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 Q=n.currentIndex,d=aA(n,!0);if(d.header==="RIFF"){let p=hA(d.data,4).toLowerCase();p==="sfbk"||p==="sfpk"||p==="dls "?(y("%cFound embedded soundbank!",E.recognized),e.embeddedSoundBank=n.slice(Q,Q+d.size).buffer):tA(`Unknown RIFF chunk: "${p}"`),p==="dls "?e.isDLSRMIDI=!0:h=!0}else if(d.header==="LIST"&&hA(d.data,4)==="INFO")for(y("%cFound RMIDI INFO chunk!",E.recognized);d.data.currentIndex<=d.size;){let m=aA(d.data,!0),k=m.header,w=m.data;switch(k){default:tA(`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=xs(w,2),C=!0;break}}}h&&!C&&(e.bankOffset=1),e.isDLSRMIDI&&(e.bankOffset=0),e.embeddedSoundBank===void 0&&(e.bankOffset=0)}else i==="XMF_"?s=ai(e,n):s=n;let o=a(s);if(o.type!=="MThd")throw z(),new SyntaxError(`Invalid MIDI Header! Expected "MThd", got "${o.type}"`);if(o.size!==6)throw z(),new RangeError(`Invalid MIDI header chunk size! Expected 6, got ${o.size}`);e.format=Ke(o.data,2);let r=Ke(o.data,2);e.timeDivision=Ke(o.data,2);for(let g=0;g<r;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,Q=0;for(e.format===2&&g>0&&(Q+=e.tracks[g-1].events[e.tracks[g-1].events.length-1].ticks);h.data.currentIndex<h.size;){Q+=uA(h.data);let d=h.data[h.data.currentIndex],p;if(C!==void 0&&d<128)p=C;else{if(d<128)throw z(),new SyntaxError(`Unexpected byte with no running byte. (${d})`);p=h.data[h.data.currentIndex++]}let m=Ya(p),k;switch(m){case-1:k=0;break;case-2:p=h.data[h.data.currentIndex++],k=uA(h.data);break;case-3:k=uA(h.data);break;default:k=Pa[p>>4],C=p;break}let w=new K(k);w.set(h.data.slice(h.data.currentIndex,h.data.currentIndex+k),0);let M=new ZA(Q,p,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 ii=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"]]),oi=[ii];function ri(e){for(let A of oi){let t=e;A.forEach((s,a)=>{let i=new RegExp(a,"gi");t=t.replace(i,s)});let n=new Date(t);if(!isNaN(n.getTime()))return n}}function Ii(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 gi(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 ci(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=ri(e);if(n)return n;let s=Ii(e);if(s)return s;let a=gi(e);if(a)return a;let i=ci(e);return i||(tA(`Invalid date: "${e}". Replacing with the current date!`),new Date)}return t}var Me=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,type:"hard"};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 Ss(n,A,t),n}static async fromFile(A){let t=new vt;return Ss(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=ms){return _a(this,A,zn(t,ms))}modify(A=[],t=[],n=[],s=[]){ei(this,A,t,n,s)}applySnapshot(A){ti(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){tA(`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){tA(`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,i=1/0;return this.tracks.forEach(({events:o},r)=>{t[r]>=o.length||o[t[r]].ticks<i&&(a=r,i=o[t[r]].ticks)}),a};for(;n>0;){let a=s(),i=this.tracks[a].events;if(t[a]>=i.length){n--;continue}let o=i[t[a]];A(o,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 K(t.data))),this.lyrics=A.lyrics.map(t=>new ZA(t.ticks,t.statusByte,new K(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(){KA("%cInterpreting MIDI events...",E.info);let A=!1;this.tempoChanges=[{ticks:0,tempo:120}],this.extraMetadata=[],this.lyrics=[],this.firstNoteOn=0,this.keyRange={max:0,min:127},this.lastVoiceEventTick=0,this.portChannelOffsetMap=[0],this.loop={start:0,end:0,type:"hard"},this.isKaraokeFile=!1,this.isMultiPort=!1;let t=!1;typeof this.rmidiInfo.name<"u"&&(t=!0);let n=null,s=null,a="hard";for(let g of this.tracks){let c=new Set,h=!1;for(let Q=0;Q<g.events.length;Q++){let d=g.events[Q];if(d.statusByte>=128&&d.statusByte<240)switch(h=!0,d.ticks>this.lastVoiceEventTick&&(this.lastVoiceEventTick=d.ticks),d.statusByte&240){case R.controllerChange:switch(d.data[0]){case 2:case 111:case 116:n=d.ticks;break;case 4:case 117:s===null?(a="soft",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:{c.add(d.statusByte&15);let m=d.data[0];this.keyRange.min=Math.min(this.keyRange.min,m),this.keyRange.max=Math.max(this.keyRange.max,m);break}}let p=ee(d.data);switch(d.statusByte){case R.endOfTrack:Q!==g.events.length-1&&(g.deleteEvent(Q),Q--,tA("Unexpected EndOfTrack. Removing!"));break;case R.setTempo:this.tempoChanges.push({ticks:d.ticks,tempo:6e7/_e(d.data,3)});break;case R.marker:switch(p.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:p.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 m=p.trim();m.startsWith("@KMIDI KARAOKE FILE")?(this.isKaraokeFile=!0,y("%cKaraoke MIDI detected!",E.recognized)):this.isKaraokeFile&&(m.startsWith("@T")||m.startsWith("@A")?A?this.extraMetadata.push(d):(this.binaryName=d.data.slice(2),A=!0,t=!0):m.startsWith("@")||this.lyrics.push(d));break}}}g.channels=c,g.name="";let C=g.events.find(Q=>Q.statusByte===R.trackName);C&&this.tracks.indexOf(g)>0&&(g.name=ee(C.data),!h&&!g.name.toLowerCase().includes("setup")&&this.extraMetadata.push(C))}this.tempoChanges.reverse(),y("%cCorrecting loops, ports and detecting notes...",E.info);let i=[];for(let g of this.tracks){let c=g.events.find(h=>(h.statusByte&240)===R.noteOn);c&&i.push(c.ticks)}this.firstNoteOn=Math.min(...i),y(`%cFirst note-on detected at: %c${this.firstNoteOn}%c ticks!`,E.info,E.recognized,E.info),n??=this.firstNoteOn,(s===null||s===0)&&(s=this.lastVoiceEventTick),this.loop={start:n,end:s,type:a},y(`%cLoop points: start: %c${this.loop.start}%c end: %c${this.loop.end}`,E.info,E.recognized,E.info,E.recognized);let o=0;this.portChannelOffsetMap=[];for(let g of this.tracks)if(g.port=-1,g.channels.size!==0)for(let c of g.events){if(c.statusByte!==R.midiPort)continue;let h=c.data[0];g.port=h,this.portChannelOffsetMap[h]===void 0&&(this.portChannelOffsetMap[h]=o,o+=16)}this.portChannelOffsetMap=[...this.portChannelOffsetMap].map(g=>g??0);let r=1/0;for(let g of this.tracks)g.port!==-1&&r>g.port&&(r=g.port);r===1/0&&(r=0);for(let g of this.tracks)(g.port===-1||g.port===void 0)&&(g.port=r);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(g=>g.statusByte>=R.noteOn&&g.statusByte<R.polyPressure)===void 0){let g=this.tracks[0].events.find(c=>c.statusByte===R.trackName);g&&(this.binaryName=g.data)}}else{let g=this.tracks[0].events.find(c=>c.statusByte===R.trackName);g&&(this.binaryName=g.data)}if(this.extraMetadata=this.extraMetadata.filter(g=>g.data.length>0),this.lyrics.sort((g,c)=>g.ticks-c.ticks),!this.tracks.some(g=>g.events[0].ticks===0)){let g=this.tracks[0],c=this?.binaryName?.buffer;c||(c=new Uint8Array(0).buffer),g.events.unshift(new ZA(0,R.trackName,new K(c)))}this.duration=this.midiTicksToSeconds(this.lastVoiceEventTick),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 Ei(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 i=this.playingNotes.findIndex(o=>o.midiNote===e.data[0]&&o.channel===n.channel);i!==-1&&this.playingNotes.splice(i,1)}break}case R.noteOff:{this.synth.noteOff(n.channel,e.data[0]);let a=this.playingNotes.findIndex(i=>i.midiNote===e.data[0]&&i.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 Bi(){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._midiData.loop.type==="soft"?this.jumpToTick(this._midiData.loop.start):this.setTimeTicks(this._midiData.loop.start);return}if(a.events.length<=this.eventIndexes[s]||n.ticks>=this._midiData.lastVoiceEventTick){this.songIsFinished();return}let i=a.events[this.eventIndexes[s]];this.playedTime+=this.oneTickToSeconds*(i.ticks-n.ticks)}}function Ci(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 hi(e){if(!e.tracks)throw new Error("This MIDI has no tracks!");if(e.duration===0){tA("This MIDI file has a duration of exactly 0 seconds."),this.pausedTime=0,this.isFinished=!0;return}this.oneTickToSeconds=60/(120*e.timeDivision),this._midiData=e,this.isFinished=!1,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)),this.preload&&(MA("%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,i]=s.split("-").map(Number);this.synth.getVoicesForPreset(n,a,i,a)}}),z()),this.currentMIDIPorts=this._midiData.tracks.map(A=>A.port),this.midiPortChannelOffset=0,this.midiPortChannelOffsets={},this._midiData.tracks.forEach((A,t)=>{this.assignMIDIPort(t,A.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&&(tA(`%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},Gn=Object.keys(I).length,li=Math.max(...Object.values(I)),U=[];U[I.startAddrsOffset]={min:0,max:32768,def:0,nrpn:1};U[I.endAddrOffset]={min:-32768,max:32768,def:0,nrpn:1};U[I.startloopAddrsOffset]={min:-32768,max:32768,def:0,nrpn:1};U[I.endloopAddrsOffset]={min:-32768,max:32768,def:0,nrpn:1};U[I.startAddrsCoarseOffset]={min:0,max:32768,def:0,nrpn:1};U[I.modLfoToPitch]={min:-12e3,max:12e3,def:0,nrpn:2};U[I.vibLfoToPitch]={min:-12e3,max:12e3,def:0,nrpn:2};U[I.modEnvToPitch]={min:-12e3,max:12e3,def:0,nrpn:2};U[I.initialFilterFc]={min:1500,max:13500,def:13500,nrpn:2};U[I.initialFilterQ]={min:0,max:960,def:0,nrpn:1};U[I.modLfoToFilterFc]={min:-12e3,max:12e3,def:0,nrpn:2};U[I.vibLfoToFilterFc]={min:-12e3,max:12e3,def:0,nrpn:2};U[I.modEnvToFilterFc]={min:-12e3,max:12e3,def:0,nrpn:2};U[I.endAddrsCoarseOffset]={min:-32768,max:32768,def:0,nrpn:1};U[I.modLfoToVolume]={min:-960,max:960,def:0,nrpn:1};U[I.vibLfoToVolume]={min:-960,max:960,def:0,nrpn:1};U[I.chorusEffectsSend]={min:0,max:1e3,def:0,nrpn:1};U[I.reverbEffectsSend]={min:0,max:1e3,def:0,nrpn:1};U[I.pan]={min:-500,max:500,def:0,nrpn:1};U[I.delayModLFO]={min:-12e3,max:5e3,def:-12e3,nrpn:2};U[I.freqModLFO]={min:-16e3,max:4500,def:0,nrpn:4};U[I.delayVibLFO]={min:-12e3,max:5e3,def:-12e3,nrpn:2};U[I.freqVibLFO]={min:-16e3,max:4500,def:0,nrpn:4};U[I.delayModEnv]={min:-32768,max:5e3,def:-32768,nrpn:2};U[I.attackModEnv]={min:-32768,max:8e3,def:-32768,nrpn:2};U[I.holdModEnv]={min:-12e3,max:5e3,def:-12e3,nrpn:2};U[I.decayModEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};U[I.sustainModEnv]={min:0,max:1e3,def:0,nrpn:1};U[I.releaseModEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};U[I.keyNumToModEnvHold]={min:-1200,max:1200,def:0,nrpn:1};U[I.keyNumToModEnvDecay]={min:-1200,max:1200,def:0,nrpn:1};U[I.delayVolEnv]={min:-12e3,max:5e3,def:-12e3,nrpn:2};U[I.attackVolEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};U[I.holdVolEnv]={min:-12e3,max:5e3,def:-12e3,nrpn:2};U[I.decayVolEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};U[I.sustainVolEnv]={min:0,max:1440,def:0,nrpn:1};U[I.releaseVolEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};U[I.keyNumToVolEnvHold]={min:-1200,max:1200,def:0,nrpn:1};U[I.keyNumToVolEnvDecay]={min:-1200,max:1200,def:0,nrpn:1};U[I.startloopAddrsCoarseOffset]={min:-32768,max:32768,def:0,nrpn:1};U[I.keyNum]={min:-1,max:127,def:-1,nrpn:1};U[I.velocity]={min:-1,max:127,def:-1,nrpn:1};U[I.initialAttenuation]={min:0,max:1440,def:0,nrpn:1};U[I.endloopAddrsCoarseOffset]={min:-32768,max:32768,def:0,nrpn:1};U[I.coarseTune]={min:-120,max:120,def:0,nrpn:1};U[I.fineTune]={min:-12700,max:12700,def:0,nrpn:1};U[I.scaleTuning]={min:0,max:1200,def:100,nrpn:1};U[I.exclusiveClass]={min:0,max:99999,def:0,nrpn:0};U[I.overridingRootKey]={min:-1,max:127,def:-1,nrpn:0};U[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},ps={forward:0,loopAndRelease:1},SA=128,Rn=147,Ze=new Int16Array(Rn).fill(0),pA=(e,A)=>Ze[e]=A<<7;pA(S.mainVolume,100);pA(S.balance,64);pA(S.expressionController,127);pA(S.pan,64);pA(S.portamentoOnOff,127);pA(S.filterResonance,64);pA(S.releaseTime,64);pA(S.attackTime,64);pA(S.brightness,64);pA(S.decayTime,64);pA(S.vibratoRate,64);pA(S.vibratoDepth,64);pA(S.vibratoDelay,64);pA(S.generalPurposeController6,64);pA(S.generalPurposeController8,64);pA(S.registeredParameterLSB,127);pA(S.registeredParameterMSB,127);pA(S.nonRegisteredParameterLSB,127);pA(S.nonRegisteredParameterMSB,127);var ns=1;Ze[S.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 di(e=!0){e&&y("%cResetting all controllers!",E.info),this.privateProps.callEvent("allControllerReset",void 0),this.setMasterParameter("midiSystem",Vs),this.privateProps.tunings.length=0;for(let A=0;A<128;A++)this.privateProps.tunings.push([]);if(this.setMIDIVolume(1),this.privateProps.reverbSend=1,this.privateProps.chorusSend=1,!(!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})}}}function Qi(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===S.portamentoControl?this.midiControllers[t]=ns:t!==S.portamentoControl&&t!==S.dataEntryMSB&&t!==S.registeredParameterMSB&&t!==S.registeredParameterLSB&&t!==S.nonRegisteredParameterMSB&&t!==S.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 ui(){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([S.bankSelect,S.bankSelectLSB,S.mainVolume,S.mainVolumeLSB,S.pan,S.panLSB,S.reverbDepth,S.tremoloDepth,S.chorusDepth,S.detuneDepth,S.phaserDepth,S.soundVariation,S.filterResonance,S.releaseTime,S.attackTime,S.brightness,S.decayTime,S.vibratoRate,S.vibratoDepth,S.vibratoDelay,S.soundController10]);function fi(){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===S.portamentoControl?this.midiControllers[e]=ns:this.controllerChange(e,A>>7))}this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}function mi(){this.dataEntryState=YA.Idle,this.midiControllers[S.nonRegisteredParameterLSB]=16256,this.midiControllers[S.nonRegisteredParameterMSB]=16256,this.midiControllers[S.registeredParameterLSB]=16256,this.midiControllers[S.registeredParameterMSB]=16256,this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}var Je=Ze.slice(0,128);function Si(e,A=void 0){if(!this._midiData)return!1;this.oneTickToSeconds=60/(120*this._midiData.timeDivision),this.sendMIDIReset(),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===S.dataDecrement||c===S.dataIncrement||c===S.dataEntryMSB||c===S.dataEntryLSB||c===S.registeredParameterLSB||c===S.registeredParameterMSB||c===S.nonRegisteredParameterLSB||c===S.nonRegisteredParameterMSB||c===S.bankSelect||c===S.bankSelectLSB||c===S.resetAllControllers,i=[];for(let c=0;c<t;c++)i.push(Array.from(Je));let o,r=0;function g(c){if(n[c]=8192,i?.[c]!==void 0)for(let h=0;h<Je.length;h++)ea.has(h)||(i[c][h]=Je[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 Q=_n(C.statusByte),d=Q.channel+(this.midiPortChannelOffsets[h.port]||0);switch(Q.status){case R.noteOn:i[d]??=Array.from(Je),i[d][S.portamentoControl]=C.data[0];break;case R.noteOff:break;case R.pitchWheel:n[d]=C.data[1]<<7|C.data[0];break;case R.programChange:{if(this._midiData.isMultiPort&&h.channels.size===0)break;let k=s[d];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===S.bankSelect){s[d].bank=w;break}else k===S.resetAllControllers&&g(d);this.sendMIDICC(d,k,w)}else i[d]??=Array.from(Je),i[d][k]=C.data[1];break}case R.setTempo:let m=6e7/_e(C.data,3);this.oneTickToSeconds=60/(m*this._midiData.timeDivision),o=C,r=c;break;default:this.processEvent(C,c);break}this.eventIndexes[c]++,c=this.findFirstEventIndex();let p=this._midiData.tracks[c].events[this.eventIndexes[c]];if(p===void 0)return this.stop(),!1;this.playedTime+=this.oneTickToSeconds*(p.ticks-C.ticks)}for(let c=0;c<t;c++)if(n[c]!==void 0&&this.sendMIDIPitchWheel(c,n[c]),i[c]!==void 0&&i[c].forEach((h,C)=>{h!==Je[C]&&!a(C)&&this.sendMIDICC(c,C,h)}),s[c].actualBank>=0){let h=s[c];h.program!==-1?(this.sendMIDICC(c,S.bankSelect,h.actualBank),this.sendMIDIProgramChange(c,h.program)):this.sendMIDICC(c,S.bankSelect,h.bank)}return o&&this.callEvent("metaEvent",{event:o,trackIndex:r}),this.paused&&(this.pausedTime=this.playedTime),!0}var ta=class{songs=[];shuffledSongIndexes=[];synth;externalMIDIPlayback=!1;retriggerPausedNotes=!0;loopCount=0;skipToFirstNoteOn=!0;isFinished=!1;preload=!0;onEventCall;processTick=Bi.bind(this);firstNoteTime=0;oneTickToSeconds=0;eventIndexes=[];playedTime=0;pausedTime=-1;absoluteStartTime=0;playingNotes=[];currentMIDIPorts=[];midiPortChannelOffset=0;midiPortChannelOffsets={};assignMIDIPort=Ci.bind(this);loadNewSequence=hi.bind(this);processEvent=Ei.bind(this);setTimeTo=Si.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.recalculateStartTime(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 this.playingNotes=[],this.callEvent("timeChange",{newTime:e}),this.setTimeTo(e),this.recalculateStartTime(e)}get paused(){return this.pausedTime!==void 0}play(){if(!this._midiData){tA("No songs loaded in the sequencer. Ignoring the play call.");return}this.currentTime>=this._midiData.duration&&(this.currentTime=0),this.paused&&this.recalculateStartTime(this.pausedTime??0),this.retriggerPausedNotes&&this.playingNotes.forEach(e=>{this.sendMIDINoteOn(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}),e&&this.callEvent("songEnded",{}))}songIsFinished(){if(this.isFinished=!0,this.songs.length===1){this.pauseInternal(!0);return}this._songIndex++,this._songIndex%=this.songs.length,this.loadCurrentSong()}stop(){this.pausedTime=this.currentTime,this.sendMIDIAllOff()}findFirstEventIndex(){let 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){if(!this.externalMIDIPlayback){tA(`Attempting to send ${RA(e)} to the synthesizer via sendMIDIMessage. This shouldn't happen!`);return}this.callEvent("midiMessage",{message:e})}sendMIDIAllOff(){for(let e=0;e<16;e++)this.sendMIDICC(e,S.sustainPedal,0);if(!this.externalMIDIPlayback){this.synth.stopAllChannels();return}this.playingNotes.forEach(e=>{this.sendMIDINoteOff(e.channel,e.midiNote)});for(let e=0;e<Ks;e++)this.sendMIDICC(e,S.allNotesOff,0),this.sendMIDICC(e,S.allSoundOff,0)}sendMIDIReset(){if(this.sendMIDIAllOff(),!this.externalMIDIPlayback){this.synth.resetAllControllers();return}this.sendMIDIMessage([R.reset])}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)}}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}jumpToTick(e){if(!this._midiData)return;this.sendMIDIAllOff();let A=this._midiData.midiTicksToSeconds(e);this.callEvent("timeChange",{newTime:A}),this.recalculateStartTime(A),this.playedTime=A,this.eventIndexes.length=0;for(let n of this._midiData.tracks){let s=n.events.findIndex(a=>a.ticks>=e);this.eventIndexes.push(s<0?n.events.length:s)}let t=this._midiData.tempoChanges.find(n=>n.ticks<=e);this.oneTickToSeconds=60/(t.tempo*this._midiData.timeDivision)}sendMIDINoteOn(e,A,t){if(!this.externalMIDIPlayback){this.synth.noteOn(e,A,t);return}e%=16,this.sendMIDIMessage([R.noteOn|e,A,t])}sendMIDINoteOff(e,A){if(!this.externalMIDIPlayback){this.synth.noteOff(e,A);return}e%=16,this.sendMIDIMessage([R.noteOff|e,A,64])}sendMIDICC(e,A,t){if(!this.externalMIDIPlayback){this.synth.controllerChange(e,A,t);return}e%=16,this.sendMIDIMessage([R.controllerChange|e,A,t])}sendMIDIProgramChange(e,A){if(!this.externalMIDIPlayback){this.synth.programChange(e,A);return}e%=16,this.sendMIDIMessage([R.programChange|e,A])}sendMIDIPitchWheel(e,A){if(!this.externalMIDIPlayback){this.synth.pitchWheel(e,A);return}e%=16,this.sendMIDIMessage([R.pitchWheel|e,A&127,A>>7])}},lt=lt!==void 0?lt:{},ys=!1,na;lt.isInitialized=new Promise(e=>na=e);var pi=function(e){var A,t,n,s,a,i,o,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",g="",c=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");do s=r.indexOf(e.charAt(c++)),a=r.indexOf(e.charAt(c++)),i=r.indexOf(e.charAt(c++)),o=r.indexOf(e.charAt(c++)),A=s<<2|a>>4,t=(15&a)<<4|i>>2,n=(3&i)<<6|o,g+=String.fromCharCode(A),i!==64&&(g+=String.fromCharCode(t)),o!==64&&(g+=String.fromCharCode(n));while(c<e.length);return g};(function(){var e,A,t,n,s,a,i,o,r,g,c,h,C,Q,d,p,m,k,w,M,P,T,B=B!==void 0?B:{};B.wasmBinary=Uint8Array.from(pi("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(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,u){throw u},B.preRun=[],B.postRun=[];var J=!1,H=!1,Y=!1,q=!1;J=typeof window=="object",H=typeof importScripts=="function",Y=typeof process=="object"&&typeof xa=="function"&&!J&&!H,q=!J&&!Y&&!H;var O="";function Z(l){return B.locateFile?B.locateFile(l,O):O+l}Y?(O="/",B.read=function(u,f){var D;return A||(A=void 0),t||(t=void 0),u=t.normalize(u),D=A.readFileSync(u),f?D:D.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(l){if(!(l instanceof it))throw l}),process.on("unhandledRejection",function(l,u){process.exit(1)}),B.quit=function(l){process.exit(l)},B.inspect=function(){return"[Emscripten Module object]"}):q?(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(l){quit(l)})):(J||H)&&(J?document.currentScript&&(O=document.currentScript.src):O=self.location.href,O=O.indexOf("blob:")!==0?O.split("/").slice(0,-1).join("/")+"/":"",B.read=function(u){var f=new XMLHttpRequest;return f.open("GET",u,!1),f.send(null),f.responseText},H&&(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,D){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}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 u=Q;return Q=Q+l+15&-16,u}function F(l){var u=r[M>>2],f=u+l+15&-16;return r[M>>2]=f,f>=yA&&!nt()?(r[M>>2]=u,0):u}function b(l,u){return u||(u=16),l=Math.ceil(l/u)*u}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 u=parseInt(l.substr(1));return UA(u%8==0),u/8}}function nA(l){nA.shown||(nA.shown={}),nA.shown[l]||(nA.shown[l]=1,gA(l))}j=void 0;var iA={"f64-rem":function(l,u){return l%u},debugger:function(){}},NA=[];function se(l,u){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 be(l,u){if(l){UA(u),zA[u]||(zA[u]={});var f=zA[u];return f[l]||(u.length===1?f[l]=function(){return eA(u,l)}:u.length===2?f[l]=function(L){return eA(u,l,[L])}:f[l]=function(){return eA(u,l,Array.prototype.slice.call(arguments))}),f[l]}}function ae(l,u,f){return f?+(l>>>0)+4294967296*+(u>>>0):+(l>>>0)+4294967296*+(0|u)}function eA(l,u,f){return f&&f.length?B["dynCall_"+l].apply(null,[u].concat(f)):B["dynCall_"+l].call(null,u)}var EA=0,_A=0;function UA(l,u){l||Ie("Assertion failed: "+u)}function Ce(l){var u=B["_"+l];return UA(u,"Cannot call unknown function "+l+", make sure it is exported"),u}var he={stackSave:function(){rn()},stackRestore:function(){on()},arrayToC:function(l){var u,f,D=Dt(l.length);return u=l,f=D,s.set(u,f),D},stringToC:function(l){var u=0;if(l!=null&&l!==0){var f=(l.length<<2)+1;u=Dt(f),et(l,u,f)}return u}},$e={string:he.stringToC,array:he.arrayToC};function ve(l,u,f,D,L){var $=Ce(l),sA=[],x=0;if(D)for(var DA=0;DA<D.length;DA++){var lA=$e[f[DA]];lA?(x===0&&(x=rn()),sA[DA]=lA(D[DA])):sA[DA]=D[DA]}var dA,BA=$.apply(null,sA);return BA=(dA=BA,u==="string"?le(dA):u==="boolean"?!!dA:dA),x!==0&&on(x),BA}function At(l,u,f,D){switch((f=f||"i8").charAt(f.length-1)==="*"&&(f="i32"),f){case"i1":case"i8":s[l>>0]=u;break;case"i16":i[l>>1]=u;break;case"i32":r[l>>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[l>>2]=tempI64[0],r[l+4>>2]=tempI64[1];break;case"float":c[l>>2]=u;break;case"double":h[l>>3]=u;break;default:Ie("invalid type for setValue: "+f)}}function jt(l,u,f){switch((u=u||"i8").charAt(u.length-1)==="*"&&(u="i32"),u){case"i1":case"i8":return s[l>>0];case"i16":return i[l>>1];case"i32":case"i64":return r[l>>2];case"float":return c[l>>2];case"double":return h[l>>3];default:Ie("invalid type for getValue: "+u)}return null}function $t(l,u,f,D){typeof l=="number"?($=!0,sA=l):($=!1,sA=l.length);var L=typeof u=="string"?u:null;if(x=f==4?D:[typeof kt=="function"?kt:V,Dt,V,F][f===void 0?2:f](Math.max(sA,L?1:u.length)),$){for(D=x,UA((3&x)==0),DA=x+(-4&sA);D<DA;D+=4)r[D>>2]=0;for(DA=x+sA;D<DA;)s[D++>>0]=0;return x}if(L==="i8")return l.subarray||l.slice?a.set(l,x):a.set(new Uint8Array(l),x),x;for(var $,sA,x,DA,lA,dA,BA,_=0;_<sA;){var vA=l[_];if((lA=L||u[_])===0){_++;continue}lA=="i64"&&(lA="i32"),At(x+_,vA,lA),BA!==lA&&(dA=X(lA),BA=lA),_+=dA}return x}function Le(l){return d?sn?kt(l):F(l):V(l)}function le(l,u){if(u===0||!l)return"";for(var f,D,L,$=0,sA=0;$|=D=a[l+sA>>0],(D!=0||u)&&(sA++,!u||sA!=u););u||(u=sA);var x="";if($<128){for(;u>0;)L=String.fromCharCode.apply(String,a.subarray(l,l+Math.min(u,1024))),x=x?x+L:L,l+=1024,u-=1024;return x}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 _,vA,PA,JA,OA,ke,qA="";;){if(!(_=lA[dA++]))return qA;if(!(128&_)){qA+=String.fromCharCode(_);continue}if(vA=63&lA[dA++],(224&_)==192){qA+=String.fromCharCode((31&_)<<6|vA);continue}if(PA=63&lA[dA++],(240&_)==224?_=(15&_)<<12|vA<<6|PA:(JA=63&lA[dA++],(248&_)==240?_=(7&_)<<18|vA<<12|PA<<6|JA:(OA=63&lA[dA++],_=(252&_)==248?(3&_)<<24|vA<<18|PA<<12|JA<<6|OA:(1&_)<<30|vA<<24|PA<<18|JA<<12|OA<<6|(ke=63&lA[dA++]))),_<65536)qA+=String.fromCharCode(_);else{var ot=_-65536;qA+=String.fromCharCode(55296|ot>>10,56320|1023&ot)}}})(a,f)}function TA(l){for(var u="";;){var f=s[l++>>0];if(!f)return u;u+=String.fromCharCode(f)}}function An(l,u){return(function(D,L,$){for(var sA=0;sA<D.length;++sA)s[L++>>0]=D.charCodeAt(sA);$||(s[L>>0]=0)})(l,u,!1)}var ut=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function Ne(l,u,f,D){if(!(D>0))return 0;for(var L=f,$=f+D-1,sA=0;sA<l.length;++sA){var x=l.charCodeAt(sA);if(x>=55296&&x<=57343&&(x=65536+((1023&x)<<10)|1023&l.charCodeAt(++sA)),x<=127){if(f>=$)break;u[f++]=x}else if(x<=2047){if(f+1>=$)break;u[f++]=192|x>>6,u[f++]=128|63&x}else if(x<=65535){if(f+2>=$)break;u[f++]=224|x>>12,u[f++]=128|x>>6&63,u[f++]=128|63&x}else if(x<=2097151){if(f+3>=$)break;u[f++]=240|x>>18,u[f++]=128|x>>12&63,u[f++]=128|x>>6&63,u[f++]=128|63&x}else if(x<=67108863){if(f+4>=$)break;u[f++]=248|x>>24,u[f++]=128|x>>18&63,u[f++]=128|x>>12&63,u[f++]=128|x>>6&63,u[f++]=128|63&x}else{if(f+5>=$)break;u[f++]=252|x>>30,u[f++]=128|x>>24&63,u[f++]=128|x>>18&63,u[f++]=128|x>>12&63,u[f++]=128|x>>6&63,u[f++]=128|63&x}}return u[f]=0,f-L}function et(l,u,f){return Ne(l,a,u,f)}function GA(l){for(var u=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?++u:D<=2047?u+=2:D<=65535?u+=3:D<=2097151?u+=4:D<=67108863?u+=5:u+=6}return u}var ie=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function tt(l){for(var u=l,f=u>>1;i[f];)++f;if((u=f<<1)-l>32&&ie)return ie.decode(a.subarray(l,u));for(var D=0,L="";;){var $=i[l+2*D>>1];if($==0)return L;++D,L+=String.fromCharCode($)}}function en(l,u,f){if(f===void 0&&(f=2147483647),f<2)return 0;for(var D=u,L=(f-=2)<2*l.length?f/2:l.length,$=0;$<L;++$){var sA=l.charCodeAt($);i[u>>1]=sA,u+=2}return i[u>>1]=0,u-D}function oe(l){return 2*l.length}function ft(l){for(var u=0,f="";;){var D=r[l+4*u>>2];if(D==0)return f;if(++u,D>=65536){var L=D-65536;f+=String.fromCharCode(55296|L>>10,56320|1023&L)}else f+=String.fromCharCode(D)}}function mt(l,u,f){if(f===void 0&&(f=2147483647),f<4)return 0;for(var D=u,L=D+f-4,$=0;$<l.length;++$){var sA=l.charCodeAt($);if(sA>=55296&&sA<=57343&&(sA=65536+((1023&sA)<<10)|1023&l.charCodeAt(++$)),r[u>>2]=sA,(u+=4)+4>L)break}return r[u>>2]=0,u-D}function gs(l){for(var u=0,f=0;f<l.length;++f){var D=l.charCodeAt(f);D>=55296&&D<=57343&&++f,u+=4}return u}function cs(l){var u=GA(l)+1,f=kt(u);return f&&Ne(l,s,f,u),f}function St(l){var u=GA(l)+1,f=Dt(u);return Ne(l,s,f,u),f}function Se(l){return l}function tn(){var l,u=(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&&(u+=`
2
- `+B.extraStackTrace()),(l=u).replace(/__Z[\w\d_]+/g,function(f){var D,L=D=f;return f===L?f:f+" ["+L+"]"})}function re(l,u){return l%u>0&&(l+=u-l%u),l}function Ue(l){B.buffer=n=l}function pe(){B.HEAP8=s=new Int8Array(n),B.HEAP16=i=new Int16Array(n),B.HEAP32=r=new Int32Array(n),B.HEAPU8=a=new Uint8Array(n),B.HEAPU16=o=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,u=2147483648-l;if(r[M>>2]>u)return!1;var f=yA;for(yA=Math.max(yA,16777216);yA<r[M>>2];)yA=yA<=536870912?re(2*yA,l):Math.min(re((3*yA+2147483648)/4,l),u);var D=B.reallocBuffer(yA);return D&&D.byteLength==yA?(Ue(D),pe(),!0):(yA=f,!1)}C=Q=p=m=k=w=M=0,d=!1,B.reallocBuffer||(B.reallocBuffer=function(l){try{if(ArrayBuffer.transfer)u=ArrayBuffer.transfer(n,l);else{var u,f=s;u=new ArrayBuffer(l),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 Te=B.TOTAL_STACK||5242880,yA=B.TOTAL_MEMORY||16777216;function pt(){return yA}function de(l){for(;l.length>0;){var u=l.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<Te&&gA("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+yA+"! (TOTAL_STACK="+Te+")"),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=[],Es=[],Bs=[],Cs=[],sn=!1,Ra=!1;function Ma(l){st.unshift(l)}function Ho(l){nn.unshift(l)}function Yo(l){Es.unshift(l)}function Po(l){Bs.unshift(l)}function ba(l){Cs.unshift(l)}function Jo(l,u,f){var D,L;nA("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!"),f&&(D=s[L=u+GA(l)]),et(l,u,1/0),f&&(s[L]=D)}function Oo(l,u,f){return l>=0?l:u<=32?2*Math.abs(1<<u-1)+l:Math.pow(2,u)+l}function qo(l,u,f){if(l<=0)return l;var D=u<=32?Math.abs(1<<u-1):Math.pow(2,u-1);return l>=D&&(u<=32||l>D)&&(l=-2*D+l),l}var va=Math.abs,La=Math.ceil,hs=Math.floor,Na=Math.min,ye=0,an=null,at=null;function Ko(l){return l}B.preloadedImages={},B.preloadedAudios={};var ls="data:application/octet-stream;base64,";function yt(l){return String.prototype.startsWith?l.startsWith(ls):l.indexOf(ls)===0}(function(){var u="main.wast",f="main.wasm",D="main.temp.asm";yt(u)||(u=Z(u)),yt(f)||(f=Z(f)),yt(D)||(D=Z(D));var L={global:null,env:null,asm2wasm:iA,parent:B},$=null;function sA(BA){return BA}function x(){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=re(BA,B.usingWasm?65536:16777216);var _=B.buffer.byteLength;if(B.usingWasm)try{var vA=B.wasmMemory.grow((BA-_)/65536);return vA!==-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,_,vA){var PA;if(!(_=PA=_).table){var JA,OA=B.wasmTableSize;OA===void 0&&(OA=1024);var ke=B.wasmMaxTableSize;typeof WebAssembly=="object"&&typeof WebAssembly.Table=="function"?ke!==void 0?_.table=new WebAssembly.Table({initial:OA,maximum:ke,element:"anyfunc"}):_.table=new WebAssembly.Table({initial:OA,element:"anyfunc"}):_.table=Array(OA),B.wasmTable=_.table}return _.memoryBase||(_.memoryBase=B.STATIC_BASE),_.tableBase||(_.tableBase=0),JA=(function(ot,xe,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 rt,cn,us;rt=$.memory,cn=B.buffer,rt.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(rt).set(us),Ue(rt),pe()}B.asm=$,B.usingWasm=!0,(function(jo){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(xe.memory=B.wasmMemory,L.global={NaN:NaN,Infinity:1/0},L["global.Math"]=Math,L.env=xe,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 He(jA){wt(jA.instance,jA.module)}function Qs(jA){(!B.wasmBinary&&(J||H)&&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 x()}):new Promise(function($A,rt){$A(x())})).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(He):WebAssembly.instantiateStreaming(fetch(f,{credentials:"same-origin"}),L).then(He).catch(function(jA){gA("wasm streaming compile failed: "+jA),gA("falling back to ArrayBuffer instantiation"),Qs(He)}),{}})(BA,_,vA),UA(JA,"no binaryen method succeeded."),JA},B.asm})(),Q=(C=1024)+4816,nn.push(),B.STATIC_BASE=C,B.STATIC_BUMP=4816;var xA=Q;function Vo(l){s[xA]=s[l],s[xA+1]=s[l+1],s[xA+2]=s[l+2],s[xA+3]=s[l+3]}function Xo(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 Zo(l,u,f){var D=f>0?f:GA(l)+1,L=Array(D),$=Ne(l,L,0,L.length);return u&&(L.length=$),L}function Wo(l){for(var u=[],f=0;f<l.length;f++){var D=l[f];D>255&&(D&=255),u.push(String.fromCharCode(D))}return u.join("")}Q+=16,M=V(4),k=(p=m=b(Q))+Te,w=b(k),r[M>>2]=w,d=!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(u,f,D){var L=rn();try{return B.dynCall_iii(u,f,D)}catch($){if(on(L),typeof $!="number"&&$!=="longjmp")throw $;B.setThrew(1,0)}},___assert_fail:function(u,f,D,L){Ie("Assertion failed: "+le(u)+", at: "+[f?le(f):"unknown filename",D,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,D){return a.set(a.subarray(f,f+D),u),u},_llvm_floor_f64:hs,DYNAMICTOP_PTR:M,tempDoublePtr:xA,ABORT:EA,STACKTOP:m,STACK_MAX:k};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)},on=B.stackRestore=function(){return B.asm.stackRestore.apply(null,arguments)},rn=B.stackSave=function(){return B.asm.stackSave.apply(null,arguments)};function it(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),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(l,u){(!u||!B.noExitRuntime||l!==0)&&(B.noExitRuntime||(EA=!0,_A=l,m=T,de(Bs),Ra=!0,B.onExit&&B.onExit(l)),B.quit(l,new it(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=ds,B.ccall=ve,B.cwrap=function(u,f,D,L){var $=(D=D||[]).every(function(sA){return sA==="number"});return f!=="string"&&$&&!L?Ce(u):function(){return ve(u,f,D,arguments,L)}},it.prototype=Error(),it.prototype.constructor=it,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=()=>{ys=!0,na()},lt.decode=function(l){return(function(f){if(!ys)throw Error("SF3 decoder has not been initialized yet. Did you await synth.isReady?");var D={};function L(xe){return new Int32Array(B.HEAPU8.buffer,xe,1)[0]}function $(xe,gn){var wt=new ArrayBuffer(gn*Float32Array.BYTES_PER_ELEMENT),He=new Float32Array(wt);return He.set(new Float32Array(B.HEAPU8.buffer,xe,gn)),He}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,x,DA,lA,dA=D.open(),BA=(sA=f,x=f.byteLength,DA=B._malloc(x),(lA=new Uint8Array(B.HEAPU8.buffer,DA,x)).set(new Uint8Array(sA,0,x)),lA),_=B._malloc(4),vA=B._malloc(4),PA=D.decode(dA,BA.byteOffset,BA.byteLength,_,vA);if(B._free(BA.byteOffset),PA<0)throw D.close(dA),B._free(_),Error("stbvorbis decode failed: "+PA);for(var JA=D.channels(dA),OA=Array(JA),ke=new Int32Array(B.HEAPU32.buffer,L(_),JA),qA=0;qA<JA;qA++)OA[qA]=$(ke[qA],PA),B._free(ke[qA]);var ot=D.sampleRate(dA);return D.close(dA),B._free(L(_)),B._free(_),{data:OA,sampleRate:ot,eof:!0,error:null}})(l)}})();var Ot=lt,ss=-15e3,yi=15e3,Mn=new Float32Array(yi-ss+1);for(let e=0;e<Mn.length;e++){let A=ss+e;Mn[e]=Math.pow(2,A/1200)}function Qe(e){return e<=-32767?0:Mn[e-ss]}var Ht=-2e4,sa=16500,bn=new Float32Array(sa-Ht+1);for(let e=0;e<bn.length;e++){let A=Ht+e;bn[e]=440*Math.pow(2,(A-6900)/1200)}function vn(e){return e<Ht||e>sa?440*Math.pow(2,(e-6900)/1200):bn[~~e-Ht]}var as=-1660,ki=1600,Ln=new Float32Array((ki-as)*100+1);for(let e=0;e<Ln.length;e++){let A=(as*100+e)/100;Ln[e]=Math.pow(10,-A/20)}function Ae(e){return Ln[Math.floor((e-as)*100)]}var Di=.01,HA=100,hn=90,wi=15e-6,Ge=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],i=(60-A.targetKey)*A.modulatedGenerators[I.keyNumToVolEnvDecay],o=s/HA;t.decayDuration=n(a+i)*o,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)),c=g/HA;switch(t.decayDuration=n(a+i)*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,i=n/10,o=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)*o;let C=g/a.releaseDuration*c+a.releaseStartDb;a.currentReleaseGain=a.attenuation*Ae(C+i),t[h]*=a.currentReleaseGain,a.currentSampleTime++,g++}a.currentReleaseGain<=wi&&(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)*o;let g=1-(a.attackEnd-a.currentSampleTime)/a.attackDuration;if(t[r]*=g*a.attenuation*Ae(i),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)*o,t[r]*=a.attenuation*Ae(i),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)*o,a.currentAttenuationDb=(1-(a.decayEnd-a.currentSampleTime)/a.decayDuration)*a.sustainDbRelative,t[r]*=a.attenuation*Ae(a.currentAttenuationDb+i),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)*o,t[r]*=a.attenuation*Ae(a.sustainDbRelative+i),a.currentAttenuationDb=a.sustainDbRelative,a.currentSampleTime++,++r>=t.length)return}}};function Fi(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 Gi(e){return this.privateProps.masterParameters[e]}function Ri(){return{...this.privateProps.masterParameters}}function Fe(e,A){return(e>>A&1)>0}function ln(e){return e?1:0}var LA=16384,Yt=Object.keys(QA).length,ia=4,ce=new Float32Array(LA+1),Re=new Float32Array(LA+1);ce[0]=0;ce[ce.length-1]=1;Re[0]=0;Re[Re.length-1]=1;for(let e=1;e<LA-1;e++){let A=-.4166666666666667*Math.log(e/(ce.length-1))/Math.LN10;Re[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?-Re[~~(t*-LA)]:Re[~~(t*LA)]):Re[~~(t*LA)]}}var XA=class Nn{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(S).find(A=>S[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=Fe(A,9),n=Fe(A,8),s=Fe(A,7),a=A&127,i=A>>10&3;return new Nn(a,i,s,t,n)}static copyFrom(A){return new Nn(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 ra[LA*(this.curveType*Yt+s)+n]}},ra=new Float32Array(LA*ia*Yt);for(let e=0;e<Yt;e++)for(let A=0;A<ia;A++){let t=LA*(e*Yt+A);for(let n=0;n<LA;n++)ra[t+n]=oa(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,S.filterResonance),cA=class Un{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,i=!1,o=!1){this.primarySource=A,this.secondarySource=t,this.destination=n,this.transformAmount=s,this.transformType=a,this.isEffectModulator=i,this.isDefaultResonantModulator=o}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 Un(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 Ge=(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 Ya=(e=>typeof Ge<"u"?Ge:typeof Proxy<"u"?new Proxy(e,{get:(A,t)=>(typeof Ge<"u"?Ge:A)[t]}):e)(function(e){if(typeof Ge<"u")return Ge.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')}),q=class extends Uint8Array{currentIndex=0;slice(e,A){let t=super.slice(e,A);return t.currentIndex=0,t}};function se(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 lA(e,A){let t=e.currentIndex;return e.currentIndex+=A,se(e,A,t)}function oe(e,A=!1,t=!1){let n=e.length;A&&n++,t&&n%2!==0&&n++;let s=new q(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 L(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 lt(e,A,t){for(let n=0;n<t;n++)e[e.currentIndex++]=A>>n*8&255}function _(e,A){e[e.currentIndex++]=A&255,e[e.currentIndex++]=A>>8}function rA(e,A){lt(e,A,4)}function _n(e,A){let t=A<<8|e;return t>32767?t-65536:t}function Ja(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=lA(e,4),s=L(e,4);n===""&&(s=0);let a;return A?a=e.slice(e.currentIndex,e.currentIndex+s):a=new q(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 q(r);return kA(g,a),rA(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),o=a;t&&(n+=4,o+=4,s="LIST");let I=n+a;I%2!==0&&I++;let r=new q(I);return kA(r,s),rA(r,o),t&&kA(r,e),A.forEach(g=>{r.set(g,n),n+=g.length}),r}function pe(e,A){return e.find(t=>t.header!=="LIST"?!1:(t.data.currentIndex=4,se(t.data,4)===A))}function jn(e,A){return{...A,...e??{}}}function je(e,A,t=0){let n=0;for(let s=0;s<A;s++)n=n<<8|e[t+s];return n>>>0}function Xe(e,A){let t=je(e,A,e.currentIndex);return e.currentIndex+=A,t}function Rt(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 Cn(e){let A=[e&127];for(e>>=7;e>0;)A.unshift(e&127|128),e>>=7;return A}function Rn(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 ne(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;"},Js;(()=>{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,v){for(var Z=new A(31),nA=0;nA<31;++nA)Z[nA]=v+=1<<F[nA-1];for(var oA=new t(Z[30]),nA=1;nA<30;++nA)for(var LA=Z[nA];LA<Z[nA+1];++LA)oA[LA]=LA-Z[nA]<<5|nA;return{b:Z,r:oA}},I=o(n,2),r=I.b,g=I.r;r[28]=258,g[258]=28;var c=o(s,0),h=c.b,C=c.r,u=new A(32768);for(w=0;w<32768;++w)d=(w&43690)>>1|(w&21845)<<1,d=(d&52428)>>2|(d&13107)<<2,d=(d&61680)>>4|(d&3855)<<4,u[w]=((d&65280)>>8|(d&255)<<8)>>1;var d,w,S=function(F,v,Z){for(var nA=F.length,oA=0,LA=new A(v);oA<nA;++oA)F[oA]&&++LA[F[oA]-1];var ie=new A(v);for(oA=1;oA<v;++oA)ie[oA]=ie[oA-1]+LA[oA-1]<<1;var _A;if(Z){_A=new A(1<<v);var jA=15-v;for(oA=0;oA<nA;++oA)if(F[oA])for(var Ne=oA<<4|F[oA],re=v-F[oA],eA=ie[F[oA]-1]++<<re,EA=eA|(1<<re)-1;eA<=EA;++eA)_A[u[eA]>>jA]=Ne}else for(_A=new A(nA),oA=0;oA<nA;++oA)F[oA]&&(_A[oA]=u[ie[F[oA]-1]++]>>15-F[oA]);return _A},p=new e(288);for(w=0;w<144;++w)p[w]=8;var w;for(w=144;w<256;++w)p[w]=9;var w;for(w=256;w<280;++w)p[w]=7;var w;for(w=280;w<288;++w)p[w]=8;var w,k=new e(32);for(w=0;w<32;++w)k[w]=5;var w,M=S(p,9,1),H=S(k,5,1),b=function(F){for(var v=F[0],Z=1;Z<F.length;++Z)F[Z]>v&&(v=F[Z]);return v},B=function(F,v,Z){var nA=v/8|0;return(F[nA]|F[nA+1]<<8)>>(v&7)&Z},O=function(F,v){var Z=v/8|0;return(F[Z]|F[Z+1]<<8|F[Z+2]<<16)>>(v&7)},X=function(F){return(F+7)/8|0},J=function(F,v,Z){return(v==null||v<0)&&(v=0),(Z==null||Z>F.length)&&(Z=F.length),new e(F.subarray(v,Z))},Y=["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,v,Z){var nA=new Error(v||Y[F]);if(nA.code=F,Error.captureStackTrace&&Error.captureStackTrace(nA,K),!Z)throw nA;return nA},P=function(F,v,Z,nA){var oA=F.length,LA=nA?nA.length:0;if(!oA||v.f&&!v.l)return Z||new e(0);var ie=!Z,_A=ie||v.i!=2,jA=v.i;ie&&(Z=new e(oA*3));var Ne=function(kt){var ue=Z.length;if(kt>ue){var at=new e(Math.max(ue*2,kt));at.set(Z),Z=at}},re=v.f||0,eA=v.p||0,EA=v.b||0,$A=v.l,NA=v.d,le=v.m,de=v.n,At=oA*8;do{if(!$A){re=B(F,eA,1);var Ue=B(F,eA+1,3);if(eA+=3,Ue)if(Ue==1)$A=M,NA=H,le=9,de=5;else if(Ue==2){var et=B(F,eA,31)+257,An=B(F,eA+10,15)+4,en=et+B(F,eA+5,31)+1;eA+=14;for(var Te=new e(en),Qe=new e(19),UA=0;UA<An;++UA)Qe[a[UA]]=B(F,eA+UA*3,7);eA+=An*3;for(var tn=b(Qe),mt=(1<<tn)-1,xe=S(Qe,tn,1),UA=0;UA<en;){var tt=xe[B(F,eA,mt)];eA+=tt&15;var GA=tt>>4;if(GA<16)Te[UA++]=GA;else{var Ie=0,nt=0;for(GA==16?(nt=3+B(F,eA,3),eA+=2,Ie=Te[UA-1]):GA==17?(nt=3+B(F,eA,7),eA+=3):GA==18&&(nt=11+B(F,eA,127),eA+=7);nt--;)Te[UA++]=Ie}}var nn=Te.subarray(0,et),ge=Te.subarray(et);le=b(nn),de=b(ge),$A=S(nn,le,1),NA=S(ge,de,1)}else K(1);else{var GA=X(eA)+4,St=F[GA-4]|F[GA-3]<<8,pt=GA+St;if(pt>oA){jA&&K(0);break}_A&&Ne(EA+St),Z.set(F.subarray(GA,pt),EA),v.b=EA+=St,v.p=eA=pt*8,v.f=re;continue}if(eA>At){jA&&K(0);break}}_A&&Ne(EA+131072);for(var cs=(1<<le)-1,Es=(1<<de)-1,yt=eA;;yt=eA){var Ie=$A[O(F,eA)&cs],ke=Ie>>4;if(eA+=Ie&15,eA>At){jA&&K(0);break}if(Ie||K(2),ke<256)Z[EA++]=ke;else if(ke==256){yt=eA,$A=null;break}else{var sn=ke-254;if(ke>264){var UA=ke-257,ce=n[UA];sn=B(F,eA,(1<<ce)-1)+r[UA],eA+=ce}var He=NA[O(F,eA)&Es],De=He>>4;He||K(3),eA+=He&15;var ge=h[De];if(De>3){var ce=s[De];ge+=O(F,eA)&(1<<ce)-1,eA+=ce}if(eA>At){jA&&K(0);break}_A&&Ne(EA+131072);var st=EA+sn;if(EA<ge){var Ye=LA-ge,yA=Math.min(ge,st);for(Ye+EA<0&&K(3);EA<yA;++EA)Z[EA]=nA[Ye+EA]}for(;EA<st;++EA)Z[EA]=Z[EA-ge]}}v.l=$A,v.p=yt,v.b=EA,v.f=re,$A&&(re=1,v.m=le,v.d=NA,v.n=de)}while(!re);return EA!=Z.length&&ie?J(Z,0,EA):Z.subarray(0,EA)},z=new e(0);function hA(F,v){return P(F,{i:2},v&&v.out,v&&v.dictionary)}var gA=typeof TextDecoder<"u"&&new TextDecoder,V=0;try{gA.decode(z,{stream:!0}),V=1}catch{}Js=hA})();var Ps=Js,qs=!1,Os=!0,qt=!1;function Ks(e,A,t){qs=e,Os=A,qt=t}function y(...e){qs&&console.info(...e)}function tA(...e){Os&&console.warn(...e)}function YA(...e){qt&&console.group(...e)}function RA(...e){qt&&console.groupCollapsed(...e)}function W(){qt&&console.groupEnd()}var Ce={consoleColors:E,SpessaSynthInfo:y,SpessaSynthWarn:tA,SpessaSynthGroupCollapsed:RA,SpessaSynthGroup:YA,SpessaSynthGroupEnd:W,readBytesAsUintBigEndian:je,readLittleEndian:L,readBytesAsString:lA,readVariableLengthQuantity:uA,inflateSync:Ps};var zA=class{ticks;statusByte;data;constructor(e,A,t){this.ticks=e,this.statusByte=A,this.data=t}};function Pa(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 qa={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},m={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 Oa(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 c;r.statusByte<=R.sequenceSpecific?(c=[255,r.statusByte,...Cn(r.data.length),...r.data],I=void 0):r.statusByte===R.systemExclusive?(c=[240,...Cn(r.data.length),...r.data],I=void 0):(c=[],I!==r.statusByte&&(I=r.statusByte,c.push(r.statusByte)),c.push(...r.data)),a.push(...Cn(g)),a.push(...c),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(...Rt(6,4)),n.push(0,e.format),n.push(...Rt(e.tracks.length,2)),n.push(...Rt(e.timeDivision,2));for(let s of A)t("MTrk",n),n.push(...Rt(s.length,4)),n.push(...s);return new Uint8Array(n).buffer}var Ka=350,ye=9,Vs=16,Xs="gs",he=-1,Mt=`SPESSASYNTH_EMBEDDED_BANK_${Math.random()}_DO_NOT_DELETE`,Zs=32767,Va={time:0},Xa=.03,Za=.07,Wa=1,za=64,ms=121,mA=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===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 As(e){return e.data[0]===67&&e.data[2]===76&&e.data[5]===126&&e.data[6]===0}function Ws(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 es(e){return e.data[0]===65&&e.data[2]===66&&e.data[6]===127}function ts(e){return e.data[0]===126&&e.data[2]===9&&e.data[3]===1}function ns(e){return e.data[0]===126&&e.data[2]===9&&e.data[3]===3}function zs(e){return new zA(e,R.systemExclusive,new q([65,16,66,18,64,0,127,0,65,247]))}var ae=class _s{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`${_s.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}},_a="Created using SpessaSynth";function ja(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===ye,lastBank:void 0,lastBankLSB:void 0,hasBankSelect:!1});if(e.iterate((r,g)=>{let c=e.portChannelOffsetMap[a[g]];if(r.statusByte===R.midiPort){a[g]=r.data[0];return}let h=r.statusByte&240;if(h!==R.controllerChange&&h!==R.programChange&&h!==R.systemExclusive)return;if(h===R.systemExclusive){if(!Ws(r)){As(r)?n="xg":es(r)?n="gs":ts(r)?(n="gm",s.push({tNum:g,e:r})):ns(r)&&(n="gm2");return}let S=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][r.data[5]&15]+c;I[S].drums=!!(r.data[7]>0&&r.data[5]>>4);return}let C=(r.statusByte&15)+c,u=I[C];if(h===R.programChange){let p={program:r.data[0],bankLSB:u.lastBankLSB?.data?.[1]??0,bankMSB:mA.subtrackBankOffset(u.lastBank?.data?.[1]??0,e.bankOffset),isGMGSDrum:u.drums},k=t.getPreset(p,n);if(y(`%cInput patch: %c${ae.toMIDIString(p)}%c. Channel %c${C}%c. Changing patch to ${k.toString()}.`,E.info,E.unrecognized,E.info,E.recognized,E.info),r.data[0]=k.program,k.isGMGSDrum&&mA.isSystemXG(n)||u.lastBank===void 0||(u.lastBank.data[1]=mA.addBankOffset(k.bankMSB,A,k.isXGDrums),u.lastBankLSB===void 0))return;u.lastBankLSB.data[1]=k.bankLSB;return}let d=r.data[0]===m.bankSelectLSB;r.data[0]!==m.bankSelect&&!d||(u.hasBankSelect=!0,d?u.lastBankLSB=r:u.lastBank=r)}),I.forEach((r,g)=>{if(r.hasBankSelect)return;let c=g%16,h=R.programChange|c,C=Math.floor(g/16)*16,u=e.portChannelOffsetMap.indexOf(C),d=e.tracks.find(M=>M.port===u&&M.channels.has(c));if(d===void 0)return;let S=d.events.findIndex(M=>M.statusByte===h);if(S===-1){let M=d.events.findIndex(B=>B.statusByte>128&&B.statusByte<240&&(B.statusByte&15)===c);if(M===-1)return;let H=d.events[M].ticks,b=t.getPreset({bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1},n).program;d.addEvent(new zA(H,R.programChange|c,new q([b])),M),S=M}y(`%cAdding bank select for %c${g}`,E.info,E.recognized);let p=d.events[S].ticks,k=t.getPreset({bankLSB:0,bankMSB:0,program:r.program,isGMGSDrum:r.drums},n),w=mA.addBankOffset(k.bankMSB,A,k.isXGDrums);d.addEvent(new zA(p,R.controllerChange|c,new q([m.bankSelect,w])),S)}),n==="gm"&&!mA.isSystemXG(n)){for(let g of s){let c=e.tracks[g.tNum];c.deleteEvent(c.events.indexOf(g.e))}let r=0;e.tracks[0].events[0].statusByte===R.trackName&&r++,e.tracks[0].addEvent(zs(0),r)}}var Ss={bankOffset:0,metadata:{},correctBankOffset:!0,soundBank:void 0};function $a(e,A,t){let n=t.metadata;if(YA("%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.");ja(e,t.bankOffset,t.soundBank)}let s=new q(e.writeMIDI());n.name??=e.getName(),n.creationDate??=new Date,n.copyright??=_a,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],c=h=>{a.push(IA(h,g))};switch(r){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 o=new q(2);return lt(o,t.bankOffset,2),a.push(IA("DBNK",o)),y("%cFinished!",E.info),W(),MA("RIFF",[oe("RMID"),IA("data",s),MA("INFO",a,!0),new q(A)]).buffer}function Ao(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 r=I%16===ye;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 c=(I.statusByte&15)+e.portChannelOffsetMap[o[r]]||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 m.bankSelectLSB:h.bankLSB=I.data[1];break;case m.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(!Ws(I)){As(I)?(s="xg",y("%cXG on detected!",E.recognized)):ns(I)?(s="gm2",y("%cGM2 on detected!",E.recognized)):ts(I)?(s="gm",y("%cGM on detected!",E.recognized)):es(I)&&(s="gs",y("%cGS on detected!",E.recognized));return}let u=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][I.data[5]&15]+e.portChannelOffsetMap[o[r]],d=!!(I.data[7]>0&&I.data[5]>>4);h=n[u],h.isDrum=d}break}}),a.forEach((I,r)=>{I.size===0&&(y(`%cDetected change but no keys for %c${r.name}`,E.info,E.value),a.delete(r))}),W(),a}function eo(e,A=0){let t=C=>(C.data=new q(C.data.buffer),6e7/je(C.data,3)),n=[],a=e.tracks.map(C=>C.events).flat();a.sort((C,u)=>C.ticks-u.ticks);for(let C=0;C<16;C++)n.push([]);let o=0,I=60/(120*e.timeDivision),r=0,g=0,c=[];for(let C=0;C<16;C++)c.push([]);let h=(C,u)=>{let d=c[u].findIndex(p=>p.midiNote===C),S=c[u][d];if(S){let p=o-S.start;S.length=p,u===ye&&(S.length=p<A?A:p),c[u].splice(d,1)}g--};for(;r<a.length;){let C=a[r],u=C.statusByte>>4,d=C.statusByte&15;if(u===8)h(C.data[0],d);else if(u===9)if(C.data[1]===0)h(C.data[0],d);else{h(C.data[0],d);let S={midiNote:C.data[0],start:o,length:-1,velocity:C.data[1]/127};n[d].push(S),c[d].push(S),g++}else C.statusByte===81&&(I=60/(t(C)*e.timeDivision));if(++r>=a.length)break;o+=I*(a[r].ticks-C.ticks)}return g>0&&c.forEach((C,u)=>{C.forEach(d=>{let S=o-d.start;d.length=S,u===ye&&(d.length=S<A?A:S)})}),n}var Lt={linear:0,nearestNeighbor:1,hermite:2},HA={Idle:0,RPCoarse:1,RPFine:2,NRPCoarse:3,NRPFine:4,DataCoarse:5,DataFine:6},iA={channelTuning:0,channelTransposeFine:1,modulationMultiplier:2,masterTuning:3,channelTuningSemitones:4,channelKeyShift:5,sf2NPRNGeneratorLSB:6};function qe(e,A,t,n){return new zA(n,R.controllerChange|e%16,new q([A,t]))}function to(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 q([...n,a,247]))}function no(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(p=>{a.add(p.channel)});let o="gs",I=!1,r=e.tracks.map(p=>p.port),g={},c=0,h=(p,k)=>{e.tracks[p].channels.size!==0&&(c===0&&(c+=16,g[k]=0),g[k]===void 0&&(g[k]=c,c+=16),r[p]=k)};e.tracks.forEach((p,k)=>{h(k,p.port)});let C=c,u=Array(C).fill(!0),d=Array(C).fill(0),S=Array(C).fill(0);if(s.forEach(p=>{let k=Math.trunc(p.keyShift),w=p.keyShift-k;d[p.channel]=k,S[p.channel]=w}),e.iterate((p,k,w)=>{let M=e.tracks[k],H=w[k],b=()=>{M.deleteEvent(H),w[k]--},B=(K,P=0)=>{M.addEvent(K,H+P),w[k]++},O=g[r[k]]||0;if(p.statusByte===R.midiPort){h(k,p.data[0]);return}if(p.statusByte<=R.sequenceSpecific&&p.statusByte>=R.sequenceNumber)return;let X=p.statusByte&240,J=p.statusByte&15,Y=J+O;if(n.includes(Y)){b();return}switch(X){case R.noteOn:if(u[Y]){u[Y]=!1,t.filter(P=>P.channel===Y).forEach(P=>{let z=qe(J,P.controllerNumber,P.controllerValue,p.ticks);B(z)});let K=S[Y];if(K!==0){let P=K*64+64,z=qe(J,m.registeredParameterMSB,0,p.ticks),hA=qe(J,m.registeredParameterLSB,1,p.ticks),gA=qe(Y,m.dataEntryMSB,P,p.ticks),V=qe(J,m.dataEntryLSB,0,p.ticks);B(V),B(gA),B(hA),B(z)}if(a.has(Y)){let P=A.find(v=>v.channel===Y);if(!P)return;y(`%cSetting %c${P.channel}%c to %c${ae.toMIDIString(P)}%c. Track num: %c${k}`,E.info,E.recognized,E.info,E.recognized,E.info,E.recognized);let z=P.bankMSB,hA=P.bankLSB,gA=P.program,V=new zA(p.ticks,R.programChange|J,new q([gA]));B(V);let F=(v,Z)=>{let nA=qe(J,v?m.bankSelectLSB:m.bankSelect,Z,p.ticks);B(nA)};mA.isSystemXG(o)&&P.isGMGSDrum&&(y(`%cAdding XG Drum change on track %c${k}`,E.recognized,E.value),z=mA.getDrumBank(o),hA=0),F(!1,z),F(!0,hA),P.isGMGSDrum&&!mA.isSystemXG(o)&&J!==ye&&(y(`%cAdding GS Drum change on track %c${k}`,E.recognized,E.value),B(to(J,p.ticks)))}}p.data[0]+=d[Y];break;case R.noteOff:p.data[0]+=d[Y];break;case R.programChange:if(a.has(Y)){b();return}break;case R.controllerChange:{let K=p.data[0];if(t.find(z=>z.channel===Y&&K===z.controllerNumber)!==void 0){b();return}(K===m.bankSelect||K===m.bankSelectLSB)&&a.has(Y)&&b()}break;case R.systemExclusive:if(As(p))y("%cXG system on detected",E.info),o="xg",I=!0;else if(p.data[0]===67&&p.data[2]===76&&p.data[3]===8&&p.data[5]===3)a.has(p.data[4]+O)&&b();else if(ns(p))y("%cGM2 system on detected",E.info),o="gm2",I=!0;else if(es(p)){I=!0,y("%cGS on detected!",E.recognized);break}else ts(p)&&(y("%cGM on detected, removing!",E.info),b(),I=!1)}}),!I&&A.length>0){let p=0;e.tracks[0].events[0].statusByte===R.trackName&&p++,e.tracks[0].addEvent(zs(0),p),y("%cGS on not detected. Adding it.",E.info)}e.flush(),W()}function so(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[iA.channelTransposeFine]/100;r!==0&&t.push({channel:I,keyShift:r}),o.lockPreset&&s.push({channel:I,...o.patch}),o.lockedControllers.forEach((g,c)=>{if(!g||c>127||c===m.bankSelect)return;let h=o.midiControllers[c]>>7;a.push({channel:I,controllerNumber:c,controllerValue:h})})}),e.modify(s,a,n,t)}var hn={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},Oe={inLineResource:1,inFileResource:2,inFileNode:3,externalFile:4,externalXMF:5,XMFFileURIandNodeID:6},ln={StandardMIDIFile:0,StandardMIDIFileType1:1,DLS1:2,DLS2:3,DLS22:4,mobileDLS:5,unknown:-1,folder:-2},ao={standard:0,MMA:1,registered:2,nonRegistered:3},bt={none:0,MMAUnpacker:1,registered:2,nonRegistered:3},oo=class js{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(hn).includes(r)?g=Object.keys(hn).find(S=>hn[S]===r)??"":(y(`Unknown field specifier: ${r}`),g=`unknown_${r}`);else{let S=uA(I);r=lA(I,S),g=r}let d=uA(I);if(d===0){let S=uA(I),p=I.slice(I.currentIndex,I.currentIndex+S);I.currentIndex+=S,uA(p)<4?this.metadata[g]=lA(p,S-1):this.metadata[g]=p.slice(p.currentIndex)}else y(`International content: ${d}`),I.currentIndex+=uA(I)}let c=o.currentIndex,h=uA(o),C=o.slice(o.currentIndex,c+h);if(o.currentIndex=c+h,h>0)for(this.packedContent=!0;C.currentIndex<h;){let u={};switch(u.id=uA(C),u.id){case bt.nonRegistered:case bt.registered:throw W(),new Error(`Unsupported unpacker ID: ${u.id}`);default:throw W(),new Error(`Unknown unpacker ID: ${u.id}`);case bt.none:u.standardID=uA(C);break;case bt.MMAUnpacker:{let d=C[C.currentIndex++];d===0&&(d<<=8,d|=C[C.currentIndex++],d<<=8,d|=C[C.currentIndex++]);let S=uA(C);u.manufacturerID=d,u.manufacturerInternalID=S}break}u.decodedSize=uA(C),this.nodeUnpackers.push(u)}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 Oe.inLineResource:break;case Oe.externalXMF:case Oe.inFileNode:case Oe.XMFFileURIandNodeID:case Oe.externalFile:case Oe.inFileResource:throw W(),new Error(`Unsupported reference type: ${this.referenceTypeID}`);default:throw W(),new Error(`Unknown reference type: ${this.referenceTypeID}`)}if(this.isFile){if(this.packedContent){let d=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 q(Ps(d).buffer)}catch(S){if(W(),S instanceof Error)throw new Error(`Error unpacking XMF file contents: ${S.message}.`)}}let u=this.metadata.resourceFormat;if(u===void 0)tA("No resource format for this file node!");else{u[0]!==ao.standard&&(y(`Non-standard formatTypeID: ${u.toString()}`),this.resourceFormat=u.toString());let S=u[1];Object.values(ln).includes(S)?this.resourceFormat=Object.keys(ln).find(p=>ln[p]===S):y(`Unrecognized resource format: ${S}`)}}else for(this.resourceFormat="folder";this.nodeData.currentIndex<this.nodeData.length;){let u=this.nodeData.currentIndex,d=uA(this.nodeData),S=this.nodeData.slice(u,u+d);this.nodeData.currentIndex=u+d,this.innerNodes.push(new js(S))}}get isFile(){return this.itemCount===0}};function io(e,A){e.bankOffset=0;let t=lA(A,4);if(t!=="XMF_")throw W(),new SyntaxError(`Invalid XMF Header! Expected "_XMF", got "${t}"`);YA("%cParsing XMF file...",E.info);let n=lA(A,4);if(y(`%cXMF version: %c${n}`,E.info,E.recognized),n==="2.00"){let r=Xe(A,4),g=Xe(A,4);y(`%cFile Type ID: %c${r}%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 oo(A),o,I=r=>{let g=(c,h)=>{r.metadata[c]!==void 0&&typeof r.metadata[c]=="string"&&(e.rmidiInfo[h]=oe(r.metadata[c]))};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!",E.recognized),e.embeddedSoundBank=r.nodeData.buffer;break;case"StandardMIDIFile":case"StandardMIDIFileType1":y("%cFound embedded MIDI!",E.recognized),o=r.nodeData;break}else for(let c of r.innerNodes)I(c)};if(I(a),W(),!o)throw new Error("No MIDI data in the XMF file!");return o}var Ot=class $s{name="";port=0;channels=new Set;events=[];static copyFrom(A){let t=new $s;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 q(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 q(A),s=n,a=g=>{let c=lA(g,4),h=Xe(g,4),C=new q(h),u={type:c,size:h,data:C},d=g.slice(g.currentIndex,g.currentIndex+u.size);return u.data.set(d,0),g.currentIndex+=u.size,u},o=se(n,4);if(o==="RIFF"){n.currentIndex+=8;let g=lA(n,4);if(g!=="RMID")throw W(),new SyntaxError(`Invalid RMIDI Header! Expected "RMID", got "${g}"`);let c=aA(n);if(c.header!=="data")throw W(),new SyntaxError(`Invalid RMIDI Chunk header! Expected "data", got "${g}"`);s=c.data;let h=!1,C=!1;for(;n.currentIndex<=n.length;){let u=n.currentIndex,d=aA(n,!0);if(d.header==="RIFF"){let S=lA(d.data,4).toLowerCase();S==="sfbk"||S==="sfpk"||S==="dls "?(y("%cFound embedded soundbank!",E.recognized),e.embeddedSoundBank=n.slice(u,u+d.size).buffer):tA(`Unknown RIFF chunk: "${S}"`),S==="dls "?e.isDLSRMIDI=!0:h=!0}else if(d.header==="LIST"&&lA(d.data,4)==="INFO")for(y("%cFound RMIDI INFO chunk!",E.recognized);d.data.currentIndex<=d.size;){let p=aA(d.data,!0),k=p.header,w=p.data;switch(k){default:tA(`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 o==="XMF_"?s=io(e,n):s=n;let I=a(s);if(I.type!=="MThd")throw W(),new SyntaxError(`Invalid MIDI Header! Expected "MThd", got "${I.type}"`);if(I.size!==6)throw W(),new RangeError(`Invalid MIDI header chunk size! Expected 6, got ${I.size}`);e.format=Xe(I.data,2);let r=Xe(I.data,2);e.timeDivision=Xe(I.data,2);for(let g=0;g<r;g++){let c=new Ot,h=a(s);if(h.type!=="MTrk")throw W(),new SyntaxError(`Invalid track header! Expected "MTrk" got "${h.type}"`);let C,u=0;for(e.format===2&&g>0&&(u+=e.tracks[g-1].events[e.tracks[g-1].events.length-1].ticks);h.data.currentIndex<h.size;){u+=uA(h.data);let d=h.data[h.data.currentIndex],S;if(C!==void 0&&d<128)S=C;else{if(d<128)throw W(),new SyntaxError(`Unexpected byte with no running byte. (${d})`);S=h.data[h.data.currentIndex++]}let p=Pa(S),k;switch(p){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=qa[S>>4],C=S;break}let w=new q(k);w.set(h.data.slice(h.data.currentIndex,h.data.currentIndex+k),0);let M=new zA(u,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),W()}var ro=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"]]),Io=[ro];function go(e){for(let A of Io){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 co(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 Eo(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 Bo(e){let t=/\b\d{4}\b/.exec(e);return t?new Date(t[0]):void 0}function ss(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=go(e);if(n)return n;let s=co(e);if(s)return s;let a=Eo(e);if(a)return a;let o=Bo(e);return o||(tA(`Invalid date: "${e}". Replacing with the current date!`),new Date)}return t}var Le=class Nt{tracks=[];timeDivision=0;duration=0;tempoChanges=[{ticks:0,tempo:120}];extraMetadata=[];lyrics=[];firstNoteOn=0;keyRange={min:0,max:127};lastVoiceEventTick=0;portChannelOffsetMap=[0];loop={start:0,end:0,type:"hard"};fileName;format=0;rmidiInfo={};bankOffset=0;isKaraokeFile=!1;isMultiPort=!1;isDLSRMIDI=!1;embeddedSoundBank;binaryName;get infoEncoding(){let A=this.rmidiInfo.infoEncoding;if(!A)return;let t=A.byteLength;return A[A.byteLength-1]===0&&t--,se(A,t)}static fromArrayBuffer(A,t=""){let n=new Nt;return ps(n,A,t),n}static async fromFile(A){let t=new Nt;return ps(t,await A.arrayBuffer(),A.name),t}static copyFrom(A){let t=new Nt;return t.copyFrom(A),t}copyFrom(A){this.copyMetadataFrom(A),this.embeddedSoundBank=A?.embeddedSoundBank?.slice(0)??void 0,this.tracks=A.tracks.map(t=>Ot.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 Ao(this,A)}preloadSynth(A){RA("%cPreloading samples...",E.info),this.getUsedProgramsAndKeys(A.soundBankManager).forEach((n,s)=>{y(`%cPreloading used samples on %c${s.name}%c...`,E.info,E.recognized,E.info);for(let a of n){let[o,I]=a.split("-").map(Number);A.getVoicesForPreset(s,o,I,o)}}),W()}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 eo(this,A)}writeMIDI(){return Oa(this)}writeRMIDI(A,t=Ss){return $a(this,A,jn(t,Ss))}modify(A=[],t=[],n=[],s=[]){no(this,A,t,n,s)}applySnapshot(A){so(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){tA(`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=oe("utf-8",!0),A==="picture")this.rmidiInfo.picture=new Uint8Array(t);else if(A==="creationDate")this.rmidiInfo.creationDate=oe(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 ss(se(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){tA(`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 q(t.data))),this.lyrics=A.lyrics.map(t=>new zA(t.ticks,t.statusByte,new q(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(){YA("%cInterpreting MIDI events...",E.info);let A=!1;this.tempoChanges=[{ticks:0,tempo:120}],this.extraMetadata=[],this.lyrics=[],this.firstNoteOn=0,this.keyRange={max:0,min:127},this.lastVoiceEventTick=0,this.portChannelOffsetMap=[0],this.loop={start:0,end:0,type:"hard"},this.isKaraokeFile=!1,this.isMultiPort=!1;let t=!1;typeof this.rmidiInfo.name<"u"&&(t=!0);let n=null,s=null,a="hard";for(let g of this.tracks){let c=new Set,h=!1;for(let u=0;u<g.events.length;u++){let d=g.events[u];if(d.statusByte>=128&&d.statusByte<240)switch(h=!0,d.ticks>this.lastVoiceEventTick&&(this.lastVoiceEventTick=d.ticks),d.statusByte&240){case R.controllerChange:switch(d.data[0]){case 2:case 111:case 116:n=d.ticks;break;case 4:case 117:s===null?(a="soft",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:{c.add(d.statusByte&15);let p=d.data[0];this.keyRange.min=Math.min(this.keyRange.min,p),this.keyRange.max=Math.max(this.keyRange.max,p);break}}let S=se(d.data);switch(d.statusByte){case R.endOfTrack:u!==g.events.length-1&&(g.deleteEvent(u),u--,tA("Unexpected EndOfTrack. Removing!"));break;case R.setTempo:this.tempoChanges.push({ticks:d.ticks,tempo:6e7/je(d.data,3)});break;case R.marker:switch(S.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:S.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 p=S.trim();p.startsWith("@KMIDI KARAOKE FILE")?(this.isKaraokeFile=!0,y("%cKaraoke MIDI detected!",E.recognized)):this.isKaraokeFile&&(p.startsWith("@T")||p.startsWith("@A")?A?this.extraMetadata.push(d):(this.binaryName=d.data.slice(2),A=!0,t=!0):p.startsWith("@")||this.lyrics.push(d));break}}}g.channels=c,g.name="";let C=g.events.find(u=>u.statusByte===R.trackName);C&&this.tracks.indexOf(g)>0&&(g.name=se(C.data),!h&&!g.name.toLowerCase().includes("setup")&&this.extraMetadata.push(C))}this.tempoChanges.reverse(),y("%cCorrecting loops, ports and detecting notes...",E.info);let o=[];for(let g of this.tracks){let c=g.events.find(h=>(h.statusByte&240)===R.noteOn);c&&o.push(c.ticks)}this.firstNoteOn=Math.min(...o),y(`%cFirst note-on detected at: %c${this.firstNoteOn}%c ticks!`,E.info,E.recognized,E.info),n??=this.firstNoteOn,(s===null||s===0)&&(s=this.lastVoiceEventTick),this.loop={start:n,end:s,type:a},this.lastVoiceEventTick=Math.max(this.lastVoiceEventTick,this.loop.end),y(`%cLoop points: start: %c${this.loop.start}%c end: %c${this.loop.end}`,E.info,E.recognized,E.info,E.recognized);let I=0;this.portChannelOffsetMap=[];for(let g of this.tracks)if(g.port=-1,g.channels.size!==0)for(let c of g.events){if(c.statusByte!==R.midiPort)continue;let h=c.data[0];g.port=h,this.portChannelOffsetMap[h]===void 0&&(this.portChannelOffsetMap[h]=I,I+=16)}this.portChannelOffsetMap=[...this.portChannelOffsetMap].map(g=>g??0);let r=1/0;for(let g of this.tracks)g.port!==-1&&r>g.port&&(r=g.port);r===1/0&&(r=0);for(let g of this.tracks)(g.port===-1||g.port===void 0)&&(g.port=r);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(g=>g.statusByte>=R.noteOn&&g.statusByte<R.polyPressure)===void 0){let g=this.tracks[0].events.find(c=>c.statusByte===R.trackName);g&&(this.binaryName=g.data)}}else{let g=this.tracks[0].events.find(c=>c.statusByte===R.trackName);g&&(this.binaryName=g.data)}if(this.extraMetadata=this.extraMetadata.filter(g=>g.data.length>0),this.lyrics.sort((g,c)=>g.ticks-c.ticks),!this.tracks.some(g=>g.events[0].ticks===0)){let g=this.tracks[0],c=this?.binaryName?.buffer;c||(c=new Uint8Array(0).buffer),g.events.unshift(new zA(0,R.trackName,new q(c)))}this.duration=this.midiTicksToSeconds(this.lastVoiceEventTick),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${Rn(Math.ceil(this.duration)).time}`,E.info,E.recognized,E.info,E.recognized),W()}};function Co(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/je(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 ho(){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._midiData.loop.type==="soft"?this.jumpToTick(this._midiData.loop.start):this.setTimeTicks(this._midiData.loop.start);return}if(a.events.length<=this.eventIndexes[s]||n.ticks>=this._midiData.lastVoiceEventTick){this.songIsFinished();return}let o=a.events[this.eventIndexes[s]];this.playedTime+=this.oneTickToSeconds*(o.ticks-n.ticks)}}function lo(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 Qo(e){if(!e.tracks)throw new Error("This MIDI has no tracks!");if(e.duration===0){tA("This MIDI file has a duration of exactly 0 seconds."),this.pausedTime=0,this.isFinished=!0;return}this.oneTickToSeconds=60/(120*e.timeDivision),this._midiData=e,this.isFinished=!1,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),this.preload&&this._midiData.preloadSynth(this.synth)),this.currentMIDIPorts=this._midiData.tracks.map(A=>A.port),this.midiPortChannelOffset=0,this.midiPortChannelOffsets={},this._midiData.tracks.forEach((A,t)=>{this.assignMIDIPort(t,A.port)}),this.firstNoteTime=this._midiData.midiTicksToSeconds(this._midiData.firstNoteOn),y(`%cTotal song time: ${Rn(Math.ceil(this._midiData.duration)).time}`,E.recognized),this.callEvent("songChange",{songIndex:this._songIndex}),this._midiData.duration<=.2&&(tA(`%cVery short song: (${Rn(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},Mn=Object.keys(i).length,uo=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},CA={linear:0,concave:1,convex:2,switch:3};var U={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,bn=147,dt=new Int16Array(bn).fill(0),pA=(e,A)=>dt[e]=A<<7;pA(m.mainVolume,100);pA(m.balance,64);pA(m.expressionController,127);pA(m.pan,64);pA(m.portamentoOnOff,127);pA(m.filterResonance,64);pA(m.releaseTime,64);pA(m.attackTime,64);pA(m.brightness,64);pA(m.decayTime,64);pA(m.vibratoRate,64);pA(m.vibratoDepth,64);pA(m.vibratoDelay,64);pA(m.generalPurposeController6,64);pA(m.generalPurposeController8,64);pA(m.registeredParameterLSB,127);pA(m.registeredParameterMSB,127);pA(m.nonRegisteredParameterLSB,127);pA(m.nonRegisteredParameterMSB,127);pA(SA+AA.pitchWheel,64);pA(SA+AA.pitchWheelRange,2);var Aa=Object.keys(iA).length,ea=new Float32Array(Aa);ea[iA.modulationMultiplier]=1;function fo(e=Xs){this.privateProps.callEvent("allControllerReset",void 0),this.setMasterParameter("midiSystem",e),this.privateProps.tunings.length=0;for(let A=0;A<128;A++)this.privateProps.tunings.push([]);if(this.setMIDIVolume(1),this.privateProps.reverbSend=1,this.privateProps.chorusSend=1,!(!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})}}}function ta(e){this.lockedControllers[m.portamentoControl]||(this.channelSystem==="xg"?this.controllerChange(m.portamentoControl,60,e):this.controllerChange(m.portamentoControl,0,e))}function mo(e=!0){this.channelOctaveTuning.fill(0);for(let t=0;t<dt.length;t++){if(this.lockedControllers[t])continue;let n=dt[t];this.midiControllers[t]!==n&&t<127?t!==m.portamentoControl&&t!==m.dataEntryMSB&&t!==m.registeredParameterMSB&&t!==m.registeredParameterLSB&&t!==m.nonRegisteredParameterMSB&&t!==m.nonRegisteredParameterLSB&&this.controllerChange(t,n>>7,e):this.midiControllers[t]=n}ta.call(this,e),this.channelVibrato={rate:0,depth:0,delay:0},this.randomPan=!1,this.sysExModulators.resetModulators();let A=this.customControllers[iA.channelTransposeFine];this.customControllers.set(ea),this.setCustomController(iA.channelTransposeFine,A),this.resetParameters()}function So(){this.setBankMSB(mA.getDefaultBank(this.channelSystem)),this.setBankLSB(0),this.setGSDrums(!1),this.setDrums(this.channelNumber%16===ye),this.programChange(0)}var na=new Set([m.bankSelect,m.bankSelectLSB,m.mainVolume,m.mainVolumeLSB,m.pan,m.panLSB,m.reverbDepth,m.tremoloDepth,m.chorusDepth,m.detuneDepth,m.phaserDepth,m.soundVariation,m.filterResonance,m.releaseTime,m.attackTime,m.brightness,m.decayTime,m.vibratoRate,m.vibratoDepth,m.vibratoDelay,m.soundController10]);function po(){this.channelOctaveTuning.fill(0),this.pitchWheel(8192),this.channelVibrato={rate:0,depth:0,delay:0};for(let e=0;e<128;e++){let A=dt[e];!na.has(e)&&A!==this.midiControllers[e]&&e!==m.portamentoControl&&this.controllerChange(e,A>>7)}ta.call(this,!0),this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}function yo(){this.dataEntryState=HA.Idle,this.midiControllers[m.nonRegisteredParameterLSB]=16256,this.midiControllers[m.nonRegisteredParameterMSB]=16256,this.midiControllers[m.registeredParameterLSB]=16256,this.midiControllers[m.registeredParameterMSB]=16256,this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}var Ke=dt.slice(0,128);function ko(e,A=void 0){if(!this._midiData)return!1;this.oneTickToSeconds=60/(120*this._midiData.timeDivision),this.sendMIDIReset(),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===m.dataDecrement||c===m.dataIncrement||c===m.dataEntryMSB||c===m.dataEntryLSB||c===m.registeredParameterLSB||c===m.registeredParameterMSB||c===m.nonRegisteredParameterLSB||c===m.nonRegisteredParameterMSB||c===m.bankSelect||c===m.bankSelectLSB||c===m.resetAllControllers,o=[];for(let c=0;c<t;c++)o.push(Array.from(Ke));let I,r=0;function g(c){if(n[c]=8192,o?.[c]!==void 0)for(let h=0;h<Ke.length;h++)na.has(h)||(o[c][h]=Ke[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 u=$n(C.statusByte),d=u.channel+(this.midiPortChannelOffsets[h.port]||0);switch(u.status){case R.noteOn:o[d]??=Array.from(Ke),o[d][m.portamentoControl]=C.data[0];break;case R.noteOff:break;case R.pitchWheel:n[d]=C.data[1]<<7|C.data[0];break;case R.programChange:{if(this._midiData.isMultiPort&&h.channels.size===0)break;let k=s[d];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===m.bankSelect){s[d].bank=w;break}else k===m.resetAllControllers&&g(d);this.sendMIDICC(d,k,w)}else o[d]??=Array.from(Ke),o[d][k]=C.data[1];break}case R.setTempo:let p=6e7/je(C.data,3);this.oneTickToSeconds=60/(p*this._midiData.timeDivision),I=C,r=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)}for(let c=0;c<t;c++)if(n[c]!==void 0&&this.sendMIDIPitchWheel(c,n[c]),o[c]!==void 0&&o[c].forEach((h,C)=>{h!==Ke[C]&&!a(C)&&this.sendMIDICC(c,C,h)}),s[c].actualBank>=0){let h=s[c];h.program!==-1?(this.sendMIDICC(c,m.bankSelect,h.actualBank),this.sendMIDIProgramChange(c,h.program)):this.sendMIDICC(c,m.bankSelect,h.bank)}return I&&this.callEvent("metaEvent",{event:I,trackIndex:r}),this.paused&&(this.pausedTime=this.playedTime),!0}var sa=class{songs=[];shuffledSongIndexes=[];synth;externalMIDIPlayback=!1;retriggerPausedNotes=!0;loopCount=0;skipToFirstNoteOn=!0;isFinished=!1;preload=!0;onEventCall;processTick=ho.bind(this);firstNoteTime=0;oneTickToSeconds=0;eventIndexes=[];playedTime=0;pausedTime=-1;absoluteStartTime=0;playingNotes=[];currentMIDIPorts=[];midiPortChannelOffset=0;midiPortChannelOffsets={};assignMIDIPort=lo.bind(this);loadNewSequence=Qo.bind(this);processEvent=Co.bind(this);setTimeTo=ko.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.recalculateStartTime(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 this.playingNotes=[],this.callEvent("timeChange",{newTime:e}),this.setTimeTo(e),this.recalculateStartTime(e)}get paused(){return this.pausedTime!==void 0}play(){if(!this._midiData){tA("No songs loaded in the sequencer. Ignoring the play call.");return}this.currentTime>=this._midiData.duration&&(this.currentTime=0),this.paused&&this.recalculateStartTime(this.pausedTime??0),this.retriggerPausedNotes&&this.playingNotes.forEach(e=>{this.sendMIDINoteOn(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.preload&&(YA("%cPreloading all songs...",E.info),this.songs.forEach(A=>{A.embeddedSoundBank===void 0&&A.preloadSynth(this.synth)}),W()),this.loadCurrentSong())}callEvent(e,A){this?.onEventCall?.({type:e,data:A})}pauseInternal(e){this.paused||(this.stop(),this.callEvent("pause",{isFinished:e}),e&&this.callEvent("songEnded",{}))}songIsFinished(){if(this.isFinished=!0,this.songs.length===1){this.pauseInternal(!0);return}this._songIndex++,this._songIndex%=this.songs.length,this.loadCurrentSong()}stop(){this.pausedTime=this.currentTime,this.sendMIDIAllOff()}findFirstEventIndex(){let 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){if(!this.externalMIDIPlayback){tA(`Attempting to send ${ne(e)} to the synthesizer via sendMIDIMessage. This shouldn't happen!`);return}this.callEvent("midiMessage",{message:e})}sendMIDIAllOff(){for(let e=0;e<16;e++)this.sendMIDICC(e,m.sustainPedal,0);if(!this.externalMIDIPlayback){this.synth.stopAllChannels();return}this.playingNotes.forEach(e=>{this.sendMIDINoteOff(e.channel,e.midiNote)});for(let e=0;e<Vs;e++)this.sendMIDICC(e,m.allNotesOff,0),this.sendMIDICC(e,m.allSoundOff,0)}sendMIDIReset(){if(this.sendMIDIAllOff(),!this.externalMIDIPlayback){this.synth.resetAllControllers();return}this.sendMIDIMessage([R.reset])}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)}}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}jumpToTick(e){if(!this._midiData)return;this.sendMIDIAllOff();let A=this._midiData.midiTicksToSeconds(e);this.callEvent("timeChange",{newTime:A}),this.recalculateStartTime(A),this.playedTime=A,this.eventIndexes.length=0;for(let n of this._midiData.tracks){let s=n.events.findIndex(a=>a.ticks>=e);this.eventIndexes.push(s<0?n.events.length:s)}let t=this._midiData.tempoChanges.find(n=>n.ticks<=e);this.oneTickToSeconds=60/(t.tempo*this._midiData.timeDivision)}sendMIDINoteOn(e,A,t){if(!this.externalMIDIPlayback){this.synth.noteOn(e,A,t);return}e%=16,this.sendMIDIMessage([R.noteOn|e,A,t])}sendMIDINoteOff(e,A){if(!this.externalMIDIPlayback){this.synth.noteOff(e,A);return}e%=16,this.sendMIDIMessage([R.noteOff|e,A,64])}sendMIDICC(e,A,t){if(!this.externalMIDIPlayback){this.synth.controllerChange(e,A,t);return}e%=16,this.sendMIDIMessage([R.controllerChange|e,A,t])}sendMIDIProgramChange(e,A){if(!this.externalMIDIPlayback){this.synth.programChange(e,A);return}e%=16,this.sendMIDIMessage([R.programChange|e,A])}sendMIDIPitchWheel(e,A){if(!this.externalMIDIPlayback){this.synth.pitchWheel(e,A);return}e%=16,this.sendMIDIMessage([R.pitchWheel|e,A&127,A>>7])}},Qt=Qt!==void 0?Qt:{},ks=!1,aa;Qt.isInitialized=new Promise(e=>aa=e);var Do=function(e){var A,t,n,s,a,o,I,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",g="",c=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");do s=r.indexOf(e.charAt(c++)),a=r.indexOf(e.charAt(c++)),o=r.indexOf(e.charAt(c++)),I=r.indexOf(e.charAt(c++)),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(c<e.length);return g};(function(){var e,A,t,n,s,a,o,I,r,g,c,h,C,u,d,S,p,k,w,M,H,b,B=B!==void 0?B:{};B.wasmBinary=Uint8Array.from(Do("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(l){return l.charCodeAt(0)});var B=B!==void 0?B:{},O={};for(e in B)B.hasOwnProperty(e)&&(O[e]=B[e]);B.arguments=[],B.thisProgram="./this.program",B.quit=function(l,Q){throw Q},B.preRun=[],B.postRun=[];var X=!1,J=!1,Y=!1,K=!1;X=typeof window=="object",J=typeof importScripts=="function",Y=typeof process=="object"&&typeof Ya=="function"&&!X&&!J,K=!X&&!Y&&!J;var P="";function z(l){return B.locateFile?B.locateFile(l,P):P+l}Y?(P="/",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)),NA(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 it))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)):(NA(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)})):(X||J)&&(X?document.currentScript&&(P=document.currentScript.src):P=self.location.href,P=P.indexOf("blob:")!==0?P.split("/").slice(0,-1).join("/")+"/":"",B.read=function(Q){var f=new XMLHttpRequest;return f.open("GET",Q,!1),f.send(null),f.responseText},J&&(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 N=new XMLHttpRequest;N.open("GET",Q,!0),N.responseType="arraybuffer",N.onload=function(){if(N.status==200||N.status==0&&N.response){f(N.response);return}D()},N.onerror=D,N.send(null)},B.setWindowTitle=function(l){document.title=l});var hA=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)||hA);for(e in O)O.hasOwnProperty(e)&&(B[e]=O[e]);function V(l){var Q=u;return u=u+l+15&-16,Q}function F(l){var Q=r[M>>2],f=Q+l+15&-16;return r[M>>2]=f,f>=yA&&!st()?(r[M>>2]=Q,0):Q}function v(l,Q){return Q||(Q=16),l=Math.ceil(l/Q)*Q}function Z(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 NA(Q%8==0),Q/8}}function nA(l){nA.shown||(nA.shown={}),nA.shown[l]||(nA.shown[l]=1,gA(l))}O=void 0;var oA={"f64-rem":function(l,Q){return l%Q},debugger:function(){}},LA=[];function ie(l,Q){for(var f=0,D=f;D<f+0;D++)if(!LA[D])return LA[D]=l,1+D;throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS."}function _A(l){LA[l-1]=null}var jA={};function Ne(l,Q){if(l){NA(Q),jA[Q]||(jA[Q]={});var f=jA[Q];return f[l]||(Q.length===1?f[l]=function(){return eA(Q,l)}:Q.length===2?f[l]=function(N){return eA(Q,l,[N])}:f[l]=function(){return eA(Q,l,Array.prototype.slice.call(arguments))}),f[l]}}function re(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 NA(l,Q){l||Ee("Assertion failed: "+Q)}function le(l){var Q=B["_"+l];return NA(Q,"Cannot call unknown function "+l+", make sure it is exported"),Q}var de={stackSave:function(){gn()},stackRestore:function(){In()},arrayToC:function(l){var Q,f,D=Ft(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=Ft(f),tt(l,Q,f)}return Q}},At={string:de.stringToC,array:de.arrayToC};function Ue(l,Q,f,D,N){var $=le(l),sA=[],x=0;if(D)for(var DA=0;DA<D.length;DA++){var dA=At[f[DA]];dA?(x===0&&(x=gn()),sA[DA]=dA(D[DA])):sA[DA]=D[DA]}var QA,BA=$.apply(null,sA);return BA=(QA=BA,Q==="string"?Qe(QA):Q==="boolean"?!!QA:QA),x!==0&&In(x),BA}function et(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":o[l>>1]=Q;break;case"i32":r[l>>2]=Q;break;case"i64":tempI64=[Q>>>0,+Na(tempDouble=Q)>=1?tempDouble>0?(0|Ta(+ls(tempDouble/4294967296),4294967295))>>>0:~~+Ua((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0],r[l>>2]=tempI64[0],r[l+4>>2]=tempI64[1];break;case"float":c[l>>2]=Q;break;case"double":h[l>>3]=Q;break;default:Ee("invalid type for setValue: "+f)}}function An(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 o[l>>1];case"i32":case"i64":return r[l>>2];case"float":return c[l>>2];case"double":return h[l>>3];default:Ee("invalid type for getValue: "+Q)}return null}function en(l,Q,f,D){typeof l=="number"?($=!0,sA=l):($=!1,sA=l.length);var N=typeof Q=="string"?Q:null;if(x=f==4?D:[typeof wt=="function"?wt:V,Ft,V,F][f===void 0?2:f](Math.max(sA,N?1:Q.length)),$){for(D=x,NA((3&x)==0),DA=x+(-4&sA);D<DA;D+=4)r[D>>2]=0;for(DA=x+sA;D<DA;)s[D++>>0]=0;return x}if(N==="i8")return l.subarray||l.slice?a.set(l,x):a.set(new Uint8Array(l),x),x;for(var $,sA,x,DA,dA,QA,BA,j=0;j<sA;){var bA=l[j];if((dA=N||Q[j])===0){j++;continue}dA=="i64"&&(dA="i32"),et(x+j,bA,dA),BA!==dA&&(QA=Z(dA),BA=dA),j+=QA}return x}function Te(l){return d?on?wt(l):F(l):V(l)}function Qe(l,Q){if(Q===0||!l)return"";for(var f,D,N,$=0,sA=0;$|=D=a[l+sA>>0],(D!=0||Q)&&(sA++,!Q||sA!=Q););Q||(Q=sA);var x="";if($<128){for(;Q>0;)N=String.fromCharCode.apply(String,a.subarray(l,l+Math.min(Q,1024))),x=x?x+N:N,l+=1024,Q-=1024;return x}return f=l,(function(dA,QA){for(var BA=QA;dA[BA];)++BA;if(BA-QA>16&&dA.subarray&&mt)return mt.decode(dA.subarray(QA,BA));for(var j,bA,JA,PA,qA,Fe,OA="";;){if(!(j=dA[QA++]))return OA;if(!(128&j)){OA+=String.fromCharCode(j);continue}if(bA=63&dA[QA++],(224&j)==192){OA+=String.fromCharCode((31&j)<<6|bA);continue}if(JA=63&dA[QA++],(240&j)==224?j=(15&j)<<12|bA<<6|JA:(PA=63&dA[QA++],(248&j)==240?j=(7&j)<<18|bA<<12|JA<<6|PA:(qA=63&dA[QA++],j=(252&j)==248?(3&j)<<24|bA<<18|JA<<12|PA<<6|qA:(1&j)<<30|bA<<24|JA<<18|PA<<12|qA<<6|(Fe=63&dA[QA++]))),j<65536)OA+=String.fromCharCode(j);else{var rt=j-65536;OA+=String.fromCharCode(55296|rt>>10,56320|1023&rt)}}})(a,f)}function UA(l){for(var Q="";;){var f=s[l++>>0];if(!f)return Q;Q+=String.fromCharCode(f)}}function tn(l,Q){return(function(D,N,$){for(var sA=0;sA<D.length;++sA)s[N++>>0]=D.charCodeAt(sA);$||(s[N>>0]=0)})(l,Q,!1)}var mt=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function xe(l,Q,f,D){if(!(D>0))return 0;for(var N=f,$=f+D-1,sA=0;sA<l.length;++sA){var x=l.charCodeAt(sA);if(x>=55296&&x<=57343&&(x=65536+((1023&x)<<10)|1023&l.charCodeAt(++sA)),x<=127){if(f>=$)break;Q[f++]=x}else if(x<=2047){if(f+1>=$)break;Q[f++]=192|x>>6,Q[f++]=128|63&x}else if(x<=65535){if(f+2>=$)break;Q[f++]=224|x>>12,Q[f++]=128|x>>6&63,Q[f++]=128|63&x}else if(x<=2097151){if(f+3>=$)break;Q[f++]=240|x>>18,Q[f++]=128|x>>12&63,Q[f++]=128|x>>6&63,Q[f++]=128|63&x}else if(x<=67108863){if(f+4>=$)break;Q[f++]=248|x>>24,Q[f++]=128|x>>18&63,Q[f++]=128|x>>12&63,Q[f++]=128|x>>6&63,Q[f++]=128|63&x}else{if(f+5>=$)break;Q[f++]=252|x>>30,Q[f++]=128|x>>24&63,Q[f++]=128|x>>18&63,Q[f++]=128|x>>12&63,Q[f++]=128|x>>6&63,Q[f++]=128|63&x}}return Q[f]=0,f-N}function tt(l,Q,f){return xe(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 Ie=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function nt(l){for(var Q=l,f=Q>>1;o[f];)++f;if((Q=f<<1)-l>32&&Ie)return Ie.decode(a.subarray(l,Q));for(var D=0,N="";;){var $=o[l+2*D>>1];if($==0)return N;++D,N+=String.fromCharCode($)}}function nn(l,Q,f){if(f===void 0&&(f=2147483647),f<2)return 0;for(var D=Q,N=(f-=2)<2*l.length?f/2:l.length,$=0;$<N;++$){var sA=l.charCodeAt($);o[Q>>1]=sA,Q+=2}return o[Q>>1]=0,Q-D}function ge(l){return 2*l.length}function St(l){for(var Q=0,f="";;){var D=r[l+4*Q>>2];if(D==0)return f;if(++Q,D>=65536){var N=D-65536;f+=String.fromCharCode(55296|N>>10,56320|1023&N)}else f+=String.fromCharCode(D)}}function pt(l,Q,f){if(f===void 0&&(f=2147483647),f<4)return 0;for(var D=Q,N=D+f-4,$=0;$<l.length;++$){var sA=l.charCodeAt($);if(sA>=55296&&sA<=57343&&(sA=65536+((1023&sA)<<10)|1023&l.charCodeAt(++$)),r[Q>>2]=sA,(Q+=4)+4>N)break}return r[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=wt(Q);return f&&xe(l,s,f,Q),f}function yt(l){var Q=GA(l)+1,f=Ft(Q);return xe(l,s,f,Q),f}function ke(l){return l}function sn(){var l,Q=(function(){var D=Error();if(!D.stack){try{throw Error(0)}catch(N){D=N}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,N=D=f;return f===N?f:f+" ["+N+"]"})}function ce(l,Q){return l%Q>0&&(l+=Q-l%Q),l}function He(l){B.buffer=n=l}function De(){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=c=new Float32Array(n),B.HEAPF64=h=new Float64Array(n)}function st(){var l=B.usingWasm?65536:16777216,Q=2147483648-l;if(r[M>>2]>Q)return!1;var f=yA;for(yA=Math.max(yA,16777216);yA<r[M>>2];)yA=yA<=536870912?ce(2*yA,l):Math.min(ce((3*yA+2147483648)/4,l),Q);var D=B.reallocBuffer(yA);return D&&D.byteLength==yA?(He(D),De(),!0):(yA=f,!1)}C=u=S=p=k=w=M=0,d=!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!!xa(Q)&&Q});try{(H=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get))(new ArrayBuffer(4))}catch{H=function(Q){return Q.byteLength}}var Ye=B.TOTAL_STACK||5242880,yA=B.TOTAL_MEMORY||16777216;function kt(){return yA}function ue(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<Ye&&gA("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+yA+"! (TOTAL_STACK="+Ye+")"),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),De();var at=[],an=[],Bs=[],Cs=[],hs=[],on=!1,ba=!1;function va(l){at.unshift(l)}function Oi(l){an.unshift(l)}function Ki(l){Bs.unshift(l)}function Vi(l){Cs.unshift(l)}function La(l){hs.unshift(l)}function Xi(l,Q,f){var D,N;nA("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!"),f&&(D=s[N=Q+GA(l)]),tt(l,Q,1/0),f&&(s[N]=D)}function Zi(l,Q,f){return l>=0?l:Q<=32?2*Math.abs(1<<Q-1)+l:Math.pow(2,Q)+l}function Wi(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 Na=Math.abs,Ua=Math.ceil,ls=Math.floor,Ta=Math.min,we=0,rn=null,ot=null;function zi(l){return l}B.preloadedImages={},B.preloadedAudios={};var ds="data:application/octet-stream;base64,";function Dt(l){return String.prototype.startsWith?l.startsWith(ds):l.indexOf(ds)===0}(function(){var Q="main.wast",f="main.wasm",D="main.temp.asm";Dt(Q)||(Q=z(Q)),Dt(f)||(f=z(f)),Dt(D)||(D=z(D));var N={global:null,env:null,asm2wasm:oA,parent:B},$=null;function sA(BA){return BA}function x(){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){Ee(BA)}}B.asmPreload=B.asm;var DA=B.reallocBuffer,dA=function(BA){BA=ce(BA,B.usingWasm?65536:16777216);var j=B.buffer.byteLength;if(B.usingWasm)try{var bA=B.wasmMemory.grow((BA-j)/65536);return bA!==-1?B.buffer=B.wasmMemory.buffer:null}catch{return null}};B.reallocBuffer=function(BA){return QA==="asmjs"?DA(BA):dA(BA)};var QA="";B.asm=function(BA,j,bA){var JA;if(!(j=JA=j).table){var PA,qA=B.wasmTableSize;qA===void 0&&(qA=1024);var Fe=B.wasmMaxTableSize;typeof WebAssembly=="object"&&typeof WebAssembly.Table=="function"?Fe!==void 0?j.table=new WebAssembly.Table({initial:qA,maximum:Fe,element:"anyfunc"}):j.table=new WebAssembly.Table({initial:qA,element:"anyfunc"}):j.table=Array(qA),B.wasmTable=j.table}return j.memoryBase||(j.memoryBase=B.STATIC_BASE),j.tableBase||(j.tableBase=0),PA=(function(rt,Je,En){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 Gt(Ae,ee){if(($=Ae.exports).memory){var It,Bn,fs;It=$.memory,Bn=B.buffer,It.byteLength<Bn.byteLength&&gA("the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here"),fs=new Int8Array(Bn),new Int8Array(It).set(fs),He(It),De()}B.asm=$,B.usingWasm=!0,(function(nr){if(we--,B.monitorRunDependencies&&B.monitorRunDependencies(we),we==0&&(rn!==null&&(clearInterval(rn),rn=null),ot)){var Ha=ot;ot=null,Ha()}})("wasm-instantiate")}if(Je.memory=B.wasmMemory,N.global={NaN:NaN,Infinity:1/0},N["global.Math"]=Math,N.env=Je,we++,B.monitorRunDependencies&&B.monitorRunDependencies(we),B.instantiateWasm)try{return B.instantiateWasm(N,Gt)}catch(Ae){return gA("Module.instantiateWasm callback failed with error: "+Ae),!1}function Pe(Ae){Gt(Ae.instance,Ae.module)}function us(Ae){(!B.wasmBinary&&(X||J)&&typeof fetch=="function"?fetch(f,{credentials:"same-origin"}).then(function(ee){if(!ee.ok)throw"failed to load wasm binary file at '"+f+"'";return ee.arrayBuffer()}).catch(function(){return x()}):new Promise(function(ee,It){ee(x())})).then(function(ee){return WebAssembly.instantiate(ee,N)}).then(Ae).catch(function(ee){gA("failed to asynchronously prepare wasm: "+ee),Ee(ee)})}return B.wasmBinary||typeof WebAssembly.instantiateStreaming!="function"||Dt(f)||typeof fetch!="function"?us(Pe):WebAssembly.instantiateStreaming(fetch(f,{credentials:"same-origin"}),N).then(Pe).catch(function(Ae){gA("wasm streaming compile failed: "+Ae),gA("falling back to ArrayBuffer instantiation"),us(Pe)}),{}})(BA,j,bA),NA(PA,"no binaryen method succeeded."),PA},B.asm})(),u=(C=1024)+4816,an.push(),B.STATIC_BASE=C,B.STATIC_BUMP=4816;var TA=u;function _i(l){s[TA]=s[l],s[TA+1]=s[l+1],s[TA+2]=s[l+2],s[TA+3]=s[l+3]}function ji(l){s[TA]=s[l],s[TA+1]=s[l+1],s[TA+2]=s[l+2],s[TA+3]=s[l+3],s[TA+4]=s[l+4],s[TA+5]=s[l+5],s[TA+6]=s[l+6],s[TA+7]=s[l+7]}function $i(l,Q,f){var D=f>0?f:GA(l)+1,N=Array(D),$=xe(l,N,0,N.length);return Q&&(N.length=$),N}function Ar(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("")}u+=16,M=V(4),k=(S=p=v(u))+Ye,w=v(k),r[M>>2]=w,d=!0,B.wasmTableSize=4,B.wasmMaxTableSize=4,B.asmGlobalArg={},B.asmLibraryArg={abort:Ee,assert:NA,enlargeMemory:st,getTotalMemory:kt,abortOnCannotGrowMemory:function(){Ee("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 N=gn();try{return B.dynCall_iii(Q,f,D)}catch($){if(In(N),typeof $!="number"&&$!=="longjmp")throw $;B.setThrew(1,0)}},___assert_fail:function(Q,f,D,N){Ee("Assertion failed: "+Qe(Q)+", at: "+[f?Qe(f):"unknown filename",D,N?Qe(N):"unknown function"])},___setErrNo:function(Q){return B.___errno_location&&(r[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:TA,ABORT:EA,STACKTOP:p,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 xa=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 wt=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 Ft=B.stackAlloc=function(){return B.asm.stackAlloc.apply(null,arguments)},In=B.stackRestore=function(){return B.asm.stackRestore.apply(null,arguments)},gn=B.stackSave=function(){return B.asm.stackSave.apply(null,arguments)};function it(l){this.name="ExitStatus",this.message="Program terminated with exit("+l+")",this.status=l}function cn(l){l=l||B.arguments,!(we>0)&&((function(){if(B.preRun)for(typeof B.preRun=="function"&&(B.preRun=[B.preRun]);B.preRun.length;)va(B.preRun.shift());ue(at)})(),!(we>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||(on||(on=!0,ue(an)),ue(Bs),B.onRuntimeInitialized&&B.onRuntimeInitialized(),(function(){if(B.postRun)for(typeof B.postRun=="function"&&(B.postRun=[B.postRun]);B.postRun.length;)La(B.postRun.shift());ue(hs)})()))}}function er(l,Q){(!Q||!B.noExitRuntime||l!==0)&&(B.noExitRuntime||(EA=!0,$A=l,p=b,ue(Cs),ba=!0,B.onExit&&B.onExit(l)),B.quit(l,new it(l)))}function Ee(l){throw B.onAbort&&B.onAbort(l),l!==void 0?(hA(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=Ue,B.cwrap=function(Q,f,D,N){var $=(D=D||[]).every(function(sA){return sA==="number"});return f!=="string"&&$&&!N?le(Q):function(){return Ue(Q,f,D,arguments,N)}},it.prototype=Error(),it.prototype.constructor=it,ot=function l(){B.calledRun||cn(),B.calledRun||(ot=l)},B.run=cn,B.abort=Ee,B.preInit)for(typeof B.preInit=="function"&&(B.preInit=[B.preInit]);B.preInit.length>0;)B.preInit.pop()();B.noExitRuntime=!0,cn(),B.onRuntimeInitialized=()=>{ks=!0,aa()},Qt.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 N(Je){return new Int32Array(B.HEAPU8.buffer,Je,1)[0]}function $(Je,En){var Gt=new ArrayBuffer(En*Float32Array.BYTES_PER_ELEMENT),Pe=new Float32Array(Gt);return Pe.set(new Float32Array(B.HEAPU8.buffer,Je,En)),Pe}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,x,DA,dA,QA=D.open(),BA=(sA=f,x=f.byteLength,DA=B._malloc(x),(dA=new Uint8Array(B.HEAPU8.buffer,DA,x)).set(new Uint8Array(sA,0,x)),dA),j=B._malloc(4),bA=B._malloc(4),JA=D.decode(QA,BA.byteOffset,BA.byteLength,j,bA);if(B._free(BA.byteOffset),JA<0)throw D.close(QA),B._free(j),Error("stbvorbis decode failed: "+JA);for(var PA=D.channels(QA),qA=Array(PA),Fe=new Int32Array(B.HEAPU32.buffer,N(j),PA),OA=0;OA<PA;OA++)qA[OA]=$(Fe[OA],JA),B._free(Fe[OA]);var rt=D.sampleRate(QA);return D.close(QA),B._free(N(j)),B._free(j),{data:qA,sampleRate:rt,eof:!0,error:null}})(l)}})();var Kt=Qt,as=-15e3,wo=15e3,vn=new Float32Array(wo-as+1);for(let e=0;e<vn.length;e++){let A=as+e;vn[e]=Math.pow(2,A/1200)}function me(e){return e<=-32767?0:vn[e-as]}var Jt=-2e4,oa=16500,Ln=new Float32Array(oa-Jt+1);for(let e=0;e<Ln.length;e++){let A=Jt+e;Ln[e]=440*Math.pow(2,(A-6900)/1200)}function Nn(e){return e<Jt||e>oa?440*Math.pow(2,(e-6900)/1200):Ln[~~e-Jt]}var os=-1660,Fo=1600,Un=new Float32Array((Fo-os)*100+1);for(let e=0;e<Un.length;e++){let A=(os*100+e)/100;Un[e]=Math.pow(10,-A/20)}function te(e){return Un[Math.floor((e-os)*100)]}var Go=.01,xA=100,dn=90,Ro=15e-6,be=class ia{sampleRate;currentAttenuationDb=xA;state=0;attenuation=0;attenuationTargetGain=0;currentSampleTime=0;releaseStartDb=xA;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>=dn}static startRelease(A){A.volumeEnvelope.releaseStartTimeSamples=A.volumeEnvelope.currentSampleTime,A.volumeEnvelope.currentReleaseGain=te(A.volumeEnvelope.currentAttenuationDb),ia.recalculate(A)}static recalculate(A){let t=A.volumeEnvelope,n=g=>Math.max(0,Math.floor(me(g)*t.sampleRate));t.attenuationTarget=Math.max(0,Math.min(A.modulatedGenerators[i.initialAttenuation],1440))/10,t.attenuationTargetGain=te(t.attenuationTarget),t.sustainDbRelative=Math.min(xA,A.modulatedGenerators[i.sustainVolEnv]/10);let s=Math.min(xA,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/xA;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(xA,t.sustainDbRelative)),c=g/xA;switch(t.decayDuration=n(a+o)*c,t.state){case 0:t.releaseStartDb=xA;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,xA)),t.releaseStartDb>=dn&&(A.finished=!0),t.currentReleaseGain=te(t.releaseStartDb);let h=(xA-t.releaseStartDb)/xA;t.releaseDuration*=h}}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 h=0;h<t.length;h++)t[h]=0;A.finished=!0;return}let c=xA-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*te(C+o),t[h]*=a.currentReleaseGain,a.currentSampleTime++,g++}a.currentReleaseGain<=Ro&&(A.finished=!0);return}let r=0;switch(a.state){case 0:for(;a.currentSampleTime<a.delayEnd;)if(a.currentAttenuationDb=xA,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*te(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*te(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*te(a.currentAttenuationDb+o),a.currentSampleTime++,++r>=t.length)return;a.state++;case 4:for(a.canEndOnSilentSustain&&a.sustainDbRelative>=dn&&(A.finished=!0);;)if(a.attenuation+=(a.attenuationTargetGain-a.attenuation)*I,t[r]*=a.attenuation*te(a.sustainDbRelative+o),a.currentAttenuationDb=a.sustainDbRelative,a.currentSampleTime++,++r>=t.length)return}}};function Mo(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 bo(e){return this.privateProps.masterParameters[e]}function vo(){return{...this.privateProps.masterParameters}}function Me(e,A){return(e>>A&1)>0}function Qn(e){return e?1:0}var vA=16384,Pt=Object.keys(CA).length,ra=4,Be=new Float32Array(vA+1),ve=new Float32Array(vA+1);Be[0]=0;Be[Be.length-1]=1;ve[0]=0;ve[ve.length-1]=1;for(let e=1;e<vA-1;e++){let A=-.4166666666666667*Math.log(e/(Be.length-1))/Math.LN10;ve[e]=1-A,Be[Be.length-1-e]=A}function Ia(e,A,t){let n=!!(e&2);switch(e&1&&(t=1-t),A){case CA.linear:return n?t*2-1:t;case CA.switch:return t=t>.5?1:0,n?t*2-1:t;case CA.concave:return n?(t=t*2-1,t<0?-Be[~~(t*-vA)]:Be[~~(t*vA)]):Be[~~(t*vA)];case CA.convex:return n?(t=t*2-1,t<0?-ve[~~(t*-vA)]:ve[~~(t*vA)]):ve[~~(t*vA)]}}var WA=class Tn{isBipolar;isNegative;index;isCC;curveType;constructor(A=AA.noController,t=CA.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(m).find(A=>m[A]===this.index)??this.index.toString():Object.keys(AA).find(A=>AA[A]===this.index)??this.index.toString()}get curveTypeName(){return Object.keys(CA).find(A=>CA[A]===this.curveType)??this.curveType.toString()}static fromSourceEnum(A){let t=Me(A,9),n=Me(A,8),s=Me(A,7),a=A&127,o=A>>10&3;return new Tn(a,o,s,t,n)}static copyFrom(A){return new Tn(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|Qn(this.isBipolar)<<9|Qn(this.isNegative)<<8|Qn(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 ga[vA*(this.curveType*Pt+s)+n]}},ga=new Float32Array(vA*ra*Pt);for(let e=0;e<Pt;e++)for(let A=0;A<ra;A++){let t=vA*(e*Pt+A);for(let n=0;n<vA;n++)ga[t+n]=Ia(A,e,n/vA)}var ht=10;function KA(e,A,t,n,s){return new WA(s,e,n,A,t).toSourceEnum()}var ca=KA(CA.linear,!0,!1,!0,m.filterResonance),cA=class xn{currentValue=0;destination=i.initialAttenuation;transformAmount=0;transformType=0;isEffectModulator=!1;isDefaultResonantModulator=!1;primarySource;secondarySource;constructor(A=new WA,t=new WA,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 xn(WA.copyFrom(A.primarySource),WA.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=Un.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),i=e===Ia&&A===0&&t===I.initialFilterQ;super(XA.fromSourceEnum(e),XA.fromSourceEnum(A),t,n,s,a,i),this.destination>li&&(this.destination=I.INVALID)}},dn=960,Qn=QA.concave,Mi=[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,S.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,S.expressionController),0,I.initialAttenuation,dn,0),new mA(219,0,I.reverbEffectsSend,200,0),new mA(221,0,I.chorusEffectsSend,200,0)],bi=[new mA(ge(QA.linear,!1,!1,!1,AA.polyPressure),0,I.vibLfoToPitch,50,0),new mA(ge(QA.linear,!1,!1,!0,S.tremoloDepth),0,I.modLfoToVolume,24,0),new mA(ge(QA.convex,!0,!1,!0,S.attackTime),0,I.attackVolEnv,6e3,0),new mA(ge(QA.linear,!0,!1,!0,S.releaseTime),0,I.releaseVolEnv,3600,0),new mA(ge(QA.linear,!0,!1,!0,S.brightness),0,I.initialFilterFc,6e3,0),new mA(Ia,0,I.initialFilterQ,250,0)],ga=Mi.concat(bi),ks=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=U[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 vi(e,A,t){let n=U[e]||{min:0,max:32768,def:0},s=A.find(r=>r.generatorType===e),a=0;s&&(a=s.generatorValue);let i=t.find(r=>r.generatorType===e),o=n.def;return i&&(o=i.generatorValue),Math.max(-32767,Math.min(32767,o+a))}var Li=4,qt=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,U[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 qt{},Ea=class extends qt{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 qt{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}},Ni=22,Ui=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){tA(`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(Ui.has(n))continue;n=n;let s={},a=U[n]?.def||0;s[a]=0;for(let i of this.zones){let o=i.getGenerator(n,void 0);o!==void 0?s[o]===void 0?s[o]=1:s[o]++: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(i.getGenerator(r,void 0)!==void 0){s={};break}}if(Object.keys(s).length>0){let o=Object.entries(s).reduce((g,c)=>g[1]<c[1]?c:g,["0",0]),r=parseInt(o[0]);r!==a&&e.setGenerator(n,r,!1),this.zones.forEach(g=>{let c=g.getGenerator(n,void 0);c!==void 0?c===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(o=>cA.isIdentical(o,n))||(s=!1)}if(s){e.addModulators(cA.copyFrom(n));for(let a of this.zones){let i=a.modulators.find(o=>cA.isIdentical(o,n));i&&i.transformAmount===n.transformAmount&&a.modulators.splice(a.modulators.indexOf(i),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)}},Ti=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)}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(Q=>!h.find(d=>d.generatorType===Q.generatorType)))}function s(h,C){h.push(...C.filter(Q=>!h.find(d=>cA.isIdentical(Q,d))))}let a=[],i=[...this.globalZone.generators],o=[...this.globalZone.modulators],r=this.globalZone.keyRange,g=this.globalZone.velRange;return this.zones.filter(h=>t(h.hasKeyRange?h.keyRange:r,e)&&t(h.hasVelRange?h.velRange:g,A)).forEach(h=>{let C=h.instrument;if(!C||C.zones.length<1)return;let Q=h.generators,d=h.modulators,p=[...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 T=[...P.generators],B=[...P.modulators];n(Q,i),n(T,p),s(d,o),s(B,m),s(B,this.parentSoundBank.defaultModulators);let j=[...B];for(let J of d){let H=j.findIndex(Y=>cA.isIdentical(J,Y));H!==-1?j[H]=j[H].sumTransform(J):j.push(J)}P.sample&&a.push({instrumentGenerators:T,presetGenerators:Q,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=[],i=this.globalZone;s.push(...i.generators),a.push(...i.modulators);let o=i.keyRange,r=i.velRange;for(let g of this.zones){if(!g.instrument)throw new Error("No instrument in a preset zone.");let c=g.keyRange;g.hasKeyRange||(c=o);let h=g.velRange;g.hasVelRange||(h=r);let C=g.generators.map(T=>new FA(T.generatorType,T.generatorValue));e(C,s);let Q=[...g.modulators];t(Q,a);let d=g.instrument,p=d.zones,m=[],k=[],w=d.globalZone;m.push(...w.generators),k.push(...w.modulators);let M=w.keyRange,P=w.velRange;for(let T of p){if(!T.sample)throw new Error("No sample in an instrument zone.");let B=T.keyRange;T.hasKeyRange||(B=M);let j=T.velRange;if(T.hasVelRange||(j=P),B=A(B,c),j=A(j,h),B.max<B.min||j.max<j.min)continue;let J=T.generators.map(Z=>new FA(Z.generatorType,Z.generatorValue));e(J,m);let H=[...T.modulators];t(H,k);let Y=[...H];for(let Z of Q){let CA=Y.findIndex(gA=>cA.isIdentical(Z,gA));CA!==-1?Y[CA]=Y[CA].sumTransform(Z):Y.push(Z)}let q=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=q[CA].generatorValue+Z.generatorValue;q[CA]=new FA(Z.generatorType,gA)}else{let gA=U[Z.generatorType].def+Z.generatorValue;q.push(new FA(Z.generatorType,gA))}}q=q.filter(Z=>Z.generatorType!==I.sampleID&&Z.generatorType!==I.keyRange&&Z.generatorType!==I.velRange&&Z.generatorType!==I.endOper&&Z.generatorType!==I.instrument&&Z.generatorValue!==U[Z.generatorType].def);let O=n.createZone(T.sample);O.keyRange=B,O.velRange=j,O.keyRange.min===0&&O.keyRange.max===127&&(O.keyRange.min=-1),O.velRange.min===0&&O.velRange.max===127&&(O.velRange.min=-1),O.addGenerators(...q),O.addModulators(...Y)}}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),rA(e.pdta,this.library),rA(e.pdta,this.genre),rA(e.pdta,this.morphology),e.xdta.currentIndex+=12}};function Ds(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:i}=A,o=fA.isSystemXG(t),r=fA.isXGDrums(a)&&o,g=e.find(C=>C.matches(A));if(g&&(!r||r&&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(Q=>Q.isGMGSDrum&&Q.program===i);return C||(C=e.find(Q=>Q.isAnyDrums&&Q.program===i),C)?(c(C),C):(C=Ds(e,!1),c(C),C)}if(r){let C=e.find(Q=>Q.program===i&&Q.isXGDrums);return C||(C=e.find(Q=>Q.isAnyDrums&&Q.program===i),C)?(c(C),C):(C=Ds(e,!0),c(C),C)}let h=e.filter(C=>C.program===i&&!C.isAnyDrums);if(h.length<1)return c(e[0]),e[0];if(o?g=h.find(C=>C.bankLSB===s):g=h.find(C=>C.bankMSB===a),g)return c(g),g;if(s!==64||!o){let C=Math.max(a,s);if(g=h.find(Q=>Q.bankLSB===C||Q.bankMSB===C),g)return c(g),g}return c(h[0]),h[0]}var xi=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}},Hi=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){tA("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 i=new xi(a,s);A.has(i.toMIDIString())||(A.add(i.toMIDIString()),e.push(i))})}),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()}},Yi=.05,Pi=3070,Ji=2e3,ws=Math.PI/2,Lt=-500,ha=500,is=ha-Lt,la=new Float32Array(is+1),da=new Float32Array(is+1);for(let e=Lt;e<=ha;e++){let A=(e-Lt)/is,t=e-Lt;la[t]=Math.cos(ws*A),da[t]=Math.sin(ws*A)}function Oi(e,A,t,n,s,a,i,o,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 c=this.synthProps.masterParameters.masterGain*this.synthProps.midiVolume*e.gain,h=~~(g+500),C=la[h]*c*this.synthProps.panLeft,Q=da[h]*c*this.synthProps.panRight;if(this.synth.enableEffects){let d=e.modulatedGenerators[I.reverbEffectsSend];if(d>0){let m=this.synthProps.masterParameters.reverbGain*this.synthProps.reverbSend*c*(d/Pi);for(let k=0;k<A.length;k++){let w=k+r;s[w]+=m*A[k],a[w]+=m*A[k]}}let p=e.modulatedGenerators[I.chorusEffectsSend];if(p>0){let m=this.synthProps.masterParameters.chorusGain*this.synthProps.chorusSend*(p/Ji),k=C*m,w=Q*m;for(let M=0;M<A.length;M++){let P=M+r;i[P]+=k*A[M],o[P]+=w*A[M]}}}if(C>0)for(let d=0;d<A.length;d++)t[d+r]+=C*A[d];if(Q>0)for(let d=0;d<A.length;d++)n[d+r]+=Q*A[d]}var qi=.1,Kt=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],i=A.filter;i.initialized?i.currentInitialFc+=(a-i.currentInitialFc)*s:(i.initialized=!0,i.currentInitialFc=a);let o=i.currentInitialFc+n,r=A.modulatedGenerators[I.initialFilterQ];if(i.currentInitialFc>13499&&o>13499&&r===0){i.currentInitialFc=13500;return}(Math.abs(i.lastTargetCutoff-o)>1||i.resonanceCb!==r)&&(i.lastTargetCutoff=o,i.resonanceCb=r,Et.calculateCoefficients(i,o));for(let g=0;g<t.length;g++){let c=t[g],h=i.a0*c+i.a1*i.x1+i.a2*i.x2-i.a3*i.y1-i.a4*i.y2;i.x2=i.x1,i.x1=c,i.y2=i.y1,i.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=vn(t);a=Math.min(a,A.maxCutoff);let i=n/10,o=Ae(-(i-3.01)),r=1/Math.sqrt(Ae(-i)),g=2*Math.PI*a/A.sampleRate,c=Math.cos(g),h=Math.sin(g)/(2*o),C=(1-c)*r,Q=C/2,d=Q,p=1+h,m=-2*c,k=1-h,w={a0:Q/p,a1:C/p,a2:d/p,a3:m/p,a4:k/p};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}},Tn=new Kt(44100);Tn.resonanceCb=0;for(let e=1500;e<13500;e++)Tn.currentInitialFc=e,Kt.calculateCoefficients(Tn,e);var Fs={enableEventSystem:!0,initialTime:0,enableEffects:!0};function Ki(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 Vi(e){let A=[];for(let n of this.midiChannels)for(let s of n.voices)if(!s.finished){let a=Ki(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,xn=new Float32Array(1e3);for(let e=0;e<xn.length;e++)xn[e]=oa(0,QA.convex,e/1e3);var ze=class Hn{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){Hn.recalculate(A)}static recalculate(A){let t=A.modulationEnvelope;A.isInRelease&&(t.releaseStartLevel=Hn.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 i=Qe(Math.max(A.modulatedGenerators[I.releaseModEnv],-7200));t.releaseDuration=i*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=xn[~~((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,i,o){this.sampleData=e,this.playbackStep=A,this.cursor=t,this.rootKey=n,this.loopStart=s,this.loopEnd=a,this.end=i,this.loopingMode=o,this.isLooping=this.loopingMode===1||this.loopingMode===3}},Xi=-2320,Zi=-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,i,o,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 Kt(A),this.velocity=s,this.midiNote=n,this.startTime=a,this.targetKey=i,this.realKey=o,this.volumeEnvelope=new Ge(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]=Xi,this.modulatedGenerators[I.releaseModEnv]=Zi,Ge.recalculate(this),ze.recalculate(this)}release(A,t=Ka){this.releaseStartTime=A,this.releaseStartTime-this.startTime<t&&(this.releaseStartTime=this.startTime+t)}};function Wi(e,A,t,n){let s=this.getCachedVoice(e,A,t);if(s!==void 0)return s.map(i=>fn.copyFrom(i,this.currentSynthTime,n));let a=e.getSynthesisData(A,t).reduce((i,o)=>{if(o.sample.getAudioData()===void 0)return tA(`Discarding invalid sample: ${o.sample.name}`),i;let r=new Int16Array(Gn);for(let k=0;k<60;k++)r[k]=vi(k,o.presetGenerators,o.instrumentGenerators);r[I.initialAttenuation]=Math.floor(r[I.initialAttenuation]*.4);let g=o.sample.originalKey;r[I.overridingRootKey]>-1&&(g=r[I.overridingRootKey]);let c=A;r[I.keyNum]>-1&&(c=r[I.keyNum]);let h=o.sample.loopStart,C=o.sample.loopEnd,Q=r[I.sampleModes],d=o.sample.getAudioData(),p=new Qa(d,o.sample.sampleRate/this.sampleRate*Math.pow(2,o.sample.pitchCorrection/1200),0,g,h,C,Math.floor(d.length)-1,Q),m=t;return r[I.velocity]>-1&&(m=r[I.velocity]),i.push(new fn(this.sampleRate,p,A,m,this.currentSynthTime,c,n,r,o.modulators.map(cA.copyFrom.bind(cA)))),i},[]);return this.setCachedVoice(e,A,t,a),a.map(i=>fn.copyFrom(i,this.currentSynthTime,n))}function zi(e,A,t,n){let s=this.midiChannels[e],a=this.keyModifierManager.hasOverridePatch(e,A),i=s.preset;if(!i)return tA(`No preset for channel ${e}!`),[];if(a){let o=this.keyModifierManager.getPatch(e,A);i=this.soundBankManager.getPreset(o,this.privateProps.masterParameters.midiSystem)}return this.getVoicesForPreset(i,A,t,n)}function Gs(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 _i(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,i,o,r){y(`%cChannel %c${a}%c ${o}. %c${i} ${r}%c, with %c${RA(e)}`,E.info,E.recognized,E.info,E.value,E.info,E.value)}switch(t){default:y(`%cUnrecognized SysEx: %c${RA(e)}`,E.warn,E.unrecognized);break;case 126:case 127:switch(e[2]){case 4:{let a;switch(e[3]){case 1:{let i=e[5]<<7|e[4];this.setMIDIVolume(i/16384),y(`%cMaster Volume. Volume: %c${i}`,E.info,E.value);break}case 2:{let o=((e[5]<<7|e[4])-8192)/8192;this.setMasterParameter("masterPan",o),y(`%cMaster Pan. Pan: %c${o}`,E.info,E.value);break}case 3:{let i=(e[5]<<7|e[6])-8192;a=Math.floor(i/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${RA(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 i=e[a++],o=ee(e,16,a);if(a+=16,e.length<384){tA(`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[i][r]=Gs(e[a++],e[a++],e[a++]);y(`%cBulk Tuning Dump %c${o}%c Program: %c${i}`,E.info,E.value,E.info,E.recognized);break}case 2:case 7:{e[3]===7&&a++;let i=e[a++],o=e[a++];for(let r=0;r<o;r++)this.privateProps.tunings[i][e[a++]]=Gs(e[a++],e[a++],e[a++]);y(`%cSingle Note Tuning. Program: %c${i}%c Keys affected: %c${o}`,E.info,E.recognized,E.info,E.recognized);break}case 9:case 8:{let i=new Int8Array(12);if(e[3]===8)for(let o=0;o<12;o++)i[o]=e[7+o]-64;else for(let o=0;o<24;o+=2){let r=(e[7+o]<<7|e[8+o])-8192;i[o/2]=Math.floor(r/81.92)}(e[4]&1)===1&&this.midiChannels[14+A].setOctaveTuning(i),(e[4]>>1&1)===1&&this.midiChannels[15+A].setOctaveTuning(i);for(let o=0;o<7;o++)(e[5]>>o&1)===1&&this.midiChannels[7+o+A].setOctaveTuning(i);for(let o=0;o<7;o++)(e[6]>>o&1)===1&&this.midiChannels[o+A].setOctaveTuning(i);y(`%cMIDI Octave Scale ${e[3]===8?"(1 byte)":"(2 bytes)"} tuning via Tuning: %c${i.join(" ")}`,E.info,E.value);break}default:y(`%cUnrecognized MIDI Tuning standard message: %c${RA(e)}`,E.warn,E.unrecognized);break}break}default:y(`%cUnrecognized MIDI Realtime/non realtime message: %c${RA(e)}`,E.warn,E.unrecognized)}break;case 65:if(e[3]===18){let a=function(){y(`%cUnrecognized Roland %cGS %cSysEx: %c${RA(e)}`,E.warn,E.recognized,E.warn,E.unrecognized)};var s=a;switch(e[2]){case 66:{let i=e[7];if(e[4]===64||e[4]===0&&e[6]===127){if((e[5]&16)>0){let o=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][e[5]&15]+A,r=this.midiChannels[o];switch(e[6]){default:a();break;case 21:{let g=i>0&&e[5]>>4>0;r.setGSDrums(g),y(`%cChannel %c${o}%c ${g?"is now a drum channel":"now isn't a drum channel"}%c via: %c${RA(e)}`,E.info,E.value,E.recognized,E.info,E.value);return}case 22:{let g=i-64;r.setCustomController(oA.channelKeyShift,g),n(o,g,"key shift","keys");return}case 28:{let g=i;g===0?(r.randomPan=!0,y(`%cRandom pan is set to %cON%c for %c${o}`,E.info,E.recognized,E.info,E.value)):(r.randomPan=!1,r.controllerChange(S.pan,g));break}case 33:r.controllerChange(S.chorusDepth,i);break;case 34:r.controllerChange(S.reverbDepth,i);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;r.setOctaveTuning(c);let h=i-64;n(o,c.join(" "),"octave scale tuning","cents"),r.setTuning(h);break}}return}else if((e[5]&32)>0){let o=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][e[5]&15]+A,r=this.midiChannels[o],g=i-64,c=g/64,h=i/128,C=(Q,d,p=!1)=>{switch(e[6]&15){case 0:Q===SA+AA.pitchWheel?(r.controllerChange(S.registeredParameterMSB,0),r.controllerChange(S.registeredParameterLSB,0),r.controllerChange(S.dataEntryMSB,Math.floor(g))):(r.sysExModulators.setModulator(Q,I.fineTune,g*100,p),n(o,g,`${d} pitch control`,"semitones"));break;case 1:r.sysExModulators.setModulator(Q,I.initialFilterFc,c*9600,p),n(o,c*9600,`${d} pitch control`,"cents");break;case 2:r.sysExModulators.setModulator(Q,I.initialAttenuation,c*960,p),n(o,c*960,`${d} amplitude`,"cB");break;case 4:r.sysExModulators.setModulator(Q,I.vibLfoToPitch,h*600,p),n(o,h*600,`${d} LFO1 pitch depth`,"cents");break;case 5:r.sysExModulators.setModulator(Q,I.vibLfoToFilterFc,h*2400,p),n(o,h*2400,`${d} LFO1 filter depth`,"cents");break;case 6:r.sysExModulators.setModulator(Q,I.vibLfoToVolume,c*960,p),n(o,c*960,`${d} LFO1 amplitude depth`,"cB");break;case 8:r.sysExModulators.setModulator(Q,I.modLfoToPitch,h*600,p),n(o,h*600,`${d} LFO2 pitch depth`,"cents");break;case 9:r.sysExModulators.setModulator(Q,I.modLfoToFilterFc,h*2400,p),n(o,h*2400,`${d} LFO2 filter depth`,"cents");break;case 10:r.sysExModulators.setModulator(Q,I.modLfoToVolume,c*960,p),n(o,c*960,`${d} LFO2 amplitude depth`,"cB");break}};switch(e[6]&240){default:a();break;case 0:C(S.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:i===0?(y("%cGS Reset received!",E.info),this.resetAllControllers(!1),this.setMasterParameter("midiSystem","gs")):i===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${i}%c with: %c${RA(e)}`,E.info,E.value,E.info,E.value),this.setMasterParameter("masterPan",(i-64)/64);break;case 4:y(`%cRoland GS Master Volume set to: %c${i}%c with: %c${RA(e)}`,E.info,E.value,E.info,E.value),this.setMIDIVolume(i/127);break;case 5:{let o=i-64;y(`%cRoland GS Master Key-Shift set to: %c${o}%c with: %c${RA(e)}`,E.info,E.value,E.info,E.value),this.setMasterTuning(o*100);break}}return}else if(e[5]===1)switch(e[6]){default:a();break;case 0:{let o=ee(e,16,7);y(`%cGS Patch name: %c${o}`,E.info,E.value);break}case 51:y(`%cGS Reverb level: %c${i}`,E.info,E.value),this.privateProps.reverbSend=i/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${i}`,E.info,E.value),this.privateProps.chorusSend=i/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${RA(e)}`,E.info,E.value,E.info,E.value);return}}}else{y(`%cUnrecognized Roland SysEx: %c${RA(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 i=this.midiChannels[a],o=e[6];switch(e[5]){case 1:i.controllerChange(S.bankSelect,o);break;case 2:i.controllerChange(S.bankSelectLSB,o);break;case 3:i.programChange(o);break;case 8:{if(i.drumChannel)return;i.channelTransposeKeyShift=o-64;break}case 11:i.controllerChange(S.mainVolume,o);break;case 14:{let r=o;r===0?(i.randomPan=!0,y(`%cRandom pan is set to %cON%c for %c${a}`,E.info,E.recognized,E.info,E.value)):i.controllerChange(S.pan,r);break}case 19:i.controllerChange(S.reverbDepth,o);break;case 18:i.controllerChange(S.chorusDepth,o);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${RA(e)}`,E.warn,E.unrecognized);else fA.isSystemXG(this.privateProps.masterParameters.midiSystem)&&y(`%cUnrecognized Yamaha SysEx: %c${RA(e)}`,E.warn,E.unrecognized);break}}var Rs=class Yn{patch;lockPreset;lockedSystem;midiControllers;lockedControllers;customControllers;lockVibrato;channelVibrato;channelTransposeKeyShift;channelOctaveTuning;isMuted;drumChannel;channelNumber;constructor(A,t,n,s,a,i,o,r,g,c,h,C,Q){this.patch=A,this.lockPreset=t,this.lockedSystem=n,this.midiControllers=s,this.lockedControllers=a,this.customControllers=i,this.lockVibrato=o,this.channelVibrato=r,this.channelTransposeKeyShift=g,this.channelOctaveTuning=c,this.isMuted=h,this.drumChannel=C,this.channelNumber=Q}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 ji=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)=>Rs.create(A,s));return new Pn(t,A.getAllMasterParameters(),A.keyModifierManager.getMappings())}static copyFrom(A){return new Pn(A.channelSnapshots.map(t=>Rs.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)})}},$i={masterGain:Xa,masterPan:0,voiceCap:Oa,interpolationType:bt.hermite,midiSystem:Vs,monophonicRetriggerMode:!1,reverbGain:1,chorusGain:1,blackMIDIMode:!1,transposition:0,deviceID:Be},Ao=class{tunings=[];masterParameters=$i;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 i=0;i<128;i++)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 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,i=s.sampleData;if(s.isLooping){let o=s.loopEnd-s.loopStart;for(let r=0;r<t.length;r++){for(;a>=s.loopEnd;)a-=o;let g=~~a,c=g+1;for(;c>=s.loopEnd;)c-=o;let h=a-g,C=i[c],Q=i[g];t[r]=Q+(C-Q)*h,a+=n}}else for(let o=0;o<t.length;o++){let r=~~a,g=r+1;if(g>=s.end){A.finished=!0;return}let c=a-r,h=i[g],C=i[r];t[o]=C+(h-C)*c,a+=n}A.sample.cursor=a}static getSampleNearest(A,t,n){let s=A.sample,a=s.cursor,i=s.sampleData;if(s.isLooping){let o=s.loopEnd-s.loopStart;for(let r=0;r<t.length;r++){for(;a>=s.loopEnd;)a-=o;let g=~~a+1;for(;g>=s.loopEnd;)g-=o;t[r]=i[g],a+=n}}else for(let o=0;o<t.length;o++){let r=~~a+1;if(r>=s.end){A.finished=!0;return}t[o]=i[r],a+=n}s.cursor=a}static getSampleHermite(A,t,n){let s=A.sample,a=s.cursor,i=s.sampleData;if(s.isLooping){let o=s.loopEnd-s.loopStart;for(let r=0;r<t.length;r++){for(;a>=s.loopEnd;)a-=o;let g=~~a,c=g+1,h=g+2,C=g+3,Q=a-g;c>=s.loopEnd&&(c-=o),h>=s.loopEnd&&(h-=o),C>=s.loopEnd&&(C-=o);let d=i[g],p=i[c],m=i[h],k=i[C],w=(m-d)*.5,M=p-m,P=w+M,T=P+M+(k-p)*.5,B=P+T;t[r]=((T*Q-B)*Q+w)*Q+p,a+=n}}else for(let o=0;o<t.length;o++){let r=~~a,g=r+1,c=r+2,h=r+3,C=a-r;if(g>=s.end||c>=s.end||h>=s.end){A.finished=!0;return}let Q=i[r],d=i[g],p=i[c],m=i[h],k=(p-Q)*.5,w=d-p,M=k+w,P=M+w+(m-d)*.5,T=M+P;t[o]=((P*C-T)*C+k)*C+d,a+=n}A.sample.cursor=a}};function to(e,A,t,n,s,a,i,o,r,g){if(e.isInRelease||A>=e.releaseStartTime&&(e.isInRelease=!0,Ge.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],Q=this.synthProps.tunings[this.preset?.program??0]?.[e.realKey];if(Q?.centTuning&&(c=Q.midiNote,h+=Q.centTuning),e.portamentoFromKey>-1){let Y=Math.min((A-e.startTime)/e.portamentoDuration,1),q=c-e.portamentoFromKey;C-=q*(1-Y)}h+=(c-e.sample.rootKey)*e.modulatedGenerators[I.scaleTuning];let d=0,p=0,m=e.modulatedGenerators[I.vibLfoToPitch],k=e.modulatedGenerators[I.vibLfoToVolume],w=e.modulatedGenerators[I.vibLfoToFilterFc];if(m!==0||k!==0||w!==0){let Y=e.startTime+Qe(e.modulatedGenerators[I.delayVibLFO]),q=vn(e.modulatedGenerators[I.freqVibLFO]),O=mn(Y,q,A);h+=O*(m*this.customControllers[oA.modulationMultiplier]),p+=-O*k,d+=O*w}let M=e.modulatedGenerators[I.modLfoToPitch],P=e.modulatedGenerators[I.modLfoToVolume],T=e.modulatedGenerators[I.modLfoToFilterFc];if(M!==0||T!==0||P!==0){let Y=e.startTime+Qe(e.modulatedGenerators[I.delayModLFO]),q=vn(e.modulatedGenerators[I.freqModLFO]),O=mn(Y,q,A);h+=O*(M*this.customControllers[oA.modulationMultiplier]),p+=-O*P,d+=O*T}this.midiControllers[S.modulationWheel]==0&&this.channelVibrato.depth>0&&(h+=mn(e.startTime+this.channelVibrato.delay,this.channelVibrato.rate,A)*this.channelVibrato.depth);let B=e.modulatedGenerators[I.modEnvToPitch],j=e.modulatedGenerators[I.modEnvToFilterFc];if(j!==0||B!==0){let Y=ze.getValue(e,A);d+=Y*j,h+=Y*B}p-=e.resonanceOffset;let J=~~(h+C*100);J!==e.currentTuningCents&&(e.currentTuningCents=J,e.currentTuningCalculated=Math.pow(2,J/1200));let H=new Float32Array(g);return e.sample.loopingMode===2&&!e.isInRelease?(Ge.apply(e,H,p,this.synthProps.volumeEnvelopeSmoothingFactor),e.finished):(eo.getSample(e,H,this.synthProps.masterParameters.interpolationType),Kt.apply(e,H,d,this.synthProps.filterSmoothingFactor),Ge.apply(e,H,p,this.synthProps.volumeEnvelopeSmoothingFactor),this.panAndMixVoice(e,H,t,n,s,a,i,o,r),e.finished)}var ue={pitchWheelRange:0,fineTuning:1,coarseTuning:2,modulationDepth:5,resetParameters:16383},Ve={partParameter:1,awe32:127,SF2:120},Oe={vibratoRate:8,vibratoDepth:9,vibratoDelay:10,TVFFilterCutoff:32,TVFFilterResonance:33,EGAttackTime:99,EGReleaseTime:102};function no(e){this.midiControllers[S.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[S.nonRegisteredParameterMSB]>>7,s=this.midiControllers[S.nonRegisteredParameterLSB]>>7,a=this.midiControllers[S.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 Oe.vibratoRate:if(e===64)return;A(),this.channelVibrato.rate=e/64*8,t("Vibrato rate",`${e} = ${this.channelVibrato.rate}`,"Hz");break;case Oe.vibratoDepth:if(e===64)return;A(),this.channelVibrato.depth=e/2,t("Vibrato depth",`${e} = ${this.channelVibrato.depth}`,"cents of detune");break;case Oe.vibratoDelay:if(e===64)return;A(),this.channelVibrato.delay=e/64/3,t("Vibrato delay",`${e} = ${this.channelVibrato.delay}`,"seconds");break;case Oe.TVFFilterCutoff:this.controllerChange(S.brightness,e),t("Filter cutoff",e.toString(),"");break;case Oe.EGAttackTime:this.controllerChange(S.attackTime,e),t("EG attack time",e.toString(),"");break;case Oe.EGReleaseTime:this.controllerChange(S.releaseTime,e),t("EG release time",e.toString(),"");break}break;case Ve.awe32:break;case Ve.SF2:{if(s>100)break;let i=this.customControllers[oA.sf2NPRNGeneratorLSB],o=(e<<7|a)-8192;this.setGeneratorOffset(i,o);break}}break}case YA.RPCoarse:case YA.RPFine:{let n=this.midiControllers[S.registeredParameterMSB]|this.midiControllers[S.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(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=(C,Q,d)=>Math.max(Q,Math.min(d,C)),s=C=>Math.max(-32768,1200*Math.log2(C/1e3)),a=C=>6900+1200*Math.log2(C/440),i=t<<7|A;i-=8192;let o=so[e];o||tA(`Invalid AWE32 LSB: %c${e}`,E.unrecognized);let r,g,c,h;switch(o){default:break;case I.delayModLFO:case I.delayVibLFO:case I.delayVolEnv:case I.delayModEnv:r=4*n(i,0,5900),this.setGeneratorOverride(o,s(r));break;case I.attackVolEnv:case I.attackModEnv:r=n(i,0,5940),this.setGeneratorOverride(o,s(r));break;case I.holdVolEnv:case I.holdModEnv:r=n(i,0,8191),this.setGeneratorOverride(o,s(r));break;case I.decayModEnv:case I.decayVolEnv:case I.releaseVolEnv:case I.releaseModEnv:r=4*n(i,0,5940),this.setGeneratorOverride(o,s(r));break;case I.freqVibLFO:case I.freqModLFO:g=.084*A,this.setGeneratorOverride(o,a(g),!0);break;case I.sustainVolEnv:case I.sustainModEnv:c=A*7.5,this.setGeneratorOverride(o,c);break;case I.fineTune:this.setGeneratorOverride(o,i,!0);break;case I.modLfoToPitch:case I.vibLfoToPitch:h=n(i,-127,127)*9.375,this.setGeneratorOverride(o,h,!0);break;case I.modEnvToPitch:h=n(i,-127,127)*9.375,this.setGeneratorOverride(o,h);break;case I.modLfoToVolume:c=1.875*A,this.setGeneratorOverride(o,c,!0);break;case I.initialFilterFc:{let C=4335+59*A;this.setGeneratorOverride(o,C,!0);break}case I.initialFilterQ:c=215*(A/127),this.setGeneratorOverride(o,c,!0);break;case I.modLfoToFilterFc:h=n(i,-64,63)*56.25,this.setGeneratorOverride(o,h,!0);break;case I.modEnvToFilterFc:h=n(i,-64,63)*56.25,this.setGeneratorOverride(o,h);break;case I.chorusEffectsSend:case I.reverbEffectsSend:this.setGeneratorOverride(o,n(i,0,255)*(1e3/255));break}}function io(e){switch(this.midiControllers[S.dataEntryLSB]=e<<7,this.dataEntryState){default:break;case YA.RPCoarse:case YA.RPFine:{switch(this.midiControllers[S.registeredParameterMSB]|this.midiControllers[S.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[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[S.nonRegisteredParameterMSB]>>7,t=this.midiControllers[S.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:ao.call(this,t,e,this.midiControllers[S.dataEntryMSB]>>7);break}}}}function oo(e,A,t=!0){if(e>127)throw new Error("Invalid MIDI Controller.");if(e>=S.modulationWheelLSB&&e<=S.effectControl2LSB&&e!==S.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 S.allNotesOff:this.stopAllNotes();break;case S.allSoundOff:this.stopAllNotes(!0);break;case S.bankSelect:this.setBankMSB(A),this.channelNumber%16===me&&fA.isSystemXG(this.channelSystem)&&this.setBankMSB(127);break;case S.bankSelectLSB:this.setBankLSB(A);break;case S.registeredParameterLSB:this.dataEntryState=YA.RPFine;break;case S.registeredParameterMSB:this.dataEntryState=YA.RPCoarse;break;case S.nonRegisteredParameterMSB:this.customControllers[oA.sf2NPRNGeneratorLSB]=0,this.dataEntryState=YA.NRPCoarse;break;case S.nonRegisteredParameterLSB:this.midiControllers[S.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 S.dataEntryMSB:this.dataEntryCoarse(A);break;case S.dataEntryLSB:this.dataEntryFine(A);break;case S.resetAllControllers:this.resetControllersRP15Compliant();break;case S.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 ro(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 ro(e)*(A/36)}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){tA(`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 i=this.synth.keyModifierManager.getVelocity(this.channelNumber,t);i>-1&&(A=i);let o=this.synth.keyModifierManager.getGain(this.channelNumber,t),r=-1,g=0,c=this.midiControllers[S.portamentoTime]>>7,h=this.midiControllers[S.portamentoControl],C=h>>7;if(!this.drumChannel&&C!==n&&this.midiControllers[S.portamentoOnOff]>=8192&&c>0){if(h!==1){let m=Math.abs(n-C);g=Io(c,m),r=C}this.controllerChange(S.portamentoControl,n)}let Q=this.synthProps.getVoices(this.channelNumber,n,A,t),d=0;this.randomPan&&(d=Math.round(Math.random()*1e3-500));let p=this.voices;Q.forEach(m=>{m.portamentoFromKey=r,m.portamentoDuration=g,m.overridePan=d,m.gain=o,this.sysExModulators.modulatorList.forEach(J=>{let H=J.mod,Y=m.modulators.findIndex(q=>cA.isIdentical(q,H));Y!==-1?m.modulators[Y]=cA.copyFrom(H):m.modulators.push(cA.copyFrom(H))}),this.generatorOverridesEnabled&&this.generatorOverrides.forEach((J,H)=>{J!==Xs&&(m.generators[H]=J)});let k=m.exclusiveClass;k!==0&&p.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,T=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+T),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+=Q.length,this.synth.totalVoicesAmount>this.synthProps.masterParameters.voiceCap&&this.synthProps.voiceKilling(Q.length),p.push(...Q),this.sendChannelProperty(),this.synthProps.callEvent("noteOn",{midiNote:e,channel:this.channelNumber,velocity:A})}function co(e){if(e>127||e<0){tA("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||(tA("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 i=this.modulatorList.find(o=>o.id===a);if(i)i.mod.transformAmount=t;else{let o,r;e>=SA?(o=e-SA,r=!1):(o=e,r=!0);let g=new cA(new XA(o,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 Ms(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 i=n*s*a;return A.transformType===2&&(i=Math.abs(i)),A.isDefaultResonantModulator&&(t.resonanceOffset=Math.max(0,i/2)),A.currentValue=i,i}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]+Ms(this.midiControllers,g,e)))});for(let g=0;g<a.length;g++){let c=U[g];c&&(a[g]=Math.min(c.max,Math.max(c.min,a[g])))}Ge.recalculate(e),ze.recalculate(e);return}let i=new Set([I.initialAttenuation,I.delayVolEnv,I.attackVolEnv,I.holdVolEnv,I.decayVolEnv,I.sustainVolEnv,I.releaseVolEnv,I.keyNumToVolEnvHold,I.keyNumToVolEnvDecay]),o=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 c=g.destination;if(!o.has(c)){let h=s[c];Ms(this.midiControllers,g,e),n.forEach(Q=>{Q.destination===c&&(h+=Q.currentValue)});let C=U[c];a[c]=Math.max(C.min,Math.min(h,C.max)),o.add(c)}}}),[...o].some(g=>i.has(g))&&Ge.recalculate(e),ze.recalculate(e)}var lo=class{midiControllers=new Int16Array(Rn);lockedControllers=Array(Rn).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=Qi.bind(this);resetPreset=ui.bind(this);resetControllersRP15Compliant=fi.bind(this);resetParameters=mi.bind(this);dataEntryFine=io.bind(this);dataEntryCoarse=no.bind(this);channelTuningCents=0;generatorOffsets=new Int16Array(Gn);generatorOffsetsEnabled=!1;generatorOverrides=new Int16Array(Gn);generatorOverridesEnabled=!1;renderVoice=to.bind(this);panAndMixVoice=Oi.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[S.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}`,E.info,E.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.`,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[oA.channelTuning]+this.customControllers[oA.channelTransposeFine]+this.customControllers[oA.masterTuning]+this.customControllers[oA.channelTuningSemitones]*100}renderAudio(e,A,t,n,s,a,i,o){this.voices=this.voices.filter(r=>!this.renderVoice(r,this.synth.currentSynthTime,e,A,t,n,s,a,i,o))}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*U[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}))}},Sn=20;async function Qo(e,A,t,n,s,a,i){let o=0,r=0,g=[];for(let C of e.samples){n&&a&&await C.compressSample(a),s&&C.setAudioData(C.getAudioData(),C.sampleRate);let Q=C.getRawData(!0);o++,await i?.(C.name,o,e.samples.length),y(`%cEncoded sample %c${o}. ${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),r+=Q.length+(C.isCompressed?0:92),g.push(Q)}r%2!==0&&r++;let c=new K(r+Sn);kA(c,"LIST"),ht(c,r+Sn-8,4),kA(c,"sdta"),kA(c,"smpl"),ht(c,r,4);let h=0;return e.samples.forEach((C,Q)=>{let d=g[Q];c.set(d,h+Sn);let p,m;C.isCompressed?(p=h,m=p+d.length):(p=h/2,m=p+d.length/2,h+=92),h+=d.length,A.push(p),t.push(m)}),c}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,i){this.name=e,this.sampleRate=A,this.originalKey=t,this.pitchCorrection=n,this.loopStart=a,this.loopEnd=i,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){tA(`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){tA(`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 K(A.buffer)}decodeVorbis(){if(this.audioData)return this.audioData;if(!this.compressedData)throw new Error("Compressed data is missing.");try{let A=Ot.decode(this.compressedData).data[0];if(A===void 0)return tA(`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 tA(`Error decoding sample ${this.name}: ${e}`),new Float32Array(this.loopEnd+1)}}},fo=class extends Vt{constructor(){super("",44100,60,0,wA.monoSample,0,0)}},On=16,mo=class extends Vt{linkedSampleIndex;s16leData;startByteOffset;endByteOffset;sampleID;constructor(e,A,t,n,s,a,i,o,r,g,c,h){let C=(g&On)>0;g&=~On,super(e,a,i,o,g,n-A/2,s-A/2),this.dataOverridden=!1,this.name=e,this.startByteOffset=A,this.endByteOffset=t,this.sampleID=h;let Q=c instanceof K?c.currentIndex:0;c instanceof K?C?(this.loopStart+=this.startByteOffset/2,this.loopEnd+=this.startByteOffset/2,this.setCompressedData(c.slice(this.startByteOffset/2+Q,this.endByteOffset/2+Q))):this.s16leData=c.slice(Q+this.startByteOffset,Q+this.endByteOffset):this.setAudioData(c.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}`,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 tA(`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 bs(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,i=v(A,4),o=v(A,4),r=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 mo(n,s,a,i,o,r,g,c,h,C,t,e)}function po(e,A,t){let s=46*(e.samples.length+1),a=new K(s),i=new K(s),o=0;e.samples.forEach((c,h)=>{kA(a,c.name.substring(0,20),20),kA(i,c.name.substring(20),20);let C=A[h];rA(a,C),i.currentIndex+=4;let Q=t[h];rA(a,Q),i.currentIndex+=4;let d=c.loopStart+C,p=c.loopEnd+C;c.isCompressed&&(d-=C,p-=C),rA(a,d),rA(a,p),rA(a,c.sampleRate),a[a.currentIndex++]=c.originalKey,a[a.currentIndex++]=c.pitchCorrection,i.currentIndex+=14;let m=c.linkedSample?e.samples.indexOf(c.linkedSample):0;W(a,Math.max(0,m)&65535),W(i,Math.max(0,m)>>16),o=Math.max(o,m);let k=c.sampleType;c.isCompressed&&(k|=On),W(a,k),i.currentIndex+=2}),kA(a,"EOS",46),kA(i,"EOS",46);let r=IA("shdr",a),g=IA("shdr",i);return{pdta:r,xdta:g}}function vs(e,A=!1){let t=A?e.presets:e.instruments,n=A?"pgen":"igen",s=A?"pmod":"imod",a=A?"pbag":"ibag",i=A?"phdr":"inst",o=A?Ti:Ni,r=0,g=new Array,c=0,h=new Array,C=new Array,Q=new Array,d=0,p=new Array,m=H=>{g.push(r);let Y=H.getWriteGenerators(e);r+=Y.length,C.push(...Y),h.push(c);let q=H.modulators;c+=q.length,Q.push(...q)};t.forEach(H=>{p.push(d),m(H.globalZone),H.zones.forEach(m),d+=H.zones.length+1}),C.push(new FA(0,0,!1)),Q.push(new mA(0,0,0,0,0)),g.push(r),h.push(c),p.push(d);let k=C.length*ks,w=new K(k);C.forEach(H=>H.write(w));let M=Q.length*Ct,P=new K(M);Q.forEach(H=>H.write(P));let T=h.length*Li,B={pdta:new K(T),xdta:new K(T)};h.forEach((H,Y)=>{let q=g[Y];W(B.pdta,q&65535),W(B.pdta,H&65535),W(B.xdta,q>>16),W(B.xdta,H>>16)});let j=(t.length+1)*o,J={pdta:new K(j),xdta:new K(j)};return t.forEach((H,Y)=>H.write(J,p[Y])),A?(kA(J.pdta,"EOP",20),J.pdta.currentIndex+=4,W(J.pdta,d&65535),J.pdta.currentIndex+=12,kA(J.xdta,"",20),J.xdta.currentIndex+=4,W(J.xdta,d>>16),J.xdta.currentIndex+=12):(kA(J.pdta,"EOI",20),W(J.pdta,d&65535),kA(J.xdta,"",20),W(J.xdta,d>>16)),{writeXdta:Math.max(r,c,d)>65535,gen:{pdta:IA(n,w),xdta:IA(s,new K(ks))},mod:{pdta:IA(s,P),xdta:IA(s,new K(Ct))},bag:{pdta:IA(a,B.pdta),xdta:IA(a,B.xdta)},hdr:{pdta:IA(i,J.pdta),xdta:IA(i,J.xdta)}}}var qn={compress:!1,compressionFunction:void 0,progressFunction:void 0,writeDefaultModulators:!0,writeExtendedLimits:!0,decompress:!1};async function yo(e,A=qn){let t=zn(A,qn);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.")}MA("%cSaving soundbank...",E.info),y(`%cCompression: %c${t?.compress||"false"}%c`,E.info,E.recognized,E.info,E.recognized),KA("%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 K(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 K(4);W(M,e.soundBankInfo.romVersion.major),W(M,e.soundBankInfo.romVersion.minor),n.push(IA("iver",M))}let i=(e.soundBankInfo?.comment??"")+(e.soundBankInfo.subject?`
6
- ${e.soundBankInfo.subject}`:"");for(let[M,P]of Object.entries(e.soundBankInfo)){let T=M,B=P;if(B)switch(T){case"name":s("INAM",B);break;case"comment":s("ICMT",i);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,T=new K(P);for(let B of M)B.write(T);ht(T,0,Ct),n.push(IA("DMOD",T))}z(),y("%cWriting SDTA...",E.info);let r=[],g=[],c=await Qo(e,r,g,t.compress,t.decompress,t?.compressionFunction,t?.progressFunction);y("%cWriting PDTA...",E.info),y("%cWriting SHDR...",E.info);let h=po(e,r,g);KA("%cWriting instruments...",E.info);let C=vs(e,!1);z(),KA("%cWriting presets...",E.info);let Q=vs(e,!0);z();let d=[Q.hdr,Q.bag,Q.mod,Q.gen,C.hdr,C.bag,C.mod,C.gen,h],p=bA("pdta",d.map(M=>M.pdta),!0);if(t.writeExtendedLimits&&(C.writeXdta||Q.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=bA("xdta",d.map(P=>P.xdta),!0);n.push(M)}let k=bA("INFO",n,!0);y("%cWriting the output file...",E.info);let w=bA("RIFF",[ne("sfbk"),k,c,p]);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&&tA(`Wsmp cbSize mismatch: got ${n}, expected ${gt}.`),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!==pn&&tA(`CbSize for loop in wsmp mismatch. Expected ${gt}, got ${a}.`);let i=v(A.data,4),o=v(A.data,4),r=v(A.data,4);t.loops.push({loopStart:o,loopLength:r,loopType:i})}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:ps.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,i=A.sample.loopEnd+A.getGenerator(I.endloopAddrsOffset,0)+A.getGenerator(I.endloopAddrsCoarseOffset,0)*32768,o;switch(s){case 1:default:o=0;break;case 3:o=1}t.loops.push({loopType:o,loopStart:a,loopLength:i-a})}return t}toSFZone(A,t){let n=0,s=this.loops[0];s&&(n=s.loopType===ps.loopAndRelease?3:1),n!==0&&A.setGenerator(I.sampleModes,n);let o=-(this.gain>>16)/.4;if(o!==0&&A.setGenerator(I.initialAttenuation,o),A.fineTuning=this.fineTune-t.pitchCorrection,this.unityNote!==t.originalKey&&A.setGenerator(I.overridingRootKey,this.unityNote),s){let r=s.loopStart-t.loopStart,c=s.loopStart+s.loopLength-t.loopEnd;if(r!==0){let h=r%32768;A.setGenerator(I.startloopAddrsOffset,h);let C=Math.trunc(r/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 K(gt+this.loops.length*pn);return rA(A,gt),W(A,this.unityNote),W(A,this.fineTune),rA(A,this.gain),rA(A,this.fulOptions),rA(A,this.loops.length),this.loops.forEach(t=>{rA(A,pn),rA(A,t.loopType),rA(A,t.loopStart),rA(A,t.loopLength)}),IA("wsmp",A)}},yn={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 i=e.length/A,o=new Float32Array(i);if(A===2){let r=new Int16Array(e.buffer);for(let g=0;g<r.length;g++)o[g]=r[g]/32768}else for(let r=0;r<o.length;r++){let g=v(e,A);a?o[r]=g/s-.5:(g>=t&&(g-=n),o[r]=g/s)}return o}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),i=a^85;i&=127;let o=i>>4,r=i&15;o>0&&(r+=16),r=(r<<4)+8,o>1&&(r=r<<o-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,i,o,r){super(e,A,t,n,wA.monoSample,s,a),this.dataOverridden=!1,this.rawData=i.data,this.wFormatTag=o,this.bytesPerSample=r}getAudioData(){if(!this.rawData)return new Float32Array(0);if(!this.audioData){let e;switch(this.wFormatTag){default:tA(`Failed to decode sample. Unknown wFormatTag: ${this.wFormatTag}`),e=new Float32Array(this.rawData.length/this.bytesPerSample);break;case yn.PCM:e=ko(this.rawData,this.bytesPerSample);break;case yn.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===yn.PCM&&this.bytesPerSample===2?this.rawData:this.encodeS16LE()}},Ls=class Kn 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(Q=>Q.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 i=v(n.data,4);v(n.data,4),v(n.data,2);let r=v(n.data,2)/8,g=t.find(Q=>Q.header==="data");if(!g)throw new Error("No data chunk in the WAVE chunk!");let c=new Kn(s,r,i,g),h=fe(t,"INFO");if(h){let Q=aA(h.data);for(;Q.header!=="INAM"&&h.data.currentIndex<h.data.length;)Q=aA(h.data);Q.header==="INAM"&&(c.name=hA(Q.data,Q.size).trim())}let C=t.find(Q=>Q.header==="wsmp");return C&&(c.waveSample=Xe.read(C)),c}static fromSFSample(A){let t=A.getRawData(!1),n=new Kn(1,2,A.sampleRate,new Hs("data",t.length,new K(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,i=0,o=this.waveSample.loops?.[0];o&&(a=o.loopStart,i=o.loopStart+o.loopLength);let r=new wo(this.name,this.sampleRate,t,n,a,i,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!`,E.recognized,E.value,E.recognized),bA("wave",[A,t,n,a],!0)}writeFmt(){let A=new K(18);return W(A,this.wFormatTag),W(A,1),rA(A,this.sampleRate),rA(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 S.modulationWheel:t=N.modulationWheel;break;case S.mainVolume:t=N.volume;break;case S.pan:t=N.pan;break;case S.expressionController:t=N.expression;break;case S.chorusDepth:t=N.chorus;break;case S.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=S.modulationWheel,t=!0;break;case N.pan:A=S.pan,t=!0;break;case N.reverb:A=S.reverbDepth,t=!0;break;case N.chorus:A=S.chorusDepth,t=!0;break;case N.expression:A=S.expressionController,t=!0;break;case N.volume:A=S.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]),ct=class we{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),i=v(A,4)|0,o=a&15,r=a>>4&15,g=Fe(a,8),c=Fe(a,9),h=new VA(n,r,g,c),C=a>>10&15,Q=Fe(a,14),d=Fe(a,15),p=new VA(t,C,Q,d);return new we(p,h,s,o,i)}static fromSFModulator(A,t){let n=c=>{tA(`Failed converting SF modulator into DLS:
5
+ amount: ${this.transformAmount}`+(this.transformType===2?"absolute value":"")}write(A,t){_(A,this.primarySource.toSourceEnum()),_(A,this.destination),_(A,this.transformAmount),_(A,this.secondarySource.toSourceEnum()),_(A,this.transformType),t&&t.mod++}sumTransform(A){let t=xn.copyFrom(this);return t.transformAmount+=A.transformAmount,t}},fA=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===ca&&A===0&&t===i.initialFilterQ;super(WA.fromSourceEnum(e),WA.fromSourceEnum(A),t,n,s,a,o),this.destination>uo&&(this.destination=i.INVALID)}},un=960,fn=CA.concave,Lo=[new fA(KA(fn,!1,!0,!1,AA.noteOnVelocity),0,i.initialAttenuation,un,0),new fA(129,0,i.vibLfoToPitch,50,0),new fA(KA(fn,!1,!0,!0,m.mainVolume),0,i.initialAttenuation,un,0),new fA(13,0,i.vibLfoToPitch,50,0),new fA(526,16,i.fineTune,12700,0),new fA(650,0,i.pan,500,0),new fA(KA(fn,!1,!0,!0,m.expressionController),0,i.initialAttenuation,un,0),new fA(219,0,i.reverbEffectsSend,200,0),new fA(221,0,i.chorusEffectsSend,200,0)],No=[new fA(KA(CA.linear,!1,!1,!0,m.tremoloDepth),0,i.modLfoToVolume,24,0),new fA(KA(CA.convex,!0,!1,!0,m.attackTime),0,i.attackVolEnv,6e3,0),new fA(KA(CA.linear,!0,!1,!0,m.releaseTime),0,i.releaseVolEnv,3600,0),new fA(KA(CA.linear,!0,!1,!0,m.decayTime),0,i.decayVolEnv,3600,0),new fA(KA(CA.linear,!0,!1,!0,m.brightness),0,i.initialFilterFc,9600,0),new fA(ca,0,i.initialFilterQ,200,0),new fA(KA(CA.switch,!1,!1,!0,m.softPedal),0,i.initialAttenuation,50,0),new fA(KA(CA.switch,!1,!1,!0,m.softPedal),0,i.initialFilterFc,-2400,0),new fA(KA(CA.linear,!0,!1,!0,m.balance),0,i.pan,500,0)],Ea=Lo.concat(No),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){_(e,this.generatorType),_(e,this.generatorValue)}toString(){return`${Object.keys(i).find(e=>i[e]===this.generatorType)}: ${this.generatorValue}`}};function Uo(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 To=4,Vt=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}},Ba=class extends Vt{},Ca=class extends Vt{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}},ha=class extends Vt{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}},xo=22,Ho=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]),ut=class{name="";zones=[];globalZone=new Ba;linkedTo=[];get useCount(){return this.linkedTo.length}createZone(e){let A=new ha(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){tA(`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(Ho.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,c)=>g[1]<c[1]?c:g,["0",0]),r=parseInt(I[0]);r!==a&&e.setGenerator(n,r,!1),this.zones.forEach(g=>{let c=g.getGenerator(n,void 0);c!==void 0?c===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}...`,E.info),kA(e.pdta,this.name.substring(0,20),20),kA(e.xdta,this.name.substring(20),20),_(e.pdta,A&65535),_(e.xdta,A>>>16)}},Yo=38,ze=class{parentSoundBank;name="";program=0;bankMSB=0;bankLSB=0;isGMGSDrum=!1;zones=[];globalZone;library=0;genre=0;morphology=0;constructor(e,A=new Ba){this.parentSoundBank=e,this.globalZone=A}get isXGDrums(){return this.parentSoundBank.isXGBank&&mA.isXGDrums(this.bankMSB)}get isAnyDrums(){let e=this.parentSoundBank.isXGBank;return this.isGMGSDrum||e&&mA.isXGDrums(this.bankMSB)}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 Ca(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 ae.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(u=>!h.find(d=>d.generatorType===u.generatorType)))}function s(h,C){h.push(...C.filter(u=>!h.find(d=>cA.isIdentical(u,d))))}let a=[],o=[...this.globalZone.generators],I=[...this.globalZone.modulators],r=this.globalZone.keyRange,g=this.globalZone.velRange;return this.zones.filter(h=>t(h.hasKeyRange?h.keyRange:r,e)&&t(h.hasVelRange?h.velRange:g,A)).forEach(h=>{let C=h.instrument;if(!C||C.zones.length<1)return;let u=h.generators,d=h.modulators,S=[...C.globalZone.generators],p=[...C.globalZone.modulators],k=C.globalZone.keyRange,w=C.globalZone.velRange;C.zones.filter(H=>t(H.hasKeyRange?H.keyRange:k,e)&&t(H.hasVelRange?H.velRange:w,A)).forEach(H=>{let b=[...H.generators],B=[...H.modulators];n(u,o),n(b,S),s(d,I),s(B,p),s(B,this.parentSoundBank.defaultModulators);let O=[...B];for(let X of d){let J=O.findIndex(Y=>cA.isIdentical(X,Y));J!==-1?O[J]=O[J].sumTransform(X):O.push(X)}H.sample&&a.push({instrumentGenerators:b,presetGenerators:u,modulators:O,sample:H.sample})})}),a}toMIDIString(){return ae.toMIDIString(this)}toString(){return ae.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 ut;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 c=g.keyRange;g.hasKeyRange||(c=I);let h=g.velRange;g.hasVelRange||(h=r);let C=g.generators.map(b=>new FA(b.generatorType,b.generatorValue));e(C,s);let u=[...g.modulators];t(u,a);let d=g.instrument,S=d.zones,p=[],k=[],w=d.globalZone;p.push(...w.generators),k.push(...w.modulators);let M=w.keyRange,H=w.velRange;for(let b of S){if(!b.sample)throw new Error("No sample in an instrument zone.");let B=b.keyRange;b.hasKeyRange||(B=M);let O=b.velRange;if(b.hasVelRange||(O=H),B=A(B,c),O=A(O,h),B.max<B.min||O.max<O.min)continue;let X=b.generators.map(z=>new FA(z.generatorType,z.generatorValue));e(X,p);let J=[...b.modulators];t(J,k);let Y=[...J];for(let z of u){let hA=Y.findIndex(gA=>cA.isIdentical(z,gA));hA!==-1?Y[hA]=Y[hA].sumTransform(z):Y.push(z)}let K=X.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 hA=X.findIndex(gA=>gA.generatorType===z.generatorType);if(hA!==-1){let gA=K[hA].generatorValue+z.generatorValue;K[hA]=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 P=n.createZone(b.sample);P.keyRange=B,P.velRange=O,P.keyRange.min===0&&P.keyRange.max===127&&(P.keyRange.min=-1),P.velRange.min===0&&P.velRange.max===127&&(P.velRange.min=-1),P.addGenerators(...K),P.addModulators(...Y)}}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),_(e.pdta,this.program);let t=this.bankMSB;this.isGMGSDrum?t=128:this.bankMSB===0&&(t=this.bankLSB),_(e.pdta,t),e.xdta.currentIndex+=4,_(e.pdta,A&65535),_(e.xdta,A>>16),rA(e.pdta,this.library),rA(e.pdta,this.genre),rA(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 la(e,A,t){if(e.length<1)throw new Error("No presets!");A.isGMGSDrum&&mA.isSystemXG(t)&&(A={...A,isGMGSDrum:!1,bankLSB:0,bankMSB:mA.getDrumBank(t)});let{isGMGSDrum:n,bankLSB:s,bankMSB:a,program:o}=A,I=mA.isSystemXG(t),r=mA.isXGDrums(a)&&I,g=e.find(C=>C.matches(A));if(g&&(!r||r&&g.isXGDrums))return g;let c=C=>{y(`%cPreset %c${ae.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(u=>u.isGMGSDrum&&u.program===o);return C||(C=e.find(u=>u.isAnyDrums&&u.program===o),C)?(c(C),C):(C=ws(e,!1),c(C),C)}if(r){let C=e.find(u=>u.program===o&&u.isXGDrums);return C||(C=e.find(u=>u.isAnyDrums&&u.program===o),C)?(c(C),C):(C=ws(e,!0),c(C),C)}let h=e.filter(C=>C.program===o&&!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(u=>u.bankLSB===C||u.bankMSB===C),g)return c(g),g}return c(h[0]),h[0]}var Jo=class extends ze{constructor(e,A){super(e.parentSoundBank,e.globalZone),this.bankMSB=mA.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}},Po=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){tA("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 la(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 Jo(a,s);A.has(o.toMIDIString())||(A.add(o.toMIDIString()),e.push(o))})}),e.sort(ae.sorter.bind(ae)),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()}},qo=.05,Oo=3070,Ko=2e3,Fs=Math.PI/2,Ut=-500,da=500,is=da-Ut,Qa=new Float32Array(is+1),ua=new Float32Array(is+1);for(let e=Ut;e<=da;e++){let A=(e-Ut)/is,t=e-Ut;Qa[t]=Math.cos(Fs*A),ua[t]=Math.sin(Fs*A)}function Vo(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 c=this.synthProps.masterParameters.masterGain*this.synthProps.midiVolume*e.gain,h=~~(g+500),C=Qa[h]*c*this.synthProps.panLeft,u=ua[h]*c*this.synthProps.panRight;if(this.synth.enableEffects){let d=e.modulatedGenerators[i.reverbEffectsSend];if(d>0){let p=this.synthProps.masterParameters.reverbGain*this.synthProps.reverbSend*c*(d/Oo);for(let k=0;k<A.length;k++){let w=k+r;s[w]+=p*A[k],a[w]+=p*A[k]}}let S=e.modulatedGenerators[i.chorusEffectsSend];if(S>0){let p=this.synthProps.masterParameters.chorusGain*this.synthProps.chorusSend*(S/Ko),k=C*p,w=u*p;for(let M=0;M<A.length;M++){let H=M+r;o[H]+=k*A[M],I[H]+=w*A[M]}}}if(C>0)for(let d=0;d<A.length;d++)t[d+r]+=C*A[d];if(u>0)for(let d=0;d<A.length;d++)n[d+r]+=u*A[d]}var Xo=.03,Xt=class Bt{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,Bt.calculateCoefficients(o,I));for(let g=0;g<t.length;g++){let c=t[g],h=o.a0*c+o.a1*o.x1+o.a2*o.x2-o.a3*o.y1-o.a4*o.y2;o.x2=o.x1,o.x1=c,o.y2=o.y1,o.y1=h,t[g]=h}}static calculateCoefficients(A,t){t=~~t;let n=A.resonanceCb,s=Bt.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=Nn(t);a=Math.min(a,A.maxCutoff);let o=n/10,I=te(-(o-3.01)),r=1/Math.sqrt(te(-o)),g=2*Math.PI*a/A.sampleRate,c=Math.cos(g),h=Math.sin(g)/(2*I),C=(1-c)*r,u=C/2,d=u,S=1+h,p=-2*c,k=1-h,w={a0:u/S,a1:C/S,a2:d/S,a3:p/S,a4:k/S};A.a0=w.a0,A.a1=w.a1,A.a2=w.a2,A.a3=w.a3,A.a4=w.a4,Bt.cachedCoefficients[n]??=[],Bt.cachedCoefficients[n][t]=w}},Hn=new Xt(44100);Hn.resonanceCb=0;for(let e=1500;e<13500;e++)Hn.currentInitialFc=e,Xt.calculateCoefficients(Hn,e);var Gs={enableEventSystem:!0,initialTime:0,enableEffects:!0};function Zo(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 Wo(e){let A=[];for(let n of this.midiChannels)for(let s of n.voices)if(!s.finished){let a=Zo(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 mn=1,Yn=new Float32Array(1e3);for(let e=0;e<Yn.length;e++)Yn[e]=Ia(0,CA.convex,e/1e3);var _e=class Jn{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){Jn.recalculate(A)}static recalculate(A){let t=A.modulationEnvelope;A.isInRelease&&(t.releaseStartLevel=Jn.getValue(A,A.releaseStartTime,!0)),t.sustainLevel=1-A.modulatedGenerators[i.sustainModEnv]/1e3,t.attackDuration=me(A.modulatedGenerators[i.attackModEnv]);let n=(60-A.midiNote)*A.modulatedGenerators[i.keyNumToModEnvDecay],s=me(A.modulatedGenerators[i.decayModEnv]+n);t.decayDuration=s*(1-t.sustainLevel);let a=(60-A.midiNote)*A.modulatedGenerators[i.keyNumToModEnvHold];t.holdDuration=me(a+A.modulatedGenerators[i.holdModEnv]);let o=me(Math.max(A.modulatedGenerators[i.releaseModEnv],-7200));t.releaseDuration=o*t.releaseStartLevel,t.delayEnd=A.startTime+me(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=Yn[~~((1-(s.attackEnd-t)/s.attackDuration)*1e3)]:t<s.holdEnd?s.currentValue=mn:t<s.decayEnd?s.currentValue=(1-(s.decayEnd-t)/s.decayDuration)*(s.sustainLevel-mn)+mn:s.currentValue=s.sustainLevel,s.currentValue)}},fa=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}},zo=-2320,_o=-1130,Sn=class ma{sample;filter;gain=1;generators;modulators=[];resonanceOffset=0;modulatedGenerators;finished=!1;isInRelease=!1;velocity=0;midiNote=0;pressure=0;targetKey=0;modulationEnvelope=new _e;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 Xt(A),this.velocity=s,this.midiNote=n,this.startTime=a,this.targetKey=o,this.realKey=I,this.volumeEnvelope=new be(A,r[i.sustainVolEnv])}static copyFrom(A,t,n){let s=A.sample,a=new fa(s.sampleData,s.playbackStep,s.cursor,s.rootKey,s.loopStart,s.loopEnd,s.end,s.loopingMode);return new ma(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,Za),this.modulatedGenerators[i.releaseVolEnv]=zo,this.modulatedGenerators[i.releaseModEnv]=_o,be.recalculate(this),_e.recalculate(this)}release(A,t=Xa){this.releaseStartTime=A,this.releaseStartTime-this.startTime<t&&(this.releaseStartTime=this.startTime+t)}};function jo(e,A,t,n){let s=this.getCachedVoice(e,A,t);if(s!==void 0)return s.map(o=>Sn.copyFrom(o,this.currentSynthTime,n));let a=e.getSynthesisData(A,t).reduce((o,I)=>{if(I.sample.getAudioData()===void 0)return tA(`Discarding invalid sample: ${I.sample.name}`),o;let r=new Int16Array(Mn);for(let k=0;k<60;k++)r[k]=Uo(k,I.presetGenerators,I.instrumentGenerators);r[i.initialAttenuation]=Math.floor(r[i.initialAttenuation]*.4);let g=I.sample.originalKey;r[i.overridingRootKey]>-1&&(g=r[i.overridingRootKey]);let c=A;r[i.keyNum]>-1&&(c=r[i.keyNum]);let h=I.sample.loopStart,C=I.sample.loopEnd,u=r[i.sampleModes],d=I.sample.getAudioData(),S=new fa(d,I.sample.sampleRate/this.sampleRate*Math.pow(2,I.sample.pitchCorrection/1200),0,g,h,C,Math.floor(d.length)-1,u),p=t;return r[i.velocity]>-1&&(p=r[i.velocity]),o.push(new Sn(this.sampleRate,S,A,p,this.currentSynthTime,c,n,r,I.modulators.map(cA.copyFrom.bind(cA)))),o},[]);return this.setCachedVoice(e,A,t,a),a.map(o=>Sn.copyFrom(o,this.currentSynthTime,n))}function $o(e,A,t,n){let s=this.midiChannels[e],a=this.keyModifierManager.hasOverridePatch(e,A),o=s.preset;if(!o)return tA(`No preset for channel ${e}!`),[];if(a){let I=this.keyModifierManager.getPatch(e,A);o=this.soundBankManager.getPreset(I,this.privateProps.masterParameters.midiSystem)}return this.getVoicesForPreset(o,A,t,n)}function VA(e,A,t,n,s){y(`%cChannel %c${A}%c ${n}. %c${t} ${s}%c, with %c${ne(e)}`,E.info,E.recognized,E.info,E.value,E.info,E.value)}function ZA(e,A){y(`%cUnrecognized %c${A} %cSysEx: %c${ne(e)}`,E.warn,E.recognized,E.warn,E.unrecognized)}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 Ai(e,A=0){switch(e[2]){case 4:{let t;switch(e[3]){case 1:{let n=e[5]<<7|e[4];this.setMIDIVolume(n/16384),y(`%cMaster Volume. Volume: %c${n}`,E.info,E.value);break}case 2:{let s=((e[5]<<7|e[4])-8192)/8192;this.setMasterParameter("masterPan",s),y(`%cMaster Pan. Pan: %c${s}`,E.info,E.value);break}case 3:{let n=(e[5]<<7|e[6])-8192;t=Math.floor(n/81.92),this.setMasterTuning(t),y(`%cMaster Fine Tuning. Cents: %c${t}`,E.info,E.value);break}case 4:{t=(e[5]-64)*100,this.setMasterTuning(t),y(`%cMaster Coarse Tuning. Cents: %c${t}`,E.info,E.value);break}default:y(`%cUnrecognized MIDI Device Control Real-time message: %c${ne(e)}`,E.warn,E.unrecognized)}break}case 9:e[3]===1?(y("%cGM1 system on",E.info),this.resetAllControllers("gm")):e[3]===3?(y("%cGM2 system on",E.info),this.resetAllControllers("gm2")):(y("%cGM system off, defaulting to GS",E.info),this.setMasterParameter("midiSystem","gs"));break;case 8:{let t=4;switch(e[3]){case 1:{let n=e[t++],s=se(e,16,t);if(t+=16,e.length<384){tA(`The Bulk Tuning Dump is too short! (${e.length} bytes, at least 384 are expected)`);return}for(let a=0;a<128;a++)this.privateProps.tunings[n][a]=Rs(e[t++],e[t++],e[t++]);y(`%cBulk Tuning Dump %c${s}%c Program: %c${n}`,E.info,E.value,E.info,E.recognized);break}case 2:case 7:{e[3]===7&&t++;let n=e[t++],s=e[t++];for(let a=0;a<s;a++)this.privateProps.tunings[n][e[t++]]=Rs(e[t++],e[t++],e[t++]);y(`%cSingle Note Tuning. Program: %c${n}%c Keys affected: %c${s}`,E.info,E.recognized,E.info,E.recognized);break}case 9:case 8:{let n=new Int8Array(12);if(e[3]===8)for(let s=0;s<12;s++)n[s]=e[7+s]-64;else for(let s=0;s<24;s+=2){let a=(e[7+s]<<7|e[8+s])-8192;n[s/2]=Math.floor(a/81.92)}(e[4]&1)===1&&this.midiChannels[14+A].setOctaveTuning(n),(e[4]>>1&1)===1&&this.midiChannels[15+A].setOctaveTuning(n);for(let s=0;s<7;s++)(e[5]>>s&1)===1&&this.midiChannels[7+s+A].setOctaveTuning(n);for(let s=0;s<7;s++)(e[6]>>s&1)===1&&this.midiChannels[s+A].setOctaveTuning(n);y(`%cMIDI Octave Scale ${e[3]===8?"(1 byte)":"(2 bytes)"} tuning via Tuning: %c${n.join(" ")}`,E.info,E.value);break}default:ZA(e,"MIDI Tuning Standard");break}break}default:ZA(e,"General MIDI")}}function ei(e,A=0){if(e[3]===18)switch(e[2]){case 66:{let t=e[7];if(e[4]===64||e[4]===0&&e[6]===127){if((e[5]&16)>0){let n=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][e[5]&15]+A,s=this.midiChannels[n];switch(e[6]){default:ZA(e,"Roland GS");break;case 21:{let a=t>0&&e[5]>>4>0;s.setGSDrums(a),y(`%cChannel %c${n}%c ${a?"is now a drum channel":"now isn't a drum channel"}%c via: %c${ne(e)}`,E.info,E.value,E.recognized,E.info,E.value);return}case 22:{let a=t-64;s.setCustomController(iA.channelKeyShift,a),VA(e,n,a,"key shift","keys");return}case 28:{let a=t;a===0?(s.randomPan=!0,y(`%cRandom pan is set to %cON%c for %c${n}`,E.info,E.recognized,E.info,E.value)):(s.randomPan=!1,s.controllerChange(m.pan,a));break}case 33:s.controllerChange(m.chorusDepth,t);break;case 34:s.controllerChange(m.reverbDepth,t);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 a=e.length-9,o=new Int8Array(12);for(let r=0;r<a;r++)o[r]=e[r+7]-64;s.setOctaveTuning(o);let I=t-64;VA(e,n,o.join(" "),"octave scale tuning","cents"),s.setTuning(I);break}}return}else if((e[5]&32)>0){let n=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][e[5]&15]+A,s=this.midiChannels[n],a=t-64,o=a/64,I=t/128,r=(g,c,h=!1)=>{switch(e[6]&15){case 0:g===SA+AA.pitchWheel?(s.controllerChange(m.registeredParameterMSB,0),s.controllerChange(m.registeredParameterLSB,0),s.controllerChange(m.dataEntryMSB,Math.floor(a))):(s.sysExModulators.setModulator(g,i.fineTune,a*100,h),VA(e,n,a,`${c} pitch control`,"semitones"));break;case 1:s.sysExModulators.setModulator(g,i.initialFilterFc,o*9600,h),VA(e,n,o*9600,`${c} pitch control`,"cents");break;case 2:s.sysExModulators.setModulator(g,i.initialAttenuation,o*960,h),VA(e,n,o*960,`${c} amplitude`,"cB");break;case 4:s.sysExModulators.setModulator(g,i.vibLfoToPitch,I*600,h),VA(e,n,I*600,`${c} LFO1 pitch depth`,"cents");break;case 5:s.sysExModulators.setModulator(g,i.vibLfoToFilterFc,I*2400,h),VA(e,n,I*2400,`${c} LFO1 filter depth`,"cents");break;case 6:s.sysExModulators.setModulator(g,i.vibLfoToVolume,o*960,h),VA(e,n,o*960,`${c} LFO1 amplitude depth`,"cB");break;case 8:s.sysExModulators.setModulator(g,i.modLfoToPitch,I*600,h),VA(e,n,I*600,`${c} LFO2 pitch depth`,"cents");break;case 9:s.sysExModulators.setModulator(g,i.modLfoToFilterFc,I*2400,h),VA(e,n,I*2400,`${c} LFO2 filter depth`,"cents");break;case 10:s.sysExModulators.setModulator(g,i.modLfoToVolume,o*960,h),VA(e,n,o*960,`${c} LFO2 amplitude depth`,"cB");break}};switch(e[6]&240){default:ZA(e,"Roland GS");break;case 0:r(m.modulationWheel,"mod wheel");break;case 16:r(SA+AA.pitchWheel,"pitch wheel",!0);break;case 32:r(SA+AA.channelPressure,"channel pressure");break;case 48:r(SA+AA.polyPressure,"poly pressure");break}return}else if(e[5]===0){switch(e[6]){default:ZA(e,"Roland GS");break;case 127:t===0?(y("%cGS Reset received!",E.info),this.resetAllControllers("gs")):t===127&&(y("%cGS system off, switching to GM",E.info),this.resetAllControllers("gm"));break;case 6:y(`%cRoland GS Master Pan set to: %c${t}%c with: %c${ne(e)}`,E.info,E.value,E.info,E.value),this.setMasterParameter("masterPan",(t-64)/64);break;case 4:y(`%cRoland GS Master Volume set to: %c${t}%c with: %c${ne(e)}`,E.info,E.value,E.info,E.value),this.setMIDIVolume(t/127);break;case 5:{let n=t-64;y(`%cRoland GS Master Key-Shift set to: %c${n}%c with: %c${ne(e)}`,E.info,E.value,E.info,E.value),this.setMasterTuning(n*100);break}}return}else if(e[5]===1)switch(e[6]){default:ZA(e,"Roland GS");break;case 0:{let n=se(e,16,7);y(`%cGS Patch name: %c${n}`,E.info,E.value);break}case 51:y(`%cGS Reverb level: %c${t}`,E.info,E.value),this.privateProps.reverbSend=t/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${t}`,E.info,E.value),this.privateProps.chorusSend=t/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 ZA(e,"Roland GS");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)):ZA(e,"Roland GS"));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${ne(e)}`,E.info,E.value,E.info,E.value);return}}else{ZA(e,"Roland GS");return}}function ti(e,A=0){if(e[2]===76){let t=e[3],n=e[4];if(t===0&&n===0)switch(e[5]){case 0:{let a=(((e[6]&15)<<12|(e[7]&15)<<8|(e[8]&15)<<4|e[9]&15)-1024)/10;this.setMasterTuning(a),y(`%cXG master tune. Cents: %c${a}`,E.info,E.recognized)}break;case 4:{let s=e[6];this.setMIDIVolume(s/127),y(`%cXG master volume. Volume: %c${s}`,E.info,E.recognized);break}case 5:{let s=127-e[6];this.setMIDIVolume(s/127),y(`%cXG master attenuation. Volume: %c${s}`,E.info,E.recognized);break}case 6:{let s=e[6]-64;this.setMasterParameter("transposition",s),y(`%cXG master transpose. Volume: %c${s}`,E.info,E.recognized);break}case 126:y("%cXG system on",E.info),this.resetAllControllers("xg");break}else if(t===2&&n===1){let s,a=e[5];a<=21?s="Reverb":a<=35?s="Chorus":s="Variation",y(`%cUnsupported XG ${s} Parameter: %c${a.toString(16)}`,E.warn,E.unrecognized)}else if(t===8){if(!mA.isSystemXG(this.privateProps.masterParameters.midiSystem))return;let s=n+A;if(s>=this.midiChannels.length)return;let a=this.midiChannels[s],o=e[6];switch(e[5]){case 1:a.controllerChange(m.bankSelect,o);break;case 2:a.controllerChange(m.bankSelectLSB,o);break;case 3:a.programChange(o);break;case 7:a.setDrums(o!=0);break;case 8:{if(a.drumChannel)break;a.setCustomController(iA.channelKeyShift,o-64);break}case 11:a.controllerChange(m.mainVolume,o);break;case 14:{let I=o;I===0?(a.randomPan=!0,y(`%cRandom pan is set to %cON%c for %c${s}`,E.info,E.recognized,E.info,E.value)):a.controllerChange(m.pan,I);break}case 17:a.controllerChange(m.mainVolume,o);break;case 18:a.controllerChange(m.chorusDepth,o);break;case 19:a.controllerChange(m.reverbDepth,o);break;case 21:a.controllerChange(m.vibratoRate,o);break;case 22:a.controllerChange(m.vibratoDepth,o);break;case 23:a.controllerChange(m.vibratoDelay,o);break;case 24:a.controllerChange(m.brightness,o);break;case 25:a.controllerChange(m.filterResonance,o);break;case 26:a.controllerChange(m.attackTime,o);break;case 27:a.controllerChange(m.decayTime,o);break;case 28:a.controllerChange(m.releaseTime,o);break;default:y(`%cUnsupported Yamaha XG Part Setup: %c${e[5].toString(16).toUpperCase()}%c for channel ${s}`,E.warn,E.unrecognized,E.warn)}}else t===6&&n===0?this.privateProps.callEvent("synthDisplay",Array.from(e)):mA.isSystemXG(this.privateProps.masterParameters.midiSystem)&&ZA(e,"Yamaha XG")}else ZA(e,"Yamaha")}function ni(e,A=0){let t=e[0];if(!(this.privateProps.masterParameters.deviceID!==he&&e[1]!==127&&this.privateProps.masterParameters.deviceID!==e[1]))switch(t){default:y(`%cUnrecognized SysEx: %c${ne(e)} (unknown manufacturer)`,E.warn,E.unrecognized);break;case 126:case 127:Ai.call(this,e,A);break;case 65:ei.call(this,e,A);break;case 67:ti.call(this,e,A);break}}var Ms=class Pn{patch;lockPreset;lockedSystem;midiControllers;lockedControllers;customControllers;lockVibrato;channelVibrato;channelTransposeKeyShift;channelOctaveTuning;isMuted;drumChannel;channelNumber;constructor(A,t,n,s,a,o,I,r,g,c,h,C,u){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=c,this.isMuted=h,this.drumChannel=C,this.channelNumber=u}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 si=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.")}},rs=class qn{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 qn(t,A.getAllMasterParameters(),A.keyModifierManager.getMappings())}static copyFrom(A){return new qn(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)})}},ai={masterGain:Wa,masterPan:0,voiceCap:Ka,interpolationType:Lt.hermite,midiSystem:Xs,monophonicRetriggerMode:!1,reverbGain:1,chorusGain:1,blackMIDIMode:!1,transposition:0,deviceID:he},oi=class{tunings=[];masterParameters=ai;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 pn(e,A,t){if(t<e)return 0;let n=(t-e)/(1/A)+.25;return Math.abs(n-~~(n+.5))*4-1}var ii=class On{static getSample(A,t,n){let s=A.currentTuningCalculated*A.sample.playbackStep;if(s===1){On.getSampleNearest(A,t,s);return}switch(n){case Lt.hermite:this.getSampleHermite(A,t,s);return;case Lt.linear:default:this.getSampleLinear(A,t,s);return;case Lt.nearestNeighbor:On.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,c=g+1;for(;c>=s.loopEnd;)c-=I;let h=a-g,C=o[c],u=o[g];t[r]=u+(C-u)*h,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 c=a-r,h=o[g],C=o[r];t[I]=C+(h-C)*c,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,c=g+1,h=g+2,C=g+3,u=a-g;c>=s.loopEnd&&(c-=I),h>=s.loopEnd&&(h-=I),C>=s.loopEnd&&(C-=I);let d=o[g],S=o[c],p=o[h],k=o[C],w=(p-d)*.5,M=S-p,H=w+M,b=H+M+(k-S)*.5,B=H+b;t[r]=((b*u-B)*u+w)*u+S,a+=n}}else for(let I=0;I<t.length;I++){let r=~~a,g=r+1,c=r+2,h=r+3,C=a-r;if(g>=s.end||c>=s.end||h>=s.end){A.finished=!0;return}let u=o[r],d=o[g],S=o[c],p=o[h],k=(S-u)*.5,w=d-S,M=k+w,H=M+w+(p-d)*.5,b=M+H;t[I]=((H*C-b)*C+k)*C+d,a+=n}A.sample.cursor=a}};function ri(e,A,t,n,s,a,o,I,r,g){if(e.isInRelease||A>=e.releaseStartTime&&(e.isInRelease=!0,be.startRelease(e),_e.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],u=this.synthProps.tunings[this.preset?.program??0]?.[e.realKey];if(u?.centTuning&&(c=u.midiNote,h+=u.centTuning),e.portamentoFromKey>-1){let Y=Math.min((A-e.startTime)/e.portamentoDuration,1),K=c-e.portamentoFromKey;C-=K*(1-Y)}h+=(c-e.sample.rootKey)*e.modulatedGenerators[i.scaleTuning];let d=0,S=0,p=e.modulatedGenerators[i.vibLfoToPitch],k=e.modulatedGenerators[i.vibLfoToVolume],w=e.modulatedGenerators[i.vibLfoToFilterFc];if(p!==0||k!==0||w!==0){let Y=e.startTime+me(e.modulatedGenerators[i.delayVibLFO]),K=Nn(e.modulatedGenerators[i.freqVibLFO]),P=pn(Y,K,A);h+=P*(p*this.customControllers[iA.modulationMultiplier]),S+=-P*k,d+=P*w}let M=e.modulatedGenerators[i.modLfoToPitch],H=e.modulatedGenerators[i.modLfoToVolume],b=e.modulatedGenerators[i.modLfoToFilterFc];if(M!==0||b!==0||H!==0){let Y=e.startTime+me(e.modulatedGenerators[i.delayModLFO]),K=Nn(e.modulatedGenerators[i.freqModLFO]),P=pn(Y,K,A);h+=P*(M*this.customControllers[iA.modulationMultiplier]),S+=-P*H,d+=P*b}this.midiControllers[m.modulationWheel]==0&&this.channelVibrato.depth>0&&(h+=pn(e.startTime+this.channelVibrato.delay,this.channelVibrato.rate,A)*this.channelVibrato.depth);let B=e.modulatedGenerators[i.modEnvToPitch],O=e.modulatedGenerators[i.modEnvToFilterFc];if(O!==0||B!==0){let Y=_e.getValue(e,A);d+=Y*O,h+=Y*B}S-=e.resonanceOffset;let X=~~(h+C*100);X!==e.currentTuningCents&&(e.currentTuningCents=X,e.currentTuningCalculated=Math.pow(2,X/1200));let J=new Float32Array(g);return e.sample.loopingMode===2&&!e.isInRelease?(be.apply(e,J,S,this.synthProps.volumeEnvelopeSmoothingFactor),e.finished):(ii.getSample(e,J,this.synthProps.masterParameters.interpolationType),Xt.apply(e,J,d,this.synthProps.filterSmoothingFactor),be.apply(e,J,S,this.synthProps.volumeEnvelopeSmoothingFactor),this.panAndMixVoice(e,J,t,n,s,a,o,I,r),e.finished)}var Se={pitchWheelRange:0,fineTuning:1,coarseTuning:2,modulationDepth:5,resetParameters:16383},Ze={partParameter:1,awe32:127,SF2:120},fe={vibratoRate:8,vibratoDepth:9,vibratoDelay:10,TVFFilterCutoff:32,TVFFilterResonance:33,EGAttackTime:99,EGDecayTime:100,EGReleaseTime:102};function Ii(e){this.midiControllers[m.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 HA.Idle:break;case HA.NRPFine:{if(this.lockGSNRPNParams)return;let n=this.midiControllers[m.nonRegisteredParameterMSB]>>7,s=this.midiControllers[m.nonRegisteredParameterLSB]>>7,a=this.midiControllers[m.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 Ze.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 fe.vibratoRate:if(e===64)return;A(),this.channelVibrato.rate=e/64*8,t("Vibrato rate",`${e} = ${this.channelVibrato.rate}`,"Hz");break;case fe.vibratoDepth:if(e===64)return;A(),this.channelVibrato.depth=e/2,t("Vibrato depth",`${e} = ${this.channelVibrato.depth}`,"cents of detune");break;case fe.vibratoDelay:if(e===64)return;A(),this.channelVibrato.delay=e/64/3,t("Vibrato delay",`${e} = ${this.channelVibrato.delay}`,"seconds");break;case fe.TVFFilterCutoff:this.controllerChange(m.brightness,e),t("Filter cutoff",e.toString(),"");break;case fe.TVFFilterResonance:this.controllerChange(m.filterResonance,e),t("Filter resonance",e.toString(),"");break;case fe.EGAttackTime:this.controllerChange(m.attackTime,e),t("EG attack time",e.toString(),"");break;case fe.EGDecayTime:this.controllerChange(m.decayTime,e),t("EG decay time",e.toString(),"");break;case fe.EGReleaseTime:this.controllerChange(m.releaseTime,e),t("EG release time",e.toString(),"");break}break;case Ze.awe32:break;case Ze.SF2:{if(s>100)break;let o=this.customControllers[iA.sf2NPRNGeneratorLSB],I=(e<<7|a)-8192;this.setGeneratorOffset(o,I);break}}break}case HA.RPCoarse:case HA.RPFine:{let n=this.midiControllers[m.registeredParameterMSB]|this.midiControllers[m.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 Se.pitchWheelRange:this.midiControllers[SA+AA.pitchWheelRange]=e<<7,t("Pitch wheel range",e.toString(),"semitones");break;case Se.coarseTuning:{let s=e-64;this.setCustomController(iA.channelTuningSemitones,s),t("Coarse tuning",s.toString(),"semitones");break}case Se.fineTuning:this.setTuning(e-64,!1);break;case Se.modulationDepth:this.setModulationDepth(e*100);break;case Se.resetParameters:this.resetParameters();break}}}}var gi=[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 ci(e,A,t){let n=(C,u,d)=>Math.max(u,Math.min(d,C)),s=C=>Math.max(-32768,1200*Math.log2(C/1e3)),a=C=>6900+1200*Math.log2(C/440),o=t<<7|A;o-=8192;let I=gi[e];I||tA(`Invalid AWE32 LSB: %c${e}`,E.unrecognized);let r,g,c,h;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:c=A*7.5,this.setGeneratorOverride(I,c);break;case i.fineTune:this.setGeneratorOverride(I,o,!0);break;case i.modLfoToPitch:case i.vibLfoToPitch:h=n(o,-127,127)*9.375,this.setGeneratorOverride(I,h,!0);break;case i.modEnvToPitch:h=n(o,-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(o,-64,63)*56.25,this.setGeneratorOverride(I,h,!0);break;case i.modEnvToFilterFc:h=n(o,-64,63)*56.25,this.setGeneratorOverride(I,h);break;case i.chorusEffectsSend:case i.reverbEffectsSend:this.setGeneratorOverride(I,n(o,0,255)*(1e3/255));break}}function Ei(e){switch(this.midiControllers[m.dataEntryLSB]=e<<7,this.dataEntryState){default:break;case HA.RPCoarse:case HA.RPFine:{switch(this.midiControllers[m.registeredParameterMSB]|this.midiControllers[m.registeredParameterLSB]>>7){default:break;case Se.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 Se.fineTuning:{let n=this.customControllers[iA.channelTuning]<<7|e;this.setTuning(n*.01220703125);break}case Se.modulationDepth:{let n=this.customControllers[iA.modulationMultiplier]*50+e/128*100;this.setModulationDepth(n);break}case 16383:this.resetParameters();break}break}case HA.NRPFine:{let A=this.midiControllers[m.nonRegisteredParameterMSB]>>7,t=this.midiControllers[m.nonRegisteredParameterLSB]>>7;if(A===Ze.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 Ze.awe32:ci.call(this,t,e,this.midiControllers[m.dataEntryMSB]>>7);break}}}}function Bi(e,A,t=!0){if(e>127)throw new Error("Invalid MIDI Controller.");if(e>=m.modulationWheelLSB&&e<=m.effectControl2LSB&&e!==m.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 m.allNotesOff:this.stopAllNotes();break;case m.allSoundOff:this.stopAllNotes(!0);break;case m.bankSelect:this.setBankMSB(A),this.channelNumber%16===ye&&mA.isSystemXG(this.channelSystem)&&this.setBankMSB(127);break;case m.bankSelectLSB:this.setBankLSB(A);break;case m.registeredParameterLSB:this.dataEntryState=HA.RPFine;break;case m.registeredParameterMSB:this.dataEntryState=HA.RPCoarse;break;case m.nonRegisteredParameterMSB:this.customControllers[iA.sf2NPRNGeneratorLSB]=0,this.dataEntryState=HA.NRPCoarse;break;case m.nonRegisteredParameterLSB:this.midiControllers[m.nonRegisteredParameterMSB]>>7===Ze.SF2&&(this.customControllers[iA.sf2NPRNGeneratorLSB]%100!==0&&(this.customControllers[iA.sf2NPRNGeneratorLSB]=0),A===100?this.customControllers[iA.sf2NPRNGeneratorLSB]+=100:A===101?this.customControllers[iA.sf2NPRNGeneratorLSB]+=1e3:A===102?this.customControllers[iA.sf2NPRNGeneratorLSB]+=1e4:A<100&&(this.customControllers[iA.sf2NPRNGeneratorLSB]+=A)),this.dataEntryState=HA.NRPFine;break;case m.dataEntryMSB:this.dataEntryCoarse(A);break;case m.dataEntryLSB:this.dataEntryFine(A);break;case m.resetAllControllers:this.resetControllersRP15Compliant();break;case m.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 gt={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 Ci(e){let A=0;gt[e]!==void 0&&(A=gt[e]);let t=null,n=null;for(let s of Object.keys(gt)){let a=parseInt(s);a<e&&(t===null||a>t)&&(t=a),a>e&&(n===null||a<n)&&(n=a)}if(t!==null&&n!==null){let s=gt[t],a=gt[n];A=s+(e-t)*(a-s)/(n-t)}return A/40}function hi(e,A){return Ci(e)*A}function li(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){tA(`No preset for channel ${this.channelNumber}!`);return}let t=e+this.channelTransposeKeyShift+this.customControllers[iA.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,c=this.midiControllers[m.portamentoTime]>>7,h=this.midiControllers[m.portamentoControl]>>7;if(!this.drumChannel&&h!==n&&this.midiControllers[m.portamentoOnOff]>=8192&&c>0){if(h>0){let S=Math.abs(n-h);g=hi(c,S),r=h}this.controllerChange(m.portamentoControl,n)}let C=this.synthProps.getVoices(this.channelNumber,n,A,t),u=0;this.randomPan&&(u=Math.round(Math.random()*1e3-500));let d=this.voices;C.forEach(S=>{S.portamentoFromKey=r,S.portamentoDuration=g,S.overridePan=u,S.gain=I,this.sysExModulators.modulatorList.forEach(O=>{let X=O.mod,J=S.modulators.findIndex(Y=>cA.isIdentical(Y,X));J!==-1?S.modulators[J]=cA.copyFrom(X):S.modulators.push(cA.copyFrom(X))}),this.generatorOverridesEnabled&&this.generatorOverrides.forEach((O,X)=>{O!==Zs&&(S.generators[X]=O)});let p=S.exclusiveClass;p!==0&&d.forEach(O=>{O.exclusiveClass===p&&O.exclusiveRelease(this.synth.currentSynthTime)}),this.computeModulators(S);let k=S.modulatedGenerators[i.startAddrsOffset]+S.modulatedGenerators[i.startAddrsCoarseOffset]*32768,w=S.modulatedGenerators[i.endAddrOffset]+S.modulatedGenerators[i.endAddrsCoarseOffset]*32768,M=S.modulatedGenerators[i.startloopAddrsOffset]+S.modulatedGenerators[i.startloopAddrsCoarseOffset]*32768,H=S.modulatedGenerators[i.endloopAddrsOffset]+S.modulatedGenerators[i.endloopAddrsCoarseOffset]*32768,b=S.sample,B=O=>Math.max(0,Math.min(b.sampleData.length-1,O));if(b.cursor=B(b.cursor+k),b.end=B(b.end+w),b.loopStart=B(b.loopStart+M),b.loopEnd=B(b.loopEnd+H),b.loopEnd<b.loopStart){let O=b.loopStart;b.loopStart=b.loopEnd,b.loopEnd=O}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),d.push(...C),this.sendChannelProperty(),this.synthProps.callEvent("noteOn",{midiNote:e,channel:this.channelNumber,velocity:A})}function di(e){if(e>127||e<0){tA("Received a noteOn for note",e,"Ignoring.");return}let A=e+this.channelTransposeKeyShift+this.customControllers[iA.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 Qi(e){if(this.lockPreset)return;this.patch.program=e;let A=this.synth.soundBankManager.getPreset(this.patch,this.channelSystem);A||(tA("No presets! Using empty fallback."),A=new ze(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 ui=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 WA(I,CA.linear,r,n),new WA,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)}},fi=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*=fi,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 mi(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])))}be.recalculate(e),_e.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 c=g.destination;if(!I.has(c)){let h=s[c];bs(this.midiControllers,g,e),n.forEach(u=>{u.destination===c&&(h+=u.currentValue)});let C=T[c];a[c]=Math.max(C.min,Math.min(h,C.max)),I.add(c)}}}),[...I].some(g=>o.has(g))&&be.recalculate(e),_e.recalculate(e)}var Si=class{midiControllers=new Int16Array(bn);lockedControllers=Array(bn).fill(!1);customControllers=new Float32Array(Aa);channelTransposeKeyShift=0;channelOctaveTuning=new Int8Array(128);sysExModulators=new ui;drumChannel=!1;randomPan=!1;dataEntryState=HA.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=li.bind(this);noteOff=di.bind(this);programChange=Qi.bind(this);controllerChange=Bi.bind(this);resetControllers=mo.bind(this);resetPreset=So.bind(this);resetControllersRP15Compliant=po.bind(this);resetParameters=yo.bind(this);dataEntryFine=Ei.bind(this);dataEntryCoarse=Ii.bind(this);channelTuningCents=0;generatorOffsets=new Int16Array(Mn);generatorOffsetsEnabled=!1;generatorOverrides=new Int16Array(Mn);generatorOverridesEnabled=!1;renderVoice=ri.bind(this);panAndMixVoice=Vo.bind(this);computeModulators=mi.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[m.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[iA.channelTransposeFine]/100;this.drumChannel&&!A||e===n||(t!==this.channelTransposeKeyShift&&this.stopAllNotes(),this.channelTransposeKeyShift=t,this.setCustomController(iA.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(iA.modulationMultiplier,e/50)}setTuning(e,A=!0){e=Math.round(e),this.setCustomController(iA.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[iA.channelTuning]+this.customControllers[iA.channelTransposeFine]+this.customControllers[iA.masterTuning]+this.customControllers[iA.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(mA.isSystemXG(this.channelSystem))if(e)this.setBankMSB(mA.getDrumBank(this.channelSystem)),this.setBankLSB(0);else{if(this.channelNumber%16===ye)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(Zs),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[iA.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[iA.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}))}},yn=20;async function pi(e,A,t,n,s,a,o){let I=0,r=0,g=[];for(let C of e.samples){n&&a&&await C.compressSample(a),s&&C.setAudioData(C.getAudioData(),C.sampleRate);let u=C.getRawData(!0);I++,await o?.(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),r+=u.length+(C.isCompressed?0:92),g.push(u)}r%2!==0&&r++;let c=new q(r+yn);kA(c,"LIST"),lt(c,r+yn-8,4),kA(c,"sdta"),kA(c,"smpl"),lt(c,r,4);let h=0;return e.samples.forEach((C,u)=>{let d=g[u];c.set(d,h+yn);let S,p;C.isCompressed?(S=h,p=S+d.length):(S=h/2,p=S+d.length/2,h+=92),h+=d.length,A.push(S),t.push(p)}),c}var yi=48e3,Zt=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(yi),A=this.getAudioData());let t=await e(A,this.sampleRate);this.setCompressedData(t)}catch(A){tA(`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){tA(`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 q(A.buffer)}decodeVorbis(){if(this.audioData)return this.audioData;if(!this.compressedData)throw new Error("Compressed data is missing.");try{let A=Kt.decode(this.compressedData).data[0];if(A===void 0)return tA(`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 tA(`Error decoding sample ${this.name}: ${e}`),new Float32Array(this.loopEnd+1)}}},ki=class extends Zt{constructor(){super("",44100,60,0,wA.monoSample,0,0)}},Kn=16,Di=class extends Zt{linkedSampleIndex;s16leData;startByteOffset;endByteOffset;sampleID;constructor(e,A,t,n,s,a,o,I,r,g,c,h){let C=(g&Kn)>0;g&=~Kn,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=h;let u=c instanceof q?c.currentIndex:0;c instanceof q?C?(this.loopStart+=this.startByteOffset/2,this.loopEnd+=this.startByteOffset/2,this.setCompressedData(c.slice(this.startByteOffset/2+u,this.endByteOffset/2+u))):this.s16leData=c.slice(u+this.startByteOffset,u+this.endByteOffset):this.setAudioData(c.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}`,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 tA(`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=wi(s,e.data,A);n.push(a),s++}return n.pop(),t&&n.forEach(a=>a.getLinkedSample(n)),n}function wi(e,A,t){let n=lA(A,20),s=L(A,4)*2,a=L(A,4)*2,o=L(A,4),I=L(A,4),r=L(A,4),g=A[A.currentIndex++];g>127&&(g=60);let c=Ja(A[A.currentIndex++]),h=L(A,2),C=L(A,2);return new Di(n,s,a,o,I,r,g,c,h,C,t,e)}function Fi(e,A,t){let s=46*(e.samples.length+1),a=new q(s),o=new q(s),I=0;e.samples.forEach((c,h)=>{kA(a,c.name.substring(0,20),20),kA(o,c.name.substring(20),20);let C=A[h];rA(a,C),o.currentIndex+=4;let u=t[h];rA(a,u),o.currentIndex+=4;let d=c.loopStart+C,S=c.loopEnd+C;c.isCompressed&&(d-=C,S-=C),rA(a,d),rA(a,S),rA(a,c.sampleRate),a[a.currentIndex++]=c.originalKey,a[a.currentIndex++]=c.pitchCorrection,o.currentIndex+=14;let p=c.linkedSample?e.samples.indexOf(c.linkedSample):0;_(a,Math.max(0,p)&65535),_(o,Math.max(0,p)>>16),I=Math.max(I,p);let k=c.sampleType;c.isCompressed&&(k|=Kn),_(a,k),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?Yo:xo,r=0,g=new Array,c=0,h=new Array,C=new Array,u=new Array,d=0,S=new Array,p=J=>{g.push(r);let Y=J.getWriteGenerators(e);r+=Y.length,C.push(...Y),h.push(c);let K=J.modulators;c+=K.length,u.push(...K)};t.forEach(J=>{S.push(d),p(J.globalZone),J.zones.forEach(p),d+=J.zones.length+1}),C.push(new FA(0,0,!1)),u.push(new fA(0,0,0,0,0)),g.push(r),h.push(c),S.push(d);let k=C.length*Ds,w=new q(k);C.forEach(J=>J.write(w));let M=u.length*ht,H=new q(M);u.forEach(J=>J.write(H));let b=h.length*To,B={pdta:new q(b),xdta:new q(b)};h.forEach((J,Y)=>{let K=g[Y];_(B.pdta,K&65535),_(B.pdta,J&65535),_(B.xdta,K>>16),_(B.xdta,J>>16)});let O=(t.length+1)*I,X={pdta:new q(O),xdta:new q(O)};return t.forEach((J,Y)=>J.write(X,S[Y])),A?(kA(X.pdta,"EOP",20),X.pdta.currentIndex+=4,_(X.pdta,d&65535),X.pdta.currentIndex+=12,kA(X.xdta,"",20),X.xdta.currentIndex+=4,_(X.xdta,d>>16),X.xdta.currentIndex+=12):(kA(X.pdta,"EOI",20),_(X.pdta,d&65535),kA(X.xdta,"",20),_(X.xdta,d>>16)),{writeXdta:Math.max(r,c,d)>65535,gen:{pdta:IA(n,w),xdta:IA(s,new q(Ds))},mod:{pdta:IA(s,H),xdta:IA(s,new q(ht))},bag:{pdta:IA(a,B.pdta),xdta:IA(a,B.xdta)},hdr:{pdta:IA(o,X.pdta),xdta:IA(o,X.xdta)}}}var Vn={compress:!1,compressionFunction:void 0,progressFunction:void 0,writeDefaultModulators:!0,writeExtendedLimits:!0,decompress:!1};async function Gi(e,A=Vn){let t=jn(A,Vn);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),YA("%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,H)=>{n.push(IA(M,oe(H,!0,!0)))},a=new q(4);if(_(a,e.soundBankInfo.version.major),_(a,e.soundBankInfo.version.minor),n.push(IA("ifil",a)),e.soundBankInfo.romVersion){let M=new q(4);_(M,e.soundBankInfo.romVersion.major),_(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,H]of Object.entries(e.soundBankInfo)){let b=M,B=H;if(B)switch(b){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=>Ea.findIndex(H=>cA.isIdentical(H,M,!0))===-1)&&t?.writeDefaultModulators){let M=e.defaultModulators;y(`%cWriting %c${M.length}%c default modulators...`,E.info,E.recognized,E.info);let H=ht+M.length*ht,b=new q(H);for(let B of M)B.write(b);lt(b,0,ht),n.push(IA("DMOD",b))}W(),y("%cWriting SDTA...",E.info);let r=[],g=[],c=await pi(e,r,g,t.compress,t.decompress,t?.compressionFunction,t?.progressFunction);y("%cWriting PDTA...",E.info),y("%cWriting SHDR...",E.info);let h=Fi(e,r,g);YA("%cWriting instruments...",E.info);let C=Ls(e,!1);W(),YA("%cWriting presets...",E.info);let u=Ls(e,!0);W();let d=[u.hdr,u.bag,u.mod,u.gen,C.hdr,C.bag,C.mod,C.gen,h],S=MA("pdta",d.map(M=>M.pdta),!0);if(t.writeExtendedLimits&&(C.writeXdta||u.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",d.map(H=>H.xdta),!0);n.push(M)}let k=MA("INFO",n,!0);y("%cWriting the output file...",E.info);let w=MA("RIFF",[oe("sfbk"),k,c,S]);return y(`%cSaved succesfully! Final file size: %c${w.length}`,E.info,E.recognized),W(),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 W(),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(lA(e.data,4),...A);let t=[];for(;e.data.length>e.data.currentIndex;)t.push(aA(e.data));return t}},ct=20,kn=16,We=class Ct extends $e{gain=0;unityNote=60;fineTune=0;loops=new Array;fulOptions=2;static copyFrom(A){let t=new Ct;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 Ct,n=L(A.data,4);if(n!==ct&&tA(`Wsmp cbSize mismatch: got ${n}, expected ${ct}.`),t.unityNote=L(A.data,2),t.fineTune=_n(A.data[A.data.currentIndex++],A.data[A.data.currentIndex++]),t.gain=L(A.data,4)|0,t.fulOptions=L(A.data,4),L(A.data,4)!==0){let a=L(A.data,4);a!==kn&&tA(`CbSize for loop in wsmp mismatch. Expected ${ct}, got ${a}.`);let o=L(A.data,4),I=L(A.data,4),r=L(A.data,4);t.loops.push({loopStart:I,loopLength:r,loopType:o})}return t}static fromSFSample(A){let t=new Ct;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 Ct;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,c=s.loopStart+s.loopLength-t.loopEnd;if(r!==0){let h=r%32768;A.setGenerator(i.startloopAddrsOffset,h);let C=Math.trunc(r/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 q(ct+this.loops.length*kn);return rA(A,ct),_(A,this.unityNote),_(A,this.fineTune),rA(A,this.gain),rA(A,this.fulOptions),rA(A,this.loops.length),this.loops.forEach(t=>{rA(A,kn),rA(A,t.loopType),rA(A,t.loopStart),rA(A,t.loopLength)}),IA("wsmp",A)}},Dn={PCM:1,ALAW:6};function Ri(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=L(e,A);a?I[r]=g/s-.5:(g>=t&&(g-=n),I[r]=g/s)}return I}function Mi(e,A){let t=e.length/A,n=new Float32Array(t);for(let s=0;s<n.length;s++){let a=L(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 bi=class extends Zt{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:tA(`Failed to decode sample. Unknown wFormatTag: ${this.wFormatTag}`),e=new Float32Array(this.rawData.length/this.bytesPerSample);break;case Dn.PCM:e=Ri(this.rawData,this.bytesPerSample);break;case Dn.ALAW:e=Mi(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===Dn.PCM&&this.bytesPerSample===2?this.rawData:this.encodeS16LE()}},Ns=class Xn extends $e{waveSample=new We;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(u=>u.header==="fmt ");if(!n)throw new Error("No fmt chunk in the wave file!");let s=L(n.data,2),a=L(n.data,2);if(a!==1)throw new Error(`Only mono samples are supported. Fmt reports ${a} channels.`);let o=L(n.data,4);L(n.data,4),L(n.data,2);let r=L(n.data,2)/8,g=t.find(u=>u.header==="data");if(!g)throw new Error("No data chunk in the WAVE chunk!");let c=new Xn(s,r,o,g),h=pe(t,"INFO");if(h){let u=aA(h.data);for(;u.header!=="INAM"&&h.data.currentIndex<h.data.length;)u=aA(h.data);u.header==="INAM"&&(c.name=lA(u.data,u.size).trim())}let C=t.find(u=>u.header==="wsmp");return C&&(c.waveSample=We.read(C)),c}static fromSFSample(A){let t=A.getRawData(!1),n=new Xn(1,2,A.sampleRate,new Ys("data",t.length,new q(t.buffer)));return n.name=A.name,n.waveSample=We.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 bi(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",oe(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 q(18);return _(A,this.wFormatTag),_(A,1),rA(A,this.sampleRate),rA(A,this.sampleRate*2),_(A,2),_(A,this.bytesPerSample*8),IA("fmt ",A)}},Sa=new fA(219,0,i.reverbEffectsSend,1e3,0),pa=new fA(221,0,i.chorusEffectsSend,1e3,0),vi=new fA(129,0,i.vibLfoToPitch,0,0),Li=new fA(13,0,i.vibLfoToPitch,0,0),XA=class Zn{source;transform;bipolar;invert;constructor(A=U.none,t=CA.linear,n=!1,s=!1){this.source=A,this.transform=t,this.bipolar=n,this.invert=s}get sourceName(){return Object.keys(U).find(A=>U[A]===this.source)??this.source.toString()}get transformName(){return Object.keys(CA).find(A=>CA[A]===this.transform)??this.transform.toString()}static copyFrom(A){return new Zn(A.source,A.transform,A.bipolar,A.invert)}static fromSFSource(A){let t;if(A.isCC)switch(A.index){case m.modulationWheel:t=U.modulationWheel;break;case m.mainVolume:t=U.volume;break;case m.pan:t=U.pan;break;case m.expressionController:t=U.expression;break;case m.chorusDepth:t=U.chorus;break;case m.reverbDepth:t=U.reverb;break}else switch(A.index){case AA.noController:t=U.none;break;case AA.noteOnKeyNum:t=U.keyNum;break;case AA.noteOnVelocity:t=U.velocity;break;case AA.pitchWheel:t=U.pitchWheel;break;case AA.pitchWheelRange:t=U.pitchWheelRange;break;case AA.polyPressure:t=U.polyPressure;break;case AA.channelPressure:t=U.channelPressure}if(t!==void 0)return new Zn(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 U.modLfo:case U.vibratoLfo:case U.coarseTune:case U.fineTune:case U.modEnv:return;case U.keyNum:A=AA.noteOnKeyNum;break;case U.none:A=AA.noController;break;case U.modulationWheel:A=m.modulationWheel,t=!0;break;case U.pan:A=m.pan,t=!0;break;case U.reverb:A=m.reverbDepth,t=!0;break;case U.chorus:A=m.chorusDepth,t=!0;break;case U.expression:A=m.expressionController,t=!0;break;case U.volume:A=m.mainVolume,t=!0;break;case U.velocity:A=AA.noteOnVelocity;break;case U.polyPressure:A=AA.polyPressure;break;case U.channelPressure:A=AA.channelPressure;break;case U.pitchWheel:A=AA.pitchWheel;break;case U.pitchWheelRange:A=AA.pitchWheelRange;break}if(A!==void 0)return new WA(A,this.transform,t,this.bipolar,this.invert)}},Ni=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]),Et=class Re{source;control;destination;scale;transform;constructor(A=new XA,t=new XA,n,s,a){this.source=A,this.control=t,this.destination=n,this.transform=s,this.scale=a}get isStaticParameter(){return this.source.source===U.none&&this.control.source===U.none}get shortScale(){return this.scale>>16}get transformName(){return Object.keys(CA).find(A=>CA[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=L(A,2),n=L(A,2),s=L(A,2),a=L(A,2),o=L(A,4)|0,I=a&15,r=a>>4&15,g=Me(a,8),c=Me(a,9),h=new XA(n,r,g,c),C=a>>10&15,u=Me(a,14),d=Me(a,15),S=new XA(t,C,u,d);return new Re(S,h,s,I,o)}static fromSFModulator(A,t){let n=c=>{tA(`Failed converting SF modulator into DLS:
7
7
  ${A.toString()}
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 i=we.fromSFDestination(A.destination,A.transformAmount);if(i===void 0){n("Invalid destination");return}let o=A.transformAmount,r;if(typeof i=="number")r=i;else if(r=i.destination,o=i.amount,i.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(i.source,QA.linear,i.isBipolar)}let g=new we(s,a,r,0,o<<16);t.connectionBlocks.push(g)}static copyFrom(A){return new we(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=>{tA(`Failed converting SF2 generator into DLS:
8
+ (${c})`)};if(A.transformType!==0){n("Absolute transform type is not supported");return}if(cA.isIdentical(A,pa,!0)||cA.isIdentical(A,Sa,!0))return;let s=XA.fromSFSource(A.primarySource);if(!s){n("Invalid primary source");return}let a=XA.fromSFSource(A.secondarySource);if(!a){n("Invalid secondary source");return}let o=Re.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!==U.none){if(a.source!==U.none&&s.source!==U.none){n("Articulation generators with secondary source are not supported");return}s.source!==U.none&&(a=s),s=new XA(o.source,CA.linear,o.isBipolar)}let g=new Re(s,a,r,0,I<<16);t.connectionBlocks.push(g)}static copyFrom(A){return new Re(XA.copyFrom(A.source),XA.copyFrom(A.control),A.destination,A.transform,A.scale)}static fromSFGenerator(A,t){if(Ni.has(A.generatorType))return;let n=r=>{tA(`Failed converting SF2 generator into DLS:
9
9
  ${A.toString()}
10
- (${r})`)},s=we.fromSFDestination(A.generatorType,A.generatorValue);if(s===void 0){n("Invalid type");return}let a=new VA,i,o=A.generatorValue;typeof s=="number"?i=s:(i=s.destination,o=s.amount,a.source=s.source,a.bipolar=s.isBipolar),t.connectionBlocks.push(new we(a,new VA,i,0,o<<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
+ (${r})`)},s=Re.fromSFDestination(A.generatorType,A.generatorValue);if(s===void 0){n("Invalid type");return}let a=new XA,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 Re(a,new XA,o,0,I<<16))}static fromSFDestination(A,t){switch(A){default:return;case i.initialAttenuation:return{destination:G.gain,amount:-t,isBipolar:!1,source:U.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:U.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:U.none};case i.releaseModEnv:return G.modEnvRelease;case i.initialFilterFc:return G.filterCutoff;case i.initialFilterQ:return G.filterQ;case i.modEnvToFilterFc:return{source:U.modEnv,destination:G.filterCutoff,amount:t,isBipolar:!1};case i.modEnvToPitch:return{source:U.modEnv,destination:G.pitch,amount:t,isBipolar:!1};case i.modLfoToFilterFc:return{source:U.modLfo,destination:G.filterCutoff,amount:t,isBipolar:!0};case i.modLfoToVolume:return{source:U.modLfo,destination:G.gain,amount:t,isBipolar:!0};case i.modLfoToPitch:return{source:U.modLfo,destination:G.pitch,amount:t,isBipolar:!0};case i.vibLfoToPitch:return{source:U.vibratoLfo,destination:G.pitch,amount:t,isBipolar:!0};case i.keyNumToVolEnvHold:return{source:U.keyNum,destination:G.volEnvHold,amount:t,isBipolar:!0};case i.keyNumToVolEnvDecay:return{source:U.keyNum,destination:G.volEnvDecay,amount:t,isBipolar:!0};case i.keyNumToModEnvHold:return{source:U.keyNum,destination:G.modEnvHold,amount:t,isBipolar:!0};case i.keyNumToModEnvDecay:return{source:U.keyNum,destination:G.modEnvDecay,amount:t,isBipolar:!0};case i.scaleTuning:return{source:U.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
- Destination: ${this.destinationName}`}write(){let A=new K(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),rA(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)`,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,i=g=>{y(`%cFailed converting DLS articulator into SF2:
14
+ Destination: ${this.destinationName}`}write(){let A=new q(12);_(A,this.source.source),_(A,this.control.source),_(A,this.destination);let t=this.transform|this.control.toTransformFlag()<<4|this.source.toTransformFlag()<<10;return _(A,t),rA(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)`,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 WA,o=g=>{y(`%cFailed converting DLS articulator into SF2:
16
16
  %c${this.toString()}%c
17
- (${g})`,E.warn,E.value,E.unrecognized)},o=this.toCombinedSFDestination();if(o){n=o;let g=this.control.toSFSource();if(!g){i("Invalid control");return}s=g}else{let g=this.toSFDestination();if(!g){i("Invalid destination");return}typeof g=="object"?(t=g.newAmount,n=g.gen):n=g;let c=this.source.toSFSource();if(!c){i("Invalid source");return}s=c;let h=this.control.toSFSource();if(!h){i("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 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 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 qt;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),i=n.generatorValue*-128;if(a===void 0)continue;let o=60/128*i,r=a-o;t.setGenerator(n.generatorType,i,!1),t.setGenerator(s,r,!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);Xn.verifyHeader(s,"art1","art2");let a=s.data,i=v(a,4);i!==8&&tA(`CbSize in articulation mismatch. Expected 8, got ${i}`);let o=v(a,4);for(let r=0;r<o;r++)this.connectionBlocks.push(ct.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,i=v(a,4);i!==8&&tA(`CbSize in articulation mismatch. Expected 8, got ${i}`);let o=v(a,4);for(let r=0;r<o;r++)this.connectionBlocks.push(ct.read(a))}}write(){let A=new K(8);rA(A,8),rA(A,this.connectionBlocks.length);let t=this.connectionBlocks.map(s=>s.write()),n=bA(this.mode==="dls2"?"art2":"art1",[A,...t]);return IA(this.mode==="dls2"?"lar2":"lart",n,!1,!0)}toSFZone(A){let t=(n,s,a,i)=>{let o=n/-128;if(A.setGenerator(s,o),o<=120){let r=Math.round(.46875*n),g=this.connectionBlocks.find(c=>c.isStaticParameter&&c.destination===i);g&&A.setGenerator(a,r+g.shortScale)}};for(let n of this.connectionBlocks){let s=n.shortScale,a=n.source.source,i=n.control.source,o=n.destination;if(n.isStaticParameter){n.toSFGenerator(A);continue}if(i===N.none)if(a===N.keyNum){if(o===G.pitch){A.setGenerator(I.scaleTuning,s/128);continue}if(o===G.modEnvHold||o===G.modEnvDecay||o===G.volEnvHold||o==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}}}},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),i=new Nt(a);return i.channel=s,i.fusOptions=t,i.phaseGroup=n,i}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 K(12);return W(A,this.fusOptions),W(A,this.phaseGroup),rA(A,this.channel),rA(A,this.tableIndex),IA("wlnk",A)}},Ut=class qe 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 qe(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(p=>p.header==="wsmp"),a=s?Xe.read(s):void 0,i=n.find(p=>p.header==="wlnk");if(!i){tA("Invalid DLS region: missing 'wlnk' chunk! Discarding...");return}let o=kn.read(i),r=n.find(p=>p.header==="rgnh");if(!r){tA("Invalid DLS region: missing 'rgnh' chunk! Discarding...");return}let g=A[o.tableIndex];g||qe.parsingError(`Invalid sample index: ${o.tableIndex}. Samples available: ${A.length}`),a??=g.waveSample;let c=new qe(o,a),h=v(r.data,2),C=v(r.data,2),Q=v(r.data,2),d=v(r.data,2);return Q===0&&d===0&&(d=127,Q=0),c.keyRange.max=C,c.keyRange.min=h,c.velRange.max=d,c.velRange.min=Q,c.fusOptions=v(r.data,2),c.keyGroup=v(r.data,2),r.data.length-r.data.currentIndex>=2&&(c.usLayer=v(r.data,2)),c.articulation.read(n),c}static fromSFZone(A,t){let n=Xe.fromSFZone(A),s=kn.fromSFZone(t,A),a=new qe(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 bA("rgn2",A,!0)}toSFZone(A,t){let n=t[this.waveLink.tableIndex];n||qe.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!==U[a.generatorType].def),s}writeHeader(){let A=new K(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="",i=fe(n,"INFO");if(i){let C=aA(i.data);for(;C.header!=="INAM";)C=aA(i.data);a=hA(C.data,C.data.length).trim()}a.length<1&&(a="Unnamed Instrument");let o=new Tt;o.name=a;let r=v(s.data,4),g=v(s.data,4),c=v(s.data,4);o.program=c&127,o.bankMSB=g>>>8&127,o.bankLSB=g&127,o.isGMGSDrum=g>>>31>0,MA(`%cParsing %c"${a}"%c...`,E.info,E.recognized,E.info);let h=fe(n,"lrgn");if(!h)throw z(),new Error("No region list!");o.articulation.read(n);for(let C=0;C<r;C++){let Q=aA(h.data);this.verifyHeader(Q,"LIST");let d=hA(Q.data,4);d!=="rgn "&&d!=="rgn2"&&(z(),this.parsingError(`Invalid DLS region! Expected "rgn " or "rgn2" got "${d}"`));let p=Ut.read(A,Q);p&&o.regions.push(p)}return z(),o}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,KA(`%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(){MA(`%cWriting %c${this.name}%c...`,E.info,E.recognized,E.info);let A=[this.writeHeader()],t=this.regions.map(s=>s.write());A.push(bA("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(),bA("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!==U[s.generatorType].def),A.addPresets(t),A.addInstruments(n)}writeHeader(){let A=new K(12);rA(A,this.regions.length);let t=(this.bankMSB&127)<<8|this.bankLSB&127;return this.isGMGSDrum&&(t|=1<<31),rA(A,t),rA(A,this.program&127),IA("insh",A)}},pa={progressFunction:void 0},ya=class Zn 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 K(A);KA("%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 Zn;a.soundBankInfo.name="Unnamed DLS",a.soundBankInfo.product="SpessaSynth DLS",a.soundBankInfo.comment="(no description)";let i=fe(s,"INFO");if(i)for(;i.data.currentIndex<i.data.length;){let d=aA(i.data),p=d.header,m=hA(d.data,d.size);switch(p){case"INAM":a.soundBankInfo.name=m;break;case"ICRD":a.soundBankInfo.creationDate=ts(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 o=s.find(d=>d.header==="colh");if(!o)return this.parsingError("No colh chunk!"),5;let r=v(o.data,4);y(`%cInstruments amount: %c${r}`,E.info,E.recognized);let g=fe(s,"wvpl");if(!g)return this.parsingError("No wvpl chunk!"),5;this.verifyAndReadList(g,"wvpl").forEach(d=>{a.samples.push(Ls.read(d))});let h=fe(s,"lins");if(!h)return this.parsingError("No lins chunk!"),5;let C=this.verifyAndReadList(h,"lins");MA("%cLoading instruments...",E.info),C.length!==r&&tA(`Colh reported invalid amount of instruments. Detected ${C.length}, expected ${r}`),C.forEach(d=>{a.instruments.push(Dn.read(a.samples,d))}),z();let Q=s.find(d=>d.header==="pgal");if(Q){y("%cFound the instrument aliasing chunk!",E.recognized);let d=Q.data;(d[0]!==0||d[1]!==1||d[2]!==2||d[3]!==3)&&(d.currentIndex+=4);let p=a.instruments.find(k=>fA.isXGDrums(k.bankMSB)||k.isGMGSDrum);if(!p)return tA("MobileBAE aliasing chunk without a drum preset. Aborting!"),a;let m=d.slice(d.currentIndex,d.currentIndex+128);d.currentIndex+=128;for(let k=0;k<128;k++){let w=m[k];if(w===k)continue;let M=p.regions.find(T=>T.keyRange.max===w&&T.keyRange.min===w);if(!M){tA(`Invalid drum alias ${k} to ${w}: region does not exist.`);continue}let P=Ut.copyFrom(M);P.keyRange.max=k,P.keyRange.min=k,p.regions.push(P)}for(d.currentIndex+=4;d.currentIndex<d.length;){let k=v(d,2),w=k&127,M=k>>7&127,P=d[d.currentIndex++],T=d[d.currentIndex++];T!==0&&tA(`Invalid alias byte. Expected 0, got ${T}`);let B=v(d,2),j=B&127,J=B>>7&127,H=d[d.currentIndex++];T=d[d.currentIndex++],T!==0&&tA(`Invalid alias header. Expected 0, got ${T}`);let Y=a.instruments.find(O=>O.bankLSB===j&&O.bankMSB===J&&O.program===H&&!O.isGMGSDrum);if(!Y){tA(`Invalid alias. Missing instrument: ${j}:${J}:${H}`);continue}let q=Dn.copyFrom(Y);q.bankMSB=M,q.bankLSB=w,q.program=P,a.instruments.push(q)}}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){MA("%cSaving SF2 to DLS level 2...",E.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(Ls.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){MA("%cSaving DLS...",E.info);let t=new K(4);rA(t,this.instruments.length);let n=IA("colh",t);MA("%cWriting instruments...",E.info);let s=bA("lins",this.instruments.map(m=>m.write()),!0);y("%cSuccess!",E.recognized),z(),MA("%cWriting WAVE samples...",E.info);let a=0,i=[],o=[],r=0;for(let m of this.samples){let k=m.write();await A?.progressFunction?.(m.name,r,this.samples.length),i.push(a),a+=k.length,o.push(k),r++}let g=bA("wvpl",o,!0);y("%cSucceeded!",E.recognized);let c=new K(8+4*i.length);rA(c,8),rA(c,i.length);for(let m of i)rA(c,m);let h=IA("ptbl",c);this.soundBankInfo.software="SpessaSynth";let C=[],Q=(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":Q("INAM",M);break;case"comment":Q("ICMT",M);break;case"copyright":Q("ICOP",M);break;case"creationDate":Q("ICRD",M.toISOString());break;case"engineer":Q("IENG",M);break;case"product":Q("IPRD",M);break;case"romVersion":case"version":case"soundEngine":case"romInfo":break;case"software":Q("ISFT",M);break;case"subject":Q("ISBJ",M)}}let d=bA("INFO",C,!0);y("%cCombining everything...");let p=bA("RIFF",[ne("DLS "),n,s,h,g,d]);return y("%cSaved successfully!",E.recognized),z(),p.buffer}toSF(){KA("%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=Ot.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(i=>{n.find(o=>i.matches(o))===void 0&&n.push(i)})}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 o=0;o<128;o++)t[o]=o/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 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 i=new We(A);return i.name="Saw Wave",i.createZone(s),A.addPresets(i),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=qn){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 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 i=0;for(let o=0;o<s.zones.length;o++){let r=s.zones[o],g=r.keyRange,c=r.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&&r.sample&&(y(`%c${r.sample.name}%c removed from %c${s.name}%c.`,E.recognized,E.info,E.recognized,E.info),s.deleteZone(o)&&(i++,o--,y(`%c${r.sample.name}%c deleted`,E.recognized,E.info)),r.sample.useCount<1&&this.deleteSample(r.sample))}return i};KA("%cTrimming sound bank...",E.info);let n=A.getUsedProgramsAndKeys(this);MA("%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],i=n.get(a);if(i===void 0)y(`%cDeleting preset %c${a.name}%c and its zones`,E.info,E.recognized,E.info),this.deletePreset(a),s--;else{let o=[...i].map(g=>{let c=g.split("-");return{key:parseInt(c[0]),velocity:parseInt(c[1])}});MA(`%cTrimming %c${a.name}`,E.info,E.recognized),y(`Keys for ${a.name}:`,o);let r=0;for(let g=0;g<a.zones.length;g++){let c=a.zones[g],h=c.keyRange,C=c.velRange,Q=!1;for(let d of o)if(d.key>=h.min&&d.key<=h.max&&d.velocity>=C.min&&d.velocity<=C.max&&c.instrument){Q=!0;let p=t(c.instrument,o);y(`%cTrimmed off %c${p}%c zones from %c${c.instrument.name}`,E.info,E.recognized,E.info,E.recognized);break}!Q&&c.instrument&&(r++,a.deleteZone(g),c.instrument.useCount<1&&this.deleteInstrument(c.instrument),g--)}y(`%cTrimmed off %c${r}%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)}}},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 Ns(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(i=>i.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,i=e.mod,o=0,r=0;for(let g of s)for(let c=0;c<g.zonesCount;c++){let h=a[r++],C=a[r],Q=A.slice(h,C),d=i[o++],p=i[o],m=t.slice(d,p);Q.find(k=>k.generatorType===I.instrument)!==void 0?g.createSoundFontZone(m,Q,n):(g.globalZone.addGenerators(...Q),g.globalZone.addModulators(...m))}}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 Us(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(i=>i.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,i=e.mod,o=0,r=0;for(let g of s)for(let c=0;c<g.zonesCount;c++){let h=a[r++],C=a[r],Q=A.slice(h,C),d=i[o++],p=i[o],m=t.slice(d,p);Q.find(k=>k.generatorType===I.sampleID)?g.createSoundFontZone(m,Q,n):(g.globalZone.addGenerators(...Q),g.globalZone.addModulators(...m))}}var To=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 No(this,e,A,t);return this.zones.push(n),n}};function Ts(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 wn(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++]),i=v(t,2),o=v(t,2);A.push(new mA(n,i,s,a,o))}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 K(e);KA("%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",i=aA(t);this.verifyHeader(i,"list");let o=hA(i.data,4);if(o!=="INFO")throw z(),new SyntaxError(`Invalid soundFont! Expected "INFO" or "${o}"`);let r;for(;i.data.length>i.data.currentIndex;){let V=aA(i.data),F=ee(V.data,V.data.length),b=V.header;switch(b){case"ifil":case"iver":let X=v(V.data,2),nA=v(V.data,2);b==="ifil"?this.soundBankInfo.version={major:X,minor:nA}:this.soundBankInfo.romVersion={major:X,minor:nA};break;case"DMOD":{this.defaultModulators=wn(V),this.customDefaultModulators=!0;break}case"LIST":{hA(V.data,4)==="xdta"&&(y("%cExtended SF2 found!",E.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 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=Ot.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 Q=aA(t);this.verifyHeader(Q,"list"),hA(Q.data,4);let d=aA(Q.data);this.verifyHeader(d,"phdr");let p=aA(Q.data);this.verifyHeader(p,"pbag");let m=aA(Q.data);this.verifyHeader(m,"pmod");let k=aA(Q.data);this.verifyHeader(k,"pgen");let w=aA(Q.data);this.verifyHeader(w,"inst");let M=aA(Q.data);this.verifyHeader(M,"ibag");let P=aA(Q.data);this.verifyHeader(P,"imod");let T=aA(Q.data);this.verifyHeader(T,"igen");let B=aA(Q.data);this.verifyHeader(B,"shdr"),y("%cParsing samples...",E.info),t.currentIndex=this.sampleDataStartIndex;let j=bs(B,C,r===void 0);if(r&&g.shdr){let V=bs(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=Ns(T),H=wn(P),Y=Ts(w);if(r&&g.inst){let V=Ts(g.inst);V.length===Y.length&&(Y.forEach((F,b)=>{F.name+=V[b].name,F.zoneStartIndex|=V[b].zoneStartIndex}),Y.forEach((F,b)=>{b<Y.length-1&&(F.zonesCount=Y[b+1].zoneStartIndex-F.zoneStartIndex)}))}Y.forEach(V=>V.name=V.name.trim()),this.instruments.push(...Y);let q=Mt(M);if(r&&g.ibag){let V=Mt(g.ibag);for(let F=0;F<q.mod.length;F++)q.mod[F]|=V.mod[F]<<16;for(let F=0;F<q.gen.length;F++)q.gen[F]|=V.gen[F]<<16}Uo(q,J,H,this.samples,Y);let O=Ns(k),Z=wn(m),CA=Us(d,this);if(r&&g.phdr){let V=Us(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(p);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,O,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 K(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 Hi(this.updatePresetList.bind(this));midiChannels=[];keyModifierManager=new ji;totalVoicesAmount=0;processorInitialized=Ot.isInitialized;currentSynthTime=0;sampleRate;enableEffects=!0;enableEventSystem;onEventCall;systemExclusive=_i.bind(this);resetAllControllers=di.bind(this);setMasterParameter=Fi.bind(this);getMasterParameter=Gi.bind(this);getAllMasterParameters=Ri.bind(this);getVoicesForPreset=Wi.bind(this);killVoices=Vi.bind(this);getVoices=zi.bind(this);privateProps;savedSnapshot;eventQueue=[];sampleTime;constructor(e,A=Fs){let t=zn(A,Fs);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),Di*(44100/e),Yi*(44100/e),qi*(44100/e));for(let n=0;n<Ks;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 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}`,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 i=e[0],o=e[1],r=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 Q=h.voices.length,d=C%16;h.renderAudio(t[d][0],t[d][1],i,o,r,g,n,c),this.totalVoicesAmount+=h.voices.length,h.voices.length!==Q&&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=qa){let s=()=>{let i=_n(e[0]),o=i.channel+A;switch(i.status){case R.noteOn:{let r=e[2];r>0?this.noteOn(o,e[1],r):this.noteOff(o,e[1]);break}case R.noteOff:t?this.midiChannels[o].killNote(e[1]):this.noteOff(o,e[1]);break;case R.pitchWheel:this.pitchWheel(o,e[2]<<7|e[1]);break;case R.controllerChange:this.controllerChange(o,e[1],e[2]);break;case R.programChange:this.programChange(o,e[1]);break;case R.polyPressure:this.polyPressure(o,e[0],e[1]);break;case R.channelPressure:this.channelPressure(o,e[1]);break;case R.systemExclusive:this.systemExclusive(new K(e.slice(1)),A);break;case R.reset:this.stopAllChannels(),this.resetAllControllers();break;default:break}},a=n.time;a>this.currentSynthTime?(this.eventQueue.push({callback:s.bind(this),time:a}),this.eventQueue.sort((i,o)=>i.time-o.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:i}=e;return a&&(n=128,s=0),this.privateProps.cachedVoices?.[n]?.[s]?.[i]?.[A]?.[t]}setCachedVoice(e,A,t,n){let s=e.bankMSB,a=e.bankLSB,{isGMGSDrum:i,program:o}=e;i&&(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][o]||(this.privateProps.cachedVoices[s][a][o]=[]),this.privateProps.cachedVoices[s][a][o][A]||(this.privateProps.cachedVoices[s][a][o][A]=[]),this.privateProps.cachedVoices[s][a][o][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 rs=class extends Jt{events=[];constructor(A){super(),super.copyFrom(A),this.events=[]}},Zt=class e extends Me{tracks;embeddedSoundBank=void 0;embeddedSoundBankSize;constructor(A){super(),super.copyMetadataFrom(A),this.tracks=A.tracks.map(t=>new rs(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 i=s.data.newSongList.map(o=>new Zt(o));this.post({type:"sequencerReturn",data:{type:s.type,data:{newSongList:i}},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 o=a.data.map(r=>"duration"in r?Me.copyFrom(r):Me.fromArrayBuffer(r.binary,r.fileName));s.loadNewSongList(o)}catch(i){console.error(i),this.post({type:"sequencerReturn",data:{type:"midiError",data:i},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,i;switch(a.type){case"addSoundBank":i=Qt.fromArrayBuffer(a.data.soundBankBuffer),s.addSoundBank(i,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":qs(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,i)=>{n.postMessage(a,i)}),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([Me.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){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 c=this.source.toSFSource();if(!c){o("Invalid source");return}s=c;let h=this.control.toSFSource();if(!h){o("Invalid control");return}a=h}this.transform!==CA.linear&&s.curveType===CA.linear&&(s.curveType=this.transform),n===i.initialAttenuation&&((this.source.source===U.velocity||this.source.source===U.volume||this.source.source===U.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===U.vibratoLfo&&t===G.pitch?i.vibLfoToPitch:A===U.modLfo&&t===G.pitch?i.modLfoToPitch:A===U.modLfo&&t===G.filterCutoff?i.modLfoToFilterFc:A===U.modLfo&&t===G.gain?i.modLfoToVolume:A===U.modEnv&&t===G.filterCutoff?i.modEnvToFilterFc:A===U.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}}},ya=class Wn 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(Et.copyFrom(t))})}fromSFZone(A){this.mode="dls2";let t=new Vt;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)Et.fromSFGenerator(n,this);for(let n of t.modulators)Et.fromSFModulator(n,this)}read(A){let t=pe(A,"lart"),n=pe(A,"lar2");if(t)for(this.mode="dls1";t.data.currentIndex<t.data.length;){let s=aA(t.data);Wn.verifyHeader(s,"art1","art2");let a=s.data,o=L(a,4);o!==8&&tA(`CbSize in articulation mismatch. Expected 8, got ${o}`);let I=L(a,4);for(let r=0;r<I;r++)this.connectionBlocks.push(Et.read(a))}else if(n)for(this.mode="dls2";n.data.currentIndex<n.data.length;){let s=aA(n.data);Wn.verifyHeader(s,"art2","art1");let a=s.data,o=L(a,4);o!==8&&tA(`CbSize in articulation mismatch. Expected 8, got ${o}`);let I=L(a,4);for(let r=0;r<I;r++)this.connectionBlocks.push(Et.read(a))}}write(){let A=new q(8);rA(A,8),rA(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(c=>c.isStaticParameter&&c.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===U.none)if(a===U.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(vi),cA.copyFrom(Li));for(let n of this.connectionBlocks){if(n.source.source!==U.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}}}},wn=class Tt{channel=1;tableIndex;fusOptions=0;phaseGroup=0;constructor(A){this.tableIndex=A}static copyFrom(A){let t=new Tt(A.tableIndex);return t.channel=A.channel,t.phaseGroup=A.phaseGroup,t.fusOptions=A.fusOptions,t}static read(A){let t=L(A.data,2),n=L(A.data,2),s=L(A.data,4),a=L(A.data,4),o=new Tt(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 Tt(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 q(12);return _(A,this.fusOptions),_(A,this.phaseGroup),rA(A,this.channel),rA(A,this.tableIndex),IA("wlnk",A)}},xt=class Ve extends $e{articulation=new ya;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 Ve(wn.copyFrom(A.waveLink),We.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?We.read(s):void 0,o=n.find(S=>S.header==="wlnk");if(!o){tA("Invalid DLS region: missing 'wlnk' chunk! Discarding...");return}let I=wn.read(o),r=n.find(S=>S.header==="rgnh");if(!r){tA("Invalid DLS region: missing 'rgnh' chunk! Discarding...");return}let g=A[I.tableIndex];g||Ve.parsingError(`Invalid sample index: ${I.tableIndex}. Samples available: ${A.length}`),a??=g.waveSample;let c=new Ve(I,a),h=L(r.data,2),C=L(r.data,2),u=L(r.data,2),d=L(r.data,2);return u===0&&d===0&&(d=127,u=0),c.keyRange.max=C,c.keyRange.min=h,c.velRange.max=d,c.velRange.min=u,c.fusOptions=L(r.data,2),c.keyGroup=L(r.data,2),r.data.length-r.data.currentIndex>=2&&(c.usLayer=L(r.data,2)),c.articulation.read(n),c}static fromSFZone(A,t){let n=We.fromSFZone(A),s=wn.fromSFZone(t,A),a=new Ve(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||Ve.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 q(12);return _(A,Math.max(this.keyRange.min,0)),_(A,this.keyRange.max),_(A,Math.max(this.velRange.min,0)),_(A,this.velRange.max),_(A,this.fusOptions),_(A,this.keyGroup),_(A,this.usLayer),IA("rgnh",A)}},Fn=class Ht extends $e{articulation=new ya;regions=new Array;name="Unnamed";bankLSB=0;bankMSB=0;isGMGSDrum=!1;program=0;static copyFrom(A){let t=new Ht;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(xt.copyFrom(n))}),t}static read(A,t){let n=this.verifyAndReadList(t,"ins "),s=n.find(C=>C.header==="insh");if(!s)throw W(),new Error("No instrument header!");let a="",o=pe(n,"INFO");if(o){let C=aA(o.data);for(;C.header!=="INAM";)C=aA(o.data);a=lA(C.data,C.data.length).trim()}a.length<1&&(a="Unnamed Instrument");let I=new Ht;I.name=a;let r=L(s.data,4),g=L(s.data,4),c=L(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=pe(n,"lrgn");if(!h)throw W(),new Error("No region list!");I.articulation.read(n);for(let C=0;C<r;C++){let u=aA(h.data);this.verifyHeader(u,"LIST");let d=lA(u.data,4);d!=="rgn "&&d!=="rgn2"&&(W(),this.parsingError(`Invalid DLS region! Expected "rgn " or "rgn2" got "${d}"`));let S=xt.read(A,u);S&&I.regions.push(S)}return W(),I}static fromSFPreset(A,t){let n=new Ht;return n.name=A.name,n.bankLSB=A.bankLSB,n.bankMSB=A.bankMSB,n.program=A.program,n.isGMGSDrum=A.isGMGSDrum,YA(`%cConverting %c${A.toString()}%c to DLS...`,E.info,E.value,E.info),A.toFlattenedInstrument().zones.forEach(a=>{n.regions.push(xt.fromSFZone(a,t))}),W(),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",oe(this.name,!0));return A.push(IA("INFO",n,!1,!0)),W(),MA("ins ",A,!0)}toSFPreset(A){let t=new ze(A);t.name=this.name,t.bankMSB=this.bankMSB,t.bankLSB=this.bankLSB,t.isGMGSDrum=this.isGMGSDrum,t.program=this.program;let n=new ut;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(Sa)),n.globalZone.modulators.find(s=>s.destination===i.chorusEffectsSend)===void 0&&n.globalZone.addModulators(cA.copyFrom(pa)),n.globalZone.generators=n.globalZone.generators.filter(s=>s.generatorValue!==T[s.generatorType].def),A.addPresets(t),A.addInstruments(n)}writeHeader(){let A=new q(12);rA(A,this.regions.length);let t=(this.bankMSB&127)<<8|this.bankLSB&127;return this.isGMGSDrum&&(t|=1<<31),rA(A,t),rA(A,this.program&127),IA("insh",A)}},ka={progressFunction:void 0},Da=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 q(A);YA("%cParsing DLS file...",E.info);let n=aA(t,!1);this.verifyHeader(n,"RIFF"),this.verifyText(lA(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=pe(s,"INFO");if(o)for(;o.data.currentIndex<o.data.length;){let d=aA(o.data),S=d.header,p=lA(d.data,d.size);switch(S){case"INAM":a.soundBankInfo.name=p;break;case"ICRD":a.soundBankInfo.creationDate=ss(p);break;case"ICMT":a.soundBankInfo.comment=p;break;case"ISBJ":a.soundBankInfo.subject=p;break;case"ICOP":a.soundBankInfo.copyright=p;break;case"IENG":a.soundBankInfo.engineer=p;break;case"IPRD":a.soundBankInfo.product=p;break;case"ISFT":a.soundBankInfo.software=p}}this.printInfo(a);let I=s.find(d=>d.header==="colh");if(!I)return this.parsingError("No colh chunk!"),5;let r=L(I.data,4);y(`%cInstruments amount: %c${r}`,E.info,E.recognized);let g=pe(s,"wvpl");if(!g)return this.parsingError("No wvpl chunk!"),5;this.verifyAndReadList(g,"wvpl").forEach(d=>{a.samples.push(Ns.read(d))});let h=pe(s,"lins");if(!h)return this.parsingError("No lins chunk!"),5;let C=this.verifyAndReadList(h,"lins");RA("%cLoading instruments...",E.info),C.length!==r&&tA(`Colh reported invalid amount of instruments. Detected ${C.length}, expected ${r}`),C.forEach(d=>{a.instruments.push(Fn.read(a.samples,d))}),W();let u=s.find(d=>d.header==="pgal");if(u){y("%cFound the instrument aliasing chunk!",E.recognized);let d=u.data;(d[0]!==0||d[1]!==1||d[2]!==2||d[3]!==3)&&(d.currentIndex+=4);let S=a.instruments.find(k=>mA.isXGDrums(k.bankMSB)||k.isGMGSDrum);if(!S)return tA("MobileBAE aliasing chunk without a drum preset. Aborting!"),a;let p=d.slice(d.currentIndex,d.currentIndex+128);d.currentIndex+=128;for(let k=0;k<128;k++){let w=p[k];if(w===k)continue;let M=S.regions.find(b=>b.keyRange.max===w&&b.keyRange.min===w);if(!M){tA(`Invalid drum alias ${k} to ${w}: region does not exist.`);continue}let H=xt.copyFrom(M);H.keyRange.max=k,H.keyRange.min=k,S.regions.push(H)}for(d.currentIndex+=4;d.currentIndex<d.length;){let k=L(d,2),w=k&127,M=k>>7&127,H=d[d.currentIndex++],b=d[d.currentIndex++];b!==0&&tA(`Invalid alias byte. Expected 0, got ${b}`);let B=L(d,2),O=B&127,X=B>>7&127,J=d[d.currentIndex++];b=d[d.currentIndex++],b!==0&&tA(`Invalid alias header. Expected 0, got ${b}`);let Y=a.instruments.find(P=>P.bankLSB===O&&P.bankMSB===X&&P.program===J&&!P.isGMGSDrum);if(!Y){tA(`Invalid alias. Missing instrument: ${O}:${X}:${J}`);continue}let K=Fn.copyFrom(Y);K.bankMSB=M,K.bankLSB=w,K.program=H,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),W(),a}static fromSF(A){RA("%cSaving SF2 to DLS level 2...",E.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(Fn.fromSFPreset(n,A.samples))}),y("%cConversion complete!",E.recognized),W(),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=ka){RA("%cSaving DLS...",E.info);let t=new q(4);rA(t,this.instruments.length);let n=IA("colh",t);RA("%cWriting instruments...",E.info);let s=MA("lins",this.instruments.map(p=>p.write()),!0);y("%cSuccess!",E.recognized),W(),RA("%cWriting WAVE samples...",E.info);let a=0,o=[],I=[],r=0;for(let p of this.samples){let k=p.write();await A?.progressFunction?.(p.name,r,this.samples.length),o.push(a),a+=k.length,I.push(k),r++}let g=MA("wvpl",I,!0);y("%cSucceeded!",E.recognized);let c=new q(8+4*o.length);rA(c,8),rA(c,o.length);for(let p of o)rA(c,p);let h=IA("ptbl",c);this.soundBankInfo.software="SpessaSynth";let C=[],u=(p,k)=>{C.push(IA(p,oe(k,!0)))};for(let[p,k]of Object.entries(this.soundBankInfo)){let w=p,M=k;if(M)switch(w){case"name":u("INAM",M);break;case"comment":u("ICMT",M);break;case"copyright":u("ICOP",M);break;case"creationDate":u("ICRD",M.toISOString());break;case"engineer":u("IENG",M);break;case"product":u("IPRD",M);break;case"romVersion":case"version":case"soundEngine":case"romInfo":break;case"software":u("ISFT",M);break;case"subject":u("ISBJ",M)}}let d=MA("INFO",C,!0);y("%cCombining everything...");let S=MA("RIFF",[oe("DLS "),n,s,h,g,d]);return y("%cSaved successfully!",E.recognized),W(),S.buffer}toSF(){YA("%cConverting DLS to SF2...",E.info);let A=new wa;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),W(),A}},wa=class Yt{static isSF3DecoderReady=Kt.isInitialized;soundBankInfo={name:"Unnamed",creationDate:new Date,software:"SpessaSynth",soundEngine:"E-mu 10K2",version:{major:2,minor:4}};presets=[];samples=[];instruments=[];defaultModulators=Ea.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 Yt;return s.addCompletePresets(n),s.soundBankInfo={...t.soundBankInfo},s}static async getSampleSoundBankFile(){let A=new Yt,t=new Float32Array(128);for(let I=0;I<128;I++)t[I]=I/128*2-1;let n=new ki;n.name="Saw",n.originalKey=65,n.pitchCorrection=20,n.loopEnd=127,n.setAudioData(t,44100),A.addSamples(n);let s=new ut;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 ze(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 Yt;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=ka){return Da.fromSF(this).write(A)}async writeSF2(A=Vn){return Gi(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 Zt(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 ut;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 ze(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(ae.sorter.bind(ae)),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,c=r.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&&r.sample&&(y(`%c${r.sample.name}%c removed from %c${s.name}%c.`,E.recognized,E.info,E.recognized,E.info),s.deleteZone(I)&&(o++,I--,y(`%c${r.sample.name}%c deleted`,E.recognized,E.info)),r.sample.useCount<1&&this.deleteSample(r.sample))}return o};YA("%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],o=n.get(a);if(o===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=[...o].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 r=0;for(let g=0;g<a.zones.length;g++){let c=a.zones[g],h=c.keyRange,C=c.velRange,u=!1;for(let d of I)if(d.key>=h.min&&d.key<=h.max&&d.velocity>=C.min&&d.velocity<=C.max&&c.instrument){u=!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}!u&&c.instrument&&(r++,a.deleteZone(g),c.instrument.useCount<1&&this.deleteInstrument(c.instrument),g--)}y(`%cTrimmed off %c${r}%c zones from %c${a.name}`,E.info,E.recognized,E.info,E.recognized),W()}}this.removeUnusedElements(),y("%cSound bank modified!",E.recognized),W(),W()}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 la(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(mA.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)}}},Ui=class extends FA{constructor(e){let A=e.currentIndex,t=e[A+1]<<8|e[A],n=_n(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 Ui(e.data));return A.pop(),A}var Ti=class extends Ca{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 xi(e,A,t,n,s){let a=e.gen,o=e.mod,I=0,r=0;for(let g of s)for(let c=0;c<g.zonesCount;c++){let h=a[r++],C=a[r],u=A.slice(h,C),d=o[I++],S=o[I],p=t.slice(d,S);u.find(k=>k.generatorType===i.instrument)!==void 0?g.createSoundFontZone(p,u,n):(g.globalZone.addGenerators(...u),g.globalZone.addModulators(...p))}}var Hi=class extends ze{zoneStartIndex;zonesCount=0;constructor(e,A){super(A),this.name=lA(e.data,20).replace(/\d{3}:\d{3}/,""),this.program=L(e.data,2);let t=L(e.data,2);this.bankMSB=t&127,this.isGMGSDrum=(t&128)>0,this.bankLSB=t>>8,this.zoneStartIndex=L(e.data,2),this.library=L(e.data,4),this.genre=L(e.data,4),this.morphology=L(e.data,4)}createSoundFontZone(e,A,t){let n=new Ti(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 Hi(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 Yi=class extends ha{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 Ji(e,A,t,n,s){let a=e.gen,o=e.mod,I=0,r=0;for(let g of s)for(let c=0;c<g.zonesCount;c++){let h=a[r++],C=a[r],u=A.slice(h,C),d=o[I++],S=o[I],p=t.slice(d,S);u.find(k=>k.generatorType===i.sampleID)?g.createSoundFontZone(p,u,n):(g.globalZone.addGenerators(...u),g.globalZone.addModulators(...p))}}var Pi=class extends ut{zoneStartIndex;zonesCount=0;constructor(e){super(),this.name=lA(e.data,20),this.zoneStartIndex=L(e.data,2)}createSoundFontZone(e,A,t){let n=new Yi(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 Pi(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 Gn(e){let A=[];for(;e.data.length>e.data.currentIndex;){let t=e.data,n=L(t,2),s=L(t,2),a=_n(t[t.currentIndex++],t[t.currentIndex++]),o=L(t,2),I=L(t,2);A.push(new fA(n,o,s,a,I))}return A.pop(),A}function vt(e){let A=[],t=[];for(;e.data.length>e.data.currentIndex;)t.push(L(e.data,2)),A.push(L(e.data,2));return{mod:A,gen:t}}var qi=class extends wa{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 q(e);YA("%cParsing a SoundFont2 file...",E.info),t||(W(),this.parsingError("No data provided!"));let n=aA(t,!1);this.verifyHeader(n,"riff");let s=lA(t,4).toLowerCase();if(s!=="sfbk"&&s!=="sfpk")throw W(),new SyntaxError(`Invalid soundFont! Expected "sfbk" or "sfpk" got "${s}"`);let a=s==="sfpk",o=aA(t);this.verifyHeader(o,"list");let I=lA(o.data,4);if(I!=="INFO")throw W(),new SyntaxError(`Invalid soundFont! Expected "INFO" or "${I}"`);let r;for(;o.data.length>o.data.currentIndex;){let V=aA(o.data),F=se(V.data,V.data.length),v=V.header;switch(v){case"ifil":case"iver":let Z=L(V.data,2),nA=L(V.data,2);v==="ifil"?this.soundBankInfo.version={major:Z,minor:nA}:this.soundBankInfo.romVersion={major:Z,minor:nA};break;case"DMOD":{this.defaultModulators=Gn(V),this.customDefaultModulators=!0;break}case"LIST":{lA(V.data,4)==="xdta"&&(y("%cExtended SF2 found!",E.recognized),r=V);break}case"ICRD":this.soundBankInfo.creationDate=ss(lA(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 c=aA(t,!1);this.verifyHeader(c,"list"),this.verifyText(lA(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=Kt.decode(t.buffer.slice(t.currentIndex,t.currentIndex+c.size-12)).data[0]}catch(V){throw W(),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 u=aA(t);this.verifyHeader(u,"list"),lA(u.data,4);let d=aA(u.data);this.verifyHeader(d,"phdr");let S=aA(u.data);this.verifyHeader(S,"pbag");let p=aA(u.data);this.verifyHeader(p,"pmod");let k=aA(u.data);this.verifyHeader(k,"pgen");let w=aA(u.data);this.verifyHeader(w,"inst");let M=aA(u.data);this.verifyHeader(M,"ibag");let H=aA(u.data);this.verifyHeader(H,"imod");let b=aA(u.data);this.verifyHeader(b,"igen");let B=aA(u.data);this.verifyHeader(B,"shdr"),y("%cParsing samples...",E.info),t.currentIndex=this.sampleDataStartIndex;let O=vs(B,C,r===void 0);if(r&&g.shdr){let V=vs(g.shdr,new Float32Array(1),!1);V.length===O.length&&O.forEach((F,v)=>{F.name+=V[v].name,F.linkedSampleIndex|=V[v].linkedSampleIndex<<16})}O.forEach(V=>V.name=V.name.trim()),this.samples.push(...O);let X=Us(b),J=Gn(H),Y=xs(w);if(r&&g.inst){let V=xs(g.inst);V.length===Y.length&&(Y.forEach((F,v)=>{F.name+=V[v].name,F.zoneStartIndex|=V[v].zoneStartIndex}),Y.forEach((F,v)=>{v<Y.length-1&&(F.zonesCount=Y[v+1].zoneStartIndex-F.zoneStartIndex)}))}Y.forEach(V=>V.name=V.name.trim()),this.instruments.push(...Y);let K=vt(M);if(r&&g.ibag){let V=vt(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}Ji(K,X,J,this.samples,Y);let P=Us(k),z=Gn(p),hA=Ts(d,this);if(r&&g.phdr){let V=Ts(g.phdr,this);V.length===hA.length&&(hA.forEach((F,v)=>{F.name+=V[v].name,F.zoneStartIndex|=V[v].zoneStartIndex}),hA.forEach((F,v)=>{v<hA.length-1&&(F.zonesCount=hA[v+1].zoneStartIndex-F.zoneStartIndex)}))}hA.forEach(V=>V.name===V.name.trim()),this.addPresets(...hA);let gA=vt(S);if(r&&g.pbag){let V=vt(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}xi(gA,P,z,this.instruments,hA),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),W()}verifyHeader(e,A){e.header.toLowerCase()!==A.toLowerCase()&&(W(),this.parsingError(`Invalid chunk header! Expected "${A.toLowerCase()}" got "${e.header.toLowerCase()}"`))}verifyText(e,A){e.toLowerCase()!==A.toLowerCase()&&(W(),this.parsingError(`Invalid FourCC: Expected "${A.toLowerCase()}" got "${e.toLowerCase()}"\``))}},ft=class{static fromArrayBuffer(e){let A=e.slice(8,12),t=new q(A);return lA(t,4).toLowerCase()==="dls "?this.loadDLS(e):new qi(e,!1)}static loadDLS(e){return Da.read(e).toSF()}},Fa=class{soundBankManager=new Po(this.updatePresetList.bind(this));midiChannels=[];keyModifierManager=new si;totalVoicesAmount=0;processorInitialized=Kt.isInitialized;currentSynthTime=0;sampleRate;enableEffects=!0;enableEventSystem;onEventCall;systemExclusive=ni.bind(this);resetAllControllers=fo.bind(this);setMasterParameter=Mo.bind(this);getMasterParameter=bo.bind(this);getAllMasterParameters=vo.bind(this);getVoicesForPreset=jo.bind(this);killVoices=Wo.bind(this);getVoices=$o.bind(this);privateProps;savedSnapshot;eventQueue=[];sampleTime;constructor(e,A=Gs){let t=jn(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 oi(this.callEvent.bind(this),this.getVoices.bind(this),this.killVoices.bind(this),Go*(44100/e),qo*(44100/e),Xo*(44100/e));for(let n=0;n<Vs;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 rs.create(this)}setEmbeddedSoundBank(e,A){let t=ft.fromArrayBuffer(e);this.soundBankManager.addSoundBank(t,Mt,A);let n=this.soundBankManager.priorityOrder;n.pop(),n.unshift(Mt),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===Mt)&&this.soundBankManager.deleteSoundBank(Mt)}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 o=e[0],I=e[1],r=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 u=h.voices.length,d=C%16;h.renderAudio(t[d][0],t[d][1],o,I,r,g,n,c),this.totalVoicesAmount+=h.voices.length,h.voices.length!==u&&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=Va){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 q(e.slice(1)),A);break;case R.reset:this.stopAllChannels(),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(iA.masterTuning,e)}callEvent(e,A){this.onEventCall?.({type:e,data:A})}getCachedVoice(e,A,t){return this.privateProps.cachedVoices?.[this.getCachedVoiceIndex(e,A,t)]}setCachedVoice(e,A,t,n){this.privateProps.cachedVoices[this.getCachedVoiceIndex(e,A,t)]=n}getCachedVoiceIndex(e,A,t){let n=e.bankMSB,s=e.bankLSB,{isGMGSDrum:a,program:o}=e;return a&&(n=128,s=0),n+s*128+o*16384+2097152*A+268435456*t}createMIDIChannelInternal(e){let A=new Si(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()}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 Wt=Ce.consoleColors;var Ga="spessasynth-worklet-processor";function Ra(e,A){return{...A,...e??{}}}var Ma={skipToFirstNoteOn:!0,initialPlaybackRate:1};var Is=class extends Ot{events=[];constructor(A){super(),super.copyFrom(A),this.events=[]}},zt=class e extends Le{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 _t={shuffleOn:1,shuffleOff:2,index:3};var jt=class{synthesizer;sequencer;post;alive=!1;constructor(A,t,n){this.synthesizer=new Fa(A,t),this.sequencer=new sa(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)){Ce.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===he?this.synthesizer.resetAllControllers():n?.resetControllers();break;case"setChannelVibrato":if(t===he)for(let s of this.synthesizer.midiChannels)A.data.rate===he?s.disableAndLockGSNRPN():s.setVibrato(A.data.depth,A.data.rate,A.data.delay);else A.data.rate===he?n?.disableAndLockGSNRPN():n?.setVibrato(A.data.depth,A.data.rate,A.data.delay);break;case"stopAll":t===he?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===he)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?Le.copyFrom(r):Le.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 _t.shuffleOff:s.shuffleMode=!1;break;case _t.shuffleOn:s.shuffleMode=!0;break;case _t.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=ft.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=rs.create(this.synthesizer);this.postReady("synthesizerSnapshot",s);break}case"setLogLevel":Ks(A.data.enableInfo,A.data.enableWarning,A.data.enableGroup);break;case"destroyWorklet":this.alive=!1,this.synthesizer.destroySynthProcessor(),this.destroy();break;default:Ce.SpessaSynthWarn("Unrecognized event!",A);break}}};var $t=class extends jt{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(ft.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),Ce.SpessaSynthInfo("%cRendering enabled! Starting render.",Wt.info),this.sequencer.loopCount=A.loopCount,this.synthesizer.setMasterParameter("voiceCap",1/0);let t=Ra(A.sequencerOptions,Ma);this.sequencer.skipToFirstNoteOn=t.skipToFirstNoteOn,this.sequencer.playbackRate=t.initialPlaybackRate;try{this.sequencer.loadNewSongList([Le.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(Ga,gs);Ce.SpessaSynthInfo("%cProcessor successfully registered!",Wt.recognized);
21
21
  //# sourceMappingURL=spessasynth_processor.min.js.map