spessasynth_lib 4.2.14 → 4.2.15

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,4 +1,4 @@
1
- function zA(A,e,t=0){let s=0;for(let n=0;n<e;n++)s=s<<8|A[t+n];return s>>>0}function JA(A,e){let t=zA(A,e,A.currentIndex);return A.currentIndex+=e,t}function Ct(A,e){let t=new Array(e).fill(0);for(let s=e-1;s>=0;s--)t[s]=A&255,A>>=8;return t}function X(A,e){let t=Dn(A,e,A.currentIndex);return A.currentIndex+=e,t}function Dn(A,e,t=0){let s=0;for(let n=0;n<e;n++)s|=A[t+n]<<n*8;return s>>>0}function at(A,e,t){for(let s=0;s<t;s++)A[A.currentIndex++]=e>>s*8&255}function te(A,e){A[A.currentIndex++]=e&255,A[A.currentIndex++]=e>>8}function ge(A,e){at(A,e,4)}function Rs(A,e){let t=e<<8|A;return t>32767?t-65536:t}function ma(A){return A>127?A-256:A}var _=class extends Uint8Array{currentIndex=0;slice(A,e){let t=super.slice(A,e);return t.currentIndex=0,t}};function oA(A,e=A.length,t=0){let s="";for(let n=0;n<e;n++){let a=A[t+n];if(a===0)return s;s+=String.fromCharCode(a)}return s}function ue(A,e){let t=A.currentIndex;return A.currentIndex+=e,oA(A,e,t)}function BA(A,e=!1,t=!1){let s=A.length;e&&s++,t&&s%2!==0&&s++;let n=new _(s);return Ge(n,A),n}function Ge(A,e,t=0){t>0&&e.length>t&&(e=e.slice(0,t));for(let s=0;s<e.length;s++)A[A.currentIndex++]=e.charCodeAt(s);if(t>e.length)for(let s=0;s<t-e.length;s++)A[A.currentIndex++]=0;return A}function pe(A){let e=0;for(;A;){let t=A[A.currentIndex++];if(e=e<<7|t&127,t>>7!==1)break}return e}function $t(A){let e=[A&127];for(A>>=7;A>0;)e.unshift(A&127|128),A>>=7;return e}function ls(A){A=Math.floor(A);let e=Math.floor(A/60),t=Math.round(A-e*60);return{minutes:e,seconds:t,time:`${e.toString().padStart(2,"0")}:${t.toString().padStart(2,"0")}`}}function Pt(A){let e="";for(let t of A){let s=t.toString(16).padStart(2,"0").toUpperCase();e+=s,e+=" "}return e}var C={warn:"color: orange;",unrecognized:"color: red;",info:"color: aqua;",recognized:"color: lime",value:"color: yellow; background-color: black;"},wn;(()=>{var A=Uint8Array,e=Uint16Array,t=Int32Array,s=new A([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),n=new A([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),a=new A([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),r=function(S,k){for(var p=new e(31),P=0;P<31;++P)p[P]=k+=1<<S[P-1];for(var K=new t(p[30]),P=1;P<30;++P)for(var Ce=p[P];Ce<p[P+1];++Ce)K[Ce]=Ce-p[P]<<5|P;return{b:p,r:K}},o=r(s,2),i=o.b,g=o.r;i[28]=258,g[258]=28;var c=r(n,0),l=c.b;c.r;var B=new e(32768);for(f=0;f<32768;++f)h=(f&43690)>>1|(f&21845)<<1,h=(h&52428)>>2|(h&13107)<<2,h=(h&61680)>>4|(h&3855)<<4,B[f]=((h&65280)>>8|(h&255)<<8)>>1;var h,f,E=function(S,k,p){for(var P=S.length,K=0,Ce=new e(k);K<P;++K)S[K]&&++Ce[S[K]-1];var be=new e(k);for(K=1;K<k;++K)be[K]=be[K-1]+Ce[K-1]<<1;var Be;if(p){Be=new e(1<<k);var ae=15-k;for(K=0;K<P;++K)if(S[K])for(var he=K<<4|S[K],j=k-S[K],Y=be[S[K]-1]++<<j,ne=Y|(1<<j)-1;Y<=ne;++Y)Be[B[Y]>>ae]=he}else for(Be=new e(P),K=0;K<P;++K)S[K]&&(Be[K]=B[be[S[K]-1]++]>>15-S[K]);return Be},m=new A(288);for(f=0;f<144;++f)m[f]=8;var f;for(f=144;f<256;++f)m[f]=9;var f;for(f=256;f<280;++f)m[f]=7;var f;for(f=280;f<288;++f)m[f]=8;var f,D=new A(32);for(f=0;f<32;++f)D[f]=5;var f,O=E(m,9,1),R=E(D,5,1),Q=function(S){for(var k=S[0],p=1;p<S.length;++p)S[p]>k&&(k=S[p]);return k},T=function(S,k,p){var P=k/8|0;return(S[P]|S[P+1]<<8)>>(k&7)&p},U=function(S,k){var p=k/8|0;return(S[p]|S[p+1]<<8|S[p+2]<<16)>>(k&7)},x=function(S){return(S+7)/8|0},V=function(S,k,p){return(k==null||k<0)&&(k=0),(p==null||p>S.length)&&(p=S.length),new A(S.subarray(k,p))},J=["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"],L=function(S,k,p){var P=new Error(k||J[S]);if(P.code=S,Error.captureStackTrace&&Error.captureStackTrace(P,L),!p)throw P;return P},H=function(S,k,p,P){var K=S.length,Ce=P?P.length:0;if(!K||k.f&&!k.l)return p||new A(0);var be=!p,Be=be||k.i!=2,ae=k.i;be&&(p=new A(K*3));var he=function(Ee){var le=p.length;if(Ee>le){var Ye=new A(Math.max(le*2,Ee));Ye.set(p),p=Ye}},j=k.f||0,Y=k.p||0,ne=k.b||0,fe=k.l,Me=k.d,Ie=k.m,ve=k.n,sA=K*8;do{if(!fe){j=T(S,Y,1);var pA=T(S,Y+1,3);if(Y+=3,pA)if(pA==1)fe=O,Me=R,Ie=9,ve=5;else if(pA==2){var yA=T(S,Y,31)+257,gt=T(S,Y+10,15)+4,It=yA+T(S,Y+5,31)+1;Y+=14;for(var Ze=new A(It),bA=new A(19),Le=0;Le<gt;++Le)bA[a[Le]]=T(S,Y+Le*3,7);Y+=gt*3;for(var $A=Q(bA),TA=(1<<$A)-1,_t=E(bA,$A,1),Le=0;Le<It;){var jA=_t[T(S,Y,TA)];Y+=jA&15;var eA=jA>>4;if(eA<16)Ze[Le++]=eA;else{var EA=0,SA=0;for(eA==16?(SA=3+T(S,Y,3),Y+=2,EA=Ze[Le-1]):eA==17?(SA=3+T(S,Y,7),Y+=3):eA==18&&(SA=11+T(S,Y,127),Y+=7);SA--;)Ze[Le++]=EA}}var UA=Ze.subarray(0,yA),We=Ze.subarray(yA);Ie=Q(UA),ve=Q(We),fe=E(UA,Ie,1),Me=E(We,ve,1)}else L(1);else{var eA=x(Y)+4,RA=S[eA-4]|S[eA-3]<<8,nA=eA+RA;if(nA>K){ae&&L(0);break}Be&&he(ne+RA),p.set(S.subarray(eA,nA),ne),k.b=ne+=RA,k.p=Y=nA*8,k.f=j;continue}if(Y>sA){ae&&L(0);break}}Be&&he(ne+131072);for(var b=(1<<Ie)-1,w=(1<<ve)-1,F=Y;;F=Y){var EA=fe[U(S,Y)&b],W=EA>>4;if(Y+=EA&15,Y>sA){ae&&L(0);break}if(EA||L(2),W<256)p[ne++]=W;else if(W==256){F=Y,fe=null;break}else{var ie=W-254;if(W>264){var Le=W-257,ce=s[Le];ie=T(S,Y,(1<<ce)-1)+i[Le],Y+=ce}var me=Me[U(S,Y)&w],$=me>>4;me||L(3),Y+=me&15;var We=l[$];if($>3){var ce=n[$];We+=U(S,Y)&(1<<ce)-1,Y+=ce}if(Y>sA){ae&&L(0);break}Be&&he(ne+131072);var He=ne+ie;if(ne<We){var Re=Ce-We,re=Math.min(We,He);for(Re+ne<0&&L(3);ne<re;++ne)p[ne]=P[Re+ne]}for(;ne<He;++ne)p[ne]=p[ne-We]}}k.l=fe,k.p=F,k.b=ne,k.f=j,fe&&(j=1,k.m=Ie,k.d=Me,k.n=ve)}while(!j);return ne!=p.length&&be?V(p,0,ne):p.subarray(0,ne)},q=new A(0);function u(S,k){return H(S,{i:2},k&&k.out,k&&k.dictionary)}var v=typeof TextDecoder<"u"&&new TextDecoder;try{v.decode(q,{stream:!0})}catch{}wn=u})();var bn=wn,Rn=!1,Fn=!0,xt=!1;function Gn(A,e,t){Rn=A,Fn=e,xt=t}function y(...A){Rn&&console.info(...A)}function se(...A){Fn&&console.warn(...A)}function je(...A){xt&&console.group(...A)}function Je(...A){xt&&console.groupCollapsed(...A)}function ee(){xt&&console.groupEnd()}var N=class Mn{header;size;data;constructor(e,t,s){this.header=e,this.size=t,this.data=s}static read(e,t=!0,s=!1){let n=ue(e,4),a=X(e,4);n===""&&(a=0);let r=t?e.slice(e.currentIndex,e.currentIndex+a):new _(0);return(t||s)&&(e.currentIndex+=a,a%2!==0&&e.currentIndex++),new Mn(n,a,r)}static write(e,t,s=!1,n=!1){if(e.length!==4)throw new Error(`Invalid header length: ${e}`);let a=8,r=e,o=t.length;s&&o++;let i=o;n&&(a+=4,i+=4,r="LIST");let g=a+o;g%2!==0&&g++;let c=new _(g);return Ge(c,r),ge(c,i),n&&Ge(c,e),c.set(t,a),c}static writeParts(e,t,s=!1){let n=8,a=e,r=t.reduce((c,l)=>l.length+c,0),o=r;s&&(n+=4,o+=4,a="LIST");let i=n+r;i%2!==0&&i++;let g=new _(i);Ge(g,a),ge(g,o),s&&Ge(g,e);for(let c of t)g.set(c,n),n+=c.length;return g}static findListType(e,t){return e.find(s=>s.header!=="LIST"?!1:(s.data.currentIndex=4,oA(s.data,4)===t))}};function Fs(A,e){return{...e,...A}}var mA={consoleColors:C,SpessaSynthInfo:y,SpessaSynthWarn:se,SpessaSynthGroupCollapsed:Je,SpessaSynthGroup:je,SpessaSynthGroupEnd:ee,readBytesAsUintBigEndian:zA,readLittleEndian:X,readBytesAsString:ue,readVariableLengthQuantity:pe,inflateSync:bn};var M={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},d={bankSelect:0,modulationWheel:1,breathController:2,undefinedCC3:3,footController:4,portamentoTime:5,dataEntryMSB:6,mainVolume:7,balance:8,undefinedCC9:9,pan:10,expressionController:11,effectControl1:12,effectControl2:13,undefinedCC14:14,undefinedCC15:15,generalPurposeController1:16,generalPurposeController2:17,generalPurposeController3:18,generalPurposeController4:19,undefinedCC20:20,undefinedCC21:21,undefinedCC22:22,undefinedCC23:23,undefinedCC24:24,undefinedCC25:25,undefinedCC26:26,undefinedCC27:27,undefinedCC28:28,undefinedCC29:29,undefinedCC30:30,undefinedCC31:31,bankSelectLSB:32,modulationWheelLSB:33,breathControllerLSB:34,undefinedCC3LSB:35,footControllerLSB:36,portamentoTimeLSB:37,dataEntryLSB:38,mainVolumeLSB:39,balanceLSB:40,undefinedCC9LSB:41,panLSB:42,expressionControllerLSB:43,effectControl1LSB:44,effectControl2LSB:45,undefinedCC14LSB:46,undefinedCC15LSB:47,undefinedCC16LSB:48,undefinedCC17LSB:49,undefinedCC18LSB:50,undefinedCC19LSB:51,undefinedCC20LSB:52,undefinedCC21LSB:53,undefinedCC22LSB:54,undefinedCC23LSB:55,undefinedCC24LSB:56,undefinedCC25LSB:57,undefinedCC26LSB:58,undefinedCC27LSB:59,undefinedCC28LSB:60,undefinedCC29LSB:61,undefinedCC30LSB:62,undefinedCC31LSB:63,sustainPedal:64,portamentoOnOff:65,sostenutoPedal:66,softPedal:67,legatoFootswitch:68,hold2Pedal:69,soundVariation:70,filterResonance:71,releaseTime:72,attackTime:73,brightness:74,decayTime:75,vibratoRate:76,vibratoDepth:77,vibratoDelay:78,soundController10:79,generalPurposeController5:80,generalPurposeController6:81,generalPurposeController7:82,generalPurposeController8:83,portamentoControl:84,undefinedCC85:85,undefinedCC86:86,undefinedCC87:87,undefinedCC88:88,undefinedCC89:89,undefinedCC90:90,reverbDepth:91,tremoloDepth:92,chorusDepth:93,variationDepth:94,phaserDepth:95,dataIncrement:96,dataDecrement:97,nonRegisteredParameterLSB:98,nonRegisteredParameterMSB:99,registeredParameterLSB:100,registeredParameterMSB:101,undefinedCC102LSB:102,undefinedCC103LSB:103,undefinedCC104LSB:104,undefinedCC105LSB:105,undefinedCC106LSB:106,undefinedCC107LSB:107,undefinedCC108LSB:108,undefinedCC109LSB:109,undefinedCC110LSB:110,undefinedCC111LSB:111,undefinedCC112LSB:112,undefinedCC113LSB:113,undefinedCC114LSB:114,undefinedCC115LSB:115,undefinedCC116LSB:116,undefinedCC117LSB:117,undefinedCC118LSB:118,undefinedCC119LSB:119,allSoundOff:120,resetAllControllers:121,localControlOnOff:122,allNotesOff:123,omniModeOff:124,omniModeOn:125,monoModeOn:126,polyModeOn:127},gA=class{ticks;statusByte;data;constructor(A,e,t){this.ticks=A,this.statusByte=e,this.data=t}};function pa(A){let e=A&240,t=A&15,s=t;switch(e){case 128:case 144:case 160:case 176:case 192:case 208:case 224:break;case 240:switch(t){case 0:s=-3;break;case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:s=-1;break;case 15:s=-2;break}break;default:s=-1}return s}function Gs(A){let e=A&240,t=A&15,s=-1,n=A;return e>=128&&e<=224&&(s=t,n=e),{status:n,channel:s}}var ya={8:2,9:2,10:2,11:2,12:1,13:1,14:2},_s=(A,e)=>{for(let t=0;t<A.length;t++)e.push(A.charCodeAt(t))};function Sa(A){if(!A.tracks)throw new Error("MIDI has no tracks!");let e=[];for(let s of A.tracks){let n=[],a=0,r;for(let o of s.events){let i=Math.max(0,o.ticks-a);if(o.statusByte===M.endOfTrack){a+=i;continue}let g;o.statusByte<=M.sequenceSpecific?(g=[255,o.statusByte,...$t(o.data.length),...o.data],r=void 0):o.statusByte===M.systemExclusive?(g=[240,...$t(o.data.length),...o.data],r=void 0):(g=[],r!==o.statusByte&&(r=o.statusByte,g.push(o.statusByte)),g.push(...o.data)),n.push(...$t(i),...g),a+=i}n.push(0,255,M.endOfTrack,0),e.push(new Uint8Array(n))}let t=[];_s("MThd",t),t.push(...Ct(6,4),0,A.format,...Ct(A.tracks.length,2),...Ct(A.timeDivision,2));for(let s of e)_s("MTrk",t),t.push(...Ct(s.length,4),...s);return new Uint8Array(t).buffer}var Ht=-1,Bt=`SPESSASYNTH_EMBEDDED_BANK_${Math.random()}_DO_NOT_DELETE`,ka=32767,Da={time:0},wa=.03,ba=.07,yt=1/Math.cos(Math.PI/4)**2,$s=121,ke=class{static getDefaultBank(A){return A==="gm2"?$s:0}static getDrumBank(A){switch(A){default:throw new Error(`${A} doesn't have a bank MSB for drums.`);case"gm2":return 120;case"xg":return 127}}static isXGDrums(A){return A===120||A===127}static isValidXGMSB(A){return this.isXGDrums(A)||A===64||A===$s}static isSystemXG(A){return A==="gm2"||A==="xg"}static addBankOffset(A,e,t=!0){return this.isXGDrums(A)&&t?A:Math.min(A+e,127)}static subtractBankOffset(A,e,t=!0){return this.isXGDrums(A)&&t?A:Math.max(0,A-e)}};function Ms(A){return A.data[0]===67&&A.data[2]===76&&A.data[5]===126&&A.data[6]===0}function vn(A){return A.data[0]===65&&A.data[2]===66&&A.data[3]===18&&A.data[4]===64&&(A.data[5]&16)!==0&&A.data[6]===21}function vs(A){return A.data[0]===65&&A.data[2]===66&&A.data[5]===0&&A.data[6]===127}function Ls(A){return A.data[0]===126&&A.data[2]===9&&A.data[3]===1}function Ns(A){return A.data[0]===126&&A.data[2]===9&&A.data[3]===3}function Ra(A){return A[0]===65&&A[2]===66&&A[3]===18&&A[4]===65||A[0]===67&&A[2]===76&&A[3]>>4===3}function Fa(A){return A[0]===67&&A[2]===76&&A[3]===8&&(A[5]===3||A[5]===1||A[5]===2)?A[4]:A[0]===65&&A[2]===66&&A[3]===18&&A[4]===64&&(A[5]&240)===16&&A[6]===0?KA(A[5]&15):-1}function Ga(A){return A[0]===65&&A[2]===66&&A[3]===18&&A[4]===64&&A[5]===1&&A[6]>=48&&A[6]<=55}function Ma(A){return A[0]===65&&A[2]===66&&A[3]===18&&A[4]===64&&A[5]===1&&A[6]>=56&&A[6]<=64}function va(A){return A[0]===65&&A[2]===66&&A[3]===18&&A[4]===64&&A[5]===1&&A[6]>=80&&A[6]<=90}function La(A){return A[0]===65&&A[2]===66&&A[3]===18&&A[4]===64&&(A[5]===3||A[5]>>4===4&&A[6]===34)}function KA(A){return[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][A%16]}function Ts(A){return[1,2,3,4,5,6,7,8,9,0,10,11,12,13,14,15][A%16]}function Ln(A){return new gA(A,M.systemExclusive,new _([65,16,66,18,64,0,127,0,65,247]))}var IA=class Nn{static toMIDIString(e){return e.isGMGSDrum?`DRUM:${e.program}`:`${e.bankLSB}:${e.bankMSB}:${e.program}`}static fromMIDIString(e){let t=e.split(":");if(t.length>3||t.length<2)throw new Error("Invalid MIDI string:");return e.startsWith("DRUM")?{bankMSB:0,bankLSB:0,program:Number.parseInt(t[1]),isGMGSDrum:!0}:{bankLSB:Number.parseInt(t[0]),bankMSB:Number.parseInt(t[1]),program:Number.parseInt(t[2]),isGMGSDrum:!1}}static toNamedMIDIString(e){return`${Nn.toMIDIString(e)} ${e.name}`}static matches(e,t){return e.isGMGSDrum||t.isGMGSDrum?e.isGMGSDrum===t.isGMGSDrum&&e.program===t.program:e.program===t.program&&e.bankLSB===t.bankLSB&&e.bankMSB===t.bankMSB}static fromNamedMIDIString(e){let t=e.indexOf(" ");if(t===-1)throw new Error(`Invalid named MIDI string: ${e}`);let s=this.fromMIDIString(e.slice(0,Math.max(0,t))),n=e.slice(Math.max(0,t+1));return{...s,name:n}}static sorter(e,t){return e.program!==t.program?e.program-t.program:e.isGMGSDrum&&!t.isGMGSDrum?1:!e.isGMGSDrum&&t.isGMGSDrum?-1:e.bankMSB!==t.bankMSB?e.bankMSB-t.bankMSB:e.bankLSB-t.bankLSB}},Na="Created using SpessaSynth";function Ta(A,e,t){let s="gm",n=[],a=new Array(A.tracks.length).fill(0),r=16+Math.max(...A.portChannelOffsetMap),o=[];for(let i=0;i<r;i++)o.push({program:0,drums:i%16===9,lastBank:void 0,lastBankLSB:void 0,hasBankSelect:!1});A.iterate((i,g)=>{let c=A.portChannelOffsetMap[a[g]];if(i.statusByte===M.midiPort){a[g]=i.data[0];return}let l=i.statusByte&240;if(l!==M.controllerChange&&l!==M.programChange&&l!==M.systemExclusive)return;if(l===M.systemExclusive){if(!vn(i)){Ms(i)?s="xg":vs(i)?s="gs":Ls(i)?(s="gm",n.push({tNum:g,e:i})):Ns(i)&&(s="gm2");return}let m=KA(i.data[5]&15)+c;o[m].drums=!!(i.data[7]>0&&i.data[5]>>4);return}let B=(i.statusByte&15)+c,h=o[B];if(l===M.programChange){let m={program:i.data[0],bankLSB:h.lastBankLSB?.data?.[1]??0,bankMSB:ke.subtractBankOffset(h.lastBank?.data?.[1]??0,A.bankOffset),isGMGSDrum:h.drums},D=t.getPreset(m,s);if(y(`%cInput patch: %c${IA.toMIDIString(m)}%c. Channel %c${B}%c. Changing patch to ${D.toString()}.`,C.info,C.unrecognized,C.info,C.recognized,C.info),i.data[0]=D.program,D.isGMGSDrum&&ke.isSystemXG(s)||h.lastBank===void 0||(h.lastBank.data[1]=ke.addBankOffset(D.bankMSB,e,D.isXGDrums),h.lastBankLSB===void 0))return;h.lastBankLSB.data[1]=D.bankLSB;return}let E=i.data[0]===d.bankSelectLSB;i.data[0]!==d.bankSelect&&!E||(h.hasBankSelect=!0,E?h.lastBankLSB=i:h.lastBank=i)});for(let[i,g]of o.entries()){if(g.hasBankSelect)continue;let c=i%16,l=M.programChange|c,B=Math.floor(i/16)*16,h=A.portChannelOffsetMap.indexOf(B),E=A.tracks.find(R=>R.port===h&&R.channels.has(c));if(E===void 0)continue;let m=E.events.findIndex(R=>R.statusByte===l);if(m===-1){let R=E.events.findIndex(U=>U.statusByte>128&&U.statusByte<240&&(U.statusByte&15)===c);if(R===-1)continue;let Q=E.events[R].ticks,T=t.getPreset({bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1},s).program;E.addEvents(R,new gA(Q,M.programChange|c,new _([T]))),m=R}y(`%cAdding bank select for %c${i}`,C.info,C.recognized);let D=E.events[m].ticks,f=t.getPreset({bankLSB:0,bankMSB:0,program:g.program,isGMGSDrum:g.drums},s),O=ke.addBankOffset(f.bankMSB,e,f.isXGDrums);E.addEvents(m,new gA(D,M.controllerChange|c,new _([d.bankSelect,O])))}if(s==="gm"&&!ke.isSystemXG(s)){for(let g of n){let c=A.tracks[g.tNum];c.deleteEvent(c.events.indexOf(g.e))}let i=0;A.tracks[0].events[0].statusByte===M.trackName&&i++,A.tracks[0].addEvents(i,Ln(0))}}var js={bankOffset:0,metadata:{},correctBankOffset:!0,soundBank:void 0};function Ua(A,e,t){let s=t.metadata;if(je("%cWriting the RMIDI File...",C.info),y("metadata",s),y("Initial bank offset",A.bankOffset),t.correctBankOffset){if(!t.soundBank)throw new Error("Sound bank must be provided if correcting bank offset.");Ta(A,t.bankOffset,t.soundBank)}let n=new _(A.writeMIDI());s.name??=A.getName(),s.creationDate??=new Date,s.copyright??=Na,s.software??="SpessaSynth",Object.entries(s).forEach(i=>{let g=i;g[1]&&A.setRMIDInfo(g[0],g[1])});let a=[],r=(i,g)=>{a.push(N.write(i,g))};for(let i of Object.entries(A.rmidiInfo)){let g=i[0],c=i[1];switch(g){case"album":r("IALB",c),r("IPRD",c);break;case"software":r("ISFT",c);break;case"infoEncoding":r("IENC",c);break;case"creationDate":r("ICRD",c);break;case"picture":r("IPIC",c);break;case"name":r("INAM",c);break;case"artist":r("IART",c);break;case"genre":r("IGNR",c);break;case"copyright":r("ICOP",c);break;case"comment":r("ICMT",c);break;case"engineer":r("IENG",c);break;case"subject":r("ISBJ",c);break;case"midiEncoding":r("MENC",c);break}}let o=new _(2);return at(o,t.bankOffset,2),a.push(N.write("DBNK",o)),y("%cFinished!",C.info),ee(),N.writeParts("RIFF",[BA("RMID"),N.write("data",n),N.writeParts("INFO",a,!0),new _(e)]).buffer}function Pa(A,e){Je("%cSearching for all used programs and keys...",C.info);let t=16+Math.max(...A.portChannelOffsetMap),s=[],n="gs";for(let o=0;o<t;o++){let i=o%16===9;s.push({preset:e.getPreset({bankLSB:0,bankMSB:0,isGMGSDrum:i,program:0},n),bankMSB:0,bankLSB:0,isDrum:i})}let a=new Map,r=A.tracks.map(o=>o.port);A.iterate((o,i)=>{if(o.statusByte===M.midiPort&&A.tracks[i].channels.size>0){let l=o.data[0];A.portChannelOffsetMap[l]===void 0&&(se(`Invalid port ${l} on track ${i}. (No offset found in the MIDI map.`),l=0),r[i]=l;return}let g=o.statusByte&240;if(g!==M.noteOn&&g!==M.controllerChange&&g!==M.programChange&&g!==M.systemExclusive)return;let c=s[(o.statusByte&15)+A.portChannelOffsetMap[r[i]]||0];switch(g){case M.programChange:c.preset=e.getPreset({bankMSB:c.bankMSB,bankLSB:c.bankLSB,program:o.data[0],isGMGSDrum:c.isDrum},n);break;case M.controllerChange:switch(o.data[0]){default:return;case d.bankSelectLSB:c.bankLSB=o.data[1];break;case d.bankSelect:c.bankMSB=o.data[1]}break;case M.noteOn:{if(o.data[1]===0||!c.preset)return;let l=a.get(c.preset);l||(l=new Set,a.set(c.preset,l)),l.add(`${o.data[0]}-${o.data[1]}`);break}case M.systemExclusive:{if(!vn(o)){Ms(o)?(n="xg",y("%cXG on detected!",C.recognized)):Ns(o)?(n="gm2",y("%cGM2 on detected!",C.recognized)):Ls(o)?(n="gm",y("%cGM on detected!",C.recognized)):vs(o)&&(n="gs",y("%cGS on detected!",C.recognized));return}let l=KA(o.data[5]&15)+A.portChannelOffsetMap[r[i]],B=!!(o.data[7]>0&&o.data[5]>>4);c=s[l],c.isDrum=B}break}});for(let[o,i]of a.entries())i.size===0&&(y(`%cDetected change but no keys for %c${o.name}`,C.info,C.value),a.delete(o));return ee(),a}var xa=A=>(A.data=new _(A.data.buffer),6e7/zA(A.data,3));function Ha(A,e=0){let t=[],s=A.tracks.map(c=>c.events).flat();s.sort((c,l)=>c.ticks-l.ticks);for(let c=0;c<16;c++)t.push([]);let n=0,a=60/(120*A.timeDivision),r=0,o=0,i=[];for(let c=0;c<16;c++)i.push([]);let g=(c,l)=>{let B=i[l].findIndex(E=>E.midiNote===c),h=i[l][B];if(h){let E=n-h.start;h.length=E,l===9&&(h.length=Math.max(E,e)),i[l].splice(B,1)}o--};for(;r<s.length;){let c=s[r],l=c.statusByte>>4,B=c.statusByte&15;if(l===8)g(c.data[0],B);else if(l===9)if(c.data[1]===0)g(c.data[0],B);else{g(c.data[0],B);let h={midiNote:c.data[0],start:n,length:-1,velocity:c.data[1]/127};t[B].push(h),i[B].push(h),o++}else c.statusByte===81&&(a=60/(xa(c)*A.timeDivision));if(++r>=s.length)break;n+=a*(s[r].ticks-c.ticks)}if(o>0)for(let[c,l]of i.entries())for(let B of l){let h=n-B.start;B.length=h,c===9&&(B.length=Math.max(h,e))}return t}var Oa={linear:0,nearestNeighbor:1,hermite:2},Ve={Idle:0,RPCoarse:1,RPFine:2,NRPCoarse:3,NRPFine:4,DataCoarse:5,DataFine:6},oe={channelTuning:0,channelTransposeFine:1,modulationMultiplier:2,masterTuning:3,channelTuningSemitones:4,channelKeyShift:5,sf2NPRNGeneratorLSB:6},Ya={character:49,preLowpass:50,level:51,time:52,delayFeedback:53,preDelayTime:55},qa={preLowpass:57,level:58,feedback:59,delay:60,rate:61,depth:62,sendLevelToReverb:63,sendLevelToDelay:64},Ja={preLowpass:81,timeCenter:82,timeRatioLeft:83,timeRatioRight:84,levelCenter:85,levelLeft:86,levelRight:87,level:88,feedback:89,sendLevelToReverb:90};function HA(A,e,t,s){return new gA(s,M.controllerChange|A%16,new _([e,t]))}function de(A,e,t,s,n){let a=128-(e+t+s+n.reduce((r,o)=>r+o,0))%128&127;return new gA(A,M.systemExclusive,new Uint8Array([65,16,66,18,e,t,s,...n,a,247]))}function Ka(A,e){return de(e,40,16|Ts(A),21,[1])}function Va(A,{programChanges:e=[],controllerChanges:t=[],channelsToClear:s=[],channelsToTranspose:n=[],clearDrumParams:a=!1,reverbParams:r,chorusParams:o,delayParams:i,insertionParams:g}){Je("%cApplying changes to the MIDI file...",C.info),y("Desired program changes:",e),y("Desired CC changes:",t),y("Desired channels to clear:",s),y("Desired channels to transpose:",n),y("Desired reverb parameters",r),y("Desired chorus parameters",o),y("Desired delay parameters",i),y("Desired insertion parameters",g);let c=new Set;for(let u of e)c.add(u.channel);let l="gs",B=!1,h=A.tracks.map(u=>u.port),E={},m=0,D=(u,v)=>{A.tracks[u].channels.size!==0&&(m===0&&(m+=16,E[v]=0),E[v]===void 0&&(E[v]=m,m+=16),h[u]=v)};for(let[u,v]of A.tracks.entries())D(u,v.port);let f=m,O=new Array(f).fill(!0),R=new Array(f).fill(0),Q=new Array(f).fill(0);for(let u of n){let v=Math.trunc(u.keyShift),S=u.keyShift-v;R[u.channel]=v,Q[u.channel]=S}let T=-1,U=0,x=-1,V=0,J=!1;A.iterate((u,v,S)=>{let k=A.tracks[v],p=S[v],P=()=>{k.deleteEvent(p),S[v]--},K=(he,j=0)=>{k.addEvents(p+j,he),S[v]++},Ce=E[h[v]]||0;if(u.statusByte===M.midiPort){D(v,u.data[0]);return}if(u.statusByte<=M.sequenceSpecific&&u.statusByte>=M.sequenceNumber)return;let be=u.statusByte&240,Be=u.statusByte&15,ae=Be+Ce;if(u.statusByte!==M.systemExclusive&&s.includes(ae)){P();return}switch(be){case M.noteOn:if(O[ae]){O[ae]=!1;for(let j of t.filter(Y=>Y.channel===ae))K(HA(Be,j.controllerNumber,j.controllerValue,u.ticks));let he=Q[ae];if(he!==0){let j=he*64+64,Y=HA(Be,d.registeredParameterMSB,0,u.ticks),ne=HA(Be,d.registeredParameterLSB,1,u.ticks),fe=HA(ae,d.dataEntryMSB,j,u.ticks);K(HA(Be,d.dataEntryLSB,0,u.ticks)),K(fe),K(ne),K(Y)}if(c.has(ae)){let j=e.find(Ie=>Ie.channel===ae);if(!j)return;y(`%cSetting %c${j.channel}%c to %c${IA.toMIDIString(j)}%c. Track num: %c${v}`,C.info,C.recognized,C.info,C.recognized,C.info,C.recognized);let Y=j.bankMSB,ne=j.bankLSB,fe=j.program;K(new gA(u.ticks,M.programChange|Be,new _([fe])));let Me=(Ie,ve)=>{K(HA(Be,Ie?d.bankSelectLSB:d.bankSelect,ve,u.ticks))};ke.isSystemXG(l)&&j.isGMGSDrum&&(y(`%cAdding XG Drum change on track %c${v}`,C.recognized,C.value),Y=ke.getDrumBank(l),ne=0),Me(!1,Y),Me(!0,ne),j.isGMGSDrum&&!ke.isSystemXG(l)&&Be!==9&&(y(`%cAdding GS Drum change on track %c${v}`,C.recognized,C.value),K(Ka(Be,u.ticks)))}}u.data[0]+=R[ae];break;case M.noteOff:u.data[0]+=R[ae];break;case M.programChange:if(c.has(ae)){P();return}break;case M.controllerChange:{let he=u.data[0];if(t.find(j=>j.channel===ae&&he===j.controllerNumber)!==void 0){P();return}switch(he){case d.bankSelect:case d.bankSelectLSB:c.has(ae)&&P();return;case d.registeredParameterLSB:case d.registeredParameterMSB:J=!1;return;case d.nonRegisteredParameterMSB:T=S[v],U=v,J=!0;return;case d.nonRegisteredParameterLSB:x=S[v],V=v,J=!0;return;case d.dataEntryMSB:if(x&&T&&J&&a){let j=A.tracks[U].events[T].data[1];if(j>=24&&j<=31){P();let Y=A.tracks[V],ne=A.tracks[U];Y.deleteEvent(x),S[V]--,ne.deleteEvent(T),S[U]--}}return;default:return}}case M.systemExclusive:{if(Ms(u)){y("%cXG system on detected",C.info),l="xg",B=!0;return}if(Ns(u)){y("%cGM2 system on detected",C.info),l="gm2",B=!0;return}if(vs(u)){B=!0,y("%cGS on detected!",C.recognized);return}if(Ls(u)){y("%cGM on detected, removing!",C.info),P(),B=!1;return}if(a&&Ra(u.data)){P();return}if(r&&Ga(u.data)){P();return}if(o&&Ma(u.data)){P();return}if(i&&va(u.data)){P();return}if(g&&La(u.data)){P();return}let he=Fa(u.data);if(he!==-1){c.has(he+Ce)&&P();return}}}});let L=Math.max(0,A.firstNoteOn-10),H=A.tracks[0],q=Math.max(0,H.events.findIndex(u=>u.ticks>=L)-1);if(r){let u=Ya,v=r;H.addEvents(q,de(L,64,1,u.level,[v.level]),de(L,64,1,u.preLowpass,[v.preLowpass]),de(L,64,1,u.character,[v.character]),de(L,64,1,u.time,[v.time]),de(L,64,1,u.delayFeedback,[v.delayFeedback]),de(L,64,1,u.preDelayTime,[v.preDelayTime]))}if(o){let u=qa,v=o;H.addEvents(q,de(L,64,1,u.level,[v.level]),de(L,64,1,u.preLowpass,[v.preLowpass]),de(L,64,1,u.feedback,[v.feedback]),de(L,64,1,u.delay,[v.delay]),de(L,64,1,u.rate,[v.rate]),de(L,64,1,u.depth,[v.depth]),de(L,64,1,u.sendLevelToReverb,[v.sendLevelToReverb]),de(L,64,1,u.sendLevelToDelay,[v.sendLevelToDelay]))}if(i){let u=Ja,v=i;H.addEvents(q,de(L,64,1,u.level,[v.level]),de(L,64,1,u.preLowpass,[v.preLowpass]),de(L,64,1,u.timeCenter,[v.timeCenter]),de(L,64,1,u.timeRatioLeft,[v.timeRatioLeft]),de(L,64,1,u.timeRatioRight,[v.timeRatioRight]),de(L,64,1,u.levelCenter,[v.levelCenter]),de(L,64,1,u.levelLeft,[v.levelLeft]),de(L,64,1,u.levelRight,[v.levelRight]),de(L,64,1,u.feedback,[v.feedback]),de(L,64,1,u.sendLevelToReverb,[v.sendLevelToReverb]))}if(g){let u=g;for(let v=0;v<u.channels.length;v++)u.channels[v]&&H.addEvents(L,de(L,64,64|Ts(v),34,[1]));for(let v=0;v<u.params.length;v++){let S=u.params[v];S!==255&&H.addEvents(q,de(L,64,3,v+3,[S]))}H.addEvents(q,de(L,64,3,0,[u.type>>8,u.type&127]))}if(!B&&e.length>0){let u=0;A.tracks[0].events[0].statusByte===M.trackName&&u++,A.tracks[0].addEvents(u,Ln(0)),y("%cGS on not detected. Adding it.",C.info)}A.flush(),ee()}function Xa(A,e){let t=[],s=[],n=[],a=[];for(let[r,o]of e.channelSnapshots.entries()){if(o.isMuted){s.push(r);continue}let i=o.keyShift+o.customControllers[oe.channelTransposeFine]/100;i!==0&&t.push({channel:r,keyShift:i}),o.lockPreset&&n.push({channel:r,...o.patch});for(let[g,c]of o.lockedControllers.entries()){if(!c||g>127||g===d.bankSelect)continue;let l=o.midiControllers[g]>>7;a.push({channel:r,controllerNumber:g,controllerValue:l})}}A.modify({programChanges:n,controllerChanges:a,channelsToClear:s,channelsToTranspose:t,clearDrumParams:e.masterParameters.drumLock,reverbParams:e.masterParameters.reverbLock?e.reverbSnapshot:void 0,chorusParams:e.masterParameters.chorusLock?e.chorusSnapshot:void 0,delayParams:e.masterParameters.delayLock?e.delaySnapshot:void 0,insertionParams:e.masterParameters.insertionEffectLock?e.insertionSnapshot:void 0})}var jt={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},OA={inLineResource:1,inFileResource:2,inFileNode:3,externalFile:4,externalXMF:5,XMFFileURIandNodeID:6},es={StandardMIDIFile:0,StandardMIDIFileType1:1,DLS1:2,DLS2:3,DLS22:4,mobileDLS:5,unknown:-1,folder:-2},Za={standard:0,MMA:1,registered:2,nonRegistered:3},Et={none:0,MMAUnpacker:1,registered:2,nonRegistered:3},Wa=class Tn{length;itemCount;metadataLength;metadata={};nodeData;innerNodes=[];packedContent=!1;nodeUnpackers=[];resourceFormat="unknown";referenceTypeID;constructor(e){let t=e.currentIndex;this.length=pe(e),this.itemCount=pe(e);let s=pe(e),n=s-(e.currentIndex-t),a=e.slice(e.currentIndex,e.currentIndex+n);e.currentIndex+=n,this.metadataLength=pe(a);let r=a.slice(a.currentIndex,a.currentIndex+this.metadataLength);a.currentIndex+=this.metadataLength;let o,i;for(;r.currentIndex<r.length;){r[r.currentIndex]===0?(r.currentIndex++,o=pe(r),Object.values(jt).includes(o)?i=Object.keys(jt).find(h=>jt[h]===o)??"":(y(`Unknown field specifier: ${o}`),i=`unknown_${o}`)):(o=ue(r,pe(r)),i=o);let B=pe(r);if(B===0){let h=pe(r),E=r.slice(r.currentIndex,r.currentIndex+h);r.currentIndex+=h;let m=pe(E);this.metadata[i]=m<4?ue(E,h-1):E.slice(E.currentIndex)}else y(`International content: ${B}`),r.currentIndex+=pe(r)}let g=a.currentIndex,c=pe(a),l=a.slice(a.currentIndex,g+c);if(a.currentIndex=g+c,c>0)for(this.packedContent=!0;l.currentIndex<c;){let B={id:pe(l)};switch(B.id){case Et.nonRegistered:case Et.registered:throw ee(),new Error(`Unsupported unpacker ID: ${B.id}`);default:throw ee(),new Error(`Unknown unpacker ID: ${B.id}`);case Et.none:B.standardID=pe(l);break;case Et.MMAUnpacker:{let h=l[l.currentIndex++];h===0&&(h<<=8,h|=l[l.currentIndex++],h<<=8,h|=l[l.currentIndex++]);let E=pe(l);B.manufacturerID=h,B.manufacturerInternalID=E}break}B.decodedSize=pe(l),this.nodeUnpackers.push(B)}switch(e.currentIndex=t+s,this.referenceTypeID=pe(e),this.nodeData=e.slice(e.currentIndex,t+this.length),e.currentIndex=t+this.length,this.referenceTypeID){case OA.inLineResource:break;case OA.externalXMF:case OA.inFileNode:case OA.XMFFileURIandNodeID:case OA.externalFile:case OA.inFileResource:throw ee(),new Error(`Unsupported reference type: ${this.referenceTypeID}`);default:throw ee(),new Error(`Unknown reference type: ${this.referenceTypeID}`)}if(this.isFile){if(this.packedContent){let h=this.nodeData.slice(2);y(`%cPacked content. Attempting to deflate. Target size: %c${this.nodeUnpackers[0].decodedSize}`,C.warn,C.value);try{this.nodeData=new _(bn(h).buffer)}catch(E){if(ee(),E instanceof Error)throw new Error(`Error unpacking XMF file contents: ${E.message}.`,{cause:E})}}let B=this.metadata.resourceFormat;if(B===void 0)se("No resource format for this file node!");else{B[0]!==Za.standard&&(y(`Non-standard formatTypeID: ${B.toString()}`),this.resourceFormat=B.toString());let h=B[1];Object.values(es).includes(h)?this.resourceFormat=Object.keys(es).find(E=>es[E]===h):y(`Unrecognized resource format: ${h}`)}}else for(this.resourceFormat="folder";this.nodeData.currentIndex<this.nodeData.length;){let B=this.nodeData.currentIndex,h=pe(this.nodeData),E=this.nodeData.slice(B,B+h);this.nodeData.currentIndex=B+h,this.innerNodes.push(new Tn(E))}}get isFile(){return this.itemCount===0}};function za(A,e){A.bankOffset=0;let t=ue(e,4);if(t!=="XMF_")throw ee(),new SyntaxError(`Invalid XMF Header! Expected "_XMF", got "${t}"`);je("%cParsing XMF file...",C.info);let s=ue(e,4);y(`%cXMF version: %c${s}`,C.info,C.recognized),s==="2.00"&&y(`%cFile Type ID: %c${JA(e,4)}%c, File Type Revision ID: %c${JA(e,4)}`,C.info,C.recognized,C.info,C.recognized),pe(e);let n=pe(e);e.currentIndex+=n,e.currentIndex=pe(e);let a=new Wa(e),r,o=i=>{let g=(c,l)=>{i.metadata[c]!==void 0&&typeof i.metadata[c]=="string"&&(A.rmidiInfo[l]=BA(i.metadata[c]))};if(g("nodeName","name"),g("title","name"),g("copyrightNotice","copyright"),g("comment","comment"),i.isFile)switch(i.resourceFormat){default:return;case"DLS1":case"DLS2":case"DLS22":case"mobileDLS":y("%cFound embedded DLS!",C.recognized),A.embeddedSoundBank=i.nodeData.buffer;break;case"StandardMIDIFile":case"StandardMIDIFileType1":y("%cFound embedded MIDI!",C.recognized),r=i.nodeData;break}else for(let c of i.innerNodes)o(c)};if(o(a),ee(),!r)throw new Error("No MIDI data in the XMF file!");return r}var Ot=class Un{name="";port=0;channels=new Set;events=[];static copyFrom(e){let t=new Un;return t.copyFrom(e),t}copyFrom(e){this.name=e.name,this.port=e.port,this.channels=new Set(e.channels),this.events=e.events.map(t=>new gA(t.ticks,t.statusByte,new _(t.data)))}addEvent(e,t){this.events.splice(t,0,e)}addEvents(e,...t){this.events.splice(e,0,...t)}deleteEvent(e){this.events.splice(e,1)}pushEvent(e){this.events.push(e)}};function en(A,e,t){Je("%cParsing MIDI File...",C.info),A.fileName=t;let s=new _(e),n,a=g=>{let c=ue(g,4),l=JA(g,4),B={type:c,size:l,data:new _(l)},h=g.slice(g.currentIndex,g.currentIndex+B.size);return B.data.set(h,0),g.currentIndex+=B.size,B},r=oA(s,4);if(r==="RIFF"){s.currentIndex+=8;let g=ue(s,4);if(g!=="RMID")throw ee(),new SyntaxError(`Invalid RMIDI Header! Expected "RMID", got "${g}"`);let c=N.read(s);if(c.header!=="data")throw ee(),new SyntaxError(`Invalid RMIDI Chunk header! Expected "data", got "${c.header}"`);n=c.data;let l=!1,B=!1;for(;s.currentIndex<s.length;){let h=s.currentIndex,E=N.read(s,!0);if(E.header==="RIFF"){let m=ue(E.data,4).toLowerCase();m==="sfbk"||m==="sfpk"||m==="dls "?(y("%cFound embedded soundbank!",C.recognized),A.embeddedSoundBank=s.slice(h,h+E.size).buffer):se(`Unknown RIFF chunk: "${m}"`),m==="dls "?A.isDLSRMIDI=!0:l=!0}else if(E.header==="LIST"&&ue(E.data,4)==="INFO")for(y("%cFound RMIDI INFO chunk!",C.recognized);E.data.currentIndex<E.size;){let m=N.read(E.data,!0),D=m.header,f=m.data;switch(D){default:se(`Unknown RMIDI Info: ${D}`);break;case"INAM":A.rmidiInfo.name=f;break;case"IALB":case"IPRD":A.rmidiInfo.album=f;break;case"ICRT":case"ICRD":A.rmidiInfo.creationDate=f;break;case"IART":A.rmidiInfo.artist=f;break;case"IGNR":A.rmidiInfo.genre=f;break;case"IPIC":A.rmidiInfo.picture=f;break;case"ICOP":A.rmidiInfo.copyright=f;break;case"ICMT":A.rmidiInfo.comment=f;break;case"IENG":A.rmidiInfo.engineer=f;break;case"ISFT":A.rmidiInfo.software=f;break;case"ISBJ":A.rmidiInfo.subject=f;break;case"IENC":A.rmidiInfo.infoEncoding=f;break;case"MENC":A.rmidiInfo.midiEncoding=f;break;case"DBNK":A.bankOffset=Dn(f,2),B=!0;break}}}l&&!B&&(A.bankOffset=1),A.isDLSRMIDI&&(A.bankOffset=0),A.embeddedSoundBank===void 0&&(A.bankOffset=0)}else r==="XMF_"?n=za(A,s):n=s;let o=a(n);if(o.type!=="MThd")throw ee(),new SyntaxError(`Invalid MIDI Header! Expected "MThd", got "${o.type}"`);if(o.size!==6)throw ee(),new RangeError(`Invalid MIDI header chunk size! Expected 6, got ${o.size}`);A.format=JA(o.data,2);let i=JA(o.data,2);A.timeDivision=JA(o.data,2);for(let g=0;g<i;g++){let c=new Ot,l=a(n);if(l.type!=="MTrk")throw ee(),new SyntaxError(`Invalid track header! Expected "MTrk" got "${l.type}"`);let B,h=0;for(A.format===2&&g>0&&(h+=A.tracks[g-1].events[A.tracks[g-1].events.length-1].ticks);l.data.currentIndex<l.size;){h+=pe(l.data);let E=l.data[l.data.currentIndex],m;if(B!==void 0&&E<128)m=B;else{if(E<128)throw ee(),new SyntaxError(`Unexpected byte with no running byte. (${E})`);m=l.data[l.data.currentIndex++]}let D=pa(m),f;switch(D){case-1:f=0;break;case-2:m=l.data[l.data.currentIndex++],f=pe(l.data);break;case-3:f=pe(l.data);break;default:f=ya[m>>4],B=m;break}let O=new _(f);O.set(l.data.slice(l.data.currentIndex,l.data.currentIndex+f),0);let R=new gA(h,m,O);c.pushEvent(R),l.data.currentIndex+=f}A.tracks.push(c),y(`%cParsed %c${A.tracks.length}%c / %c${A.tracks.length}`,C.info,C.value,C.info,C.value)}y("%cAll tracks parsed correctly!",C.recognized),A.flush(!1),ee()}function Us(A){return A.toISOString().split(".")[0]+"Z"}var _a=[new Map([["domingo","Sunday"],["segunda-feira","Monday"],["ter\xE7a-feira","Tuesday"],["quarta-feira","Wednesday"],["quinta-feira","Thursday"],["sexta-feira","Friday"],["s\xE1bado","Saturday"],["janeiro","January"],["fevereiro","February"],["mar\xE7o","March"],["abril","April"],["maio","May"],["junho","June"],["julho","July"],["agosto","August"],["setembro","September"],["outubro","October"],["novembro","November"],["dezembro","December"]])];function $a(A){for(let e of _a){let t=A;for(let[n,a]of e.entries()){let r=new RegExp(n,"gi");t=t.replace(r,a)}let s=new Date(t);if(!Number.isNaN(s.getTime()))return s}}function ja(A){let e=/^(\d{2})\.(\d{2})\.(\d{4})$/.exec(A);if(e){let t=Number.parseInt(e[1]),s=Number.parseInt(e[2])-1,n=Number.parseInt(e[3]),a=new Date(n,s,t);if(!Number.isNaN(a.getTime()))return a}}function ei(A){let e=/^(\d{1,2})\s{1,2}(\d{1,2})\s{1,2}(\d{2})$/.exec(A);if(e){let t=e[1],s=(Number.parseInt(e[2])+1).toString(),n=e[3],a=new Date(`${s}/${t}/${n}`);if(!Number.isNaN(a.getTime()))return a}}function Ai(A){let e=/\b\d{4}\b/.exec(A);return e?new Date(e[0]):void 0}function Ps(A){if(A=A.trim(),A.length===0)return new Date;let e=A.replaceAll(/\b(\d+)(st|nd|rd|th)\b/g,"$1").replace(/\s+at\s+/i," "),t=new Date(e);if(Number.isNaN(t.getTime())){let s=$a(A);if(s)return s;let n=ja(A);if(n)return n;let a=ei(A);if(a)return a;let r=Ai(A);return r||(se(`Invalid date: "${A}". Replacing with the current date!`),new Date)}return t}var NA=class St{tracks=[];timeDivision=480;duration=0;tempoChanges=[{ticks:0,tempo:120}];extraMetadata=[];lyrics=[];firstNoteOn=0;keyRange={min:0,max:127};lastVoiceEventTick=0;portChannelOffsetMap=[0];loop={start:0,end:0,type:"hard"};fileName;format=0;rmidiInfo={};bankOffset=0;isKaraokeFile=!1;isMultiPort=!1;isDLSRMIDI=!1;embeddedSoundBank;binaryName;get infoEncoding(){let e=this.rmidiInfo.infoEncoding;if(!e)return;let t=e.byteLength;return e[e.byteLength-1]===0&&t--,oA(e,t)}static fromArrayBuffer(e,t=""){let s=new St;return en(s,e,t),s}static async fromFile(e){let t=new St;return en(t,await e.arrayBuffer(),e.name),t}static copyFrom(e){let t=new St;return t.copyFrom(e),t}copyFrom(e){this.copyMetadataFrom(e),this.embeddedSoundBank=e?.embeddedSoundBank?.slice(0)??void 0,this.tracks=e.tracks.map(t=>Ot.copyFrom(t))}midiTicksToSeconds(e){if(e=Math.max(e,0),this.tempoChanges.length===0)throw new Error("There are no tempo changes in the sequence. At least one is needed.");if(this.tempoChanges[this.tempoChanges.length-1].ticks!==0)throw new Error(`The last tempo change is not at 0 ticks. Got ${this.tempoChanges[this.tempoChanges.length-1].ticks} ticks.`);let t=this.tempoChanges.findIndex(n=>n.ticks<=e),s=0;for(;t<this.tempoChanges.length;){let n=this.tempoChanges[t++],a=e-n.ticks;s+=a*60/(n.tempo*this.timeDivision),e=n.ticks}return s}secondsToMIDITicks(e){if(e=Math.max(e,0),e===0)return 0;if(this.tempoChanges.length===0)throw new Error("There are no tempo changes in the sequence. At least one is needed.");if(this.tempoChanges[this.tempoChanges.length-1].ticks!==0)throw new Error(`The last tempo change is not at 0 ticks. Got ${this.tempoChanges[this.tempoChanges.length-1].ticks} ticks.`);let t=e,s=0;for(let n=this.tempoChanges.length-1;n>=0;n--){let a=this.tempoChanges[n],r=this.tempoChanges[n-1],o=r?r.ticks-a.ticks:1/0,i=60/(a.tempo*this.timeDivision),g=o*i;if(t<=g)return s+=Math.round(t/i),s;s+=o,t-=g}return s}getUsedProgramsAndKeys(e){return Pa(this,e)}preloadSynth(e){Je("%cPreloading samples...",C.info);let t=this.getUsedProgramsAndKeys(e.soundBankManager);for(let[s,n]of t.entries()){y(`%cPreloading used samples on %c${s.name}%c...`,C.info,C.recognized,C.info);for(let a of n){let[r,o]=a.split("-").map(Number);e.getVoicesForPreset(s,r,o)}}ee()}flush(e=!0){if(e)for(let t of this.tracks)t.events.sort((s,n)=>s.ticks-n.ticks);this.parseInternal()}getNoteTimes(e=0){return Ha(this,e)}writeMIDI(){return Sa(this)}writeRMIDI(e,t=js){return Ua(this,e,Fs(t,js))}modify({programChanges:e=[],controllerChanges:t=[],channelsToClear:s=[],channelsToTranspose:n=[],clearDrumParams:a=!1,reverbParams:r,chorusParams:o,delayParams:i,insertionParams:g}){Va(this,{programChanges:e,controllerChanges:t,channelsToClear:s,channelsToTranspose:n,clearDrumParams:a,reverbParams:r,chorusParams:o,delayParams:i,insertionParams:g})}applySnapshot(e){Xa(this,e)}getName(e="Shift_JIS"){let t="",s=this.getRMIDInfo("name");if(s)return s.trim();if(this.binaryName){e=this.getRMIDInfo("midiEncoding")??e;try{t=new TextDecoder(e).decode(this.binaryName).trim()}catch(n){se(`Failed to decode MIDI name: ${n}`)}}return t||this.fileName}getExtraMetadata(e="Shift_JIS"){e=this.infoEncoding??e;let t=new TextDecoder(e);return this.extraMetadata.map(s=>t.decode(s.data).replaceAll(/@T|@A/g,"").trim())}setRMIDInfo(e,t){if(this.rmidiInfo.infoEncoding=BA("utf-8",!0),e==="picture")this.rmidiInfo.picture=new Uint8Array(t);else if(e==="creationDate")this.rmidiInfo.creationDate=BA(Us(t),!0);else{let s=new TextEncoder().encode(t);this.rmidiInfo[e]=new Uint8Array([...s,0])}}getRMIDInfo(e){if(!this.rmidiInfo[e])return;let t=this.infoEncoding??"UTF-8";if(e==="picture")return this.rmidiInfo[e].buffer;if(e==="creationDate")return Ps(oA(this.rmidiInfo[e]));try{let s=new TextDecoder(t),n=this.rmidiInfo[e];return n[n.length-1]===0&&(n=n?.slice(0,-1)),s.decode(n.buffer).trim()}catch(s){se(`Failed to decode ${e} name: ${s}`);return}}iterate(e){let t=new Array(this.tracks.length).fill(0),s=this.tracks.length,n=()=>{let a=0,r=1/0;for(let[o,{events:i}]of this.tracks.entries())t[o]>=i.length||i[t[o]].ticks<r&&(a=o,r=i[t[o]].ticks);return a};for(;s>0;){let a=n(),r=this.tracks[a].events;if(t[a]>=r.length){s--;continue}let o=r[t[a]];e(o,a,t),t[a]++}}copyMetadataFrom(e){this.fileName=e.fileName,this.timeDivision=e.timeDivision,this.duration=e.duration,this.firstNoteOn=e.firstNoteOn,this.lastVoiceEventTick=e.lastVoiceEventTick,this.format=e.format,this.bankOffset=e.bankOffset,this.isKaraokeFile=e.isKaraokeFile,this.isMultiPort=e.isMultiPort,this.isDLSRMIDI=e.isDLSRMIDI,this.isDLSRMIDI=e.isDLSRMIDI,this.tempoChanges=[...e.tempoChanges],this.extraMetadata=e.extraMetadata.map(t=>new gA(t.ticks,t.statusByte,new _(t.data))),this.lyrics=e.lyrics.map(t=>new gA(t.ticks,t.statusByte,new _(t.data))),this.portChannelOffsetMap=[...e.portChannelOffsetMap],this.binaryName=e?.binaryName?.slice(),this.loop={...e.loop},this.keyRange={...e.keyRange},this.rmidiInfo={};for(let t of Object.entries(e.rmidiInfo)){let s=t[0],n=t[1];this.rmidiInfo[s]=new Uint8Array(n)}}parseInternal(){je("%cInterpreting MIDI events...",C.info);let e=!1;this.tempoChanges=[{ticks:0,tempo:120}],this.extraMetadata=[],this.lyrics=[],this.firstNoteOn=0,this.keyRange={max:0,min:127},this.lastVoiceEventTick=0,this.portChannelOffsetMap=[0],this.loop={start:0,end:0,type:"hard"},this.isKaraokeFile=!1,this.isMultiPort=!1;let t=!1;this.rmidiInfo.name!==void 0&&(t=!0);let s=null,n=null,a="hard";for(let g of this.tracks){let c=new Set,l=!1;for(let h=0;h<g.events.length;h++){let E=g.events[h];if(E.statusByte>=128&&E.statusByte<240)switch(l=!0,E.ticks>this.lastVoiceEventTick&&(this.lastVoiceEventTick=E.ticks),E.statusByte&240){case M.controllerChange:switch(E.data[0]){case 2:case 111:case 116:s=E.ticks;break;case 4:case 117:n===null?(a="soft",n=E.ticks):n=0;break;case 0:this.isDLSRMIDI&&E.data[1]!==0&&E.data[1]!==127&&(y("%cDLS RMIDI with offset 1 detected!",C.recognized),this.bankOffset=1)}break;case M.noteOn:{c.add(E.statusByte&15);let D=E.data[0];this.keyRange.min=Math.min(this.keyRange.min,D),this.keyRange.max=Math.max(this.keyRange.max,D);break}}let m=oA(E.data);switch(E.statusByte){case M.endOfTrack:h!==g.events.length-1&&(g.deleteEvent(h),h--,se("Unexpected EndOfTrack. Removing!"));break;case M.setTempo:this.tempoChanges.push({ticks:E.ticks,tempo:6e7/zA(E.data,3)});break;case M.marker:switch(m.trim().toLowerCase()){default:break;case"start":case"loopstart":s=E.ticks;break;case"loopend":n=E.ticks}break;case M.copyright:this.extraMetadata.push(E);break;case M.lyric:m.trim().startsWith("@KMIDI KARAOKE FILE")&&(this.isKaraokeFile=!0,y("%cKaraoke MIDI detected!",C.recognized)),this.isKaraokeFile?E.statusByte=M.text:this.lyrics.push(E);case M.text:{let D=m.trim();D.startsWith("@KMIDI KARAOKE FILE")?(this.isKaraokeFile=!0,y("%cKaraoke MIDI detected!",C.recognized)):this.isKaraokeFile&&(D.startsWith("@T")||D.startsWith("@A")?e?this.extraMetadata.push(E):(this.binaryName=E.data.slice(2),e=!0,t=!0):D.startsWith("@")||this.lyrics.push(E));break}}}g.channels=c,g.name="";let B=g.events.find(h=>h.statusByte===M.trackName);B&&this.tracks.indexOf(g)>0&&(g.name=oA(B.data),!l&&!g.name.toLowerCase().includes("setup")&&this.extraMetadata.push(B))}this.tempoChanges.reverse(),y("%cCorrecting loops, ports and detecting notes...",C.info);let r=[];for(let g of this.tracks){let c=g.events.find(l=>(l.statusByte&240)===M.noteOn);c&&r.push(c.ticks)}this.firstNoteOn=Math.min(...r),y(`%cFirst note-on detected at: %c${this.firstNoteOn}%c ticks!`,C.info,C.recognized,C.info),s??=this.firstNoteOn,(n===null||n===0)&&(n=this.lastVoiceEventTick),this.loop={start:s,end:n,type:a},this.lastVoiceEventTick=Math.max(this.lastVoiceEventTick,this.loop.end),y(`%cLoop points: start: %c${this.loop.start}%c end: %c${this.loop.end}`,C.info,C.recognized,C.info,C.recognized);let o=0;this.portChannelOffsetMap=[];for(let g of this.tracks)if(g.port=-1,g.channels.size!==0)for(let c of g.events){if(c.statusByte!==M.midiPort)continue;let l=c.data[0];g.port=l,this.portChannelOffsetMap[l]===void 0&&(this.portChannelOffsetMap[l]=o,o+=16)}this.portChannelOffsetMap=[...this.portChannelOffsetMap].map(g=>g??0);let i=1/0;for(let g of this.tracks)g.port!==-1&&i>g.port&&(i=g.port);i===1/0&&(i=0);for(let g of this.tracks)(g.port===-1||g.port===void 0)&&(g.port=i);if(this.portChannelOffsetMap.length===0&&(this.portChannelOffsetMap=[0]),this.portChannelOffsetMap.length<2?y("%cNo additional MIDI Ports detected.",C.info):(this.isMultiPort=!0,y("%cMIDI Ports detected!",C.recognized)),!t)if(this.tracks.length>1){if(!this.tracks[0].events.some(g=>g.statusByte>=M.noteOn&&g.statusByte<M.polyPressure)){let g=this.tracks[0].events.find(c=>c.statusByte===M.trackName);g&&(this.binaryName=g.data)}}else{let g=this.tracks[0].events.find(c=>c.statusByte===M.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 gA(0,M.trackName,new _(c)))}this.duration=this.midiTicksToSeconds(this.lastVoiceEventTick),this.binaryName?.length===0&&(this.binaryName=void 0),y(`%cMIDI file parsed. Total tick time: %c${this.lastVoiceEventTick}%c, total seconds time: %c${ls(Math.ceil(this.duration)).time}`,C.info,C.recognized,C.info,C.recognized),ee()}};function ti(A,e){if(this.externalMIDIPlayback&&A.statusByte>=128){this.sendMIDIMessage([A.statusByte,...A.data]);return}let t=this._midiData.tracks[e],s=Gs(A.statusByte),n=this.midiPortChannelOffsets[this.currentMIDIPorts[e]]||0;switch(s.channel+=n,s.status){case M.noteOn:{let a=A.data[1];if(a>0)this.synth.noteOn(s.channel,A.data[0],a),this.playingNotes.push({midiNote:A.data[0],channel:s.channel,velocity:a});else{this.synth.noteOff(s.channel,A.data[0]);let r=this.playingNotes.findIndex(o=>o.midiNote===A.data[0]&&o.channel===s.channel);r!==-1&&this.playingNotes.splice(r,1)}break}case M.noteOff:{this.synth.noteOff(s.channel,A.data[0]);let a=this.playingNotes.findIndex(r=>r.midiNote===A.data[0]&&r.channel===s.channel);a!==-1&&this.playingNotes.splice(a,1);break}case M.pitchWheel:this.synth.pitchWheel(s.channel,A.data[1]<<7|A.data[0]);break;case M.controllerChange:if(this._midiData.isMultiPort&&t.channels.size===0)return;this.synth.controllerChange(s.channel,A.data[0],A.data[1]);break;case M.programChange:if(this._midiData.isMultiPort&&t.channels.size===0)return;this.synth.programChange(s.channel,A.data[0]);break;case M.polyPressure:this.synth.polyPressure(s.channel,A.data[0],A.data[1]);break;case M.channelPressure:this.synth.channelPressure(s.channel,A.data[0]);break;case M.systemExclusive:this.synth.systemExclusive(A.data,n);break;case M.setTempo:{let a=6e7/zA(A.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"));break}case M.timeSignature:case M.endOfTrack:case M.midiChannelPrefix:case M.songPosition:case M.activeSensing:case M.keySignature:case M.sequenceNumber:case M.sequenceSpecific:case M.text:case M.lyric:case M.copyright:case M.trackName:case M.marker:case M.cuePoint:case M.instrumentName:case M.programName:break;case M.midiPort:this.assignMIDIPort(e,A.data[0]);break;case M.reset:this.synth.stopAllChannels(),this.synth.resetAllControllers();break;default:y(`%cUnrecognized Event: %c${A.statusByte}%c status byte: %c${Object.keys(M).find(a=>M[a]===s.status)}`,C.warn,C.unrecognized,C.warn,C.value);break}s.status>=0&&s.status<128&&this.callEvent("metaEvent",{event:A,trackIndex:e})}function si(){if(this.paused||!this._midiData)return;let A=this.currentTime;for(;this.playedTime<A;){let e=this.findFirstEventIndex(),t=this._midiData.tracks[e].events[this.eventIndexes[e]++];this.processEvent(t,e);let s=this.findFirstEventIndex(),n=this._midiData.tracks[s];if(this.loopCount>0&&this._midiData.loop.end<=t.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(n.events.length<=this.eventIndexes[s]||t.ticks>=this._midiData.lastVoiceEventTick){this.songIsFinished();return}let a=n.events[this.eventIndexes[s]];this.playedTime+=this.oneTickToSeconds*(a.ticks-t.ticks)}}function ni(A,e){this._midiData.tracks[A].channels.size!==0&&(this.midiPortChannelOffset===0&&(this.midiPortChannelOffset+=16,this.midiPortChannelOffsets[e]=0),this.midiPortChannelOffsets[e]===void 0&&(this.synth.midiChannels.length<this.midiPortChannelOffset+15&&this.addNewMIDIPort(),this.midiPortChannelOffsets[e]=this.midiPortChannelOffset,this.midiPortChannelOffset+=16),this.currentMIDIPorts[A]=e)}function ai(A){if(!A.tracks)throw new Error("This MIDI has no tracks!");if(A.duration===0){se("This MIDI file has a duration of exactly 0 seconds."),this.pausedTime=0,this.isFinished=!0;return}this.oneTickToSeconds=60/(120*A.timeDivision),this._midiData=A,this.isFinished=!1,this.synth.clearEmbeddedBank(),this._midiData.embeddedSoundBank!==void 0&&(y("%cEmbedded soundbank detected! Using it.",C.recognized),this.synth.setEmbeddedSoundBank(this._midiData.embeddedSoundBank,this._midiData.bankOffset),this.preload&&this._midiData.preloadSynth(this.synth)),this.currentMIDIPorts=this._midiData.tracks.map(e=>e.port),this.midiPortChannelOffset=0,this.midiPortChannelOffsets={};for(let[e,t]of this._midiData.tracks.entries())this.assignMIDIPort(e,t.port);this.firstNoteTime=this._midiData.midiTicksToSeconds(this._midiData.firstNoteOn),y(`%cTotal song time: ${ls(Math.ceil(this._midiData.duration)).time}`,C.recognized),this.callEvent("songChange",{songIndex:this._songIndex}),this._midiData.duration<=.2&&(se(`%cVery short song: (${ls(Math.round(this._midiData.duration)).time}). Disabling loop!`,C.warn),this.loopCount=0),this.currentTime=0}var I=Object.freeze({INVALID:-1,startAddrsOffset:0,endAddrOffset:1,startloopAddrsOffset:2,endloopAddrsOffset:3,startAddrsCoarseOffset:4,modLfoToPitch:5,vibLfoToPitch:6,modEnvToPitch:7,initialFilterFc:8,initialFilterQ:9,modLfoToFilterFc:10,modEnvToFilterFc:11,endAddrsCoarseOffset:12,modLfoToVolume:13,unused1:14,chorusEffectsSend:15,reverbEffectsSend:16,pan:17,unused2:18,unused3:19,unused4:20,delayModLFO:21,freqModLFO:22,delayVibLFO:23,freqVibLFO:24,delayModEnv:25,attackModEnv:26,holdModEnv:27,decayModEnv:28,sustainModEnv:29,releaseModEnv:30,keyNumToModEnvHold:31,keyNumToModEnvDecay:32,delayVolEnv:33,attackVolEnv:34,holdVolEnv:35,decayVolEnv:36,sustainVolEnv:37,releaseVolEnv:38,keyNumToVolEnvHold:39,keyNumToVolEnvDecay:40,instrument:41,reserved1:42,keyRange:43,velRange:44,startloopAddrsCoarseOffset:45,keyNum:46,velocity:47,initialAttenuation:48,reserved2:49,endloopAddrsCoarseOffset:50,coarseTune:51,fineTune:52,sampleID:53,sampleModes:54,reserved3:55,scaleTuning:56,exclusiveClass:57,overridingRootKey:58,unused5:59,endOper:60,amplitude:61,vibLfoRate:62,vibLfoAmplitudeDepth:63,vibLfoToFilterFc:64,modLfoRate:65,modLfoAmplitudeDepth:66}),WA=Object.keys(I).length,ii=Math.max(...Object.values(I)),tA=Object.freeze({[I.startAddrsOffset]:{min:0,max:32768,def:0,nrpn:1},[I.endAddrOffset]:{min:-32768,max:32768,def:0,nrpn:1},[I.startloopAddrsOffset]:{min:-32768,max:32768,def:0,nrpn:1},[I.endloopAddrsOffset]:{min:-32768,max:32768,def:0,nrpn:1},[I.startAddrsCoarseOffset]:{min:0,max:32768,def:0,nrpn:1},[I.modLfoToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[I.vibLfoToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[I.modEnvToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[I.initialFilterFc]:{min:1500,max:13500,def:13500,nrpn:2},[I.initialFilterQ]:{min:0,max:960,def:0,nrpn:1},[I.modLfoToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[I.modEnvToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[I.endAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[I.modLfoToVolume]:{min:-960,max:960,def:0,nrpn:1},[I.chorusEffectsSend]:{min:0,max:1e3,def:0,nrpn:1},[I.reverbEffectsSend]:{min:0,max:1e3,def:0,nrpn:1},[I.pan]:{min:-500,max:500,def:0,nrpn:1},[I.delayModLFO]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[I.freqModLFO]:{min:-16e3,max:4500,def:0,nrpn:4},[I.delayVibLFO]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[I.freqVibLFO]:{min:-16e3,max:4500,def:0,nrpn:4},[I.delayModEnv]:{min:-32768,max:5e3,def:-32768,nrpn:2},[I.attackModEnv]:{min:-32768,max:8e3,def:-32768,nrpn:2},[I.holdModEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[I.decayModEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[I.sustainModEnv]:{min:0,max:1e3,def:0,nrpn:1},[I.releaseModEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[I.keyNumToModEnvHold]:{min:-1200,max:1200,def:0,nrpn:1},[I.keyNumToModEnvDecay]:{min:-1200,max:1200,def:0,nrpn:1},[I.delayVolEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[I.attackVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[I.holdVolEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[I.decayVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[I.sustainVolEnv]:{min:0,max:1440,def:0,nrpn:1},[I.releaseVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[I.keyNumToVolEnvHold]:{min:-1200,max:1200,def:0,nrpn:1},[I.keyNumToVolEnvDecay]:{min:-1200,max:1200,def:0,nrpn:1},[I.startloopAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[I.keyNum]:{min:-1,max:127,def:-1,nrpn:1},[I.velocity]:{min:-1,max:127,def:-1,nrpn:1},[I.initialAttenuation]:{min:0,max:1440,def:0,nrpn:1},[I.endloopAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[I.coarseTune]:{min:-120,max:120,def:0,nrpn:1},[I.fineTune]:{min:-12700,max:12700,def:0,nrpn:1},[I.scaleTuning]:{min:0,max:1200,def:100,nrpn:1},[I.exclusiveClass]:{min:0,max:99999,def:0,nrpn:0},[I.overridingRootKey]:{min:-1,max:127,def:-1,nrpn:0},[I.sampleModes]:{min:0,max:3,def:0,nrpn:0},[I.amplitude]:{min:-1e3,max:1e3,def:0,nrpn:1},[I.vibLfoRate]:{min:-1e3,max:1e3,def:0,nrpn:1},[I.vibLfoToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[I.vibLfoAmplitudeDepth]:{min:0,max:1e3,def:0,nrpn:1},[I.modLfoRate]:{min:-1e3,max:1e3,def:0,nrpn:1},[I.modLfoAmplitudeDepth]:{min:0,max:1e3,def:0,nrpn:1}}),Cs=new Int16Array(WA);for(let A=0;A<Cs.length;A++)tA[A]&&(Cs[A]=tA[A].def);var Ne={monoSample:1,rightSample:2,leftSample:4,linkedSample:8,romMonoSample:32769,romRightSample:32770,romLeftSample:32772,romLinkedSample:32776},Ae={noController:0,noteOnVelocity:2,noteOnKeyNum:3,polyPressure:10,channelPressure:13,pitchWheel:14,pitchWheelRange:16,link:127},Qe={linear:0,concave:1,convex:2,switch:3};var Z={none:0,modLfo:1,velocity:2,keyNum:3,volEnv:4,modEnv:5,pitchWheel:6,polyPressure:7,channelPressure:8,vibratoLfo:9,modulationWheel:129,volume:135,pan:138,expression:139,chorus:221,reverb:219,pitchWheelRange:256,fineTune:257,coarseTune:258},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},An={forward:0,loopAndRelease:1};var Yt=new Int16Array(147).fill(0),we=(A,e)=>Yt[A]=e<<7;we(d.mainVolume,100);we(d.balance,64);we(d.expressionController,127);we(d.pan,64);we(d.portamentoOnOff,127);we(d.filterResonance,64);we(d.releaseTime,64);we(d.attackTime,64);we(d.brightness,64);we(d.decayTime,64);we(d.vibratoRate,64);we(d.vibratoDepth,64);we(d.vibratoDelay,64);we(d.generalPurposeController6,64);we(d.generalPurposeController8,64);we(d.registeredParameterLSB,127);we(d.registeredParameterMSB,127);we(d.nonRegisteredParameterLSB,127);we(d.nonRegisteredParameterMSB,127);we(128+Ae.pitchWheel,64);we(128+Ae.pitchWheelRange,2);var Pn=Object.keys(oe).length,xn=new Float32Array(Pn);xn[oe.modulationMultiplier]=1;var xs=new Int8Array(128).fill(127);xs[35]=0;xs[36]=0;function ri(A){this.lockedControllers[d.portamentoControl]||(this.channelSystem==="xg"?this.controllerChange(d.portamentoControl,60,A):this.controllerChange(d.portamentoControl,0,A))}function oi(A=!0){for(let[t,s]of Yt.entries())this.lockedControllers[t]||(this.midiControllers[t]!==s&&t<127?t!==d.portamentoControl&&t!==d.dataEntryMSB&&t!==d.registeredParameterMSB&&t!==d.registeredParameterLSB&&t!==d.nonRegisteredParameterMSB&&t!==d.nonRegisteredParameterLSB&&this.controllerChange(t,s>>7,A):this.midiControllers[t]=s);this.octaveTuning.fill(0),ri.call(this,A),this.rxChannel=this.channel,this.assignMode=2,this.randomPan=!1,this.insertionEnabled&&!this.synthCore.masterParameters.insertionEffectLock&&(this.synthCore.callEvent("effectChange",{effect:"insertion",parameter:-2,value:this.channel}),this.insertionEnabled=!1),this.cc1=16,this.cc2=17,this.drumMap=this.channel%16===9?1:0,this.resetDrumParams(),this.resetVibratoParams(),!this.lockedControllers[d.monoModeOn]&&!this.lockedControllers[d.polyModeOn]&&(this.polyMode=!0),this.perNotePitch=!1,this.pitchWheel(8192),this.sysExModulators.resetModulators();let e=this.customControllers[oe.channelTransposeFine];this.customControllers.set(xn),this.setCustomController(oe.channelTransposeFine,e),this.resetParameters()}function hi(){this.setBankMSB(ke.getDefaultBank(this.channelSystem)),this.setBankLSB(0),this.setGSDrums(!1),this.setDrums(this.channel%16===9),this.programChange(0)}var Hn=new Set([d.bankSelect,d.bankSelectLSB,d.mainVolume,d.mainVolumeLSB,d.pan,d.panLSB,d.reverbDepth,d.tremoloDepth,d.chorusDepth,d.variationDepth,d.phaserDepth,d.soundVariation,d.filterResonance,d.releaseTime,d.attackTime,d.brightness,d.decayTime,d.vibratoRate,d.vibratoDepth,d.vibratoDelay,d.soundController10,d.polyModeOn,d.monoModeOn,d.omniModeOn,d.omniModeOff,d.dataEntryMSB,d.dataEntryLSB,d.nonRegisteredParameterLSB,d.nonRegisteredParameterMSB,d.registeredParameterLSB,d.registeredParameterMSB]);function gi(){this.perNotePitch=!1,this.pitchWheel(8192);for(let A=0;A<128;A++){let e=Yt[A];!Hn.has(A)&&e!==this.midiControllers[A]&&A!==d.portamentoControl&&this.controllerChange(A,e>>7)}this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}function Ii(){this.dataEntryState=Ve.Idle,this.midiControllers[d.nonRegisteredParameterLSB]=16256,this.midiControllers[d.nonRegisteredParameterMSB]=16256,this.midiControllers[d.registeredParameterLSB]=16256,this.midiControllers[d.registeredParameterMSB]=16256,this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}var et=Yt.slice(0,128),ci=new Set([d.dataDecrement,d.dataIncrement,d.dataEntryMSB,d.dataEntryLSB,d.registeredParameterLSB,d.registeredParameterMSB,d.nonRegisteredParameterLSB,d.nonRegisteredParameterMSB,d.bankSelect,d.bankSelectLSB,d.resetAllControllers,d.monoModeOn,d.polyModeOn]),tn=A=>ci.has(A);function li(A,e=void 0){if(!this._midiData)return!1;this.oneTickToSeconds=60/(120*this._midiData.timeDivision),this.sendMIDIReset(),this.playedTime=0,this.eventIndexes=new Array(this._midiData.tracks.length).fill(0);let t=this.synth.midiChannels.length,s=new Array(t).fill(8192),n=[];for(let i=0;i<t;i++)n.push([...et]);let a,r=0;function o(i){if(s[i]=8192,n?.[i]!==void 0)for(let[g,c]of et.entries())Hn.has(g)||(n[i][g]=c)}for(;;){let i=this.findFirstEventIndex(),g=this._midiData.tracks[i],c=g.events[this.eventIndexes[i]];if(e===void 0){if(this.playedTime>=A)break}else if(c.ticks>=e)break;let l=Gs(c.statusByte),B=l.channel+(this.midiPortChannelOffsets[g.port]||0);switch(l.status){case M.noteOn:n[B]??=[...et],n[B][d.portamentoControl]=c.data[0];break;case M.noteOff:break;case M.pitchWheel:s[B]=c.data[1]<<7|c.data[0];break;case M.controllerChange:{if(this._midiData.isMultiPort&&g.channels.size===0)break;let E=c.data[0];if(tn(E)){let m=c.data[1];E===d.resetAllControllers&&o(B),this.sendMIDICC(B,E,m)}else n[B]??=[...et],n[B][E]=c.data[1];break}case M.setTempo:{let E=6e7/zA(c.data,3);this.oneTickToSeconds=60/(E*this._midiData.timeDivision),a=c,r=i;break}default:this.processEvent(c,i);break}this.eventIndexes[i]++,i=this.findFirstEventIndex();let h=this._midiData.tracks[i].events[this.eventIndexes[i]];if(h===void 0)return this.stop(),!1;this.playedTime+=this.oneTickToSeconds*(h.ticks-c.ticks)}for(let i=0;i<t;i++)if(s[i]!==void 0&&this.sendMIDIPitchWheel(i,s[i]),n[i]!==void 0)for(let[g,c]of n[i].entries())c!==et[g]&&!tn(g)&&this.sendMIDICC(i,g,c);return a&&this.callEvent("metaEvent",{event:a,trackIndex:r}),this.paused&&(this.pausedTime=this.playedTime),!0}var On=class{songs=[];shuffledSongIndexes=[];synth;externalMIDIPlayback=!1;retriggerPausedNotes=!0;loopCount=0;skipToFirstNoteOn=!0;isFinished=!1;preload=!0;onEventCall;processTick=si.bind(this);firstNoteTime=0;oneTickToSeconds=0;eventIndexes=[];playedTime=0;pausedTime=-1;absoluteStartTime=0;playingNotes=[];currentMIDIPorts=[];midiPortChannelOffset=0;midiPortChannelOffsets={};assignMIDIPort=ni.bind(this);loadNewSequence=ai.bind(this);processEvent=ti.bind(this);setTimeTo=li.bind(this);constructor(A){this.synth=A,this.absoluteStartTime=this.synth.currentSynthTime}_midiData;get midiData(){return this._midiData}get duration(){return this._midiData?.duration??0}_songIndex=0;get songIndex(){return this._songIndex}set songIndex(A){this._songIndex=A,this._songIndex=Math.max(0,A%this.songs.length),this.loadCurrentSong()}_shuffleMode=!1;get shuffleMode(){return this._shuffleMode}set shuffleMode(A){this._shuffleMode=A}_playbackRate=1;get playbackRate(){return this._playbackRate}set playbackRate(A){let e=this.currentTime;this._playbackRate=A,this.recalculateStartTime(e)}get currentTime(){return this.pausedTime!==void 0?this.pausedTime:(this.synth.currentSynthTime-this.absoluteStartTime)*this._playbackRate}set currentTime(A){if(this._midiData)if(this.paused&&(this.pausedTime=A),A>this._midiData.duration||A<0)this.skipToFirstNoteOn?this.setTimeTicks(this._midiData.firstNoteOn-1):this.setTimeTicks(0);else if(this.skipToFirstNoteOn&&A<this.firstNoteTime){this.setTimeTicks(this._midiData.firstNoteOn-1);return}else this.playingNotes=[],this.callEvent("timeChange",{newTime:A}),this.setTimeTo(A),this.recalculateStartTime(A)}get paused(){return this.pausedTime!==void 0}play(){if(!this._midiData){se("No songs loaded in the sequencer. Ignoring the play call.");return}if(this.currentTime>=this._midiData.duration&&(this.currentTime=0),this.paused&&this.recalculateStartTime(this.pausedTime??0),this.retriggerPausedNotes)for(let A of this.playingNotes)this.sendMIDINoteOn(A.channel,A.midiNote,A.velocity);this.pausedTime=void 0}pause(){this.pauseInternal(!1)}loadNewSongList(A){if(this.songs=A,this.songs.length!==0){if(this._songIndex=0,this.shuffleSongIndexes(),this.callEvent("songListChange",{newSongList:[...this.songs]}),this.preload){je("%cPreloading all songs...",C.info);for(let e of this.songs)e.embeddedSoundBank===void 0&&e.preloadSynth(this.synth);ee()}this.loadCurrentSong()}}callEvent(A,e){this?.onEventCall?.({type:A,data:e})}pauseInternal(A){this.paused||(this.stop(),this.callEvent("pause",{isFinished:A}),A&&this.callEvent("songEnded",{}))}songIsFinished(){if(this.isFinished=!0,this.songs.length===1){this.pauseInternal(!0);return}this._songIndex++,this._songIndex%=this.songs.length,this.loadCurrentSong()}stop(){this.pausedTime=this.currentTime,this.sendMIDIAllOff()}findFirstEventIndex(){let A=0,e=1/0,t=this._midiData.tracks.length;for(let s=0;s<t;s++){let n=this._midiData.tracks[s];if(this.eventIndexes[s]>=n.events.length)continue;let a=n.events[this.eventIndexes[s]];a.ticks<e&&(A=s,e=a.ticks)}return A}addNewMIDIPort(){for(let A=0;A<16;A++)this.synth.createMIDIChannel()}sendMIDIMessage(A){if(!this.externalMIDIPlayback){se(`Attempting to send ${Pt(A)} to the synthesizer via sendMIDIMessage. This shouldn't happen!`);return}this.callEvent("midiMessage",{message:A,time:this.synth.currentSynthTime})}sendMIDIAllOff(){for(let A=0;A<16;A++)this.sendMIDICC(A,d.sustainPedal,0);if(!this.externalMIDIPlayback){this.synth.stopAllChannels();return}for(let A of this.playingNotes)this.sendMIDINoteOff(A.channel,A.midiNote);for(let A=0;A<16;A++)this.sendMIDICC(A,d.allNotesOff,0),this.sendMIDICC(A,d.allSoundOff,0)}sendMIDIReset(){if(this.sendMIDIAllOff(),!this.externalMIDIPlayback){this.synth.resetAllControllers();return}this.sendMIDIMessage([M.reset])}loadCurrentSong(){let A=this._songIndex;this._shuffleMode&&(A=this.shuffledSongIndexes[this._songIndex]),this.loadNewSequence(this.songs[A])}shuffleSongIndexes(){let A=this.songs.map((e,t)=>t);for(this.shuffledSongIndexes.length=0;A.length>0;){let e=A[Math.floor(Math.random()*A.length)];this.shuffledSongIndexes.push(e),A.splice(A.indexOf(e),1)}}setTimeTicks(A){if(!this._midiData)return;this.playingNotes=[];let e=this._midiData.midiTicksToSeconds(A);this.callEvent("timeChange",{newTime:e});let t=this.setTimeTo(0,A);this.recalculateStartTime(this.playedTime)}recalculateStartTime(A){this.absoluteStartTime=this.synth.currentSynthTime-A/this._playbackRate}jumpToTick(A){if(!this._midiData)return;this.sendMIDIAllOff();let e=this._midiData.midiTicksToSeconds(A);this.callEvent("timeChange",{newTime:e}),this.recalculateStartTime(e),this.playedTime=e,this.eventIndexes.length=0;for(let s of this._midiData.tracks){let n=s.events.findIndex(a=>a.ticks>=A);this.eventIndexes.push(n===-1?s.events.length:n)}let t=this._midiData.tempoChanges.find(s=>s.ticks<=A);this.oneTickToSeconds=60/(t.tempo*this._midiData.timeDivision)}sendMIDINoteOn(A,e,t){if(!this.externalMIDIPlayback){this.synth.noteOn(A,e,t);return}A%=16,this.sendMIDIMessage([M.noteOn|A,e,t])}sendMIDINoteOff(A,e){if(!this.externalMIDIPlayback){this.synth.noteOff(A,e);return}A%=16,this.sendMIDIMessage([M.noteOff|A,e,64])}sendMIDICC(A,e,t){if(!this.externalMIDIPlayback){this.synth.controllerChange(A,e,t);return}A%=16,this.sendMIDIMessage([M.controllerChange|A,e,t])}sendMIDIPitchWheel(A,e){if(!this.externalMIDIPlayback){this.synth.pitchWheel(A,e);return}A%=16,this.sendMIDIMessage([M.pitchWheel|A,e&127,e>>7])}},it=it!==void 0?it:{},sn=!1,Yn;it.isInitialized=new Promise(A=>Yn=A);var Ci=function(A){var e,t,s,n,a,r,o,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",g="",c=0;A=A.replace(/[^A-Za-z0-9\+\/\=]/g,"");do n=i.indexOf(A.charAt(c++)),a=i.indexOf(A.charAt(c++)),r=i.indexOf(A.charAt(c++)),o=i.indexOf(A.charAt(c++)),e=n<<2|a>>4,t=(15&a)<<4|r>>2,s=(3&r)<<6|o,g+=String.fromCharCode(e),r!==64&&(g+=String.fromCharCode(t)),o!==64&&(g+=String.fromCharCode(s));while(c<A.length);return g};(function(){var A,e,t,s,n,a,r,o,i,g,c,l,B,h=h!==void 0?h:{};h.wasmBinary=Uint8Array.from(Ci("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(b){return b.charCodeAt(0)});var h=h!==void 0?h:{},E={};for(A in h)h.hasOwnProperty(A)&&(E[A]=h[A]);h.arguments=[],h.thisProgram="./this.program",h.quit=function(b,w){throw w},h.preRun=[],h.postRun=[];var m=!1,D=!1,f=!1,O=!1;m=typeof window=="object",D=typeof importScripts=="function",f=typeof process=="object"&&typeof aaa=="function"&&!m&&!D,O=!m&&!f&&!D;var R="";function Q(b){return h.locateFile?h.locateFile(b,R):R+b}f?(R="/",h.read=function(w,F){var W;return e||(e=void 0),t||(t=void 0),w=t.normalize(w),W=e.readFileSync(w),F?W:W.toString()},h.readBinary=function(w){var F=h.read(w,!0);return F.buffer||(F=new Uint8Array(F)),q(F.buffer),F},process.argv.length>1&&(h.thisProgram=process.argv[1].replace(/\\/g,"/")),h.arguments=process.argv.slice(2),process.on("uncaughtException",function(b){if(!(b instanceof We))throw b}),process.on("unhandledRejection",function(b,w){process.exit(1)}),h.quit=function(b){process.exit(b)},h.inspect=function(){return"[Emscripten Module object]"}):O?(typeof read<"u"&&(h.read=function(w){return read(w)}),h.readBinary=function(w){var F;return typeof readbuffer=="function"?new Uint8Array(readbuffer(w)):(q(typeof(F=read(w,"binary"))=="object"),F)},typeof scriptArgs<"u"?h.arguments=scriptArgs:typeof arguments<"u"&&(h.arguments=arguments),typeof quit=="function"&&(h.quit=function(b){quit(b)})):(m||D)&&(m?document.currentScript&&(R=document.currentScript.src):R=self.location.href,R=R.indexOf("blob:")!==0?R.split("/").slice(0,-1).join("/")+"/":"",h.read=function(w){var F=new XMLHttpRequest;return F.open("GET",w,!1),F.send(null),F.responseText},D&&(h.readBinary=function(w){var F=new XMLHttpRequest;return F.open("GET",w,!1),F.responseType="arraybuffer",F.send(null),new Uint8Array(F.response)}),h.readAsync=function(w,F,W){var ie=new XMLHttpRequest;ie.open("GET",w,!0),ie.responseType="arraybuffer",ie.onload=function(){if(ie.status==200||ie.status==0&&ie.response){F(ie.response);return}W()},ie.onerror=W,ie.send(null)},h.setWindowTitle=function(b){document.title=b});var T=h.print||(typeof console<"u"?console.log.bind(console):typeof print<"u"?print:null),U=h.printErr||(typeof printErr<"u"?printErr:typeof console<"u"&&console.warn.bind(console)||T);for(A in E)E.hasOwnProperty(A)&&(h[A]=E[A]);function x(b){var w=i;return i=i+b+15&-16,w}function V(b,w){return w||(w=16),b=Math.ceil(b/w)*w}function J(b){J.shown||(J.shown={}),J.shown[b]||(J.shown[b]=1,U(b))}E=void 0;var L={"f64-rem":function(b,w){return b%w},debugger:function(){}},H=0;function q(b,w){b||nA("Assertion failed: "+w)}function u(b){var w=h["_"+b];return q(w,"Cannot call unknown function "+b+", make sure it is exported"),w}var v={stackSave:function(){UA()},stackRestore:function(){SA()},arrayToC:function(b){var w,F,W=EA(b.length);return w=b,F=W,n.set(w,F),W},stringToC:function(b){var w=0;if(b!=null&&b!==0){var F=(b.length<<2)+1;w=EA(F),Ce(b,w,F)}return w}},S={string:v.stringToC,array:v.arrayToC};function k(b,w,F,W,ie){var ce=u(b),me=[],$=0;if(W)for(var He=0;He<W.length;He++){var Re=S[F[He]];Re?($===0&&($=UA()),me[He]=Re(W[He])):me[He]=W[He]}var re,Ee=ce.apply(null,me);return Ee=(re=Ee,w==="string"?p(re):w==="boolean"?!!re:re),$!==0&&SA($),Ee}function p(b,w){if(w===0||!b)return"";for(var F,W,ie,ce=0,me=0;ce|=W=a[b+me>>0],(W!=0||w)&&(me++,!w||me!=w););w||(w=me);var $="";if(ce<128){for(;w>0;)ie=String.fromCharCode.apply(String,a.subarray(b,b+Math.min(w,1024))),$=$?$+ie:ie,b+=1024,w-=1024;return $}return F=b,(function(Re,re){for(var Ee=re;Re[Ee];)++Ee;if(Ee-re>16&&Re.subarray&&P)return P.decode(Re.subarray(re,Ee));for(var le,Ye,qe,aA,FA,dA="";;){if(!(le=Re[re++]))return dA;if(!(128&le)){dA+=String.fromCharCode(le);continue}if(Ye=63&Re[re++],(224&le)==192){dA+=String.fromCharCode((31&le)<<6|Ye);continue}if(qe=63&Re[re++],(240&le)==224?le=(15&le)<<12|Ye<<6|qe:(aA=63&Re[re++],(248&le)==240?le=(7&le)<<18|Ye<<12|qe<<6|aA:(FA=63&Re[re++],le=(252&le)==248?(3&le)<<24|Ye<<18|qe<<12|aA<<6|FA:(1&le)<<30|Ye<<24|qe<<18|aA<<12|FA<<6|63&Re[re++])),le<65536)dA+=String.fromCharCode(le);else{var iA=le-65536;dA+=String.fromCharCode(55296|iA>>10,56320|1023&iA)}}})(a,F)}var P=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function K(b,w,F,W){if(!(W>0))return 0;for(var ie=F,ce=F+W-1,me=0;me<b.length;++me){var $=b.charCodeAt(me);if($>=55296&&$<=57343&&($=65536+((1023&$)<<10)|1023&b.charCodeAt(++me)),$<=127){if(F>=ce)break;w[F++]=$}else if($<=2047){if(F+1>=ce)break;w[F++]=192|$>>6,w[F++]=128|63&$}else if($<=65535){if(F+2>=ce)break;w[F++]=224|$>>12,w[F++]=128|$>>6&63,w[F++]=128|63&$}else if($<=2097151){if(F+3>=ce)break;w[F++]=240|$>>18,w[F++]=128|$>>12&63,w[F++]=128|$>>6&63,w[F++]=128|63&$}else if($<=67108863){if(F+4>=ce)break;w[F++]=248|$>>24,w[F++]=128|$>>18&63,w[F++]=128|$>>12&63,w[F++]=128|$>>6&63,w[F++]=128|63&$}else{if(F+5>=ce)break;w[F++]=252|$>>30,w[F++]=128|$>>24&63,w[F++]=128|$>>18&63,w[F++]=128|$>>12&63,w[F++]=128|$>>6&63,w[F++]=128|63&$}}return w[F]=0,F-ie}function Ce(b,w,F){return K(b,a,w,F)}typeof TextDecoder<"u"&&new TextDecoder("utf-16le");function be(b,w){return b%w>0&&(b+=w-b%w),b}function Be(b){h.buffer=s=b}function ae(){h.HEAP8=n=new Int8Array(s),h.HEAP16=new Int16Array(s),h.HEAP32=r=new Int32Array(s),h.HEAPU8=a=new Uint8Array(s),h.HEAPU16=new Uint16Array(s),h.HEAPU32=new Uint32Array(s),h.HEAPF32=new Float32Array(s),h.HEAPF64=new Float64Array(s)}function he(){var b=h.usingWasm?65536:16777216,w=2147483648-b;if(r[B>>2]>w)return!1;var F=Y;for(Y=Math.max(Y,16777216);Y<r[B>>2];)Y=Y<=536870912?be(2*Y,b):Math.min(be((3*Y+2147483648)/4,b),w);var W=h.reallocBuffer(Y);return W&&W.byteLength==Y?(Be(W),ae(),!0):(Y=F,!1)}o=i=g=c=l=B=0,h.reallocBuffer||(h.reallocBuffer=function(b){try{if(ArrayBuffer.transfer)w=ArrayBuffer.transfer(s,b);else{var w,F=n;w=new ArrayBuffer(b),new Int8Array(w).set(F)}}catch{return!1}return!!eA(w)&&w});try{Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get)(new ArrayBuffer(4))}catch{}var j=h.TOTAL_STACK||5242880,Y=h.TOTAL_MEMORY||16777216;function ne(){return Y}function fe(b){for(;b.length>0;){var w=b.shift();if(typeof w=="function"){w();continue}var F=w.func;typeof F=="number"?w.arg===void 0?h.dynCall_v(F):h.dynCall_vi(F,w.arg):F(w.arg===void 0?null:w.arg)}}Y<j&&U("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+Y+"! (TOTAL_STACK="+j+")"),h.buffer?s=h.buffer:(typeof WebAssembly=="object"&&typeof WebAssembly.Memory=="function"?(h.wasmMemory=new WebAssembly.Memory({initial:Y/65536}),s=h.wasmMemory.buffer):s=new ArrayBuffer(Y),h.buffer=s),ae();var Me=[],Ie=[],ve=[],sA=[],pA=!1;function yA(b){Me.unshift(b)}function gt(b){sA.unshift(b)}var It=Math.floor,Ze=0,bA=null,Le=null;h.preloadedImages={},h.preloadedAudios={};var $A="data:application/octet-stream;base64,";function TA(b){return String.prototype.startsWith?b.startsWith($A):b.indexOf($A)===0}(function(){var w="main.wast",F="main.wasm",W="main.temp.asm";TA(w)||(w=Q(w)),TA(F)||(F=Q(F)),TA(W)||(W=Q(W));var ie={global:null,env:null,asm2wasm:L,parent:h},ce=null;function me(){try{if(h.wasmBinary)return new Uint8Array(h.wasmBinary);if(h.readBinary)return h.readBinary(F);throw"both async and sync fetching of the wasm failed"}catch(re){nA(re)}}h.asmPreload=h.asm;var $=h.reallocBuffer,He=function(re){re=be(re,h.usingWasm?65536:16777216);var Ee=h.buffer.byteLength;if(h.usingWasm)try{return h.wasmMemory.grow((re-Ee)/65536)!==-1?h.buffer=h.wasmMemory.buffer:null}catch{return null}};h.reallocBuffer=function(re){return Re==="asmjs"?$(re):He(re)};var Re="";h.asm=function(re,Ee,le){if(!(Ee=Ee).table){var Ye,qe=h.wasmTableSize;qe===void 0&&(qe=1024);var aA=h.wasmMaxTableSize;typeof WebAssembly=="object"&&typeof WebAssembly.Table=="function"?aA!==void 0?Ee.table=new WebAssembly.Table({initial:qe,maximum:aA,element:"anyfunc"}):Ee.table=new WebAssembly.Table({initial:qe,element:"anyfunc"}):Ee.table=Array(qe),h.wasmTable=Ee.table}return Ee.memoryBase||(Ee.memoryBase=h.STATIC_BASE),Ee.tableBase||(Ee.tableBase=0),Ye=(function(dA,iA,Zs){if(typeof WebAssembly!="object")return U("no native wasm support detected"),!1;if(!(h.wasmMemory instanceof WebAssembly.Memory))return U("no native wasm Memory in use"),!1;function PA(ze,cA){if((ce=ze.exports).memory){var lt=ce.memory,Ws=h.buffer,zs;lt.byteLength<Ws.byteLength&&U("the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here"),zs=new Int8Array(Ws),new Int8Array(lt).set(zs),Be(lt),ae()}h.asm=ce,h.usingWasm=!0,(function(Ao){if(Ze--,h.monitorRunDependencies&&h.monitorRunDependencies(Ze),Ze==0&&(bA!==null&&(clearInterval(bA),bA=null),Le)){var ua=Le;Le=null,ua()}})("wasm-instantiate")}if(iA.memory=h.wasmMemory,ie.global={NaN:NaN,Infinity:1/0},ie["global.Math"]=Math,ie.env=iA,Ze++,h.monitorRunDependencies&&h.monitorRunDependencies(Ze),h.instantiateWasm)try{return h.instantiateWasm(ie,PA)}catch(ze){return U("Module.instantiateWasm callback failed with error: "+ze),!1}function xA(ze){PA(ze.instance,ze.module)}function ct(ze){(!h.wasmBinary&&(m||D)&&typeof fetch=="function"?fetch(F,{credentials:"same-origin"}).then(function(cA){if(!cA.ok)throw"failed to load wasm binary file at '"+F+"'";return cA.arrayBuffer()}).catch(function(){return me()}):new Promise(function(cA,lt){cA(me())})).then(function(cA){return WebAssembly.instantiate(cA,ie)}).then(ze).catch(function(cA){U("failed to asynchronously prepare wasm: "+cA),nA(cA)})}return h.wasmBinary||typeof WebAssembly.instantiateStreaming!="function"||TA(F)||typeof fetch!="function"?ct(xA):WebAssembly.instantiateStreaming(fetch(F,{credentials:"same-origin"}),ie).then(xA).catch(function(ze){U("wasm streaming compile failed: "+ze),U("falling back to ArrayBuffer instantiation"),ct(xA)}),{}})(re,Ee,le),q(Ye,"no binaryen method succeeded."),Ye},h.asm})(),i=(o=1024)+4816,Ie.push(),h.STATIC_BASE=o,h.STATIC_BUMP=4816;var _t=i;i+=16,B=x(4),c=(g=V(i))+j,l=V(c),r[B>>2]=l,h.wasmTableSize=4,h.wasmMaxTableSize=4,h.asmGlobalArg={},h.asmLibraryArg={abort:nA,assert:q,enlargeMemory:he,getTotalMemory:ne,abortOnCannotGrowMemory:function(){nA("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+Y+", (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(w,F,W){var ie=UA();try{return h.dynCall_iii(w,F,W)}catch(ce){if(SA(ie),typeof ce!="number"&&ce!=="longjmp")throw ce;h.setThrew(1,0)}},___assert_fail:function(w,F,W,ie){nA("Assertion failed: "+p(w)+", at: "+[F?p(F):"unknown filename",W,ie?p(ie):"unknown function"])},___setErrNo:function(w){return h.___errno_location&&(r[h.___errno_location()>>2]=w),w},_abort:function(){h.abort()},_emscripten_memcpy_big:function(w,F,W){return a.set(a.subarray(F,F+W),w),w},_llvm_floor_f64:It,DYNAMICTOP_PTR:B,tempDoublePtr:_t,ABORT:H,STACKTOP:g,STACK_MAX:c};var jA=h.asm(h.asmGlobalArg,h.asmLibraryArg,s);h.asm=jA,h.___errno_location=function(){return h.asm.___errno_location.apply(null,arguments)};var eA=h._emscripten_replace_memory=function(){return h.asm._emscripten_replace_memory.apply(null,arguments)};h._free=function(){return h.asm._free.apply(null,arguments)},h._malloc=function(){return h.asm._malloc.apply(null,arguments)},h._memcpy=function(){return h.asm._memcpy.apply(null,arguments)},h._memset=function(){return h.asm._memset.apply(null,arguments)},h._sbrk=function(){return h.asm._sbrk.apply(null,arguments)},h._stb_vorbis_js_channels=function(){return h.asm._stb_vorbis_js_channels.apply(null,arguments)},h._stb_vorbis_js_close=function(){return h.asm._stb_vorbis_js_close.apply(null,arguments)},h._stb_vorbis_js_decode=function(){return h.asm._stb_vorbis_js_decode.apply(null,arguments)},h._stb_vorbis_js_open=function(){return h.asm._stb_vorbis_js_open.apply(null,arguments)},h._stb_vorbis_js_sample_rate=function(){return h.asm._stb_vorbis_js_sample_rate.apply(null,arguments)},h.establishStackSpace=function(){return h.asm.establishStackSpace.apply(null,arguments)},h.getTempRet0=function(){return h.asm.getTempRet0.apply(null,arguments)},h.runPostSets=function(){return h.asm.runPostSets.apply(null,arguments)},h.setTempRet0=function(){return h.asm.setTempRet0.apply(null,arguments)},h.setThrew=function(){return h.asm.setThrew.apply(null,arguments)};var EA=h.stackAlloc=function(){return h.asm.stackAlloc.apply(null,arguments)},SA=h.stackRestore=function(){return h.asm.stackRestore.apply(null,arguments)},UA=h.stackSave=function(){return h.asm.stackSave.apply(null,arguments)};function We(b){this.name="ExitStatus",this.message="Program terminated with exit("+b+")",this.status=b}function RA(b){b=b||h.arguments,!(Ze>0)&&((function(){if(h.preRun)for(typeof h.preRun=="function"&&(h.preRun=[h.preRun]);h.preRun.length;)yA(h.preRun.shift());fe(Me)})(),!(Ze>0)&&(h.calledRun||(h.setStatus?(h.setStatus("Running..."),setTimeout(function(){setTimeout(function(){h.setStatus("")},1),w()},1)):w())));function w(){!h.calledRun&&(h.calledRun=!0,H||(pA||(pA=!0,fe(Ie)),fe(ve),h.onRuntimeInitialized&&h.onRuntimeInitialized(),(function(){if(h.postRun)for(typeof h.postRun=="function"&&(h.postRun=[h.postRun]);h.postRun.length;)gt(h.postRun.shift());fe(sA)})()))}}function nA(b){throw h.onAbort&&h.onAbort(b),b!==void 0?(T(b),U(b),b=JSON.stringify(b)):b="",H=!0,"abort("+b+"). Build with -s ASSERTIONS=1 for more info."}if(h.dynCall_iii=function(){return h.asm.dynCall_iii.apply(null,arguments)},h.asm=jA,h.ccall=k,h.cwrap=function(w,F,W,ie){var ce=(W=W||[]).every(function(me){return me==="number"});return F!=="string"&&ce&&!ie?u(w):function(){return k(w,F,W,arguments,ie)}},We.prototype=Error(),We.prototype.constructor=We,Le=function b(){h.calledRun||RA(),h.calledRun||(Le=b)},h.run=RA,h.abort=nA,h.preInit)for(typeof h.preInit=="function"&&(h.preInit=[h.preInit]);h.preInit.length>0;)h.preInit.pop()();h.noExitRuntime=!0,RA(),h.onRuntimeInitialized=()=>{sn=!0,Yn()},it.decode=function(b){return(function(F){if(!sn)throw Error("SF3 decoder has not been initialized yet. Did you await synth.isReady?");var W={};function ie(PA){return new Int32Array(h.HEAPU8.buffer,PA,1)[0]}function ce(PA,xA){var ct=new ArrayBuffer(xA*Float32Array.BYTES_PER_ELEMENT),ze=new Float32Array(ct);return ze.set(new Float32Array(h.HEAPU8.buffer,PA,xA)),ze}W.open=h.cwrap("stb_vorbis_js_open","number",[]),W.close=h.cwrap("stb_vorbis_js_close","void",["number"]),W.channels=h.cwrap("stb_vorbis_js_channels","number",["number"]),W.sampleRate=h.cwrap("stb_vorbis_js_sample_rate","number",["number"]),W.decode=h.cwrap("stb_vorbis_js_decode","number",["number","number","number","number","number"]);var me,$,He,Re,re=W.open(),Ee=(me=F,$=F.byteLength,He=h._malloc($),(Re=new Uint8Array(h.HEAPU8.buffer,He,$)).set(new Uint8Array(me,0,$)),Re),le=h._malloc(4),Ye=h._malloc(4),qe=W.decode(re,Ee.byteOffset,Ee.byteLength,le,Ye);if(h._free(Ee.byteOffset),qe<0)throw W.close(re),h._free(le),Error("stbvorbis decode failed: "+qe);for(var aA=W.channels(re),FA=Array(aA),dA=new Int32Array(h.HEAPU32.buffer,ie(le),aA),iA=0;iA<aA;iA++)FA[iA]=ce(dA[iA],qe),h._free(dA[iA]);var Zs=W.sampleRate(re);return W.close(re),h._free(ie(le)),h._free(le),{data:FA,sampleRate:Zs,eof:!0,error:null}})(b)}})();var qt=it,Bi={enableEventSystem:!0,maxBufferSize:128,initialTime:0,enableEffects:!0},Bs=class{pitch=0;gain=1;exclusiveClass=0;pan=64;reverbGain=0;chorusGain=1;delayGain=1;rxNoteOn=!0;rxNoteOff=!1;copyInto(A){return this.pitch=A.pitch,this.chorusGain=A.chorusGain,this.reverbGain=A.reverbGain,this.exclusiveClass=A.exclusiveClass,this.gain=A.gain,this.pan=A.pan,this.rxNoteOff=A.rxNoteOff,this.rxNoteOn=A.rxNoteOn,this}},nn=class Es{patch;lockPreset;lockedSystem;midiControllers;lockedControllers;customControllers;channelVibrato;keyShift;octaveTuning;drumParams;isMuted;drumChannel;channelNumber;constructor(e,t,s,n,a,r,o,i,g,c,l,B,h){this.patch=e,this.lockPreset=t,this.lockedSystem=s,this.midiControllers=n,this.lockedControllers=a,this.customControllers=r,this.channelVibrato=o,this.keyShift=i,this.octaveTuning=g,this.drumParams=c,this.isMuted=l,this.drumChannel=B,this.channelNumber=h}static copyFrom(e){return new Es({...e.patch},e.lockPreset,e.lockedSystem,e.midiControllers.slice(),[...e.lockedControllers],e.customControllers.slice(),{...e.channelVibrato},e.keyShift,e.octaveTuning.slice(),e.drumParams.map(t=>new Bs().copyInto(t)),e.isMuted,e.drumChannel,e.channelNumber)}static create(e,t){let s=e.midiChannels[t];return new Es({...s.patch,name:s?.preset?.name??"undefined"},s.lockPreset,s.lockedSystem,s.midiControllers.slice(),[...s.lockedControllers],s.customControllers.slice(),{...s.channelVibrato},s.keyShift,s.octaveTuning.slice(),s.drumParams.map(n=>new Bs().copyInto(n)),s.isMuted,s.drumChannel,t)}apply(e){let t=e.midiChannels[this.channelNumber];t.muteChannel(this.isMuted),t.setDrums(this.drumChannel),t.midiControllers.set(this.midiControllers),t.lockedControllers=this.lockedControllers,t.customControllers.set(this.customControllers),t.updateChannelTuning(),t.channelVibrato.rate=this.channelVibrato.rate,t.channelVibrato.delay=this.channelVibrato.delay,t.channelVibrato.depth=this.channelVibrato.depth,t.keyShift=this.keyShift,t.octaveTuning.set(this.octaveTuning);for(let s=0;s<128;s++)this.drumParams[s].copyInto(t.drumParams[s]);t.setPresetLock(!1),t.setPatch(this.patch),t.setPresetLock(this.lockPreset),t.lockedSystem=this.lockedSystem}};var Ei=class{keyMappings=[];addMapping(A,e,t){this.keyMappings[A]??=[],this.keyMappings[A][e]=t}deleteMapping(A,e){this.keyMappings[A]?.[e]!==void 0&&(this.keyMappings[A][e]=void 0)}clearMappings(){this.keyMappings=[]}setMappings(A){this.keyMappings=A}getMappings(){return this.keyMappings}getVelocity(A,e){return this.keyMappings[A]?.[e]?.velocity??-1}getGain(A,e){return this.keyMappings[A]?.[e]?.gain??1}hasOverridePatch(A,e){let t=this.keyMappings[A]?.[e]?.patch?.bankMSB;return t!==void 0&&t>=0}getPatch(A,e){let t=this.keyMappings[A]?.[e];if(t)return t.patch;throw new Error("No modifier.")}};function As(A,e,t,s,n,a=0){let r=128-(e+t+s+n.reduce((o,i)=>o+i,0))%128&127;A.systemExclusive([65,16,66,18,e,t,s,...n,r,247],a)}var Hs=class ds{channelSnapshots;keyMappings;masterParameters;reverbSnapshot;chorusSnapshot;delaySnapshot;insertionSnapshot;constructor(e,t,s,n,a,r,o){this.channelSnapshots=e,this.masterParameters=t,this.keyMappings=s,this.reverbSnapshot=n,this.chorusSnapshot=a,this.delaySnapshot=r,this.insertionSnapshot=o}static create(e){return new ds(e.midiChannels.map((t,s)=>nn.create(e,s)),e.getAllMasterParameters(),e.keyModifierManager.getMappings(),e.reverbProcessor.getSnapshot(),e.chorusProcessor.getSnapshot(),e.delayProcessor.getSnapshot(),e.getInsertionSnapshot())}static copyFrom(e){return new ds(e.channelSnapshots.map(t=>nn.copyFrom(t)),{...e.masterParameters},[...e.keyMappings],{...e.reverbSnapshot},{...e.chorusSnapshot},{...e.delaySnapshot},{...e.insertionSnapshot})}apply(e){for(e.keyModifierManager.setMappings(this.keyMappings);e.midiChannels.length<this.channelSnapshots.length;)e.createMIDIChannel();for(let n of this.channelSnapshots)n.apply(e);for(let[n,a]of Object.entries(this.reverbSnapshot))e.reverbProcessor[n]=a;for(let[n,a]of Object.entries(this.chorusSnapshot))e.chorusProcessor[n]=a;for(let[n,a]of Object.entries(this.delaySnapshot))e.delayProcessor[n]=a;let t=this.insertionSnapshot;As(e,64,3,0,[t.type>>8,t.type&127]);for(let n=0;n<t.params.length;n++)t.params[n]!==255&&As(e,64,3,3+n,[t.params[n]]);for(let n=0;n<t.channels.length;n++)As(e,64,64|Ts(n),34,[t.channels[n]?1:0]);let s=Object.entries(this.masterParameters);for(let[n,a]of s)e.setMasterParameter(n,a)}},qn={masterGain:1,masterPan:0,voiceCap:350,interpolationType:Oa.hermite,midiSystem:"gs",monophonicRetriggerMode:!1,reverbGain:1,chorusGain:1,delayGain:1,reverbLock:!1,chorusLock:!1,delayLock:!1,drumLock:!1,customVibratoLock:!1,nprnParamLock:!1,insertionEffectLock:!1,blackMIDIMode:!1,autoAllocateVoices:!1,transposition:0,deviceID:-1},Os=-15e3,Qs=new Float32Array(15e3-Os+1);for(let A=0;A<Qs.length;A++){let e=Os+A;Qs[A]=Math.pow(2,e/1200)}function Gt(A){return A<=-32767?0:Qs[A-Os]}var Mt=-2e4,Jn=16500,fs=new Float32Array(Jn-Mt+1);for(let A=0;A<fs.length;A++){let e=Mt+A;fs[A]=440*Math.pow(2,(e-6900)/1200)}function us(A){return A<Mt||A>Jn?440*Math.pow(2,(A-6900)/1200):fs[A-Mt|0]}var VA=-16600,XA=new Float32Array(16e3-VA+1);for(let A=0;A<XA.length;A++){let e=VA+A;XA[A]=Math.pow(10,-e/200)}function vt(A){return XA[A-VA|0]}var di=.03,Ys=class tt{static smoothingConstant=1;static cachedCoefficients=new Map;resonanceCb=0;currentInitialFc=13500;a0=0;a1=0;a2=0;a3=0;a4=0;x1=0;x2=0;y1=0;y2=0;lastTargetCutoff=1/0;initialized=!1;sampleRate;maxCutoff;constructor(e){this.sampleRate=e,this.maxCutoff=e*.45}static initCache(e){tt.smoothingConstant=di*(44100/e);let t=new tt(e);t.resonanceCb=0;for(let s=1500;s<13500;s++)t.currentInitialFc=s,t.calculateCoefficients(s)}init(){this.lastTargetCutoff=1/0,this.resonanceCb=0,this.currentInitialFc=13500,this.a0=0,this.a1=0,this.a2=0,this.a3=0,this.a4=0,this.x1=0,this.x2=0,this.y1=0,this.y2=0,this.initialized=!1}calculateCoefficients(e){e=e|0;let t=this.resonanceCb,s=tt.cachedCoefficients.get(t+e*961);if(s!==void 0){this.a0=s.a0,this.a1=s.a1,this.a2=s.a2,this.a3=s.a3,this.a4=s.a4;return}let n=us(e);n=Math.min(n,this.maxCutoff);let a=vt(-(t-3.01)),r=1/Math.sqrt(vt(-t)),o=2*Math.PI*n/this.sampleRate,i=Math.cos(o),g=Math.sin(o)/(2*a),c=(1-i)*r,l=c/2,B=l,h=1+g,E=-2*i,m=1-g,D={a0:l/h,a1:c/h,a2:B/h,a3:E/h,a4:m/h};this.a0=D.a0,this.a1=D.a1,this.a2=D.a2,this.a3=D.a3,this.a4=D.a4,tt.cachedCoefficients.set(t+e*961,D)}},_e=960,dt=900,Qi=class{sampleRate;outputGain=0;attenuationCb=_e;state=0;sampleTime=0;releaseStartCb=_e;releaseStartTimeSamples=0;attackDuration=0;decayDuration=0;releaseDuration=0;sustainCb=0;delayEnd=0;attackEnd=0;holdEnd=0;decayEnd=0;enteredRelease=!1;canEndOnSilentSustain=!1;constructor(A){this.sampleRate=A}startRelease(A){this.releaseStartTimeSamples=this.sampleTime;let e=A.overrideReleaseVolEnv||A.modulatedGenerators[I.releaseVolEnv];if(this.releaseDuration=this.timecentsToSamples(Math.max(-7200,e)),this.enteredRelease)this.releaseStartCb=this.attenuationCb;else{let s=Math.max(0,Math.min(_e,this.sustainCb)),n=s/_e,a=(60-A.targetKey)*A.modulatedGenerators[I.keyNumToVolEnvDecay];switch(this.decayDuration=this.timecentsToSamples(A.modulatedGenerators[I.decayVolEnv]+a)*n,this.state){case 0:this.releaseStartCb=_e;break;case 1:{let r=1-(this.attackEnd-this.releaseStartTimeSamples)/this.attackDuration;this.releaseStartCb=200*Math.log10(r)*-1;break}case 2:this.releaseStartCb=0;break;case 3:this.releaseStartCb=(1-(this.decayEnd-this.releaseStartTimeSamples)/this.decayDuration)*s;break;case 4:this.releaseStartCb=s;break}this.releaseStartCb=Math.max(0,Math.min(this.releaseStartCb,_e)),this.attenuationCb=this.releaseStartCb}this.enteredRelease=!0;let t=(_e-this.releaseStartCb)/_e;this.releaseDuration*=t,this.releaseStartCb>=dt&&(A.isActive=!1)}init(A){this.enteredRelease=!1,this.state=0,this.sampleTime=0,this.canEndOnSilentSustain=A.modulatedGenerators[I.sustainVolEnv]>=dt,this.outputGain=0,this.sustainCb=Math.min(_e,A.modulatedGenerators[I.sustainVolEnv]),this.attackDuration=this.timecentsToSamples(A.modulatedGenerators[I.attackVolEnv]);let e=(60-A.targetKey)*A.modulatedGenerators[I.keyNumToVolEnvDecay],t=this.sustainCb/_e;this.decayDuration=this.timecentsToSamples(A.modulatedGenerators[I.decayVolEnv]+e)*t,this.delayEnd=this.timecentsToSamples(A.modulatedGenerators[I.delayVolEnv]),this.attackEnd=this.attackDuration+this.delayEnd;let s=(60-A.targetKey)*A.modulatedGenerators[I.keyNumToVolEnvHold];this.holdEnd=this.timecentsToSamples(A.modulatedGenerators[I.holdVolEnv]+s)+this.attackEnd,this.decayEnd=this.decayDuration+this.holdEnd,this.attackEnd===0&&(this.state=2)}process(A,e){let{releaseStartTimeSamples:t,releaseStartCb:s,releaseDuration:n,delayEnd:a,attackEnd:r,attackDuration:o,holdEnd:i,decayEnd:g,decayDuration:c,sustainCb:l}=this,B=this.sampleTime+=A;if(this.enteredRelease){let h=B-t,E=_e-s;return this.attenuationCb=h/n*E+s,this.outputGain=XA[this.attenuationCb-VA|0]*e,this.attenuationCb<dt}switch(this.state){case 0:if(B<a)return this.attenuationCb=_e,this.outputGain=0,!0;this.state++;case 1:if(B<r){this.attenuationCb=0;let h=1-(r-B)/o;return this.outputGain=h*e,!0}this.state++;case 2:if(B<i)return this.attenuationCb=0,this.outputGain=e,!0;this.state++;case 3:if(B<g)return this.attenuationCb=(1-(g-B)/c)*l,this.outputGain=e*XA[this.attenuationCb-VA|0],!0;this.state++;case 4:return this.canEndOnSilentSustain&&l>=dt?(this.attenuationCb=_e,this.outputGain=0,!1):(this.attenuationCb=l,this.outputGain=e*XA[l-VA|0],!0)}}timecentsToSamples(A){return Math.max(0,Math.floor(Gt(A)*this.sampleRate))}},Ke=16384,Lt=Object.keys(Qe).length,fA=new Float32Array(Ke+1),vA=new Float32Array(Ke+1);fA[0]=0;fA[fA.length-1]=1;vA[0]=0;vA[vA.length-1]=1;for(let A=1;A<Ke-1;A++){let e=-.4166666666666667*Math.log(A/(fA.length-1))/Math.LN10;vA[A]=1-e,fA[fA.length-1-A]=e}function Kn(A,e,t){let s=!!(A&2);switch(A&1&&(t=1-t),e){case Qe.linear:return s?t*2-1:t;case Qe.switch:return t=t>.5?1:0,s?t*2-1:t;case Qe.concave:return s?(t=t*2-1,t<0?-fA[Math.trunc(t*-Ke)]:fA[Math.trunc(t*Ke)]):fA[Math.trunc(t*Ke)];case Qe.convex:return s?(t=t*2-1,t<0?-vA[Math.trunc(t*-Ke)]:vA[Math.trunc(t*Ke)]):vA[Math.trunc(t*Ke)]}}var ts=1,ms=new Float32Array(1e3);for(let A=0;A<ms.length;A++)ms[A]=Kn(0,Qe.convex,A/1e3);var fi=class{attackDuration=0;decayDuration=0;holdDuration=0;releaseDuration=0;sustainLevel=0;delayEnd=0;attackEnd=0;holdEnd=0;releaseStartLevel=0;currentValue=0;enteredRelease=!1;decayEnd=0;process(A,e){return this.enteredRelease?this.releaseStartLevel===0?0:Math.max(0,(1-(e-A.releaseStartTime)/this.releaseDuration)*this.releaseStartLevel):(e<this.delayEnd?this.currentValue=0:e<this.attackEnd?this.currentValue=ms[~~((1-(this.attackEnd-e)/this.attackDuration)*1e3)]:e<this.holdEnd?this.currentValue=ts:e<this.decayEnd?this.currentValue=(1-(this.decayEnd-e)/this.decayDuration)*(this.sustainLevel-ts)+ts:this.currentValue=this.sustainLevel,this.currentValue)}startRelease(A){this.releaseStartLevel=this.currentValue,this.enteredRelease=!0;let e=this.tc2Sec(Math.max(A.modulatedGenerators[I.releaseModEnv],-7200));this.releaseDuration=e*this.releaseStartLevel}init(A){this.enteredRelease=!1,this.sustainLevel=1-A.modulatedGenerators[I.sustainModEnv]/1e3,this.attackDuration=this.tc2Sec(A.modulatedGenerators[I.attackModEnv]);let e=(60-A.midiNote)*A.modulatedGenerators[I.keyNumToModEnvDecay],t=this.tc2Sec(A.modulatedGenerators[I.decayModEnv]+e);this.decayDuration=t*(1-this.sustainLevel);let s=(60-A.midiNote)*A.modulatedGenerators[I.keyNumToModEnvHold];this.holdDuration=this.tc2Sec(s+A.modulatedGenerators[I.holdModEnv]),this.delayEnd=A.startTime+this.tc2Sec(A.modulatedGenerators[I.delayModEnv]),this.attackEnd=this.delayEnd+this.attackDuration,this.holdEnd=this.attackEnd+this.holdDuration,this.decayEnd=this.holdEnd+this.decayDuration}tc2Sec(A){return A<=-10114?0:Gt(A)}},qs=class{isLooping=!1;sampleData;playbackStep=0;loopStart=0;loopEnd=0;loopLength=0;end=0;cursor=0},ui=class extends qs{process(A,e,t){let s=e*this.playbackStep,n=this.sampleData,{loopEnd:a,loopLength:r,loopStart:o,end:i}=this,g=this.cursor;if(this.isLooping)for(let c=0;c<A;c++){g>o&&(g=o+(g-o)%r);let l=g|0,B=l+1;B>=a&&(B-=r);let h=g-l,E=n[B],m=n[l];t[c]=m+(E-m)*h,g+=s}else for(let c=0;c<A;c++){let l=g|0,B=l+1;if(B>=i)return t.fill(0,c,A),!1;let h=g-l,E=n[B],m=n[l];t[c]=m+(E-m)*h,g+=s}return this.cursor=g,!0}},mi=class extends qs{process(A,e,t){let s=e*this.playbackStep,n=this.sampleData,{loopLength:a,loopStart:r,end:o}=this,i=this.cursor;if(this.isLooping)for(let g=0;g<A;g++)i>r&&(i=r+(i-r)%a),t[g]=n[i|0],i+=s;else for(let g=0;g<A;g++){if(i>=o)return t.fill(0,g,A),!1;t[g]=n[i|0],i+=s}return this.cursor=i,!0}},pi=class extends qs{process(A,e,t){let s=e*this.playbackStep,n=this.sampleData,{loopEnd:a,loopLength:r,loopStart:o,end:i}=this,g=this.cursor;if(this.isLooping)for(let c=0;c<A;c++){g>o&&(g=o+(g-o)%r);let l=g|0,B=l+1,h=l+2,E=l+3,m=g-l;B>=a&&(B-=r),h>=a&&(h-=r),E>=a&&(E-=r);let D=n[l],f=n[B],O=n[h],R=n[E],Q=(O-D)*.5,T=f-O,U=Q+T,x=U+T+(R-f)*.5,V=U+x;t[c]=((x*m-V)*m+Q)*m+f,g+=s}else for(let c=0;c<A;c++){let l=g|0,B=l+1,h=l+2,E=l+3,m=g-l;if(E>=i)return t.fill(0,c,A),!1;let D=n[l],f=n[B],O=n[h],R=n[E],Q=(O-D)*.5,T=f-O,U=Q+T,x=U+T+(R-f)*.5,V=U+x;t[c]=((x*m-V)*m+Q)*m+f,g+=s}return this.cursor=g,!0}},yi=-2320,ps=class{oscillators=[new ui,new mi,new pi];wavetable=this.oscillators[qn.interpolationType];filter;generators=new Int16Array(WA);modulatedGenerators=new Int16Array(WA);modulators=new Array;modulatorValues=new Int16Array(64);modEnv=new fi;volEnv;resonanceOffset=0;priority=0;isActive=!1;hasRendered=!1;isInRelease=!1;isHeld=!1;channel=0;velocity=0;midiNote=0;rootKey=0;targetKey=0;pressure=0;gainModifier=1;loopingMode=0;startTime=0;releaseStartTime=1/0;tuningCents=0;tuningRatio=1;currentPan=0;realKey=60;portamentoFromKey=-1;portamentoDuration=0;overridePan=0;pitchOffset=0;reverbSend=1;chorusSend=1;delaySend=1;exclusiveClass=0;overrideReleaseVolEnv=0;vibLfoPhase=0;vibLfoStartTime=0;modLfoPhase=0;modLfoStartTime=0;constructor(A){this.volEnv=new Qi(A),this.filter=new Ys(A)}exclusiveRelease(A,e=ba){this.overrideReleaseVolEnv=yi,this.isInRelease=!1,this.releaseVoice(A,e)}releaseVoice(A,e=wa){this.releaseStartTime=A,this.releaseStartTime-this.startTime<e&&(this.releaseStartTime=this.startTime+e)}setup(A,e,t,s,n){this.startTime=A,this.isActive=!0,this.isInRelease=!1,this.hasRendered=!1,this.isHeld=!1,this.releaseStartTime=1/0,this.pressure=0,this.channel=e,this.midiNote=t,this.velocity=s,this.realKey=n,this.overrideReleaseVolEnv=0,this.portamentoDuration=0,this.portamentoFromKey=-1,this.vibLfoPhase=.25,this.modLfoPhase=.25}};function MA(A,e){return(A>>e&1)>0}function ss(A){return A?1:0}var hA=class ys{isBipolar;isNegative;index;isCC;curveType;constructor(e=Ae.noController,t=Qe.linear,s=!1,n=!1,a=!1){this.isBipolar=n,this.isNegative=a,this.index=e,this.isCC=s,this.curveType=t}get sourceName(){return this.isCC?Object.keys(d).find(e=>d[e]===this.index)??this.index.toString():Object.keys(Ae).find(e=>Ae[e]===this.index)??this.index.toString()}get curveTypeName(){return Object.keys(Qe).find(e=>Qe[e]===this.curveType)??this.curveType.toString()}static fromSourceEnum(e){let t=MA(e,9),s=MA(e,8),n=MA(e,7);return new ys(e&127,e>>10&3,n,t,s)}static copyFrom(e){return new ys(e.index,e.curveType,e.isCC,e.isBipolar,e.isNegative)}toString(){return`${this.sourceName} ${this.curveTypeName} ${this.isBipolar?"bipolar":"unipolar"} ${this.isNegative?"negative":"positive"}`}toSourceEnum(){return this.curveType<<10|ss(this.isBipolar)<<9|ss(this.isNegative)<<8|ss(this.isCC)<<7|this.index}isIdentical(e){return this.index===e.index&&this.isNegative===e.isNegative&&this.isCC===e.isCC&&this.isBipolar===e.isBipolar&&this.curveType===e.curveType}getValue(e,t,s){let n;if(this.isCC)n=e[this.index];else switch(this.index){case Ae.noController:n=16383;break;case Ae.noteOnKeyNum:n=s.midiNote<<7;break;case Ae.noteOnVelocity:n=s.velocity<<7;break;case Ae.polyPressure:n=s.pressure<<7;break;case Ae.pitchWheel:n=t;break;default:n=e[this.index+128];break}let a=(this.isBipolar?2:0)|(this.isNegative?1:0);return Vn[Ke*(this.curveType*Lt+a)+n]}},Vn=new Float32Array(Ke*4*Lt);for(let A=0;A<Lt;A++)for(let e=0;e<4;e++){let t=Ke*(A*Lt+e);for(let s=0;s<Ke;s++)Vn[t+s]=Kn(e,A,s/Ke)}function AA(A,e,t,s,n){return new hA(n,A,s,e,t).toSourceEnum()}var Xn=AA(Qe.linear,!0,!1,!0,d.filterResonance),De=class Ss{destination=I.initialAttenuation;transformAmount=0;transformType=0;primarySource;secondarySource;constructor(e=new hA,t=new hA,s=I.INVALID,n=0,a=0){this.primarySource=e,this.secondarySource=t,this.destination=s,this.transformAmount=n,this.transformType=a}get destinationName(){return Object.keys(I).find(e=>I[e]===this.destination)}static isIdentical(e,t,s=!1){return e.primarySource.isIdentical(t.primarySource)&&e.secondarySource.isIdentical(t.secondarySource)&&e.destination===t.destination&&e.transformType===t.transformType&&(!s||e.transformAmount===t.transformAmount)}static copyFrom(e){return new Ss(hA.copyFrom(e.primarySource),hA.copyFrom(e.secondarySource),e.destination,e.transformAmount,e.transformType)}toString(){return`Source: ${this.primarySource.toString()}
1
+ function zA(A,e,t=0){let s=0;for(let n=0;n<e;n++)s=s<<8|A[t+n];return s>>>0}function JA(A,e){let t=zA(A,e,A.currentIndex);return A.currentIndex+=e,t}function Ct(A,e){let t=new Array(e).fill(0);for(let s=e-1;s>=0;s--)t[s]=A&255,A>>=8;return t}function X(A,e){let t=Dn(A,e,A.currentIndex);return A.currentIndex+=e,t}function Dn(A,e,t=0){let s=0;for(let n=0;n<e;n++)s|=A[t+n]<<n*8;return s>>>0}function at(A,e,t){for(let s=0;s<t;s++)A[A.currentIndex++]=e>>s*8&255}function te(A,e){A[A.currentIndex++]=e&255,A[A.currentIndex++]=e>>8}function ge(A,e){at(A,e,4)}function Rs(A,e){let t=e<<8|A;return t>32767?t-65536:t}function ma(A){return A>127?A-256:A}var _=class extends Uint8Array{currentIndex=0;slice(A,e){let t=super.slice(A,e);return t.currentIndex=0,t}};function oA(A,e=A.length,t=0){let s="";for(let n=0;n<e;n++){let a=A[t+n];if(a===0)return s;s+=String.fromCharCode(a)}return s}function ue(A,e){let t=A.currentIndex;return A.currentIndex+=e,oA(A,e,t)}function BA(A,e=!1,t=!1){let s=A.length;e&&s++,t&&s%2!==0&&s++;let n=new _(s);return Ge(n,A),n}function Ge(A,e,t=0){t>0&&e.length>t&&(e=e.slice(0,t));for(let s=0;s<e.length;s++)A[A.currentIndex++]=e.charCodeAt(s);if(t>e.length)for(let s=0;s<t-e.length;s++)A[A.currentIndex++]=0;return A}function pe(A){let e=0;for(;A;){let t=A[A.currentIndex++];if(e=e<<7|t&127,t>>7!==1)break}return e}function $t(A){let e=[A&127];for(A>>=7;A>0;)e.unshift(A&127|128),A>>=7;return e}function ls(A){A=Math.floor(A);let e=Math.floor(A/60),t=Math.round(A-e*60);return{minutes:e,seconds:t,time:`${e.toString().padStart(2,"0")}:${t.toString().padStart(2,"0")}`}}function Pt(A){let e="";for(let t of A){let s=t.toString(16).padStart(2,"0").toUpperCase();e+=s,e+=" "}return e}var C={warn:"color: orange;",unrecognized:"color: red;",info:"color: aqua;",recognized:"color: lime",value:"color: yellow; background-color: black;"},wn;(()=>{var A=Uint8Array,e=Uint16Array,t=Int32Array,s=new A([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),n=new A([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),a=new A([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),r=function(S,k){for(var p=new e(31),P=0;P<31;++P)p[P]=k+=1<<S[P-1];for(var K=new t(p[30]),P=1;P<30;++P)for(var Ce=p[P];Ce<p[P+1];++Ce)K[Ce]=Ce-p[P]<<5|P;return{b:p,r:K}},o=r(s,2),i=o.b,g=o.r;i[28]=258,g[258]=28;var c=r(n,0),l=c.b;c.r;var B=new e(32768);for(f=0;f<32768;++f)h=(f&43690)>>1|(f&21845)<<1,h=(h&52428)>>2|(h&13107)<<2,h=(h&61680)>>4|(h&3855)<<4,B[f]=((h&65280)>>8|(h&255)<<8)>>1;var h,f,E=function(S,k,p){for(var P=S.length,K=0,Ce=new e(k);K<P;++K)S[K]&&++Ce[S[K]-1];var be=new e(k);for(K=1;K<k;++K)be[K]=be[K-1]+Ce[K-1]<<1;var Be;if(p){Be=new e(1<<k);var ae=15-k;for(K=0;K<P;++K)if(S[K])for(var he=K<<4|S[K],j=k-S[K],Y=be[S[K]-1]++<<j,ne=Y|(1<<j)-1;Y<=ne;++Y)Be[B[Y]>>ae]=he}else for(Be=new e(P),K=0;K<P;++K)S[K]&&(Be[K]=B[be[S[K]-1]++]>>15-S[K]);return Be},m=new A(288);for(f=0;f<144;++f)m[f]=8;var f;for(f=144;f<256;++f)m[f]=9;var f;for(f=256;f<280;++f)m[f]=7;var f;for(f=280;f<288;++f)m[f]=8;var f,D=new A(32);for(f=0;f<32;++f)D[f]=5;var f,O=E(m,9,1),R=E(D,5,1),Q=function(S){for(var k=S[0],p=1;p<S.length;++p)S[p]>k&&(k=S[p]);return k},T=function(S,k,p){var P=k/8|0;return(S[P]|S[P+1]<<8)>>(k&7)&p},U=function(S,k){var p=k/8|0;return(S[p]|S[p+1]<<8|S[p+2]<<16)>>(k&7)},x=function(S){return(S+7)/8|0},V=function(S,k,p){return(k==null||k<0)&&(k=0),(p==null||p>S.length)&&(p=S.length),new A(S.subarray(k,p))},J=["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"],L=function(S,k,p){var P=new Error(k||J[S]);if(P.code=S,Error.captureStackTrace&&Error.captureStackTrace(P,L),!p)throw P;return P},H=function(S,k,p,P){var K=S.length,Ce=P?P.length:0;if(!K||k.f&&!k.l)return p||new A(0);var be=!p,Be=be||k.i!=2,ae=k.i;be&&(p=new A(K*3));var he=function(Ee){var le=p.length;if(Ee>le){var Ye=new A(Math.max(le*2,Ee));Ye.set(p),p=Ye}},j=k.f||0,Y=k.p||0,ne=k.b||0,fe=k.l,Me=k.d,Ie=k.m,ve=k.n,sA=K*8;do{if(!fe){j=T(S,Y,1);var pA=T(S,Y+1,3);if(Y+=3,pA)if(pA==1)fe=O,Me=R,Ie=9,ve=5;else if(pA==2){var yA=T(S,Y,31)+257,gt=T(S,Y+10,15)+4,It=yA+T(S,Y+5,31)+1;Y+=14;for(var Ze=new A(It),bA=new A(19),Le=0;Le<gt;++Le)bA[a[Le]]=T(S,Y+Le*3,7);Y+=gt*3;for(var $A=Q(bA),TA=(1<<$A)-1,_t=E(bA,$A,1),Le=0;Le<It;){var jA=_t[T(S,Y,TA)];Y+=jA&15;var eA=jA>>4;if(eA<16)Ze[Le++]=eA;else{var EA=0,SA=0;for(eA==16?(SA=3+T(S,Y,3),Y+=2,EA=Ze[Le-1]):eA==17?(SA=3+T(S,Y,7),Y+=3):eA==18&&(SA=11+T(S,Y,127),Y+=7);SA--;)Ze[Le++]=EA}}var UA=Ze.subarray(0,yA),We=Ze.subarray(yA);Ie=Q(UA),ve=Q(We),fe=E(UA,Ie,1),Me=E(We,ve,1)}else L(1);else{var eA=x(Y)+4,RA=S[eA-4]|S[eA-3]<<8,nA=eA+RA;if(nA>K){ae&&L(0);break}Be&&he(ne+RA),p.set(S.subarray(eA,nA),ne),k.b=ne+=RA,k.p=Y=nA*8,k.f=j;continue}if(Y>sA){ae&&L(0);break}}Be&&he(ne+131072);for(var b=(1<<Ie)-1,w=(1<<ve)-1,F=Y;;F=Y){var EA=fe[U(S,Y)&b],W=EA>>4;if(Y+=EA&15,Y>sA){ae&&L(0);break}if(EA||L(2),W<256)p[ne++]=W;else if(W==256){F=Y,fe=null;break}else{var ie=W-254;if(W>264){var Le=W-257,ce=s[Le];ie=T(S,Y,(1<<ce)-1)+i[Le],Y+=ce}var me=Me[U(S,Y)&w],$=me>>4;me||L(3),Y+=me&15;var We=l[$];if($>3){var ce=n[$];We+=U(S,Y)&(1<<ce)-1,Y+=ce}if(Y>sA){ae&&L(0);break}Be&&he(ne+131072);var He=ne+ie;if(ne<We){var Re=Ce-We,re=Math.min(We,He);for(Re+ne<0&&L(3);ne<re;++ne)p[ne]=P[Re+ne]}for(;ne<He;++ne)p[ne]=p[ne-We]}}k.l=fe,k.p=F,k.b=ne,k.f=j,fe&&(j=1,k.m=Ie,k.d=Me,k.n=ve)}while(!j);return ne!=p.length&&be?V(p,0,ne):p.subarray(0,ne)},q=new A(0);function u(S,k){return H(S,{i:2},k&&k.out,k&&k.dictionary)}var v=typeof TextDecoder<"u"&&new TextDecoder;try{v.decode(q,{stream:!0})}catch{}wn=u})();var bn=wn,Rn=!1,Fn=!0,xt=!1;function Gn(A,e,t){Rn=A,Fn=e,xt=t}function y(...A){Rn&&console.info(...A)}function se(...A){Fn&&console.warn(...A)}function je(...A){xt&&console.group(...A)}function Je(...A){xt&&console.groupCollapsed(...A)}function ee(){xt&&console.groupEnd()}var N=class Mn{header;size;data;constructor(e,t,s){this.header=e,this.size=t,this.data=s}static read(e,t=!0,s=!1){let n=ue(e,4),a=X(e,4);n===""&&(a=0);let r=t?e.slice(e.currentIndex,e.currentIndex+a):new _(0);return(t||s)&&(e.currentIndex+=a,a%2!==0&&e.currentIndex++),new Mn(n,a,r)}static write(e,t,s=!1,n=!1){if(e.length!==4)throw new Error(`Invalid header length: ${e}`);let a=8,r=e,o=t.length;s&&o++;let i=o;n&&(a+=4,i+=4,r="LIST");let g=a+o;g%2!==0&&g++;let c=new _(g);return Ge(c,r),ge(c,i),n&&Ge(c,e),c.set(t,a),c}static writeParts(e,t,s=!1){let n=8,a=e,r=t.reduce((c,l)=>l.length+c,0),o=r;s&&(n+=4,o+=4,a="LIST");let i=n+r;i%2!==0&&i++;let g=new _(i);Ge(g,a),ge(g,o),s&&Ge(g,e);for(let c of t)g.set(c,n),n+=c.length;return g}static findListType(e,t){return e.find(s=>s.header!=="LIST"?!1:(s.data.currentIndex=4,oA(s.data,4)===t))}};function Fs(A,e){return{...e,...A}}var mA={consoleColors:C,SpessaSynthInfo:y,SpessaSynthWarn:se,SpessaSynthGroupCollapsed:Je,SpessaSynthGroup:je,SpessaSynthGroupEnd:ee,readBytesAsUintBigEndian:zA,readLittleEndian:X,readBytesAsString:ue,readVariableLengthQuantity:pe,inflateSync:bn};var M={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},d={bankSelect:0,modulationWheel:1,breathController:2,undefinedCC3:3,footController:4,portamentoTime:5,dataEntryMSB:6,mainVolume:7,balance:8,undefinedCC9:9,pan:10,expressionController:11,effectControl1:12,effectControl2:13,undefinedCC14:14,undefinedCC15:15,generalPurposeController1:16,generalPurposeController2:17,generalPurposeController3:18,generalPurposeController4:19,undefinedCC20:20,undefinedCC21:21,undefinedCC22:22,undefinedCC23:23,undefinedCC24:24,undefinedCC25:25,undefinedCC26:26,undefinedCC27:27,undefinedCC28:28,undefinedCC29:29,undefinedCC30:30,undefinedCC31:31,bankSelectLSB:32,modulationWheelLSB:33,breathControllerLSB:34,undefinedCC3LSB:35,footControllerLSB:36,portamentoTimeLSB:37,dataEntryLSB:38,mainVolumeLSB:39,balanceLSB:40,undefinedCC9LSB:41,panLSB:42,expressionControllerLSB:43,effectControl1LSB:44,effectControl2LSB:45,undefinedCC14LSB:46,undefinedCC15LSB:47,undefinedCC16LSB:48,undefinedCC17LSB:49,undefinedCC18LSB:50,undefinedCC19LSB:51,undefinedCC20LSB:52,undefinedCC21LSB:53,undefinedCC22LSB:54,undefinedCC23LSB:55,undefinedCC24LSB:56,undefinedCC25LSB:57,undefinedCC26LSB:58,undefinedCC27LSB:59,undefinedCC28LSB:60,undefinedCC29LSB:61,undefinedCC30LSB:62,undefinedCC31LSB:63,sustainPedal:64,portamentoOnOff:65,sostenutoPedal:66,softPedal:67,legatoFootswitch:68,hold2Pedal:69,soundVariation:70,filterResonance:71,releaseTime:72,attackTime:73,brightness:74,decayTime:75,vibratoRate:76,vibratoDepth:77,vibratoDelay:78,soundController10:79,generalPurposeController5:80,generalPurposeController6:81,generalPurposeController7:82,generalPurposeController8:83,portamentoControl:84,undefinedCC85:85,undefinedCC86:86,undefinedCC87:87,undefinedCC88:88,undefinedCC89:89,undefinedCC90:90,reverbDepth:91,tremoloDepth:92,chorusDepth:93,variationDepth:94,phaserDepth:95,dataIncrement:96,dataDecrement:97,nonRegisteredParameterLSB:98,nonRegisteredParameterMSB:99,registeredParameterLSB:100,registeredParameterMSB:101,undefinedCC102LSB:102,undefinedCC103LSB:103,undefinedCC104LSB:104,undefinedCC105LSB:105,undefinedCC106LSB:106,undefinedCC107LSB:107,undefinedCC108LSB:108,undefinedCC109LSB:109,undefinedCC110LSB:110,undefinedCC111LSB:111,undefinedCC112LSB:112,undefinedCC113LSB:113,undefinedCC114LSB:114,undefinedCC115LSB:115,undefinedCC116LSB:116,undefinedCC117LSB:117,undefinedCC118LSB:118,undefinedCC119LSB:119,allSoundOff:120,resetAllControllers:121,localControlOnOff:122,allNotesOff:123,omniModeOff:124,omniModeOn:125,monoModeOn:126,polyModeOn:127},gA=class{ticks;statusByte;data;constructor(A,e,t){this.ticks=A,this.statusByte=e,this.data=t}};function pa(A){let e=A&240,t=A&15,s=t;switch(e){case 128:case 144:case 160:case 176:case 192:case 208:case 224:break;case 240:switch(t){case 0:s=-3;break;case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:s=-1;break;case 15:s=-2;break}break;default:s=-1}return s}function Gs(A){let e=A&240,t=A&15,s=-1,n=A;return e>=128&&e<=224&&(s=t,n=e),{status:n,channel:s}}var ya={8:2,9:2,10:2,11:2,12:1,13:1,14:2},_s=(A,e)=>{for(let t=0;t<A.length;t++)e.push(A.charCodeAt(t))};function Sa(A){if(!A.tracks)throw new Error("MIDI has no tracks!");let e=[];for(let s of A.tracks){let n=[],a=0,r;for(let o of s.events){let i=Math.max(0,o.ticks-a);if(o.statusByte===M.endOfTrack){a+=i;continue}let g;o.statusByte<=M.sequenceSpecific?(g=[255,o.statusByte,...$t(o.data.length),...o.data],r=void 0):o.statusByte===M.systemExclusive?(g=[240,...$t(o.data.length),...o.data],r=void 0):(g=[],r!==o.statusByte&&(r=o.statusByte,g.push(o.statusByte)),g.push(...o.data)),n.push(...$t(i),...g),a+=i}n.push(0,255,M.endOfTrack,0),e.push(new Uint8Array(n))}let t=[];_s("MThd",t),t.push(...Ct(6,4),0,A.format,...Ct(A.tracks.length,2),...Ct(A.timeDivision,2));for(let s of e)_s("MTrk",t),t.push(...Ct(s.length,4),...s);return new Uint8Array(t).buffer}var Ht=-1,Bt=`SPESSASYNTH_EMBEDDED_BANK_${Math.random()}_DO_NOT_DELETE`,ka=32767,Da={time:0},wa=.03,ba=.07,yt=1/Math.cos(Math.PI/4)**2,$s=121,ke=class{static getDefaultBank(A){return A==="gm2"?$s:0}static getDrumBank(A){switch(A){default:throw new Error(`${A} doesn't have a bank MSB for drums.`);case"gm2":return 120;case"xg":return 127}}static isXGDrums(A){return A===120||A===127}static isValidXGMSB(A){return this.isXGDrums(A)||A===64||A===$s}static isSystemXG(A){return A==="gm2"||A==="xg"}static addBankOffset(A,e,t=!0){return this.isXGDrums(A)&&t?A:Math.min(A+e,127)}static subtractBankOffset(A,e,t=!0){return this.isXGDrums(A)&&t?A:Math.max(0,A-e)}};function Ms(A){return A.data[0]===67&&A.data[2]===76&&A.data[5]===126&&A.data[6]===0}function vn(A){return A.data[0]===65&&A.data[2]===66&&A.data[3]===18&&A.data[4]===64&&(A.data[5]&16)!==0&&A.data[6]===21}function vs(A){return A.data[0]===65&&A.data[2]===66&&A.data[5]===0&&A.data[6]===127}function Ls(A){return A.data[0]===126&&A.data[2]===9&&A.data[3]===1}function Ns(A){return A.data[0]===126&&A.data[2]===9&&A.data[3]===3}function Ra(A){return A[0]===65&&A[2]===66&&A[3]===18&&A[4]===65||A[0]===67&&A[2]===76&&A[3]>>4===3}function Fa(A){return A[0]===67&&A[2]===76&&A[3]===8&&(A[5]===3||A[5]===1||A[5]===2)?A[4]:A[0]===65&&A[2]===66&&A[3]===18&&A[4]===64&&(A[5]&240)===16&&A[6]===0?KA(A[5]&15):-1}function Ga(A){return A[0]===65&&A[2]===66&&A[3]===18&&A[4]===64&&A[5]===1&&A[6]>=48&&A[6]<=55}function Ma(A){return A[0]===65&&A[2]===66&&A[3]===18&&A[4]===64&&A[5]===1&&A[6]>=56&&A[6]<=64}function va(A){return A[0]===65&&A[2]===66&&A[3]===18&&A[4]===64&&A[5]===1&&A[6]>=80&&A[6]<=90}function La(A){return A[0]===65&&A[2]===66&&A[3]===18&&A[4]===64&&(A[5]===3||A[5]>>4===4&&A[6]===34)}function KA(A){return[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][A%16]}function Ts(A){return[1,2,3,4,5,6,7,8,9,0,10,11,12,13,14,15][A%16]}function Ln(A){return new gA(A,M.systemExclusive,new _([65,16,66,18,64,0,127,0,65,247]))}var IA=class Nn{static toMIDIString(e){return e.isGMGSDrum?`DRUM:${e.program}`:`${e.bankLSB}:${e.bankMSB}:${e.program}`}static fromMIDIString(e){let t=e.split(":");if(t.length>3||t.length<2)throw new Error("Invalid MIDI string:");return e.startsWith("DRUM")?{bankMSB:0,bankLSB:0,program:Number.parseInt(t[1]),isGMGSDrum:!0}:{bankLSB:Number.parseInt(t[0]),bankMSB:Number.parseInt(t[1]),program:Number.parseInt(t[2]),isGMGSDrum:!1}}static toNamedMIDIString(e){return`${Nn.toMIDIString(e)} ${e.name}`}static matches(e,t){return e.isGMGSDrum||t.isGMGSDrum?e.isGMGSDrum===t.isGMGSDrum&&e.program===t.program:e.program===t.program&&e.bankLSB===t.bankLSB&&e.bankMSB===t.bankMSB}static fromNamedMIDIString(e){let t=e.indexOf(" ");if(t===-1)throw new Error(`Invalid named MIDI string: ${e}`);let s=this.fromMIDIString(e.slice(0,Math.max(0,t))),n=e.slice(Math.max(0,t+1));return{...s,name:n}}static sorter(e,t){return e.program!==t.program?e.program-t.program:e.isGMGSDrum&&!t.isGMGSDrum?1:!e.isGMGSDrum&&t.isGMGSDrum?-1:e.bankMSB!==t.bankMSB?e.bankMSB-t.bankMSB:e.bankLSB-t.bankLSB}},Na="Created using SpessaSynth";function Ta(A,e,t){let s="gm",n=[],a=new Array(A.tracks.length).fill(0),r=16+Math.max(...A.portChannelOffsetMap),o=[];for(let i=0;i<r;i++)o.push({program:0,drums:i%16===9,lastBank:void 0,lastBankLSB:void 0,hasBankSelect:!1});A.iterate((i,g)=>{let c=A.portChannelOffsetMap[a[g]];if(i.statusByte===M.midiPort){a[g]=i.data[0];return}let l=i.statusByte&240;if(l!==M.controllerChange&&l!==M.programChange&&l!==M.systemExclusive)return;if(l===M.systemExclusive){if(!vn(i)){Ms(i)?s="xg":vs(i)?s="gs":Ls(i)?(s="gm",n.push({tNum:g,e:i})):Ns(i)&&(s="gm2");return}let m=KA(i.data[5]&15)+c;o[m].drums=!!(i.data[7]>0&&i.data[5]>>4);return}let B=(i.statusByte&15)+c,h=o[B];if(l===M.programChange){let m={program:i.data[0],bankLSB:h.lastBankLSB?.data?.[1]??0,bankMSB:ke.subtractBankOffset(h.lastBank?.data?.[1]??0,A.bankOffset),isGMGSDrum:h.drums},D=t.getPreset(m,s);if(y(`%cInput patch: %c${IA.toMIDIString(m)}%c. Channel %c${B}%c. Changing patch to ${D.toString()}.`,C.info,C.unrecognized,C.info,C.recognized,C.info),i.data[0]=D.program,D.isGMGSDrum&&ke.isSystemXG(s)||h.lastBank===void 0||(h.lastBank.data[1]=ke.addBankOffset(D.bankMSB,e,D.isXGDrums),h.lastBankLSB===void 0))return;h.lastBankLSB.data[1]=D.bankLSB;return}let E=i.data[0]===d.bankSelectLSB;i.data[0]!==d.bankSelect&&!E||(h.hasBankSelect=!0,E?h.lastBankLSB=i:h.lastBank=i)});for(let[i,g]of o.entries()){if(g.hasBankSelect)continue;let c=i%16,l=M.programChange|c,B=Math.floor(i/16)*16,h=A.portChannelOffsetMap.indexOf(B),E=A.tracks.find(R=>R.port===h&&R.channels.has(c));if(E===void 0)continue;let m=E.events.findIndex(R=>R.statusByte===l);if(m===-1){let R=E.events.findIndex(U=>U.statusByte>128&&U.statusByte<240&&(U.statusByte&15)===c);if(R===-1)continue;let Q=E.events[R].ticks,T=t.getPreset({bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1},s).program;E.addEvents(R,new gA(Q,M.programChange|c,new _([T]))),m=R}y(`%cAdding bank select for %c${i}`,C.info,C.recognized);let D=E.events[m].ticks,f=t.getPreset({bankLSB:0,bankMSB:0,program:g.program,isGMGSDrum:g.drums},s),O=ke.addBankOffset(f.bankMSB,e,f.isXGDrums);E.addEvents(m,new gA(D,M.controllerChange|c,new _([d.bankSelect,O])))}if(s==="gm"&&!ke.isSystemXG(s)){for(let g of n){let c=A.tracks[g.tNum];c.deleteEvent(c.events.indexOf(g.e))}let i=0;A.tracks[0].events[0].statusByte===M.trackName&&i++,A.tracks[0].addEvents(i,Ln(0))}}var js={bankOffset:0,metadata:{},correctBankOffset:!0,soundBank:void 0};function Ua(A,e,t){let s=t.metadata;if(je("%cWriting the RMIDI File...",C.info),y("metadata",s),y("Initial bank offset",A.bankOffset),t.correctBankOffset){if(!t.soundBank)throw new Error("Sound bank must be provided if correcting bank offset.");Ta(A,t.bankOffset,t.soundBank)}let n=new _(A.writeMIDI());s.name??=A.getName(),s.creationDate??=new Date,s.copyright??=Na,s.software??="SpessaSynth",Object.entries(s).forEach(i=>{let g=i;g[1]&&A.setRMIDInfo(g[0],g[1])});let a=[],r=(i,g)=>{a.push(N.write(i,g))};for(let i of Object.entries(A.rmidiInfo)){let g=i[0],c=i[1];switch(g){case"album":r("IALB",c),r("IPRD",c);break;case"software":r("ISFT",c);break;case"infoEncoding":r("IENC",c);break;case"creationDate":r("ICRD",c);break;case"picture":r("IPIC",c);break;case"name":r("INAM",c);break;case"artist":r("IART",c);break;case"genre":r("IGNR",c);break;case"copyright":r("ICOP",c);break;case"comment":r("ICMT",c);break;case"engineer":r("IENG",c);break;case"subject":r("ISBJ",c);break;case"midiEncoding":r("MENC",c);break}}let o=new _(2);return at(o,t.bankOffset,2),a.push(N.write("DBNK",o)),y("%cFinished!",C.info),ee(),N.writeParts("RIFF",[BA("RMID"),N.write("data",n),N.writeParts("INFO",a,!0),new _(e)]).buffer}function Pa(A,e){Je("%cSearching for all used programs and keys...",C.info);let t=16+Math.max(...A.portChannelOffsetMap),s=[],n="gs";for(let o=0;o<t;o++){let i=o%16===9;s.push({preset:e.getPreset({bankLSB:0,bankMSB:0,isGMGSDrum:i,program:0},n),bankMSB:0,bankLSB:0,isDrum:i})}let a=new Map,r=A.tracks.map(o=>o.port);A.iterate((o,i)=>{if(o.statusByte===M.midiPort&&A.tracks[i].channels.size>0){let l=o.data[0];A.portChannelOffsetMap[l]===void 0&&(se(`Invalid port ${l} on track ${i}. (No offset found in the MIDI map.`),l=0),r[i]=l;return}let g=o.statusByte&240;if(g!==M.noteOn&&g!==M.controllerChange&&g!==M.programChange&&g!==M.systemExclusive)return;let c=s[(o.statusByte&15)+A.portChannelOffsetMap[r[i]]||0];switch(g){case M.programChange:c.preset=e.getPreset({bankMSB:c.bankMSB,bankLSB:c.bankLSB,program:o.data[0],isGMGSDrum:c.isDrum},n);break;case M.controllerChange:switch(o.data[0]){default:return;case d.bankSelectLSB:c.bankLSB=o.data[1];break;case d.bankSelect:c.bankMSB=o.data[1]}break;case M.noteOn:{if(o.data[1]===0||!c.preset)return;let l=a.get(c.preset);l||(l=new Set,a.set(c.preset,l)),l.add(`${o.data[0]}-${o.data[1]}`);break}case M.systemExclusive:{if(!vn(o)){Ms(o)?(n="xg",y("%cXG on detected!",C.recognized)):Ns(o)?(n="gm2",y("%cGM2 on detected!",C.recognized)):Ls(o)?(n="gm",y("%cGM on detected!",C.recognized)):vs(o)&&(n="gs",y("%cGS on detected!",C.recognized));return}let l=KA(o.data[5]&15)+A.portChannelOffsetMap[r[i]],B=!!(o.data[7]>0&&o.data[5]>>4);c=s[l],c.isDrum=B}break}});for(let[o,i]of a.entries())i.size===0&&(y(`%cDetected change but no keys for %c${o.name}`,C.info,C.value),a.delete(o));return ee(),a}var xa=A=>(A.data=new _(A.data.buffer),6e7/zA(A.data,3));function Ha(A,e=0){let t=[],s=A.tracks.map(c=>c.events).flat();s.sort((c,l)=>c.ticks-l.ticks);for(let c=0;c<16;c++)t.push([]);let n=0,a=60/(120*A.timeDivision),r=0,o=0,i=[];for(let c=0;c<16;c++)i.push([]);let g=(c,l)=>{let B=i[l].findIndex(E=>E.midiNote===c),h=i[l][B];if(h){let E=n-h.start;h.length=E,l===9&&(h.length=Math.max(E,e)),i[l].splice(B,1)}o--};for(;r<s.length;){let c=s[r],l=c.statusByte>>4,B=c.statusByte&15;if(l===8)g(c.data[0],B);else if(l===9)if(c.data[1]===0)g(c.data[0],B);else{g(c.data[0],B);let h={midiNote:c.data[0],start:n,length:-1,velocity:c.data[1]/127};t[B].push(h),i[B].push(h),o++}else c.statusByte===81&&(a=60/(xa(c)*A.timeDivision));if(++r>=s.length)break;n+=a*(s[r].ticks-c.ticks)}if(o>0)for(let[c,l]of i.entries())for(let B of l){let h=n-B.start;B.length=h,c===9&&(B.length=Math.max(h,e))}return t}var Oa={linear:0,nearestNeighbor:1,hermite:2},Ve={Idle:0,RPCoarse:1,RPFine:2,NRPCoarse:3,NRPFine:4,DataCoarse:5,DataFine:6},oe={channelTuning:0,channelTransposeFine:1,modulationMultiplier:2,masterTuning:3,channelTuningSemitones:4,channelKeyShift:5,sf2NPRNGeneratorLSB:6},Ya={character:49,preLowpass:50,level:51,time:52,delayFeedback:53,preDelayTime:55},qa={preLowpass:57,level:58,feedback:59,delay:60,rate:61,depth:62,sendLevelToReverb:63,sendLevelToDelay:64},Ja={preLowpass:81,timeCenter:82,timeRatioLeft:83,timeRatioRight:84,levelCenter:85,levelLeft:86,levelRight:87,level:88,feedback:89,sendLevelToReverb:90};function HA(A,e,t,s){return new gA(s,M.controllerChange|A%16,new _([e,t]))}function de(A,e,t,s,n){let a=128-(e+t+s+n.reduce((r,o)=>r+o,0))%128&127;return new gA(A,M.systemExclusive,new Uint8Array([65,16,66,18,e,t,s,...n,a,247]))}function Ka(A,e){return de(e,40,16|Ts(A),21,[1])}function Va(A,{programChanges:e=[],controllerChanges:t=[],channelsToClear:s=[],channelsToTranspose:n=[],clearDrumParams:a=!1,reverbParams:r,chorusParams:o,delayParams:i,insertionParams:g}){Je("%cApplying changes to the MIDI file...",C.info),y("Desired program changes:",e),y("Desired CC changes:",t),y("Desired channels to clear:",s),y("Desired channels to transpose:",n),y("Desired reverb parameters",r),y("Desired chorus parameters",o),y("Desired delay parameters",i),y("Desired insertion parameters",g);let c=new Set;for(let u of e)c.add(u.channel);let l="gs",B=!1,h=A.tracks.map(u=>u.port),E={},m=0,D=(u,v)=>{A.tracks[u].channels.size!==0&&(m===0&&(m+=16,E[v]=0),E[v]===void 0&&(E[v]=m,m+=16),h[u]=v)};for(let[u,v]of A.tracks.entries())D(u,v.port);let f=m,O=new Array(f).fill(!0),R=new Array(f).fill(0),Q=new Array(f).fill(0);for(let u of n){let v=Math.trunc(u.keyShift),S=u.keyShift-v;R[u.channel]=v,Q[u.channel]=S}let T=-1,U=0,x=-1,V=0,J=!1;A.iterate((u,v,S)=>{let k=A.tracks[v],p=S[v],P=()=>{k.deleteEvent(p),S[v]--},K=(he,j=0)=>{k.addEvents(p+j,he),S[v]++},Ce=E[h[v]]||0;if(u.statusByte===M.midiPort){D(v,u.data[0]);return}if(u.statusByte<=M.sequenceSpecific&&u.statusByte>=M.sequenceNumber)return;let be=u.statusByte&240,Be=u.statusByte&15,ae=Be+Ce;if(u.statusByte!==M.systemExclusive&&s.includes(ae)){P();return}switch(be){case M.noteOn:if(O[ae]){O[ae]=!1;for(let j of t.filter(Y=>Y.channel===ae))K(HA(Be,j.controllerNumber,j.controllerValue,u.ticks));let he=Q[ae];if(he!==0){let j=he*64+64,Y=HA(Be,d.registeredParameterMSB,0,u.ticks),ne=HA(Be,d.registeredParameterLSB,1,u.ticks),fe=HA(ae,d.dataEntryMSB,j,u.ticks);K(HA(Be,d.dataEntryLSB,0,u.ticks)),K(fe),K(ne),K(Y)}if(c.has(ae)){let j=e.find(Ie=>Ie.channel===ae);if(!j)return;y(`%cSetting %c${j.channel}%c to %c${IA.toMIDIString(j)}%c. Track num: %c${v}`,C.info,C.recognized,C.info,C.recognized,C.info,C.recognized);let Y=j.bankMSB,ne=j.bankLSB,fe=j.program;K(new gA(u.ticks,M.programChange|Be,new _([fe])));let Me=(Ie,ve)=>{K(HA(Be,Ie?d.bankSelectLSB:d.bankSelect,ve,u.ticks))};ke.isSystemXG(l)&&j.isGMGSDrum&&(y(`%cAdding XG Drum change on track %c${v}`,C.recognized,C.value),Y=ke.getDrumBank(l),ne=0),Me(!1,Y),Me(!0,ne),j.isGMGSDrum&&!ke.isSystemXG(l)&&Be!==9&&(y(`%cAdding GS Drum change on track %c${v}`,C.recognized,C.value),K(Ka(Be,u.ticks)))}}u.data[0]+=R[ae];break;case M.noteOff:u.data[0]+=R[ae];break;case M.programChange:if(c.has(ae)){P();return}break;case M.controllerChange:{let he=u.data[0];if(t.find(j=>j.channel===ae&&he===j.controllerNumber)!==void 0){P();return}switch(he){case d.bankSelect:case d.bankSelectLSB:c.has(ae)&&P();return;case d.registeredParameterLSB:case d.registeredParameterMSB:J=!1;return;case d.nonRegisteredParameterMSB:T=S[v],U=v,J=!0;return;case d.nonRegisteredParameterLSB:x=S[v],V=v,J=!0;return;case d.dataEntryMSB:if(x&&T&&J&&a){let j=A.tracks[U].events[T].data[1];if(j>=24&&j<=31){P();let Y=A.tracks[V],ne=A.tracks[U];Y.deleteEvent(x),S[V]--,ne.deleteEvent(T),S[U]--}}return;default:return}}case M.systemExclusive:{if(Ms(u)){y("%cXG system on detected",C.info),l="xg",B=!0;return}if(Ns(u)){y("%cGM2 system on detected",C.info),l="gm2",B=!0;return}if(vs(u)){B=!0,y("%cGS on detected!",C.recognized);return}if(Ls(u)){y("%cGM on detected, removing!",C.info),P(),B=!1;return}if(a&&Ra(u.data)){P();return}if(r&&Ga(u.data)){P();return}if(o&&Ma(u.data)){P();return}if(i&&va(u.data)){P();return}if(g&&La(u.data)){P();return}let he=Fa(u.data);if(he!==-1){c.has(he+Ce)&&P();return}}}});let L=Math.max(0,A.firstNoteOn-10),H=A.tracks[0],q=Math.max(0,H.events.findIndex(u=>u.ticks>=L)-1);if(r){let u=Ya,v=r;H.addEvents(q,de(L,64,1,u.level,[v.level]),de(L,64,1,u.preLowpass,[v.preLowpass]),de(L,64,1,u.character,[v.character]),de(L,64,1,u.time,[v.time]),de(L,64,1,u.delayFeedback,[v.delayFeedback]),de(L,64,1,u.preDelayTime,[v.preDelayTime]))}if(o){let u=qa,v=o;H.addEvents(q,de(L,64,1,u.level,[v.level]),de(L,64,1,u.preLowpass,[v.preLowpass]),de(L,64,1,u.feedback,[v.feedback]),de(L,64,1,u.delay,[v.delay]),de(L,64,1,u.rate,[v.rate]),de(L,64,1,u.depth,[v.depth]),de(L,64,1,u.sendLevelToReverb,[v.sendLevelToReverb]),de(L,64,1,u.sendLevelToDelay,[v.sendLevelToDelay]))}if(i){let u=Ja,v=i;H.addEvents(q,de(L,64,1,u.level,[v.level]),de(L,64,1,u.preLowpass,[v.preLowpass]),de(L,64,1,u.timeCenter,[v.timeCenter]),de(L,64,1,u.timeRatioLeft,[v.timeRatioLeft]),de(L,64,1,u.timeRatioRight,[v.timeRatioRight]),de(L,64,1,u.levelCenter,[v.levelCenter]),de(L,64,1,u.levelLeft,[v.levelLeft]),de(L,64,1,u.levelRight,[v.levelRight]),de(L,64,1,u.feedback,[v.feedback]),de(L,64,1,u.sendLevelToReverb,[v.sendLevelToReverb]))}if(g){let u=g;for(let v=0;v<u.channels.length;v++)u.channels[v]&&H.addEvents(L,de(L,64,64|Ts(v),34,[1]));for(let v=0;v<u.params.length;v++){let S=u.params[v];S!==255&&H.addEvents(q,de(L,64,3,v+3,[S]))}H.addEvents(q,de(L,64,3,0,[u.type>>8,u.type&127]))}if(!B&&e.length>0){let u=0;A.tracks[0].events[0].statusByte===M.trackName&&u++,A.tracks[0].addEvents(u,Ln(0)),y("%cGS on not detected. Adding it.",C.info)}A.flush(),ee()}function Xa(A,e){let t=[],s=[],n=[],a=[];for(let[r,o]of e.channelSnapshots.entries()){if(o.isMuted){s.push(r);continue}let i=o.keyShift+o.customControllers[oe.channelTransposeFine]/100;i!==0&&t.push({channel:r,keyShift:i}),o.lockPreset&&n.push({channel:r,...o.patch});for(let[g,c]of o.lockedControllers.entries()){if(!c||g>127||g===d.bankSelect)continue;let l=o.midiControllers[g]>>7;a.push({channel:r,controllerNumber:g,controllerValue:l})}}A.modify({programChanges:n,controllerChanges:a,channelsToClear:s,channelsToTranspose:t,clearDrumParams:e.masterParameters.drumLock,reverbParams:e.masterParameters.reverbLock?e.reverbSnapshot:void 0,chorusParams:e.masterParameters.chorusLock?e.chorusSnapshot:void 0,delayParams:e.masterParameters.delayLock?e.delaySnapshot:void 0,insertionParams:e.masterParameters.insertionEffectLock?e.insertionSnapshot:void 0})}var jt={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},OA={inLineResource:1,inFileResource:2,inFileNode:3,externalFile:4,externalXMF:5,XMFFileURIandNodeID:6},es={StandardMIDIFile:0,StandardMIDIFileType1:1,DLS1:2,DLS2:3,DLS22:4,mobileDLS:5,unknown:-1,folder:-2},Za={standard:0,MMA:1,registered:2,nonRegistered:3},Et={none:0,MMAUnpacker:1,registered:2,nonRegistered:3},Wa=class Tn{length;itemCount;metadataLength;metadata={};nodeData;innerNodes=[];packedContent=!1;nodeUnpackers=[];resourceFormat="unknown";referenceTypeID;constructor(e){let t=e.currentIndex;this.length=pe(e),this.itemCount=pe(e);let s=pe(e),n=s-(e.currentIndex-t),a=e.slice(e.currentIndex,e.currentIndex+n);e.currentIndex+=n,this.metadataLength=pe(a);let r=a.slice(a.currentIndex,a.currentIndex+this.metadataLength);a.currentIndex+=this.metadataLength;let o,i;for(;r.currentIndex<r.length;){r[r.currentIndex]===0?(r.currentIndex++,o=pe(r),Object.values(jt).includes(o)?i=Object.keys(jt).find(h=>jt[h]===o)??"":(y(`Unknown field specifier: ${o}`),i=`unknown_${o}`)):(o=ue(r,pe(r)),i=o);let B=pe(r);if(B===0){let h=pe(r),E=r.slice(r.currentIndex,r.currentIndex+h);r.currentIndex+=h;let m=pe(E);this.metadata[i]=m<4?ue(E,h-1):E.slice(E.currentIndex)}else y(`International content: ${B}`),r.currentIndex+=pe(r)}let g=a.currentIndex,c=pe(a),l=a.slice(a.currentIndex,g+c);if(a.currentIndex=g+c,c>0)for(this.packedContent=!0;l.currentIndex<c;){let B={id:pe(l)};switch(B.id){case Et.nonRegistered:case Et.registered:throw ee(),new Error(`Unsupported unpacker ID: ${B.id}`);default:throw ee(),new Error(`Unknown unpacker ID: ${B.id}`);case Et.none:B.standardID=pe(l);break;case Et.MMAUnpacker:{let h=l[l.currentIndex++];h===0&&(h<<=8,h|=l[l.currentIndex++],h<<=8,h|=l[l.currentIndex++]);let E=pe(l);B.manufacturerID=h,B.manufacturerInternalID=E}break}B.decodedSize=pe(l),this.nodeUnpackers.push(B)}switch(e.currentIndex=t+s,this.referenceTypeID=pe(e),this.nodeData=e.slice(e.currentIndex,t+this.length),e.currentIndex=t+this.length,this.referenceTypeID){case OA.inLineResource:break;case OA.externalXMF:case OA.inFileNode:case OA.XMFFileURIandNodeID:case OA.externalFile:case OA.inFileResource:throw ee(),new Error(`Unsupported reference type: ${this.referenceTypeID}`);default:throw ee(),new Error(`Unknown reference type: ${this.referenceTypeID}`)}if(this.isFile){if(this.packedContent){let h=this.nodeData.slice(2);y(`%cPacked content. Attempting to deflate. Target size: %c${this.nodeUnpackers[0].decodedSize}`,C.warn,C.value);try{this.nodeData=new _(bn(h).buffer)}catch(E){if(ee(),E instanceof Error)throw new Error(`Error unpacking XMF file contents: ${E.message}.`,{cause:E})}}let B=this.metadata.resourceFormat;if(B===void 0)se("No resource format for this file node!");else{B[0]!==Za.standard&&(y(`Non-standard formatTypeID: ${B.toString()}`),this.resourceFormat=B.toString());let h=B[1];Object.values(es).includes(h)?this.resourceFormat=Object.keys(es).find(E=>es[E]===h):y(`Unrecognized resource format: ${h}`)}}else for(this.resourceFormat="folder";this.nodeData.currentIndex<this.nodeData.length;){let B=this.nodeData.currentIndex,h=pe(this.nodeData),E=this.nodeData.slice(B,B+h);this.nodeData.currentIndex=B+h,this.innerNodes.push(new Tn(E))}}get isFile(){return this.itemCount===0}};function za(A,e){A.bankOffset=0;let t=ue(e,4);if(t!=="XMF_")throw ee(),new SyntaxError(`Invalid XMF Header! Expected "_XMF", got "${t}"`);je("%cParsing XMF file...",C.info);let s=ue(e,4);y(`%cXMF version: %c${s}`,C.info,C.recognized),s==="2.00"&&y(`%cFile Type ID: %c${JA(e,4)}%c, File Type Revision ID: %c${JA(e,4)}`,C.info,C.recognized,C.info,C.recognized),pe(e);let n=pe(e);e.currentIndex+=n,e.currentIndex=pe(e);let a=new Wa(e),r,o=i=>{let g=(c,l)=>{i.metadata[c]!==void 0&&typeof i.metadata[c]=="string"&&(A.rmidiInfo[l]=BA(i.metadata[c]))};if(g("nodeName","name"),g("title","name"),g("copyrightNotice","copyright"),g("comment","comment"),i.isFile)switch(i.resourceFormat){default:return;case"DLS1":case"DLS2":case"DLS22":case"mobileDLS":y("%cFound embedded DLS!",C.recognized),A.embeddedSoundBank=i.nodeData.buffer;break;case"StandardMIDIFile":case"StandardMIDIFileType1":y("%cFound embedded MIDI!",C.recognized),r=i.nodeData;break}else for(let c of i.innerNodes)o(c)};if(o(a),ee(),!r)throw new Error("No MIDI data in the XMF file!");return r}var Ot=class Un{name="";port=0;channels=new Set;events=[];static copyFrom(e){let t=new Un;return t.copyFrom(e),t}copyFrom(e){this.name=e.name,this.port=e.port,this.channels=new Set(e.channels),this.events=e.events.map(t=>new gA(t.ticks,t.statusByte,new _(t.data)))}addEvent(e,t){this.events.splice(t,0,e)}addEvents(e,...t){this.events.splice(e,0,...t)}deleteEvent(e){this.events.splice(e,1)}pushEvent(e){this.events.push(e)}};function en(A,e,t){Je("%cParsing MIDI File...",C.info),A.fileName=t;let s=new _(e),n,a=g=>{let c=ue(g,4),l=JA(g,4),B={type:c,size:l,data:new _(l)},h=g.slice(g.currentIndex,g.currentIndex+B.size);return B.data.set(h,0),g.currentIndex+=B.size,B},r=oA(s,4);if(r==="RIFF"){s.currentIndex+=8;let g=ue(s,4);if(g!=="RMID")throw ee(),new SyntaxError(`Invalid RMIDI Header! Expected "RMID", got "${g}"`);let c=N.read(s);if(c.header!=="data")throw ee(),new SyntaxError(`Invalid RMIDI Chunk header! Expected "data", got "${c.header}"`);n=c.data;let l=!1,B=!1;for(;s.currentIndex<s.length;){let h=s.currentIndex,E=N.read(s,!0);if(E.header==="RIFF"){let m=ue(E.data,4).toLowerCase();m==="sfbk"||m==="sfpk"||m==="dls "?(y("%cFound embedded soundbank!",C.recognized),A.embeddedSoundBank=s.slice(h,h+E.size).buffer):se(`Unknown RIFF chunk: "${m}"`),m==="dls "?A.isDLSRMIDI=!0:l=!0}else if(E.header==="LIST"&&ue(E.data,4)==="INFO")for(y("%cFound RMIDI INFO chunk!",C.recognized);E.data.currentIndex<E.size;){let m=N.read(E.data,!0),D=m.header,f=m.data;switch(D){default:se(`Unknown RMIDI Info: ${D}`);break;case"INAM":A.rmidiInfo.name=f;break;case"IALB":case"IPRD":A.rmidiInfo.album=f;break;case"ICRT":case"ICRD":A.rmidiInfo.creationDate=f;break;case"IART":A.rmidiInfo.artist=f;break;case"IGNR":A.rmidiInfo.genre=f;break;case"IPIC":A.rmidiInfo.picture=f;break;case"ICOP":A.rmidiInfo.copyright=f;break;case"ICMT":A.rmidiInfo.comment=f;break;case"IENG":A.rmidiInfo.engineer=f;break;case"ISFT":A.rmidiInfo.software=f;break;case"ISBJ":A.rmidiInfo.subject=f;break;case"IENC":A.rmidiInfo.infoEncoding=f;break;case"MENC":A.rmidiInfo.midiEncoding=f;break;case"DBNK":A.bankOffset=Dn(f,2),B=!0;break}}}l&&!B&&(A.bankOffset=1),A.isDLSRMIDI&&(A.bankOffset=0),A.embeddedSoundBank===void 0&&(A.bankOffset=0)}else r==="XMF_"?n=za(A,s):n=s;let o=a(n);if(o.type!=="MThd")throw ee(),new SyntaxError(`Invalid MIDI Header! Expected "MThd", got "${o.type}"`);if(o.size!==6)throw ee(),new RangeError(`Invalid MIDI header chunk size! Expected 6, got ${o.size}`);A.format=JA(o.data,2);let i=JA(o.data,2);A.timeDivision=JA(o.data,2);for(let g=0;g<i;g++){let c=new Ot,l=a(n);if(l.type!=="MTrk")throw ee(),new SyntaxError(`Invalid track header! Expected "MTrk" got "${l.type}"`);let B,h=0;for(A.format===2&&g>0&&(h+=A.tracks[g-1].events[A.tracks[g-1].events.length-1].ticks);l.data.currentIndex<l.size;){h+=pe(l.data);let E=l.data[l.data.currentIndex],m;if(B!==void 0&&E<128)m=B;else{if(E<128)throw ee(),new SyntaxError(`Unexpected byte with no running byte. (${E})`);m=l.data[l.data.currentIndex++]}let D=pa(m),f;switch(D){case-1:f=0;break;case-2:m=l.data[l.data.currentIndex++],f=pe(l.data);break;case-3:f=pe(l.data);break;default:f=ya[m>>4],B=m;break}let O=new _(f);O.set(l.data.slice(l.data.currentIndex,l.data.currentIndex+f),0);let R=new gA(h,m,O);c.pushEvent(R),l.data.currentIndex+=f}A.tracks.push(c),y(`%cParsed %c${A.tracks.length}%c / %c${A.tracks.length}`,C.info,C.value,C.info,C.value)}y("%cAll tracks parsed correctly!",C.recognized),A.flush(!1),ee()}function Us(A){return A.toISOString().split(".")[0]+"Z"}var _a=[new Map([["domingo","Sunday"],["segunda-feira","Monday"],["ter\xE7a-feira","Tuesday"],["quarta-feira","Wednesday"],["quinta-feira","Thursday"],["sexta-feira","Friday"],["s\xE1bado","Saturday"],["janeiro","January"],["fevereiro","February"],["mar\xE7o","March"],["abril","April"],["maio","May"],["junho","June"],["julho","July"],["agosto","August"],["setembro","September"],["outubro","October"],["novembro","November"],["dezembro","December"]])];function $a(A){for(let e of _a){let t=A;for(let[n,a]of e.entries()){let r=new RegExp(n,"gi");t=t.replace(r,a)}let s=new Date(t);if(!Number.isNaN(s.getTime()))return s}}function ja(A){let e=/^(\d{2})\.(\d{2})\.(\d{4})$/.exec(A);if(e){let t=Number.parseInt(e[1]),s=Number.parseInt(e[2])-1,n=Number.parseInt(e[3]),a=new Date(n,s,t);if(!Number.isNaN(a.getTime()))return a}}function ei(A){let e=/^(\d{1,2})\s{1,2}(\d{1,2})\s{1,2}(\d{2})$/.exec(A);if(e){let t=e[1],s=(Number.parseInt(e[2])+1).toString(),n=e[3],a=new Date(`${s}/${t}/${n}`);if(!Number.isNaN(a.getTime()))return a}}function Ai(A){let e=/\b\d{4}\b/.exec(A);return e?new Date(e[0]):void 0}function Ps(A){if(A=A.trim(),A.length===0)return new Date;let e=A.replaceAll(/\b(\d+)(st|nd|rd|th)\b/g,"$1").replace(/\s+at\s+/i," "),t=new Date(e);if(Number.isNaN(t.getTime())){let s=$a(A);if(s)return s;let n=ja(A);if(n)return n;let a=ei(A);if(a)return a;let r=Ai(A);return r||(se(`Invalid date: "${A}". Replacing with the current date!`),new Date)}return t}var NA=class St{tracks=[];timeDivision=480;duration=0;tempoChanges=[{ticks:0,tempo:120}];extraMetadata=[];lyrics=[];firstNoteOn=0;keyRange={min:0,max:127};lastVoiceEventTick=0;portChannelOffsetMap=[0];loop={start:0,end:0,type:"hard"};fileName;format=0;rmidiInfo={};bankOffset=0;isKaraokeFile=!1;isMultiPort=!1;isDLSRMIDI=!1;embeddedSoundBank;binaryName;get infoEncoding(){let e=this.rmidiInfo.infoEncoding;if(!e)return;let t=e.byteLength;return e[e.byteLength-1]===0&&t--,oA(e,t)}static fromArrayBuffer(e,t=""){let s=new St;return en(s,e,t),s}static async fromFile(e){let t=new St;return en(t,await e.arrayBuffer(),e.name),t}static copyFrom(e){let t=new St;return t.copyFrom(e),t}copyFrom(e){this.copyMetadataFrom(e),this.embeddedSoundBank=e?.embeddedSoundBank?.slice(0)??void 0,this.tracks=e.tracks.map(t=>Ot.copyFrom(t))}midiTicksToSeconds(e){if(e=Math.max(e,0),this.tempoChanges.length===0)throw new Error("There are no tempo changes in the sequence. At least one is needed.");if(this.tempoChanges[this.tempoChanges.length-1].ticks!==0)throw new Error(`The last tempo change is not at 0 ticks. Got ${this.tempoChanges[this.tempoChanges.length-1].ticks} ticks.`);let t=this.tempoChanges.findIndex(n=>n.ticks<=e),s=0;for(;t<this.tempoChanges.length;){let n=this.tempoChanges[t++],a=e-n.ticks;s+=a*60/(n.tempo*this.timeDivision),e=n.ticks}return s}secondsToMIDITicks(e){if(e=Math.max(e,0),e===0)return 0;if(this.tempoChanges.length===0)throw new Error("There are no tempo changes in the sequence. At least one is needed.");if(this.tempoChanges[this.tempoChanges.length-1].ticks!==0)throw new Error(`The last tempo change is not at 0 ticks. Got ${this.tempoChanges[this.tempoChanges.length-1].ticks} ticks.`);let t=e,s=0;for(let n=this.tempoChanges.length-1;n>=0;n--){let a=this.tempoChanges[n],r=this.tempoChanges[n-1],o=r?r.ticks-a.ticks:1/0,i=60/(a.tempo*this.timeDivision),g=o*i;if(t<=g)return s+=Math.round(t/i),s;s+=o,t-=g}return s}getUsedProgramsAndKeys(e){return Pa(this,e)}preloadSynth(e){Je("%cPreloading samples...",C.info);let t=this.getUsedProgramsAndKeys(e.soundBankManager);for(let[s,n]of t.entries()){y(`%cPreloading used samples on %c${s.name}%c...`,C.info,C.recognized,C.info);for(let a of n){let[r,o]=a.split("-").map(Number);e.getVoicesForPreset(s,r,o)}}ee()}flush(e=!0){if(e)for(let t of this.tracks)t.events.sort((s,n)=>s.ticks-n.ticks);this.parseInternal()}getNoteTimes(e=0){return Ha(this,e)}writeMIDI(){return Sa(this)}writeRMIDI(e,t=js){return Ua(this,e,Fs(t,js))}modify({programChanges:e=[],controllerChanges:t=[],channelsToClear:s=[],channelsToTranspose:n=[],clearDrumParams:a=!1,reverbParams:r,chorusParams:o,delayParams:i,insertionParams:g}){Va(this,{programChanges:e,controllerChanges:t,channelsToClear:s,channelsToTranspose:n,clearDrumParams:a,reverbParams:r,chorusParams:o,delayParams:i,insertionParams:g})}applySnapshot(e){Xa(this,e)}getName(e="Shift_JIS"){let t="",s=this.getRMIDInfo("name");if(s)return s.trim();if(this.binaryName){e=this.getRMIDInfo("midiEncoding")??e;try{t=new TextDecoder(e).decode(this.binaryName).trim()}catch(n){se(`Failed to decode MIDI name: ${n}`)}}return t||this.fileName}getExtraMetadata(e="Shift_JIS"){e=this.infoEncoding??e;let t=new TextDecoder(e);return this.extraMetadata.map(s=>t.decode(s.data).replaceAll(/@T|@A/g,"").trim())}setRMIDInfo(e,t){if(this.rmidiInfo.infoEncoding=BA("utf-8",!0),e==="picture")this.rmidiInfo.picture=new Uint8Array(t);else if(e==="creationDate")this.rmidiInfo.creationDate=BA(Us(t),!0);else{let s=new TextEncoder().encode(t);this.rmidiInfo[e]=new Uint8Array([...s,0])}}getRMIDInfo(e){if(!this.rmidiInfo[e])return;let t=this.infoEncoding??"UTF-8";if(e==="picture")return this.rmidiInfo[e].buffer;if(e==="creationDate")return Ps(oA(this.rmidiInfo[e]));try{let s=new TextDecoder(t),n=this.rmidiInfo[e];return n[n.length-1]===0&&(n=n?.slice(0,-1)),s.decode(n.buffer).trim()}catch(s){se(`Failed to decode ${e} name: ${s}`);return}}iterate(e){let t=new Array(this.tracks.length).fill(0),s=this.tracks.length,n=()=>{let a=0,r=1/0;for(let[o,{events:i}]of this.tracks.entries())t[o]>=i.length||i[t[o]].ticks<r&&(a=o,r=i[t[o]].ticks);return a};for(;s>0;){let a=n(),r=this.tracks[a].events;if(t[a]>=r.length){s--;continue}let o=r[t[a]];e(o,a,t),t[a]++}}copyMetadataFrom(e){this.fileName=e.fileName,this.timeDivision=e.timeDivision,this.duration=e.duration,this.firstNoteOn=e.firstNoteOn,this.lastVoiceEventTick=e.lastVoiceEventTick,this.format=e.format,this.bankOffset=e.bankOffset,this.isKaraokeFile=e.isKaraokeFile,this.isMultiPort=e.isMultiPort,this.isDLSRMIDI=e.isDLSRMIDI,this.isDLSRMIDI=e.isDLSRMIDI,this.tempoChanges=[...e.tempoChanges],this.extraMetadata=e.extraMetadata.map(t=>new gA(t.ticks,t.statusByte,new _(t.data))),this.lyrics=e.lyrics.map(t=>new gA(t.ticks,t.statusByte,new _(t.data))),this.portChannelOffsetMap=[...e.portChannelOffsetMap],this.binaryName=e?.binaryName?.slice(),this.loop={...e.loop},this.keyRange={...e.keyRange},this.rmidiInfo={};for(let t of Object.entries(e.rmidiInfo)){let s=t[0],n=t[1];this.rmidiInfo[s]=new Uint8Array(n)}}parseInternal(){je("%cInterpreting MIDI events...",C.info);let e=!1;this.tempoChanges=[{ticks:0,tempo:120}],this.extraMetadata=[],this.lyrics=[],this.firstNoteOn=0,this.keyRange={max:0,min:127},this.lastVoiceEventTick=0,this.portChannelOffsetMap=[0],this.loop={start:0,end:0,type:"hard"},this.isKaraokeFile=!1,this.isMultiPort=!1;let t=!1;this.rmidiInfo.name!==void 0&&(t=!0);let s=null,n=null,a="hard";for(let g of this.tracks){let c=new Set,l=!1;for(let h=0;h<g.events.length;h++){let E=g.events[h];if(E.statusByte>=128&&E.statusByte<240)switch(l=!0,E.ticks>this.lastVoiceEventTick&&(this.lastVoiceEventTick=E.ticks),E.statusByte&240){case M.controllerChange:switch(E.data[0]){case 2:case 111:case 116:s=E.ticks;break;case 4:case 117:n===null?(a="soft",n=E.ticks):n=0;break;case 0:this.isDLSRMIDI&&E.data[1]!==0&&E.data[1]!==127&&(y("%cDLS RMIDI with offset 1 detected!",C.recognized),this.bankOffset=1)}break;case M.noteOn:{c.add(E.statusByte&15);let D=E.data[0];this.keyRange.min=Math.min(this.keyRange.min,D),this.keyRange.max=Math.max(this.keyRange.max,D);break}}let m=oA(E.data);switch(E.statusByte){case M.endOfTrack:h!==g.events.length-1&&(g.deleteEvent(h),h--,se("Unexpected EndOfTrack. Removing!"));break;case M.setTempo:this.tempoChanges.push({ticks:E.ticks,tempo:6e7/zA(E.data,3)});break;case M.marker:switch(m.trim().toLowerCase()){default:break;case"start":case"loopstart":s=E.ticks;break;case"loopend":n=E.ticks}break;case M.copyright:this.extraMetadata.push(E);break;case M.lyric:m.trim().startsWith("@KMIDI KARAOKE FILE")&&(this.isKaraokeFile=!0,y("%cKaraoke MIDI detected!",C.recognized)),this.isKaraokeFile?E.statusByte=M.text:this.lyrics.push(E);case M.text:{let D=m.trim();D.startsWith("@KMIDI KARAOKE FILE")?(this.isKaraokeFile=!0,y("%cKaraoke MIDI detected!",C.recognized)):this.isKaraokeFile&&(D.startsWith("@T")||D.startsWith("@A")?e?this.extraMetadata.push(E):(this.binaryName=E.data.slice(2),e=!0,t=!0):D.startsWith("@")||this.lyrics.push(E));break}}}g.channels=c,g.name="";let B=g.events.find(h=>h.statusByte===M.trackName);B&&this.tracks.indexOf(g)>0&&(g.name=oA(B.data),!l&&!g.name.toLowerCase().includes("setup")&&this.extraMetadata.push(B))}this.tempoChanges.reverse(),y("%cCorrecting loops, ports and detecting notes...",C.info);let r=[];for(let g of this.tracks){let c=g.events.find(l=>(l.statusByte&240)===M.noteOn);c&&r.push(c.ticks)}this.firstNoteOn=Math.min(...r),y(`%cFirst note-on detected at: %c${this.firstNoteOn}%c ticks!`,C.info,C.recognized,C.info),s??=this.firstNoteOn,(n===null||n===0)&&(n=this.lastVoiceEventTick),this.loop={start:s,end:n,type:a},this.lastVoiceEventTick=Math.max(this.lastVoiceEventTick,this.loop.end),y(`%cLoop points: start: %c${this.loop.start}%c end: %c${this.loop.end}`,C.info,C.recognized,C.info,C.recognized);let o=0;this.portChannelOffsetMap=[];for(let g of this.tracks)if(g.port=-1,g.channels.size!==0)for(let c of g.events){if(c.statusByte!==M.midiPort)continue;let l=c.data[0];g.port=l,this.portChannelOffsetMap[l]===void 0&&(this.portChannelOffsetMap[l]=o,o+=16)}this.portChannelOffsetMap=[...this.portChannelOffsetMap].map(g=>g??0);let i=1/0;for(let g of this.tracks)g.port!==-1&&i>g.port&&(i=g.port);i===1/0&&(i=0);for(let g of this.tracks)(g.port===-1||g.port===void 0)&&(g.port=i);if(this.portChannelOffsetMap.length===0&&(this.portChannelOffsetMap=[0]),this.portChannelOffsetMap.length<2?y("%cNo additional MIDI Ports detected.",C.info):(this.isMultiPort=!0,y("%cMIDI Ports detected!",C.recognized)),!t)if(this.tracks.length>1){if(!this.tracks[0].events.some(g=>g.statusByte>=M.noteOn&&g.statusByte<M.polyPressure)){let g=this.tracks[0].events.find(c=>c.statusByte===M.trackName);g&&(this.binaryName=g.data)}}else{let g=this.tracks[0].events.find(c=>c.statusByte===M.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 gA(0,M.trackName,new _(c)))}this.duration=this.midiTicksToSeconds(this.lastVoiceEventTick),this.binaryName?.length===0&&(this.binaryName=void 0),y(`%cMIDI file parsed. Total tick time: %c${this.lastVoiceEventTick}%c, total seconds time: %c${ls(Math.ceil(this.duration)).time}`,C.info,C.recognized,C.info,C.recognized),ee()}};function ti(A,e){if(this.externalMIDIPlayback&&A.statusByte>=128){this.sendMIDIMessage([A.statusByte,...A.data]);return}let t=this._midiData.tracks[e],s=Gs(A.statusByte),n=this.midiPortChannelOffsets[this.currentMIDIPorts[e]]||0;switch(s.channel+=n,s.status){case M.noteOn:{let a=A.data[1];if(a>0)this.synth.noteOn(s.channel,A.data[0],a),this.playingNotes.push({midiNote:A.data[0],channel:s.channel,velocity:a});else{this.synth.noteOff(s.channel,A.data[0]);let r=this.playingNotes.findIndex(o=>o.midiNote===A.data[0]&&o.channel===s.channel);r!==-1&&this.playingNotes.splice(r,1)}break}case M.noteOff:{this.synth.noteOff(s.channel,A.data[0]);let a=this.playingNotes.findIndex(r=>r.midiNote===A.data[0]&&r.channel===s.channel);a!==-1&&this.playingNotes.splice(a,1);break}case M.pitchWheel:this.synth.pitchWheel(s.channel,A.data[1]<<7|A.data[0]);break;case M.controllerChange:if(this._midiData.isMultiPort&&t.channels.size===0)return;this.synth.controllerChange(s.channel,A.data[0],A.data[1]);break;case M.programChange:if(this._midiData.isMultiPort&&t.channels.size===0)return;this.synth.programChange(s.channel,A.data[0]);break;case M.polyPressure:this.synth.polyPressure(s.channel,A.data[0],A.data[1]);break;case M.channelPressure:this.synth.channelPressure(s.channel,A.data[0]);break;case M.systemExclusive:this.synth.systemExclusive(A.data,n);break;case M.setTempo:{let a=6e7/zA(A.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"));break}case M.timeSignature:case M.endOfTrack:case M.midiChannelPrefix:case M.songPosition:case M.activeSensing:case M.keySignature:case M.sequenceNumber:case M.sequenceSpecific:case M.text:case M.lyric:case M.copyright:case M.trackName:case M.marker:case M.cuePoint:case M.instrumentName:case M.programName:break;case M.midiPort:this.assignMIDIPort(e,A.data[0]);break;case M.reset:this.synth.stopAllChannels(),this.synth.resetAllControllers();break;default:y(`%cUnrecognized Event: %c${A.statusByte}%c status byte: %c${Object.keys(M).find(a=>M[a]===s.status)}`,C.warn,C.unrecognized,C.warn,C.value);break}s.status>=0&&s.status<128&&this.callEvent("metaEvent",{event:A,trackIndex:e})}function si(){if(this.paused||!this._midiData)return;let A=this.currentTime;for(;this.playedTime<A;){let e=this.findFirstEventIndex(),t=this._midiData.tracks[e].events[this.eventIndexes[e]++];this.processEvent(t,e);let s=this.findFirstEventIndex(),n=this._midiData.tracks[s];if(this.loopCount>0&&this._midiData.loop.end<=t.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(n.events.length<=this.eventIndexes[s]||t.ticks>=this._midiData.lastVoiceEventTick){this.songIsFinished();return}let a=n.events[this.eventIndexes[s]];this.playedTime+=this.oneTickToSeconds*(a.ticks-t.ticks)}}function ni(A,e){this._midiData.tracks[A].channels.size!==0&&(this.midiPortChannelOffset===0&&(this.midiPortChannelOffset+=16,this.midiPortChannelOffsets[e]=0),this.midiPortChannelOffsets[e]===void 0&&(this.synth.midiChannels.length<this.midiPortChannelOffset+15&&this.addNewMIDIPort(),this.midiPortChannelOffsets[e]=this.midiPortChannelOffset,this.midiPortChannelOffset+=16),this.currentMIDIPorts[A]=e)}function ai(A){if(!A.tracks)throw new Error("This MIDI has no tracks!");if(A.duration===0){se("This MIDI file has a duration of exactly 0 seconds."),this.pausedTime=0,this.isFinished=!0;return}this.oneTickToSeconds=60/(120*A.timeDivision),this._midiData=A,this.isFinished=!1,this.synth.clearEmbeddedBank(),this._midiData.embeddedSoundBank!==void 0&&(y("%cEmbedded soundbank detected! Using it.",C.recognized),this.synth.setEmbeddedSoundBank(this._midiData.embeddedSoundBank,this._midiData.bankOffset),this.preload&&this._midiData.preloadSynth(this.synth)),this.currentMIDIPorts=this._midiData.tracks.map(e=>e.port),this.midiPortChannelOffset=0,this.midiPortChannelOffsets={};for(let[e,t]of this._midiData.tracks.entries())this.assignMIDIPort(e,t.port);this.firstNoteTime=this._midiData.midiTicksToSeconds(this._midiData.firstNoteOn),y(`%cTotal song time: ${ls(Math.ceil(this._midiData.duration)).time}`,C.recognized),this.callEvent("songChange",{songIndex:this._songIndex}),this._midiData.duration<=.2&&(se(`%cVery short song: (${ls(Math.round(this._midiData.duration)).time}). Disabling loop!`,C.warn),this.loopCount=0),this.currentTime=0}var I=Object.freeze({INVALID:-1,startAddrsOffset:0,endAddrOffset:1,startloopAddrsOffset:2,endloopAddrsOffset:3,startAddrsCoarseOffset:4,modLfoToPitch:5,vibLfoToPitch:6,modEnvToPitch:7,initialFilterFc:8,initialFilterQ:9,modLfoToFilterFc:10,modEnvToFilterFc:11,endAddrsCoarseOffset:12,modLfoToVolume:13,unused1:14,chorusEffectsSend:15,reverbEffectsSend:16,pan:17,unused2:18,unused3:19,unused4:20,delayModLFO:21,freqModLFO:22,delayVibLFO:23,freqVibLFO:24,delayModEnv:25,attackModEnv:26,holdModEnv:27,decayModEnv:28,sustainModEnv:29,releaseModEnv:30,keyNumToModEnvHold:31,keyNumToModEnvDecay:32,delayVolEnv:33,attackVolEnv:34,holdVolEnv:35,decayVolEnv:36,sustainVolEnv:37,releaseVolEnv:38,keyNumToVolEnvHold:39,keyNumToVolEnvDecay:40,instrument:41,reserved1:42,keyRange:43,velRange:44,startloopAddrsCoarseOffset:45,keyNum:46,velocity:47,initialAttenuation:48,reserved2:49,endloopAddrsCoarseOffset:50,coarseTune:51,fineTune:52,sampleID:53,sampleModes:54,reserved3:55,scaleTuning:56,exclusiveClass:57,overridingRootKey:58,unused5:59,endOper:60,amplitude:61,vibLfoRate:62,vibLfoAmplitudeDepth:63,vibLfoToFilterFc:64,modLfoRate:65,modLfoAmplitudeDepth:66}),WA=Object.keys(I).length,ii=Math.max(...Object.values(I)),tA=Object.freeze({[I.startAddrsOffset]:{min:0,max:32768,def:0,nrpn:1},[I.endAddrOffset]:{min:-32768,max:32768,def:0,nrpn:1},[I.startloopAddrsOffset]:{min:-32768,max:32768,def:0,nrpn:1},[I.endloopAddrsOffset]:{min:-32768,max:32768,def:0,nrpn:1},[I.startAddrsCoarseOffset]:{min:0,max:32768,def:0,nrpn:1},[I.modLfoToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[I.vibLfoToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[I.modEnvToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[I.initialFilterFc]:{min:1500,max:13500,def:13500,nrpn:2},[I.initialFilterQ]:{min:0,max:960,def:0,nrpn:1},[I.modLfoToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[I.modEnvToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[I.endAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[I.modLfoToVolume]:{min:-960,max:960,def:0,nrpn:1},[I.chorusEffectsSend]:{min:0,max:1e3,def:0,nrpn:1},[I.reverbEffectsSend]:{min:0,max:1e3,def:0,nrpn:1},[I.pan]:{min:-500,max:500,def:0,nrpn:1},[I.delayModLFO]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[I.freqModLFO]:{min:-16e3,max:4500,def:0,nrpn:4},[I.delayVibLFO]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[I.freqVibLFO]:{min:-16e3,max:4500,def:0,nrpn:4},[I.delayModEnv]:{min:-32768,max:5e3,def:-32768,nrpn:2},[I.attackModEnv]:{min:-32768,max:8e3,def:-32768,nrpn:2},[I.holdModEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[I.decayModEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[I.sustainModEnv]:{min:0,max:1e3,def:0,nrpn:1},[I.releaseModEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[I.keyNumToModEnvHold]:{min:-1200,max:1200,def:0,nrpn:1},[I.keyNumToModEnvDecay]:{min:-1200,max:1200,def:0,nrpn:1},[I.delayVolEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[I.attackVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[I.holdVolEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[I.decayVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[I.sustainVolEnv]:{min:0,max:1440,def:0,nrpn:1},[I.releaseVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[I.keyNumToVolEnvHold]:{min:-1200,max:1200,def:0,nrpn:1},[I.keyNumToVolEnvDecay]:{min:-1200,max:1200,def:0,nrpn:1},[I.startloopAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[I.keyNum]:{min:-1,max:127,def:-1,nrpn:1},[I.velocity]:{min:-1,max:127,def:-1,nrpn:1},[I.initialAttenuation]:{min:0,max:1440,def:0,nrpn:1},[I.endloopAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[I.coarseTune]:{min:-120,max:120,def:0,nrpn:1},[I.fineTune]:{min:-12700,max:12700,def:0,nrpn:1},[I.scaleTuning]:{min:0,max:1200,def:100,nrpn:1},[I.exclusiveClass]:{min:0,max:99999,def:0,nrpn:0},[I.overridingRootKey]:{min:-1,max:127,def:-1,nrpn:0},[I.sampleModes]:{min:0,max:3,def:0,nrpn:0},[I.amplitude]:{min:-1e3,max:1e3,def:0,nrpn:1},[I.vibLfoRate]:{min:-1e3,max:1e3,def:0,nrpn:1},[I.vibLfoToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[I.vibLfoAmplitudeDepth]:{min:0,max:1e3,def:0,nrpn:1},[I.modLfoRate]:{min:-1e3,max:1e3,def:0,nrpn:1},[I.modLfoAmplitudeDepth]:{min:0,max:1e3,def:0,nrpn:1}}),Cs=new Int16Array(WA);for(let A=0;A<Cs.length;A++)tA[A]&&(Cs[A]=tA[A].def);var Ne={monoSample:1,rightSample:2,leftSample:4,linkedSample:8,romMonoSample:32769,romRightSample:32770,romLeftSample:32772,romLinkedSample:32776},Ae={noController:0,noteOnVelocity:2,noteOnKeyNum:3,polyPressure:10,channelPressure:13,pitchWheel:14,pitchWheelRange:16,link:127},Qe={linear:0,concave:1,convex:2,switch:3};var Z={none:0,modLfo:1,velocity:2,keyNum:3,volEnv:4,modEnv:5,pitchWheel:6,polyPressure:7,channelPressure:8,vibratoLfo:9,modulationWheel:129,volume:135,pan:138,expression:139,chorus:221,reverb:219,pitchWheelRange:256,fineTune:257,coarseTune:258},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},An={forward:0,loopAndRelease:1};var Yt=new Int16Array(147).fill(0),we=(A,e)=>Yt[A]=e<<7;we(d.mainVolume,100);we(d.balance,64);we(d.expressionController,127);we(d.pan,64);we(d.portamentoOnOff,127);we(d.filterResonance,64);we(d.releaseTime,64);we(d.attackTime,64);we(d.brightness,64);we(d.decayTime,64);we(d.vibratoRate,64);we(d.vibratoDepth,64);we(d.vibratoDelay,64);we(d.generalPurposeController6,64);we(d.generalPurposeController8,64);we(d.registeredParameterLSB,127);we(d.registeredParameterMSB,127);we(d.nonRegisteredParameterLSB,127);we(d.nonRegisteredParameterMSB,127);we(128+Ae.pitchWheel,64);we(128+Ae.pitchWheelRange,2);var Pn=Object.keys(oe).length,xn=new Float32Array(Pn);xn[oe.modulationMultiplier]=1;var xs=new Int8Array(128).fill(127);xs[35]=0;xs[36]=0;function ri(A){this.lockedControllers[d.portamentoControl]||(this.channelSystem==="xg"?this.controllerChange(d.portamentoControl,60,A):this.controllerChange(d.portamentoControl,0,A))}function oi(A=!0){for(let[t,s]of Yt.entries())this.lockedControllers[t]||(this.midiControllers[t]!==s&&t<127?t!==d.portamentoControl&&t!==d.dataEntryMSB&&t!==d.registeredParameterMSB&&t!==d.registeredParameterLSB&&t!==d.nonRegisteredParameterMSB&&t!==d.nonRegisteredParameterLSB&&this.controllerChange(t,s>>7,A):this.midiControllers[t]=s);this.octaveTuning.fill(0),ri.call(this,A),this.rxChannel=this.channel,this.assignMode=2,this.randomPan=!1,this.insertionEnabled&&!this.synthCore.masterParameters.insertionEffectLock&&(this.synthCore.callEvent("effectChange",{effect:"insertion",parameter:-2,value:this.channel}),this.insertionEnabled=!1),this.cc1=16,this.cc2=17,this.drumMap=this.channel%16===9?1:0,this.resetDrumParams(),this.resetVibratoParams(),!this.lockedControllers[d.monoModeOn]&&!this.lockedControllers[d.polyModeOn]&&(this.polyMode=!0),this.perNotePitch=!1,this.pitchWheel(8192),this.sysExModulators.resetModulators();let e=this.customControllers[oe.channelTransposeFine];this.customControllers.set(xn),this.setCustomController(oe.channelTransposeFine,e),this.resetParameters()}function hi(){this.setBankMSB(ke.getDefaultBank(this.channelSystem)),this.setBankLSB(0),this.setGSDrums(!1),this.setDrums(this.channel%16===9),this.programChange(0)}var Hn=new Set([d.bankSelect,d.bankSelectLSB,d.mainVolume,d.mainVolumeLSB,d.pan,d.panLSB,d.reverbDepth,d.tremoloDepth,d.chorusDepth,d.variationDepth,d.phaserDepth,d.soundVariation,d.filterResonance,d.releaseTime,d.attackTime,d.brightness,d.decayTime,d.vibratoRate,d.vibratoDepth,d.vibratoDelay,d.soundController10,d.polyModeOn,d.monoModeOn,d.omniModeOn,d.omniModeOff,d.dataEntryMSB,d.dataEntryLSB,d.nonRegisteredParameterLSB,d.nonRegisteredParameterMSB,d.registeredParameterLSB,d.registeredParameterMSB]);function gi(){this.perNotePitch=!1,this.pitchWheel(8192);for(let A=0;A<128;A++){let e=Yt[A];!Hn.has(A)&&e!==this.midiControllers[A]&&A!==d.portamentoControl&&this.controllerChange(A,e>>7)}this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}function Ii(){this.dataEntryState=Ve.Idle,this.midiControllers[d.nonRegisteredParameterLSB]=16256,this.midiControllers[d.nonRegisteredParameterMSB]=16256,this.midiControllers[d.registeredParameterLSB]=16256,this.midiControllers[d.registeredParameterMSB]=16256,this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}var et=Yt.slice(0,128),ci=new Set([d.dataDecrement,d.dataIncrement,d.dataEntryMSB,d.dataEntryLSB,d.registeredParameterLSB,d.registeredParameterMSB,d.nonRegisteredParameterLSB,d.nonRegisteredParameterMSB,d.bankSelect,d.bankSelectLSB,d.resetAllControllers,d.monoModeOn,d.polyModeOn]),tn=A=>ci.has(A);function li(A,e=void 0){if(!this._midiData)return!1;this.oneTickToSeconds=60/(120*this._midiData.timeDivision),this.sendMIDIReset(),this.playedTime=0,this.eventIndexes=new Array(this._midiData.tracks.length).fill(0);let t=this.synth.midiChannels.length,s=new Array(t).fill(8192),n=[];for(let i=0;i<t;i++)n.push([...et]);let a,r=0;function o(i){if(s[i]=8192,n?.[i]!==void 0)for(let[g,c]of et.entries())Hn.has(g)||(n[i][g]=c)}for(;;){let i=this.findFirstEventIndex(),g=this._midiData.tracks[i],c=g.events[this.eventIndexes[i]];if(e===void 0){if(this.playedTime>=A)break}else if(c.ticks>=e)break;let l=Gs(c.statusByte),B=l.channel+(this.midiPortChannelOffsets[g.port]||0);switch(l.status){case M.noteOn:n[B]??=[...et],n[B][d.portamentoControl]=c.data[0];break;case M.noteOff:break;case M.pitchWheel:s[B]=c.data[1]<<7|c.data[0];break;case M.controllerChange:{if(this._midiData.isMultiPort&&g.channels.size===0)break;let E=c.data[0];if(tn(E)){let m=c.data[1];E===d.resetAllControllers&&o(B),this.sendMIDICC(B,E,m)}else n[B]??=[...et],n[B][E]=c.data[1];break}case M.setTempo:{let E=6e7/zA(c.data,3);this.oneTickToSeconds=60/(E*this._midiData.timeDivision),a=c,r=i;break}default:this.processEvent(c,i);break}this.eventIndexes[i]++,i=this.findFirstEventIndex();let h=this._midiData.tracks[i].events[this.eventIndexes[i]];if(h===void 0)return this.stop(),!1;this.playedTime+=this.oneTickToSeconds*(h.ticks-c.ticks)}for(let i=0;i<t;i++)if(s[i]!==void 0&&this.sendMIDIPitchWheel(i,s[i]),n[i]!==void 0)for(let[g,c]of n[i].entries())c!==et[g]&&!tn(g)&&this.sendMIDICC(i,g,c);return a&&this.callEvent("metaEvent",{event:a,trackIndex:r}),this.paused&&(this.pausedTime=this.playedTime),!0}var On=class{songs=[];shuffledSongIndexes=[];synth;externalMIDIPlayback=!1;retriggerPausedNotes=!0;loopCount=0;skipToFirstNoteOn=!0;isFinished=!1;preload=!0;onEventCall;processTick=si.bind(this);firstNoteTime=0;oneTickToSeconds=0;eventIndexes=[];playedTime=0;pausedTime=-1;absoluteStartTime=0;playingNotes=[];currentMIDIPorts=[];midiPortChannelOffset=0;midiPortChannelOffsets={};assignMIDIPort=ni.bind(this);loadNewSequence=ai.bind(this);processEvent=ti.bind(this);setTimeTo=li.bind(this);constructor(A){this.synth=A,this.absoluteStartTime=this.synth.currentSynthTime}_midiData;get midiData(){return this._midiData}get duration(){return this._midiData?.duration??0}_songIndex=0;get songIndex(){return this._songIndex}set songIndex(A){this._songIndex=A,this._songIndex=Math.max(0,A%this.songs.length),this.loadCurrentSong()}_shuffleMode=!1;get shuffleMode(){return this._shuffleMode}set shuffleMode(A){this._shuffleMode=A}_playbackRate=1;get playbackRate(){return this._playbackRate}set playbackRate(A){let e=this.currentTime;this._playbackRate=A,this.recalculateStartTime(e)}get currentTime(){return this.pausedTime!==void 0?this.pausedTime:(this.synth.currentSynthTime-this.absoluteStartTime)*this._playbackRate}set currentTime(A){if(this._midiData)if(this.paused&&(this.pausedTime=A),A>this._midiData.duration||A<0)this.skipToFirstNoteOn?this.setTimeTicks(this._midiData.firstNoteOn-1):this.setTimeTicks(0);else if(this.skipToFirstNoteOn&&A<this.firstNoteTime){this.setTimeTicks(this._midiData.firstNoteOn-1);return}else this.playingNotes=[],this.callEvent("timeChange",{newTime:A}),this.setTimeTo(A),this.recalculateStartTime(A)}get paused(){return this.pausedTime!==void 0}play(){if(!this._midiData){se("No songs loaded in the sequencer. Ignoring the play call.");return}if(this.currentTime>=this._midiData.duration&&(this.currentTime=0),this.paused&&this.recalculateStartTime(this.pausedTime??0),this.retriggerPausedNotes)for(let A of this.playingNotes)this.sendMIDINoteOn(A.channel,A.midiNote,A.velocity);this.pausedTime=void 0}pause(){this.pauseInternal(!1)}loadNewSongList(A){if(this.songs=A,this.songs.length!==0){if(this._songIndex=0,this.shuffleSongIndexes(),this.callEvent("songListChange",{newSongList:[...this.songs]}),this.preload){je("%cPreloading all songs...",C.info);for(let e of this.songs)e.embeddedSoundBank===void 0&&e.preloadSynth(this.synth);ee()}this.loadCurrentSong()}}callEvent(A,e){this?.onEventCall?.({type:A,data:e})}pauseInternal(A){this.paused||(this.stop(),this.callEvent("pause",{isFinished:A}),A&&this.callEvent("songEnded",{}))}songIsFinished(){if(this.isFinished=!0,this.songs.length===1){this.pauseInternal(!0);return}this._songIndex++,this._songIndex%=this.songs.length,this.loadCurrentSong()}stop(){this.pausedTime=this.currentTime,this.sendMIDIAllOff()}findFirstEventIndex(){let A=0,e=1/0,t=this._midiData.tracks.length;for(let s=0;s<t;s++){let n=this._midiData.tracks[s];if(this.eventIndexes[s]>=n.events.length)continue;let a=n.events[this.eventIndexes[s]];a.ticks<e&&(A=s,e=a.ticks)}return A}addNewMIDIPort(){for(let A=0;A<16;A++)this.synth.createMIDIChannel()}sendMIDIMessage(A){if(!this.externalMIDIPlayback){se(`Attempting to send ${Pt(A)} to the synthesizer via sendMIDIMessage. This shouldn't happen!`);return}this.callEvent("midiMessage",{message:A,time:this.synth.currentSynthTime})}sendMIDIAllOff(){for(let A=0;A<16;A++)this.sendMIDICC(A,d.sustainPedal,0);if(!this.externalMIDIPlayback){this.synth.stopAllChannels();return}for(let A of this.playingNotes)this.sendMIDINoteOff(A.channel,A.midiNote);for(let A=0;A<16;A++)this.sendMIDICC(A,d.allNotesOff,0),this.sendMIDICC(A,d.allSoundOff,0)}sendMIDIReset(){if(this.sendMIDIAllOff(),!this.externalMIDIPlayback){this.synth.resetAllControllers();return}this.sendMIDIMessage([M.reset])}loadCurrentSong(){let A=this._songIndex;this._shuffleMode&&(A=this.shuffledSongIndexes[this._songIndex]),this.loadNewSequence(this.songs[A])}shuffleSongIndexes(){let A=this.songs.map((e,t)=>t);for(this.shuffledSongIndexes.length=0;A.length>0;){let e=A[Math.floor(Math.random()*A.length)];this.shuffledSongIndexes.push(e),A.splice(A.indexOf(e),1)}}setTimeTicks(A){if(!this._midiData)return;this.playingNotes=[];let e=this._midiData.midiTicksToSeconds(A);this.callEvent("timeChange",{newTime:e});let t=this.setTimeTo(0,A);this.recalculateStartTime(this.playedTime)}recalculateStartTime(A){this.absoluteStartTime=this.synth.currentSynthTime-A/this._playbackRate}jumpToTick(A){if(!this._midiData)return;this.sendMIDIAllOff();let e=this._midiData.midiTicksToSeconds(A);this.callEvent("timeChange",{newTime:e}),this.recalculateStartTime(e),this.playedTime=e,this.eventIndexes.length=0;for(let s of this._midiData.tracks){let n=s.events.findIndex(a=>a.ticks>=A);this.eventIndexes.push(n===-1?s.events.length:n)}let t=this._midiData.tempoChanges.find(s=>s.ticks<=A);this.oneTickToSeconds=60/(t.tempo*this._midiData.timeDivision)}sendMIDINoteOn(A,e,t){if(!this.externalMIDIPlayback){this.synth.noteOn(A,e,t);return}A%=16,this.sendMIDIMessage([M.noteOn|A,e,t])}sendMIDINoteOff(A,e){if(!this.externalMIDIPlayback){this.synth.noteOff(A,e);return}A%=16,this.sendMIDIMessage([M.noteOff|A,e,64])}sendMIDICC(A,e,t){if(!this.externalMIDIPlayback){this.synth.controllerChange(A,e,t);return}A%=16,this.sendMIDIMessage([M.controllerChange|A,e,t])}sendMIDIPitchWheel(A,e){if(!this.externalMIDIPlayback){this.synth.pitchWheel(A,e);return}A%=16,this.sendMIDIMessage([M.pitchWheel|A,e&127,e>>7])}},it=it!==void 0?it:{},sn=!1,Yn;it.isInitialized=new Promise(A=>Yn=A);var Ci=function(A){var e,t,s,n,a,r,o,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",g="",c=0;A=A.replace(/[^A-Za-z0-9\+\/\=]/g,"");do n=i.indexOf(A.charAt(c++)),a=i.indexOf(A.charAt(c++)),r=i.indexOf(A.charAt(c++)),o=i.indexOf(A.charAt(c++)),e=n<<2|a>>4,t=(15&a)<<4|r>>2,s=(3&r)<<6|o,g+=String.fromCharCode(e),r!==64&&(g+=String.fromCharCode(t)),o!==64&&(g+=String.fromCharCode(s));while(c<A.length);return g};(function(){var A,e,t,s,n,a,r,o,i,g,c,l,B,h=h!==void 0?h:{};h.wasmBinary=Uint8Array.from(Ci("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(b){return b.charCodeAt(0)});var h=h!==void 0?h:{},E={};for(A in h)h.hasOwnProperty(A)&&(E[A]=h[A]);h.arguments=[],h.thisProgram="./this.program",h.quit=function(b,w){throw w},h.preRun=[],h.postRun=[];var m=!1,D=!1,f=!1,O=!1;m=typeof window=="object",D=typeof importScripts=="function",f=typeof process=="object"&&typeof aaa=="function"&&!m&&!D,O=!m&&!f&&!D;var R="";function Q(b){return h.locateFile?h.locateFile(b,R):R+b}f?(R="/",h.read=function(w,F){var W;return e||(e=void 0),t||(t=void 0),w=t.normalize(w),W=e.readFileSync(w),F?W:W.toString()},h.readBinary=function(w){var F=h.read(w,!0);return F.buffer||(F=new Uint8Array(F)),q(F.buffer),F},process.argv.length>1&&(h.thisProgram=process.argv[1].replace(/\\/g,"/")),h.arguments=process.argv.slice(2),process.on("uncaughtException",function(b){if(!(b instanceof We))throw b}),process.on("unhandledRejection",function(b,w){process.exit(1)}),h.quit=function(b){process.exit(b)},h.inspect=function(){return"[Emscripten Module object]"}):O?(typeof read<"u"&&(h.read=function(w){return read(w)}),h.readBinary=function(w){var F;return typeof readbuffer=="function"?new Uint8Array(readbuffer(w)):(q(typeof(F=read(w,"binary"))=="object"),F)},typeof scriptArgs<"u"?h.arguments=scriptArgs:typeof arguments<"u"&&(h.arguments=arguments),typeof quit=="function"&&(h.quit=function(b){quit(b)})):(m||D)&&(m?document.currentScript&&(R=document.currentScript.src):R=self.location.href,R=R.indexOf("blob:")!==0?R.split("/").slice(0,-1).join("/")+"/":"",h.read=function(w){var F=new XMLHttpRequest;return F.open("GET",w,!1),F.send(null),F.responseText},D&&(h.readBinary=function(w){var F=new XMLHttpRequest;return F.open("GET",w,!1),F.responseType="arraybuffer",F.send(null),new Uint8Array(F.response)}),h.readAsync=function(w,F,W){var ie=new XMLHttpRequest;ie.open("GET",w,!0),ie.responseType="arraybuffer",ie.onload=function(){if(ie.status==200||ie.status==0&&ie.response){F(ie.response);return}W()},ie.onerror=W,ie.send(null)},h.setWindowTitle=function(b){document.title=b});var T=h.print||(typeof console<"u"?console.log.bind(console):typeof print<"u"?print:null),U=h.printErr||(typeof printErr<"u"?printErr:typeof console<"u"&&console.warn.bind(console)||T);for(A in E)E.hasOwnProperty(A)&&(h[A]=E[A]);function x(b){var w=i;return i=i+b+15&-16,w}function V(b,w){return w||(w=16),b=Math.ceil(b/w)*w}function J(b){J.shown||(J.shown={}),J.shown[b]||(J.shown[b]=1,U(b))}E=void 0;var L={"f64-rem":function(b,w){return b%w},debugger:function(){}},H=0;function q(b,w){b||nA("Assertion failed: "+w)}function u(b){var w=h["_"+b];return q(w,"Cannot call unknown function "+b+", make sure it is exported"),w}var v={stackSave:function(){UA()},stackRestore:function(){SA()},arrayToC:function(b){var w,F,W=EA(b.length);return w=b,F=W,n.set(w,F),W},stringToC:function(b){var w=0;if(b!=null&&b!==0){var F=(b.length<<2)+1;w=EA(F),Ce(b,w,F)}return w}},S={string:v.stringToC,array:v.arrayToC};function k(b,w,F,W,ie){var ce=u(b),me=[],$=0;if(W)for(var He=0;He<W.length;He++){var Re=S[F[He]];Re?($===0&&($=UA()),me[He]=Re(W[He])):me[He]=W[He]}var re,Ee=ce.apply(null,me);return Ee=(re=Ee,w==="string"?p(re):w==="boolean"?!!re:re),$!==0&&SA($),Ee}function p(b,w){if(w===0||!b)return"";for(var F,W,ie,ce=0,me=0;ce|=W=a[b+me>>0],(W!=0||w)&&(me++,!w||me!=w););w||(w=me);var $="";if(ce<128){for(;w>0;)ie=String.fromCharCode.apply(String,a.subarray(b,b+Math.min(w,1024))),$=$?$+ie:ie,b+=1024,w-=1024;return $}return F=b,(function(Re,re){for(var Ee=re;Re[Ee];)++Ee;if(Ee-re>16&&Re.subarray&&P)return P.decode(Re.subarray(re,Ee));for(var le,Ye,qe,aA,FA,dA="";;){if(!(le=Re[re++]))return dA;if(!(128&le)){dA+=String.fromCharCode(le);continue}if(Ye=63&Re[re++],(224&le)==192){dA+=String.fromCharCode((31&le)<<6|Ye);continue}if(qe=63&Re[re++],(240&le)==224?le=(15&le)<<12|Ye<<6|qe:(aA=63&Re[re++],(248&le)==240?le=(7&le)<<18|Ye<<12|qe<<6|aA:(FA=63&Re[re++],le=(252&le)==248?(3&le)<<24|Ye<<18|qe<<12|aA<<6|FA:(1&le)<<30|Ye<<24|qe<<18|aA<<12|FA<<6|63&Re[re++])),le<65536)dA+=String.fromCharCode(le);else{var iA=le-65536;dA+=String.fromCharCode(55296|iA>>10,56320|1023&iA)}}})(a,F)}var P=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function K(b,w,F,W){if(!(W>0))return 0;for(var ie=F,ce=F+W-1,me=0;me<b.length;++me){var $=b.charCodeAt(me);if($>=55296&&$<=57343&&($=65536+((1023&$)<<10)|1023&b.charCodeAt(++me)),$<=127){if(F>=ce)break;w[F++]=$}else if($<=2047){if(F+1>=ce)break;w[F++]=192|$>>6,w[F++]=128|63&$}else if($<=65535){if(F+2>=ce)break;w[F++]=224|$>>12,w[F++]=128|$>>6&63,w[F++]=128|63&$}else if($<=2097151){if(F+3>=ce)break;w[F++]=240|$>>18,w[F++]=128|$>>12&63,w[F++]=128|$>>6&63,w[F++]=128|63&$}else if($<=67108863){if(F+4>=ce)break;w[F++]=248|$>>24,w[F++]=128|$>>18&63,w[F++]=128|$>>12&63,w[F++]=128|$>>6&63,w[F++]=128|63&$}else{if(F+5>=ce)break;w[F++]=252|$>>30,w[F++]=128|$>>24&63,w[F++]=128|$>>18&63,w[F++]=128|$>>12&63,w[F++]=128|$>>6&63,w[F++]=128|63&$}}return w[F]=0,F-ie}function Ce(b,w,F){return K(b,a,w,F)}typeof TextDecoder<"u"&&new TextDecoder("utf-16le");function be(b,w){return b%w>0&&(b+=w-b%w),b}function Be(b){h.buffer=s=b}function ae(){h.HEAP8=n=new Int8Array(s),h.HEAP16=new Int16Array(s),h.HEAP32=r=new Int32Array(s),h.HEAPU8=a=new Uint8Array(s),h.HEAPU16=new Uint16Array(s),h.HEAPU32=new Uint32Array(s),h.HEAPF32=new Float32Array(s),h.HEAPF64=new Float64Array(s)}function he(){var b=h.usingWasm?65536:16777216,w=2147483648-b;if(r[B>>2]>w)return!1;var F=Y;for(Y=Math.max(Y,16777216);Y<r[B>>2];)Y=Y<=536870912?be(2*Y,b):Math.min(be((3*Y+2147483648)/4,b),w);var W=h.reallocBuffer(Y);return W&&W.byteLength==Y?(Be(W),ae(),!0):(Y=F,!1)}o=i=g=c=l=B=0,h.reallocBuffer||(h.reallocBuffer=function(b){try{if(ArrayBuffer.transfer)w=ArrayBuffer.transfer(s,b);else{var w,F=n;w=new ArrayBuffer(b),new Int8Array(w).set(F)}}catch{return!1}return!!eA(w)&&w});try{Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get)(new ArrayBuffer(4))}catch{}var j=h.TOTAL_STACK||5242880,Y=h.TOTAL_MEMORY||16777216;function ne(){return Y}function fe(b){for(;b.length>0;){var w=b.shift();if(typeof w=="function"){w();continue}var F=w.func;typeof F=="number"?w.arg===void 0?h.dynCall_v(F):h.dynCall_vi(F,w.arg):F(w.arg===void 0?null:w.arg)}}Y<j&&U("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+Y+"! (TOTAL_STACK="+j+")"),h.buffer?s=h.buffer:(typeof WebAssembly=="object"&&typeof WebAssembly.Memory=="function"?(h.wasmMemory=new WebAssembly.Memory({initial:Y/65536}),s=h.wasmMemory.buffer):s=new ArrayBuffer(Y),h.buffer=s),ae();var Me=[],Ie=[],ve=[],sA=[],pA=!1;function yA(b){Me.unshift(b)}function gt(b){sA.unshift(b)}var It=Math.floor,Ze=0,bA=null,Le=null;h.preloadedImages={},h.preloadedAudios={};var $A="data:application/octet-stream;base64,";function TA(b){return String.prototype.startsWith?b.startsWith($A):b.indexOf($A)===0}(function(){var w="main.wast",F="main.wasm",W="main.temp.asm";TA(w)||(w=Q(w)),TA(F)||(F=Q(F)),TA(W)||(W=Q(W));var ie={global:null,env:null,asm2wasm:L,parent:h},ce=null;function me(){try{if(h.wasmBinary)return new Uint8Array(h.wasmBinary);if(h.readBinary)return h.readBinary(F);throw"both async and sync fetching of the wasm failed"}catch(re){nA(re)}}h.asmPreload=h.asm;var $=h.reallocBuffer,He=function(re){re=be(re,h.usingWasm?65536:16777216);var Ee=h.buffer.byteLength;if(h.usingWasm)try{return h.wasmMemory.grow((re-Ee)/65536)!==-1?h.buffer=h.wasmMemory.buffer:null}catch{return null}};h.reallocBuffer=function(re){return Re==="asmjs"?$(re):He(re)};var Re="";h.asm=function(re,Ee,le){if(!(Ee=Ee).table){var Ye,qe=h.wasmTableSize;qe===void 0&&(qe=1024);var aA=h.wasmMaxTableSize;typeof WebAssembly=="object"&&typeof WebAssembly.Table=="function"?aA!==void 0?Ee.table=new WebAssembly.Table({initial:qe,maximum:aA,element:"anyfunc"}):Ee.table=new WebAssembly.Table({initial:qe,element:"anyfunc"}):Ee.table=Array(qe),h.wasmTable=Ee.table}return Ee.memoryBase||(Ee.memoryBase=h.STATIC_BASE),Ee.tableBase||(Ee.tableBase=0),Ye=(function(dA,iA,Zs){if(typeof WebAssembly!="object")return U("no native wasm support detected"),!1;if(!(h.wasmMemory instanceof WebAssembly.Memory))return U("no native wasm Memory in use"),!1;function PA(ze,cA){if((ce=ze.exports).memory){var lt=ce.memory,Ws=h.buffer,zs;lt.byteLength<Ws.byteLength&&U("the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here"),zs=new Int8Array(Ws),new Int8Array(lt).set(zs),Be(lt),ae()}h.asm=ce,h.usingWasm=!0,(function(Ao){if(Ze--,h.monitorRunDependencies&&h.monitorRunDependencies(Ze),Ze==0&&(bA!==null&&(clearInterval(bA),bA=null),Le)){var ua=Le;Le=null,ua()}})("wasm-instantiate")}if(iA.memory=h.wasmMemory,ie.global={NaN:NaN,Infinity:1/0},ie["global.Math"]=Math,ie.env=iA,Ze++,h.monitorRunDependencies&&h.monitorRunDependencies(Ze),h.instantiateWasm)try{return h.instantiateWasm(ie,PA)}catch(ze){return U("Module.instantiateWasm callback failed with error: "+ze),!1}function xA(ze){PA(ze.instance,ze.module)}function ct(ze){(!h.wasmBinary&&(m||D)&&typeof fetch=="function"?fetch(F,{credentials:"same-origin"}).then(function(cA){if(!cA.ok)throw"failed to load wasm binary file at '"+F+"'";return cA.arrayBuffer()}).catch(function(){return me()}):new Promise(function(cA,lt){cA(me())})).then(function(cA){return WebAssembly.instantiate(cA,ie)}).then(ze).catch(function(cA){U("failed to asynchronously prepare wasm: "+cA),nA(cA)})}return h.wasmBinary||typeof WebAssembly.instantiateStreaming!="function"||TA(F)||typeof fetch!="function"?ct(xA):WebAssembly.instantiateStreaming(fetch(F,{credentials:"same-origin"}),ie).then(xA).catch(function(ze){U("wasm streaming compile failed: "+ze),U("falling back to ArrayBuffer instantiation"),ct(xA)}),{}})(re,Ee,le),q(Ye,"no binaryen method succeeded."),Ye},h.asm})(),i=(o=1024)+4816,Ie.push(),h.STATIC_BASE=o,h.STATIC_BUMP=4816;var _t=i;i+=16,B=x(4),c=(g=V(i))+j,l=V(c),r[B>>2]=l,h.wasmTableSize=4,h.wasmMaxTableSize=4,h.asmGlobalArg={},h.asmLibraryArg={abort:nA,assert:q,enlargeMemory:he,getTotalMemory:ne,abortOnCannotGrowMemory:function(){nA("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+Y+", (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(w,F,W){var ie=UA();try{return h.dynCall_iii(w,F,W)}catch(ce){if(SA(ie),typeof ce!="number"&&ce!=="longjmp")throw ce;h.setThrew(1,0)}},___assert_fail:function(w,F,W,ie){nA("Assertion failed: "+p(w)+", at: "+[F?p(F):"unknown filename",W,ie?p(ie):"unknown function"])},___setErrNo:function(w){return h.___errno_location&&(r[h.___errno_location()>>2]=w),w},_abort:function(){h.abort()},_emscripten_memcpy_big:function(w,F,W){return a.set(a.subarray(F,F+W),w),w},_llvm_floor_f64:It,DYNAMICTOP_PTR:B,tempDoublePtr:_t,ABORT:H,STACKTOP:g,STACK_MAX:c};var jA=h.asm(h.asmGlobalArg,h.asmLibraryArg,s);h.asm=jA,h.___errno_location=function(){return h.asm.___errno_location.apply(null,arguments)};var eA=h._emscripten_replace_memory=function(){return h.asm._emscripten_replace_memory.apply(null,arguments)};h._free=function(){return h.asm._free.apply(null,arguments)},h._malloc=function(){return h.asm._malloc.apply(null,arguments)},h._memcpy=function(){return h.asm._memcpy.apply(null,arguments)},h._memset=function(){return h.asm._memset.apply(null,arguments)},h._sbrk=function(){return h.asm._sbrk.apply(null,arguments)},h._stb_vorbis_js_channels=function(){return h.asm._stb_vorbis_js_channels.apply(null,arguments)},h._stb_vorbis_js_close=function(){return h.asm._stb_vorbis_js_close.apply(null,arguments)},h._stb_vorbis_js_decode=function(){return h.asm._stb_vorbis_js_decode.apply(null,arguments)},h._stb_vorbis_js_open=function(){return h.asm._stb_vorbis_js_open.apply(null,arguments)},h._stb_vorbis_js_sample_rate=function(){return h.asm._stb_vorbis_js_sample_rate.apply(null,arguments)},h.establishStackSpace=function(){return h.asm.establishStackSpace.apply(null,arguments)},h.getTempRet0=function(){return h.asm.getTempRet0.apply(null,arguments)},h.runPostSets=function(){return h.asm.runPostSets.apply(null,arguments)},h.setTempRet0=function(){return h.asm.setTempRet0.apply(null,arguments)},h.setThrew=function(){return h.asm.setThrew.apply(null,arguments)};var EA=h.stackAlloc=function(){return h.asm.stackAlloc.apply(null,arguments)},SA=h.stackRestore=function(){return h.asm.stackRestore.apply(null,arguments)},UA=h.stackSave=function(){return h.asm.stackSave.apply(null,arguments)};function We(b){this.name="ExitStatus",this.message="Program terminated with exit("+b+")",this.status=b}function RA(b){b=b||h.arguments,!(Ze>0)&&((function(){if(h.preRun)for(typeof h.preRun=="function"&&(h.preRun=[h.preRun]);h.preRun.length;)yA(h.preRun.shift());fe(Me)})(),!(Ze>0)&&(h.calledRun||(h.setStatus?(h.setStatus("Running..."),setTimeout(function(){setTimeout(function(){h.setStatus("")},1),w()},1)):w())));function w(){!h.calledRun&&(h.calledRun=!0,H||(pA||(pA=!0,fe(Ie)),fe(ve),h.onRuntimeInitialized&&h.onRuntimeInitialized(),(function(){if(h.postRun)for(typeof h.postRun=="function"&&(h.postRun=[h.postRun]);h.postRun.length;)gt(h.postRun.shift());fe(sA)})()))}}function nA(b){throw h.onAbort&&h.onAbort(b),b!==void 0?(T(b),U(b),b=JSON.stringify(b)):b="",H=!0,"abort("+b+"). Build with -s ASSERTIONS=1 for more info."}if(h.dynCall_iii=function(){return h.asm.dynCall_iii.apply(null,arguments)},h.asm=jA,h.ccall=k,h.cwrap=function(w,F,W,ie){var ce=(W=W||[]).every(function(me){return me==="number"});return F!=="string"&&ce&&!ie?u(w):function(){return k(w,F,W,arguments,ie)}},We.prototype=Error(),We.prototype.constructor=We,Le=function b(){h.calledRun||RA(),h.calledRun||(Le=b)},h.run=RA,h.abort=nA,h.preInit)for(typeof h.preInit=="function"&&(h.preInit=[h.preInit]);h.preInit.length>0;)h.preInit.pop()();h.noExitRuntime=!0,RA(),h.onRuntimeInitialized=()=>{sn=!0,Yn()},it.decode=function(b){return(function(F){if(!sn)throw Error("SF3 decoder has not been initialized yet. Did you await synth.isReady?");var W={};function ie(PA){return new Int32Array(h.HEAPU8.buffer,PA,1)[0]}function ce(PA,xA){var ct=new ArrayBuffer(xA*Float32Array.BYTES_PER_ELEMENT),ze=new Float32Array(ct);return ze.set(new Float32Array(h.HEAPU8.buffer,PA,xA)),ze}W.open=h.cwrap("stb_vorbis_js_open","number",[]),W.close=h.cwrap("stb_vorbis_js_close","void",["number"]),W.channels=h.cwrap("stb_vorbis_js_channels","number",["number"]),W.sampleRate=h.cwrap("stb_vorbis_js_sample_rate","number",["number"]),W.decode=h.cwrap("stb_vorbis_js_decode","number",["number","number","number","number","number"]);var me,$,He,Re,re=W.open(),Ee=(me=F,$=F.byteLength,He=h._malloc($),(Re=new Uint8Array(h.HEAPU8.buffer,He,$)).set(new Uint8Array(me,0,$)),Re),le=h._malloc(4),Ye=h._malloc(4),qe=W.decode(re,Ee.byteOffset,Ee.byteLength,le,Ye);if(h._free(Ee.byteOffset),qe<0)throw W.close(re),h._free(le),Error("stbvorbis decode failed: "+qe);for(var aA=W.channels(re),FA=Array(aA),dA=new Int32Array(h.HEAPU32.buffer,ie(le),aA),iA=0;iA<aA;iA++)FA[iA]=ce(dA[iA],qe),h._free(dA[iA]);var Zs=W.sampleRate(re);return W.close(re),h._free(ie(le)),h._free(le),{data:FA,sampleRate:Zs,eof:!0,error:null}})(b)}})();var qt=it,Bi={enableEventSystem:!0,maxBufferSize:128,initialTime:0,enableEffects:!0},Bs=class{pitch=0;gain=1;exclusiveClass=0;pan=64;reverbGain=0;chorusGain=1;delayGain=1;rxNoteOn=!0;rxNoteOff=!1;copyInto(A){return this.pitch=A.pitch,this.chorusGain=A.chorusGain,this.reverbGain=A.reverbGain,this.exclusiveClass=A.exclusiveClass,this.gain=A.gain,this.pan=A.pan,this.rxNoteOff=A.rxNoteOff,this.rxNoteOn=A.rxNoteOn,this}},nn=class Es{patch;lockPreset;lockedSystem;midiControllers;lockedControllers;customControllers;channelVibrato;keyShift;octaveTuning;drumParams;isMuted;drumChannel;channelNumber;constructor(e,t,s,n,a,r,o,i,g,c,l,B,h){this.patch=e,this.lockPreset=t,this.lockedSystem=s,this.midiControllers=n,this.lockedControllers=a,this.customControllers=r,this.channelVibrato=o,this.keyShift=i,this.octaveTuning=g,this.drumParams=c,this.isMuted=l,this.drumChannel=B,this.channelNumber=h}static copyFrom(e){return new Es({...e.patch},e.lockPreset,e.lockedSystem,e.midiControllers.slice(),[...e.lockedControllers],e.customControllers.slice(),{...e.channelVibrato},e.keyShift,e.octaveTuning.slice(),e.drumParams.map(t=>new Bs().copyInto(t)),e.isMuted,e.drumChannel,e.channelNumber)}static create(e,t){let s=e.midiChannels[t];return new Es({...s.patch,name:s?.preset?.name??"undefined"},s.lockPreset,s.lockedSystem,s.midiControllers.slice(),[...s.lockedControllers],s.customControllers.slice(),{...s.channelVibrato},s.keyShift,s.octaveTuning.slice(),s.drumParams.map(n=>new Bs().copyInto(n)),s.isMuted,s.drumChannel,t)}apply(e){let t=e.midiChannels[this.channelNumber];t.muteChannel(this.isMuted),t.setDrums(this.drumChannel),t.midiControllers.set(this.midiControllers),t.lockedControllers=this.lockedControllers,t.customControllers.set(this.customControllers),t.updateChannelTuning(),t.channelVibrato.rate=this.channelVibrato.rate,t.channelVibrato.delay=this.channelVibrato.delay,t.channelVibrato.depth=this.channelVibrato.depth,t.keyShift=this.keyShift,t.octaveTuning.set(this.octaveTuning);for(let s=0;s<128;s++)this.drumParams[s].copyInto(t.drumParams[s]);t.setPresetLock(!1),t.setPatch(this.patch),t.setPresetLock(this.lockPreset),t.lockedSystem=this.lockedSystem}};var Ei=class{keyMappings=[];addMapping(A,e,t){this.keyMappings[A]??=[],this.keyMappings[A][e]=t}deleteMapping(A,e){this.keyMappings[A]?.[e]!==void 0&&(this.keyMappings[A][e]=void 0)}clearMappings(){this.keyMappings=[]}setMappings(A){this.keyMappings=A}getMappings(){return this.keyMappings}getVelocity(A,e){return this.keyMappings[A]?.[e]?.velocity??-1}getGain(A,e){return this.keyMappings[A]?.[e]?.gain??1}hasOverridePatch(A,e){let t=this.keyMappings[A]?.[e]?.patch?.bankMSB;return t!==void 0&&t>=0}getPatch(A,e){let t=this.keyMappings[A]?.[e];if(t)return t.patch;throw new Error("No modifier.")}};function As(A,e,t,s,n,a=0){let r=128-(e+t+s+n.reduce((o,i)=>o+i,0))%128&127;A.systemExclusive([65,16,66,18,e,t,s,...n,r,247],a)}var Hs=class ds{channelSnapshots;keyMappings;masterParameters;reverbSnapshot;chorusSnapshot;delaySnapshot;insertionSnapshot;constructor(e,t,s,n,a,r,o){this.channelSnapshots=e,this.masterParameters=t,this.keyMappings=s,this.reverbSnapshot=n,this.chorusSnapshot=a,this.delaySnapshot=r,this.insertionSnapshot=o}static create(e){return new ds(e.midiChannels.map((t,s)=>nn.create(e,s)),e.getAllMasterParameters(),e.keyModifierManager.getMappings(),e.reverbProcessor.getSnapshot(),e.chorusProcessor.getSnapshot(),e.delayProcessor.getSnapshot(),e.getInsertionSnapshot())}static copyFrom(e){return new ds(e.channelSnapshots.map(t=>nn.copyFrom(t)),{...e.masterParameters},[...e.keyMappings],{...e.reverbSnapshot},{...e.chorusSnapshot},{...e.delaySnapshot},{...e.insertionSnapshot})}apply(e){for(e.keyModifierManager.setMappings(this.keyMappings);e.midiChannels.length<this.channelSnapshots.length;)e.createMIDIChannel();for(let n of this.channelSnapshots)n.apply(e);for(let[n,a]of Object.entries(this.reverbSnapshot))e.reverbProcessor[n]=a;for(let[n,a]of Object.entries(this.chorusSnapshot))e.chorusProcessor[n]=a;for(let[n,a]of Object.entries(this.delaySnapshot))e.delayProcessor[n]=a;let t=this.insertionSnapshot;As(e,64,3,0,[t.type>>8,t.type&127]);for(let n=0;n<t.params.length;n++)t.params[n]!==255&&As(e,64,3,3+n,[t.params[n]]);for(let n=0;n<t.channels.length;n++)As(e,64,64|Ts(n),34,[t.channels[n]?1:0]);let s=Object.entries(this.masterParameters);for(let[n,a]of s)e.setMasterParameter(n,a)}},qn={masterGain:1,masterPan:0,voiceCap:350,interpolationType:Oa.hermite,midiSystem:"gs",monophonicRetriggerMode:!1,reverbGain:1,chorusGain:1,delayGain:1,reverbLock:!1,chorusLock:!1,delayLock:!1,drumLock:!1,customVibratoLock:!1,nprnParamLock:!1,insertionEffectLock:!1,blackMIDIMode:!1,autoAllocateVoices:!1,transposition:0,deviceID:-1},Os=-15e3,Qs=new Float32Array(15e3-Os+1);for(let A=0;A<Qs.length;A++){let e=Os+A;Qs[A]=Math.pow(2,e/1200)}function Gt(A){return A<=-32767?0:Qs[A-Os]}var Mt=-2e4,Jn=16500,fs=new Float32Array(Jn-Mt+1);for(let A=0;A<fs.length;A++){let e=Mt+A;fs[A]=440*Math.pow(2,(e-6900)/1200)}function us(A){return A<Mt||A>Jn?440*Math.pow(2,(A-6900)/1200):fs[A-Mt|0]}var VA=-16600,XA=new Float32Array(16e3-VA+1);for(let A=0;A<XA.length;A++){let e=VA+A;XA[A]=Math.pow(10,-e/200)}function vt(A){return XA[A-VA|0]}var di=.03,Ys=class tt{static smoothingConstant=1;static cachedCoefficients=new Map;resonanceCb=0;currentInitialFc=13500;a0=0;a1=0;a2=0;a3=0;a4=0;x1=0;x2=0;y1=0;y2=0;lastTargetCutoff=1/0;initialized=!1;sampleRate;maxCutoff;constructor(e){this.sampleRate=e,this.maxCutoff=e*.45}static initCache(e){tt.smoothingConstant=di*(44100/e);let t=new tt(e);t.resonanceCb=0;for(let s=1500;s<13500;s++)t.currentInitialFc=s,t.calculateCoefficients(s)}init(){this.lastTargetCutoff=1/0,this.resonanceCb=0,this.currentInitialFc=13500,this.a0=0,this.a1=0,this.a2=0,this.a3=0,this.a4=0,this.x1=0,this.x2=0,this.y1=0,this.y2=0,this.initialized=!1}calculateCoefficients(e){e=e|0;let t=this.resonanceCb,s=tt.cachedCoefficients.get(t+e*961);if(s!==void 0){this.a0=s.a0,this.a1=s.a1,this.a2=s.a2,this.a3=s.a3,this.a4=s.a4;return}let n=us(e);n=Math.min(n,this.maxCutoff);let a=vt(-(t-3.01)),r=1/Math.sqrt(vt(-t)),o=2*Math.PI*n/this.sampleRate,i=Math.cos(o),g=Math.sin(o)/(2*a),c=(1-i)*r,l=c/2,B=l,h=1+g,E=-2*i,m=1-g,D={a0:l/h,a1:c/h,a2:B/h,a3:E/h,a4:m/h};this.a0=D.a0,this.a1=D.a1,this.a2=D.a2,this.a3=D.a3,this.a4=D.a4,tt.cachedCoefficients.set(t+e*961,D)}},_e=960,dt=900,Qi=class{sampleRate;outputGain=0;attenuationCb=_e;state=0;sampleTime=0;releaseStartCb=_e;releaseStartTimeSamples=0;attackDuration=0;decayDuration=0;releaseDuration=0;sustainCb=0;delayEnd=0;attackEnd=0;holdEnd=0;decayEnd=0;enteredRelease=!1;canEndOnSilentSustain=!1;constructor(A){this.sampleRate=A}startRelease(A){this.releaseStartTimeSamples=this.sampleTime;let e=A.overrideReleaseVolEnv||A.modulatedGenerators[I.releaseVolEnv];if(this.releaseDuration=this.timecentsToSamples(Math.max(-7200,e)),this.enteredRelease)this.releaseStartCb=this.attenuationCb;else{let s=Math.max(0,Math.min(_e,this.sustainCb)),n=s/_e,a=(60-A.targetKey)*A.modulatedGenerators[I.keyNumToVolEnvDecay];switch(this.decayDuration=this.timecentsToSamples(A.modulatedGenerators[I.decayVolEnv]+a)*n,this.state){case 0:this.releaseStartCb=_e;break;case 1:{let r=1-(this.attackEnd-this.releaseStartTimeSamples)/this.attackDuration;this.releaseStartCb=200*Math.log10(r)*-1;break}case 2:this.releaseStartCb=0;break;case 3:this.releaseStartCb=(1-(this.decayEnd-this.releaseStartTimeSamples)/this.decayDuration)*s;break;case 4:this.releaseStartCb=s;break}this.releaseStartCb=Math.max(0,Math.min(this.releaseStartCb,_e)),this.attenuationCb=this.releaseStartCb}this.enteredRelease=!0;let t=(_e-this.releaseStartCb)/_e;this.releaseDuration*=t,this.releaseStartCb>=dt&&(A.isActive=!1)}init(A){this.enteredRelease=!1,this.state=0,this.sampleTime=0,this.outputGain=0,this.canEndOnSilentSustain=A.modulatedGenerators[I.sustainVolEnv]>=dt,this.sustainCb=Math.min(_e,A.modulatedGenerators[I.sustainVolEnv]),this.attackDuration=this.timecentsToSamples(A.modulatedGenerators[I.attackVolEnv]);let e=(60-A.targetKey)*A.modulatedGenerators[I.keyNumToVolEnvDecay],t=this.sustainCb/_e;this.decayDuration=this.timecentsToSamples(A.modulatedGenerators[I.decayVolEnv]+e)*t,this.delayEnd=this.timecentsToSamples(A.modulatedGenerators[I.delayVolEnv]),this.attackEnd=this.attackDuration+this.delayEnd;let s=(60-A.targetKey)*A.modulatedGenerators[I.keyNumToVolEnvHold];this.holdEnd=this.timecentsToSamples(A.modulatedGenerators[I.holdVolEnv]+s)+this.attackEnd,this.decayEnd=this.decayDuration+this.holdEnd,this.attackEnd===0&&(this.state=2)}process(A,e){let{releaseStartTimeSamples:t,releaseStartCb:s,releaseDuration:n,delayEnd:a,attackEnd:r,attackDuration:o,holdEnd:i,decayEnd:g,decayDuration:c,sustainCb:l}=this,B=this.sampleTime+=A;if(this.enteredRelease){let h=B-t,E=_e-s;return this.attenuationCb=h/n*E+s,this.outputGain=XA[this.attenuationCb-VA|0]*e,this.attenuationCb<dt}switch(this.state){case 0:if(B<a)return this.attenuationCb=_e,this.outputGain=0,!0;this.state++;case 1:if(B<r){this.attenuationCb=0;let h=1-(r-B)/o;return this.outputGain=h*e,!0}this.state++;case 2:if(B<i)return this.attenuationCb=0,this.outputGain=e,!0;this.state++;case 3:if(B<g)return this.attenuationCb=(1-(g-B)/c)*l,this.outputGain=e*XA[this.attenuationCb-VA|0],!0;this.state++;case 4:return this.canEndOnSilentSustain&&l>=dt?(this.attenuationCb=_e,this.outputGain=0,!1):(this.attenuationCb=l,this.outputGain=e*XA[l-VA|0],!0)}}timecentsToSamples(A){return Math.max(0,Math.floor(Gt(A)*this.sampleRate))}},Ke=16384,Lt=Object.keys(Qe).length,fA=new Float32Array(Ke+1),vA=new Float32Array(Ke+1);fA[0]=0;fA[fA.length-1]=1;vA[0]=0;vA[vA.length-1]=1;for(let A=1;A<Ke-1;A++){let e=-.4166666666666667*Math.log(A/(fA.length-1))/Math.LN10;vA[A]=1-e,fA[fA.length-1-A]=e}function Kn(A,e,t){let s=!!(A&2);switch(A&1&&(t=1-t),e){case Qe.linear:return s?t*2-1:t;case Qe.switch:return t=t>.5?1:0,s?t*2-1:t;case Qe.concave:return s?(t=t*2-1,t<0?-fA[Math.trunc(t*-Ke)]:fA[Math.trunc(t*Ke)]):fA[Math.trunc(t*Ke)];case Qe.convex:return s?(t=t*2-1,t<0?-vA[Math.trunc(t*-Ke)]:vA[Math.trunc(t*Ke)]):vA[Math.trunc(t*Ke)]}}var ts=1,ms=new Float32Array(1e3);for(let A=0;A<ms.length;A++)ms[A]=Kn(0,Qe.convex,A/1e3);var fi=class{attackDuration=0;decayDuration=0;holdDuration=0;releaseDuration=0;sustainLevel=0;delayEnd=0;attackEnd=0;holdEnd=0;releaseStartLevel=0;currentValue=0;enteredRelease=!1;decayEnd=0;process(A,e){return this.enteredRelease?this.releaseStartLevel===0?0:Math.max(0,(1-(e-A.releaseStartTime)/this.releaseDuration)*this.releaseStartLevel):(e<this.delayEnd?this.currentValue=0:e<this.attackEnd?this.currentValue=ms[~~((1-(this.attackEnd-e)/this.attackDuration)*1e3)]:e<this.holdEnd?this.currentValue=ts:e<this.decayEnd?this.currentValue=(1-(this.decayEnd-e)/this.decayDuration)*(this.sustainLevel-ts)+ts:this.currentValue=this.sustainLevel,this.currentValue)}startRelease(A){this.releaseStartLevel=this.currentValue,this.enteredRelease=!0;let e=this.tc2Sec(Math.max(A.modulatedGenerators[I.releaseModEnv],-7200));this.releaseDuration=e*this.releaseStartLevel}init(A){this.enteredRelease=!1,this.sustainLevel=1-A.modulatedGenerators[I.sustainModEnv]/1e3,this.attackDuration=this.tc2Sec(A.modulatedGenerators[I.attackModEnv]);let e=(60-A.midiNote)*A.modulatedGenerators[I.keyNumToModEnvDecay],t=this.tc2Sec(A.modulatedGenerators[I.decayModEnv]+e);this.decayDuration=t*(1-this.sustainLevel);let s=(60-A.midiNote)*A.modulatedGenerators[I.keyNumToModEnvHold];this.holdDuration=this.tc2Sec(s+A.modulatedGenerators[I.holdModEnv]),this.delayEnd=A.startTime+this.tc2Sec(A.modulatedGenerators[I.delayModEnv]),this.attackEnd=this.delayEnd+this.attackDuration,this.holdEnd=this.attackEnd+this.holdDuration,this.decayEnd=this.holdEnd+this.decayDuration}tc2Sec(A){return A<=-10114?0:Gt(A)}},qs=class{isLooping=!1;sampleData;playbackStep=0;loopStart=0;loopEnd=0;loopLength=0;end=0;cursor=0},ui=class extends qs{process(A,e,t){let s=e*this.playbackStep,n=this.sampleData,{loopEnd:a,loopLength:r,loopStart:o,end:i}=this,g=this.cursor;if(this.isLooping)for(let c=0;c<A;c++){g>o&&(g=o+(g-o)%r);let l=g|0,B=l+1;B>=a&&(B-=r);let h=g-l,E=n[B],m=n[l];t[c]=m+(E-m)*h,g+=s}else for(let c=0;c<A;c++){let l=g|0,B=l+1;if(B>=i)return t.fill(0,c,A),!1;let h=g-l,E=n[B],m=n[l];t[c]=m+(E-m)*h,g+=s}return this.cursor=g,!0}},mi=class extends qs{process(A,e,t){let s=e*this.playbackStep,n=this.sampleData,{loopLength:a,loopStart:r,end:o}=this,i=this.cursor;if(this.isLooping)for(let g=0;g<A;g++)i>r&&(i=r+(i-r)%a),t[g]=n[i|0],i+=s;else for(let g=0;g<A;g++){if(i>=o)return t.fill(0,g,A),!1;t[g]=n[i|0],i+=s}return this.cursor=i,!0}},pi=class extends qs{process(A,e,t){let s=e*this.playbackStep,n=this.sampleData,{loopEnd:a,loopLength:r,loopStart:o,end:i}=this,g=this.cursor;if(this.isLooping)for(let c=0;c<A;c++){g>o&&(g=o+(g-o)%r);let l=g|0,B=l+1,h=l+2,E=l+3,m=g-l;B>=a&&(B-=r),h>=a&&(h-=r),E>=a&&(E-=r);let D=n[l],f=n[B],O=n[h],R=n[E],Q=(O-D)*.5,T=f-O,U=Q+T,x=U+T+(R-f)*.5,V=U+x;t[c]=((x*m-V)*m+Q)*m+f,g+=s}else for(let c=0;c<A;c++){let l=g|0,B=l+1,h=l+2,E=l+3,m=g-l;if(E>=i)return t.fill(0,c,A),!1;let D=n[l],f=n[B],O=n[h],R=n[E],Q=(O-D)*.5,T=f-O,U=Q+T,x=U+T+(R-f)*.5,V=U+x;t[c]=((x*m-V)*m+Q)*m+f,g+=s}return this.cursor=g,!0}},yi=-2320,ps=class{oscillators=[new ui,new mi,new pi];wavetable=this.oscillators[qn.interpolationType];filter;generators=new Int16Array(WA);modulatedGenerators=new Int16Array(WA);modulators=new Array;modulatorValues=new Int16Array(64);modEnv=new fi;volEnv;resonanceOffset=0;priority=0;isActive=!1;hasRendered=!1;isInRelease=!1;isHeld=!1;channel=0;velocity=0;midiNote=0;rootKey=0;targetKey=0;pressure=0;gainModifier=1;loopingMode=0;startTime=0;releaseStartTime=1/0;tuningCents=0;tuningRatio=1;currentPan=0;realKey=60;portamentoFromKey=-1;portamentoDuration=0;overridePan=0;pitchOffset=0;reverbSend=1;chorusSend=1;delaySend=1;exclusiveClass=0;overrideReleaseVolEnv=0;vibLfoPhase=0;vibLfoStartTime=0;modLfoPhase=0;modLfoStartTime=0;constructor(A){this.volEnv=new Qi(A),this.filter=new Ys(A)}exclusiveRelease(A,e=ba){this.overrideReleaseVolEnv=yi,this.isInRelease=!1,this.releaseVoice(A,e)}releaseVoice(A,e=wa){this.releaseStartTime=A,this.releaseStartTime-this.startTime<e&&(this.releaseStartTime=this.startTime+e)}setup(A,e,t,s,n){this.startTime=A,this.isActive=!0,this.isInRelease=!1,this.hasRendered=!1,this.isHeld=!1,this.releaseStartTime=1/0,this.pressure=0,this.channel=e,this.midiNote=t,this.velocity=s,this.realKey=n,this.overrideReleaseVolEnv=0,this.portamentoDuration=0,this.portamentoFromKey=-1,this.vibLfoPhase=.25,this.modLfoPhase=.25}};function MA(A,e){return(A>>e&1)>0}function ss(A){return A?1:0}var hA=class ys{isBipolar;isNegative;index;isCC;curveType;constructor(e=Ae.noController,t=Qe.linear,s=!1,n=!1,a=!1){this.isBipolar=n,this.isNegative=a,this.index=e,this.isCC=s,this.curveType=t}get sourceName(){return this.isCC?Object.keys(d).find(e=>d[e]===this.index)??this.index.toString():Object.keys(Ae).find(e=>Ae[e]===this.index)??this.index.toString()}get curveTypeName(){return Object.keys(Qe).find(e=>Qe[e]===this.curveType)??this.curveType.toString()}static fromSourceEnum(e){let t=MA(e,9),s=MA(e,8),n=MA(e,7);return new ys(e&127,e>>10&3,n,t,s)}static copyFrom(e){return new ys(e.index,e.curveType,e.isCC,e.isBipolar,e.isNegative)}toString(){return`${this.sourceName} ${this.curveTypeName} ${this.isBipolar?"bipolar":"unipolar"} ${this.isNegative?"negative":"positive"}`}toSourceEnum(){return this.curveType<<10|ss(this.isBipolar)<<9|ss(this.isNegative)<<8|ss(this.isCC)<<7|this.index}isIdentical(e){return this.index===e.index&&this.isNegative===e.isNegative&&this.isCC===e.isCC&&this.isBipolar===e.isBipolar&&this.curveType===e.curveType}getValue(e,t,s){let n;if(this.isCC)n=e[this.index];else switch(this.index){case Ae.noController:n=16383;break;case Ae.noteOnKeyNum:n=s.midiNote<<7;break;case Ae.noteOnVelocity:n=s.velocity<<7;break;case Ae.polyPressure:n=s.pressure<<7;break;case Ae.pitchWheel:n=t;break;default:n=e[this.index+128];break}let a=(this.isBipolar?2:0)|(this.isNegative?1:0);return Vn[Ke*(this.curveType*Lt+a)+n]}},Vn=new Float32Array(Ke*4*Lt);for(let A=0;A<Lt;A++)for(let e=0;e<4;e++){let t=Ke*(A*Lt+e);for(let s=0;s<Ke;s++)Vn[t+s]=Kn(e,A,s/Ke)}function AA(A,e,t,s,n){return new hA(n,A,s,e,t).toSourceEnum()}var Xn=AA(Qe.linear,!0,!1,!0,d.filterResonance),De=class Ss{destination=I.initialAttenuation;transformAmount=0;transformType=0;primarySource;secondarySource;constructor(e=new hA,t=new hA,s=I.INVALID,n=0,a=0){this.primarySource=e,this.secondarySource=t,this.destination=s,this.transformAmount=n,this.transformType=a}get destinationName(){return Object.keys(I).find(e=>I[e]===this.destination)}static isIdentical(e,t,s=!1){return e.primarySource.isIdentical(t.primarySource)&&e.secondarySource.isIdentical(t.secondarySource)&&e.destination===t.destination&&e.transformType===t.transformType&&(!s||e.transformAmount===t.transformAmount)}static copyFrom(e){return new Ss(hA.copyFrom(e.primarySource),hA.copyFrom(e.secondarySource),e.destination,e.transformAmount,e.transformType)}toString(){return`Source: ${this.primarySource.toString()}
2
2
  Secondary source: ${this.secondarySource.toString()}
3
3
  to: ${this.destinationName}
4
4
  amount: ${this.transformAmount}`+(this.transformType===2?"absolute value":"")}write(e,t){te(e,this.primarySource.toSourceEnum()),te(e,this.destination),te(e,this.transformAmount),te(e,this.secondarySource.toSourceEnum()),te(e,this.transformType),t&&t.mod++}sumTransform(e){let t=Ss.copyFrom(this);return t.transformAmount+=e.transformAmount,t}},ye=class extends De{constructor(A,e,t,s,n){super(hA.fromSourceEnum(A),hA.fromSourceEnum(e),t,s,n),this.destination>ii&&(this.destination=I.INVALID)}},ns=Qe.concave,Si=[new ye(AA(ns,!1,!0,!1,Ae.noteOnVelocity),0,I.initialAttenuation,960,0),new ye(129,0,I.vibLfoToPitch,50,0),new ye(AA(ns,!1,!0,!0,d.mainVolume),0,I.initialAttenuation,960,0),new ye(13,0,I.vibLfoToPitch,50,0),new ye(526,16,I.fineTune,12700,0),new ye(650,0,I.pan,500,0),new ye(AA(ns,!1,!0,!0,d.expressionController),0,I.initialAttenuation,960,0),new ye(219,0,I.reverbEffectsSend,200,0),new ye(221,0,I.chorusEffectsSend,200,0)],ki=[new ye(AA(Qe.convex,!0,!1,!0,d.attackTime),0,I.attackVolEnv,6e3,0),new ye(AA(Qe.linear,!0,!1,!0,d.releaseTime),0,I.releaseVolEnv,3600,0),new ye(AA(Qe.linear,!0,!1,!0,d.decayTime),0,I.decayVolEnv,3600,0),new ye(AA(Qe.linear,!0,!1,!0,d.brightness),0,I.initialFilterFc,9600,0),new ye(Xn,0,I.initialFilterQ,200,0),new ye(AA(Qe.switch,!1,!1,!0,d.softPedal),0,I.initialAttenuation,50,0),new ye(AA(Qe.switch,!1,!1,!0,d.softPedal),0,I.initialFilterFc,-2400,0),new ye(AA(Qe.linear,!0,!1,!0,d.balance),0,I.pan,500,0)],Zn=[...Si,...ki],xe=class{generatorType;generatorValue=0;constructor(A,e,t=!0){if(this.generatorType=A,e===void 0)throw new Error("No value provided.");if(this.generatorValue=Math.round(e),t){let s=tA[A];s!==void 0&&(this.generatorValue=Math.max(s.min,Math.min(s.max,this.generatorValue)))}}write(A){te(A,this.generatorType),te(A,this.generatorValue)}toString(){return`${Object.keys(I).find(A=>I[A]===this.generatorType)}: ${this.generatorValue}`}},Jt=class{velRange={min:-1,max:127};keyRange={min:-1,max:127};generators=[];modulators=[];get hasKeyRange(){return this.keyRange.min!==-1}get hasVelRange(){return this.velRange.min!==-1}get fineTuning(){let A=this.getGenerator(I.coarseTune,0),e=this.getGenerator(I.fineTune,0);return A*100+e}set fineTuning(A){let e=Math.trunc(A/100),t=A%100;this.setGenerator(I.coarseTune,e),this.setGenerator(I.fineTune,t)}addToGenerator(A,e,t=!0){let s=this.getGenerator(A,tA[A].def);this.setGenerator(A,e+s,t)}setGenerator(A,e,t=!0){switch(A){case I.sampleID:throw new Error("Use setSample()");case I.instrument:throw new Error("Use setInstrument()");case I.velRange:case I.keyRange:throw new Error("Set the range manually")}if(e===null){this.generators=this.generators.filter(n=>n.generatorType!==A);return}let s=this.generators.findIndex(n=>n.generatorType===A);s===-1?this.addGenerators(new xe(A,e,t)):this.generators[s]=new xe(A,e,t)}addGenerators(...A){for(let e of A)switch(e.generatorType){default:this.generators.push(e);break;case I.sampleID:case I.instrument:break;case I.velRange:this.velRange.min=e.generatorValue&127,this.velRange.max=e.generatorValue>>8&127;break;case I.keyRange:this.keyRange.min=e.generatorValue&127,this.keyRange.max=e.generatorValue>>8&127}}addModulators(...A){this.modulators.push(...A)}getGenerator(A,e){return this.generators.find(t=>t.generatorType===A)?.generatorValue??e}copyFrom(A){this.generators=A.generators.map(e=>new xe(e.generatorType,e.generatorValue,!1)),this.modulators=A.modulators.map(De.copyFrom.bind(De)),this.velRange={...A.velRange},this.keyRange={...A.keyRange}}getWriteGenerators(A){let e=this.generators.filter(t=>t.generatorType!==I.sampleID&&t.generatorType!==I.instrument&&t.generatorType!==I.keyRange&&t.generatorType!==I.velRange);if(!A)throw new Error("No bank provided! ");return this.hasVelRange&&e.unshift(new xe(I.velRange,this.velRange.max<<8|Math.max(this.velRange.min,0),!1)),this.hasKeyRange&&e.unshift(new xe(I.keyRange,this.keyRange.max<<8|Math.max(this.keyRange.min,0),!1)),e}},Wn=class extends Jt{},Di=48e3,Kt=class{name;sampleRate;originalKey;pitchCorrection;linkedSample;sampleType;loopStart;loopEnd;linkedTo=[];dataOverridden=!0;compressedData;audioData;constructor(A,e,t,s,n,a,r){this.name=A,this.sampleRate=e,this.originalKey=t,this.pitchCorrection=s,this.loopStart=a,this.loopEnd=r,this.sampleType=n}get isCompressed(){return this.compressedData!==void 0}get isLinked(){return this.sampleType===Ne.rightSample||this.sampleType===Ne.leftSample||this.sampleType===Ne.linkedSample}get useCount(){return this.linkedTo.length}getRawData(A){return this.compressedData&&A&&!this.dataOverridden?this.compressedData:this.encodeS16LE()}resampleData(A){let e=this.getAudioData(),t=A/this.sampleRate,s=new Float32Array(Math.floor(e.length*t));for(let n=0;n<s.length;n++)s[n]=e[Math.floor(n*(1/t))];e=s,this.sampleRate=A,this.loopStart=Math.floor(this.loopStart*t),this.loopEnd=Math.floor(this.loopEnd*t),this.audioData=e}async compressSample(A){if(!this.isCompressed)try{let e=this.getAudioData();(this.sampleRate<8e3||this.sampleRate>96e3)&&(this.resampleData(Di),e=this.getAudioData());let t=await A(e,this.sampleRate);this.setCompressedData(t)}catch(e){se(`Failed to compress ${this.name}. Leaving as uncompressed!`,e),this.compressedData=void 0}}setSampleType(A){if(this.sampleType=A,this.isLinked||(this.linkedSample&&(this.linkedSample.linkedSample=void 0,this.linkedSample.sampleType=A),this.linkedSample=void 0),(A&32768)>0)throw new Error("ROM samples are not supported.")}unlinkSample(){this.setSampleType(Ne.monoSample)}setLinkedSample(A,e){if(A.linkedSample)throw new Error(`${A.name} is linked tp ${A.linkedSample.name}. Unlink it first.`);switch(this.linkedSample=A,A.linkedSample=this,e){case Ne.leftSample:this.setSampleType(Ne.leftSample),A.setSampleType(Ne.rightSample);break;case Ne.rightSample:this.setSampleType(Ne.rightSample),A.setSampleType(Ne.leftSample);break;case Ne.linkedSample:this.setSampleType(Ne.linkedSample),A.setSampleType(Ne.linkedSample);break;default:throw new Error("Invalid sample type: "+e)}}linkTo(A){this.linkedTo.push(A)}unlinkFrom(A){let e=this.linkedTo.indexOf(A);if(e===-1){se(`Cannot unlink ${A.name} from ${this.name}: not linked.`);return}this.linkedTo.splice(e,1)}getAudioData(){if(this.audioData)return this.audioData;if(this.isCompressed)return this.audioData=this.decodeVorbis(),this.audioData;throw new Error("Sample data is undefined for a BasicSample instance.")}setAudioData(A,e){this.audioData=A,this.sampleRate=e,this.dataOverridden=!0,this.compressedData=void 0}setCompressedData(A){this.audioData=void 0,this.compressedData=A,this.dataOverridden=!1}encodeS16LE(){let A=this.getAudioData(),e=new Int16Array(A.length),t=A.length;for(let s=0;s<t;s++){let n=A[s]*32768;n>32767?n=32767:n<-32768&&(n=-32768),e[s]=n}return new _(e.buffer)}decodeVorbis(){if(this.audioData)return this.audioData;if(!this.compressedData)throw new Error("Compressed data is missing.");try{let A=qt.decode(this.compressedData).data[0];if(A===void 0)return se(`Error decoding sample ${this.name}: Vorbis decode returned undefined.`),new Float32Array(0);for(let e=0;e<A.length;e++)A[e]=Math.max(-1,Math.min(A[e],.999969482421875));return A}catch(A){return se(`Error decoding sample ${this.name}: ${A}`),new Float32Array(this.loopEnd+1)}}},wi=class extends Kt{constructor(){super("",44100,60,0,Ne.monoSample,0,0)}},zn=class extends Jt{parentInstrument;useCount;constructor(A,e){super(),this.parentInstrument=A,this._sample=e,e.linkTo(this.parentInstrument),this.useCount=A.useCount}_sample;get sample(){return this._sample}set sample(A){this._sample&&this._sample.unlinkFrom(this.parentInstrument),this._sample=A,A.linkTo(this.parentInstrument)}getWriteGenerators(A){let e=super.getWriteGenerators(A),t=A.samples.indexOf(this.sample);if(t===-1)throw new Error(`${this.sample.name} does not exist in ${A.soundBankInfo.name}! Cannot write sampleID generator.`);return e.push(new xe(I.sampleID,t,!1)),e}},_n=class extends Jt{parentPreset;constructor(A,e){super(),this.parentPreset=A,this._instrument=e,this._instrument.linkTo(this.parentPreset)}_instrument;get instrument(){return this._instrument}set instrument(A){this._instrument&&this._instrument.unlinkFrom(this.parentPreset),this._instrument=A,this._instrument.linkTo(this.parentPreset)}getWriteGenerators(A){let e=super.getWriteGenerators(A);if(!A)throw new Error("Instrument ID cannot be determined without the sound bank itself.");let t=A.instruments.indexOf(this.instrument);if(t===-1)throw new Error(`${this.instrument.name} does not exist in ${A.soundBankInfo.name}! Cannot write instrument generator.`);return e.push(new xe(I.instrument,t,!1)),e}},rt=class lA{parentSoundBank;name="";program=0;bankMSB=0;bankLSB=0;isGMGSDrum=!1;zones=[];globalZone;library=0;genre=0;morphology=0;constructor(e,t=new Wn){this.parentSoundBank=e,this.globalZone=t}get isXGDrums(){return this.parentSoundBank.isXGBank&&ke.isXGDrums(this.bankMSB)}get isAnyDrums(){let e=this.parentSoundBank.isXGBank;return this.isGMGSDrum||e&&ke.isXGDrums(this.bankMSB)}static isInRange(e,t){return t>=e.min&&t<=e.max}static addUniqueModulators(e,t){for(let s of t)e.some(n=>De.isIdentical(s,n))||e.push(s)}static subtractRanges(e,t){return{min:Math.max(e.min,t.min),max:Math.min(e.max,t.max)}}delete(){for(let e of this.zones)e.instrument?.unlinkFrom(this)}deleteZone(e){this.zones[e]?.instrument?.unlinkFrom(this),this.zones.splice(e,1)}createZone(e){let t=new _n(this,e);return this.zones.push(t),t}preload(e,t){for(let s=e;s<t+1;s++)for(let n=0;n<128;n++)for(let a of this.getVoiceParameters(s,n))a.sample.getAudioData()}matches(e){return IA.matches(this,e)}getVoiceParameters(e,t){let s=new Array;for(let n of this.zones){if(!lA.isInRange(n.hasKeyRange?n.keyRange:this.globalZone.keyRange,e)||!lA.isInRange(n.hasVelRange?n.velRange:this.globalZone.velRange,t))continue;let a=n.instrument;if(!a||a.zones.length===0)continue;let r=new Int16Array(WA);for(let i of this.globalZone.generators)r[i.generatorType]=i.generatorValue;for(let i of n.generators)r[i.generatorType]=i.generatorValue;let o=[...n.modulators];lA.addUniqueModulators(o,this.globalZone.modulators);for(let i of a.zones){if(!lA.isInRange(i.hasKeyRange?i.keyRange:a.globalZone.keyRange,e)||!lA.isInRange(i.hasVelRange?i.velRange:a.globalZone.velRange,t))continue;let g=[...i.modulators];lA.addUniqueModulators(g,a.globalZone.modulators),lA.addUniqueModulators(g,this.parentSoundBank.defaultModulators);for(let l of o){let B=g.findIndex(h=>De.isIdentical(l,h));B===-1?g.push(l):g[B]=g[B].sumTransform(l)}let c=new Int16Array(Cs);for(let l of a.globalZone.generators)c[l.generatorType]=l.generatorValue;for(let l of i.generators)c[l.generatorType]=l.generatorValue;for(let l=0;l<c.length;l++)c[l]=Math.max(-32768,Math.min(32767,c[l]+r[l]));c[I.initialAttenuation]=Math.floor(c[I.initialAttenuation]*.4),s.push({sample:i.sample,generators:c,modulators:g})}}return s}toMIDIString(){return IA.toMIDIString(this)}toString(){return IA.toNamedMIDIString(this)}toFlattenedInstrument(){let e=(g,c)=>{g.push(...c.filter(l=>!g.some(B=>B.generatorType===l.generatorType)))},t=(g,c)=>{g.push(...c.filter(l=>!g.some(B=>De.isIdentical(l,B))))},s=new ot;s.name=this.name;let n=[],a=[],r=this.globalZone;n.push(...r.generators),a.push(...r.modulators);let o=r.keyRange,i=r.velRange;for(let g of this.zones){if(!g.instrument)throw new Error("No instrument in a preset zone.");let c=g.keyRange;g.hasKeyRange||(c=o);let l=g.velRange;g.hasVelRange||(l=i);let B=g.generators.map(T=>new xe(T.generatorType,T.generatorValue));e(B,n);let h=[...g.modulators];t(h,a);let E=g.instrument,m=E.zones,D=[],f=[],O=E.globalZone;D.push(...O.generators),f.push(...O.modulators);let R=O.keyRange,Q=O.velRange;for(let T of m){if(!T.sample)throw new Error("No sample in an instrument zone.");let U=T.keyRange;T.hasKeyRange||(U=R);let x=T.velRange;if(T.hasVelRange||(x=Q),U=lA.subtractRanges(U,c),x=lA.subtractRanges(x,l),U.max<U.min||x.max<x.min)continue;let V=T.generators.map(u=>new xe(u.generatorType,u.generatorValue));e(V,D);let J=[...T.modulators];t(J,f);let L=[...J];for(let u of h){let v=L.findIndex(S=>De.isIdentical(u,S));v===-1?L.push(u):L[v]=L[v].sumTransform(u)}let H=V.map(u=>new xe(u.generatorType,u.generatorValue));for(let u of B){if(u.generatorType===I.velRange||u.generatorType===I.keyRange||u.generatorType===I.instrument||u.generatorType===I.endOper||u.generatorType===I.sampleModes)continue;let v=V.findIndex(S=>S.generatorType===u.generatorType);if(v===-1){let S=tA[u.generatorType].def+u.generatorValue;H.push(new xe(u.generatorType,S))}else{let S=H[v].generatorValue+u.generatorValue;H[v]=new xe(u.generatorType,S)}}H=H.filter(u=>u.generatorType!==I.sampleID&&u.generatorType!==I.keyRange&&u.generatorType!==I.velRange&&u.generatorType!==I.endOper&&u.generatorType!==I.instrument&&u.generatorValue!==tA[u.generatorType].def);let q=s.createZone(T.sample);q.keyRange=U,q.velRange=x,q.keyRange.min===0&&q.keyRange.max===127&&(q.keyRange.min=-1),q.velRange.min===0&&q.velRange.max===127&&(q.velRange.min=-1),q.addGenerators(...H),q.addModulators(...L)}}return s}write(e,t){y(`%cWriting ${this.name}...`,C.info),Ge(e.pdta,this.name.slice(0,20),20),Ge(e.xdta,this.name.slice(20),20),te(e.pdta,this.program);let s=this.bankMSB;this.isGMGSDrum?s=128:this.bankMSB===0&&(s=this.bankLSB),te(e.pdta,s),e.xdta.currentIndex+=4,te(e.pdta,t&65535),te(e.xdta,t>>16),ge(e.pdta,this.library),ge(e.pdta,this.genre),ge(e.pdta,this.morphology),e.xdta.currentIndex+=12}},bi=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]),ot=class{name="";zones=[];globalZone=new Wn;linkedTo=[];get useCount(){return this.linkedTo.length}createZone(A){let e=new zn(this,A);return this.zones.push(e),e}linkTo(A){this.linkedTo.push(A);for(let e of this.zones)e.useCount++}unlinkFrom(A){let e=this.linkedTo.indexOf(A);if(e===-1){se(`Cannot unlink ${A.name} from ${this.name}: not linked.`);return}this.linkedTo.splice(e,1);for(let t of this.zones)t.useCount--}deleteUnusedZones(){this.zones=this.zones.filter(A=>{let e=A.useCount>0;return e||A.sample.unlinkFrom(this),e})}delete(){if(this.useCount>0)throw new Error(`Cannot delete an instrument that is used by: ${this.linkedTo.map(A=>A.name).toString()}.`);for(let A of this.zones)A.sample.unlinkFrom(this)}deleteZone(A,e=!1){let t=this.zones[A];return t.useCount-=1,t.useCount<1||e?(t.sample.unlinkFrom(this),this.zones.splice(A,1),!0):!1}globalize(){let A=this.globalZone;for(let t=0;t<58;t++){if(bi.has(t))continue;t=t;let s={},n=tA[t]?.def||0;s[n]=0;for(let a of this.zones){let r=a.getGenerator(t,void 0);r===void 0?s[n]++:s[r]===void 0?s[r]=1:s[r]++;let o;switch(t){default:continue;case I.decayVolEnv:o=I.keyNumToVolEnvDecay;break;case I.holdVolEnv:o=I.keyNumToVolEnvHold;break;case I.decayModEnv:o=I.keyNumToModEnvDecay;break;case I.holdModEnv:o=I.keyNumToModEnvHold}if(a.getGenerator(o,void 0)!==void 0){s={};break}}if(Object.keys(s).length>0){let a=["0",0];for(let[o,i]of Object.entries(s))i>a[1]&&(a=[o,i]);let r=Number.parseInt(a[0]);r!==n&&A.setGenerator(t,r,!1);for(let o of this.zones){let i=o.getGenerator(t,void 0);i===void 0?r!==n&&o.setGenerator(t,n):i===r&&o.setGenerator(t,null)}}}let e=this.zones[0].modulators.map(t=>De.copyFrom(t));for(let t of e){let s=!0;for(let n of this.zones)s&&(n.modulators.find(a=>De.isIdentical(a,t))||(s=!1));if(s){A.addModulators(De.copyFrom(t));for(let n of this.zones){let a=n.modulators.find(r=>De.isIdentical(r,t));a&&a.transformAmount===t.transformAmount&&n.modulators.splice(n.modulators.indexOf(a),1)}}}}write(A,e){y(`%cWriting ${this.name}...`,C.info),Ge(A.pdta,this.name.slice(0,20),20),Ge(A.xdta,this.name.slice(20),20),te(A.pdta,e&65535),te(A.xdta,e>>>16)}},as=20;async function Ri(A,e,t,s,n,a,r){let o=0,i=0,g=[];for(let B of A.samples){s&&a&&await B.compressSample(a),n&&B.setAudioData(B.getAudioData(),B.sampleRate);let h=B.getRawData(!0);o++,await r?.(B.name,o,A.samples.length),y(`%cEncoded sample %c${o}. ${B.name}%c of %c${A.samples.length}%c. Compressed: %c${B.isCompressed}%c.`,C.info,C.recognized,C.info,C.recognized,C.info,B.isCompressed?C.recognized:C.unrecognized,C.info),i+=h.length+(B.isCompressed?0:92),g.push(h)}i%2!==0&&i++;let c=new _(i+as);Ge(c,"LIST"),at(c,i+as-8,4),Ge(c,"sdta"),Ge(c,"smpl"),at(c,i,4);let l=0;for(let[B,h]of A.samples.entries()){let E=g[B];c.set(E,l+as);let m,D;h.isCompressed?(m=l,D=m+E.length):(m=l/2,D=m+E.length/2,l+=92),l+=E.length,e.push(m),t.push(D)}return c}var Fi=class extends Kt{linkedSampleIndex;s16leData;startByteOffset;endByteOffset;sampleID;constructor(A,e,t,s,n,a,r,o,i,g,c,l){let B=(g&16)>0;g&=-17,super(A,a,r,o,g,s-e/2,n-e/2),this.dataOverridden=!1,this.name=A,this.startByteOffset=e,this.endByteOffset=t,this.sampleID=l;let h=c instanceof _?c.currentIndex:0;c instanceof _?B?(this.loopStart+=this.startByteOffset/2,this.loopEnd+=this.startByteOffset/2,this.setCompressedData(c.slice(this.startByteOffset/2+h,this.endByteOffset/2+h))):this.s16leData=c.slice(h+this.startByteOffset,h+this.endByteOffset):this.setAudioData(c.slice(this.startByteOffset/2,this.endByteOffset/2),a),this.linkedSampleIndex=i}getLinkedSample(A){if(this.linkedSample||!this.isLinked)return;let e=A[this.linkedSampleIndex];e?e.linkedSample?(y(`%cInvalid linked sample for ${this.name}: ${e.name} is already linked to ${e.linkedSample.name}`,C.warn),this.unlinkSample()):this.setLinkedSample(e,this.sampleType):(y(`%cInvalid linked sample for ${this.name}. Setting to mono.`,C.warn),this.unlinkSample())}getAudioData(){if(this.audioData)return this.audioData;if(this.isCompressed)return super.getAudioData();if(!this.s16leData)throw console.error(this),new Error("Unexpected lack of audio data.");let A=this.endByteOffset-this.startByteOffset;if(A<1)return se(`Invalid sample ${this.name}! Invalid length: ${A}`),new Float32Array(1);let e=new Float32Array(A/2),t=new Int16Array(this.s16leData.buffer);for(let[s,n]of t.entries())e[s]=n/32768;return this.audioData=e,e}getRawData(A){return this.dataOverridden||this.compressedData?super.getRawData(A):this.s16leData??new Uint8Array(0)}};function an(A,e,t=!0){let s=[],n=0;for(;A.data.length>A.data.currentIndex;){let a=Gi(n,A.data,e);s.push(a),n++}if(s.pop(),t)for(let a of s)a.getLinkedSample(s);return s}function Gi(A,e,t){let s=ue(e,20),n=X(e,4)*2,a=X(e,4)*2,r=X(e,4),o=X(e,4),i=X(e,4),g=e[e.currentIndex++];g>127&&(g=60);let c=ma(e[e.currentIndex++]),l=X(e,2),B=X(e,2);return new Fi(s,n,a,r,o,i,g,c,l,B,t,A)}function Mi(A,e,t){let n=46*(A.samples.length+1),a=new _(n),r=new _(n),o=0;for(let[i,g]of A.samples.entries()){Ge(a,g.name.slice(0,20),20),Ge(r,g.name.slice(20),20);let c=e[i];ge(a,c),r.currentIndex+=4;let l=t[i];ge(a,l),r.currentIndex+=4;let B=g.loopStart+c,h=g.loopEnd+c;g.isCompressed&&(B-=c,h-=c),ge(a,B),ge(a,h),ge(a,g.sampleRate),a[a.currentIndex++]=g.originalKey,a[a.currentIndex++]=g.pitchCorrection,r.currentIndex+=14;let E=g.linkedSample?A.samples.indexOf(g.linkedSample):0;te(a,Math.max(0,E)&65535),te(r,Math.max(0,E)>>16),o=Math.max(o,E);let m=g.sampleType;g.isCompressed&&(m|=16),te(a,m),r.currentIndex+=2}return Ge(a,"EOS",46),Ge(r,"EOS",46),{pdta:N.write("shdr",a),xdta:N.write("shdr",r)}}function rn(A,e=!1){let t=e?A.presets:A.instruments,s=e?"pgen":"igen",n=e?"pmod":"imod",a=e?"pbag":"ibag",r=e?"phdr":"inst",o=e?38:22,i=0,g=new Array,c=0,l=new Array,B=new Array,h=new Array,E=0,m=new Array,D=x=>{g.push(i);let V=x.getWriteGenerators(A);i+=V.length,B.push(...V),l.push(c);let J=x.modulators;c+=J.length,h.push(...J)};for(let x of t){m.push(E),D(x.globalZone);for(let V of x.zones)D(V);E+=x.zones.length+1}B.push(new xe(0,0,!1)),h.push(new ye(0,0,0,0,0)),g.push(i),l.push(c),m.push(E);let f=new _(B.length*4);for(let x of B)x.write(f);let O=new _(h.length*10);for(let x of h)x.write(O);let R=l.length*4,Q={pdta:new _(R),xdta:new _(R)};for(let[x,V]of l.entries()){let J=g[x];te(Q.pdta,J&65535),te(Q.pdta,V&65535),te(Q.xdta,J>>16),te(Q.xdta,V>>16)}let T=(t.length+1)*o,U={pdta:new _(T),xdta:new _(T)};for(let[x,V]of t.entries())V.write(U,m[x]);return e?(Ge(U.pdta,"EOP",20),U.pdta.currentIndex+=4,te(U.pdta,E&65535),U.pdta.currentIndex+=12,Ge(U.xdta,"",20),U.xdta.currentIndex+=4,te(U.xdta,E>>16),U.xdta.currentIndex+=12):(Ge(U.pdta,"EOI",20),te(U.pdta,E&65535),Ge(U.xdta,"",20),te(U.xdta,E>>16)),{writeXdta:Math.max(i,c,E)>65535,gen:{pdta:N.write(s,f),xdta:N.write(n,new _(4))},mod:{pdta:N.write(n,O),xdta:N.write(n,new _(10))},bag:{pdta:N.write(a,Q.pdta),xdta:N.write(a,Q.xdta)},hdr:{pdta:N.write(r,U.pdta),xdta:N.write(r,U.xdta)}}}var ks={compress:!1,compressionFunction:void 0,progressFunction:void 0,writeDefaultModulators:!0,writeExtendedLimits:!0,decompress:!1};async function vi(A,e=ks){let t=Fs(e,ks);if(t?.compress){if(typeof t?.compressionFunction!="function")throw new TypeError("No compression function supplied but compression enabled.");if(t?.decompress)throw new Error("Decompressed and compressed at the same time.")}Je("%cSaving soundbank...",C.info),y(`%cCompression: %c${t?.compress||"false"}%c`,C.info,C.recognized,C.info,C.recognized),je("%cWriting INFO...",C.info);let s=[];A.soundBankInfo.software="SpessaSynth",(t?.compress||A.samples.some(f=>f.isCompressed))&&(A.soundBankInfo.version.major=3,A.soundBankInfo.version.minor=0),t?.decompress&&(A.soundBankInfo.version.major=2,A.soundBankInfo.version.minor=4);let n=(f,O)=>{s.push(N.write(f,BA(O,!0,!0)))},a=new _(4);if(te(a,A.soundBankInfo.version.major),te(a,A.soundBankInfo.version.minor),s.push(N.write("ifil",a)),A.soundBankInfo.romVersion){let f=new _(4);te(f,A.soundBankInfo.romVersion.major),te(f,A.soundBankInfo.romVersion.minor),s.push(N.write("iver",f))}let r=(A.soundBankInfo?.comment??"")+(A.soundBankInfo.subject?`
@@ -16,5 +16,5 @@ Destination: ${this.destinationName}`}write(){let e=new _(12);return te(e,this.s
16
16
  (${e})`,C.warn,C.value,C.unrecognized)}toSFDestination(){let e=this.shortScale;switch(this.destination){default:case G.none:return;case G.pan:return I.pan;case G.gain:return{gen:I.initialAttenuation,newAmount:-e};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-e};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-e};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}}},Aa=class extends _A{connectionBlocks=new Array;mode="dls2";get length(){return this.connectionBlocks.length}copyFrom(A){this.mode=A.mode;for(let e of A.connectionBlocks)this.connectionBlocks.push(At.copyFrom(e))}fromSFZone(A){this.mode="dls2";let e=new Jt;e.copyFrom(A);for(let t of e.generators){let s;switch(t.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 n=e.getGenerator(s,void 0),a=t.generatorValue*-128;if(n===void 0)continue;let r=n-60/128*a;e.setGenerator(t.generatorType,a,!1),e.setGenerator(s,r,!1)}for(let t of e.generators)At.fromSFGenerator(t,this);for(let t of e.modulators)At.fromSFModulator(t,this)}read(A){let e=N.findListType(A,"lart"),t=N.findListType(A,"lar2");if(e)for(this.mode="dls1";e.data.currentIndex<e.data.length;){let s=N.read(e.data);if(s.header!=="art1"&&s.header!=="art2")continue;let n=s.data,a=X(n,4);a!==8&&se(`CbSize in articulation mismatch. Expected 8, got ${a}`);let r=X(n,4);for(let o=0;o<r;o++)this.connectionBlocks.push(At.read(n))}else if(t)for(this.mode="dls2";t.data.currentIndex<t.data.length;){let s=N.read(t.data);if(s.header!=="art1"&&s.header!=="art2")continue;let n=s.data,a=X(n,4);a!==8&&se(`CbSize in articulation mismatch. Expected 8, got ${a}`);let r=X(n,4);for(let o=0;o<r;o++)this.connectionBlocks.push(At.read(n))}}write(){let A=new _(8);ge(A,8),ge(A,this.connectionBlocks.length);let e=this.connectionBlocks.map(s=>s.write()),t=N.writeParts(this.mode==="dls2"?"art2":"art1",[A,...e]);return N.write(this.mode==="dls2"?"lar2":"lart",t,!1,!0)}toSFZone(A){let e=(t,s,n,a)=>{let r=t/-128;if(A.setGenerator(s,r),r<=120){let o=Math.round(.46875*t),i=this.connectionBlocks.find(g=>g.isStaticParameter&&g.destination===a);i&&A.setGenerator(n,o+i.shortScale)}};for(let t of this.connectionBlocks){let s=t.shortScale,n=t.source.source,a=t.control.source,r=t.destination;if(t.isStaticParameter){t.toSFGenerator(A);continue}if(a===Z.none)if(n===Z.keyNum){if(r===G.pitch){A.setGenerator(I.scaleTuning,s/128);continue}if(r===G.modEnvHold||r===G.modEnvDecay||r===G.volEnvHold||r===G.volEnvDecay)continue}else{let o=t.toCombinedSFDestination();if(o){A.setGenerator(o,s);continue}}t.toSFModulator(A)}for(let t of this.connectionBlocks){if(t.source.source!==Z.keyNum)continue;let s=t.shortScale;switch(t.destination){default:case G.volEnvHold:e(s,I.keyNumToVolEnvHold,I.holdVolEnv,G.volEnvHold);break;case G.volEnvDecay:e(s,I.keyNumToVolEnvDecay,I.decayVolEnv,G.volEnvDecay);break;case G.modEnvHold:e(s,I.keyNumToModEnvHold,I.holdModEnv,G.modEnvHold);break;case G.modEnvDecay:e(s,I.keyNumToModEnvDecay,I.decayModEnv,G.modEnvDecay);break}}if(this.mode==="dls1"){A.setGenerator(I.delayVibLFO,A.getGenerator(I.delayModLFO,null)),A.setGenerator(I.freqVibLFO,A.getGenerator(I.freqModLFO,null)),A.setGenerator(I.vibLfoToPitch,A.getGenerator(I.modLfoToPitch,null)),A.setGenerator(I.modLfoToPitch,null);for(let t of A.modulators)t.destination===I.modLfoToPitch&&(t.destination=I.vibLfoToPitch)}}},rs=class kt{channel=1;tableIndex;fusOptions=0;phaseGroup=0;constructor(e){this.tableIndex=e}static copyFrom(e){let t=new kt(e.tableIndex);return t.channel=e.channel,t.phaseGroup=e.phaseGroup,t.fusOptions=e.fusOptions,t}static read(e){let t=X(e.data,2),s=X(e.data,2),n=X(e.data,4),a=new kt(X(e.data,4));return a.channel=n,a.fusOptions=t,a.phaseGroup=s,a}static fromSFZone(e,t){let s=e.indexOf(t.sample);if(s===-1)throw new Error(`Wave link error: Sample ${t.sample.name} does not exist in the sample list.`);let n=new kt(s);switch(t.sample.sampleType){default:case Ne.leftSample:case Ne.monoSample:n.channel=Math.trunc(1);break;case Ne.rightSample:n.channel=2}return n}write(){let e=new _(12);return te(e,this.fusOptions),te(e,this.phaseGroup),ge(e,this.channel),ge(e,this.tableIndex),N.write("wlnk",e)}},Dt=class qA extends _A{articulation=new Aa;keyRange={min:0,max:127};velRange={min:0,max:127};keyGroup=0;fusOptions=0;usLayer=0;waveSample;waveLink;constructor(e,t){super(),this.waveSample=t,this.waveLink=e}static copyFrom(e){let t=new qA(rs.copyFrom(e.waveLink),ZA.copyFrom(e.waveSample));return t.keyGroup=e.keyGroup,t.keyRange={...e.keyRange},t.velRange={...e.velRange},t.usLayer=e.usLayer,t.fusOptions=e.fusOptions,t.articulation.copyFrom(e.articulation),t}static read(e,t){let s=this.verifyAndReadList(t,"rgn ","rgn2"),n=s.find(m=>m.header==="wsmp"),a=n?ZA.read(n):void 0,r=s.find(m=>m.header==="wlnk");if(!r){se("Invalid DLS region: missing 'wlnk' chunk! Discarding...");return}let o=rs.read(r),i=s.find(m=>m.header==="rgnh");if(!i){se("Invalid DLS region: missing 'rgnh' chunk! Discarding...");return}let g=e[o.tableIndex];g||qA.parsingError(`Invalid sample index: ${o.tableIndex}. Samples available: ${e.length}`),a??=g.waveSample;let c=new qA(o,a),l=X(i.data,2),B=X(i.data,2),h=X(i.data,2),E=X(i.data,2);return h===0&&E===0&&(E=127,h=0),c.keyRange.max=B,c.keyRange.min=l,c.velRange.max=E,c.velRange.min=h,c.fusOptions=X(i.data,2),c.keyGroup=X(i.data,2),i.data.length-i.data.currentIndex>=2&&(c.usLayer=X(i.data,2)),c.articulation.read(s),c}static fromSFZone(e,t){let s=ZA.fromSFZone(e),n=new qA(rs.fromSFZone(t,e),s);return n.keyRange.min=Math.max(e.keyRange.min,0),n.keyRange.max=e.keyRange.max,n.velRange.min=Math.max(e.velRange.min,0),n.velRange.max=e.velRange.max,n.keyGroup=e.getGenerator(I.exclusiveClass,0),n.articulation.fromSFZone(e),n}write(){let e=[this.writeHeader(),this.waveSample.write(),this.waveLink.write(),this.articulation.write()];return N.writeParts("rgn2",e,!0)}toSFZone(e,t){let s=t[this.waveLink.tableIndex];s||qA.parsingError(`Invalid sample index: ${this.waveLink.tableIndex}`);let n=e.createZone(s);return n.keyRange=this.keyRange,n.velRange=this.velRange,this.keyRange.max===127&&this.keyRange.min===0&&(n.keyRange.min=-1),this.velRange.max===127&&this.velRange.min===0&&(n.velRange.min=-1),this.keyGroup!==0&&n.setGenerator(I.exclusiveClass,this.keyGroup),this.waveSample.toSFZone(n,s),this.articulation.toSFZone(n),n.generators=n.generators.filter(a=>a.generatorValue!==tA[a.generatorType].def),n}writeHeader(){let e=new _(14);return te(e,Math.max(this.keyRange.min,0)),te(e,this.keyRange.max),te(e,Math.max(this.velRange.min,0)),te(e,this.velRange.max),te(e,this.fusOptions),te(e,this.keyGroup),te(e,this.usLayer),N.write("rgnh",e)}},os=class wt extends _A{articulation=new Aa;regions=new Array;name="Unnamed";bankLSB=0;bankMSB=0;isGMGSDrum=!1;program=0;static copyFrom(e){let t=new wt;t.name=e.name,t.isGMGSDrum=e.isGMGSDrum,t.bankMSB=e.bankMSB,t.bankLSB=e.bankLSB,t.program=e.program,t.articulation.copyFrom(e.articulation);for(let s of e.regions)t.regions.push(Dt.copyFrom(s));return t}static read(e,t){let s=this.verifyAndReadList(t,"ins "),n=s.find(l=>l.header==="insh");if(!n)throw ee(),new Error("No instrument header!");let a="",r=N.findListType(s,"INFO");if(r){let l=N.read(r.data);for(;l.header!=="INAM";)l=N.read(r.data);a=ue(l.data,l.data.length).trim()}a.length===0&&(a="Unnamed Instrument");let o=new wt;o.name=a;let i=X(n.data,4),g=X(n.data,4);o.program=X(n.data,4)&127,o.bankMSB=g>>>8&127,o.bankLSB=g&127,o.isGMGSDrum=g>>>31>0,Je(`%cParsing %c"${a}"%c...`,C.info,C.recognized,C.info);let c=N.findListType(s,"lrgn");if(!c)throw ee(),new Error("No region list!");o.articulation.read(s);for(let l=0;l<i;l++){let B=N.read(c.data);this.verifyHeader(B,"LIST");let h=ue(B.data,4);h!=="rgn "&&h!=="rgn2"&&(ee(),this.parsingError(`Invalid DLS region! Expected "rgn " or "rgn2" got "${h}"`));let E=Dt.read(e,B);E&&o.regions.push(E)}return ee(),o}static fromSFPreset(e,t){let s=new wt;s.name=e.name,s.bankLSB=e.bankLSB,s.bankMSB=e.bankMSB,s.program=e.program,s.isGMGSDrum=e.isGMGSDrum,je(`%cConverting %c${e.toString()}%c to DLS...`,C.info,C.value,C.info);let n=e.toFlattenedInstrument();for(let a of n.zones)s.regions.push(Dt.fromSFZone(a,t));return ee(),s}write(){Je(`%cWriting %c${this.name}%c...`,C.info,C.recognized,C.info);let e=[this.writeHeader()],t=this.regions.map(n=>n.write());e.push(N.writeParts("lrgn",t,!0)),this.articulation.length>0&&e.push(this.articulation.write());let s=N.write("INAM",BA(this.name,!0));return e.push(N.write("INFO",s,!1,!0)),ee(),N.writeParts("ins ",e,!0)}toSFPreset(e){let t=new rt(e);t.name=this.name,t.bankMSB=this.bankMSB,t.bankLSB=this.bankLSB,t.isGMGSDrum=this.isGMGSDrum,t.program=this.program;let s=new ot;s.name=this.name,t.createZone(s),this.articulation.toSFZone(s.globalZone);for(let n of this.regions)n.toSFZone(s,e.samples);s.globalize(),s.globalZone.modulators.some(n=>n.destination===I.reverbEffectsSend)||s.globalZone.addModulators(De.copyFrom(jn)),s.globalZone.modulators.some(n=>n.destination===I.chorusEffectsSend)||s.globalZone.addModulators(De.copyFrom(ea)),s.globalZone.generators=s.globalZone.generators.filter(n=>n.generatorValue!==tA[n.generatorType].def),e.addPresets(t),e.addInstruments(s)}writeHeader(){let e=new _(12);ge(e,this.regions.length);let t=(this.bankMSB&127)<<8|this.bankLSB&127;return this.isGMGSDrum&&(t|=1<<31),ge(e,t),ge(e,this.program&127),N.write("insh",e)}},ta={progressFunction:void 0},sa=class bs extends _A{samples=new Array;instruments=new Array;soundBankInfo={name:"Unnamed",creationDate:new Date,software:"SpessaSynth",soundEngine:"DLS Level 2.2",version:{major:2,minor:4}};static read(e){if(!e)throw new Error("No data provided!");let t=new _(e);je("%cParsing DLS file...",C.info);let s=N.read(t,!1);this.verifyHeader(s,"RIFF"),this.verifyText(ue(t,4).toLowerCase(),"dls ");let n=[];for(;t.currentIndex<t.length;)n.push(N.read(t));let a=new bs;a.soundBankInfo.name="Unnamed DLS",a.soundBankInfo.product="SpessaSynth DLS",a.soundBankInfo.comment="(no description)";let r=N.findListType(n,"INFO");if(r)for(;r.data.currentIndex<r.data.length;){let E=N.read(r.data),m=E.header,D=ue(E.data,E.size);switch(m){case"INAM":a.soundBankInfo.name=D;break;case"ICRD":a.soundBankInfo.creationDate=Ps(D);break;case"ICMT":a.soundBankInfo.comment=D;break;case"ISBJ":a.soundBankInfo.subject=D;break;case"ICOP":a.soundBankInfo.copyright=D;break;case"IENG":a.soundBankInfo.engineer=D;break;case"IPRD":a.soundBankInfo.product=D;break;case"ISFT":a.soundBankInfo.software=D}}this.printInfo(a);let o=n.find(E=>E.header==="colh");if(!o)return this.parsingError("No colh chunk!"),5;let i=X(o.data,4);y(`%cInstruments amount: %c${i}`,C.info,C.recognized);let g=N.findListType(n,"wvpl");if(!g)return this.parsingError("No wvpl chunk!"),5;let c=this.verifyAndReadList(g,"wvpl");for(let E of c)a.samples.push(hn.read(E));let l=N.findListType(n,"lins");if(!l)return this.parsingError("No lins chunk!"),5;let B=this.verifyAndReadList(l,"lins");Je("%cLoading instruments...",C.info),B.length!==i&&se(`Colh reported invalid amount of instruments. Detected ${B.length}, expected ${i}`);for(let E of B)a.instruments.push(os.read(a.samples,E));ee();let h=n.find(E=>E.header==="pgal");if(h){y("%cFound the instrument aliasing chunk!",C.recognized);let E=h.data;(E[0]!==0||E[1]!==1||E[2]!==2||E[3]!==3)&&(E.currentIndex+=4);let m=a.instruments.find(f=>ke.isXGDrums(f.bankMSB)||f.isGMGSDrum);if(!m)return se("MobileBAE aliasing chunk without a drum preset. Aborting!"),a;let D=E.slice(E.currentIndex,E.currentIndex+128);E.currentIndex+=128;for(let f=0;f<128;f++){let O=D[f];if(O===f)continue;let R=m.regions.find(T=>T.keyRange.max===O&&T.keyRange.min===O);if(!R){se(`Invalid drum alias ${f} to ${O}: region does not exist.`);continue}let Q=Dt.copyFrom(R);Q.keyRange.max=f,Q.keyRange.min=f,m.regions.push(Q)}for(E.currentIndex+=4;E.currentIndex<E.length;){let f=X(E,2),O=f&127,R=f>>7&127,Q=E[E.currentIndex++],T=E[E.currentIndex++];T!==0&&se(`Invalid alias byte. Expected 0, got ${T}`);let U=X(E,2),x=U&127,V=U>>7&127,J=E[E.currentIndex++];T=E[E.currentIndex++],T!==0&&se(`Invalid alias header. Expected 0, got ${T}`);let L=a.instruments.find(q=>q.bankLSB===x&&q.bankMSB===V&&q.program===J&&!q.isGMGSDrum);if(!L){se(`Invalid alias. Missing instrument: ${x}:${V}:${J}`);continue}let H=os.copyFrom(L);H.bankMSB=R,H.bankLSB=O,H.program=Q,a.instruments.push(H)}}return y(`%cParsing finished! %c"${a.soundBankInfo.name||"UNNAMED"}"%c has %c${a.instruments.length}%c instruments and %c${a.samples.length}%c samples.`,C.info,C.recognized,C.info,C.recognized,C.info,C.recognized,C.info),ee(),a}static fromSF(e){Je("%cSaving SF2 to DLS level 2...",C.info);let t=new bs;t.soundBankInfo={...e.soundBankInfo},t.soundBankInfo.comment=(t.soundBankInfo.comment??"(No description)")+`
17
17
  Converted from SF2 to DLS with SpessaSynth`;for(let s of e.samples)t.samples.push(hn.fromSFSample(s));for(let s of e.presets)t.instruments.push(os.fromSFPreset(s,e.samples));return y("%cConversion complete!",C.recognized),ee(),t}static printInfo(e){for(let[t,s]of Object.entries(e.soundBankInfo)){if(typeof s=="object"&&"major"in s){let n=s;y(`%c${t}: %c"${n.major}.${n.minor}"`,C.info,C.recognized)}y(`%c${t}: %c${s.toLocaleString()}`,C.info,C.recognized)}}async write(e=ta){Je("%cSaving DLS...",C.info);let t=new _(4);ge(t,this.instruments.length);let s=N.write("colh",t);Je("%cWriting instruments...",C.info);let n=N.writeParts("lins",this.instruments.map(D=>D.write()),!0);y("%cSuccess!",C.recognized),ee(),Je("%cWriting WAVE samples...",C.info);let a=0,r=[],o=[],i=0;for(let D of this.samples){let f=D.write();await e?.progressFunction?.(D.name,i,this.samples.length),r.push(a),a+=f.length,o.push(f),i++}let g=N.writeParts("wvpl",o,!0);y("%cSucceeded!",C.recognized);let c=new _(8+4*r.length);ge(c,8),ge(c,r.length);for(let D of r)ge(c,D);let l=N.write("ptbl",c);this.soundBankInfo.software="SpessaSynth";let B=[],h=(D,f)=>{B.push(N.write(D,BA(f,!0)))};for(let[D,f]of Object.entries(this.soundBankInfo)){let O=D,R=f;if(R)switch(O){case"name":h("INAM",R);break;case"comment":h("ICMT",R);break;case"copyright":h("ICOP",R);break;case"creationDate":h("ICRD",Us(R));break;case"engineer":h("IENG",R);break;case"product":h("IPRD",R);break;case"romVersion":case"version":case"soundEngine":case"romInfo":break;case"software":h("ISFT",R);break;case"subject":h("ISBJ",R)}}let E=N.writeParts("INFO",B,!0);y("%cCombining everything...");let m=N.writeParts("RIFF",[BA("DLS "),s,n,l,g,E]);return y("%cSaved successfully!",C.recognized),ee(),m.buffer}toSF(){je("%cConverting DLS to SF2...",C.info);let e=new na;e.soundBankInfo.version.minor=4,e.soundBankInfo.version.major=2,e.soundBankInfo={...this.soundBankInfo},e.soundBankInfo.comment=(e.soundBankInfo.comment??"(No description)")+`
18
18
  Converted from DLS to SF2 with SpessaSynth`;for(let t of this.samples)t.toSFSample(e);for(let t of this.instruments)t.toSFPreset(e);return e.flush(),y("%cConversion complete!",C.recognized),ee(),e}},na=class bt{static isSF3DecoderReady=qt.isInitialized;soundBankInfo={name:"Unnamed",creationDate:new Date,software:"SpessaSynth",soundEngine:"E-mu 10K2",version:{major:2,minor:4}};presets=[];samples=[];instruments=[];defaultModulators=Zn.map(De.copyFrom.bind(De));customDefaultModulators=!1;_isXGBank=!1;get isXGBank(){return this._isXGBank}static mergeSoundBanks(...e){let t=e.shift();if(!t)throw new Error("No sound banks provided!");let s=t.presets;for(;e.length>0;){let a=e?.shift()?.presets;if(a)for(let r of a)s.some(o=>r.matches(o))||s.push(r)}let n=new bt;return n.addCompletePresets(s),n.soundBankInfo={...t.soundBankInfo},n}static async getSampleSoundBankFile(){let e=new bt,t=new Float32Array(128);for(let r=0;r<128;r++)t[r]=r/128*2-1;let s=new wi;s.name="Saw",s.originalKey=65,s.pitchCorrection=20,s.loopEnd=127,s.setAudioData(t,44100),e.addSamples(s);let n=new ot;n.name="Saw Wave",n.globalZone.addGenerators(new xe(I.initialAttenuation,375),new xe(I.releaseVolEnv,-1e3),new xe(I.sampleModes,1)),n.createZone(s),n.createZone(s).setGenerator(I.fineTune,-9),e.addInstruments(n);let a=new rt(e);return a.name="Saw Wave",a.createZone(n),e.addPresets(a),e.soundBankInfo.name="Dummy",e.flush(),await e.writeSF2()}static copyFrom(e){let t=new bt;for(let s of e.presets)t.clonePreset(s);return t.soundBankInfo={...e.soundBankInfo},t}addCompletePresets(e){this.addPresets(...e);let t=[];for(let n of e)for(let a of n.zones)a.instrument&&!t.includes(a.instrument)&&t.push(a.instrument);this.addInstruments(...t);let s=[];for(let n of t)for(let a of n.zones)a.sample&&!s.includes(a.sample)&&s.push(a.sample);this.addSamples(...s)}async writeDLS(e=ta){return sa.fromSF(this).write(e)}async writeSF2(e=ks){return vi(this,e)}addPresets(...e){this.presets.push(...e)}addInstruments(...e){this.instruments.push(...e)}addSamples(...e){this.samples.push(...e)}cloneSample(e){let t=this.samples.find(n=>n.name===e.name);if(t)return t;let s=new Kt(e.name,e.sampleRate,e.originalKey,e.pitchCorrection,e.sampleType,e.loopStart,e.loopEnd);if(e.isCompressed?s.setCompressedData(e.getRawData(!0)):s.setAudioData(e.getAudioData(),e.sampleRate),this.addSamples(s),e.linkedSample){let n=this.cloneSample(e.linkedSample);n.linkedSample||s.setLinkedSample(n,s.sampleType)}return s}cloneInstrument(e){let t=this.instruments.find(n=>n.name===e.name);if(t)return t;let s=new ot;s.name=e.name,s.globalZone.copyFrom(e.globalZone);for(let n of e.zones)s.createZone(this.cloneSample(n.sample)).copyFrom(n);return this.addInstruments(s),s}clonePreset(e){let t=this.presets.find(n=>n.name===e.name);if(t)return t;let s=new rt(this);s.name=e.name,s.bankMSB=e.bankMSB,s.bankLSB=e.bankLSB,s.isGMGSDrum=e.isGMGSDrum,s.program=e.program,s.library=e.library,s.genre=e.genre,s.morphology=e.morphology,s.globalZone.copyFrom(e.globalZone);for(let n of e.zones)s.createZone(this.cloneInstrument(n.instrument)).copyFrom(n);return this.addPresets(s),s}flush(){this.presets.sort(IA.sorter.bind(IA)),this.parseInternal()}trimSoundBank(e){let t=(n,a)=>{let r=0;for(let o=0;o<n.zones.length;o++){let i=n.zones[o],g=i.keyRange,c=i.velRange,l=!1;for(let B of a)if(B.key>=g.min&&B.key<=g.max&&B.velocity>=c.min&&B.velocity<=c.max){l=!0;break}!l&&i.sample&&(y(`%c${i.sample.name}%c removed from %c${n.name}%c.`,C.recognized,C.info,C.recognized,C.info),n.deleteZone(o)&&(r++,o--,y(`%c${i.sample.name}%c deleted`,C.recognized,C.info)),i.sample.useCount<1&&this.deleteSample(i.sample))}return r};je("%cTrimming sound bank...",C.info);let s=e.getUsedProgramsAndKeys(this);Je("%cModifying sound bank...",C.info),y("Detected keys for midi:",s);for(let n=0;n<this.presets.length;n++){let a=this.presets[n],r=s.get(a);if(r===void 0)y(`%cDeleting preset %c${a.name}%c and its zones`,C.info,C.recognized,C.info),this.deletePreset(a),n--;else{let o=[...r].map(g=>{let c=g.split("-");return{key:Number.parseInt(c[0]),velocity:Number.parseInt(c[1])}});Je(`%cTrimming %c${a.name}`,C.info,C.recognized),y(`Keys for ${a.name}:`,o);let i=0;for(let g=0;g<a.zones.length;g++){let c=a.zones[g],l=c.keyRange,B=c.velRange,h=!1;for(let E of o)if(E.key>=l.min&&E.key<=l.max&&E.velocity>=B.min&&E.velocity<=B.max&&c.instrument){h=!0,y(`%cTrimmed off %c${t(c.instrument,o)}%c zones from %c${c.instrument.name}`,C.info,C.recognized,C.info,C.recognized);break}!h&&c.instrument&&(i++,a.deleteZone(g),c.instrument.useCount<1&&this.deleteInstrument(c.instrument),g--)}y(`%cTrimmed off %c${i}%c zones from %c${a.name}`,C.info,C.recognized,C.info,C.recognized),ee()}}this.removeUnusedElements(),y("%cSound bank modified!",C.recognized),ee(),ee()}removeUnusedElements(){this.instruments=this.instruments.filter(e=>{e.deleteUnusedZones();let t=e.useCount<1;return t&&e.delete(),!t}),this.samples=this.samples.filter(e=>{let t=e.useCount<1;return t&&e.unlinkSample(),!t})}deleteInstrument(e){e.delete(),this.instruments.splice(this.instruments.indexOf(e),1)}deletePreset(e){e.delete(),this.presets.splice(this.presets.indexOf(e),1)}deleteSample(e){e.unlinkSample(),this.samples.splice(this.samples.indexOf(e),1)}getPreset(e,t){return $n(this.presets,e,t)}destroySoundBank(){this.presets.length=0,this.instruments.length=0,this.samples.length=0}parsingError(e){throw new Error(`SF parsing error: ${e} The file may be corrupted.`)}parseInternal(){this._isXGBank=!1;let e=new Set([0,1,2,3,4,5,6,7,8,9,16,17,24,25,26,27,28,29,30,31,32,33,40,41,48,56,57,58,64,65,66,126,127]);for(let t of this.presets)if(ke.isXGDrums(t.bankMSB)&&(this._isXGBank=!0,!e.has(t.program))){this._isXGBank=!1,y(`%cThis bank is not valid XG. Preset %c${t.toString()}%c is not a valid XG drum. XG mode will use presets on bank 128.`,C.info,C.value,C.info);break}}printInfo(){for(let[e,t]of Object.entries(this.soundBankInfo)){if(typeof t=="object"&&"major"in t){let s=t;y(`%c${e}: %c"${s.major}.${s.minor}"`,C.info,C.recognized)}y(`%c${e}: %c${t.toLocaleString()}`,C.info,C.recognized)}}},Pi=class extends xe{constructor(A){let e=A.currentIndex,t=A[e+1]<<8|A[e],s=Rs(A[e+2],A[e+3]);A.currentIndex+=4,super(t,s,!1)}};function gn(A){let e=[];for(;A.data.length>A.data.currentIndex;)e.push(new Pi(A.data));return e.pop(),e}function xi(A,e,t,s,n){let a=A.gen,r=A.mod,o=0,i=0;for(let g of n)for(let c=0;c<g.zonesCount;c++){let l=a[i++],B=a[i],h=e.slice(l,B),E=r[o++],m=r[o],D=t.slice(E,m);h.some(f=>f.generatorType===I.instrument)?g.createSoundFontZone(D,h,s):(g.globalZone.addGenerators(...h),g.globalZone.addModulators(...D))}}var Hi=class extends rt{zoneStartIndex;zonesCount=0;constructor(A,e){super(e),this.name=ue(A.data,20).replace(/\d{3}:\d{3}/,""),this.program=X(A.data,2);let t=X(A.data,2);this.bankMSB=t&127,this.isGMGSDrum=(t&128)>0,this.bankLSB=t>>8,this.zoneStartIndex=X(A.data,2),this.library=X(A.data,4),this.genre=X(A.data,4),this.morphology=X(A.data,4)}createSoundFontZone(A,e,t){let s=e.find(r=>r.generatorType===I.instrument),n;if(s)n=t[s.generatorValue];else throw new Error("No instrument ID found in preset zone.");if(!n)throw new Error(`Invalid instrument ID: ${s.generatorValue}, available instruments: ${t.length}`);let a=new _n(this,n);return a.addGenerators(...e),a.addModulators(...A),this.zones.push(a),a}};function In(A,e){let t=[];for(;A.data.length>A.data.currentIndex;){let s=new Hi(A,e);if(t.length>0){let n=t[t.length-1];n.zonesCount=s.zoneStartIndex-n.zoneStartIndex}t.push(s)}return t.pop(),t}var Oi=class extends ot{zoneStartIndex;zonesCount=0;constructor(A){super(),this.name=ue(A.data,20),this.zoneStartIndex=X(A.data,2)}createSoundFontZone(A,e,t){let s=e.find(r=>r.generatorType===I.sampleID),n;if(s)n=t[s.generatorValue];else throw new Error("No sample ID found in instrument zone.");if(!n)throw new Error(`Invalid sample ID: ${s.generatorValue}, available samples: ${t.length}`);let a=new zn(this,n);return a.addGenerators(...e),a.addModulators(...A),this.zones.push(a),a}};function cn(A){let e=[];for(;A.data.length>A.data.currentIndex;){let t=new Oi(A);if(e.length>0){let s=e[e.length-1];s.zonesCount=t.zoneStartIndex-s.zoneStartIndex}e.push(t)}return e.pop(),e}function hs(A){let e=[];for(;A.data.length>A.data.currentIndex;){let t=A.data,s=X(t,2),n=X(t,2),a=Rs(t[t.currentIndex++],t[t.currentIndex++]),r=X(t,2),o=X(t,2);e.push(new ye(s,r,n,a,o))}return e.pop(),e}function Yi(A,e,t,s,n){let a=A.gen,r=A.mod,o=0,i=0;for(let g of n)for(let c=0;c<g.zonesCount;c++){let l=a[i++],B=a[i],h=e.slice(l,B),E=r[o++],m=r[o],D=t.slice(E,m);h.some(f=>f.generatorType===I.sampleID)?g.createSoundFontZone(D,h,s):(g.globalZone.addGenerators(...h),g.globalZone.addModulators(...D))}}function ut(A){let e=[],t=[];for(;A.data.length>A.data.currentIndex;)t.push(X(A.data,2)),e.push(X(A.data,2));return{mod:e,gen:t}}var qi=class extends na{sampleDataStartIndex=0;constructor(A,e=!0){if(super(),e)throw new Error("Using the constructor directly is deprecated. Use SoundBankLoader.fromArrayBuffer() instead.");let t=new _(A);je("%cParsing a SoundFont2 file...",C.info),t||(ee(),this.parsingError("No data provided!"));let s=N.read(t,!1);this.verifyHeader(s,"riff");let n=ue(t,4).toLowerCase();if(n!=="sfbk"&&n!=="sfpk")throw ee(),new SyntaxError(`Invalid soundFont! Expected "sfbk" or "sfpk" got "${n}"`);let a=n==="sfpk",r=N.read(t);this.verifyHeader(r,"list");let o=ue(r.data,4);if(o!=="INFO")throw ee(),new SyntaxError(`Invalid soundFont! Expected "INFO" or "${o}"`);let i;for(;r.data.length>r.data.currentIndex;){let k=N.read(r.data),p=oA(k.data,k.data.length),P=k.header;switch(P){case"ifil":case"iver":{let K=X(k.data,2),Ce=X(k.data,2);P==="ifil"?this.soundBankInfo.version={major:K,minor:Ce}:this.soundBankInfo.romVersion={major:K,minor:Ce};break}case"DMOD":this.defaultModulators=hs(k),this.customDefaultModulators=!0;break;case"LIST":ue(k.data,4)==="xdta"&&(y("%cExtended SF2 found!",C.recognized),i=k);break;case"ICRD":this.soundBankInfo.creationDate=Ps(ue(k.data,k.data.length));break;case"ISFT":this.soundBankInfo.software=p;break;case"IPRD":this.soundBankInfo.product=p;break;case"IENG":this.soundBankInfo.engineer=p;break;case"ICOP":this.soundBankInfo.copyright=p;break;case"INAM":this.soundBankInfo.name=p;break;case"ICMT":this.soundBankInfo.comment=p;break;case"irom":this.soundBankInfo.romInfo=p;break;case"isng":this.soundBankInfo.soundEngine=p}}this.printInfo();let g={};i!==void 0&&(g.phdr=N.read(i.data),g.pbag=N.read(i.data),g.pmod=N.read(i.data),g.pgen=N.read(i.data),g.inst=N.read(i.data),g.ibag=N.read(i.data),g.imod=N.read(i.data),g.igen=N.read(i.data),g.shdr=N.read(i.data));let c=N.read(t,!1);this.verifyHeader(c,"list"),this.verifyText(ue(t,4),"sdta"),y("%cVerifying smpl chunk...",C.warn);let l=N.read(t,!1);this.verifyHeader(l,"smpl");let B;if(a){y("%cSF2Pack detected, attempting to decode the smpl chunk...",C.info);try{B=qt.decode(t.buffer.slice(t.currentIndex,t.currentIndex+c.size-12)).data[0]}catch(k){throw ee(),new Error(`SF2Pack Ogg Vorbis decode error: ${k}`,{cause:k})}y(`%cDecoded the smpl chunk! Length: %c${B.length}`,C.info,C.value)}else B=t,this.sampleDataStartIndex=t.currentIndex;y(`%cSkipping sample chunk, length: %c${c.size-12}`,C.info,C.value),t.currentIndex+=c.size-12,y("%cLoading preset data chunk...",C.warn);let h=N.read(t);this.verifyHeader(h,"list"),ue(h.data,4);let E=N.read(h.data);this.verifyHeader(E,"phdr");let m=N.read(h.data);this.verifyHeader(m,"pbag");let D=N.read(h.data);this.verifyHeader(D,"pmod");let f=N.read(h.data);this.verifyHeader(f,"pgen");let O=N.read(h.data);this.verifyHeader(O,"inst");let R=N.read(h.data);this.verifyHeader(R,"ibag");let Q=N.read(h.data);this.verifyHeader(Q,"imod");let T=N.read(h.data);this.verifyHeader(T,"igen");let U=N.read(h.data);this.verifyHeader(U,"shdr"),y("%cParsing samples...",C.info),t.currentIndex=this.sampleDataStartIndex;let x=an(U,B,i===void 0);if(i&&g.shdr){let k=an(g.shdr,new Float32Array(1),!1);if(k.length===x.length)for(let[p,P]of x.entries())P.name+=k[p].name,P.linkedSampleIndex|=k[p].linkedSampleIndex<<16}for(let k of x)k.name=k.name.trim();this.samples.push(...x);let V=gn(T),J=hs(Q),L=cn(O);if(i&&g.inst){let k=cn(g.inst);if(k.length===L.length){for(let[p,P]of L.entries())P.name+=k[p].name,P.zoneStartIndex|=k[p].zoneStartIndex<<16;for(let[p,P]of L.entries())p<L.length-1&&(P.zonesCount=L[p+1].zoneStartIndex-P.zoneStartIndex)}}for(let k of L)k.name=k.name.trim();this.instruments.push(...L);let H=ut(R);if(i&&g.ibag){let k=ut(g.ibag);for(let p=0;p<H.mod.length;p++)H.mod[p]|=k.mod[p]<<16;for(let p=0;p<H.gen.length;p++)H.gen[p]|=k.gen[p]<<16}Yi(H,V,J,this.samples,L);let q=gn(f),u=hs(D),v=In(E,this);if(i&&g.phdr){let k=In(g.phdr,this);if(k.length===v.length){for(let[p,P]of v.entries())P.name+=k[p].name,P.zoneStartIndex|=k[p].zoneStartIndex<<16;for(let[p,P]of v.entries())p<v.length-1&&(P.zonesCount=v[p+1].zoneStartIndex-P.zoneStartIndex)}}for(let k of v)k.name=k.name.trim();this.addPresets(...v);let S=ut(m);if(i&&g.pbag){let k=ut(g.pbag);for(let p=0;p<S.mod.length;p++)S.mod[p]|=k.mod[p]<<16;for(let p=0;p<S.gen.length;p++)S.gen[p]|=k.gen[p]<<16}xi(S,q,u,this.instruments,v),this.flush(),y(`%cParsing finished! %c"${this.soundBankInfo.name}"%c has %c${this.presets.length}%c presets,
19
- %c${this.instruments.length}%c instruments and %c${this.samples.length}%c samples.`,C.info,C.recognized,C.info,C.recognized,C.info,C.recognized,C.info,C.recognized,C.info),ee()}verifyHeader(A,e){A.header.toLowerCase()!==e.toLowerCase()&&(ee(),this.parsingError(`Invalid chunk header! Expected "${e.toLowerCase()}" got "${A.header.toLowerCase()}"`))}verifyText(A,e){A.toLowerCase()!==e.toLowerCase()&&(ee(),this.parsingError(`Invalid FourCC: Expected "${e.toLowerCase()}" got "${A.toLowerCase()}"\``))}},ht=class{static fromArrayBuffer(A){return ue(new _(A.slice(8,12)),4).toLowerCase()==="dls "?this.loadDLS(A):new qi(A,!1)}static loadDLS(A){return sa.read(A).toSF()}},Nt=class aa extends De{isEffectModulator;isDefaultResonantModulator;isModWheelModulator;constructor(e,t,s,n,a,r,o,i){super(e,t,s,n,a),this.isEffectModulator=r,this.isDefaultResonantModulator=o,this.isModWheelModulator=i}static fromData(e,t,s,n,a){let r=e.toSourceEnum(),o=t.toSourceEnum();return new aa(e,t,s,n,a,(r===219||r===221)&&o===0&&(s===I.reverbEffectsSend||s===I.chorusEffectsSend),r===Xn&&o===0&&s===I.initialFilterQ,(e.isCC&&e.index===d.modulationWheel||t.isCC&&t.index===d.modulationWheel)&&(s===I.modLfoToPitch||s===I.vibLfoToPitch))}static fromModulator(e){return this.fromData(e.primarySource,e.secondarySource,e.destination,e.transformAmount,e.transformType)}},Ji=class{sampleData;generators;modulators;exclusiveClass;targetKey;velocity;rootKey;loopStart;loopEnd;playbackStep;loopingMode;constructor(A,e,t,s){let n=A.sample,a=A.generators;this.modulators=A.modulators.map(Nt.fromModulator.bind(Nt)),this.generators=a,this.rootKey=n.originalKey,a[I.overridingRootKey]>-1&&(this.rootKey=a[I.overridingRootKey]),this.targetKey=e,a[I.keyNum]>-1&&(this.targetKey=a[I.keyNum]),this.velocity=t,a[I.velocity]>-1&&(this.velocity=a[I.velocity]),this.exclusiveClass=a[I.exclusiveClass],this.loopStart=n.loopStart,this.loopEnd=n.loopEnd,this.sampleData=n.getAudioData(),this.playbackStep=n.sampleRate/s*Math.pow(2,n.pitchCorrection/1200),this.loopingMode=a[I.sampleModes]}},Ki=Math.PI*2;function Vi(A,e,t){if(t<A)return 0;let s=t-A;return Math.sin(Ki*e*s)}var ln=Math.PI/2,Rt=-500,ia=500,Js=ia-Rt,ra=new Float32Array(Js+1),oa=new Float32Array(Js+1);for(let A=Rt;A<=ia;A++){let e=(A-Rt)/Js,t=A-Rt;ra[t]=Math.cos(ln*e),oa[t]=Math.sin(ln*e)}function Xi(A,e,t,s,n,a){if(!A.isInRelease&&e>=A.releaseStartTime&&(A.isInRelease=!0,A.volEnv.startRelease(A),A.modEnv.startRelease(A),A.loopingMode===3&&(A.wavetable.isLooping=!1)),A.hasRendered=!0,!A.isActive)return;let r=this.synthCore,o=r.sampleRate,i=A.modulatedGenerators,g=A.targetKey,c=A.pitchOffset+i[I.fineTune]+this.octaveTuning[A.midiNote]+this.channelTuningCents,l=i[I.coarseTune],B=r.tunings[this.preset.program*128+A.realKey];if(B!==-1&&(g=Math.trunc(B),c+=(B-g)*100),A.portamentoFromKey>-1){let S=Math.min((e-A.startTime)/A.portamentoDuration,1),k=g-A.portamentoFromKey;l-=k*(1-S)}c+=(g-A.rootKey)*i[I.scaleTuning];let h=0,E=0,m=A.gainModifier*(1+i[I.amplitude]/1e3);if(e>=A.vibLfoStartTime){let S=i[I.vibLfoToPitch],k=i[I.vibLfoToFilterFc],p=i[I.vibLfoAmplitudeDepth];if(S!==0||k!==0||p!==0){let P=Math.max(0,us(i[I.freqVibLFO])+i[I.vibLfoRate]/100)*a/o,K=1-4*Math.abs(A.vibLfoPhase-.5);(A.vibLfoPhase+=P)>=1&&(A.vibLfoPhase-=1),c+=K*S,h+=K*k,m*=1-(K+1)/2*(p/1e3)}}if(e>=A.modLfoStartTime){let S=i[I.modLfoToPitch],k=i[I.modLfoToVolume],p=i[I.modLfoToFilterFc],P=i[I.modLfoAmplitudeDepth];if(S!==0||p!==0||k!==0||P!==0){let K=Math.max(0,us(i[I.freqModLFO])+i[I.modLfoRate]/100)*a/o,Ce=1-4*Math.abs(A.modLfoPhase-.5);(A.modLfoPhase+=K)>=1&&(A.modLfoPhase-=1),c+=Ce*S,E+=-Ce*k,h+=Ce*p,m*=1-(Ce+1)/2*(P/1e3)}}this.midiControllers[d.modulationWheel]===0&&this.channelVibrato.depth>0&&(c+=Vi(A.startTime+this.channelVibrato.delay,this.channelVibrato.rate,e)*this.channelVibrato.depth);let D=i[I.modEnvToPitch],f=i[I.modEnvToFilterFc];if(f!==0||D!==0){let S=A.modEnv.process(A,e);h+=S*f,c+=S*D}E-=A.resonanceOffset;let O=c+l*100|0;O!==A.tuningCents&&(A.tuningCents=O,A.tuningRatio=Math.pow(2,O/1200));let R=vt(i[I.initialAttenuation])*vt(E);if(A.loopingMode===2&&!A.isInRelease){A.isActive=A.volEnv.process(a,R);return}let Q=r.voiceBuffer;A.isActive=A.wavetable.process(a,A.tuningRatio,Q);let T=A.volEnv.outputGain,U=A.volEnv.process(a,R),x=(A.volEnv.outputGain-T)/a;{let S=A.filter,k=i[I.initialFilterFc];S.initialized?S.currentInitialFc+=(k-S.currentInitialFc)*Ys.smoothingConstant:(S.initialized=!0,S.currentInitialFc=k);let p=S.currentInitialFc+h,P=i[I.initialFilterQ];if(S.currentInitialFc>13499&&p>13499&&P===0){S.currentInitialFc=13500;for(let K=0;K<a;K++)Q[K]*=T,T+=x}else{(Math.abs(S.lastTargetCutoff-p)>1||S.resonanceCb!==P)&&(S.lastTargetCutoff=p,S.resonanceCb=P,S.calculateCoefficients(p));let{a0:K,a1:Ce,a2:be,a3:Be,a4:ae}=S,{x1:he,x2:j,y1:Y,y2:ne}=S;for(let fe=0;fe<a;fe++){let Me=Q[fe],Ie=K*Me+Ce*he+be*j-Be*Y-ne*ae;j=he,he=Me,ne=Y,Y=Ie,Q[fe]=Ie*T,T+=x}S.x1=he,S.x2=j,S.y1=Y,S.y2=ne}}A.isActive=A.isActive&&U;let V;A.overridePan?V=A.overridePan:(A.currentPan+=(i[I.pan]-A.currentPan)*r.panSmoothingFactor,V=A.currentPan);let J=r.masterParameters.masterGain*r.midiVolume*m,L=V+500|0,H=ra[L]*J*r.panLeft,q=oa[L]*J*r.panRight;if(this.insertionEnabled){let S=r.insertionInputL,k=r.insertionInputR;for(let p=0;p<a;p++){let P=Q[p];S[p]+=H*P,k[p]+=q*P}return}for(let S=0;S<a;S++){let k=Q[S],p=S+n;t[p]+=H*k,s[p]+=q*k}if(!r.enableEffects)return;let u=i[I.reverbEffectsSend]*A.reverbSend;if(u>0){let S=r.masterParameters.reverbGain*J*(u/1e3),k=r.reverbInput;for(let p=0;p<a;p++)k[p]+=S*Q[p]}let v=i[I.chorusEffectsSend]*A.chorusSend;if(v>0){let S=r.masterParameters.chorusGain*(v/1e3)*J,k=r.chorusInput;for(let p=0;p<a;p++)k[p]+=S*Q[p]}if(r.delayActive){let S=this.midiControllers[d.variationDepth]*A.delaySend;if(S>0){let k=J*r.masterParameters.delayGain*((S>>7)/127),p=r.delayInput;for(let P=0;P<a;P++)p[P]+=k*Q[P]}}}var DA={pitchWheelRange:0,fineTuning:1,coarseTuning:2,modulationDepth:5,resetParameters:16383},Te={partParameter:1,drumPitch:24,drumPitchFine:25,drumLevel:26,drumPan:28,drumReverb:29,drumChorus:30,drumDelay:31,awe32:127,SF2:120},kA={vibratoRate:8,vibratoDepth:9,vibratoDelay:10,TVFFilterCutoff:32,TVFFilterResonance:33,EGAttackTime:99,EGDecayTime:100,EGReleaseTime:102},Ue=(A,e,t,s)=>{s.length>0&&(s=" "+s),y(`%c${e} for %c${A}%c is now set to %c${t}%c${s}.`,C.info,C.recognized,C.info,C.value,C.info)},gs=A=>{A.channelVibrato.delay===0&&A.channelVibrato.rate===0&&A.channelVibrato.depth===0&&(A.channelVibrato.depth=50,A.channelVibrato.rate=8,A.channelVibrato.delay=.6)};function Zi(A){switch(this.midiControllers[d.dataEntryMSB]=A<<7,this.dataEntryState){default:case Ve.Idle:break;case Ve.NRPCoarse:case Ve.NRPFine:{let e=this.midiControllers[d.nonRegisteredParameterMSB]>>7,t=this.midiControllers[d.nonRegisteredParameterLSB]>>7,s=this.midiControllers[d.dataEntryLSB]>>7;if(this.synthCore.masterParameters.drumLock&&e>=Te.drumPitch&&e<=Te.drumDelay)return;switch(e){default:if(A===64)return;y(`%cUnrecognized NRPN for %c${this.channel}%c: %c(0x${e.toString(16).toUpperCase()} 0x${t.toString(16).toUpperCase()})%c data value: %c${A}`,C.warn,C.recognized,C.warn,C.unrecognized,C.warn,C.value);break;case Te.partParameter:{let n=this.synthCore.masterParameters.nprnParamLock,a=this.synthCore.masterParameters.customVibratoLock||n;switch(t){default:if(A===64)return;y(`%cUnrecognized NRPN for %c${this.channel}%c: %c(0x${e.toString(16)} 0x${t.toString(16)})%c data value: %c${A}`,C.warn,C.recognized,C.warn,C.unrecognized,C.warn,C.value);break;case kA.vibratoRate:if(this.sysExModulators.active){this.controllerChange(d.vibratoRate,A);return}if(a||A===64)return;gs(this),this.channelVibrato.rate=A/64*8,Ue(this.channel,"Vibrato rate",`${A} = ${this.channelVibrato.rate}`,"Hz");break;case kA.vibratoDepth:if(a||A===64)return;gs(this),this.channelVibrato.depth=A/2,Ue(this.channel,"Vibrato depth",`${A} = ${this.channelVibrato.depth}`,"cents of detune");break;case kA.vibratoDelay:if(a||A===64)return;gs(this),this.channelVibrato.delay=A/64/3,Ue(this.channel,"Vibrato delay",`${A} = ${this.channelVibrato.delay}`,"seconds");break;case kA.TVFFilterCutoff:if(n)return;this.controllerChange(d.brightness,A),Ue(this.channel,"Filter cutoff",A.toString(),"");break;case kA.TVFFilterResonance:if(n)return;this.controllerChange(d.filterResonance,A),Ue(this.channel,"Filter resonance",A.toString(),"");break;case kA.EGAttackTime:if(n)return;this.controllerChange(d.attackTime,A),Ue(this.channel,"EG attack time",A.toString(),"");break;case kA.EGDecayTime:if(n)return;this.controllerChange(d.decayTime,A),Ue(this.channel,"EG decay time",A.toString(),"");break;case kA.EGReleaseTime:if(n)return;this.controllerChange(d.releaseTime,A),Ue(this.channel,"EG release time",A.toString(),"");break}break}case Te.drumPitch:{let n=this.channelSystem==="xg"||this.patch.bankLSB===1?(A-64)*100:(A-64)*50;this.drumParams[t].pitch=n,Ue(this.channel,`Drum ${t} pitch`,n,"cents");break}case Te.drumPitchFine:{let n=A-64;this.drumParams[t].pitch+=n,Ue(this.channel,`Drum ${t} pitch fine`,this.drumParams[t].pitch,"cents");break}case Te.drumLevel:this.drumParams[t].gain=A/120,Ue(this.channel,`Drum ${t} level`,A,"");break;case Te.drumPan:this.drumParams[t].pan=A,Ue(this.channel,`Drum ${t} pan`,A,"");break;case Te.drumReverb:this.drumParams[t].reverbGain=A/127,Ue(this.channel,`Drum ${t} reverb level`,A,"");break;case Te.drumChorus:this.drumParams[t].chorusGain=A/127,Ue(this.channel,`Drum ${t} chorus level`,A,"");break;case Te.drumDelay:this.drumParams[t].delayGain=A/127,Ue(this.channel,`Drum ${t} delay level`,A,"");break;case Te.awe32:break;case Te.SF2:{if(t>100)break;let n=this.customControllers[oe.sf2NPRNGeneratorLSB],a=(A<<7|s)-8192;this.setGeneratorOffset(n,a);break}}break}case Ve.RPCoarse:case Ve.RPFine:{let e=this.midiControllers[d.registeredParameterMSB]|this.midiControllers[d.registeredParameterLSB]>>7;switch(e){default:y(`%cUnrecognized RPN for %c${this.channel}%c: %c(0x${e.toString(16)})%c data value: %c${A}`,C.warn,C.recognized,C.warn,C.unrecognized,C.warn,C.value);break;case DA.pitchWheelRange:this.midiControllers[128+Ae.pitchWheelRange]=A<<7,Ue(this.channel,"Pitch wheel range",A.toString(),"semitones");break;case DA.coarseTuning:{let t=A-64;this.setCustomController(oe.channelTuningSemitones,t),Ue(this.channel,"Coarse tuning",t.toString(),"semitones");break}case DA.fineTuning:this.setTuning(A-64,!1);break;case DA.modulationDepth:this.setModulationDepth(A*100);break;case DA.resetParameters:this.resetParameters();break}}}}var Wi=[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],QA=(A,e,t)=>Math.max(e,Math.min(t,A)),mt=A=>Math.max(-32768,1200*Math.log2(A/1e3)),zi=A=>6900+1200*Math.log2(A/440);function _i(A,e,t){let s=t<<7|e;s-=8192;let n=Wi[A];n||se(`Invalid AWE32 LSB: %c${A}`,C.unrecognized);let a,r,o,i;switch(n){default:break;case I.delayModLFO:case I.delayVibLFO:case I.delayVolEnv:case I.delayModEnv:a=4*QA(s,0,5900),this.setGeneratorOverride(n,mt(a));break;case I.attackVolEnv:case I.attackModEnv:a=QA(s,0,5940),this.setGeneratorOverride(n,mt(a));break;case I.holdVolEnv:case I.holdModEnv:a=QA(s,0,8191),this.setGeneratorOverride(n,mt(a));break;case I.decayModEnv:case I.decayVolEnv:case I.releaseVolEnv:case I.releaseModEnv:a=4*QA(s,0,5940),this.setGeneratorOverride(n,mt(a));break;case I.freqVibLFO:case I.freqModLFO:r=.084*e,this.setGeneratorOverride(n,zi(r),!0);break;case I.sustainVolEnv:case I.sustainModEnv:o=e*7.5,this.setGeneratorOverride(n,o);break;case I.fineTune:this.setGeneratorOverride(n,s,!0);break;case I.modLfoToPitch:case I.vibLfoToPitch:i=QA(s,-127,127)*9.375,this.setGeneratorOverride(n,i,!0);break;case I.modEnvToPitch:i=QA(s,-127,127)*9.375,this.setGeneratorOverride(n,i);break;case I.modLfoToVolume:o=1.875*e,this.setGeneratorOverride(n,o,!0);break;case I.initialFilterFc:{let g=4335+59*e;this.setGeneratorOverride(n,g,!0);break}case I.initialFilterQ:o=215*(e/127),this.setGeneratorOverride(n,o,!0);break;case I.modLfoToFilterFc:i=QA(s,-64,63)*56.25,this.setGeneratorOverride(n,i,!0);break;case I.modEnvToFilterFc:i=QA(s,-64,63)*56.25,this.setGeneratorOverride(n,i);break;case I.chorusEffectsSend:case I.reverbEffectsSend:this.setGeneratorOverride(n,QA(s,0,255)*(1e3/255));break}}function $i(A){switch(this.midiControllers[d.dataEntryLSB]=A<<7,this.dataEntryState){default:break;case Ve.RPCoarse:case Ve.RPFine:{let e=this.midiControllers[d.registeredParameterMSB]|this.midiControllers[d.registeredParameterLSB]>>7;switch(e){default:y(`%cUnrecognized RPN LSB for %c${this.channel}%c: %c(0x${e.toString(16)})%c data value: %c${A}`,C.warn,C.recognized,C.warn,C.unrecognized,C.warn,C.value);break;case DA.pitchWheelRange:{if(A===0)break;this.midiControllers[128+Ae.pitchWheelRange]|=A;let t=(this.midiControllers[128+Ae.pitchWheelRange]>>7)+A/128;y(`%cChannel ${this.channel} pitch wheel range. Semitones: %c${t}`,C.info,C.value);break}case DA.fineTuning:{let t=this.customControllers[oe.channelTuning]<<7|A;this.setTuning(t*.01220703125);break}case DA.modulationDepth:{let t=this.customControllers[oe.modulationMultiplier]*50+A/128*100;this.setModulationDepth(t);break}case 16383:this.resetParameters();break}break}case Ve.NRPFine:{let e=this.midiControllers[d.nonRegisteredParameterMSB]>>7,t=this.midiControllers[d.nonRegisteredParameterLSB]>>7;if(e===Te.SF2||e>=Te.drumPitch&&t<=Te.drumDelay||e===Te.partParameter)return;e===Te.awe32?_i.call(this,t,A,this.midiControllers[d.dataEntryMSB]>>7):y(`%cUnrecognized NRPN LSB for %c${this.channel}%c: %c(0x${e.toString(16).toUpperCase()} 0x${t.toString(16).toUpperCase()})%c data value: %c${A}`,C.warn,C.recognized,C.warn,C.unrecognized,C.warn,C.value)}}}function ji(A,e,t=!0){if(A>127)throw new Error("Invalid MIDI Controller.");if(A>=d.modulationWheelLSB&&A<=d.effectControl2LSB&&A!==d.dataEntryLSB){let s=A-32;if(this.lockedControllers[s])return;this.midiControllers[s]=this.midiControllers[s]&16256|e&127,this.computeModulatorsAll(1,s)}if(!this.lockedControllers[A]){switch(this.midiControllers[A]=e<<7,A){case d.omniModeOff:case d.omniModeOn:case d.allNotesOff:this.stopAllNotes();break;case d.allSoundOff:this.stopAllNotes(!0);break;case d.polyModeOn:this.stopAllNotes(!0),this.polyMode=!0;break;case d.monoModeOn:this.stopAllNotes(!0),this.polyMode=!1;break;case d.bankSelect:this.setBankMSB(e),this.channel%16===9&&ke.isSystemXG(this.channelSystem)&&this.setBankMSB(127);break;case d.bankSelectLSB:this.setBankLSB(e);break;case d.variationDepth:this.synthCore.delayActive=!0;break;case d.registeredParameterLSB:this.dataEntryState=Ve.RPFine;break;case d.registeredParameterMSB:this.dataEntryState=Ve.RPCoarse;break;case d.nonRegisteredParameterMSB:this.customControllers[oe.sf2NPRNGeneratorLSB]=0,this.dataEntryState=Ve.NRPCoarse;break;case d.nonRegisteredParameterLSB:if(this.midiControllers[d.nonRegisteredParameterMSB]>>7===Te.SF2)switch(this.customControllers[oe.sf2NPRNGeneratorLSB]%100!==0&&(this.customControllers[oe.sf2NPRNGeneratorLSB]=0),e){case 100:this.customControllers[oe.sf2NPRNGeneratorLSB]+=100;break;case 101:this.customControllers[oe.sf2NPRNGeneratorLSB]+=1e3;break;case 102:this.customControllers[oe.sf2NPRNGeneratorLSB]+=1e4;break;default:e<100&&(this.customControllers[oe.sf2NPRNGeneratorLSB]+=e)}this.dataEntryState=Ve.NRPFine;break;case d.dataEntryMSB:this.dataEntryCoarse(e);break;case d.dataEntryLSB:this.dataEntryFine(e);break;case d.resetAllControllers:this.resetControllersRP15Compliant();break;case d.sustainPedal:if(e<64){let s=0;if(this.voiceCount>0){for(let n of this.synthCore.voices)if(n.channel===this.channel&&n.isActive&&n.isHeld&&(n.isHeld=!1,n.releaseVoice(this.synthCore.currentTime),++s>=this.voiceCount))break}}break;default:this.computeModulatorsAll(1,A);break}t&&this.synthCore.callEvent("controllerChange",{channel:this.channel,controllerNumber:A,controllerValue:e})}}var er=40;function Ar(A){if(A<1)return 0;{let e=[1,2,4,8,16,32,64,80,96,112,120,124],t=[1,.5,.25,.125,.0625,.03125,.0625,.0625,.0625,.125,.25,1/3],s=[-.16653127382501215,.11863875218299408,.029479047361245264,-.005442312089231738,.1451520875973037,-.005056281449558275,-.005095486882876532,.03334009551111544,-.09361368678020432,.14132569702451822,-.15805565301011382,-.09918856955881927],n=[.028212773333433472,-.3388502064992847,-.15839529890929713,-.12398131766775483,-.2874848552685111,.012254866302537692,.005957797193345771,-.03745899330347374,.12911781869810196,-.15867193224162568,.504406322732748,.3786845131875458],a=[.7218950861255283,.5574536226347168,.47133893237025826,.48597095327079914,.44336276333518854,.6076986311801551,.30851975971827794,.30514889345633955,.3302511933827384,.153822885219165,.1302280559047337,.49865530675491687],r=[-2.2218487496163566,-1.6382721639824072,-1.3010299956639813,-.958607314841775,-.6020599913279624,-.3010299956639812,.31386722036915343,.6232492903979004,.9242792860618817,1.290034611362518,1.4265112613645752,1.9030899869919435],o=[2,4,8,16,32,64,80,96,112,120,124],i=-1;for(let c=o.length-1;c>=0;c--)if(o[c]<A){i=c;break}i+=1;let g=(A-e[i])*t[i];return Math.exp(2.302585092994046*(((s[i]*g+n[i])*g+a[i])*g+r[i]))/er}}function tr(A,e){return Ar(A)*e}var pt=(A,e,t)=>Math.max(e,Math.min(t,A));function sr(A,e){if(e<1){this.noteOff(A);return}if(e=Math.min(127,e),this.synthCore.masterParameters.blackMIDIMode&&this.synthCore.voiceCount>200&&e<40||this.synthCore.masterParameters.blackMIDIMode&&e<10||this._isMuted||!this.preset)return;let t=A+this.keyShift+this.customControllers[oe.channelKeyShift],s=t;if(t>127||t<0)return;let n=this.preset.program,a=this.synthCore.tunings[n*128+t];a>=0&&(s=Math.trunc(a)),(this.synthCore.masterParameters.monophonicRetriggerMode||this.assignMode===0)&&this.killNote(A);let r=this.synthCore.keyModifierManager.getVelocity(this.channel,t);r>-1&&(e=r);let o=this.synthCore.keyModifierManager.getGain(this.channel,t),i=-1,g=0,c=this.midiControllers[d.portamentoTime]>>7,l=this.midiControllers[d.portamentoControl]>>7;if(!this.drumChannel&&l!==s&&this.midiControllers[d.portamentoOnOff]>=8192&&c>0&&(l>0&&(g=tr(c,Math.abs(s-l)),i=l),this.controllerChange(d.portamentoControl,s)),!this.polyMode){let R=0;if(this.voiceCount>0){for(let Q of this.synthCore.voices)if(Q.isActive&&Q.channel===this.channel&&(Q.exclusiveRelease(this.synthCore.currentTime,0),++R>=this.voiceCount))break}}let B=this.synthCore.getVoices(this.channel,s,e),h=0,E=0,m=0,D=1,f=1,O=1;if(this.randomPan&&(h=Math.round(Math.random()*1e3-500)),this.drumChannel){let R=this.drumParams[s];if(!R.rxNoteOn)return;let Q=R.pan;if(Q!==64){let T=Math.max(-63,Math.min(Q-64+((this.midiControllers[d.pan]>>7)-64),63))||1;h=Q===0?Math.round(Math.random()*1e3-500):T/63*500}m=R.pitch,E=R.exclusiveClass,D=R.reverbGain,f=R.chorusGain,O=R.delayGain,o===1&&(o=R.gain)}for(let R of B){let Q=this.synthCore.assignVoice(),T=this.synthCore.currentTime;if(Q.setup(T,this.channel,s,e,t),Q.wavetable=Q.oscillators[this.synthCore.masterParameters.interpolationType],Q.generators.set(R.generators),Q.exclusiveClass=E||R.exclusiveClass,Q.rootKey=R.rootKey,Q.loopingMode=R.loopingMode,Q.wavetable.sampleData=R.sampleData,Q.wavetable.playbackStep=R.playbackStep,Q.targetKey=R.targetKey,this.sysExModulators.active){Q.modulators=[...R.modulators];for(let H of this.sysExModulators.modulatorList){let q=Q.modulators.findIndex(u=>De.isIdentical(u,H.mod));q===-1?Q.modulators.push(H.mod):Q.modulators[q]=H.mod}}else Q.modulators=R.modulators;if(Q.modulators.length>Q.modulatorValues.length&&(se(`${Q.modulators.length} modulators! Increasing modulatorValues table.`),Q.modulatorValues=new Int16Array(Q.modulators.length)),this.generatorOverridesEnabled)for(let[H,q]of this.generatorOverrides.entries())q!==32767&&(Q.generators[H]=q);if(Q.exclusiveClass!==0&&this.polyMode){let H=0;if(this.voiceCount>0){for(let q of this.synthCore.voices)if(q.isActive&&q.channel===this.channel&&q.exclusiveClass===Q.exclusiveClass&&q.hasRendered&&(q.exclusiveRelease(this.synthCore.currentTime),++H>=this.voiceCount))break}}this.computeModulators(Q),Q.volEnv.init(Q),Q.modEnv.init(Q),Q.filter.init(),Q.vibLfoStartTime=T+Gt(Q.modulatedGenerators[I.delayVibLFO]),Q.modLfoStartTime=T+Gt(Q.modulatedGenerators[I.delayModLFO]);let U=Q.modulatedGenerators[I.startAddrsOffset]+Q.modulatedGenerators[I.startAddrsCoarseOffset]*32768,x=Q.modulatedGenerators[I.endAddrOffset]+Q.modulatedGenerators[I.endAddrsCoarseOffset]*32768,V=Q.modulatedGenerators[I.startloopAddrsOffset]+Q.modulatedGenerators[I.startloopAddrsCoarseOffset]*32768,J=Q.modulatedGenerators[I.endloopAddrsOffset]+Q.modulatedGenerators[I.endloopAddrsCoarseOffset]*32768,L=R.sampleData.length-1;if(Q.wavetable.cursor=pt(U,0,L),Q.wavetable.end=pt(L+x,0,L),Q.wavetable.loopStart=pt(R.loopStart+V,0,L),Q.wavetable.loopEnd=pt(R.loopEnd+J,0,L),Q.wavetable.loopEnd<Q.wavetable.loopStart){let H=Q.wavetable.loopStart;Q.wavetable.loopStart=Q.wavetable.loopEnd,Q.wavetable.loopEnd=H}Q.wavetable.loopEnd-Q.wavetable.loopStart<1&&(Q.loopingMode===1||Q.loopingMode===3)&&(Q.loopingMode=0),Q.wavetable.loopLength=Q.wavetable.loopEnd-Q.wavetable.loopStart,Q.wavetable.isLooping=Q.loopingMode===1||Q.loopingMode===3,Q.portamentoFromKey=i,Q.portamentoDuration=g,Q.overridePan=h,Q.gainModifier=o,Q.pitchOffset=m,Q.reverbSend=D,Q.chorusSend=f,Q.delaySend=O,Q.currentPan=Math.max(-500,Math.min(500,h||Q.modulatedGenerators[I.pan]))}this.voiceCount+=B.length,this.sendChannelProperty(),this.synthCore.callEvent("noteOn",{midiNote:A,channel:this.channel,velocity:e})}function nr(A){if(A>127||A<0){se("Received a noteOn for note",A,"Ignoring.");return}let e=A+this.keyShift+this.customControllers[oe.channelKeyShift];if(this.synthCore.masterParameters.blackMIDIMode&&!this.drumChannel||this.drumChannel&&this.drumParams[e].rxNoteOff){this.killNote(e),this.synthCore.callEvent("noteOff",{midiNote:A,channel:this.channel});return}let t=this.midiControllers[d.sustainPedal]>=8192,s=0;if(this.voiceCount>0){for(let n of this.synthCore.voices)if(n.channel===this.channel&&n.isActive&&n.realKey===e&&!n.isInRelease&&(t?n.isHeld=!0:n.releaseVoice(this.synthCore.currentTime),++s>=this.voiceCount))break}this.synthCore.callEvent("noteOff",{midiNote:A,channel:this.channel})}function ar(A){if(this.lockPreset)return;this.patch.program=A;let e=this.synthCore.soundBankManager.getPreset(this.patch,this.channelSystem);!e&&(e=this.synthCore.missingPresetHandler(this.patch,this.channelSystem),!e)||(this.preset=e,e.isAnyDrums!==this.drumChannel&&this.setDrumFlag(e.isAnyDrums),this.resetDrumParams(),this.synthCore.callEvent("programChange",{channel:this.channel,bankLSB:this.preset.bankLSB,bankMSB:this.preset.bankMSB,program:this.preset.program,isGMGSDrum:this.preset.isGMGSDrum}),this.sendChannelProperty())}function $e(A,e,t,s){y(`%cChannel %c${A}%c ${t} is now set to %c${e} ${s}.`,C.info,C.recognized,C.info,C.value)}function Oe(A,e){y(`%cUnrecognized %c${e} %cSysEx: %c${Pt(A)}`,C.warn,C.recognized,C.warn,C.unrecognized)}var ir=[Nt.fromModulator(new ye(AA(Qe.linear,!0,!1,!0,d.vibratoRate),0,I.vibLfoRate,1e3,0))],rr=class{modulatorList=[];active=!1;channelNumber;constructor(A){this.channelNumber=A}resetModulators(){this.modulatorList=ir.map(A=>({mod:A,id:this.getModulatorID(A.primarySource.toSourceEnum(),A.destination,A.primarySource.isBipolar,A.primarySource.isNegative)})),this.active=!1}setupReceiver(A,e,t,s,n=!1){this.active=!0;let a=e-64,r=a/64,o=e/127;switch(A&15){case 0:this.setModulator(t,I.fineTune,a*100,n),$e(this.channelNumber,a,`${s} pitch control`,"semitones");break;case 1:this.setModulator(t,I.initialFilterFc,r*9600,n),$e(this.channelNumber,r*9600,`${s} filter control`,"cents");break;case 2:this.setModulator(t,I.amplitude,r*1e3,n),$e(this.channelNumber,r*100,`${s} amplitude`,"%");break;case 3:this.setModulator(t,I.vibLfoRate,r*1e3,n),$e(this.channelNumber,r*10,`${s} LFO1 rate`,"Hz");break;case 4:this.setModulator(t,I.vibLfoToPitch,o*600,n),$e(this.channelNumber,o*600,`${s} LFO1 pitch depth`,"cents");break;case 5:this.setModulator(t,I.vibLfoToFilterFc,o*2400,n),$e(this.channelNumber,o*2400,`${s} LFO1 filter depth`,"cents");break;case 6:this.setModulator(t,I.vibLfoAmplitudeDepth,o*1e3,n),$e(this.channelNumber,o*100,`${s} LFO1 amplitude depth`,"%");break;case 7:this.setModulator(t,I.modLfoRate,r*1e3,n),$e(this.channelNumber,r*10,`${s} LFO2 rate`,"Hz");break;case 8:this.setModulator(t,I.modLfoToPitch,o*600,n),$e(this.channelNumber,o*600,`${s} LFO2 pitch depth`,"cents");break;case 9:this.setModulator(t,I.modLfoToFilterFc,o*2400,n),$e(this.channelNumber,o*2400,`${s} LFO2 filter depth`,"cents");break;case 10:this.setModulator(t,I.modLfoAmplitudeDepth,o*1e3,n),$e(this.channelNumber,o*100,`${s} LFO2 amplitude depth`,"%");break}}setModulator(A,e,t,s=!1,n=!1){let a=this.getModulatorID(A,e,s,n);t===0&&this.deleteModulator(a);let r=this.modulatorList.find(o=>o.id===a);if(r)r.mod.transformAmount=t;else{let o,i;A>=128?(o=A-128,i=!1):(o=A,i=!0);let g=Nt.fromData(new hA(o,Qe.linear,i,s),new hA,e,t,0);this.modulatorList.push({mod:g,id:a})}}getModulatorID(A,e,t,s){return`${A}-${e}-${t}-${s}`}deleteModulator(A){this.modulatorList=this.modulatorList.filter(e=>e.id!==A)}},or=1e3/200;function hr(A,e,t){let s=A.modulators[t];if(s.transformAmount===0)return A.modulatorValues[t]=0,0;let n=s.primarySource.getValue(this.midiControllers,e,A),a=s.secondarySource.getValue(this.midiControllers,e,A),r=s.transformAmount;s.isEffectModulator&&r<=1e3&&(r*=or,r=Math.min(r,1e3));let o=n*a*r;return s.transformType===2&&(o=Math.abs(o)),s.isDefaultResonantModulator&&(A.resonanceOffset=Math.max(0,o/2)),s.isModWheelModulator&&(o*=this.customControllers[oe.modulationMultiplier]),A.modulatorValues[t]=o,o}function gr(A,e=-1,t=0){let s=A.modulators,n=A.generators;if(this.generatorOffsetsEnabled){n=new Int16Array(n);for(let i=0;i<n.length;i++)n[i]+=this.generatorOffsets[i]}let a=A.modulatedGenerators,r=this.perNotePitch?this.pitchWheels[A.realKey]:this.midiControllers[Ae.pitchWheel+128];if(e===-1){a.set(n);for(let i=0;i<s.length;i++){let g=s[i];a[g.destination]=Math.min(32767,Math.max(-32768,a[g.destination]+this.computeModulator(A,r,i)))}for(let i=0;i<a.length;i++){let g=tA[i];g&&(a[i]=Math.min(g.max,Math.max(g.min,a[i])))}return}let o=!!e;for(let i=0;i<s.length;i++){let g=s[i];if(g.primarySource.isCC===o&&g.primarySource.index===t||g.secondarySource.isCC===o&&g.secondarySource.index===t){let c=g.destination,l=n[c];this.computeModulator(A,r,i);for(let h=0;h<s.length;h++)s[h].destination===c&&(l+=A.modulatorValues[h]);let B=tA[c];a[c]=Math.max(B.min,Math.min(l,B.max))}}}var Ir=class{midiControllers=new Int16Array(147);pitchWheels=new Int16Array(128).fill(8192);lockedControllers=new Array(147).fill(!1);customControllers=new Float32Array(Pn);octaveTuning=new Int8Array(128);drumParams=[];sysExModulators;keyShift=0;drumChannel=!1;randomPan=!1;assignMode=2;insertionEnabled=!1;cc1=16;cc2=17;drumMap=0;dataEntryState=Ve.Idle;patch={bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1};preset;lockPreset=!1;lockedSystem="gs";channelVibrato={delay:0,depth:0,rate:0};polyMode=!0;voiceCount=0;channel;rxChannel;synthCore;noteOn=sr.bind(this);noteOff=nr.bind(this);programChange=ar.bind(this);controllerChange=ji.bind(this);resetControllers=oi.bind(this);resetPreset=hi.bind(this);resetControllersRP15Compliant=gi.bind(this);resetParameters=Ii.bind(this);dataEntryFine=$i.bind(this);dataEntryCoarse=Zi.bind(this);renderVoice=Xi.bind(this);perNotePitch=!1;channelTuningCents=0;generatorOffsets=new Int16Array(WA);generatorOffsetsEnabled=!1;generatorOverrides=new Int16Array(WA);generatorOverridesEnabled=!1;computeModulator=hr.bind(this);computeModulators=gr.bind(this);previousVoiceCount=0;constructor(A,e,t){this.synthCore=A,this.preset=e,this.channel=t,this.rxChannel=t,this.sysExModulators=new rr(t),this.resetGeneratorOverrides(),this.resetGeneratorOffsets();for(let s=0;s<128;s++)this.drumParams.push(new Bs);this.resetDrumParams(),this.resetVibratoParams()}_isMuted=!1;get isMuted(){return this._isMuted}get channelSystem(){return this.lockPreset?this.lockedSystem:this.synthCore.masterParameters.midiSystem}clearVoiceCount(){this.previousVoiceCount=this.voiceCount,this.voiceCount=0}updateVoiceCount(){this.voiceCount!==this.previousVoiceCount&&this.sendChannelProperty()}transposeChannel(A,e=!1){this.drumChannel||(A+=this.synthCore.masterParameters.transposition);let t=Math.trunc(A),s=this.keyShift+this.customControllers[oe.channelTransposeFine]/100;this.drumChannel&&!e||A===s||(t!==this.keyShift&&this.stopAllNotes(),this.keyShift=t,this.setCustomController(oe.channelTransposeFine,(A-t)*100),this.sendChannelProperty())}setOctaveTuning(A){if(A.length!==12)throw new Error("Tuning is not the length of 12.");for(let e=0;e<128;e++)this.octaveTuning[e]=A[e%12]}setModulationDepth(A){A=Math.round(A),y(`%cChannel ${this.channel} modulation depth. Cents: %c${A}`,C.info,C.value),this.setCustomController(oe.modulationMultiplier,A/50)}setTuning(A,e=!0){A=Math.round(A),this.setCustomController(oe.channelTuning,A),e&&y(`%cFine tuning for %c${this.channel}%c is now set to %c${A}%c cents.`,C.info,C.recognized,C.info,C.value,C.info)}pitchWheel(A,e=-1){if(!this.lockedControllers[128+Ae.pitchWheel]){if(e===-1)this.perNotePitch=!1,this.midiControllers[128+Ae.pitchWheel]=A,this.computeModulatorsAll(0,Ae.pitchWheel),this.sendChannelProperty();else{this.perNotePitch||this.pitchWheels.fill(this.midiControllers[128+Ae.pitchWheel]),this.perNotePitch=!0,this.pitchWheels[e]=A;let t=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.isActive&&s.channel===this.channel&&s.midiNote===e&&(this.computeModulators(s,0,Ae.polyPressure),++t>=this.voiceCount))break}}this.synthCore.callEvent("pitchWheel",{channel:this.channel,pitch:A,midiNote:e})}}channelPressure(A){this.midiControllers[128+Ae.channelPressure]=A<<7,this.updateChannelTuning(),this.computeModulatorsAll(0,Ae.channelPressure),this.synthCore.callEvent("channelPressure",{channel:this.channel,pressure:A})}polyPressure(A,e){let t=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.isActive&&s.channel===this.channel&&s.midiNote===A&&(s.pressure=e,this.computeModulators(s,0,Ae.polyPressure),++t>=this.voiceCount))break}this.synthCore.callEvent("polyPressure",{channel:this.channel,midiNote:A,pressure:e})}setCustomController(A,e){this.customControllers[A]=e,this.updateChannelTuning()}updateChannelTuning(){this.channelTuningCents=this.customControllers[oe.channelTuning]+this.customControllers[oe.channelTransposeFine]+this.customControllers[oe.masterTuning]+this.customControllers[oe.channelTuningSemitones]*100}setPresetLock(A){this.lockPreset!==A&&(this.lockPreset=A,A&&(this.lockedSystem=this.synthCore.masterParameters.midiSystem))}setDrums(A){if(ke.isSystemXG(this.channelSystem))if(A)this.setBankMSB(ke.getDrumBank(this.channelSystem)),this.setBankLSB(0);else{if(this.channel%16===9)throw new Error(`Cannot disable drums on channel ${this.channel} for XG.`);this.setBankMSB(0),this.setBankLSB(0)}else this.setGSDrums(A);this.setDrumFlag(A),this.programChange(this.patch.program)}setPatch(A){this.setBankMSB(A.bankMSB),this.setBankLSB(A.bankLSB),this.setGSDrums(A.isGMGSDrum),this.programChange(A.program)}setGSDrums(A){A!==this.patch.isGMGSDrum&&(this.setBankLSB(0),this.setBankMSB(0),this.patch.isGMGSDrum=A)}resetGeneratorOverrides(){this.generatorOverrides.fill(ka),this.generatorOverridesEnabled=!1}setGeneratorOverride(A,e,t=!1){if(this.generatorOverrides[A]=e,this.generatorOverridesEnabled=!0,t){let s=0;if(this.voiceCount>0){for(let n of this.synthCore.voices)if(n.channel===this.channel&&n.isActive&&(n.generators[A]=e,this.computeModulators(n),++s>=this.voiceCount))break}}}resetGeneratorOffsets(){this.generatorOffsets.fill(0),this.generatorOffsetsEnabled=!1}setGeneratorOffset(A,e){this.generatorOffsets[A]=e*tA[A].nrpn,this.generatorOffsetsEnabled=!0;let t=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&(this.computeModulators(s),++t>=this.voiceCount))break}}killNote(A,e=-12e3){A+=this.customControllers[oe.channelKeyShift];let t=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&s.realKey===A&&(s.overrideReleaseVolEnv=e,s.isInRelease=!1,s.releaseVoice(this.synthCore.currentTime),++t>=this.voiceCount))break}}stopAllNotes(A=!1){if(A){let e=0;if(this.voiceCount>0){for(let t of this.synthCore.voices)if(t.channel===this.channel&&t.isActive&&(t.isActive=!1,++e>=this.voiceCount))break}this.clearVoiceCount(),this.updateVoiceCount()}else{let e=0;if(this.voiceCount>0){for(let t of this.synthCore.voices)if(t.channel===this.channel&&t.isActive&&(t.releaseVoice(this.synthCore.currentTime),++e>=this.voiceCount))break}}this.synthCore.callEvent("stopAll",{channel:this.channel,force:A})}muteChannel(A){A&&this.stopAllNotes(!0),this._isMuted=A,this.sendChannelProperty(),this.synthCore.callEvent("muteChannel",{channel:this.channel,isMuted:A})}sendChannelProperty(){if(!this.synthCore.enableEventSystem)return;let A={voicesAmount:this.voiceCount,pitchWheel:this.midiControllers[128+Ae.pitchWheel],pitchWheelRange:this.midiControllers[128+Ae.pitchWheelRange]/128,isMuted:this.isMuted,transposition:this.keyShift+this.customControllers[oe.channelTransposeFine]/100,isDrum:this.drumChannel,isEFX:this.insertionEnabled};this.synthCore.callEvent("channelPropertyChange",{channel:this.channel,property:A})}resetDrumParams(){if(!(this.synthCore.masterParameters.drumLock||!this.drumChannel))for(let A=0;A<128;A++){let e=this.drumParams[A];e.pitch=0,e.gain=1,e.exclusiveClass=0,e.pan=64,e.reverbGain=xs[A]/127,e.chorusGain=0,e.delayGain=0,e.rxNoteOn=!0,e.rxNoteOff=!1}}resetVibratoParams(){this.synthCore.masterParameters.customVibratoLock||(this.channelVibrato.rate=0,this.channelVibrato.depth=0,this.channelVibrato.delay=0)}computeModulatorsAll(A,e){let t=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&(this.computeModulators(s,A,e),++t>=this.voiceCount))break}}setBankMSB(A){this.lockPreset||(this.patch.bankMSB=A)}setBankLSB(A){this.lockPreset||(this.patch.bankLSB=A)}setDrumFlag(A){this.lockPreset||!this.preset||this.drumChannel!==A&&(A?(this.keyShift=0,this.drumChannel=!0):this.drumChannel=!1,this.synthCore.callEvent("drumChange",{channel:this.channel,isDrumChannel:this.drumChannel}))}},cr=class extends rt{constructor(A,e){super(A.parentSoundBank,A.globalZone),this.bankMSB=ke.addBankOffset(A.bankMSB,e,A.isXGDrums),this.name=A.name,this.bankLSB=A.bankLSB,this.isGMGSDrum=A.isGMGSDrum,this.program=A.program,this.genre=A.genre,this.morphology=A.morphology,this.library=A.library,this.zones=A.zones}},lr=class{soundBankList=[];presetListChangeCallback;selectablePresetList=[];constructor(A){this.presetListChangeCallback=A}_presetList=[];get presetList(){return[...this._presetList]}get priorityOrder(){return this.soundBankList.map(A=>A.id)}set priorityOrder(A){this.soundBankList.sort((e,t)=>A.indexOf(e.id)-A.indexOf(t.id)),this.generatePresetList()}deleteSoundBank(A){if(this.soundBankList.length===0){se("1 soundbank left. Aborting!");return}let e=this.soundBankList.findIndex(t=>t.id===A);if(e===-1)throw new Error(`No sound bank with id "${A}"`);this.soundBankList.splice(e,1),this.generatePresetList()}addSoundBank(A,e,t=0){let s=this.soundBankList.find(n=>n.id===e);s===void 0?this.soundBankList.push({id:e,soundBank:A,bankOffset:t}):(s.soundBank=A,s.bankOffset=t),this.generatePresetList()}getPreset(A,e){if(!(this.soundBankList.length===0||this.selectablePresetList.length===0))return $n(this.selectablePresetList,A,e)}destroy(){for(let A of this.soundBankList)A.soundBank.destroySoundBank();this.soundBankList=[]}generatePresetList(){let A=new Array,e=new Set;for(let t of this.soundBankList){let s=t.soundBank,n=t.bankOffset;for(let a of s.presets){let r=new cr(a,n);e.has(r.toMIDIString())||(e.add(r.toMIDIString()),A.push(r))}}A.sort(IA.sorter.bind(IA)),this.selectablePresetList=A,this._presetList=A.map(t=>({bankMSB:t.bankMSB,bankLSB:t.bankLSB,program:t.program,isGMGSDrum:t.isGMGSDrum,name:t.name,isAnyDrums:t.isAnyDrums})),this.presetListChangeCallback()}};function Cr(A,e){switch(this.masterParameters[A]=e,A){default:break;case"masterPan":{let t=e;t=t/2+.5,this.panLeft=Math.cos(Math.PI/2*t),this.panRight=Math.sin(Math.PI/2*t);break}case"voiceCap":{let t=Math.min(e,1e6);this.masterParameters.voiceCap=t;for(let s=t;s<this.voices.length;s++)this.voices[s].isActive=!1;if(t>this.voices.length){se(`Allocating ${t-this.voices.length} new voices!`);for(let s=this.voices.length;s<t;s++)this.voices.push(new ps(this.sampleRate))}break}case"transposition":{let t=e;this.masterParameters.transposition=0;for(let s of this.midiChannels)s.transposeChannel(t);this.masterParameters.transposition=t}}this.callEvent("masterParameterChange",{parameter:A,value:e})}function Br(A){return this.masterParameters[A]}function Er(){return{...this.masterParameters}}function Cn(A,e,t){let s=A,n=e<<7|t;return A===127&&e===127&&t===127?-1:s+n*61e-6}function dr(A,e=0){switch(A[2]){case 4:{let t;switch(A[3]){case 1:{let s=A[5]<<7|A[4];this.setMIDIVolume(s/16384),y(`%cMaster Volume. Volume: %c${s}`,C.info,C.value);break}case 2:{let s=((A[5]<<7|A[4])-8192)/8192;this.setMasterParameter("masterPan",s),y(`%cMaster Pan. Pan: %c${s}`,C.info,C.value);break}case 3:{let s=(A[5]<<7|A[6])-8192;t=Math.floor(s/81.92),this.setMasterTuning(t),y(`%cMaster Fine Tuning. Cents: %c${t}`,C.info,C.value);break}case 4:t=(A[5]-64)*100,this.setMasterTuning(t),y(`%cMaster Coarse Tuning. Cents: %c${t}`,C.info,C.value);break;default:y(`%cUnrecognized MIDI Device Control Real-time message: %c${Pt(A)}`,C.warn,C.unrecognized)}break}case 9:A[3]===1?(y("%cGM1 system on",C.info),this.resetAllControllers("gm")):A[3]===3?(y("%cGM2 system on",C.info),this.resetAllControllers("gm2")):(y("%cGM system off, defaulting to GS",C.info),this.setMasterParameter("midiSystem","gs"));break;case 8:{let t=4;switch(A[3]){case 1:{let s=A[t++],n=oA(A,16,t);if(t+=16,A.length<384){se(`The Bulk Tuning Dump is too short! (${A.length} bytes, at least 384 are expected)`);return}for(let a=0;a<128;a++)this.tunings[s*128+a]=Cn(A[t++],A[t++],A[t++]);y(`%cBulk Tuning Dump %c${n}%c Program: %c${s}`,C.info,C.value,C.info,C.recognized);break}case 2:case 7:{A[3]===7&&t++;let s=A[t++],n=A[t++];for(let a=0;a<n;a++){let r=A[t++];this.tunings[s*128+r]=Cn(A[t++],A[t++],A[t++])}y(`%cSingle Note Tuning. Program: %c${s}%c Keys affected: %c${n}`,C.info,C.recognized,C.info,C.recognized);break}case 9:case 8:{let s=new Int8Array(12);if(A[3]===8)for(let n=0;n<12;n++)s[n]=A[7+n]-64;else for(let n=0;n<24;n+=2){let a=(A[7+n]<<7|A[8+n])-8192;s[n/2]=Math.floor(a/81.92)}(A[4]&1)===1&&this.midiChannels[14+e].setOctaveTuning(s),(A[4]>>1&1)===1&&this.midiChannels[15+e].setOctaveTuning(s);for(let n=0;n<7;n++)(A[5]>>n&1)===1&&this.midiChannels[7+n+e].setOctaveTuning(s);for(let n=0;n<7;n++)(A[6]>>n&1)===1&&this.midiChannels[n+e].setOctaveTuning(s);y(`%cMIDI Octave Scale ${A[3]===8?"(1 byte)":"(2 bytes)"} tuning via Tuning: %c${s.join(" ")}`,C.info,C.value);break}default:Oe(A,"MIDI Tuning Standard");break}break}default:Oe(A,"General MIDI")}}var z=(A,e)=>{y(`%cRoland GS ${A}%c is now set to %c${e}%c.`,C.recognized,C.info,C.value,C.info)};function Qr(A,e=0){if(A[3]===18)switch(A[2]){case 66:{let t=A[4],s=A[5],n=A[6],a=Math.min(A[7],127);if(t===0&&s===0&&n===127&&a===0){y("%cGS Reset received!",C.info),this.resetAllControllers("gs");return}if(t===64){if(s===0){switch(n){case 0:{let r=((a<<12|A[8]<<8|A[9]<<4|A[10])-1024)/10;this.setMasterTuning(r),z("Master Tune",r);break}case 4:z("Master Volume",a);break;case 5:{let r=a-64;z("Master Key-Shift",r),this.setMasterTuning(r*100);break}case 6:z("Master Pan",a),this.setMasterParameter("masterPan",(a-64)/64);break;case 127:a===0?(y("%cGS Reset received!",C.info),this.resetAllControllers("gs")):a===127&&(y("%cGS system off, switching to GM",C.info),this.resetAllControllers("gm"));break;default:Oe(A,"Roland GS");break}return}if(s===1){let r=n>=48&&n<=55,o=n>=56&&n<=64,i=n>=80&&n<=90;if(r&&this.masterParameters.reverbLock||o&&this.masterParameters.chorusLock||i&&this.masterParameters.delayLock)return;switch(this.delayActive||=n===64||i,n){default:y(`%cUnsupported Patch Common parameter: %c${n.toString(16)}`,C.warn,C.unrecognized);break;case 0:{let g=oA(A,16,7);z(`Patch Name for ${n&15}`,g);break}case 48:this.setReverbMacro(a),z("Reverb Macro",a);break;case 49:this.reverbProcessor.character=a,z("Reverb Character",a),this.callEvent("effectChange",{effect:"reverb",parameter:"character",value:a});break;case 50:this.reverbProcessor.preLowpass=a,z("Reverb Pre-LPF",a),this.callEvent("effectChange",{effect:"reverb",parameter:"preLowpass",value:a});break;case 51:this.reverbProcessor.level=a,z("Reverb Level",a),this.callEvent("effectChange",{effect:"reverb",parameter:"level",value:a});break;case 52:this.reverbProcessor.time=a,z("Reverb Time",a),this.callEvent("effectChange",{effect:"reverb",parameter:"time",value:a});break;case 53:this.reverbProcessor.delayFeedback=a,z("Reverb Delay Feedback",a),this.callEvent("effectChange",{effect:"reverb",parameter:"delayFeedback",value:a});break;case 54:break;case 55:this.reverbProcessor.preDelayTime=a,z("Reverb Predelay Time",a),this.callEvent("effectChange",{effect:"reverb",parameter:"preDelayTime",value:a});break;case 56:this.setChorusMacro(a),z("Chorus Macro",a);break;case 57:this.chorusProcessor.preLowpass=a,z("Pre-LPF",a),this.callEvent("effectChange",{effect:"chorus",parameter:"preLowpass",value:a});break;case 58:this.chorusProcessor.level=a,z("Chorus Level",a),this.callEvent("effectChange",{effect:"chorus",parameter:"level",value:a});break;case 59:this.chorusProcessor.feedback=a,z("Chorus Feedback",a),this.callEvent("effectChange",{effect:"chorus",parameter:"feedback",value:a});break;case 60:this.chorusProcessor.delay=a,z("Chorus Delay",a),this.callEvent("effectChange",{effect:"chorus",parameter:"delay",value:a});break;case 61:this.chorusProcessor.rate=a,z("Chorus Rate",a),this.callEvent("effectChange",{effect:"chorus",parameter:"rate",value:a});break;case 62:this.chorusProcessor.depth=a,z("Chorus Depth",a),this.callEvent("effectChange",{effect:"chorus",parameter:"depth",value:a});break;case 63:this.chorusProcessor.sendLevelToReverb=a,z("Chorus Send Level To Reverb",a),this.callEvent("effectChange",{effect:"chorus",parameter:"sendLevelToReverb",value:a});break;case 64:this.chorusProcessor.sendLevelToDelay=a,z("Chorus Send Level To Delay",a),this.callEvent("effectChange",{effect:"chorus",parameter:"sendLevelToDelay",value:a});break;case 80:this.setDelayMacro(a),z("Delay Macro",a);break;case 81:this.delayProcessor.preLowpass=a,z("Delay Pre-LPF",a),this.callEvent("effectChange",{effect:"delay",parameter:"preLowpass",value:a});break;case 82:this.delayProcessor.timeCenter=a,z("Delay Time Center",a),this.callEvent("effectChange",{effect:"delay",parameter:"timeCenter",value:a});break;case 83:this.delayProcessor.timeRatioLeft=a,z("Delay Time Ratio Left",a),this.callEvent("effectChange",{effect:"delay",parameter:"timeRatioLeft",value:a});break;case 84:this.delayProcessor.timeRatioRight=a,z("Delay Time Ratio Right",a),this.callEvent("effectChange",{effect:"delay",parameter:"timeRatioRight",value:a});break;case 85:this.delayProcessor.levelCenter=a,z("Delay Level Center",a),this.callEvent("effectChange",{effect:"delay",parameter:"levelCenter",value:a});break;case 86:this.delayProcessor.levelLeft=a,z("Delay Level Left",a),this.callEvent("effectChange",{effect:"delay",parameter:"levelLeft",value:a});break;case 87:this.delayProcessor.levelRight=a,z("Delay Level Right",a),this.callEvent("effectChange",{effect:"delay",parameter:"levelRight",value:a});break;case 88:this.delayProcessor.level=a,z("Delay Level",a),this.callEvent("effectChange",{effect:"delay",parameter:"level",value:a});break;case 89:this.delayProcessor.feedback=a,z("Delay Feedback",a),this.callEvent("effectChange",{effect:"delay",parameter:"feedback",value:a});break;case 90:this.delayProcessor.sendLevelToReverb=a,z("Delay Send Level To Reverb",a),this.callEvent("effectChange",{effect:"delay",parameter:"sendLevelToReverb",value:a});break}break}if(s===3){if(this.masterParameters.insertionEffectLock)return;if(n>=3&&n<=25&&(this.insertionParams[n-3]=a),n>=3&&n<=22){this.insertionProcessor.setParameter(n,a),z(`EFX Parameter ${n-2}`,a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return}switch(n){default:Oe(A,"Roland GS EFX");return;case 0:{let r=a<<8|A[8],o=this.insertionEffects.get(r);o?(z("EFX Type",r.toString(16)),this.insertionProcessor=o):(this.insertionProcessor=this.insertionFallback,y(`%cUnsupported EFX processor: %c${r.toString(16)}%c, using Thru.`,C.warn,C.unrecognized,C.warn)),this.resetInsertionParams(),this.insertionProcessor.reset(),this.callEvent("effectChange",{effect:"insertion",parameter:0,value:r});return}case 23:this.insertionProcessor.sendLevelToReverb=a/127*yt,z("EFX Send Level to Reverb",a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return;case 24:this.insertionProcessor.sendLevelToChorus=a/127*yt,z("EFX Send Level to Chorus",a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return;case 25:this.insertionProcessor.sendLevelToDelay=a/127*yt,this.delayActive=!0,z("EFX Send Level to Delay",a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return}}if(s>>4===1){let r=KA(s&15)+e,o=this.midiChannels[r];switch(n){default:Oe(A,"Roland GS");return;case 0:o.controllerChange(d.bankSelect,a),o.programChange(A[8]);break;case 2:o.rxChannel=a===16?-1:a+e,this.customChannelNumbers||=o.rxChannel!==o.channel,z(`Rx. Channel on ${r}`,o.rxChannel);break;case 19:o.polyMode=a===1,z(`Mono/poly on ${r}`,o.polyMode?"POLY":"MONO");break;case 20:o.assignMode=a,z(`Assign mode on ${r}`,a);break;case 21:{o.drumMap=a;let i=a>0;o.setGSDrums(i),z(`Drums on ${r}`,i.toString());return}case 22:{let i=a-64;o.setCustomController(oe.channelKeyShift,i),z(`Key shift on ${r}`,i);return}case 25:o.controllerChange(d.mainVolume,a);return;case 28:{let i=a;i===0?(o.randomPan=!0,z(`Random pan on ${r}`,"ON")):(o.randomPan=!1,o.controllerChange(d.pan,i));break}case 31:o.cc1=a,z("CC1 Controller Number",a);break;case 32:o.cc2=a,z("CC2 Controller Number",a);break;case 33:o.controllerChange(d.chorusDepth,a);break;case 34:o.controllerChange(d.reverbDepth,a);break;case 42:{let i=((a<<7|A[8])-8192)/81.92;o.setTuning(i);break}case 44:o.controllerChange(d.variationDepth,a);break;case 48:o.controllerChange(d.vibratoRate,a);break;case 49:o.controllerChange(d.vibratoDepth,a);break;case 50:o.controllerChange(d.brightness,a);break;case 51:o.controllerChange(d.filterResonance,a);break;case 52:o.controllerChange(d.attackTime,a);break;case 53:o.controllerChange(d.decayTime,a);break;case 54:o.controllerChange(d.releaseTime,a);break;case 55:o.controllerChange(d.vibratoDelay,a);break;case 64:{let i=A.length-9,g=new Int8Array(12);for(let l=0;l<i;l++)g[l]=A[l+7]-64;o.setOctaveTuning(g);let c=a-64;z(`Octave Scale Tuning on ${r}`,g.join(", ")),o.setTuning(c);break}}return}if(s>>4===2){let r=KA(s&15)+e,o=this.midiChannels[r];switch(n&240){default:Oe(A,"Roland GS Patch Parameter Controller");break;case 0:if((n&15)===4){let i=a/127*600;o.customControllers[oe.modulationMultiplier]=i/50,$e(o.channel,i,"modulation wheel depth","cents");break}o.sysExModulators.setupReceiver(n,a,d.modulationWheel,"mod wheel");break;case 16:if((n&15)===0){let i=a-64;o.midiControllers[128+Ae.pitchWheelRange]=i<<7,$e(o.channel,i,"pitch wheel range","semitones");break}o.sysExModulators.setupReceiver(n,a,128+Ae.pitchWheel,"pitch wheel",!0);break;case 32:o.sysExModulators.setupReceiver(n,a,128+Ae.channelPressure,"channel pressure");break;case 48:o.sysExModulators.setupReceiver(n,a,128+Ae.polyPressure,"poly pressure");break;case 64:o.sysExModulators.setupReceiver(n,a,o.cc1,"CC1");break;case 80:o.sysExModulators.setupReceiver(n,a,o.cc2,"CC2")}return}if(s>>4===4){let r=KA(s&15)+e,o=this.midiChannels[r];switch(n){default:Oe(A,"Roland GS Patch Part Parameter");break;case 0:case 1:o.controllerChange(d.bankSelectLSB,a);break;case 34:{if(this.masterParameters.insertionEffectLock)return;let i=a===1;o.insertionEnabled=i,this.insertionActive||=i,z(`Insertion for ${r}`,i?"ON":"OFF"),this.callEvent("effectChange",{effect:"insertion",parameter:i?-1:-2,value:r})}}return}Oe(A,"Roland GS Patch Parameter");return}if(t===65){if(this.masterParameters.drumLock)return;let r=(s>>4)+1,o=n;switch(s&15){default:Oe(A,"Roland GS Drum Setup");return;case 0:{let i=oA(A,12,7);z(`Patch Name for MAP${r}`,i);break}case 1:{let i=a-60;for(let g of this.midiChannels)g.drumMap===r&&(g.drumParams[o].pitch=i*(g.patch.bankLSB===1?100:50));z(`Drum Pitch for MAP${r}, key ${o}`,i);break}case 2:for(let i of this.midiChannels)i.drumMap===r&&(i.drumParams[o].gain=a/120);z(`Drum Level for MAP${r}, key ${o}`,a);break;case 3:for(let i of this.midiChannels)i.drumMap===r&&(i.drumParams[o].exclusiveClass=a);z(`Drum Assign Group for MAP${r}, key ${o}`,a);break;case 4:for(let i of this.midiChannels)i.drumMap===r&&(i.drumParams[o].pan=a);z(`Drum Pan for MAP${r}, key ${o}`,a);break;case 5:for(let i of this.midiChannels)i.drumMap===r&&(i.drumParams[o].reverbGain=a/127);z(`Drum Reverb for MAP${r}, key ${o}`,a);break;case 6:for(let i of this.midiChannels)i.drumMap===r&&(i.drumParams[o].chorusGain=a/127);z(`Drum Chorus for MAP${r}, key ${o}`,a);break;case 7:for(let i of this.midiChannels)i.drumMap===r&&(i.drumParams[o].rxNoteOff=a===1);z(`Drum Note Off for MAP${r}, key ${o}`,a===1);break;case 8:for(let i of this.midiChannels)i.drumMap===r&&(i.drumParams[o].rxNoteOn=a===1);z(`Drum Note On for MAP${r}, key ${o}`,a===1);break;case 9:for(let i of this.midiChannels)i.drumMap===r&&(i.drumParams[o].delayGain=a/127);z(`Drum Delay for MAP${r}, key ${o}`,a);break}return}Oe(A,"Roland GS");return}case 69:A[4]===16&&(A[5]===0?this.callEvent("synthDisplay",[...A]):A[5]===1?this.callEvent("synthDisplay",[...A]):Oe(A,"Roland GS Display"));return;case 22:if(A[4]===16){this.setMIDIVolume(A[7]/100),y(`%cRoland Master Volume control set to: %c${A[7]}`,C.info,C.value);return}else Oe(A,"Roland")}else{Oe(A,"Roland");return}}var Pe=(A,e)=>{y(`%cYamaha XG ${A}%c for is now set to %c${e}%c.`,C.recognized,C.info,C.value,C.info)};function fr(A,e=0){if(A[2]===76){let t=A[3],s=A[4],n=A[5],a=A[6];if(t===0&&s===0){switch(n){case 0:{let r=(((A[6]&15)<<12|(A[7]&15)<<8|(A[8]&15)<<4|A[9]&15)-1024)/10;this.setMasterTuning(r),Pe("Master Tune",r)}break;case 4:this.setMIDIVolume(a/127),Pe("Master Volume",a);break;case 5:{let r=127-a;this.setMIDIVolume(r/127),Pe("Master Attenuation",a);break}case 6:{let r=a-64;this.setMasterParameter("transposition",r),Pe("Master Transpose",r);break}case 127:case 126:y("%cXG system on",C.info),this.resetAllControllers("xg");break}return}if(t===2&&s===1){let r,o=n;o<=21?r="Reverb":o<=35?r="Chorus":r="Variation",y(`%cUnsupported XG ${r} Parameter: %c${o.toString(16)}`,C.warn,C.unrecognized);return}if(t===8){if(!ke.isSystemXG(this.masterParameters.midiSystem))return;let r=s+e;if(r>=this.midiChannels.length)return;let o=this.midiChannels[r];switch(n){case 1:o.controllerChange(d.bankSelect,a);break;case 2:o.controllerChange(d.bankSelectLSB,a);break;case 3:o.programChange(a);break;case 4:o.rxChannel=a+e,this.customChannelNumbers||=o.rxChannel!==o.channel,Pe(`Rev. Channel on ${r}`,o.rxChannel);break;case 5:o.polyMode=a===1,Pe(`Mono/poly on ${r}`,o.polyMode?"POLY":"MONO");break;case 7:o.setDrums(a!==0);break;case 8:{if(o.drumChannel)break;let i=a-64;o.setCustomController(oe.channelKeyShift,i),Pe(`Key shift on ${r}`,i);break}case 11:o.controllerChange(d.mainVolume,a);break;case 14:{let i=a;i===0?(o.randomPan=!0,Pe(`Random Pan for ${r}`,"ON")):o.controllerChange(d.pan,i);break}case 18:o.controllerChange(d.chorusDepth,a);break;case 19:o.controllerChange(d.reverbDepth,a);break;case 21:o.controllerChange(d.vibratoRate,a);break;case 22:o.controllerChange(d.vibratoDepth,a);break;case 23:o.controllerChange(d.vibratoDelay,a);break;case 24:o.controllerChange(d.brightness,a);break;case 25:o.controllerChange(d.filterResonance,a);break;case 26:o.controllerChange(d.attackTime,a);break;case 27:o.controllerChange(d.decayTime,a);break;case 28:o.controllerChange(d.releaseTime,a);break;default:y(`%cUnsupported Yamaha XG Part Setup: %c${A[5].toString(16).toUpperCase()}%c for channel ${r}`,C.warn,C.unrecognized,C.warn)}return}if(t>>4===3){if(this.masterParameters.drumLock)return;let r=s;switch(n){default:Oe([n],"Yamaha XG Drum Setup");return;case 0:{let o=(a-64)*100;for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].pitch=o);Pe(`Drum Pitch, key ${r}`,o);break}case 1:{let o=a-64;for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].pitch+=o);Pe(`Drum Pitch Fine, key ${r}`,o);break}case 2:for(let o of this.midiChannels)o.drumChannel&&(o.drumParams[r].gain=a/120);Pe(`Drum Level, key ${r}`,a);break;case 3:for(let o of this.midiChannels)o.drumChannel&&(o.drumParams[r].exclusiveClass=a);Pe(`Drum Alternate Group, key ${r}`,a);break;case 4:for(let o of this.midiChannels)o.drumChannel&&(o.drumParams[r].pan=a);Pe(`Drum Pan, key ${r}`,a);break;case 5:for(let o of this.midiChannels)o.drumChannel&&(o.drumParams[r].reverbGain=a/127);Pe(`Drum Reverb, key ${r}`,a);break;case 6:for(let o of this.midiChannels)o.drumChannel&&(o.drumParams[r].chorusGain=a/127);Pe(`Drum Chorus, key ${r}`,a);break;case 9:for(let o of this.midiChannels)o.drumChannel&&(o.drumParams[r].rxNoteOff=a===1);Pe(`Drum Note Off, key ${r}`,a===1);break;case 10:for(let o of this.midiChannels)o.drumChannel&&(o.drumParams[r].rxNoteOn=a===1);Pe(`Drum Note On, key ${r}`,a===1);break}return}t===6||t===7?this.callEvent("synthDisplay",[...A]):ke.isSystemXG(this.masterParameters.midiSystem)&&Oe(A,"Yamaha XG")}else Oe(A,"Yamaha")}function ur(A,e=0){e+=this.portSelectChannelOffset;let t=A[0];if(!(this.masterParameters.deviceID!==-1&&A[1]!==127&&this.masterParameters.deviceID!==A[1]))switch(t){default:y(`%cUnknown manufacturer: %c${Pt(A)}`,C.warn,C.unrecognized);break;case 126:case 127:dr.call(this,A,e);break;case 65:Qr.call(this,A,e);break;case 67:fr.call(this,A,e);break;case 245:if(A.length<2)return;for(this.portSelectChannelOffset=(A[1]-1)*16;this.midiChannels.length<=this.portSelectChannelOffset;){y(`%cPort select, channel offset %c${this.portSelectChannelOffset}%c. Creating a new port!`,C.info,C.value,C.info);for(let s=0;s<16;s++)this.createMIDIChannel(!0)}break}}var ha=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=0;reset(){}process(A,e,t,s,n,a,r,o,i){let{sendLevelToReverb:g,sendLevelToChorus:c,sendLevelToDelay:l}=this;for(let B=0;B<i;B++){let h=A[B],E=e[B],m=o+B;t[m]+=h,s[m]+=E;let D=(h+E)*.5;n[B]+=D*g,a[B]+=D*c,r[B]+=D*l}}setParameter(A,e){}},uA=class{static data=[[0,200,200,0,0,.05,.05,315,250,200,250,100,-180,0],[.1,205,205,.1,5,.1,.1,315,250,200,250,110,-180,1],[.2,210,210,.2,10,.15,.15,315,250,200,250,120,-180,2],[.3,215,215,.3,15,.2,.2,315,250,200,250,130,-180,3],[.4,220,220,.4,20,.25,.25,315,250,200,250,140,-180,4],[.5,225,225,.5,25,.3,.3,315,250,200,250,150,-180,5],[.6,230,230,.6,30,.35,.35,315,250,200,250,160,-168,5],[.7,235,235,.7,35,.4,.4,315,250,200,250,170,-168,5],[.8,240,240,.8,40,.45,.45,400,315,250,315,180,-168,5],[.9,245,245,.9,45,.5,.5,400,315,250,315,190,-168,5],[1,250,250,1,50,.55,.55,400,315,250,315,200,-156,5],[1.1,255,255,1.1,55,.6,.6,400,315,250,315,210,-156,5],[1.2,260,260,1.2,60,.65,.65,400,315,250,315,220,-156,5],[1.3,265,265,1.3,65,.7,.7,400,315,250,315,230,-156,5],[1.4,270,270,1.4,70,.75,.75,400,315,250,315,240,-144,5],[1.5,275,275,1.5,75,.8,.8,400,315,250,315,250,-144,5],[1.6,280,280,1.6,80,.85,.85,500,400,315,400,260,-144,5],[1.7,285,285,1.7,85,.9,.9,500,400,315,400,270,-144,5],[1.8,290,290,1.8,90,.95,.95,500,400,315,400,280,-132,5],[1.9,295,295,1.9,95,1,1,500,400,315,400,290,-132,5],[2,300,300,2,100,1.05,1.05,500,400,315,400,300,-132,5],[2.1,305,305,2.1,105,1.1,1.1,500,400,315,400,320,-132,5],[2.2,310,310,2.2,110,1.15,1.15,500,400,315,400,340,-120,5],[2.3,315,315,2.3,115,1.2,1.2,500,400,315,400,360,-120,5],[2.4,320,320,2.4,120,1.25,1.25,630,500,400,500,380,-120,5],[2.5,325,325,2.5,125,1.3,1.3,630,500,400,500,400,-120,5],[2.6,330,330,2.6,130,1.35,1.35,630,500,400,500,420,-108,5],[2.7,335,335,2.7,135,1.4,1.4,630,500,400,500,440,-108,5],[2.8,340,340,2.8,140,1.45,1.45,630,500,400,500,460,-108,5],[2.9,345,345,2.9,145,1.5,1.5,630,500,400,500,480,-108,5],[3,350,350,3,150,1.55,1.55,630,500,400,500,500,-96,6],[3.1,355,355,3.1,155,1.6,1.6,630,500,400,500,520,-96,6],[3.2,360,360,3.2,160,1.65,1.65,800,630,500,630,540,-96,6],[3.3,365,365,3.3,165,1.7,1.7,800,630,500,630,560,-96,6],[3.4,370,370,3.4,170,1.75,1.75,800,630,500,630,580,-84,6],[3.5,375,375,3.5,175,1.8,1.8,800,630,500,630,600,-84,6],[3.6,380,380,3.6,180,1.85,1.85,800,630,500,630,620,-84,6],[3.7,385,385,3.7,185,1.9,1.9,800,630,500,630,640,-84,6],[3.8,390,390,3.8,190,1.95,1.95,800,630,500,630,660,-72,6],[3.9,395,395,3.9,195,2,2,800,630,500,630,680,-72,6],[4,400,400,4,200,2.05,2.05,1e3,800,630,800,700,-72,6],[4.1,405,405,4.1,205,2.1,2.1,1e3,800,630,800,720,-72,6],[4.2,410,410,4.2,210,2.15,2.15,1e3,800,630,800,740,-60,6],[4.3,415,415,4.3,215,2.2,2.2,1e3,800,630,800,760,-60,6],[4.4,420,420,4.4,220,2.25,2.25,1e3,800,630,800,780,-60,6],[4.5,425,425,4.5,225,2.3,2.3,1e3,800,630,800,800,-60,6],[4.6,430,430,4.6,230,2.35,2.35,1e3,800,630,800,820,-48,6],[4.7,435,435,4.7,235,2.4,2.4,1e3,800,630,800,840,-48,6],[4.8,440,440,4.8,240,2.45,2.45,1250,1e3,800,1e3,860,-48,9],[4.9,445,445,4.9,245,2.5,2.5,1250,1e3,800,1e3,880,-48,9],[5,450,450,5,250,2.55,2.55,1250,1e3,800,1e3,900,-36,9],[5.5,455,455,5.5,255,2.6,2.6,1250,1e3,800,1e3,920,-36,9],[6,460,460,6,260,2.65,2.65,1250,1e3,800,1e3,940,-36,9],[6.5,465,465,6.5,265,2.7,2.7,1250,1e3,800,1e3,960,-36,9],[7,470,470,7,270,2.75,2.75,1250,1e3,800,1e3,980,-24,9],[7.5,475,475,7.5,275,2.8,2.8,1250,1e3,800,1e3,1e3,-24,9],[8,480,480,8,280,2.85,2.85,1600,1250,1e3,1250,1100,-24,9],[8.5,485,485,8.5,285,2.9,2.9,1600,1250,1e3,1250,1200,-24,9],[9,490,490,9,290,2.95,2.95,1600,1250,1e3,1250,1300,-12,9],[9.5,495,495,9.5,295,3,3,1600,1250,1e3,1250,1400,-12,9],[10,500,500,10,300,3.05,3.05,1600,1250,1e3,1250,1500,-12,9],[11,505,505,11,305,3.1,3.1,1600,1250,1e3,1250,1600,-12,9],[12,510,510,12,310,3.15,3.15,1600,1250,1e3,1250,1700,0,9],[13,515,515,13,315,3.2,3.2,1600,1250,1e3,1250,1800,0,9],[14,520,520,14,320,3.25,3.25,2e3,1600,1250,1600,1900,0,12],[15,525,525,15,325,3.3,3.3,2e3,1600,1250,1600,2e3,0,12],[16,530,530,16,330,3.35,3.35,2e3,1600,1250,1600,2100,12,12],[17,535,535,17,335,3.4,3.4,2e3,1600,1250,1600,2200,12,12],[18,540,540,18,340,3.45,3.45,2e3,1600,1250,1600,2300,12,12],[19,545,545,19,345,3.5,3.5,2e3,1600,1250,1600,2400,12,12],[20,550,550,20,350,3.55,3.55,2e3,1600,1250,1600,2500,24,12],[21,560,555,21,355,3.6,3.6,2e3,1600,1250,1600,2600,24,12],[22,570,560,22,360,3.65,3.65,2500,2e3,1600,2e3,2700,24,12],[23,580,565,23,365,3.7,3.7,2500,2e3,1600,2e3,2800,24,12],[24,590,570,24,370,3.75,3.75,2500,2e3,1600,2e3,2900,36,12],[25,600,575,25,375,3.8,3.8,2500,2e3,1600,2e3,3e3,36,12],[26,610,580,26,380,3.85,3.85,2500,2e3,1600,2e3,3100,36,12],[27,620,585,27,385,3.9,3.9,2500,2e3,1600,2e3,3200,36,12],[28,630,590,28,390,3.95,3.95,2500,2e3,1600,2e3,3300,48,12],[29,640,595,29,395,4,4,2500,2e3,1600,2e3,3400,48,12],[30,650,600,30,400,4.05,4.05,3150,2500,2e3,2500,3500,48,10],[31,660,610,31,405,4.1,4.1,3150,2500,2e3,2500,3600,48,10],[32,670,620,32,410,4.15,4.15,3150,2500,2e3,2500,3700,60,10],[33,680,630,33,415,4.2,4.2,3150,2500,2e3,2500,3800,60,10],[34,690,640,34,420,4.25,4.25,3150,2500,2e3,2500,3900,60,10],[35,700,650,35,425,4.3,4.3,3150,2500,2e3,2500,4e3,60,10],[36,710,660,36,430,4.35,4.35,3150,2500,2e3,2500,4100,72,10],[37,720,670,37,435,4.4,4.4,3150,2500,2e3,2500,4200,72,10],[38,730,680,38,440,4.45,4.45,4e3,3150,2500,3150,4300,72,11],[39,740,690,39,445,4.5,4.5,4e3,3150,2500,3150,4400,72,11],[40,750,700,40,450,4.55,4.55,4e3,3150,2500,3150,4500,84,11],[41,760,710,50,455,4.6,4.6,4e3,3150,2500,3150,4600,84,11],[42,770,720,60,460,4.65,4.65,4e3,3150,2500,3150,4700,84,11],[43,780,730,70,465,4.7,4.7,4e3,3150,2500,3150,4800,84,11],[44,790,740,80,470,4.75,4.75,4e3,3150,2500,3150,4900,96,11],[45,800,750,90,475,4.8,4.8,4e3,3150,2500,3150,5e3,96,11],[46,810,760,100,480,4.85,4.85,5e3,4e3,3150,4e3,5100,96,12],[47,820,770,110,485,4.9,4.9,5e3,4e3,3150,4e3,5200,96,12],[48,830,780,120,490,4.95,4.95,5e3,4e3,3150,4e3,5300,108,12],[49,840,790,130,495,5,5,5e3,4e3,3150,4e3,5400,108,12],[50,850,800,140,500,5.1,5.05,5e3,4e3,3150,4e3,5500,108,12],[52,860,810,150,505,5.2,5.1,5e3,4e3,3150,4e3,5600,108,12],[54,870,820,160,510,5.3,5.15,5e3,4e3,3150,4e3,5700,120,12],[56,880,830,170,515,5.4,5.2,5e3,4e3,3150,4e3,5800,120,12],[58,890,840,180,520,5.5,5.25,6300,5e3,4e3,5e3,5900,120,13],[60,900,850,190,525,5.6,5.3,6300,5e3,4e3,5e3,6e3,120,13],[62,910,860,200,530,5.7,5.35,6300,5e3,4e3,5e3,6100,132,13],[64,920,870,210,535,5.8,5.4,6300,5e3,4e3,5e3,6200,132,13],[66,930,880,220,540,5.9,5.45,6300,5e3,4e3,5e3,6300,132,13],[68,940,890,230,545,6,5.5,6300,5e3,4e3,5e3,6400,132,13],[70,950,900,240,550,6.1,5.55,6300,5e3,4e3,5e3,6500,144,13],[72,960,910,250,555,6.2,5.6,6300,5e3,4e3,5e3,6600,144,13],[74,970,920,260,560,6.3,5.65,8e3,6300,5e3,6300,6700,144,14],[76,980,930,270,565,6.4,5.7,8e3,6300,5e3,6300,6800,144,14],[78,990,940,280,570,6.5,5.75,8e3,6300,5e3,6300,6900,156,14],[80,1e3,950,290,575,6.6,5.8,8e3,6300,5e3,6300,7e3,156,14],[82,1e3,960,300,580,6.7,5.85,8e3,6300,5e3,6300,7100,156,14],[84,1e3,970,320,585,6.8,5.9,8e3,6300,5e3,6300,7200,156,14],[86,1e3,980,340,590,6.9,5.95,8e3,6300,5e3,6300,7300,168,14],[88,1e3,990,360,595,7,6,8e3,6300,5e3,6300,7400,168,14],[90,1e3,1e3,380,600,7.5,6.05,13500,8e3,6300,13500,7500,168,15],[92,1e3,1e3,400,605,8,6.1,13500,8e3,6300,13500,7600,168,15],[94,1e3,1e3,420,610,8.5,6.15,13500,8e3,6300,13500,7700,-180,15],[96,1e3,1e3,440,615,9,6.2,13500,8e3,6300,13500,7800,-180,15],[98,1e3,1e3,460,620,9.5,6.25,13500,8e3,6300,13500,7900,-180,15],[100,1e3,1e3,480,625,10,6.3,13500,8e3,6300,13500,8e3,-180,15],[100,1e3,1e3,500,630,10,6.35,13500,8e3,6300,13500,8e3,-180,15],[100,1e3,1e3,500,635,10,6.4,13500,8e3,6300,13500,8e3,-180,15]];static preDelayTime(A){return this.data[A][0]}static delayTime1(A){return this.data[A][1]}static delayTime2(A){return this.data[A][2]}static delayTime3(A){return this.data[A][3]}static delayTime4(A){return this.data[A][4]}static rate1(A){return this.data[A][5]}static rate2(A){return this.data[A][6]}static hfDamp(A){return this.data[A][7]}static cutoffFreq(A){return this.data[A][8]}static eqFreq(A){return this.data[A][9]}static lpf(A){return this.data[A][10]}static manual(A){return this.data[A][11]}static azimuth(A){return this.data[A][12]}static accl(A){return this.data[A][13]}},Bn=Math.PI/2,Ft=-64,ga=63,Ks=ga-Ft,Tt=new Float32Array(Ks+1),Ut=new Float32Array(Ks+1);for(let A=Ft;A<=ga;A++){let e=(A-Ft)/Ks,t=A-Ft;Tt[t]=Math.cos(Bn*e),Ut[t]=Math.sin(Bn*e)}function Se(A){A.x1=A.x2=A.y1=A.y2=0}var Xe={b0:1,b1:0,b2:0,a0:1,a1:0,a2:0};function LA(A,e,t,s,n){let a=e.b0*A+e.b1*s.x1+e.b2*s.x2-e.a1*s.y1-e.a2*s.y2;s.x2=s.x1,s.x1=A,s.y2=s.y1,s.y1=a;let r=t.b0*a+t.b1*n.x1+t.b2*n.x2-t.a1*n.y1-t.a2*n.y2;return n.x2=n.x1,n.x1=a,n.y2=n.y1,n.y1=r,r}function CA(A,e,t){let s=e.b0*A+e.b1*t.x1+e.b2*t.x2-e.a1*t.y1-e.a2*t.y2;return t.x2=t.x1,t.x1=A,t.y2=t.y1,t.y1=s,s}function wA(A,e,t,s,n){let a=Math.pow(10,e/40),r=2*Math.PI*t/s,o=Math.cos(r),i=Math.sin(r)/2*Math.sqrt((a+1/a)*(1/1-1)+2),g,c,l,B,h,E;n?(g=a*(a+1-(a-1)*o+2*Math.sqrt(a)*i),c=2*a*(a-1-(a+1)*o),l=a*(a+1-(a-1)*o-2*Math.sqrt(a)*i),B=a+1+(a-1)*o+2*Math.sqrt(a)*i,h=-2*(a-1+(a+1)*o),E=a+1+(a-1)*o-2*Math.sqrt(a)*i):(g=a*(a+1+(a-1)*o+2*Math.sqrt(a)*i),c=-2*a*(a-1+(a+1)*o),l=a*(a+1+(a-1)*o-2*Math.sqrt(a)*i),B=a+1-(a-1)*o+2*Math.sqrt(a)*i,h=2*(a-1-(a+1)*o),E=a+1-(a-1)*o-2*Math.sqrt(a)*i),A.b0=g/B,A.b1=c/B,A.b2=l/B,A.a0=1,A.a1=h/B,A.a2=E/B}var Fe={x1:0,x2:0,y1:0,y2:0},mr=class{type=256;sendLevelToReverb=0;sendLevelToChorus=0;sendLevelToDelay=0;sampleRate;level=1;lowFreq=400;lowGain=5;hiFreq=8e3;hiGain=-12;m1Freq=1600;m1Q=.5;m1Gain=8;m2Freq=1e3;m2Q=.5;m2Gain=-8;lowCoeffs={...Xe};m1Coeffs={...Xe};m2Coeffs={...Xe};hiCoeffs={...Xe};lowStateL={...Fe};lowStateR={...Fe};m1StateL={...Fe};m1StateR={...Fe};m2StateL={...Fe};m2StateR={...Fe};hiStateL={...Fe};hiStateR={...Fe};constructor(A){this.sampleRate=A,this.reset(),this.updateCoefficients()}reset(){this.level=1,this.lowFreq=400,this.lowGain=5,this.hiGain=-12,this.hiFreq=8e3,this.m1Freq=1600,this.m1Q=.5,this.m1Gain=8,this.m2Freq=1e3,this.m2Q=.5,this.m2Gain=-8,Se(this.lowStateL),Se(this.lowStateR),Se(this.m1StateL),Se(this.m1StateR),Se(this.m2StateL),Se(this.m2StateR),Se(this.hiStateL),Se(this.hiStateR),this.updateCoefficients()}setParameter(A,e){switch(A){default:break;case 3:this.lowFreq=e===1?400:200;break;case 4:this.lowGain=e-64;break;case 5:this.hiFreq=e===1?8e3:4e3;break;case 6:this.hiGain=e-64;break;case 7:this.m1Freq=uA.eqFreq(e);break;case 8:this.m1Q=[.5,1,2,4,9][e]||1;break;case 9:this.m1Gain=e-64;break;case 10:this.m2Freq=uA.eqFreq(e);break;case 11:this.m2Q=[.5,1,2,4,9][e]||1;break;case 12:this.m2Gain=e-64;break;case 22:this.level=e/127;break}this.updateCoefficients()}process(A,e,t,s,n,a,r,o,i){let{level:g,sendLevelToChorus:c,sendLevelToDelay:l,sendLevelToReverb:B,lowCoeffs:h,lowStateL:E,lowStateR:m,m1Coeffs:D,m1StateL:f,m1StateR:O,m2StateL:R,m2StateR:Q,m2Coeffs:T,hiCoeffs:U,hiStateL:x,hiStateR:V}=this;for(let J=0;J<i;J++){let L=A[J],H=e[J];L=CA(L,h,E),H=CA(H,h,m),L=CA(L,D,f),H=CA(H,D,O),L=CA(L,T,R),H=CA(H,T,Q),L=CA(L,U,x),H=CA(H,U,V);let q=o+J;t[q]+=L*g,s[q]+=H*g;let u=.5*(L+H);n[J]+=u*B,a[J]+=u*c,r[J]+=u*l}}updateCoefficients(){pr(this.lowCoeffs,this.lowFreq,this.lowGain/2,this.sampleRate),En(this.m1Coeffs,this.m1Freq,this.m1Gain,this.m1Q,this.sampleRate),En(this.m2Coeffs,this.m2Freq,this.m2Gain,this.m2Q,this.sampleRate),yr(this.hiCoeffs,this.hiFreq,this.hiGain/2,this.sampleRate)}},Ia=1;function En(A,e,t,s,n){let a=Math.pow(10,t/40),r=2*Math.PI*e/n,o=Math.cos(r),i=Math.sin(r)/(2*s),g=1+i*a,c=-2*o,l=1-i*a,B=1+i/a,h=-2*o,E=1-i/a;A.a0=1,A.a1=h/B,A.a2=E/B,A.b0=g/B,A.b1=c/B,A.b2=l/B}function pr(A,e,t,s){let n=Math.pow(10,t/40),a=2*Math.PI*e/s,r=Math.cos(a),o=Math.sin(a)/2*Math.sqrt((n+1/n)*(1/Ia-1)+2),i=n*(n+1-(n-1)*r+2*Math.sqrt(n)*o),g=2*n*(n-1-(n+1)*r),c=n*(n+1-(n-1)*r-2*Math.sqrt(n)*o),l=n+1+(n-1)*r+2*Math.sqrt(n)*o,B=-2*(n-1+(n+1)*r),h=n+1+(n-1)*r-2*Math.sqrt(n)*o;A.a0=1,A.a1=B/l,A.a2=h/l,A.b0=i/l,A.b1=g/l,A.b2=c/l}function yr(A,e,t,s){let n=Math.pow(10,t/40),a=2*Math.PI*e/s,r=Math.cos(a),o=Math.sin(a)/2*Math.sqrt((n+1/n)*(1/Ia-1)+2),i=n*(n+1+(n-1)*r+2*Math.sqrt(n)*o),g=-2*n*(n-1+(n+1)*r),c=n*(n+1+(n-1)*r-2*Math.sqrt(n)*o),l=n+1-(n-1)*r+2*Math.sqrt(n)*o,B=2*(n-1-(n+1)*r),h=n+1-(n-1)*r-2*Math.sqrt(n)*o;A.a0=1,A.a1=B/l,A.a2=h/l,A.b0=i/l,A.b1=g/l,A.b2=c/l}var YA=8,Is=128,dn=4,cs=600,Sr=.9,Qn=.35,ca=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=288;manual=620;rate=.85;depth=64/Is;reso=16/127;mix=1;lowGain=0;hiGain=0;prevInL;prevOutL;prevInR;prevOutR;lowShelfCoef={...Xe};highShelfCoef={...Xe};manualOffset=cs;lowShelfStateL={x1:0,x2:0,y1:0,y2:0};lowShelfStateR={x1:0,x2:0,y1:0,y2:0};highShelfStateL={x1:0,x2:0,y1:0,y2:0};highShelfStateR={x1:0,x2:0,y1:0,y2:0};prevL=0;prevR=0;level=104/127;phase=Qn;sampleRate;constructor(A){this.sampleRate=A,this.prevInL=new Float32Array(YA),this.prevOutL=new Float32Array(YA),this.prevInR=new Float32Array(YA),this.prevOutR=new Float32Array(YA),this.reset()}reset(){this.phase=Qn,this.setManual(620),this.rate=.85,this.depth=64/Is,this.reso=16/127,this.mix=1,this.lowGain=0,this.hiGain=0,this.level=104/127,Se(this.highShelfStateL),Se(this.highShelfStateR),Se(this.lowShelfStateL),Se(this.lowShelfStateR),this.updateShelves(),this.clearAllPass()}process(A,e,t,s,n,a,r,o,i){let{sendLevelToReverb:g,sendLevelToChorus:c,sendLevelToDelay:l,level:B,manual:h,manualOffset:E,mix:m,lowShelfCoef:D,lowShelfStateR:f,lowShelfStateL:O,highShelfCoef:R,highShelfStateL:Q,highShelfStateR:T,prevInL:U,prevInR:x,prevOutL:V,prevOutR:J,sampleRate:L,depth:H}=this,{prevL:q,prevR:u,phase:v}=this,S=this.rate/this.sampleRate,k=this.reso*Sr;for(let p=0;p<i;p++){let P=LA(A[p],D,R,O,Q),K=LA(e[p],D,R,f,T),Ce=2*Math.abs(v-.5);(v+=S)>=1&&(v-=1);let be=E+h*(1-H*Ce),Be=Math.tan(Math.PI*be/L),ae=Math.max(-.9999,Math.min(.9999,(1-Be)/(1+Be))),he=P+k*q,j=K+k*u;for(let Ie=0;Ie<YA;Ie++){let ve=-ae*he+U[Ie]+ae*V[Ie];U[Ie]=he,V[Ie]=ve,he=ve;let sA=-ae*j+x[Ie]+ae*J[Ie];x[Ie]=j,J[Ie]=sA,j=sA}q=he,u=j;let Y=(P+he*m)*B,ne=(K+j*m)*B,fe=o+p;t[fe]+=Y,s[fe]+=ne;let Me=(Y+ne)*.5;n[p]+=Me*g,a[p]+=Me*c,r[p]+=Me*l}this.phase=v,this.prevL=q,this.prevR=u}setParameter(A,e){switch(A){default:break;case 3:this.setManual(uA.manual(e));break;case 4:this.rate=uA.rate1(e);break;case 5:this.depth=e/Is;break;case 6:this.reso=e/127;break;case 7:this.mix=e/127;break;case 19:this.lowGain=e-64;break;case 20:this.hiGain=e-64;break;case 22:this.level=e/127;break}this.updateShelves()}setManual(A){A>1e3?(this.manualOffset=cs*1.5*dn,this.manual=A):(this.manualOffset=cs,this.manual=A*dn)}clearAllPass(){this.prevR=0,this.prevL=0;for(let A=0;A<YA;A++)this.prevInL[A]=0,this.prevOutL[A]=0,this.prevInR[A]=0,this.prevOutR[A]=0}updateShelves(){wA(this.lowShelfCoef,this.lowGain,200,this.sampleRate,!0),wA(this.highShelfCoef,this.hiGain,4e3,this.sampleRate,!1)}},fn=Math.PI*2,kr=.935,Dr=2,wr=.01,un=127,br=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=294;modWave=1;modRate=3.05;modDepth=96;lowGain=0;hiGain=0;level=un/127;currentPan=0;phase=0;lsCoeffs={...Xe};hsCoeffs={...Xe};lsStateR={...Fe};lsStateL={...Fe};hsStateR={...Fe};hsStateL={...Fe};sampleRate;constructor(A){this.sampleRate=A,this.reset()}reset(){this.modWave=1,this.modRate=3.05,this.modDepth=96,this.lowGain=0,this.hiGain=0,this.level=un/127,this.currentPan=0,this.phase=0,Se(this.hsStateR),Se(this.hsStateL),Se(this.lsStateR),Se(this.lsStateL),this.updateShelves()}process(A,e,t,s,n,a,r,o,i){let{sendLevelToReverb:g,sendLevelToChorus:c,sendLevelToDelay:l,level:B,lsCoeffs:h,lsStateL:E,lsStateR:m,hsCoeffs:D,hsStateR:f,hsStateL:O,modWave:R}=this,Q=Math.pow(this.modDepth/127,Dr),T=2/(1+Q)*kr,U=this.modRate/this.sampleRate,{phase:x,currentPan:V}=this;for(let J=0;J<i;J++){let L=LA(A[J],h,D,E,O),H=LA(e[J],h,D,m,f),q;switch(R){default:q=1-4*Math.abs(x-.5);break;case 1:q=x>.5?-1:-Math.cos((x-.75)*fn);break;case 2:q=Math.sin(fn*x);break;case 3:q=1-2*x;break;case 4:q=2*x-1;break}(x+=U)>=1&&(x-=1),V+=(q-V)*wr;let u=V*Q,v=(1-u)*.5*T,S=(1+u)*.5*T,k=L*B*v,p=H*B*S,P=o+J;t[P]+=k,s[P]+=p;let K=(k+p)*.5;n[J]+=K*g,a[J]+=K*c,r[J]+=K*l}this.currentPan=V,this.phase=x}setParameter(A,e){switch(A){default:break;case 3:this.modWave=e;break;case 4:this.modRate=uA.rate1(e);break;case 5:this.modDepth=e;break;case 19:this.lowGain=e-64;break;case 20:this.hiGain=e-64;break;case 22:this.level=e/127;break}this.updateShelves()}updateShelves(){wA(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),wA(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}},mn=96,Rr=.1,Fr=.1,Gr=27,Mr=28,vr=-28,Lr=400,Nr=.62,Tr=.005,la=5,pn=la*.5,Ca=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=289;filType=1;sens=0;manual=68;peak=62;rate=2.05;depth=72;polarity=1;pan=0;lowGain=0;hiGain=0;level=mn/127;coeffs={...Xe};state={...Fe};hpCoeffs={...Xe};hpState={...Fe};phase=0;lsCoeffs={...Xe};hsCoeffs={...Xe};lsState={...Fe};hsState={...Fe};sampleRate;lastFc=this.manual;attackCoeff;releaseCoeff;envelope=0;constructor(A){this.sampleRate=A,this.attackCoeff=Math.exp(-1/(Rr*A)),this.releaseCoeff=Math.exp(-1/(Fr*A)),this.reset()}reset(){this.filType=1,this.sens=0,this.setManual(68),this.peak=62,this.rate=2.05,this.depth=72,this.polarity=1,this.lowGain=0,this.hiGain=0,this.pan=0,this.level=mn/127,this.phase=.2,this.lastFc=this.manual,Se(this.hsState),Se(this.lsState),Se(this.state),Se(this.hpState),this.updateShelves()}process(A,e,t,s,n,a,r,o,i){let{sendLevelToReverb:g,sendLevelToChorus:c,sendLevelToDelay:l,level:B,lsCoeffs:h,lsState:E,hsCoeffs:m,hsState:D,coeffs:f,state:O,sampleRate:R,filType:Q,manual:T,pan:U,attackCoeff:x,releaseCoeff:V,hpState:J,hpCoeffs:L}=this,{phase:H,lastFc:q,envelope:u}=this,v=this.rate/this.sampleRate,S=Math.pow(10,this.peak/127*Mr/20),k=Math.pow(10,this.peak/127*vr/20),p=this.polarity===0?-1:la,P=this.depth/127*p,K=this.sens/127,Ce=U+64|0,be=Tt[Ce],Be=Ut[Ce];for(let ae=0;ae<i;ae++){let he=LA((A[ae]+e[ae])*.5,h,m,E,D),j=Math.abs(he);u=j>u?x*u+(1-x)*j:V*u+(1-V)*j;let Y=2*Math.abs(H-.5)*P;(H+=v)>=1&&(H-=1);let ne=Y>=pn||p<0?1:Math.sin(Y*Math.PI/(2*pn)),fe=T*(1+K*u*Gr),Me=Math.max(20,fe*(1+ne*Y));q+=(Math.max(10,Me)-q)*Tr,Ur(f,q,S,R);let Ie=he;Q===1&&(Pr(L,Lr,k,R),Ie=CA(Ie,L,J));let ve=CA(Ie,f,O)*B,sA=ve*be,pA=ve*Be,yA=o+ae;t[yA]+=sA,s[yA]+=pA,n[ae]+=ve*g,a[ae]+=ve*c,r[ae]+=ve*l}this.phase=H,this.lastFc=q,this.envelope=u}setParameter(A,e){switch(A){default:break;case 3:this.filType=e;break;case 4:this.sens=e;break;case 5:this.setManual(e);break;case 6:this.peak=e;break;case 7:this.rate=uA.rate1(e);break;case 8:this.depth=e;break;case 9:this.polarity=e;break;case 19:this.lowGain=e-64;break;case 20:this.hiGain=e-64;break;case 21:this.pan=e-64;break;case 22:this.level=e/127;break}this.updateShelves()}setManual(A){let e=A*Nr,t=uA.manual(Math.floor(e)),s=uA.manual(Math.ceil(e)),n=e-Math.floor(e);this.manual=t+(s-t)*n}updateShelves(){wA(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),wA(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}};function Ur(A,e,t,s){let n=2*Math.PI*e/s,a=Math.cos(n),r=Math.sin(n)/(2*t),o=1-a,i=o/2,g=i,c=1+r,l=-2*a,B=1-r;A.a0=1,A.a1=l/c,A.a2=B/c,A.b0=i/c,A.b1=o/c,A.b2=g/c}function Pr(A,e,t,s){let n=2*Math.PI*e/s,a=Math.cos(n),r=Math.sin(n)/(2*t),o=(1+a)/2,i=-(1+a),g=o,c=1+r,l=-2*a,B=1-r;A.a0=1,A.a1=l/c,A.a2=B/c,A.b0=o/c,A.b1=i/c,A.b2=g/c}var yn=127,xr=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=4360;phPan=0;awPan=127;level=yn/127;phaser;autoWah;bufferPh;bufferAw;constructor(A,e){this.phaser=new ca(A),this.autoWah=new Ca(A),this.bufferAw=new Float32Array(e),this.bufferPh=new Float32Array(e),this.phaser.sendLevelToReverb=0,this.phaser.sendLevelToChorus=0,this.phaser.sendLevelToDelay=0,this.autoWah.sendLevelToReverb=0,this.autoWah.sendLevelToChorus=0,this.autoWah.sendLevelToDelay=0,this.reset()}reset(){this.phPan=0,this.awPan=127,this.level=yn/127,this.phaser.reset(),this.autoWah.reset(),this.phaser.setParameter(22,127),this.autoWah.setParameter(22,127)}process(A,e,t,s,n,a,r,o,i){let{sendLevelToReverb:g,sendLevelToChorus:c,sendLevelToDelay:l,level:B}=this,{bufferPh:h,bufferAw:E}=this;this.bufferPh.fill(0),this.phaser.process(A,A,h,h,h,h,h,0,i),this.bufferAw.fill(0),this.autoWah.process(e,e,E,E,E,E,E,0,i);let m=this.phPan|0,D=Tt[m],f=Ut[m],O=this.awPan|0,R=Tt[O],Q=Ut[O];for(let T=0;T<i;T++){let U=h[T]*.5*B,x=E[T]*.5*B,V=U*D+x*R,J=U*f+x*Q,L=o+T;t[L]+=V,s[L]+=J;let H=(V+J)*.5;n[T]+=H*g,a[T]+=H*c,r[T]+=H*l}}setParameter(A,e){if(A>=3&&A<=7){this.phaser.setParameter(A,e);return}if(A>=8&&A<=14){this.autoWah.setParameter(A-5,e);return}switch(A){default:break;case 18:this.phPan=e;break;case 19:this.phaser.setParameter(22,e);break;case 20:this.awPan=e;break;case 21:this.autoWah.setParameter(22,e);break;case 22:this.level=e/127;break}}},Sn=127,kn=Math.PI*2,Hr=.01,Or=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=293;modWave=1;modRate=3.05;modDepth=96;lowGain=0;hiGain=0;level=Sn/127;phase=0;currentGain=1;lsCoeffs={...Xe};hsCoeffs={...Xe};lsStateR={...Fe};lsStateL={...Fe};hsStateR={...Fe};hsStateL={...Fe};sampleRate;constructor(A){this.sampleRate=A,this.reset()}reset(){this.modWave=1,this.modRate=3.05,this.modDepth=96,this.lowGain=0,this.hiGain=0,this.level=Sn/127,this.phase=0,this.currentGain=1,Se(this.hsStateR),Se(this.hsStateL),Se(this.lsStateR),Se(this.lsStateL),this.updateShelves()}process(A,e,t,s,n,a,r,o,i){let{sendLevelToReverb:g,sendLevelToChorus:c,sendLevelToDelay:l,level:B,lsCoeffs:h,lsStateL:E,lsStateR:m,hsCoeffs:D,hsStateR:f,hsStateL:O,modDepth:R,modWave:Q}=this,T=this.modRate/this.sampleRate,{currentGain:U,phase:x}=this;for(let V=0;V<i;V++){let J=LA(A[V],h,D,E,O),L=LA(e[V],h,D,m,f),H;switch(Q){default:H=1-4*Math.abs(x-.5);break;case 1:H=x>.5?-1:-Math.cos((x-.75)*kn);break;case 2:H=Math.sin(kn*x);break;case 3:H=1-2*x;break;case 4:H=2*x-1;break}(x+=T)>=1&&(x-=1);let q=1-(H/2+.5)*(R/127);U+=(q-U)*Hr;let u=J*B*U,v=L*B*U,S=o+V;t[S]+=u,s[S]+=v;let k=(u+v)*.5;n[V]+=k*g,a[V]+=k*c,r[V]+=k*l}this.phase=x,this.currentGain=U}setParameter(A,e){switch(A){default:break;case 3:this.modWave=e;break;case 4:this.modRate=uA.rate1(e);break;case 5:this.modDepth=e;break;case 19:this.lowGain=e-64;break;case 20:this.hiGain=e-64;break;case 22:this.level=e/127;break}this.updateShelves()}updateShelves(){wA(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),wA(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}},Yr=[ha,mr,ca,br,Ca,xr,Or],qr=class{preDelay=0;preLPF=.5;inputDiffusion1=.75;inputDiffusion2=.625;decay=.5;decayDiffusion1=.7;decayDiffusion2=.5;damping=.005;excursionRate=.1;excursionDepth=.2;gain=1;sampleRate;lp1=0;lp2=0;lp3=0;excPhase=0;pDWrite=0;taps;pDelay;pDLength;delays=new Array;constructor(A){this.sampleRate=A,this.pDLength=A,this.pDelay=new Float32Array(this.pDLength);for(let e of[.004771345,.003595309,.012734787,.009307483,.022579886,.149625349,.060481839,.1249958,.030509727,.141695508,.089244313,.106280031])this.makeDelayLine(e);this.taps=Int16Array.from([.008937872,.099929438,.064278754,.067067639,.066866033,.006283391,.035818689,.011861161,.121870905,.041262054,.08981553,.070931756,.011256342,.004065724],e=>Math.round(e*this.sampleRate))}process(A,e,t,s,n){let a=this.preDelay|0,r=this.inputDiffusion1,o=this.inputDiffusion2,i=this.decay,g=this.decayDiffusion1,c=this.decayDiffusion2,l=1-this.damping,B=this.excursionRate/this.sampleRate,h=this.excursionDepth*this.sampleRate/1e3,E=this.pDWrite;for(let m=0;m<n;m++)this.pDelay[(E+m)%this.pDLength]=A[m];for(let m=0;m<n;m++){this.lp1+=this.preLPF*(this.pDelay[(this.pDLength+this.pDWrite-a+m)%this.pDLength]-this.lp1);let D=this.writeDelay(0,this.lp1-r*this.readDelay(0));D=this.writeDelay(1,r*(D-this.readDelay(1))+this.readDelay(0)),D=this.writeDelay(2,r*D+this.readDelay(1)-o*this.readDelay(2)),D=this.writeDelay(3,o*(D-this.readDelay(3))+this.readDelay(2));let f=o*D+this.readDelay(3),O=h*(1+Math.cos(this.excPhase*6.28)),R=h*(1+Math.sin(this.excPhase*6.2847)),Q=this.writeDelay(4,f+i*this.readDelay(11)+g*this.readDelayCAt(4,O));this.writeDelay(5,this.readDelayCAt(4,O)-g*Q),this.lp2+=l*(this.readDelay(5)-this.lp2),Q=this.writeDelay(6,i*this.lp2-c*this.readDelay(6)),this.writeDelay(7,this.readDelay(6)+c*Q),Q=this.writeDelay(8,f+i*this.readDelay(7)+g*this.readDelayCAt(8,R)),this.writeDelay(9,this.readDelayCAt(8,R)-g*Q),this.lp3+=l*(this.readDelay(9)-this.lp3),Q=this.writeDelay(10,i*this.lp3-c*this.readDelay(10)),this.writeDelay(11,this.readDelay(10)+c*Q);let T=this.readDelayAt(9,this.taps[0])+this.readDelayAt(9,this.taps[1])-this.readDelayAt(10,this.taps[2])+this.readDelayAt(11,this.taps[3])-this.readDelayAt(5,this.taps[4])-this.readDelayAt(6,this.taps[5])-this.readDelayAt(7,this.taps[6]),U=m+s;e[U]+=T*this.gain;let x=this.readDelayAt(5,this.taps[7])+this.readDelayAt(5,this.taps[8])-this.readDelayAt(6,this.taps[9])+this.readDelayAt(7,this.taps[10])-this.readDelayAt(9,this.taps[11])-this.readDelayAt(10,this.taps[12])-this.readDelayAt(11,this.taps[13]);t[U]+=x*this.gain,this.excPhase+=B;for(let V=0,J=this.delays[0];V<this.delays.length;J=this.delays[++V])J[1]=J[1]+1&J[3],J[2]=J[2]+1&J[3]}this.pDWrite=(E+n)%this.pDLength}makeDelayLine(A){let e=Math.round(A*this.sampleRate),t=2**Math.ceil(Math.log2(e));this.delays.push([new Float32Array(t),e-1,0,t-1])}writeDelay(A,e){return this.delays[A][0][this.delays[A][1]]=e}readDelay(A){return this.delays[A][0][this.delays[A][2]]}readDelayAt(A,e){let t=this.delays[A];return t[0][t[2]+e&t[3]]}readDelayCAt(A,e){let t=this.delays[A],s=e-~~e,n=t[3],a=~~e+t[2]-1,r=t[0][a++&n],o=t[0][a++&n],i=t[0][a++&n],g=t[0][a&n],c=(3*(o-i)-r+g)/2,l=2*i+r-(5*o+g)/2,B=(i-r)/2;return((c*s+l)*s+B)*s+o}},nt=class{feedback=0;gain=1;buffer;bufferLength;writeIndex=0;constructor(A){this.buffer=new Float32Array(A),this.bufferLength=this.buffer.length,this._time=A-5}_time;get time(){return this._time}set time(A){this._time=Math.min(this.bufferLength,A)|0}clear(){this.buffer.fill(0)}process(A,e,t){let s=this.writeIndex,n=this._time,a=this.buffer,r=this.bufferLength,o=this.feedback,i=this.gain;for(let g=0;g<t;g++){let c=s-n;c<0&&(c+=r);let l=a[c];e[g]=l*i,a[s]=A[g]+l*o,++s>=r&&(s=0)}this.writeIndex=s}},Jr=1.5,Kr=class{dattorro;delayLeft;delayRight;delayLeftOutput;delayRightOutput;delayLeftInput;delayPreLPF;sampleRate;preLPFfc=8e3;preLPFa=0;preLPFz=0;characterTimeCoefficient=1;characterGainCoefficient=1;characterLPFCoefficient=0;delayGain=1;panDelayFeedback=0;constructor(A,e){this.sampleRate=A,this.delayLeftOutput=new Float32Array(e),this.delayRightOutput=new Float32Array(e),this.delayLeftInput=new Float32Array(e),this.delayPreLPF=new Float32Array(e),this.dattorro=new qr(A),this.delayLeft=new nt(A),this.delayRight=new nt(A)}_delayFeedback=0;get delayFeedback(){return this._delayFeedback}set delayFeedback(A){this._delayFeedback=A,this.updateFeedback()}_character=0;get character(){return this._character}set character(A){switch(this._character=A,this.dattorro.damping=.005,this.characterTimeCoefficient=1,this.characterGainCoefficient=1,this.characterLPFCoefficient=0,this.dattorro.inputDiffusion1=.75,this.dattorro.inputDiffusion2=.625,this.dattorro.decayDiffusion1=.7,this.dattorro.decayDiffusion2=.5,this.dattorro.excursionRate=.5,this.dattorro.excursionDepth=.7,A){case 0:this.dattorro.damping=.85,this.characterTimeCoefficient=.9,this.characterGainCoefficient=.7,this.characterLPFCoefficient=.2;break;case 1:this.dattorro.damping=.2,this.characterGainCoefficient=.5,this.characterTimeCoefficient=1,this.dattorro.decayDiffusion2=.64,this.dattorro.decayDiffusion1=.6,this.characterLPFCoefficient=.2;break;case 2:this.dattorro.damping=.56,this.characterGainCoefficient=.55,this.characterTimeCoefficient=1,this.dattorro.decayDiffusion2=.64,this.dattorro.decayDiffusion1=.6,this.characterLPFCoefficient=.1;break;case 3:this.dattorro.damping=.6,this.characterGainCoefficient=1,this.characterLPFCoefficient=0,this.dattorro.decayDiffusion2=.7,this.dattorro.decayDiffusion1=.66;break;case 4:this.characterGainCoefficient=.75,this.dattorro.damping=.2,this.characterLPFCoefficient=.2;break;case 5:this.characterGainCoefficient=.55,this.dattorro.damping=.65,this.characterTimeCoefficient=.5;break}this.updateTime(),this.updateGain(),this.updateLowpass(),this.updateFeedback(),this.delayLeft.clear(),this.delayRight.clear()}_time=0;get time(){return this._time}set time(A){this._time=A,this.updateTime()}_preDelayTime=0;get preDelayTime(){return this._preDelayTime}set preDelayTime(A){this._preDelayTime=A,this.dattorro.preDelay=A/1e3*this.sampleRate}_level=0;get level(){return this._level}set level(A){this._level=A,this.updateGain()}_preLowpass=0;get preLowpass(){return this._preLowpass}set preLowpass(A){this._preLowpass=A,this.preLPFfc=8e3*.63**this._preLowpass;let e=Math.exp(-2*Math.PI*this.preLPFfc/this.sampleRate);this.preLPFa=1-e,this.updateLowpass()}process(A,e,t,s,n){switch(this._character){default:this.dattorro.process(A,e,t,s,n);return;case 6:{let a;if(this._preLowpass>0){let i=this.delayPreLPF,g=this.preLPFz,c=this.preLPFa;for(let l=0;l<n;l++){let B=A[l];g+=c*(B-g),i[l]=g}this.preLPFz=g,a=i}else a=A;this.delayLeft.process(a,this.delayLeftOutput,n);let r=this.delayGain,o=this.delayLeftOutput;for(let i=0,g=s;i<n;i++,g++){let c=o[i]*r;t[g]+=c,e[g]+=c}return}case 7:{let a;if(this._preLowpass>0){let l=this.delayPreLPF,B=this.preLPFz,h=this.preLPFa;for(let E=0;E<n;E++){let m=A[E];B+=h*(m-B),l[E]=B}this.preLPFz=B,a=l}else a=A;let r=this.panDelayFeedback,{delayLeftInput:o,delayLeftOutput:i,delayRightOutput:g}=this;for(let l=0;l<n;l++)o[l]=a[l]+g[l]*r;this.delayLeft.process(o,i,n),this.delayRight.process(i,g,n);let c=this.delayGain;for(let l=0,B=s;l<n;l++,B++)e[B]+=i[l]*c,t[B]+=g[l]*c;return}}}getSnapshot(){return{level:this._level,preLowpass:this._preLowpass,character:this._character,time:this._time,delayFeedback:this._delayFeedback,preDelayTime:this._preDelayTime}}updateFeedback(){let A=1-(1-this._delayFeedback/127)**1.9;this._character===6?this.delayLeft.feedback=A*.73:(this.delayLeft.feedback=this.delayRight.feedback=0,this.panDelayFeedback=A*.73)}updateLowpass(){this.dattorro.preLPF=Math.min(1,.1+(7-this.preLowpass)/14+this.characterLPFCoefficient)}updateGain(){this.dattorro.gain=this._level/348*this.characterGainCoefficient,this.delayGain=this._level/127*Jr}updateTime(){let A=this._time/127;this.dattorro.decay=this.characterTimeCoefficient*(.05+.65*A);let e=Math.max(21,A*this.sampleRate*.4468|0);this.character===7?this.delayRight.time=this.delayLeft.time=Math.floor(e/2):this.delayLeft.time=e}},Vr=1.3,Xr=class{preLPFfc=8e3;preLPFa=0;preLPFz=0;leftDelayBuffer;rightDelayBuffer;sampleRate;phase=0;write=0;gain=.5;reverbGain=0;delayGain=0;depthSamples=0;delaySamples=1;rateInc=0;feedbackGain=0;constructor(A,e){this.sampleRate=A,this.leftDelayBuffer=new Float32Array(A),this.rightDelayBuffer=new Float32Array(A),this.preLowpass=0}_sendLevelToReverb=0;get sendLevelToReverb(){return this._sendLevelToReverb}set sendLevelToReverb(A){this._sendLevelToReverb=A,this.reverbGain=A/127}_sendLevelToDelay=0;get sendLevelToDelay(){return this._sendLevelToDelay}set sendLevelToDelay(A){this._sendLevelToDelay=A,this.delayGain=A/127}_preLowpass=0;get preLowpass(){return this._preLowpass}set preLowpass(A){this._preLowpass=A,this.preLPFfc=8e3*.63**this._preLowpass;let e=Math.exp(-2*Math.PI*this.preLPFfc/this.sampleRate);this.preLPFa=1-e}_depth=0;get depth(){return this._depth}set depth(A){this._depth=A,this.depthSamples=A/127*.025*this.sampleRate}_delay=0;get delay(){return this._delay}set delay(A){this._delay=A,this.delaySamples=Math.max(1,A/127*.025*this.sampleRate)}_feedback=0;get feedback(){return this._feedback}set feedback(A){this._feedback=A,this.feedbackGain=A/128}_rate=0;get rate(){return this._rate}set rate(A){this._rate=A;let e=15.5*(A/127);this.rateInc=e/this.sampleRate}_level=64;get level(){return this._level}set level(A){this.gain=A/127*Vr,this._level=A}process(A,e,t,s,n,a,r){let o=this.leftDelayBuffer,i=this.rightDelayBuffer,g=this.rateInc,c=o.length,l=this.depthSamples,B=this.delaySamples,h=this.gain,E=this.reverbGain,m=this.delayGain,D=this.feedbackGain,f=this._preLowpass>0,O=this.phase,R=this.write,Q=this.preLPFz,T=this.preLPFa;for(let U=0;U<r;U++){let x=A[U];f&&(Q+=T*(x-Q),x=Q);let V=2*Math.abs(O-.5),J=Math.max(1,Math.min(B+V*l,c)),L=R-J;L<0&&(L+=c);let H=L|0,q=H+1;q>=c&&(q-=c);let u=L-H,v=o[H]*(1-u)+o[q]*u;o[R]=x+v*D;let S=Math.max(1,Math.min(B+(1-V)*l,c)),k=R-S;k<0&&(k+=c),H=k|0,q=H+1,q>=c&&(q-=c),u=k-H;let p=i[H]*(1-u)+i[q]*u,P=U+a;e[P]+=v*h,t[P]+=p*h;let K=(v+p)/2;s[U]+=K*E,n[U]+=K*m,i[R]=x+p*D,++R>=c&&(R=0),(O+=g)>=1&&(O-=1)}this.write=R,this.phase=O,this.preLPFz=Q}getSnapshot(){return{preLowpass:this._preLowpass,depth:this._depth,delay:this._delay,sendLevelToDelay:this._sendLevelToDelay,sendLevelToReverb:this._sendLevelToReverb,rate:this._rate,feedback:this._feedback,level:this._level}}},Zr=[{start:1,end:20,timeStart:.1,resolution:.1},{start:20,end:35,timeStart:2,resolution:.2},{start:35,end:45,timeStart:5,resolution:.5},{start:45,end:55,timeStart:10,resolution:1},{start:55,end:70,timeStart:20,resolution:2},{start:70,end:80,timeStart:50,resolution:5},{start:80,end:90,timeStart:100,resolution:10},{start:90,end:105,timeStart:200,resolution:20},{start:105,end:116,timeStart:500,resolution:50}],Wr=1.66,zr=class{preLPFfc=8e3;preLPFa=0;preLPFz=0;delayLeft;delayRight;delayCenter;sampleRate;delayCenterOutput;delayPreLPF;delayCenterTime;delayLeftMultiplier=.04;delayRightMultiplier=.04;gain=0;reverbGain=0;constructor(A,e){this.sampleRate=A,this.delayCenterOutput=new Float32Array(e),this.delayPreLPF=new Float32Array(e),this.delayCenterTime=.34*A,this.delayCenter=new nt(A),this.delayLeft=new nt(A),this.delayRight=new nt(A)}_sendLevelToReverb=0;get sendLevelToReverb(){return this._sendLevelToReverb}set sendLevelToReverb(A){this._sendLevelToReverb=A,this.reverbGain=A/127}_preLowpass=0;get preLowpass(){return this._preLowpass}set preLowpass(A){this._preLowpass=A,this.preLPFfc=8e3*.63**this._preLowpass;let e=Math.exp(-2*Math.PI*this.preLPFfc/this.sampleRate);this.preLPFa=1-e}_levelRight=0;get levelRight(){return this._levelRight}set levelRight(A){this._levelRight=A,this.updateGain()}_level=64;get level(){return this._level}set level(A){this._level=A,this.gain=A/127*Wr}_levelCenter=127;get levelCenter(){return this._levelCenter}set levelCenter(A){this._levelCenter=A,this.updateGain()}_levelLeft=0;get levelLeft(){return this._levelLeft}set levelLeft(A){this._levelLeft=A,this.updateGain()}_feedback=16;get feedback(){return this._feedback}set feedback(A){this._feedback=A,this.delayLeft.feedback=this.delayRight.feedback=0,this.delayCenter.feedback=(A-64)/66}_timeRatioRight=0;get timeRatioRight(){return this._timeRatioRight}set timeRatioRight(A){this._timeRatioRight=A,this.delayRightMultiplier=A*(100/2400),this.delayRight.time=this.delayCenterTime*this.delayRightMultiplier}_timeRatioLeft=0;get timeRatioLeft(){return this._timeRatioLeft}set timeRatioLeft(A){this._timeRatioLeft=A,this.delayLeftMultiplier=A*(100/2400),this.delayLeft.time=this.delayCenterTime*this.delayLeftMultiplier}_timeCenter=12;get timeCenter(){return this._timeCenter}set timeCenter(A){this._timeCenter=A;let e=.1;for(let t of Zr)if(A>=t.start&&A<t.end){e=t.timeStart+(A-t.start)*t.resolution;break}this.delayCenterTime=Math.max(2,this.sampleRate*(e/1e3)),this.delayCenter.time=this.delayCenterTime,this.delayLeft.time=this.delayCenterTime*this.delayLeftMultiplier,this.delayRight.time=this.delayCenterTime*this.delayRightMultiplier}process(A,e,t,s,n,a){let r;if(this._preLowpass>0){let l=this.delayPreLPF,B=this.preLPFz,h=this.preLPFa;for(let E=0;E<a;E++){let m=A[E];B+=h*(m-B),l[E]=B}this.preLPFz=B,r=l}else r=A;let{gain:o,reverbGain:i}=this;this.delayCenter.process(r,this.delayCenterOutput,a);let g=this.delayCenterOutput;for(let l=0,B=n;l<a;l++,B++){let h=g[l];s[l]+=h*i;let E=h*o;e[B]+=E,t[B]+=E}for(let l=0;l<a;l++)g[l]+=A[l];let c=this.delayPreLPF;this.delayLeft.process(g,c,a);for(let l=0,B=n;l<a;l++,B++){let h=c[l];e[B]+=h*o,s[l]+=h*i}this.delayRight.process(g,c,a);for(let l=0,B=n;l<a;l++,B++){let h=c[l];t[B]+=h*o,s[l]+=h*i}}getSnapshot(){return{level:this._level,preLowpass:this._preLowpass,timeCenter:this._timeCenter,timeRatioRight:this._timeRatioRight,timeRatioLeft:this._timeRatioLeft,levelCenter:this._levelCenter,levelLeft:this._levelLeft,levelRight:this._levelRight,feedback:this._feedback,sendLevelToReverb:this._sendLevelToReverb}}updateGain(){this.delayCenter.gain=this._levelCenter/127,this.delayLeft.gain=this._levelLeft/127,this.delayRight.gain=this._levelRight/127}},_r=.01,$r=.05,jr=class{voices;midiChannels=[];maxBufferSize;voiceBuffer;insertionInputL;insertionInputR;reverbInput;chorusInput;delayInput;delayActive=!1;soundBankManager=new lr(this.updatePresetList.bind(this));keyModifierManager=new Ei;sampleRate;tunings=new Float32Array(16384).fill(-1);masterParameters={...qn};currentTime=0;midiVolume=1;enableEffects;enableEventSystem;panLeft=Math.cos(Math.PI/4);panRight=Math.cos(Math.PI/4);defaultPreset;drumPreset;gainSmoothingFactor;panSmoothingFactor;eventCallbackHandler;missingPresetHandler;cachedVoices=new Map;setMasterParameter=Cr.bind(this);getMasterParameter=Br.bind(this);getAllMasterParameters=Er.bind(this);systemExclusive=ur.bind(this);voiceCount=0;customChannelNumbers=!1;reverbProcessor;chorusProcessor;delayProcessor;insertionFallback=new ha;insertionProcessor=this.insertionFallback;insertionEffects=new Map;insertionActive=!1;portSelectChannelOffset=0;insertionParams=new Uint8Array(23).fill(255);lastPriorityAssignmentTime=0;eventQueue=[];sampleTime;constructor(A,e,t,s){this.eventCallbackHandler=A,this.missingPresetHandler=e,this.sampleRate=t,this.sampleTime=1/t,this.currentTime=s.initialTime,this.enableEffects=s.enableEffects,this.enableEventSystem=s.enableEventSystem,this.maxBufferSize=s.maxBufferSize,this.gainSmoothingFactor=_r*(44100/t),this.panSmoothingFactor=$r*(44100/t),Ys.initCache(this.sampleRate);let n=this.maxBufferSize;this.reverbProcessor=s.reverbProcessor??new Kr(t,n),this.chorusProcessor=s.chorusProcessor??new Xr(t,n),this.delayProcessor=s.delayProcessor??new zr(t,n),this.voiceBuffer=new Float32Array(n),this.insertionInputL=new Float32Array(n),this.insertionInputR=new Float32Array(n),this.reverbInput=new Float32Array(n),this.chorusInput=new Float32Array(n),this.delayInput=new Float32Array(n);for(let a of Yr)this.registerInsertionProcessor(a);this.resetInsertionParams(),this.voices=[];for(let a=0;a<this.masterParameters.voiceCap;a++)this.voices.push(new ps(this.sampleRate))}controllerChange(A,e,t){if(this.customChannelNumbers){for(let s of this.midiChannels)s.rxChannel===A&&s.controllerChange(e,t);return}this.midiChannels[A+this.portSelectChannelOffset].controllerChange(e,t)}noteOn(A,e,t){if(this.customChannelNumbers){for(let s of this.midiChannels)s.rxChannel===A&&s.noteOn(e,t);return}this.midiChannels[A+this.portSelectChannelOffset].noteOn(e,t)}noteOff(A,e){if(this.customChannelNumbers){for(let t of this.midiChannels)t.rxChannel===A&&t.noteOff(e);return}this.midiChannels[A+this.portSelectChannelOffset].noteOff(e)}polyPressure(A,e,t){if(this.customChannelNumbers){for(let s of this.midiChannels)s.rxChannel===A&&s.polyPressure(e,t);return}this.midiChannels[A+this.portSelectChannelOffset].polyPressure(e,t)}channelPressure(A,e){if(this.customChannelNumbers){for(let t of this.midiChannels)t.rxChannel===A&&t.channelPressure(e);return}this.midiChannels[A+this.portSelectChannelOffset].channelPressure(e)}pitchWheel(A,e,t=-1){if(this.customChannelNumbers){for(let s of this.midiChannels)s.rxChannel===A&&s.pitchWheel(e,t);return}this.midiChannels[A+this.portSelectChannelOffset].pitchWheel(e,t)}programChange(A,e){if(this.customChannelNumbers){for(let t of this.midiChannels)t.rxChannel===A&&t.programChange(e);return}this.midiChannels[A+this.portSelectChannelOffset].programChange(e)}assignVoice(){for(let e=0;e<this.masterParameters.voiceCap;e++){let t=this.voices[e];if(!t.isActive)return t.priority=1/0,t}if(this.masterParameters.autoAllocateVoices){let e=new ps(this.sampleRate);return this.voices.push(e),this.masterParameters.voiceCap++,this.callEvent("masterParameterChange",{parameter:"voiceCap",value:this.masterParameters.voiceCap}),e}this.assignVoicePriorities();let A=this.voices[0];for(let e=0;e<this.masterParameters.voiceCap;e++){let t=this.voices[e];t.priority<A.priority&&(A=t)}return A.priority=1/0,A}stopAllChannels(A){y("%cStop all received!",C.info);for(let e of this.midiChannels)e.stopAllNotes(A)}processMessage(A,e=0,t=Da){let s=t.time;s>this.currentTime?(this.eventQueue.push({message:A,channelOffset:e,time:s}),this.eventQueue.sort((n,a)=>n.time-a.time)):this.processMessageInternal(A,e)}destroySynthProcessor(){this.voices.length=0;for(let A of this.midiChannels)A.lockedControllers=[],A.preset=void 0;this.clearCache(),this.midiChannels.length=0,this.soundBankManager.destroy()}getVoices(A,e,t){let s=this.midiChannels[A],n=this.keyModifierManager.hasOverridePatch(A,e),a=s.preset;if(n){let r=this.keyModifierManager.getPatch(A,e);a=this.soundBankManager.getPreset(r,this.masterParameters.midiSystem)}return a?this.getVoicesForPreset(a,e,t):[]}createMIDIChannel(A){let e=new Ir(this,this.defaultPreset,this.midiChannels.length);this.midiChannels.push(e),A&&(this.callEvent("newChannel",void 0),e.sendChannelProperty(),e.setDrums(!0))}resetAllControllers(A="gs"){if(this.callEvent("allControllerReset",void 0),this.setMasterParameter("midiSystem",A),this.tunings.fill(-1),this.portSelectChannelOffset=0,this.customChannelNumbers=!1,this.setMIDIVolume(1),this.setReverbMacro(4),this.setChorusMacro(2),this.setDelayMacro(0),this.masterParameters.delayLock||(this.delayActive=!1),this.resetInsertion(),!(!this.drumPreset||!this.defaultPreset))for(let e=0;e<this.midiChannels.length;e++){let t=this.midiChannels[e];t.resetControllers(!1),t.resetPreset();for(let s=0;s<128;s++)this.midiChannels[e].lockedControllers[s]&&this.callEvent("controllerChange",{channel:e,controllerNumber:s,controllerValue:this.midiChannels[e].midiControllers[s]>>7});if(!this.midiChannels[e].lockedControllers[128+Ae.pitchWheel]){let s=this.midiChannels[e].midiControllers[128+Ae.pitchWheel];this.callEvent("pitchWheel",{channel:e,pitch:s,midiNote:-1})}if(!this.midiChannels[e].lockedControllers[128+Ae.channelPressure]){let s=this.midiChannels[e].midiControllers[128+Ae.channelPressure]>>7;this.callEvent("channelPressure",{channel:e,pressure:s})}}}process(A,e,t=0,s=0){this.processSplit([[A,e]],A,e,t,s)}processSplit(A,e,t,s=0,n=0){if(this.eventQueue.length>0){let i=this.currentTime;for(;this.eventQueue[0]?.time<=i;){let g=this.eventQueue.shift();g&&this.processMessageInternal(g.message,g.channelOffset)}}s=Math.max(s,0);let a=n||A[0][0].length-s;if(a>this.maxBufferSize)throw new Error(`Requested ${a} samples, but maxBufferSize is ${this.maxBufferSize}`);this.reverbInput.fill(0),this.chorusInput.fill(0),this.delayActive&&this.delayInput.fill(0),this.insertionActive&&(this.insertionInputL.fill(0),this.insertionInputR.fill(0));for(let i of this.midiChannels)i.clearVoiceCount();this.voiceCount=0;let r=this.masterParameters.voiceCap,o=A.length;for(let i=0;i<r;i++){let g=this.voices[i],c=this.midiChannels[g.channel];if(!g.isActive||c.isMuted)continue;let l=g.channel%o;c.renderVoice(g,this.currentTime,A[l][0],A[l][1],s,a),c.voiceCount++,this.voiceCount++}if(this.enableEffects){let{chorusInput:i,delayInput:g,reverbInput:c,insertionInputR:l,insertionInputL:B}=this;this.insertionActive&&this.insertionProcessor.process(B,l,e,t,c,i,g,s,a),this.chorusProcessor.process(i,e,t,c,g,s,a),this.delayActive&&this.masterParameters.midiSystem!=="xg"&&this.delayProcessor.process(g,e,t,c,s,a),this.reverbProcessor.process(c,e,t,s,a)}for(let i of this.midiChannels)i.updateVoiceCount();this.currentTime+=a*this.sampleTime}getVoicesForPreset(A,e,t){let s=this.getCachedVoice(A,e,t);if(s!==void 0)return s;let n=new Array;for(let a of A.getVoiceParameters(e,t)){let r=a.sample;if(a.sample.getAudioData()===void 0){se(`Discarding invalid sample: ${r.name}`);continue}n.push(new Ji(a,e,t,this.sampleRate))}return this.setCachedVoice(A,e,t,n),n}clearCache(){this.cachedVoices.clear()}getInsertionSnapshot(){return{type:this.insertionProcessor.type,params:this.insertionParams.slice(),channels:this.midiChannels.map(A=>A.insertionEnabled)}}callEvent(A,e){this.eventCallbackHandler(A,e)}resetInsertionParams(){this.insertionParams.fill(255),this.insertionParams[20]=40,this.insertionParams[21]=0,this.insertionParams[22]=0}resetInsertion(){this.masterParameters.insertionEffectLock||(this.insertionActive=!1,this.insertionProcessor=this.insertionFallback,this.insertionProcessor.reset(),this.insertionProcessor.sendLevelToReverb=40/127*yt,this.insertionProcessor.sendLevelToChorus=0,this.insertionProcessor.sendLevelToDelay=0,this.resetInsertionParams(),this.callEvent("effectChange",{effect:"insertion",parameter:0,value:this.insertionProcessor.type}))}setMIDIVolume(A){this.midiVolume=Math.pow(A,Math.E)}setMasterTuning(A){A=Math.round(A);for(let e of this.midiChannels)e.setCustomController(oe.masterTuning,A)}setReverbMacro(A){if(this.masterParameters.reverbLock)return;let e=this.reverbProcessor;switch(e.level=64,e.preDelayTime=0,e.character=A,A){case 0:e.character=0,e.preLowpass=3,e.time=80,e.delayFeedback=0,e.preDelayTime=0;break;case 1:e.preLowpass=4,e.time=56,e.delayFeedback=0;break;case 2:e.preLowpass=0,e.time=72,e.delayFeedback=0;break;case 3:e.preLowpass=4,e.time=72,e.delayFeedback=0;break;case 4:e.preLowpass=0,e.time=64,e.delayFeedback=0;break;case 5:e.preLowpass=0,e.time=88,e.delayFeedback=0;break;case 6:e.preLowpass=0,e.time=32,e.delayFeedback=40;break;case 7:e.preLowpass=0,e.time=64,e.delayFeedback=32;break;default:se(`Invalid reverb macro: ${A}`);return}this.callEvent("effectChange",{effect:"reverb",parameter:"macro",value:A})}setChorusMacro(A){if(this.masterParameters.chorusLock)return;let e=this.chorusProcessor;switch(e.level=64,e.preLowpass=0,e.delay=127,e.sendLevelToDelay=0,e.sendLevelToReverb=0,A){case 0:e.feedback=0,e.delay=112,e.rate=3,e.depth=5;break;case 1:e.feedback=5,e.delay=80,e.rate=9,e.depth=19;break;case 2:e.feedback=8,e.delay=80,e.rate=3,e.depth=19;break;case 3:e.feedback=16,e.delay=64,e.rate=9,e.depth=16;break;case 4:e.feedback=64,e.delay=127,e.rate=2,e.depth=24;break;case 5:e.feedback=112,e.delay=127,e.rate=1,e.depth=5;break;case 6:e.feedback=0,e.depth=127,e.rate=0,e.depth=127;break;case 7:e.feedback=80,e.depth=127,e.rate=0,e.depth=127;break;default:se(`Invalid chorus macro: ${A}`);return}this.callEvent("effectChange",{effect:"chorus",parameter:"macro",value:A})}setDelayMacro(A){if(this.masterParameters.delayLock)return;let e=this.delayProcessor;switch(e.level=64,e.preLowpass=0,e.sendLevelToReverb=0,e.levelRight=e.levelLeft=0,e.levelCenter=127,A){case 0:e.timeCenter=97,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=80;break;case 1:e.timeCenter=106,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=80;break;case 2:e.timeCenter=115,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=72;break;case 3:e.timeCenter=83,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=72;break;case 4:e.timeCenter=105,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=125,e.levelRight=60,e.feedback=74;break;case 5:e.timeCenter=109,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=125,e.levelRight=60,e.feedback=71;break;case 6:e.timeCenter=115,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=120,e.levelRight=64,e.feedback=73;break;case 7:e.timeCenter=93,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=120,e.levelRight=64,e.feedback=72;break;case 8:e.timeCenter=109,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=114,e.levelRight=60,e.feedback=61,e.sendLevelToReverb=36;break;case 9:e.timeCenter=110,e.timeRatioLeft=21,e.timeRatioRight=32,e.levelCenter=97,e.levelLeft=127,e.levelRight=67,e.feedback=40;break;default:se(`Invalid delay macro: ${A}`);return}this.callEvent("effectChange",{effect:"delay",parameter:"macro",value:A})}getCachedVoice(A,e,t){return this.cachedVoices.get(this.getCachedVoiceIndex(A,e,t))}setCachedVoice(A,e,t,s){this.cachedVoices.set(this.getCachedVoiceIndex(A,e,t),s)}registerInsertionProcessor(A){let e=new A(this.sampleRate,this.maxBufferSize);this.insertionEffects.set(e.type,e)}processMessageInternal(A,e){let t=Gs(A[0]),s=t.channel+e;switch(t.status){case M.noteOn:{let n=A[2];n>0?this.noteOn(s,A[1],n):this.noteOff(s,A[1]);break}case M.noteOff:this.noteOff(s,A[1]);break;case M.pitchWheel:this.pitchWheel(s,A[2]<<7|A[1]);break;case M.controllerChange:this.controllerChange(s,A[1],A[2]);break;case M.programChange:this.programChange(s,A[1]);break;case M.polyPressure:this.polyPressure(s,A[1],A[2]);break;case M.channelPressure:this.channelPressure(s,A[1]);break;case M.systemExclusive:this.systemExclusive(new _(A.slice(1)),e);break;case M.reset:this.stopAllChannels(!1),this.resetAllControllers();break;default:break}}assignVoicePriorities(){if(this.lastPriorityAssignmentTime===this.currentTime)return;y("%cPolyphony exceeded, stealing voices",C.warn),this.lastPriorityAssignmentTime=this.currentTime;let A=this.masterParameters.voiceCap;for(let e=0;e<A;e++){let t=this.voices[e];t.priority=0,this.midiChannels[t.channel].drumChannel&&(t.priority+=5),t.isInRelease&&(t.priority-=5),t.priority+=t.velocity/25,t.priority-=t.volEnv.state,t.isInRelease&&(t.priority-=5),t.priority-=t.volEnv.attenuationCb/200}}updatePresetList(){let A=this.soundBankManager.presetList;this.clearCache(),this.callEvent("presetListChange",A),this.getDefaultPresets();for(let e of this.midiChannels)e.setPresetLock(!1);this.resetAllControllers()}getDefaultPresets(){this.defaultPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!1},"xg"),this.drumPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!0},"gs")}getCachedVoiceIndex(A,e,t){let s=A.bankMSB,n=A.bankLSB,{isGMGSDrum:a,program:r}=A;return a&&(s=128,n=0),s+n*128+r*16384+2097152*e+268435456*t}},Ba=class{processorInitialized=qt.isInitialized;sampleRate;onEventCall;process;processSplit;systemExclusive;controllerChange;noteOn;noteOff;polyPressure;channelPressure;pitchWheel;programChange;processMessage;synthCore;savedSnapshot;constructor(A,e={}){let t=Fs(e,Bi);if(this.sampleRate=A,!Number.isFinite(t.initialTime)||!Number.isFinite(A))throw new TypeError(`Initial time or sample rate is invalid! initial time: ${t.initialTime}, sample rate: ${A}`);this.synthCore=new jr(this.callEvent.bind(this),this.missingPreset.bind(this),this.sampleRate,t);let s=this.synthCore;this.process=s.process.bind(s),this.processSplit=s.processSplit.bind(s),this.systemExclusive=s.systemExclusive.bind(s),this.controllerChange=s.controllerChange.bind(s),this.noteOn=s.noteOn.bind(s),this.noteOff=s.noteOff.bind(s),this.polyPressure=s.polyPressure.bind(s),this.channelPressure=s.channelPressure.bind(s),this.pitchWheel=s.pitchWheel.bind(s),this.programChange=s.programChange.bind(s),this.processMessage=s.processMessage.bind(s);for(let n=0;n<16;n++)this.synthCore.createMIDIChannel(!1);this.processorInitialized.then(()=>{y("%cSpessaSynth is ready!",C.recognized)})}get enableEffects(){return this.synthCore.enableEffects}set enableEffects(A){this.synthCore.enableEffects=A}get enableEventSystem(){return this.synthCore.enableEventSystem}set enableEventSystem(A){this.synthCore.enableEventSystem=A}get midiChannels(){return this.synthCore.midiChannels}get totalVoicesAmount(){return this.synthCore.voiceCount}get currentSynthTime(){return this.synthCore.currentTime}get reverbProcessor(){return this.synthCore.reverbProcessor}get chorusProcessor(){return this.synthCore.chorusProcessor}get delayProcessor(){return this.synthCore.delayProcessor}get soundBankManager(){return this.synthCore.soundBankManager}get keyModifierManager(){return this.synthCore.keyModifierManager}renderAudio(A,e,t,s=0,n=0){let a=this.synthCore.maxBufferSize;if(n>a){let r=0;for(;r<n;){let o=Math.min(a,n-r);this.synthCore.process(A[0],A[1],s+r,o),r+=o}}else this.synthCore.process(A[0],A[1],s,n)}renderAudioSplit(A,e,t,s=0,n=0){let a=this.synthCore.maxBufferSize;if(n>a){let r=0;for(;r<n;){let o=Math.min(a,n-r);this.synthCore.processSplit(t,A[0],A[1],s+r,o),r+=o}}else this.synthCore.processSplit(t,A[0],A[1],s,n)}onMissingPreset=(A,e)=>{se(`No preset found for ${IA.toMIDIString(A)}! Did you forget to add a sound bank?`)};setMasterParameter(A,e){this.synthCore.setMasterParameter(A,e)}getMasterParameter(A){return this.synthCore.getMasterParameter(A)}getAllMasterParameters(){return this.synthCore.getAllMasterParameters()}resetAllControllers(A="gs"){this.synthCore.resetAllControllers(A)}applySynthesizerSnapshot(A){this.savedSnapshot=A,A.apply(this),y("%cFinished applying snapshot!",C.info),this.resetAllControllers()}getSnapshot(){return Hs.create(this)}getInsertionSnapshot(){return this.synthCore.getInsertionSnapshot()}setEmbeddedSoundBank(A,e){let t=ht.fromArrayBuffer(A);this.synthCore.soundBankManager.addSoundBank(t,Bt,e);let s=this.synthCore.soundBankManager.priorityOrder;s.pop(),s.unshift(Bt),this.synthCore.soundBankManager.priorityOrder=s,this.savedSnapshot!==void 0&&this.applySynthesizerSnapshot(this.savedSnapshot),y(`%cEmbedded sound bank set at offset %c${e}`,C.recognized,C.value)}clearEmbeddedBank(){this.synthCore.soundBankManager.soundBankList.some(A=>A.id===Bt)&&this.synthCore.soundBankManager.deleteSoundBank(Bt)}createMIDIChannel(){this.synthCore.createMIDIChannel(!0)}stopAllChannels(A=!1){this.synthCore.stopAllChannels(A)}destroySynthProcessor(){this.synthCore.destroySynthProcessor()}killVoices(A){se(`killVoices is deprecated, don't use it! Amount requested: ${A}`)}clearCache(){this.synthCore.clearCache()}getVoicesForPreset(A,e,t){return this.synthCore.getVoicesForPreset(A,e,t)}callEvent(A,e){this.onEventCall?.({type:A,data:e})}missingPreset(A,e){return this.onMissingPreset(A,e)}};var Vt=mA.consoleColors;var Ea="spessasynth-worklet-processor";function da(A,e){return{...e,...A}}var Qa={skipToFirstNoteOn:!0,initialPlaybackRate:1};var Vs=class extends Ot{events=[];constructor(e){super(),super.copyFrom(e),this.events=[]}},Xt=class A extends NA{tracks;embeddedSoundBank=void 0;embeddedSoundBankSize;constructor(e){super(),super.copyMetadataFrom(e),this.tracks=e.tracks.map(t=>new Vs(t)),this.embeddedSoundBankSize=e instanceof A?e.embeddedSoundBankSize:e?.embeddedSoundBank?.byteLength}};var Zt={shuffleOn:1,shuffleOff:2,index:3};var fa=1,Wt=class{synthesizer;sequencers=new Array;post;lastSequencerSync=0;alive=!1;enableEventSystem;constructor(e,t,s){this.synthesizer=new Ba(e,t),this.enableEventSystem=t.enableEventSystem??!1,this.post=s,this.synthesizer.onEventCall=n=>{this.post({type:"eventCall",data:n,currentTime:this.synthesizer.currentSynthTime})}}createNewSequencer(){let e=new On(this.synthesizer),t=this.sequencers.length;this.sequencers.push(e),e.onEventCall=s=>{if(this.enableEventSystem){if(s.type==="songListChange"){let a=s.data.newSongList.map(r=>new Xt(r));this.post({type:"sequencerReturn",data:{type:s.type,data:{newSongList:a,shuffledSongIndexes:e.shuffledSongIndexes},id:t},currentTime:this.synthesizer.currentSynthTime});return}this.post({type:"sequencerReturn",data:{...s,id:t},currentTime:this.synthesizer.currentSynthTime})}}}postReady(e,t,s=[]){this.post({type:"isFullyInitialized",data:{type:e,data:t},currentTime:this.synthesizer.currentSynthTime},s)}postProgress(e,t){this.post({type:"renderingProgress",data:{type:e,data:t},currentTime:this.synthesizer.currentSynthTime})}destroy(){this.synthesizer.destroySynthProcessor(),delete this.synthesizer,delete this.sequencers}handleMessage(e){let t=e.channelNumber,s;if(t>=0&&(s=this.synthesizer.midiChannels[t],s===void 0)){mA.SpessaSynthWarn(`Trying to access channel ${t} which does not exist... ignoring!`);return}switch(e.type){case"midiMessage":{this.synthesizer.processMessage(e.data.messageData,e.data.channelOffset,e.data.options);break}case"customCcChange":{s?.setCustomController(e.data.ccNumber,e.data.ccValue);break}case"ccReset":{t===Ht?this.synthesizer.resetAllControllers():s?.resetControllers();break}case"stopAll":{t===Ht?this.synthesizer.stopAllChannels(e.data===1):s?.stopAllNotes(e.data===1);break}case"muteChannel":{s?.muteChannel(e.data);break}case"addNewChannel":{this.synthesizer.createMIDIChannel();break}case"setMasterParameter":{this.synthesizer.setMasterParameter(e.data.type,e.data.data);break}case"setDrums":{s?.setDrums(e.data);break}case"transposeChannel":{s?.transposeChannel(e.data.semitones,e.data.force);break}case"lockController":{if(e.data.controllerNumber===Ht)s?.setPresetLock(e.data.isLocked);else{if(!s)return;s.lockedControllers[e.data.controllerNumber]=e.data.isLocked}break}case"sequencerSpecific":{let n=this.sequencers[e.data.id];if(!n)return;let a=e.data;switch(a.type){default:break;case"loadNewSongList":{try{let o=a.data.map(i=>"duration"in i?NA.copyFrom(i):NA.fromArrayBuffer(i.binary,i.fileName));n.loadNewSongList(o)}catch(r){console.error(r),this.post({type:"sequencerReturn",data:{type:"midiError",data:r,id:e.data.id},currentTime:this.synthesizer.currentSynthTime})}break}case"pause":{n.pause();break}case"play":{n.play();break}case"setTime":{n.currentTime=a.data;break}case"changeMIDIMessageSending":{n.externalMIDIPlayback=a.data;break}case"setPlaybackRate":{n.playbackRate=a.data;break}case"setLoopCount":{n.loopCount=a.data;break}case"changeSong":{switch(a.data.changeType){case Zt.shuffleOff:{n.shuffleMode=!1;break}case Zt.shuffleOn:{n.shuffleMode=!0;break}case Zt.index:{a.data.data!==void 0&&(n.songIndex=a.data.data);break}}break}case"getMIDI":{if(!n.midiData)throw new Error("No MIDI is loaded!");this.post({type:"sequencerReturn",data:{type:"getMIDI",data:n.midiData,id:e.data.id},currentTime:this.synthesizer.currentSynthTime});break}case"setSkipToFirstNote":{n.skipToFirstNoteOn=a.data;break}}break}case"soundBankManager":{try{let n=this.synthesizer.soundBankManager,a=e.data,r;switch(a.type){case"addSoundBank":{r=ht.fromArrayBuffer(a.data.soundBankBuffer),n.addSoundBank(r,a.data.id,a.data.bankOffset),this.postReady("soundBankManager",null);break}case"deleteSoundBank":{n.deleteSoundBank(a.data),this.postReady("soundBankManager",null);break}case"rearrangeSoundBanks":n.priorityOrder=a.data,this.postReady("soundBankManager",null)}}catch(n){this.post({type:"soundBankError",data:n,currentTime:this.synthesizer.currentSynthTime})}break}case"keyModifierManager":{let n=e.data,a=this.synthesizer.keyModifierManager;switch(n.type){default:return;case"addMapping":{a.addMapping(n.data.channel,n.data.midiNote,n.data.mapping);break}case"clearMappings":{a.clearMappings();break}case"deleteMapping":a.deleteMapping(n.data.channel,n.data.midiNote)}break}case"requestSynthesizerSnapshot":{let n=Hs.create(this.synthesizer);this.postReady("synthesizerSnapshot",n);break}case"requestNewSequencer":{this.createNewSequencer();break}case"setLogLevel":{Gn(e.data.enableInfo,e.data.enableWarning,e.data.enableGroup);break}case"destroyWorklet":{this.alive=!1,this.synthesizer.destroySynthProcessor(),this.destroy();break}default:{mA.SpessaSynthWarn("Unrecognized event!",e);break}}}};var zt=class extends Wt{alive=!0;oneOutputMode;port;constructor(e,t,s,n){super(e,{enableEffects:!n.oneOutput,enableEventSystem:n?.enableEventSystem,initialTime:t},(a,r)=>{s.postMessage(a,r)}),this.port=s,this.oneOutputMode=n.oneOutput,this.synthesizer.processorInitialized.then(()=>{this.port.onmessage=a=>this.handleMessage(a.data),this.postReady("sf3Decoder",null)})}process(e,t){if(!this.alive)return!1;for(let n of this.sequencers)n.processTick();if(this.oneOutputMode){let n=t[0],a=[];for(let r=0;r<32;r+=2)a.push([n[r],n[r+1]]);this.synthesizer.enableEffects=!1,this.synthesizer.processSplit(a,n[0],n[0])}else this.synthesizer.processSplit(t.slice(1),t[0][0],t[0][1]);let s=this.synthesizer.currentSynthTime;if(this.enableEventSystem&&s-this.lastSequencerSync>fa){for(let n=0;n<this.sequencers.length;n++)this.post({type:"sequencerReturn",data:{type:"sync",data:this.sequencers[n].currentTime,id:n},currentTime:s});this.lastSequencerSync=s}return!0}handleMessage(e){if(e.type==="startOfflineRender"){this.startOfflineRender(e.data);return}super.handleMessage(e)}startOfflineRender(e){this.sequencers.length===0&&this.createNewSequencer();let t=this.sequencers[0];for(let[n,a]of e.soundBankList.entries())try{this.synthesizer.soundBankManager.addSoundBank(ht.fromArrayBuffer(a.soundBankBuffer),`bank-${n}`,a.bankOffset)}catch(r){this.post({type:"soundBankError",data:r,currentTime:this.synthesizer.currentSynthTime})}e.snapshot!==void 0&&this.synthesizer.applySynthesizerSnapshot(e.snapshot),mA.SpessaSynthInfo("%cRendering enabled! Starting render.",Vt.info),t.loopCount=e.loopCount,this.synthesizer.setMasterParameter("autoAllocateVoices",!0);let s=da(e.sequencerOptions,Qa);t.skipToFirstNoteOn=s.skipToFirstNoteOn,t.playbackRate=s.initialPlaybackRate;try{t.loadNewSongList([NA.copyFrom(e.midiSequence)]),t.play()}catch(n){console.error(n),this.post({type:"sequencerReturn",data:{type:"midiError",data:n,id:0},currentTime:this.synthesizer.currentSynthTime})}this.postReady("startOfflineRender",null)}};var Xs=class extends AudioWorkletProcessor{core;constructor(e){super(),this.core=new zt(sampleRate,currentTime,this.port,e.processorOptions)}process(e,t){return this.core.process(e,t)}};registerProcessor(Ea,Xs);mA.SpessaSynthInfo("%cProcessor successfully registered!",Vt.recognized);
19
+ %c${this.instruments.length}%c instruments and %c${this.samples.length}%c samples.`,C.info,C.recognized,C.info,C.recognized,C.info,C.recognized,C.info,C.recognized,C.info),ee()}verifyHeader(A,e){A.header.toLowerCase()!==e.toLowerCase()&&(ee(),this.parsingError(`Invalid chunk header! Expected "${e.toLowerCase()}" got "${A.header.toLowerCase()}"`))}verifyText(A,e){A.toLowerCase()!==e.toLowerCase()&&(ee(),this.parsingError(`Invalid FourCC: Expected "${e.toLowerCase()}" got "${A.toLowerCase()}"\``))}},ht=class{static fromArrayBuffer(A){return ue(new _(A.slice(8,12)),4).toLowerCase()==="dls "?this.loadDLS(A):new qi(A,!1)}static loadDLS(A){return sa.read(A).toSF()}},Nt=class aa extends De{isEffectModulator;isDefaultResonantModulator;isModWheelModulator;constructor(e,t,s,n,a,r,o,i){super(e,t,s,n,a),this.isEffectModulator=r,this.isDefaultResonantModulator=o,this.isModWheelModulator=i}static fromData(e,t,s,n,a){let r=e.toSourceEnum(),o=t.toSourceEnum();return new aa(e,t,s,n,a,(r===219||r===221)&&o===0&&(s===I.reverbEffectsSend||s===I.chorusEffectsSend),r===Xn&&o===0&&s===I.initialFilterQ,(e.isCC&&e.index===d.modulationWheel||t.isCC&&t.index===d.modulationWheel)&&(s===I.modLfoToPitch||s===I.vibLfoToPitch))}static fromModulator(e){return this.fromData(e.primarySource,e.secondarySource,e.destination,e.transformAmount,e.transformType)}},Ji=class{sampleData;generators;modulators;exclusiveClass;targetKey;velocity;rootKey;loopStart;loopEnd;playbackStep;loopingMode;constructor(A,e,t,s){let n=A.sample,a=A.generators;this.modulators=A.modulators.map(Nt.fromModulator.bind(Nt)),this.generators=a,this.rootKey=n.originalKey,a[I.overridingRootKey]>-1&&(this.rootKey=a[I.overridingRootKey]),this.targetKey=e,a[I.keyNum]>-1&&(this.targetKey=a[I.keyNum]),this.velocity=t,a[I.velocity]>-1&&(this.velocity=a[I.velocity]),this.exclusiveClass=a[I.exclusiveClass],this.loopStart=n.loopStart,this.loopEnd=n.loopEnd,this.sampleData=n.getAudioData(),this.playbackStep=n.sampleRate/s*Math.pow(2,n.pitchCorrection/1200),this.loopingMode=a[I.sampleModes]}},Ki=Math.PI*2;function Vi(A,e,t){if(t<A)return 0;let s=t-A;return Math.sin(Ki*e*s)}var ln=Math.PI/2,Rt=-500,ia=500,Js=ia-Rt,ra=new Float32Array(Js+1),oa=new Float32Array(Js+1);for(let A=Rt;A<=ia;A++){let e=(A-Rt)/Js,t=A-Rt;ra[t]=Math.cos(ln*e),oa[t]=Math.sin(ln*e)}function Xi(A,e,t,s,n,a){if(!A.isInRelease&&e>=A.releaseStartTime&&(A.isInRelease=!0,A.volEnv.startRelease(A),A.modEnv.startRelease(A),A.loopingMode===3&&(A.wavetable.isLooping=!1)),A.hasRendered=!0,!A.isActive)return;let r=this.synthCore,o=r.sampleRate,i=A.modulatedGenerators,g=A.targetKey,c=A.pitchOffset+i[I.fineTune]+this.octaveTuning[A.midiNote]+this.channelTuningCents,l=i[I.coarseTune],B=r.tunings[this.preset.program*128+A.realKey];if(B!==-1&&(g=Math.trunc(B),c+=(B-g)*100),A.portamentoFromKey>-1){let S=Math.min((e-A.startTime)/A.portamentoDuration,1),k=g-A.portamentoFromKey;l-=k*(1-S)}c+=(g-A.rootKey)*i[I.scaleTuning];let h=0,E=0,m=A.gainModifier*(1+i[I.amplitude]/1e3);if(e>=A.vibLfoStartTime){let S=i[I.vibLfoToPitch],k=i[I.vibLfoToFilterFc],p=i[I.vibLfoAmplitudeDepth];if(S!==0||k!==0||p!==0){let P=Math.max(0,us(i[I.freqVibLFO])+i[I.vibLfoRate]/100)*a/o,K=1-4*Math.abs(A.vibLfoPhase-.5);(A.vibLfoPhase+=P)>=1&&(A.vibLfoPhase-=1),c+=K*S,h+=K*k,m*=1-(K+1)/2*(p/1e3)}}if(e>=A.modLfoStartTime){let S=i[I.modLfoToPitch],k=i[I.modLfoToVolume],p=i[I.modLfoToFilterFc],P=i[I.modLfoAmplitudeDepth];if(S!==0||p!==0||k!==0||P!==0){let K=Math.max(0,us(i[I.freqModLFO])+i[I.modLfoRate]/100)*a/o,Ce=1-4*Math.abs(A.modLfoPhase-.5);(A.modLfoPhase+=K)>=1&&(A.modLfoPhase-=1),c+=Ce*S,E+=-Ce*k,h+=Ce*p,m*=1-(Ce+1)/2*(P/1e3)}}this.midiControllers[d.modulationWheel]===0&&this.channelVibrato.depth>0&&(c+=Vi(A.startTime+this.channelVibrato.delay,this.channelVibrato.rate,e)*this.channelVibrato.depth);let D=i[I.modEnvToPitch],f=i[I.modEnvToFilterFc];if(f!==0||D!==0){let S=A.modEnv.process(A,e);h+=S*f,c+=S*D}E-=A.resonanceOffset;let O=c+l*100|0;O!==A.tuningCents&&(A.tuningCents=O,A.tuningRatio=Math.pow(2,O/1200));let R=vt(i[I.initialAttenuation])*vt(E);if(A.loopingMode===2&&!A.isInRelease){A.isActive=A.volEnv.process(a,R);return}let Q=r.voiceBuffer;A.isActive=A.wavetable.process(a,A.tuningRatio,Q);let T=A.volEnv.outputGain,U=A.volEnv.process(a,R),x=(A.volEnv.outputGain-T)/a;{let S=A.filter,k=i[I.initialFilterFc];S.initialized?S.currentInitialFc+=(k-S.currentInitialFc)*Ys.smoothingConstant:(S.initialized=!0,S.currentInitialFc=k);let p=S.currentInitialFc+h,P=i[I.initialFilterQ];if(S.currentInitialFc>13499&&p>13499&&P===0){S.currentInitialFc=13500;for(let K=0;K<a;K++)Q[K]*=T,T+=x}else{(Math.abs(S.lastTargetCutoff-p)>1||S.resonanceCb!==P)&&(S.lastTargetCutoff=p,S.resonanceCb=P,S.calculateCoefficients(p));let{a0:K,a1:Ce,a2:be,a3:Be,a4:ae}=S,{x1:he,x2:j,y1:Y,y2:ne}=S;for(let fe=0;fe<a;fe++){let Me=Q[fe],Ie=K*Me+Ce*he+be*j-Be*Y-ne*ae;j=he,he=Me,ne=Y,Y=Ie,Q[fe]=Ie*T,T+=x}S.x1=he,S.x2=j,S.y1=Y,S.y2=ne}}A.isActive=A.isActive&&U;let V;A.overridePan?V=A.overridePan:(A.currentPan+=(i[I.pan]-A.currentPan)*r.panSmoothingFactor,V=A.currentPan);let J=r.masterParameters.masterGain*r.midiVolume*m,L=V+500|0,H=ra[L]*J*r.panLeft,q=oa[L]*J*r.panRight;if(this.insertionEnabled){let S=r.insertionInputL,k=r.insertionInputR;for(let p=0;p<a;p++){let P=Q[p];S[p]+=H*P,k[p]+=q*P}return}for(let S=0;S<a;S++){let k=Q[S],p=S+n;t[p]+=H*k,s[p]+=q*k}if(!r.enableEffects)return;let u=i[I.reverbEffectsSend]*A.reverbSend;if(u>0){let S=r.masterParameters.reverbGain*J*(u/1e3),k=r.reverbInput;for(let p=0;p<a;p++)k[p]+=S*Q[p]}let v=i[I.chorusEffectsSend]*A.chorusSend;if(v>0){let S=r.masterParameters.chorusGain*(v/1e3)*J,k=r.chorusInput;for(let p=0;p<a;p++)k[p]+=S*Q[p]}if(r.delayActive){let S=this.midiControllers[d.variationDepth]*A.delaySend;if(S>0){let k=J*r.masterParameters.delayGain*((S>>7)/127),p=r.delayInput;for(let P=0;P<a;P++)p[P]+=k*Q[P]}}}var DA={pitchWheelRange:0,fineTuning:1,coarseTuning:2,modulationDepth:5,resetParameters:16383},Te={partParameter:1,drumPitch:24,drumPitchFine:25,drumLevel:26,drumPan:28,drumReverb:29,drumChorus:30,drumDelay:31,awe32:127,SF2:120},kA={vibratoRate:8,vibratoDepth:9,vibratoDelay:10,TVFFilterCutoff:32,TVFFilterResonance:33,EGAttackTime:99,EGDecayTime:100,EGReleaseTime:102},Ue=(A,e,t,s)=>{s.length>0&&(s=" "+s),y(`%c${e} for %c${A}%c is now set to %c${t}%c${s}.`,C.info,C.recognized,C.info,C.value,C.info)},gs=A=>{A.channelVibrato.delay===0&&A.channelVibrato.rate===0&&A.channelVibrato.depth===0&&(A.channelVibrato.depth=50,A.channelVibrato.rate=8,A.channelVibrato.delay=.6)};function Zi(A){switch(this.midiControllers[d.dataEntryMSB]=A<<7,this.dataEntryState){default:case Ve.Idle:break;case Ve.NRPCoarse:case Ve.NRPFine:{let e=this.midiControllers[d.nonRegisteredParameterMSB]>>7,t=this.midiControllers[d.nonRegisteredParameterLSB]>>7,s=this.midiControllers[d.dataEntryLSB]>>7;if(this.synthCore.masterParameters.drumLock&&e>=Te.drumPitch&&e<=Te.drumDelay)return;switch(e){default:if(A===64)return;y(`%cUnrecognized NRPN for %c${this.channel}%c: %c(0x${e.toString(16).toUpperCase()} 0x${t.toString(16).toUpperCase()})%c data value: %c${A}`,C.warn,C.recognized,C.warn,C.unrecognized,C.warn,C.value);break;case Te.partParameter:{let n=this.synthCore.masterParameters.nprnParamLock,a=this.synthCore.masterParameters.customVibratoLock||n;switch(t){default:if(A===64)return;y(`%cUnrecognized NRPN for %c${this.channel}%c: %c(0x${e.toString(16)} 0x${t.toString(16)})%c data value: %c${A}`,C.warn,C.recognized,C.warn,C.unrecognized,C.warn,C.value);break;case kA.vibratoRate:if(this.sysExModulators.active){this.controllerChange(d.vibratoRate,A);return}if(a||A===64)return;gs(this),this.channelVibrato.rate=A/64*8,Ue(this.channel,"Vibrato rate",`${A} = ${this.channelVibrato.rate}`,"Hz");break;case kA.vibratoDepth:if(a||A===64)return;gs(this),this.channelVibrato.depth=A/2,Ue(this.channel,"Vibrato depth",`${A} = ${this.channelVibrato.depth}`,"cents of detune");break;case kA.vibratoDelay:if(a||A===64)return;gs(this),this.channelVibrato.delay=A/64/3,Ue(this.channel,"Vibrato delay",`${A} = ${this.channelVibrato.delay}`,"seconds");break;case kA.TVFFilterCutoff:if(n)return;this.controllerChange(d.brightness,A),Ue(this.channel,"Filter cutoff",A.toString(),"");break;case kA.TVFFilterResonance:if(n)return;this.controllerChange(d.filterResonance,A),Ue(this.channel,"Filter resonance",A.toString(),"");break;case kA.EGAttackTime:if(n)return;this.controllerChange(d.attackTime,A),Ue(this.channel,"EG attack time",A.toString(),"");break;case kA.EGDecayTime:if(n)return;this.controllerChange(d.decayTime,A),Ue(this.channel,"EG decay time",A.toString(),"");break;case kA.EGReleaseTime:if(n)return;this.controllerChange(d.releaseTime,A),Ue(this.channel,"EG release time",A.toString(),"");break}break}case Te.drumPitch:{let n=this.channelSystem==="xg"||this.patch.bankLSB===1?(A-64)*100:(A-64)*50;this.drumParams[t].pitch=n,Ue(this.channel,`Drum ${t} pitch`,n,"cents");break}case Te.drumPitchFine:{let n=A-64;this.drumParams[t].pitch+=n,Ue(this.channel,`Drum ${t} pitch fine`,this.drumParams[t].pitch,"cents");break}case Te.drumLevel:this.drumParams[t].gain=A/120,Ue(this.channel,`Drum ${t} level`,A,"");break;case Te.drumPan:this.drumParams[t].pan=A,Ue(this.channel,`Drum ${t} pan`,A,"");break;case Te.drumReverb:this.drumParams[t].reverbGain=A/127,Ue(this.channel,`Drum ${t} reverb level`,A,"");break;case Te.drumChorus:this.drumParams[t].chorusGain=A/127,Ue(this.channel,`Drum ${t} chorus level`,A,"");break;case Te.drumDelay:this.drumParams[t].delayGain=A/127,Ue(this.channel,`Drum ${t} delay level`,A,"");break;case Te.awe32:break;case Te.SF2:{if(t>100)break;let n=this.customControllers[oe.sf2NPRNGeneratorLSB],a=(A<<7|s)-8192;this.setGeneratorOffset(n,a);break}}break}case Ve.RPCoarse:case Ve.RPFine:{let e=this.midiControllers[d.registeredParameterMSB]|this.midiControllers[d.registeredParameterLSB]>>7;switch(e){default:y(`%cUnrecognized RPN for %c${this.channel}%c: %c(0x${e.toString(16)})%c data value: %c${A}`,C.warn,C.recognized,C.warn,C.unrecognized,C.warn,C.value);break;case DA.pitchWheelRange:this.midiControllers[128+Ae.pitchWheelRange]=A<<7,Ue(this.channel,"Pitch wheel range",A.toString(),"semitones");break;case DA.coarseTuning:{let t=A-64;this.setCustomController(oe.channelTuningSemitones,t),Ue(this.channel,"Coarse tuning",t.toString(),"semitones");break}case DA.fineTuning:this.setTuning(A-64,!1);break;case DA.modulationDepth:this.setModulationDepth(A*100);break;case DA.resetParameters:this.resetParameters();break}}}}var Wi=[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],QA=(A,e,t)=>Math.max(e,Math.min(t,A)),mt=A=>Math.max(-32768,1200*Math.log2(A/1e3)),zi=A=>6900+1200*Math.log2(A/440);function _i(A,e,t){let s=t<<7|e;s-=8192;let n=Wi[A];n||se(`Invalid AWE32 LSB: %c${A}`,C.unrecognized);let a,r,o,i;switch(n){default:break;case I.delayModLFO:case I.delayVibLFO:case I.delayVolEnv:case I.delayModEnv:a=4*QA(s,0,5900),this.setGeneratorOverride(n,mt(a));break;case I.attackVolEnv:case I.attackModEnv:a=QA(s,0,5940),this.setGeneratorOverride(n,mt(a));break;case I.holdVolEnv:case I.holdModEnv:a=QA(s,0,8191),this.setGeneratorOverride(n,mt(a));break;case I.decayModEnv:case I.decayVolEnv:case I.releaseVolEnv:case I.releaseModEnv:a=4*QA(s,0,5940),this.setGeneratorOverride(n,mt(a));break;case I.freqVibLFO:case I.freqModLFO:r=.084*e,this.setGeneratorOverride(n,zi(r),!0);break;case I.sustainVolEnv:case I.sustainModEnv:o=e*7.5,this.setGeneratorOverride(n,o);break;case I.fineTune:this.setGeneratorOverride(n,s,!0);break;case I.modLfoToPitch:case I.vibLfoToPitch:i=QA(s,-127,127)*9.375,this.setGeneratorOverride(n,i,!0);break;case I.modEnvToPitch:i=QA(s,-127,127)*9.375,this.setGeneratorOverride(n,i);break;case I.modLfoToVolume:o=1.875*e,this.setGeneratorOverride(n,o,!0);break;case I.initialFilterFc:{let g=4335+59*e;this.setGeneratorOverride(n,g,!0);break}case I.initialFilterQ:o=215*(e/127),this.setGeneratorOverride(n,o,!0);break;case I.modLfoToFilterFc:i=QA(s,-64,63)*56.25,this.setGeneratorOverride(n,i,!0);break;case I.modEnvToFilterFc:i=QA(s,-64,63)*56.25,this.setGeneratorOverride(n,i);break;case I.chorusEffectsSend:case I.reverbEffectsSend:this.setGeneratorOverride(n,QA(s,0,255)*(1e3/255));break}}function $i(A){switch(this.midiControllers[d.dataEntryLSB]=A<<7,this.dataEntryState){default:break;case Ve.RPCoarse:case Ve.RPFine:{let e=this.midiControllers[d.registeredParameterMSB]|this.midiControllers[d.registeredParameterLSB]>>7;switch(e){default:y(`%cUnrecognized RPN LSB for %c${this.channel}%c: %c(0x${e.toString(16)})%c data value: %c${A}`,C.warn,C.recognized,C.warn,C.unrecognized,C.warn,C.value);break;case DA.pitchWheelRange:{if(A===0)break;this.midiControllers[128+Ae.pitchWheelRange]|=A;let t=(this.midiControllers[128+Ae.pitchWheelRange]>>7)+A/128;y(`%cChannel ${this.channel} pitch wheel range. Semitones: %c${t}`,C.info,C.value);break}case DA.fineTuning:{let t=this.customControllers[oe.channelTuning]<<7|A;this.setTuning(t*.01220703125);break}case DA.modulationDepth:{let t=this.customControllers[oe.modulationMultiplier]*50+A/128*100;this.setModulationDepth(t);break}case 16383:this.resetParameters();break}break}case Ve.NRPFine:{let e=this.midiControllers[d.nonRegisteredParameterMSB]>>7,t=this.midiControllers[d.nonRegisteredParameterLSB]>>7;if(e===Te.SF2||e>=Te.drumPitch&&e<=Te.drumDelay||e===Te.partParameter)return;e===Te.awe32?_i.call(this,t,A,this.midiControllers[d.dataEntryMSB]>>7):y(`%cUnrecognized NRPN LSB for %c${this.channel}%c: %c(0x${e.toString(16).toUpperCase()} 0x${t.toString(16).toUpperCase()})%c data value: %c${A}`,C.warn,C.recognized,C.warn,C.unrecognized,C.warn,C.value)}}}function ji(A,e,t=!0){if(A>127)throw new Error("Invalid MIDI Controller.");if(A>=d.modulationWheelLSB&&A<=d.effectControl2LSB&&A!==d.dataEntryLSB){let s=A-32;if(this.lockedControllers[s])return;this.midiControllers[s]=this.midiControllers[s]&16256|e&127,this.computeModulatorsAll(1,s)}if(!this.lockedControllers[A]){switch(this.midiControllers[A]=e<<7,A){case d.omniModeOff:case d.omniModeOn:case d.allNotesOff:this.stopAllNotes();break;case d.allSoundOff:this.stopAllNotes(!0);break;case d.polyModeOn:this.stopAllNotes(!0),this.polyMode=!0;break;case d.monoModeOn:this.stopAllNotes(!0),this.polyMode=!1;break;case d.bankSelect:this.setBankMSB(e),this.channel%16===9&&ke.isSystemXG(this.channelSystem)&&this.setBankMSB(127);break;case d.bankSelectLSB:this.setBankLSB(e);break;case d.variationDepth:this.synthCore.delayActive=!0;break;case d.registeredParameterLSB:this.dataEntryState=Ve.RPFine;break;case d.registeredParameterMSB:this.dataEntryState=Ve.RPCoarse;break;case d.nonRegisteredParameterMSB:this.customControllers[oe.sf2NPRNGeneratorLSB]=0,this.dataEntryState=Ve.NRPCoarse;break;case d.nonRegisteredParameterLSB:if(this.midiControllers[d.nonRegisteredParameterMSB]>>7===Te.SF2)switch(this.customControllers[oe.sf2NPRNGeneratorLSB]%100!==0&&(this.customControllers[oe.sf2NPRNGeneratorLSB]=0),e){case 100:this.customControllers[oe.sf2NPRNGeneratorLSB]+=100;break;case 101:this.customControllers[oe.sf2NPRNGeneratorLSB]+=1e3;break;case 102:this.customControllers[oe.sf2NPRNGeneratorLSB]+=1e4;break;default:e<100&&(this.customControllers[oe.sf2NPRNGeneratorLSB]+=e)}this.dataEntryState=Ve.NRPFine;break;case d.dataEntryMSB:this.dataEntryCoarse(e);break;case d.dataEntryLSB:this.dataEntryFine(e);break;case d.resetAllControllers:this.resetControllersRP15Compliant();break;case d.sustainPedal:if(e<64){let s=0;if(this.voiceCount>0){for(let n of this.synthCore.voices)if(n.channel===this.channel&&n.isActive&&n.isHeld&&(n.isHeld=!1,n.releaseVoice(this.synthCore.currentTime),++s>=this.voiceCount))break}}break;default:this.computeModulatorsAll(1,A);break}t&&this.synthCore.callEvent("controllerChange",{channel:this.channel,controllerNumber:A,controllerValue:e})}}var er=40;function Ar(A){if(A<1)return 0;{let e=[1,2,4,8,16,32,64,80,96,112,120,124],t=[1,.5,.25,.125,.0625,.03125,.0625,.0625,.0625,.125,.25,1/3],s=[-.16653127382501215,.11863875218299408,.029479047361245264,-.005442312089231738,.1451520875973037,-.005056281449558275,-.005095486882876532,.03334009551111544,-.09361368678020432,.14132569702451822,-.15805565301011382,-.09918856955881927],n=[.028212773333433472,-.3388502064992847,-.15839529890929713,-.12398131766775483,-.2874848552685111,.012254866302537692,.005957797193345771,-.03745899330347374,.12911781869810196,-.15867193224162568,.504406322732748,.3786845131875458],a=[.7218950861255283,.5574536226347168,.47133893237025826,.48597095327079914,.44336276333518854,.6076986311801551,.30851975971827794,.30514889345633955,.3302511933827384,.153822885219165,.1302280559047337,.49865530675491687],r=[-2.2218487496163566,-1.6382721639824072,-1.3010299956639813,-.958607314841775,-.6020599913279624,-.3010299956639812,.31386722036915343,.6232492903979004,.9242792860618817,1.290034611362518,1.4265112613645752,1.9030899869919435],o=[2,4,8,16,32,64,80,96,112,120,124],i=-1;for(let c=o.length-1;c>=0;c--)if(o[c]<A){i=c;break}i+=1;let g=(A-e[i])*t[i];return Math.exp(2.302585092994046*(((s[i]*g+n[i])*g+a[i])*g+r[i]))/er}}function tr(A,e){return Ar(A)*e}var pt=(A,e,t)=>Math.max(e,Math.min(t,A));function sr(A,e){if(e<1){this.noteOff(A);return}if(e=Math.min(127,e),this.synthCore.masterParameters.blackMIDIMode&&this.synthCore.voiceCount>200&&e<40||this.synthCore.masterParameters.blackMIDIMode&&e<10||this._isMuted||!this.preset)return;let t=A+this.keyShift+this.customControllers[oe.channelKeyShift],s=t;if(t>127||t<0)return;let n=this.preset.program,a=this.synthCore.tunings[n*128+t];a>=0&&(s=Math.trunc(a)),(this.synthCore.masterParameters.monophonicRetriggerMode||this.assignMode===0)&&this.killNote(A);let r=this.synthCore.keyModifierManager.getVelocity(this.channel,t);r>-1&&(e=r);let o=this.synthCore.keyModifierManager.getGain(this.channel,t),i=-1,g=0,c=this.midiControllers[d.portamentoTime]>>7,l=this.midiControllers[d.portamentoControl]>>7;if(!this.drumChannel&&l!==s&&this.midiControllers[d.portamentoOnOff]>=8192&&c>0&&(l>0&&(g=tr(c,Math.abs(s-l)),i=l),this.controllerChange(d.portamentoControl,s)),!this.polyMode){let R=0;if(this.voiceCount>0){for(let Q of this.synthCore.voices)if(Q.isActive&&Q.channel===this.channel&&(Q.exclusiveRelease(this.synthCore.currentTime,0),++R>=this.voiceCount))break}}let B=this.synthCore.getVoices(this.channel,s,e),h=0,E=0,m=0,D=1,f=1,O=1;if(this.randomPan&&(h=Math.round(Math.random()*1e3-500)),this.drumChannel){let R=this.drumParams[s];if(!R.rxNoteOn)return;let Q=R.pan;if(Q!==64){let T=Math.max(-63,Math.min(Q-64+((this.midiControllers[d.pan]>>7)-64),63))||1;h=Q===0?Math.round(Math.random()*1e3-500):T/63*500}m=R.pitch,E=R.exclusiveClass,D=R.reverbGain,f=R.chorusGain,O=R.delayGain,o===1&&(o=R.gain)}for(let R of B){let Q=this.synthCore.assignVoice(),T=this.synthCore.currentTime;if(Q.setup(T,this.channel,s,e,t),Q.wavetable=Q.oscillators[this.synthCore.masterParameters.interpolationType],Q.generators.set(R.generators),Q.exclusiveClass=E||R.exclusiveClass,Q.rootKey=R.rootKey,Q.loopingMode=R.loopingMode,Q.wavetable.sampleData=R.sampleData,Q.wavetable.playbackStep=R.playbackStep,Q.targetKey=R.targetKey,this.sysExModulators.active){Q.modulators=[...R.modulators];for(let H of this.sysExModulators.modulatorList){let q=Q.modulators.findIndex(u=>De.isIdentical(u,H.mod));q===-1?Q.modulators.push(H.mod):Q.modulators[q]=H.mod}}else Q.modulators=R.modulators;if(Q.modulators.length>Q.modulatorValues.length&&(se(`${Q.modulators.length} modulators! Increasing modulatorValues table.`),Q.modulatorValues=new Int16Array(Q.modulators.length)),this.generatorOverridesEnabled)for(let[H,q]of this.generatorOverrides.entries())q!==32767&&(Q.generators[H]=q);if(Q.exclusiveClass!==0&&this.polyMode){let H=0;if(this.voiceCount>0){for(let q of this.synthCore.voices)if(q.isActive&&q.channel===this.channel&&q.exclusiveClass===Q.exclusiveClass&&q.hasRendered&&(q.exclusiveRelease(this.synthCore.currentTime),++H>=this.voiceCount))break}}this.computeModulators(Q),Q.volEnv.init(Q),Q.modEnv.init(Q),Q.filter.init(),Q.vibLfoStartTime=T+Gt(Q.modulatedGenerators[I.delayVibLFO]),Q.modLfoStartTime=T+Gt(Q.modulatedGenerators[I.delayModLFO]);let U=Q.modulatedGenerators[I.startAddrsOffset]+Q.modulatedGenerators[I.startAddrsCoarseOffset]*32768,x=Q.modulatedGenerators[I.endAddrOffset]+Q.modulatedGenerators[I.endAddrsCoarseOffset]*32768,V=Q.modulatedGenerators[I.startloopAddrsOffset]+Q.modulatedGenerators[I.startloopAddrsCoarseOffset]*32768,J=Q.modulatedGenerators[I.endloopAddrsOffset]+Q.modulatedGenerators[I.endloopAddrsCoarseOffset]*32768,L=R.sampleData.length-1;if(Q.wavetable.cursor=pt(U,0,L),Q.wavetable.end=pt(L+x,0,L),Q.wavetable.loopStart=pt(R.loopStart+V,0,L),Q.wavetable.loopEnd=pt(R.loopEnd+J,0,L),Q.wavetable.loopEnd<Q.wavetable.loopStart){let H=Q.wavetable.loopStart;Q.wavetable.loopStart=Q.wavetable.loopEnd,Q.wavetable.loopEnd=H}Q.wavetable.loopEnd-Q.wavetable.loopStart<1&&(Q.loopingMode===1||Q.loopingMode===3)&&(Q.loopingMode=0),Q.wavetable.loopLength=Q.wavetable.loopEnd-Q.wavetable.loopStart,Q.wavetable.isLooping=Q.loopingMode===1||Q.loopingMode===3,Q.portamentoFromKey=i,Q.portamentoDuration=g,Q.overridePan=h,Q.gainModifier=o,Q.pitchOffset=m,Q.reverbSend=D,Q.chorusSend=f,Q.delaySend=O,Q.currentPan=Math.max(-500,Math.min(500,h||Q.modulatedGenerators[I.pan]))}this.voiceCount+=B.length,this.sendChannelProperty(),this.synthCore.callEvent("noteOn",{midiNote:A,channel:this.channel,velocity:e})}function nr(A){if(A>127||A<0){se("Received a noteOn for note",A,"Ignoring.");return}let e=A+this.keyShift+this.customControllers[oe.channelKeyShift];if(this.synthCore.masterParameters.blackMIDIMode&&!this.drumChannel||this.drumChannel&&this.drumParams[e].rxNoteOff){this.killNote(e),this.synthCore.callEvent("noteOff",{midiNote:A,channel:this.channel});return}let t=this.midiControllers[d.sustainPedal]>=8192,s=0;if(this.voiceCount>0){for(let n of this.synthCore.voices)if(n.channel===this.channel&&n.isActive&&n.realKey===e&&!n.isInRelease&&(t?n.isHeld=!0:n.releaseVoice(this.synthCore.currentTime),++s>=this.voiceCount))break}this.synthCore.callEvent("noteOff",{midiNote:A,channel:this.channel})}function ar(A){if(this.lockPreset)return;this.patch.program=A;let e=this.synthCore.soundBankManager.getPreset(this.patch,this.channelSystem);!e&&(e=this.synthCore.missingPresetHandler(this.patch,this.channelSystem),!e)||(this.preset=e,e.isAnyDrums!==this.drumChannel&&this.setDrumFlag(e.isAnyDrums),this.resetDrumParams(),this.synthCore.callEvent("programChange",{channel:this.channel,bankLSB:this.preset.bankLSB,bankMSB:this.preset.bankMSB,program:this.preset.program,isGMGSDrum:this.preset.isGMGSDrum}),this.sendChannelProperty())}function $e(A,e,t,s){y(`%cChannel %c${A}%c ${t} is now set to %c${e} ${s}.`,C.info,C.recognized,C.info,C.value)}function Oe(A,e){y(`%cUnrecognized %c${e} %cSysEx: %c${Pt(A)}`,C.warn,C.recognized,C.warn,C.unrecognized)}var ir=[Nt.fromModulator(new ye(AA(Qe.linear,!0,!1,!0,d.vibratoRate),0,I.vibLfoRate,1e3,0))],rr=class{modulatorList=[];active=!1;channelNumber;constructor(A){this.channelNumber=A}resetModulators(){this.modulatorList=ir.map(A=>({mod:A,id:this.getModulatorID(A.primarySource.toSourceEnum(),A.destination,A.primarySource.isBipolar,A.primarySource.isNegative)})),this.active=!1}setupReceiver(A,e,t,s,n=!1){this.active=!0;let a=e-64,r=a/64,o=e/127;switch(A&15){case 0:this.setModulator(t,I.fineTune,a*100,n),$e(this.channelNumber,a,`${s} pitch control`,"semitones");break;case 1:this.setModulator(t,I.initialFilterFc,r*9600,n),$e(this.channelNumber,r*9600,`${s} filter control`,"cents");break;case 2:this.setModulator(t,I.amplitude,r*1e3,n),$e(this.channelNumber,r*100,`${s} amplitude`,"%");break;case 3:this.setModulator(t,I.vibLfoRate,r*1e3,n),$e(this.channelNumber,r*10,`${s} LFO1 rate`,"Hz");break;case 4:this.setModulator(t,I.vibLfoToPitch,o*600,n),$e(this.channelNumber,o*600,`${s} LFO1 pitch depth`,"cents");break;case 5:this.setModulator(t,I.vibLfoToFilterFc,o*2400,n),$e(this.channelNumber,o*2400,`${s} LFO1 filter depth`,"cents");break;case 6:this.setModulator(t,I.vibLfoAmplitudeDepth,o*1e3,n),$e(this.channelNumber,o*100,`${s} LFO1 amplitude depth`,"%");break;case 7:this.setModulator(t,I.modLfoRate,r*1e3,n),$e(this.channelNumber,r*10,`${s} LFO2 rate`,"Hz");break;case 8:this.setModulator(t,I.modLfoToPitch,o*600,n),$e(this.channelNumber,o*600,`${s} LFO2 pitch depth`,"cents");break;case 9:this.setModulator(t,I.modLfoToFilterFc,o*2400,n),$e(this.channelNumber,o*2400,`${s} LFO2 filter depth`,"cents");break;case 10:this.setModulator(t,I.modLfoAmplitudeDepth,o*1e3,n),$e(this.channelNumber,o*100,`${s} LFO2 amplitude depth`,"%");break}}setModulator(A,e,t,s=!1,n=!1){let a=this.getModulatorID(A,e,s,n);t===0&&this.deleteModulator(a);let r=this.modulatorList.find(o=>o.id===a);if(r)r.mod.transformAmount=t;else{let o,i;A>=128?(o=A-128,i=!1):(o=A,i=!0);let g=Nt.fromData(new hA(o,Qe.linear,i,s),new hA,e,t,0);this.modulatorList.push({mod:g,id:a})}}getModulatorID(A,e,t,s){return`${A}-${e}-${t}-${s}`}deleteModulator(A){this.modulatorList=this.modulatorList.filter(e=>e.id!==A)}},or=1e3/200;function hr(A,e,t){let s=A.modulators[t];if(s.transformAmount===0)return A.modulatorValues[t]=0,0;let n=s.primarySource.getValue(this.midiControllers,e,A),a=s.secondarySource.getValue(this.midiControllers,e,A),r=s.transformAmount;s.isEffectModulator&&r<=1e3&&(r*=or,r=Math.min(r,1e3));let o=n*a*r;return s.transformType===2&&(o=Math.abs(o)),s.isDefaultResonantModulator&&(A.resonanceOffset=Math.max(0,o/2)),s.isModWheelModulator&&(o*=this.customControllers[oe.modulationMultiplier]),A.modulatorValues[t]=o,o}function gr(A,e=-1,t=0){let s=A.modulators,n=A.generators;if(this.generatorOffsetsEnabled){n=new Int16Array(n);for(let i=0;i<n.length;i++)n[i]+=this.generatorOffsets[i]}let a=A.modulatedGenerators,r=this.perNotePitch?this.pitchWheels[A.realKey]:this.midiControllers[Ae.pitchWheel+128];if(e===-1){a.set(n);for(let i=0;i<s.length;i++){let g=s[i];a[g.destination]=Math.min(32767,Math.max(-32768,a[g.destination]+this.computeModulator(A,r,i)))}for(let i=0;i<a.length;i++){let g=tA[i];g&&(a[i]=Math.min(g.max,Math.max(g.min,a[i])))}return}let o=!!e;for(let i=0;i<s.length;i++){let g=s[i];if(g.primarySource.isCC===o&&g.primarySource.index===t||g.secondarySource.isCC===o&&g.secondarySource.index===t){let c=g.destination,l=n[c];this.computeModulator(A,r,i);for(let h=0;h<s.length;h++)s[h].destination===c&&(l+=A.modulatorValues[h]);let B=tA[c];a[c]=Math.max(B.min,Math.min(l,B.max))}}}var Ir=class{midiControllers=new Int16Array(147);pitchWheels=new Int16Array(128).fill(8192);lockedControllers=new Array(147).fill(!1);customControllers=new Float32Array(Pn);octaveTuning=new Int8Array(128);drumParams=[];sysExModulators;keyShift=0;drumChannel=!1;randomPan=!1;assignMode=2;insertionEnabled=!1;cc1=16;cc2=17;drumMap=0;dataEntryState=Ve.Idle;patch={bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1};preset;lockPreset=!1;lockedSystem="gs";channelVibrato={delay:0,depth:0,rate:0};polyMode=!0;voiceCount=0;channel;rxChannel;synthCore;noteOn=sr.bind(this);noteOff=nr.bind(this);programChange=ar.bind(this);controllerChange=ji.bind(this);resetControllers=oi.bind(this);resetPreset=hi.bind(this);resetControllersRP15Compliant=gi.bind(this);resetParameters=Ii.bind(this);dataEntryFine=$i.bind(this);dataEntryCoarse=Zi.bind(this);renderVoice=Xi.bind(this);perNotePitch=!1;channelTuningCents=0;generatorOffsets=new Int16Array(WA);generatorOffsetsEnabled=!1;generatorOverrides=new Int16Array(WA);generatorOverridesEnabled=!1;computeModulator=hr.bind(this);computeModulators=gr.bind(this);previousVoiceCount=0;constructor(A,e,t){this.synthCore=A,this.preset=e,this.channel=t,this.rxChannel=t,this.sysExModulators=new rr(t),this.resetGeneratorOverrides(),this.resetGeneratorOffsets();for(let s=0;s<128;s++)this.drumParams.push(new Bs);this.resetDrumParams(),this.resetVibratoParams()}_isMuted=!1;get isMuted(){return this._isMuted}get channelSystem(){return this.lockPreset?this.lockedSystem:this.synthCore.masterParameters.midiSystem}clearVoiceCount(){this.previousVoiceCount=this.voiceCount,this.voiceCount=0}updateVoiceCount(){this.voiceCount!==this.previousVoiceCount&&this.sendChannelProperty()}transposeChannel(A,e=!1){this.drumChannel||(A+=this.synthCore.masterParameters.transposition);let t=Math.trunc(A),s=this.keyShift+this.customControllers[oe.channelTransposeFine]/100;this.drumChannel&&!e||A===s||(t!==this.keyShift&&this.stopAllNotes(),this.keyShift=t,this.setCustomController(oe.channelTransposeFine,(A-t)*100),this.sendChannelProperty())}setOctaveTuning(A){if(A.length!==12)throw new Error("Tuning is not the length of 12.");for(let e=0;e<128;e++)this.octaveTuning[e]=A[e%12]}setModulationDepth(A){A=Math.round(A),y(`%cChannel ${this.channel} modulation depth. Cents: %c${A}`,C.info,C.value),this.setCustomController(oe.modulationMultiplier,A/50)}setTuning(A,e=!0){A=Math.round(A),this.setCustomController(oe.channelTuning,A),e&&y(`%cFine tuning for %c${this.channel}%c is now set to %c${A}%c cents.`,C.info,C.recognized,C.info,C.value,C.info)}pitchWheel(A,e=-1){if(!this.lockedControllers[128+Ae.pitchWheel]){if(e===-1)this.perNotePitch=!1,this.midiControllers[128+Ae.pitchWheel]=A,this.computeModulatorsAll(0,Ae.pitchWheel),this.sendChannelProperty();else{this.perNotePitch||this.pitchWheels.fill(this.midiControllers[128+Ae.pitchWheel]),this.perNotePitch=!0,this.pitchWheels[e]=A;let t=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.isActive&&s.channel===this.channel&&s.midiNote===e&&(this.computeModulators(s,0,Ae.polyPressure),++t>=this.voiceCount))break}}this.synthCore.callEvent("pitchWheel",{channel:this.channel,pitch:A,midiNote:e})}}channelPressure(A){this.midiControllers[128+Ae.channelPressure]=A<<7,this.updateChannelTuning(),this.computeModulatorsAll(0,Ae.channelPressure),this.synthCore.callEvent("channelPressure",{channel:this.channel,pressure:A})}polyPressure(A,e){let t=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.isActive&&s.channel===this.channel&&s.midiNote===A&&(s.pressure=e,this.computeModulators(s,0,Ae.polyPressure),++t>=this.voiceCount))break}this.synthCore.callEvent("polyPressure",{channel:this.channel,midiNote:A,pressure:e})}setCustomController(A,e){this.customControllers[A]=e,this.updateChannelTuning()}updateChannelTuning(){this.channelTuningCents=this.customControllers[oe.channelTuning]+this.customControllers[oe.channelTransposeFine]+this.customControllers[oe.masterTuning]+this.customControllers[oe.channelTuningSemitones]*100}setPresetLock(A){this.lockPreset!==A&&(this.lockPreset=A,A&&(this.lockedSystem=this.synthCore.masterParameters.midiSystem))}setDrums(A){if(ke.isSystemXG(this.channelSystem))if(A)this.setBankMSB(ke.getDrumBank(this.channelSystem)),this.setBankLSB(0);else{if(this.channel%16===9)throw new Error(`Cannot disable drums on channel ${this.channel} for XG.`);this.setBankMSB(0),this.setBankLSB(0)}else this.setGSDrums(A);this.setDrumFlag(A),this.programChange(this.patch.program)}setPatch(A){this.setBankMSB(A.bankMSB),this.setBankLSB(A.bankLSB),this.setGSDrums(A.isGMGSDrum),this.programChange(A.program)}setGSDrums(A){A!==this.patch.isGMGSDrum&&(this.setBankLSB(0),this.setBankMSB(0),this.patch.isGMGSDrum=A)}resetGeneratorOverrides(){this.generatorOverrides.fill(ka),this.generatorOverridesEnabled=!1}setGeneratorOverride(A,e,t=!1){if(this.generatorOverrides[A]=e,this.generatorOverridesEnabled=!0,t){let s=0;if(this.voiceCount>0){for(let n of this.synthCore.voices)if(n.channel===this.channel&&n.isActive&&(n.generators[A]=e,this.computeModulators(n),++s>=this.voiceCount))break}}}resetGeneratorOffsets(){this.generatorOffsets.fill(0),this.generatorOffsetsEnabled=!1}setGeneratorOffset(A,e){this.generatorOffsets[A]=e*tA[A].nrpn,this.generatorOffsetsEnabled=!0;let t=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&(this.computeModulators(s),++t>=this.voiceCount))break}}killNote(A,e=-12e3){A+=this.customControllers[oe.channelKeyShift];let t=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&s.realKey===A&&(s.overrideReleaseVolEnv=e,s.isInRelease=!1,s.releaseVoice(this.synthCore.currentTime),++t>=this.voiceCount))break}}stopAllNotes(A=!1){if(A){let e=0;if(this.voiceCount>0){for(let t of this.synthCore.voices)if(t.channel===this.channel&&t.isActive&&(t.isActive=!1,++e>=this.voiceCount))break}this.clearVoiceCount(),this.updateVoiceCount()}else{let e=0;if(this.voiceCount>0){for(let t of this.synthCore.voices)if(t.channel===this.channel&&t.isActive&&(t.releaseVoice(this.synthCore.currentTime),++e>=this.voiceCount))break}}this.synthCore.callEvent("stopAll",{channel:this.channel,force:A})}muteChannel(A){A&&this.stopAllNotes(!0),this._isMuted=A,this.sendChannelProperty(),this.synthCore.callEvent("muteChannel",{channel:this.channel,isMuted:A})}sendChannelProperty(){if(!this.synthCore.enableEventSystem)return;let A={voicesAmount:this.voiceCount,pitchWheel:this.midiControllers[128+Ae.pitchWheel],pitchWheelRange:this.midiControllers[128+Ae.pitchWheelRange]/128,isMuted:this.isMuted,transposition:this.keyShift+this.customControllers[oe.channelTransposeFine]/100,isDrum:this.drumChannel,isEFX:this.insertionEnabled};this.synthCore.callEvent("channelPropertyChange",{channel:this.channel,property:A})}resetDrumParams(){if(!(this.synthCore.masterParameters.drumLock||!this.drumChannel))for(let A=0;A<128;A++){let e=this.drumParams[A];e.pitch=0,e.gain=1,e.exclusiveClass=0,e.pan=64,e.reverbGain=xs[A]/127,e.chorusGain=0,e.delayGain=0,e.rxNoteOn=!0,e.rxNoteOff=!1}}resetVibratoParams(){this.synthCore.masterParameters.customVibratoLock||(this.channelVibrato.rate=0,this.channelVibrato.depth=0,this.channelVibrato.delay=0)}computeModulatorsAll(A,e){let t=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&(this.computeModulators(s,A,e),++t>=this.voiceCount))break}}setBankMSB(A){this.lockPreset||(this.patch.bankMSB=A)}setBankLSB(A){this.lockPreset||(this.patch.bankLSB=A)}setDrumFlag(A){this.lockPreset||!this.preset||this.drumChannel!==A&&(A?(this.keyShift=0,this.drumChannel=!0):this.drumChannel=!1,this.synthCore.callEvent("drumChange",{channel:this.channel,isDrumChannel:this.drumChannel}))}},cr=class extends rt{constructor(A,e){super(A.parentSoundBank,A.globalZone),this.bankMSB=ke.addBankOffset(A.bankMSB,e,A.isXGDrums),this.name=A.name,this.bankLSB=A.bankLSB,this.isGMGSDrum=A.isGMGSDrum,this.program=A.program,this.genre=A.genre,this.morphology=A.morphology,this.library=A.library,this.zones=A.zones}},lr=class{soundBankList=[];presetListChangeCallback;selectablePresetList=[];constructor(A){this.presetListChangeCallback=A}_presetList=[];get presetList(){return[...this._presetList]}get priorityOrder(){return this.soundBankList.map(A=>A.id)}set priorityOrder(A){this.soundBankList.sort((e,t)=>A.indexOf(e.id)-A.indexOf(t.id)),this.generatePresetList()}deleteSoundBank(A){if(this.soundBankList.length===0){se("1 soundbank left. Aborting!");return}let e=this.soundBankList.findIndex(t=>t.id===A);if(e===-1)throw new Error(`No sound bank with id "${A}"`);this.soundBankList.splice(e,1),this.generatePresetList()}addSoundBank(A,e,t=0){let s=this.soundBankList.find(n=>n.id===e);s===void 0?this.soundBankList.push({id:e,soundBank:A,bankOffset:t}):(s.soundBank=A,s.bankOffset=t),this.generatePresetList()}getPreset(A,e){if(!(this.soundBankList.length===0||this.selectablePresetList.length===0))return $n(this.selectablePresetList,A,e)}destroy(){for(let A of this.soundBankList)A.soundBank.destroySoundBank();this.soundBankList=[]}generatePresetList(){let A=new Array,e=new Set;for(let t of this.soundBankList){let s=t.soundBank,n=t.bankOffset;for(let a of s.presets){let r=new cr(a,n);e.has(r.toMIDIString())||(e.add(r.toMIDIString()),A.push(r))}}A.sort(IA.sorter.bind(IA)),this.selectablePresetList=A,this._presetList=A.map(t=>({bankMSB:t.bankMSB,bankLSB:t.bankLSB,program:t.program,isGMGSDrum:t.isGMGSDrum,name:t.name,isAnyDrums:t.isAnyDrums})),this.presetListChangeCallback()}};function Cr(A,e){switch(this.masterParameters[A]=e,A){default:break;case"masterPan":{let t=e;t=t/2+.5,this.panLeft=Math.cos(Math.PI/2*t),this.panRight=Math.sin(Math.PI/2*t);break}case"voiceCap":{let t=Math.min(e,1e6);this.masterParameters.voiceCap=t;for(let s=t;s<this.voices.length;s++)this.voices[s].isActive=!1;if(t>this.voices.length){se(`Allocating ${t-this.voices.length} new voices!`);for(let s=this.voices.length;s<t;s++)this.voices.push(new ps(this.sampleRate))}break}case"transposition":{let t=e;this.masterParameters.transposition=0;for(let s of this.midiChannels)s.transposeChannel(t);this.masterParameters.transposition=t}}this.callEvent("masterParameterChange",{parameter:A,value:e})}function Br(A){return this.masterParameters[A]}function Er(){return{...this.masterParameters}}function Cn(A,e,t){let s=A,n=e<<7|t;return A===127&&e===127&&t===127?-1:s+n*61e-6}function dr(A,e=0){switch(A[2]){case 4:{let t;switch(A[3]){case 1:{let s=A[5]<<7|A[4];this.setMIDIVolume(s/16384),y(`%cMaster Volume. Volume: %c${s}`,C.info,C.value);break}case 2:{let s=((A[5]<<7|A[4])-8192)/8192;this.setMasterParameter("masterPan",s),y(`%cMaster Pan. Pan: %c${s}`,C.info,C.value);break}case 3:{let s=(A[5]<<7|A[6])-8192;t=Math.floor(s/81.92),this.setMasterTuning(t),y(`%cMaster Fine Tuning. Cents: %c${t}`,C.info,C.value);break}case 4:t=(A[5]-64)*100,this.setMasterTuning(t),y(`%cMaster Coarse Tuning. Cents: %c${t}`,C.info,C.value);break;default:y(`%cUnrecognized MIDI Device Control Real-time message: %c${Pt(A)}`,C.warn,C.unrecognized)}break}case 9:A[3]===1?(y("%cGM1 system on",C.info),this.resetAllControllers("gm")):A[3]===3?(y("%cGM2 system on",C.info),this.resetAllControllers("gm2")):(y("%cGM system off, defaulting to GS",C.info),this.setMasterParameter("midiSystem","gs"));break;case 8:{let t=4;switch(A[3]){case 1:{let s=A[t++],n=oA(A,16,t);if(t+=16,A.length<384){se(`The Bulk Tuning Dump is too short! (${A.length} bytes, at least 384 are expected)`);return}for(let a=0;a<128;a++)this.tunings[s*128+a]=Cn(A[t++],A[t++],A[t++]);y(`%cBulk Tuning Dump %c${n}%c Program: %c${s}`,C.info,C.value,C.info,C.recognized);break}case 2:case 7:{A[3]===7&&t++;let s=A[t++],n=A[t++];for(let a=0;a<n;a++){let r=A[t++];this.tunings[s*128+r]=Cn(A[t++],A[t++],A[t++])}y(`%cSingle Note Tuning. Program: %c${s}%c Keys affected: %c${n}`,C.info,C.recognized,C.info,C.recognized);break}case 9:case 8:{let s=new Int8Array(12);if(A[3]===8)for(let n=0;n<12;n++)s[n]=A[7+n]-64;else for(let n=0;n<24;n+=2){let a=(A[7+n]<<7|A[8+n])-8192;s[n/2]=Math.floor(a/81.92)}(A[4]&1)===1&&this.midiChannels[14+e].setOctaveTuning(s),(A[4]>>1&1)===1&&this.midiChannels[15+e].setOctaveTuning(s);for(let n=0;n<7;n++)(A[5]>>n&1)===1&&this.midiChannels[7+n+e].setOctaveTuning(s);for(let n=0;n<7;n++)(A[6]>>n&1)===1&&this.midiChannels[n+e].setOctaveTuning(s);y(`%cMIDI Octave Scale ${A[3]===8?"(1 byte)":"(2 bytes)"} tuning via Tuning: %c${s.join(" ")}`,C.info,C.value);break}default:Oe(A,"MIDI Tuning Standard");break}break}default:Oe(A,"General MIDI")}}var z=(A,e)=>{y(`%cRoland GS ${A}%c is now set to %c${e}%c.`,C.recognized,C.info,C.value,C.info)};function Qr(A,e=0){if(A[3]===18)switch(A[2]){case 66:{let t=A[4],s=A[5],n=A[6],a=Math.min(A[7],127);if(t===0&&s===0&&n===127&&a===0){y("%cGS Reset received!",C.info),this.resetAllControllers("gs");return}if(t===64){if(s===0){switch(n){case 0:{let r=((a<<12|A[8]<<8|A[9]<<4|A[10])-1024)/10;this.setMasterTuning(r),z("Master Tune",r);break}case 4:z("Master Volume",a);break;case 5:{let r=a-64;z("Master Key-Shift",r),this.setMasterTuning(r*100);break}case 6:z("Master Pan",a),this.setMasterParameter("masterPan",(a-64)/64);break;case 127:a===0?(y("%cGS Reset received!",C.info),this.resetAllControllers("gs")):a===127&&(y("%cGS system off, switching to GM",C.info),this.resetAllControllers("gm"));break;default:Oe(A,"Roland GS");break}return}if(s===1){let r=n>=48&&n<=55,o=n>=56&&n<=64,i=n>=80&&n<=90;if(r&&this.masterParameters.reverbLock||o&&this.masterParameters.chorusLock||i&&this.masterParameters.delayLock)return;switch(this.delayActive||=n===64||i,n){default:y(`%cUnsupported Patch Common parameter: %c${n.toString(16)}`,C.warn,C.unrecognized);break;case 0:{let g=oA(A,16,7);z(`Patch Name for ${n&15}`,g);break}case 48:this.setReverbMacro(a),z("Reverb Macro",a);break;case 49:this.reverbProcessor.character=a,z("Reverb Character",a),this.callEvent("effectChange",{effect:"reverb",parameter:"character",value:a});break;case 50:this.reverbProcessor.preLowpass=a,z("Reverb Pre-LPF",a),this.callEvent("effectChange",{effect:"reverb",parameter:"preLowpass",value:a});break;case 51:this.reverbProcessor.level=a,z("Reverb Level",a),this.callEvent("effectChange",{effect:"reverb",parameter:"level",value:a});break;case 52:this.reverbProcessor.time=a,z("Reverb Time",a),this.callEvent("effectChange",{effect:"reverb",parameter:"time",value:a});break;case 53:this.reverbProcessor.delayFeedback=a,z("Reverb Delay Feedback",a),this.callEvent("effectChange",{effect:"reverb",parameter:"delayFeedback",value:a});break;case 54:break;case 55:this.reverbProcessor.preDelayTime=a,z("Reverb Predelay Time",a),this.callEvent("effectChange",{effect:"reverb",parameter:"preDelayTime",value:a});break;case 56:this.setChorusMacro(a),z("Chorus Macro",a);break;case 57:this.chorusProcessor.preLowpass=a,z("Pre-LPF",a),this.callEvent("effectChange",{effect:"chorus",parameter:"preLowpass",value:a});break;case 58:this.chorusProcessor.level=a,z("Chorus Level",a),this.callEvent("effectChange",{effect:"chorus",parameter:"level",value:a});break;case 59:this.chorusProcessor.feedback=a,z("Chorus Feedback",a),this.callEvent("effectChange",{effect:"chorus",parameter:"feedback",value:a});break;case 60:this.chorusProcessor.delay=a,z("Chorus Delay",a),this.callEvent("effectChange",{effect:"chorus",parameter:"delay",value:a});break;case 61:this.chorusProcessor.rate=a,z("Chorus Rate",a),this.callEvent("effectChange",{effect:"chorus",parameter:"rate",value:a});break;case 62:this.chorusProcessor.depth=a,z("Chorus Depth",a),this.callEvent("effectChange",{effect:"chorus",parameter:"depth",value:a});break;case 63:this.chorusProcessor.sendLevelToReverb=a,z("Chorus Send Level To Reverb",a),this.callEvent("effectChange",{effect:"chorus",parameter:"sendLevelToReverb",value:a});break;case 64:this.chorusProcessor.sendLevelToDelay=a,z("Chorus Send Level To Delay",a),this.callEvent("effectChange",{effect:"chorus",parameter:"sendLevelToDelay",value:a});break;case 80:this.setDelayMacro(a),z("Delay Macro",a);break;case 81:this.delayProcessor.preLowpass=a,z("Delay Pre-LPF",a),this.callEvent("effectChange",{effect:"delay",parameter:"preLowpass",value:a});break;case 82:this.delayProcessor.timeCenter=a,z("Delay Time Center",a),this.callEvent("effectChange",{effect:"delay",parameter:"timeCenter",value:a});break;case 83:this.delayProcessor.timeRatioLeft=a,z("Delay Time Ratio Left",a),this.callEvent("effectChange",{effect:"delay",parameter:"timeRatioLeft",value:a});break;case 84:this.delayProcessor.timeRatioRight=a,z("Delay Time Ratio Right",a),this.callEvent("effectChange",{effect:"delay",parameter:"timeRatioRight",value:a});break;case 85:this.delayProcessor.levelCenter=a,z("Delay Level Center",a),this.callEvent("effectChange",{effect:"delay",parameter:"levelCenter",value:a});break;case 86:this.delayProcessor.levelLeft=a,z("Delay Level Left",a),this.callEvent("effectChange",{effect:"delay",parameter:"levelLeft",value:a});break;case 87:this.delayProcessor.levelRight=a,z("Delay Level Right",a),this.callEvent("effectChange",{effect:"delay",parameter:"levelRight",value:a});break;case 88:this.delayProcessor.level=a,z("Delay Level",a),this.callEvent("effectChange",{effect:"delay",parameter:"level",value:a});break;case 89:this.delayProcessor.feedback=a,z("Delay Feedback",a),this.callEvent("effectChange",{effect:"delay",parameter:"feedback",value:a});break;case 90:this.delayProcessor.sendLevelToReverb=a,z("Delay Send Level To Reverb",a),this.callEvent("effectChange",{effect:"delay",parameter:"sendLevelToReverb",value:a});break}break}if(s===3){if(this.masterParameters.insertionEffectLock)return;if(n>=3&&n<=25&&(this.insertionParams[n-3]=a),n>=3&&n<=22){this.insertionProcessor.setParameter(n,a),z(`EFX Parameter ${n-2}`,a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return}switch(n){default:Oe(A,"Roland GS EFX");return;case 0:{let r=a<<8|A[8],o=this.insertionEffects.get(r);o?(z("EFX Type",r.toString(16)),this.insertionProcessor=o):(this.insertionProcessor=this.insertionFallback,y(`%cUnsupported EFX processor: %c${r.toString(16)}%c, using Thru.`,C.warn,C.unrecognized,C.warn)),this.resetInsertionParams(),this.insertionProcessor.reset(),this.callEvent("effectChange",{effect:"insertion",parameter:0,value:r});return}case 23:this.insertionProcessor.sendLevelToReverb=a/127*yt,z("EFX Send Level to Reverb",a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return;case 24:this.insertionProcessor.sendLevelToChorus=a/127*yt,z("EFX Send Level to Chorus",a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return;case 25:this.insertionProcessor.sendLevelToDelay=a/127*yt,this.delayActive=!0,z("EFX Send Level to Delay",a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return}}if(s>>4===1){let r=KA(s&15)+e,o=this.midiChannels[r];switch(n){default:Oe(A,"Roland GS");return;case 0:o.controllerChange(d.bankSelect,a),o.programChange(A[8]);break;case 2:o.rxChannel=a===16?-1:a+e,this.customChannelNumbers||=o.rxChannel!==o.channel,z(`Rx. Channel on ${r}`,o.rxChannel);break;case 19:o.polyMode=a===1,z(`Mono/poly on ${r}`,o.polyMode?"POLY":"MONO");break;case 20:o.assignMode=a,z(`Assign mode on ${r}`,a);break;case 21:{o.drumMap=a;let i=a>0;o.setGSDrums(i),z(`Drums on ${r}`,i.toString());return}case 22:{let i=a-64;o.setCustomController(oe.channelKeyShift,i),z(`Key shift on ${r}`,i);return}case 25:o.controllerChange(d.mainVolume,a);return;case 28:{let i=a;i===0?(o.randomPan=!0,z(`Random pan on ${r}`,"ON")):(o.randomPan=!1,o.controllerChange(d.pan,i));break}case 31:o.cc1=a,z("CC1 Controller Number",a);break;case 32:o.cc2=a,z("CC2 Controller Number",a);break;case 33:o.controllerChange(d.chorusDepth,a);break;case 34:o.controllerChange(d.reverbDepth,a);break;case 42:{let i=((a<<7|A[8])-8192)/81.92;o.setTuning(i);break}case 44:o.controllerChange(d.variationDepth,a);break;case 48:o.controllerChange(d.vibratoRate,a);break;case 49:o.controllerChange(d.vibratoDepth,a);break;case 50:o.controllerChange(d.brightness,a);break;case 51:o.controllerChange(d.filterResonance,a);break;case 52:o.controllerChange(d.attackTime,a);break;case 53:o.controllerChange(d.decayTime,a);break;case 54:o.controllerChange(d.releaseTime,a);break;case 55:o.controllerChange(d.vibratoDelay,a);break;case 64:{let i=A.length-9,g=new Int8Array(12);for(let l=0;l<i;l++)g[l]=A[l+7]-64;o.setOctaveTuning(g);let c=a-64;z(`Octave Scale Tuning on ${r}`,g.join(", ")),o.setTuning(c);break}}return}if(s>>4===2){let r=KA(s&15)+e,o=this.midiChannels[r];switch(n&240){default:Oe(A,"Roland GS Patch Parameter Controller");break;case 0:if((n&15)===4){let i=a/127*600;o.customControllers[oe.modulationMultiplier]=i/50,$e(o.channel,i,"modulation wheel depth","cents");break}o.sysExModulators.setupReceiver(n,a,d.modulationWheel,"mod wheel");break;case 16:if((n&15)===0){let i=a-64;o.midiControllers[128+Ae.pitchWheelRange]=i<<7,$e(o.channel,i,"pitch wheel range","semitones");break}o.sysExModulators.setupReceiver(n,a,128+Ae.pitchWheel,"pitch wheel",!0);break;case 32:o.sysExModulators.setupReceiver(n,a,128+Ae.channelPressure,"channel pressure");break;case 48:o.sysExModulators.setupReceiver(n,a,128+Ae.polyPressure,"poly pressure");break;case 64:o.sysExModulators.setupReceiver(n,a,o.cc1,"CC1");break;case 80:o.sysExModulators.setupReceiver(n,a,o.cc2,"CC2")}return}if(s>>4===4){let r=KA(s&15)+e,o=this.midiChannels[r];switch(n){default:Oe(A,"Roland GS Patch Part Parameter");break;case 0:case 1:o.controllerChange(d.bankSelectLSB,a);break;case 34:{if(this.masterParameters.insertionEffectLock)return;let i=a===1;o.insertionEnabled=i,this.insertionActive||=i,z(`Insertion for ${r}`,i?"ON":"OFF"),this.callEvent("effectChange",{effect:"insertion",parameter:i?-1:-2,value:r})}}return}Oe(A,"Roland GS Patch Parameter");return}if(t===65){if(this.masterParameters.drumLock)return;let r=(s>>4)+1,o=n;switch(s&15){default:Oe(A,"Roland GS Drum Setup");return;case 0:{let i=oA(A,12,7);z(`Patch Name for MAP${r}`,i);break}case 1:{let i=a-60;for(let g of this.midiChannels)g.drumMap===r&&(g.drumParams[o].pitch=i*(g.patch.bankLSB===1?100:50));z(`Drum Pitch for MAP${r}, key ${o}`,i);break}case 2:for(let i of this.midiChannels)i.drumMap===r&&(i.drumParams[o].gain=a/120);z(`Drum Level for MAP${r}, key ${o}`,a);break;case 3:for(let i of this.midiChannels)i.drumMap===r&&(i.drumParams[o].exclusiveClass=a);z(`Drum Assign Group for MAP${r}, key ${o}`,a);break;case 4:for(let i of this.midiChannels)i.drumMap===r&&(i.drumParams[o].pan=a);z(`Drum Pan for MAP${r}, key ${o}`,a);break;case 5:for(let i of this.midiChannels)i.drumMap===r&&(i.drumParams[o].reverbGain=a/127);z(`Drum Reverb for MAP${r}, key ${o}`,a);break;case 6:for(let i of this.midiChannels)i.drumMap===r&&(i.drumParams[o].chorusGain=a/127);z(`Drum Chorus for MAP${r}, key ${o}`,a);break;case 7:for(let i of this.midiChannels)i.drumMap===r&&(i.drumParams[o].rxNoteOff=a===1);z(`Drum Note Off for MAP${r}, key ${o}`,a===1);break;case 8:for(let i of this.midiChannels)i.drumMap===r&&(i.drumParams[o].rxNoteOn=a===1);z(`Drum Note On for MAP${r}, key ${o}`,a===1);break;case 9:for(let i of this.midiChannels)i.drumMap===r&&(i.drumParams[o].delayGain=a/127);z(`Drum Delay for MAP${r}, key ${o}`,a);break}return}Oe(A,"Roland GS");return}case 69:A[4]===16&&(A[5]===0?this.callEvent("synthDisplay",[...A]):A[5]===1?this.callEvent("synthDisplay",[...A]):Oe(A,"Roland GS Display"));return;case 22:if(A[4]===16){this.setMIDIVolume(A[7]/100),y(`%cRoland Master Volume control set to: %c${A[7]}`,C.info,C.value);return}else Oe(A,"Roland")}else{Oe(A,"Roland");return}}var Pe=(A,e)=>{y(`%cYamaha XG ${A}%c for is now set to %c${e}%c.`,C.recognized,C.info,C.value,C.info)};function fr(A,e=0){if(A[2]===76){let t=A[3],s=A[4],n=A[5],a=A[6];if(t===0&&s===0){switch(n){case 0:{let r=(((A[6]&15)<<12|(A[7]&15)<<8|(A[8]&15)<<4|A[9]&15)-1024)/10;this.setMasterTuning(r),Pe("Master Tune",r)}break;case 4:this.setMIDIVolume(a/127),Pe("Master Volume",a);break;case 5:{let r=127-a;this.setMIDIVolume(r/127),Pe("Master Attenuation",a);break}case 6:{let r=a-64;this.setMasterParameter("transposition",r),Pe("Master Transpose",r);break}case 127:case 126:y("%cXG system on",C.info),this.resetAllControllers("xg");break}return}if(t===2&&s===1){let r,o=n;o<=21?r="Reverb":o<=35?r="Chorus":r="Variation",y(`%cUnsupported XG ${r} Parameter: %c${o.toString(16)}`,C.warn,C.unrecognized);return}if(t===8){if(!ke.isSystemXG(this.masterParameters.midiSystem))return;let r=s+e;if(r>=this.midiChannels.length)return;let o=this.midiChannels[r];switch(n){case 1:o.controllerChange(d.bankSelect,a);break;case 2:o.controllerChange(d.bankSelectLSB,a);break;case 3:o.programChange(a);break;case 4:o.rxChannel=a+e,this.customChannelNumbers||=o.rxChannel!==o.channel,Pe(`Rev. Channel on ${r}`,o.rxChannel);break;case 5:o.polyMode=a===1,Pe(`Mono/poly on ${r}`,o.polyMode?"POLY":"MONO");break;case 7:o.setDrums(a!==0);break;case 8:{if(o.drumChannel)break;let i=a-64;o.setCustomController(oe.channelKeyShift,i),Pe(`Key shift on ${r}`,i);break}case 11:o.controllerChange(d.mainVolume,a);break;case 14:{let i=a;i===0?(o.randomPan=!0,Pe(`Random Pan for ${r}`,"ON")):o.controllerChange(d.pan,i);break}case 18:o.controllerChange(d.chorusDepth,a);break;case 19:o.controllerChange(d.reverbDepth,a);break;case 21:o.controllerChange(d.vibratoRate,a);break;case 22:o.controllerChange(d.vibratoDepth,a);break;case 23:o.controllerChange(d.vibratoDelay,a);break;case 24:o.controllerChange(d.brightness,a);break;case 25:o.controllerChange(d.filterResonance,a);break;case 26:o.controllerChange(d.attackTime,a);break;case 27:o.controllerChange(d.decayTime,a);break;case 28:o.controllerChange(d.releaseTime,a);break;default:y(`%cUnsupported Yamaha XG Part Setup: %c${A[5].toString(16).toUpperCase()}%c for channel ${r}`,C.warn,C.unrecognized,C.warn)}return}if(t>>4===3){if(this.masterParameters.drumLock)return;let r=s;switch(n){default:Oe([n],"Yamaha XG Drum Setup");return;case 0:{let o=(a-64)*100;for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].pitch=o);Pe(`Drum Pitch, key ${r}`,o);break}case 1:{let o=a-64;for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].pitch+=o);Pe(`Drum Pitch Fine, key ${r}`,o);break}case 2:for(let o of this.midiChannels)o.drumChannel&&(o.drumParams[r].gain=a/120);Pe(`Drum Level, key ${r}`,a);break;case 3:for(let o of this.midiChannels)o.drumChannel&&(o.drumParams[r].exclusiveClass=a);Pe(`Drum Alternate Group, key ${r}`,a);break;case 4:for(let o of this.midiChannels)o.drumChannel&&(o.drumParams[r].pan=a);Pe(`Drum Pan, key ${r}`,a);break;case 5:for(let o of this.midiChannels)o.drumChannel&&(o.drumParams[r].reverbGain=a/127);Pe(`Drum Reverb, key ${r}`,a);break;case 6:for(let o of this.midiChannels)o.drumChannel&&(o.drumParams[r].chorusGain=a/127);Pe(`Drum Chorus, key ${r}`,a);break;case 9:for(let o of this.midiChannels)o.drumChannel&&(o.drumParams[r].rxNoteOff=a===1);Pe(`Drum Note Off, key ${r}`,a===1);break;case 10:for(let o of this.midiChannels)o.drumChannel&&(o.drumParams[r].rxNoteOn=a===1);Pe(`Drum Note On, key ${r}`,a===1);break}return}t===6||t===7?this.callEvent("synthDisplay",[...A]):ke.isSystemXG(this.masterParameters.midiSystem)&&Oe(A,"Yamaha XG")}else Oe(A,"Yamaha")}function ur(A,e=0){e+=this.portSelectChannelOffset;let t=A[0];if(!(this.masterParameters.deviceID!==-1&&A[1]!==127&&this.masterParameters.deviceID!==A[1]))switch(t){default:y(`%cUnknown manufacturer: %c${Pt(A)}`,C.warn,C.unrecognized);break;case 126:case 127:dr.call(this,A,e);break;case 65:Qr.call(this,A,e);break;case 67:fr.call(this,A,e);break;case 245:if(A.length<2)return;for(this.portSelectChannelOffset=(A[1]-1)*16;this.midiChannels.length<=this.portSelectChannelOffset;){y(`%cPort select, channel offset %c${this.portSelectChannelOffset}%c. Creating a new port!`,C.info,C.value,C.info);for(let s=0;s<16;s++)this.createMIDIChannel(!0)}break}}var ha=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=0;reset(){}process(A,e,t,s,n,a,r,o,i){let{sendLevelToReverb:g,sendLevelToChorus:c,sendLevelToDelay:l}=this;for(let B=0;B<i;B++){let h=A[B],E=e[B],m=o+B;t[m]+=h,s[m]+=E;let D=(h+E)*.5;n[B]+=D*g,a[B]+=D*c,r[B]+=D*l}}setParameter(A,e){}},uA=class{static data=[[0,200,200,0,0,.05,.05,315,250,200,250,100,-180,0],[.1,205,205,.1,5,.1,.1,315,250,200,250,110,-180,1],[.2,210,210,.2,10,.15,.15,315,250,200,250,120,-180,2],[.3,215,215,.3,15,.2,.2,315,250,200,250,130,-180,3],[.4,220,220,.4,20,.25,.25,315,250,200,250,140,-180,4],[.5,225,225,.5,25,.3,.3,315,250,200,250,150,-180,5],[.6,230,230,.6,30,.35,.35,315,250,200,250,160,-168,5],[.7,235,235,.7,35,.4,.4,315,250,200,250,170,-168,5],[.8,240,240,.8,40,.45,.45,400,315,250,315,180,-168,5],[.9,245,245,.9,45,.5,.5,400,315,250,315,190,-168,5],[1,250,250,1,50,.55,.55,400,315,250,315,200,-156,5],[1.1,255,255,1.1,55,.6,.6,400,315,250,315,210,-156,5],[1.2,260,260,1.2,60,.65,.65,400,315,250,315,220,-156,5],[1.3,265,265,1.3,65,.7,.7,400,315,250,315,230,-156,5],[1.4,270,270,1.4,70,.75,.75,400,315,250,315,240,-144,5],[1.5,275,275,1.5,75,.8,.8,400,315,250,315,250,-144,5],[1.6,280,280,1.6,80,.85,.85,500,400,315,400,260,-144,5],[1.7,285,285,1.7,85,.9,.9,500,400,315,400,270,-144,5],[1.8,290,290,1.8,90,.95,.95,500,400,315,400,280,-132,5],[1.9,295,295,1.9,95,1,1,500,400,315,400,290,-132,5],[2,300,300,2,100,1.05,1.05,500,400,315,400,300,-132,5],[2.1,305,305,2.1,105,1.1,1.1,500,400,315,400,320,-132,5],[2.2,310,310,2.2,110,1.15,1.15,500,400,315,400,340,-120,5],[2.3,315,315,2.3,115,1.2,1.2,500,400,315,400,360,-120,5],[2.4,320,320,2.4,120,1.25,1.25,630,500,400,500,380,-120,5],[2.5,325,325,2.5,125,1.3,1.3,630,500,400,500,400,-120,5],[2.6,330,330,2.6,130,1.35,1.35,630,500,400,500,420,-108,5],[2.7,335,335,2.7,135,1.4,1.4,630,500,400,500,440,-108,5],[2.8,340,340,2.8,140,1.45,1.45,630,500,400,500,460,-108,5],[2.9,345,345,2.9,145,1.5,1.5,630,500,400,500,480,-108,5],[3,350,350,3,150,1.55,1.55,630,500,400,500,500,-96,6],[3.1,355,355,3.1,155,1.6,1.6,630,500,400,500,520,-96,6],[3.2,360,360,3.2,160,1.65,1.65,800,630,500,630,540,-96,6],[3.3,365,365,3.3,165,1.7,1.7,800,630,500,630,560,-96,6],[3.4,370,370,3.4,170,1.75,1.75,800,630,500,630,580,-84,6],[3.5,375,375,3.5,175,1.8,1.8,800,630,500,630,600,-84,6],[3.6,380,380,3.6,180,1.85,1.85,800,630,500,630,620,-84,6],[3.7,385,385,3.7,185,1.9,1.9,800,630,500,630,640,-84,6],[3.8,390,390,3.8,190,1.95,1.95,800,630,500,630,660,-72,6],[3.9,395,395,3.9,195,2,2,800,630,500,630,680,-72,6],[4,400,400,4,200,2.05,2.05,1e3,800,630,800,700,-72,6],[4.1,405,405,4.1,205,2.1,2.1,1e3,800,630,800,720,-72,6],[4.2,410,410,4.2,210,2.15,2.15,1e3,800,630,800,740,-60,6],[4.3,415,415,4.3,215,2.2,2.2,1e3,800,630,800,760,-60,6],[4.4,420,420,4.4,220,2.25,2.25,1e3,800,630,800,780,-60,6],[4.5,425,425,4.5,225,2.3,2.3,1e3,800,630,800,800,-60,6],[4.6,430,430,4.6,230,2.35,2.35,1e3,800,630,800,820,-48,6],[4.7,435,435,4.7,235,2.4,2.4,1e3,800,630,800,840,-48,6],[4.8,440,440,4.8,240,2.45,2.45,1250,1e3,800,1e3,860,-48,9],[4.9,445,445,4.9,245,2.5,2.5,1250,1e3,800,1e3,880,-48,9],[5,450,450,5,250,2.55,2.55,1250,1e3,800,1e3,900,-36,9],[5.5,455,455,5.5,255,2.6,2.6,1250,1e3,800,1e3,920,-36,9],[6,460,460,6,260,2.65,2.65,1250,1e3,800,1e3,940,-36,9],[6.5,465,465,6.5,265,2.7,2.7,1250,1e3,800,1e3,960,-36,9],[7,470,470,7,270,2.75,2.75,1250,1e3,800,1e3,980,-24,9],[7.5,475,475,7.5,275,2.8,2.8,1250,1e3,800,1e3,1e3,-24,9],[8,480,480,8,280,2.85,2.85,1600,1250,1e3,1250,1100,-24,9],[8.5,485,485,8.5,285,2.9,2.9,1600,1250,1e3,1250,1200,-24,9],[9,490,490,9,290,2.95,2.95,1600,1250,1e3,1250,1300,-12,9],[9.5,495,495,9.5,295,3,3,1600,1250,1e3,1250,1400,-12,9],[10,500,500,10,300,3.05,3.05,1600,1250,1e3,1250,1500,-12,9],[11,505,505,11,305,3.1,3.1,1600,1250,1e3,1250,1600,-12,9],[12,510,510,12,310,3.15,3.15,1600,1250,1e3,1250,1700,0,9],[13,515,515,13,315,3.2,3.2,1600,1250,1e3,1250,1800,0,9],[14,520,520,14,320,3.25,3.25,2e3,1600,1250,1600,1900,0,12],[15,525,525,15,325,3.3,3.3,2e3,1600,1250,1600,2e3,0,12],[16,530,530,16,330,3.35,3.35,2e3,1600,1250,1600,2100,12,12],[17,535,535,17,335,3.4,3.4,2e3,1600,1250,1600,2200,12,12],[18,540,540,18,340,3.45,3.45,2e3,1600,1250,1600,2300,12,12],[19,545,545,19,345,3.5,3.5,2e3,1600,1250,1600,2400,12,12],[20,550,550,20,350,3.55,3.55,2e3,1600,1250,1600,2500,24,12],[21,560,555,21,355,3.6,3.6,2e3,1600,1250,1600,2600,24,12],[22,570,560,22,360,3.65,3.65,2500,2e3,1600,2e3,2700,24,12],[23,580,565,23,365,3.7,3.7,2500,2e3,1600,2e3,2800,24,12],[24,590,570,24,370,3.75,3.75,2500,2e3,1600,2e3,2900,36,12],[25,600,575,25,375,3.8,3.8,2500,2e3,1600,2e3,3e3,36,12],[26,610,580,26,380,3.85,3.85,2500,2e3,1600,2e3,3100,36,12],[27,620,585,27,385,3.9,3.9,2500,2e3,1600,2e3,3200,36,12],[28,630,590,28,390,3.95,3.95,2500,2e3,1600,2e3,3300,48,12],[29,640,595,29,395,4,4,2500,2e3,1600,2e3,3400,48,12],[30,650,600,30,400,4.05,4.05,3150,2500,2e3,2500,3500,48,10],[31,660,610,31,405,4.1,4.1,3150,2500,2e3,2500,3600,48,10],[32,670,620,32,410,4.15,4.15,3150,2500,2e3,2500,3700,60,10],[33,680,630,33,415,4.2,4.2,3150,2500,2e3,2500,3800,60,10],[34,690,640,34,420,4.25,4.25,3150,2500,2e3,2500,3900,60,10],[35,700,650,35,425,4.3,4.3,3150,2500,2e3,2500,4e3,60,10],[36,710,660,36,430,4.35,4.35,3150,2500,2e3,2500,4100,72,10],[37,720,670,37,435,4.4,4.4,3150,2500,2e3,2500,4200,72,10],[38,730,680,38,440,4.45,4.45,4e3,3150,2500,3150,4300,72,11],[39,740,690,39,445,4.5,4.5,4e3,3150,2500,3150,4400,72,11],[40,750,700,40,450,4.55,4.55,4e3,3150,2500,3150,4500,84,11],[41,760,710,50,455,4.6,4.6,4e3,3150,2500,3150,4600,84,11],[42,770,720,60,460,4.65,4.65,4e3,3150,2500,3150,4700,84,11],[43,780,730,70,465,4.7,4.7,4e3,3150,2500,3150,4800,84,11],[44,790,740,80,470,4.75,4.75,4e3,3150,2500,3150,4900,96,11],[45,800,750,90,475,4.8,4.8,4e3,3150,2500,3150,5e3,96,11],[46,810,760,100,480,4.85,4.85,5e3,4e3,3150,4e3,5100,96,12],[47,820,770,110,485,4.9,4.9,5e3,4e3,3150,4e3,5200,96,12],[48,830,780,120,490,4.95,4.95,5e3,4e3,3150,4e3,5300,108,12],[49,840,790,130,495,5,5,5e3,4e3,3150,4e3,5400,108,12],[50,850,800,140,500,5.1,5.05,5e3,4e3,3150,4e3,5500,108,12],[52,860,810,150,505,5.2,5.1,5e3,4e3,3150,4e3,5600,108,12],[54,870,820,160,510,5.3,5.15,5e3,4e3,3150,4e3,5700,120,12],[56,880,830,170,515,5.4,5.2,5e3,4e3,3150,4e3,5800,120,12],[58,890,840,180,520,5.5,5.25,6300,5e3,4e3,5e3,5900,120,13],[60,900,850,190,525,5.6,5.3,6300,5e3,4e3,5e3,6e3,120,13],[62,910,860,200,530,5.7,5.35,6300,5e3,4e3,5e3,6100,132,13],[64,920,870,210,535,5.8,5.4,6300,5e3,4e3,5e3,6200,132,13],[66,930,880,220,540,5.9,5.45,6300,5e3,4e3,5e3,6300,132,13],[68,940,890,230,545,6,5.5,6300,5e3,4e3,5e3,6400,132,13],[70,950,900,240,550,6.1,5.55,6300,5e3,4e3,5e3,6500,144,13],[72,960,910,250,555,6.2,5.6,6300,5e3,4e3,5e3,6600,144,13],[74,970,920,260,560,6.3,5.65,8e3,6300,5e3,6300,6700,144,14],[76,980,930,270,565,6.4,5.7,8e3,6300,5e3,6300,6800,144,14],[78,990,940,280,570,6.5,5.75,8e3,6300,5e3,6300,6900,156,14],[80,1e3,950,290,575,6.6,5.8,8e3,6300,5e3,6300,7e3,156,14],[82,1e3,960,300,580,6.7,5.85,8e3,6300,5e3,6300,7100,156,14],[84,1e3,970,320,585,6.8,5.9,8e3,6300,5e3,6300,7200,156,14],[86,1e3,980,340,590,6.9,5.95,8e3,6300,5e3,6300,7300,168,14],[88,1e3,990,360,595,7,6,8e3,6300,5e3,6300,7400,168,14],[90,1e3,1e3,380,600,7.5,6.05,13500,8e3,6300,13500,7500,168,15],[92,1e3,1e3,400,605,8,6.1,13500,8e3,6300,13500,7600,168,15],[94,1e3,1e3,420,610,8.5,6.15,13500,8e3,6300,13500,7700,-180,15],[96,1e3,1e3,440,615,9,6.2,13500,8e3,6300,13500,7800,-180,15],[98,1e3,1e3,460,620,9.5,6.25,13500,8e3,6300,13500,7900,-180,15],[100,1e3,1e3,480,625,10,6.3,13500,8e3,6300,13500,8e3,-180,15],[100,1e3,1e3,500,630,10,6.35,13500,8e3,6300,13500,8e3,-180,15],[100,1e3,1e3,500,635,10,6.4,13500,8e3,6300,13500,8e3,-180,15]];static preDelayTime(A){return this.data[A][0]}static delayTime1(A){return this.data[A][1]}static delayTime2(A){return this.data[A][2]}static delayTime3(A){return this.data[A][3]}static delayTime4(A){return this.data[A][4]}static rate1(A){return this.data[A][5]}static rate2(A){return this.data[A][6]}static hfDamp(A){return this.data[A][7]}static cutoffFreq(A){return this.data[A][8]}static eqFreq(A){return this.data[A][9]}static lpf(A){return this.data[A][10]}static manual(A){return this.data[A][11]}static azimuth(A){return this.data[A][12]}static accl(A){return this.data[A][13]}},Bn=Math.PI/2,Ft=-64,ga=63,Ks=ga-Ft,Tt=new Float32Array(Ks+1),Ut=new Float32Array(Ks+1);for(let A=Ft;A<=ga;A++){let e=(A-Ft)/Ks,t=A-Ft;Tt[t]=Math.cos(Bn*e),Ut[t]=Math.sin(Bn*e)}function Se(A){A.x1=A.x2=A.y1=A.y2=0}var Xe={b0:1,b1:0,b2:0,a0:1,a1:0,a2:0};function LA(A,e,t,s,n){let a=e.b0*A+e.b1*s.x1+e.b2*s.x2-e.a1*s.y1-e.a2*s.y2;s.x2=s.x1,s.x1=A,s.y2=s.y1,s.y1=a;let r=t.b0*a+t.b1*n.x1+t.b2*n.x2-t.a1*n.y1-t.a2*n.y2;return n.x2=n.x1,n.x1=a,n.y2=n.y1,n.y1=r,r}function CA(A,e,t){let s=e.b0*A+e.b1*t.x1+e.b2*t.x2-e.a1*t.y1-e.a2*t.y2;return t.x2=t.x1,t.x1=A,t.y2=t.y1,t.y1=s,s}function wA(A,e,t,s,n){let a=Math.pow(10,e/40),r=2*Math.PI*t/s,o=Math.cos(r),i=Math.sin(r)/2*Math.sqrt((a+1/a)*(1/1-1)+2),g,c,l,B,h,E;n?(g=a*(a+1-(a-1)*o+2*Math.sqrt(a)*i),c=2*a*(a-1-(a+1)*o),l=a*(a+1-(a-1)*o-2*Math.sqrt(a)*i),B=a+1+(a-1)*o+2*Math.sqrt(a)*i,h=-2*(a-1+(a+1)*o),E=a+1+(a-1)*o-2*Math.sqrt(a)*i):(g=a*(a+1+(a-1)*o+2*Math.sqrt(a)*i),c=-2*a*(a-1+(a+1)*o),l=a*(a+1+(a-1)*o-2*Math.sqrt(a)*i),B=a+1-(a-1)*o+2*Math.sqrt(a)*i,h=2*(a-1-(a+1)*o),E=a+1-(a-1)*o-2*Math.sqrt(a)*i),A.b0=g/B,A.b1=c/B,A.b2=l/B,A.a0=1,A.a1=h/B,A.a2=E/B}var Fe={x1:0,x2:0,y1:0,y2:0},mr=class{type=256;sendLevelToReverb=0;sendLevelToChorus=0;sendLevelToDelay=0;sampleRate;level=1;lowFreq=400;lowGain=5;hiFreq=8e3;hiGain=-12;m1Freq=1600;m1Q=.5;m1Gain=8;m2Freq=1e3;m2Q=.5;m2Gain=-8;lowCoeffs={...Xe};m1Coeffs={...Xe};m2Coeffs={...Xe};hiCoeffs={...Xe};lowStateL={...Fe};lowStateR={...Fe};m1StateL={...Fe};m1StateR={...Fe};m2StateL={...Fe};m2StateR={...Fe};hiStateL={...Fe};hiStateR={...Fe};constructor(A){this.sampleRate=A,this.reset(),this.updateCoefficients()}reset(){this.level=1,this.lowFreq=400,this.lowGain=5,this.hiGain=-12,this.hiFreq=8e3,this.m1Freq=1600,this.m1Q=.5,this.m1Gain=8,this.m2Freq=1e3,this.m2Q=.5,this.m2Gain=-8,Se(this.lowStateL),Se(this.lowStateR),Se(this.m1StateL),Se(this.m1StateR),Se(this.m2StateL),Se(this.m2StateR),Se(this.hiStateL),Se(this.hiStateR),this.updateCoefficients()}setParameter(A,e){switch(A){default:break;case 3:this.lowFreq=e===1?400:200;break;case 4:this.lowGain=e-64;break;case 5:this.hiFreq=e===1?8e3:4e3;break;case 6:this.hiGain=e-64;break;case 7:this.m1Freq=uA.eqFreq(e);break;case 8:this.m1Q=[.5,1,2,4,9][e]||1;break;case 9:this.m1Gain=e-64;break;case 10:this.m2Freq=uA.eqFreq(e);break;case 11:this.m2Q=[.5,1,2,4,9][e]||1;break;case 12:this.m2Gain=e-64;break;case 22:this.level=e/127;break}this.updateCoefficients()}process(A,e,t,s,n,a,r,o,i){let{level:g,sendLevelToChorus:c,sendLevelToDelay:l,sendLevelToReverb:B,lowCoeffs:h,lowStateL:E,lowStateR:m,m1Coeffs:D,m1StateL:f,m1StateR:O,m2StateL:R,m2StateR:Q,m2Coeffs:T,hiCoeffs:U,hiStateL:x,hiStateR:V}=this;for(let J=0;J<i;J++){let L=A[J],H=e[J];L=CA(L,h,E),H=CA(H,h,m),L=CA(L,D,f),H=CA(H,D,O),L=CA(L,T,R),H=CA(H,T,Q),L=CA(L,U,x),H=CA(H,U,V);let q=o+J;t[q]+=L*g,s[q]+=H*g;let u=.5*(L+H);n[J]+=u*B,a[J]+=u*c,r[J]+=u*l}}updateCoefficients(){pr(this.lowCoeffs,this.lowFreq,this.lowGain/2,this.sampleRate),En(this.m1Coeffs,this.m1Freq,this.m1Gain,this.m1Q,this.sampleRate),En(this.m2Coeffs,this.m2Freq,this.m2Gain,this.m2Q,this.sampleRate),yr(this.hiCoeffs,this.hiFreq,this.hiGain/2,this.sampleRate)}},Ia=1;function En(A,e,t,s,n){let a=Math.pow(10,t/40),r=2*Math.PI*e/n,o=Math.cos(r),i=Math.sin(r)/(2*s),g=1+i*a,c=-2*o,l=1-i*a,B=1+i/a,h=-2*o,E=1-i/a;A.a0=1,A.a1=h/B,A.a2=E/B,A.b0=g/B,A.b1=c/B,A.b2=l/B}function pr(A,e,t,s){let n=Math.pow(10,t/40),a=2*Math.PI*e/s,r=Math.cos(a),o=Math.sin(a)/2*Math.sqrt((n+1/n)*(1/Ia-1)+2),i=n*(n+1-(n-1)*r+2*Math.sqrt(n)*o),g=2*n*(n-1-(n+1)*r),c=n*(n+1-(n-1)*r-2*Math.sqrt(n)*o),l=n+1+(n-1)*r+2*Math.sqrt(n)*o,B=-2*(n-1+(n+1)*r),h=n+1+(n-1)*r-2*Math.sqrt(n)*o;A.a0=1,A.a1=B/l,A.a2=h/l,A.b0=i/l,A.b1=g/l,A.b2=c/l}function yr(A,e,t,s){let n=Math.pow(10,t/40),a=2*Math.PI*e/s,r=Math.cos(a),o=Math.sin(a)/2*Math.sqrt((n+1/n)*(1/Ia-1)+2),i=n*(n+1+(n-1)*r+2*Math.sqrt(n)*o),g=-2*n*(n-1+(n+1)*r),c=n*(n+1+(n-1)*r-2*Math.sqrt(n)*o),l=n+1-(n-1)*r+2*Math.sqrt(n)*o,B=2*(n-1-(n+1)*r),h=n+1-(n-1)*r-2*Math.sqrt(n)*o;A.a0=1,A.a1=B/l,A.a2=h/l,A.b0=i/l,A.b1=g/l,A.b2=c/l}var YA=8,Is=128,dn=4,cs=600,Sr=.9,Qn=.35,ca=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=288;manual=620;rate=.85;depth=64/Is;reso=16/127;mix=1;lowGain=0;hiGain=0;prevInL;prevOutL;prevInR;prevOutR;lowShelfCoef={...Xe};highShelfCoef={...Xe};manualOffset=cs;lowShelfStateL={x1:0,x2:0,y1:0,y2:0};lowShelfStateR={x1:0,x2:0,y1:0,y2:0};highShelfStateL={x1:0,x2:0,y1:0,y2:0};highShelfStateR={x1:0,x2:0,y1:0,y2:0};prevL=0;prevR=0;level=104/127;phase=Qn;sampleRate;constructor(A){this.sampleRate=A,this.prevInL=new Float32Array(YA),this.prevOutL=new Float32Array(YA),this.prevInR=new Float32Array(YA),this.prevOutR=new Float32Array(YA),this.reset()}reset(){this.phase=Qn,this.setManual(620),this.rate=.85,this.depth=64/Is,this.reso=16/127,this.mix=1,this.lowGain=0,this.hiGain=0,this.level=104/127,Se(this.highShelfStateL),Se(this.highShelfStateR),Se(this.lowShelfStateL),Se(this.lowShelfStateR),this.updateShelves(),this.clearAllPass()}process(A,e,t,s,n,a,r,o,i){let{sendLevelToReverb:g,sendLevelToChorus:c,sendLevelToDelay:l,level:B,manual:h,manualOffset:E,mix:m,lowShelfCoef:D,lowShelfStateR:f,lowShelfStateL:O,highShelfCoef:R,highShelfStateL:Q,highShelfStateR:T,prevInL:U,prevInR:x,prevOutL:V,prevOutR:J,sampleRate:L,depth:H}=this,{prevL:q,prevR:u,phase:v}=this,S=this.rate/this.sampleRate,k=this.reso*Sr;for(let p=0;p<i;p++){let P=LA(A[p],D,R,O,Q),K=LA(e[p],D,R,f,T),Ce=2*Math.abs(v-.5);(v+=S)>=1&&(v-=1);let be=E+h*(1-H*Ce),Be=Math.tan(Math.PI*be/L),ae=Math.max(-.9999,Math.min(.9999,(1-Be)/(1+Be))),he=P+k*q,j=K+k*u;for(let Ie=0;Ie<YA;Ie++){let ve=-ae*he+U[Ie]+ae*V[Ie];U[Ie]=he,V[Ie]=ve,he=ve;let sA=-ae*j+x[Ie]+ae*J[Ie];x[Ie]=j,J[Ie]=sA,j=sA}q=he,u=j;let Y=(P+he*m)*B,ne=(K+j*m)*B,fe=o+p;t[fe]+=Y,s[fe]+=ne;let Me=(Y+ne)*.5;n[p]+=Me*g,a[p]+=Me*c,r[p]+=Me*l}this.phase=v,this.prevL=q,this.prevR=u}setParameter(A,e){switch(A){default:break;case 3:this.setManual(uA.manual(e));break;case 4:this.rate=uA.rate1(e);break;case 5:this.depth=e/Is;break;case 6:this.reso=e/127;break;case 7:this.mix=e/127;break;case 19:this.lowGain=e-64;break;case 20:this.hiGain=e-64;break;case 22:this.level=e/127;break}this.updateShelves()}setManual(A){A>1e3?(this.manualOffset=cs*1.5*dn,this.manual=A):(this.manualOffset=cs,this.manual=A*dn)}clearAllPass(){this.prevR=0,this.prevL=0;for(let A=0;A<YA;A++)this.prevInL[A]=0,this.prevOutL[A]=0,this.prevInR[A]=0,this.prevOutR[A]=0}updateShelves(){wA(this.lowShelfCoef,this.lowGain,200,this.sampleRate,!0),wA(this.highShelfCoef,this.hiGain,4e3,this.sampleRate,!1)}},fn=Math.PI*2,kr=.935,Dr=2,wr=.01,un=127,br=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=294;modWave=1;modRate=3.05;modDepth=96;lowGain=0;hiGain=0;level=un/127;currentPan=0;phase=0;lsCoeffs={...Xe};hsCoeffs={...Xe};lsStateR={...Fe};lsStateL={...Fe};hsStateR={...Fe};hsStateL={...Fe};sampleRate;constructor(A){this.sampleRate=A,this.reset()}reset(){this.modWave=1,this.modRate=3.05,this.modDepth=96,this.lowGain=0,this.hiGain=0,this.level=un/127,this.currentPan=0,this.phase=0,Se(this.hsStateR),Se(this.hsStateL),Se(this.lsStateR),Se(this.lsStateL),this.updateShelves()}process(A,e,t,s,n,a,r,o,i){let{sendLevelToReverb:g,sendLevelToChorus:c,sendLevelToDelay:l,level:B,lsCoeffs:h,lsStateL:E,lsStateR:m,hsCoeffs:D,hsStateR:f,hsStateL:O,modWave:R}=this,Q=Math.pow(this.modDepth/127,Dr),T=2/(1+Q)*kr,U=this.modRate/this.sampleRate,{phase:x,currentPan:V}=this;for(let J=0;J<i;J++){let L=LA(A[J],h,D,E,O),H=LA(e[J],h,D,m,f),q;switch(R){default:q=1-4*Math.abs(x-.5);break;case 1:q=x>.5?-1:-Math.cos((x-.75)*fn);break;case 2:q=Math.sin(fn*x);break;case 3:q=1-2*x;break;case 4:q=2*x-1;break}(x+=U)>=1&&(x-=1),V+=(q-V)*wr;let u=V*Q,v=(1-u)*.5*T,S=(1+u)*.5*T,k=L*B*v,p=H*B*S,P=o+J;t[P]+=k,s[P]+=p;let K=(k+p)*.5;n[J]+=K*g,a[J]+=K*c,r[J]+=K*l}this.currentPan=V,this.phase=x}setParameter(A,e){switch(A){default:break;case 3:this.modWave=e;break;case 4:this.modRate=uA.rate1(e);break;case 5:this.modDepth=e;break;case 19:this.lowGain=e-64;break;case 20:this.hiGain=e-64;break;case 22:this.level=e/127;break}this.updateShelves()}updateShelves(){wA(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),wA(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}},mn=96,Rr=.1,Fr=.1,Gr=27,Mr=28,vr=-28,Lr=400,Nr=.62,Tr=.005,la=5,pn=la*.5,Ca=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=289;filType=1;sens=0;manual=68;peak=62;rate=2.05;depth=72;polarity=1;pan=0;lowGain=0;hiGain=0;level=mn/127;coeffs={...Xe};state={...Fe};hpCoeffs={...Xe};hpState={...Fe};phase=0;lsCoeffs={...Xe};hsCoeffs={...Xe};lsState={...Fe};hsState={...Fe};sampleRate;lastFc=this.manual;attackCoeff;releaseCoeff;envelope=0;constructor(A){this.sampleRate=A,this.attackCoeff=Math.exp(-1/(Rr*A)),this.releaseCoeff=Math.exp(-1/(Fr*A)),this.reset()}reset(){this.filType=1,this.sens=0,this.setManual(68),this.peak=62,this.rate=2.05,this.depth=72,this.polarity=1,this.lowGain=0,this.hiGain=0,this.pan=0,this.level=mn/127,this.phase=.2,this.lastFc=this.manual,Se(this.hsState),Se(this.lsState),Se(this.state),Se(this.hpState),this.updateShelves()}process(A,e,t,s,n,a,r,o,i){let{sendLevelToReverb:g,sendLevelToChorus:c,sendLevelToDelay:l,level:B,lsCoeffs:h,lsState:E,hsCoeffs:m,hsState:D,coeffs:f,state:O,sampleRate:R,filType:Q,manual:T,pan:U,attackCoeff:x,releaseCoeff:V,hpState:J,hpCoeffs:L}=this,{phase:H,lastFc:q,envelope:u}=this,v=this.rate/this.sampleRate,S=Math.pow(10,this.peak/127*Mr/20),k=Math.pow(10,this.peak/127*vr/20),p=this.polarity===0?-1:la,P=this.depth/127*p,K=this.sens/127,Ce=U+64|0,be=Tt[Ce],Be=Ut[Ce];for(let ae=0;ae<i;ae++){let he=LA((A[ae]+e[ae])*.5,h,m,E,D),j=Math.abs(he);u=j>u?x*u+(1-x)*j:V*u+(1-V)*j;let Y=2*Math.abs(H-.5)*P;(H+=v)>=1&&(H-=1);let ne=Y>=pn||p<0?1:Math.sin(Y*Math.PI/(2*pn)),fe=T*(1+K*u*Gr),Me=Math.max(20,fe*(1+ne*Y));q+=(Math.max(10,Me)-q)*Tr,Ur(f,q,S,R);let Ie=he;Q===1&&(Pr(L,Lr,k,R),Ie=CA(Ie,L,J));let ve=CA(Ie,f,O)*B,sA=ve*be,pA=ve*Be,yA=o+ae;t[yA]+=sA,s[yA]+=pA,n[ae]+=ve*g,a[ae]+=ve*c,r[ae]+=ve*l}this.phase=H,this.lastFc=q,this.envelope=u}setParameter(A,e){switch(A){default:break;case 3:this.filType=e;break;case 4:this.sens=e;break;case 5:this.setManual(e);break;case 6:this.peak=e;break;case 7:this.rate=uA.rate1(e);break;case 8:this.depth=e;break;case 9:this.polarity=e;break;case 19:this.lowGain=e-64;break;case 20:this.hiGain=e-64;break;case 21:this.pan=e-64;break;case 22:this.level=e/127;break}this.updateShelves()}setManual(A){let e=A*Nr,t=uA.manual(Math.floor(e)),s=uA.manual(Math.ceil(e)),n=e-Math.floor(e);this.manual=t+(s-t)*n}updateShelves(){wA(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),wA(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}};function Ur(A,e,t,s){let n=2*Math.PI*e/s,a=Math.cos(n),r=Math.sin(n)/(2*t),o=1-a,i=o/2,g=i,c=1+r,l=-2*a,B=1-r;A.a0=1,A.a1=l/c,A.a2=B/c,A.b0=i/c,A.b1=o/c,A.b2=g/c}function Pr(A,e,t,s){let n=2*Math.PI*e/s,a=Math.cos(n),r=Math.sin(n)/(2*t),o=(1+a)/2,i=-(1+a),g=o,c=1+r,l=-2*a,B=1-r;A.a0=1,A.a1=l/c,A.a2=B/c,A.b0=o/c,A.b1=i/c,A.b2=g/c}var yn=127,xr=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=4360;phPan=0;awPan=127;level=yn/127;phaser;autoWah;bufferPh;bufferAw;constructor(A,e){this.phaser=new ca(A),this.autoWah=new Ca(A),this.bufferAw=new Float32Array(e),this.bufferPh=new Float32Array(e),this.phaser.sendLevelToReverb=0,this.phaser.sendLevelToChorus=0,this.phaser.sendLevelToDelay=0,this.autoWah.sendLevelToReverb=0,this.autoWah.sendLevelToChorus=0,this.autoWah.sendLevelToDelay=0,this.reset()}reset(){this.phPan=0,this.awPan=127,this.level=yn/127,this.phaser.reset(),this.autoWah.reset(),this.phaser.setParameter(22,127),this.autoWah.setParameter(22,127)}process(A,e,t,s,n,a,r,o,i){let{sendLevelToReverb:g,sendLevelToChorus:c,sendLevelToDelay:l,level:B}=this,{bufferPh:h,bufferAw:E}=this;this.bufferPh.fill(0),this.phaser.process(A,A,h,h,h,h,h,0,i),this.bufferAw.fill(0),this.autoWah.process(e,e,E,E,E,E,E,0,i);let m=this.phPan|0,D=Tt[m],f=Ut[m],O=this.awPan|0,R=Tt[O],Q=Ut[O];for(let T=0;T<i;T++){let U=h[T]*.5*B,x=E[T]*.5*B,V=U*D+x*R,J=U*f+x*Q,L=o+T;t[L]+=V,s[L]+=J;let H=(V+J)*.5;n[T]+=H*g,a[T]+=H*c,r[T]+=H*l}}setParameter(A,e){if(A>=3&&A<=7){this.phaser.setParameter(A,e);return}if(A>=8&&A<=14){this.autoWah.setParameter(A-5,e);return}switch(A){default:break;case 18:this.phPan=e;break;case 19:this.phaser.setParameter(22,e);break;case 20:this.awPan=e;break;case 21:this.autoWah.setParameter(22,e);break;case 22:this.level=e/127;break}}},Sn=127,kn=Math.PI*2,Hr=.01,Or=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=293;modWave=1;modRate=3.05;modDepth=96;lowGain=0;hiGain=0;level=Sn/127;phase=0;currentGain=1;lsCoeffs={...Xe};hsCoeffs={...Xe};lsStateR={...Fe};lsStateL={...Fe};hsStateR={...Fe};hsStateL={...Fe};sampleRate;constructor(A){this.sampleRate=A,this.reset()}reset(){this.modWave=1,this.modRate=3.05,this.modDepth=96,this.lowGain=0,this.hiGain=0,this.level=Sn/127,this.phase=0,this.currentGain=1,Se(this.hsStateR),Se(this.hsStateL),Se(this.lsStateR),Se(this.lsStateL),this.updateShelves()}process(A,e,t,s,n,a,r,o,i){let{sendLevelToReverb:g,sendLevelToChorus:c,sendLevelToDelay:l,level:B,lsCoeffs:h,lsStateL:E,lsStateR:m,hsCoeffs:D,hsStateR:f,hsStateL:O,modDepth:R,modWave:Q}=this,T=this.modRate/this.sampleRate,{currentGain:U,phase:x}=this;for(let V=0;V<i;V++){let J=LA(A[V],h,D,E,O),L=LA(e[V],h,D,m,f),H;switch(Q){default:H=1-4*Math.abs(x-.5);break;case 1:H=x>.5?-1:-Math.cos((x-.75)*kn);break;case 2:H=Math.sin(kn*x);break;case 3:H=1-2*x;break;case 4:H=2*x-1;break}(x+=T)>=1&&(x-=1);let q=1-(H/2+.5)*(R/127);U+=(q-U)*Hr;let u=J*B*U,v=L*B*U,S=o+V;t[S]+=u,s[S]+=v;let k=(u+v)*.5;n[V]+=k*g,a[V]+=k*c,r[V]+=k*l}this.phase=x,this.currentGain=U}setParameter(A,e){switch(A){default:break;case 3:this.modWave=e;break;case 4:this.modRate=uA.rate1(e);break;case 5:this.modDepth=e;break;case 19:this.lowGain=e-64;break;case 20:this.hiGain=e-64;break;case 22:this.level=e/127;break}this.updateShelves()}updateShelves(){wA(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),wA(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}},Yr=[ha,mr,ca,br,Ca,xr,Or],qr=class{preDelay=0;preLPF=.5;inputDiffusion1=.75;inputDiffusion2=.625;decay=.5;decayDiffusion1=.7;decayDiffusion2=.5;damping=.005;excursionRate=.1;excursionDepth=.2;gain=1;sampleRate;lp1=0;lp2=0;lp3=0;excPhase=0;pDWrite=0;taps;pDelay;pDLength;delays=new Array;constructor(A){this.sampleRate=A,this.pDLength=A,this.pDelay=new Float32Array(this.pDLength);for(let e of[.004771345,.003595309,.012734787,.009307483,.022579886,.149625349,.060481839,.1249958,.030509727,.141695508,.089244313,.106280031])this.makeDelayLine(e);this.taps=Int16Array.from([.008937872,.099929438,.064278754,.067067639,.066866033,.006283391,.035818689,.011861161,.121870905,.041262054,.08981553,.070931756,.011256342,.004065724],e=>Math.round(e*this.sampleRate))}process(A,e,t,s,n){let a=this.preDelay|0,r=this.inputDiffusion1,o=this.inputDiffusion2,i=this.decay,g=this.decayDiffusion1,c=this.decayDiffusion2,l=1-this.damping,B=this.excursionRate/this.sampleRate,h=this.excursionDepth*this.sampleRate/1e3,E=this.pDWrite;for(let m=0;m<n;m++)this.pDelay[(E+m)%this.pDLength]=A[m];for(let m=0;m<n;m++){this.lp1+=this.preLPF*(this.pDelay[(this.pDLength+this.pDWrite-a+m)%this.pDLength]-this.lp1);let D=this.writeDelay(0,this.lp1-r*this.readDelay(0));D=this.writeDelay(1,r*(D-this.readDelay(1))+this.readDelay(0)),D=this.writeDelay(2,r*D+this.readDelay(1)-o*this.readDelay(2)),D=this.writeDelay(3,o*(D-this.readDelay(3))+this.readDelay(2));let f=o*D+this.readDelay(3),O=h*(1+Math.cos(this.excPhase*6.28)),R=h*(1+Math.sin(this.excPhase*6.2847)),Q=this.writeDelay(4,f+i*this.readDelay(11)+g*this.readDelayCAt(4,O));this.writeDelay(5,this.readDelayCAt(4,O)-g*Q),this.lp2+=l*(this.readDelay(5)-this.lp2),Q=this.writeDelay(6,i*this.lp2-c*this.readDelay(6)),this.writeDelay(7,this.readDelay(6)+c*Q),Q=this.writeDelay(8,f+i*this.readDelay(7)+g*this.readDelayCAt(8,R)),this.writeDelay(9,this.readDelayCAt(8,R)-g*Q),this.lp3+=l*(this.readDelay(9)-this.lp3),Q=this.writeDelay(10,i*this.lp3-c*this.readDelay(10)),this.writeDelay(11,this.readDelay(10)+c*Q);let T=this.readDelayAt(9,this.taps[0])+this.readDelayAt(9,this.taps[1])-this.readDelayAt(10,this.taps[2])+this.readDelayAt(11,this.taps[3])-this.readDelayAt(5,this.taps[4])-this.readDelayAt(6,this.taps[5])-this.readDelayAt(7,this.taps[6]),U=m+s;e[U]+=T*this.gain;let x=this.readDelayAt(5,this.taps[7])+this.readDelayAt(5,this.taps[8])-this.readDelayAt(6,this.taps[9])+this.readDelayAt(7,this.taps[10])-this.readDelayAt(9,this.taps[11])-this.readDelayAt(10,this.taps[12])-this.readDelayAt(11,this.taps[13]);t[U]+=x*this.gain,this.excPhase+=B;for(let V=0,J=this.delays[0];V<this.delays.length;J=this.delays[++V])J[1]=J[1]+1&J[3],J[2]=J[2]+1&J[3]}this.pDWrite=(E+n)%this.pDLength}makeDelayLine(A){let e=Math.round(A*this.sampleRate),t=2**Math.ceil(Math.log2(e));this.delays.push([new Float32Array(t),e-1,0,t-1])}writeDelay(A,e){return this.delays[A][0][this.delays[A][1]]=e}readDelay(A){return this.delays[A][0][this.delays[A][2]]}readDelayAt(A,e){let t=this.delays[A];return t[0][t[2]+e&t[3]]}readDelayCAt(A,e){let t=this.delays[A],s=e-~~e,n=t[3],a=~~e+t[2]-1,r=t[0][a++&n],o=t[0][a++&n],i=t[0][a++&n],g=t[0][a&n],c=(3*(o-i)-r+g)/2,l=2*i+r-(5*o+g)/2,B=(i-r)/2;return((c*s+l)*s+B)*s+o}},nt=class{feedback=0;gain=1;buffer;bufferLength;writeIndex=0;constructor(A){this.buffer=new Float32Array(A),this.bufferLength=this.buffer.length,this._time=A-5}_time;get time(){return this._time}set time(A){this._time=Math.min(this.bufferLength,A)|0}clear(){this.buffer.fill(0)}process(A,e,t){let s=this.writeIndex,n=this._time,a=this.buffer,r=this.bufferLength,o=this.feedback,i=this.gain;for(let g=0;g<t;g++){let c=s-n;c<0&&(c+=r);let l=a[c];e[g]=l*i,a[s]=A[g]+l*o,++s>=r&&(s=0)}this.writeIndex=s}},Jr=1.5,Kr=class{dattorro;delayLeft;delayRight;delayLeftOutput;delayRightOutput;delayLeftInput;delayPreLPF;sampleRate;preLPFfc=8e3;preLPFa=0;preLPFz=0;characterTimeCoefficient=1;characterGainCoefficient=1;characterLPFCoefficient=0;delayGain=1;panDelayFeedback=0;constructor(A,e){this.sampleRate=A,this.delayLeftOutput=new Float32Array(e),this.delayRightOutput=new Float32Array(e),this.delayLeftInput=new Float32Array(e),this.delayPreLPF=new Float32Array(e),this.dattorro=new qr(A),this.delayLeft=new nt(A),this.delayRight=new nt(A)}_delayFeedback=0;get delayFeedback(){return this._delayFeedback}set delayFeedback(A){this._delayFeedback=A,this.updateFeedback()}_character=0;get character(){return this._character}set character(A){switch(this._character=A,this.dattorro.damping=.005,this.characterTimeCoefficient=1,this.characterGainCoefficient=1,this.characterLPFCoefficient=0,this.dattorro.inputDiffusion1=.75,this.dattorro.inputDiffusion2=.625,this.dattorro.decayDiffusion1=.7,this.dattorro.decayDiffusion2=.5,this.dattorro.excursionRate=.5,this.dattorro.excursionDepth=.7,A){case 0:this.dattorro.damping=.85,this.characterTimeCoefficient=.9,this.characterGainCoefficient=.7,this.characterLPFCoefficient=.2;break;case 1:this.dattorro.damping=.2,this.characterGainCoefficient=.5,this.characterTimeCoefficient=1,this.dattorro.decayDiffusion2=.64,this.dattorro.decayDiffusion1=.6,this.characterLPFCoefficient=.2;break;case 2:this.dattorro.damping=.56,this.characterGainCoefficient=.55,this.characterTimeCoefficient=1,this.dattorro.decayDiffusion2=.64,this.dattorro.decayDiffusion1=.6,this.characterLPFCoefficient=.1;break;case 3:this.dattorro.damping=.6,this.characterGainCoefficient=1,this.characterLPFCoefficient=0,this.dattorro.decayDiffusion2=.7,this.dattorro.decayDiffusion1=.66;break;case 4:this.characterGainCoefficient=.75,this.dattorro.damping=.2,this.characterLPFCoefficient=.2;break;case 5:this.characterGainCoefficient=.55,this.dattorro.damping=.65,this.characterTimeCoefficient=.5;break}this.updateTime(),this.updateGain(),this.updateLowpass(),this.updateFeedback(),this.delayLeft.clear(),this.delayRight.clear()}_time=0;get time(){return this._time}set time(A){this._time=A,this.updateTime()}_preDelayTime=0;get preDelayTime(){return this._preDelayTime}set preDelayTime(A){this._preDelayTime=A,this.dattorro.preDelay=A/1e3*this.sampleRate}_level=0;get level(){return this._level}set level(A){this._level=A,this.updateGain()}_preLowpass=0;get preLowpass(){return this._preLowpass}set preLowpass(A){this._preLowpass=A,this.preLPFfc=8e3*.63**this._preLowpass;let e=Math.exp(-2*Math.PI*this.preLPFfc/this.sampleRate);this.preLPFa=1-e,this.updateLowpass()}process(A,e,t,s,n){switch(this._character){default:this.dattorro.process(A,e,t,s,n);return;case 6:{let a;if(this._preLowpass>0){let i=this.delayPreLPF,g=this.preLPFz,c=this.preLPFa;for(let l=0;l<n;l++){let B=A[l];g+=c*(B-g),i[l]=g}this.preLPFz=g,a=i}else a=A;this.delayLeft.process(a,this.delayLeftOutput,n);let r=this.delayGain,o=this.delayLeftOutput;for(let i=0,g=s;i<n;i++,g++){let c=o[i]*r;t[g]+=c,e[g]+=c}return}case 7:{let a;if(this._preLowpass>0){let l=this.delayPreLPF,B=this.preLPFz,h=this.preLPFa;for(let E=0;E<n;E++){let m=A[E];B+=h*(m-B),l[E]=B}this.preLPFz=B,a=l}else a=A;let r=this.panDelayFeedback,{delayLeftInput:o,delayLeftOutput:i,delayRightOutput:g}=this;for(let l=0;l<n;l++)o[l]=a[l]+g[l]*r;this.delayLeft.process(o,i,n),this.delayRight.process(i,g,n);let c=this.delayGain;for(let l=0,B=s;l<n;l++,B++)e[B]+=i[l]*c,t[B]+=g[l]*c;return}}}getSnapshot(){return{level:this._level,preLowpass:this._preLowpass,character:this._character,time:this._time,delayFeedback:this._delayFeedback,preDelayTime:this._preDelayTime}}updateFeedback(){let A=1-(1-this._delayFeedback/127)**1.9;this._character===6?this.delayLeft.feedback=A*.73:(this.delayLeft.feedback=this.delayRight.feedback=0,this.panDelayFeedback=A*.73)}updateLowpass(){this.dattorro.preLPF=Math.min(1,.1+(7-this.preLowpass)/14+this.characterLPFCoefficient)}updateGain(){this.dattorro.gain=this._level/348*this.characterGainCoefficient,this.delayGain=this._level/127*Jr}updateTime(){let A=this._time/127;this.dattorro.decay=this.characterTimeCoefficient*(.05+.65*A);let e=Math.max(21,A*this.sampleRate*.4468|0);this.character===7?this.delayRight.time=this.delayLeft.time=Math.floor(e/2):this.delayLeft.time=e}},Vr=1.3,Xr=class{preLPFfc=8e3;preLPFa=0;preLPFz=0;leftDelayBuffer;rightDelayBuffer;sampleRate;phase=0;write=0;gain=.5;reverbGain=0;delayGain=0;depthSamples=0;delaySamples=1;rateInc=0;feedbackGain=0;constructor(A,e){this.sampleRate=A,this.leftDelayBuffer=new Float32Array(A),this.rightDelayBuffer=new Float32Array(A),this.preLowpass=0}_sendLevelToReverb=0;get sendLevelToReverb(){return this._sendLevelToReverb}set sendLevelToReverb(A){this._sendLevelToReverb=A,this.reverbGain=A/127}_sendLevelToDelay=0;get sendLevelToDelay(){return this._sendLevelToDelay}set sendLevelToDelay(A){this._sendLevelToDelay=A,this.delayGain=A/127}_preLowpass=0;get preLowpass(){return this._preLowpass}set preLowpass(A){this._preLowpass=A,this.preLPFfc=8e3*.63**this._preLowpass;let e=Math.exp(-2*Math.PI*this.preLPFfc/this.sampleRate);this.preLPFa=1-e}_depth=0;get depth(){return this._depth}set depth(A){this._depth=A,this.depthSamples=A/127*.025*this.sampleRate}_delay=0;get delay(){return this._delay}set delay(A){this._delay=A,this.delaySamples=Math.max(1,A/127*.025*this.sampleRate)}_feedback=0;get feedback(){return this._feedback}set feedback(A){this._feedback=A,this.feedbackGain=A/128}_rate=0;get rate(){return this._rate}set rate(A){this._rate=A;let e=15.5*(A/127);this.rateInc=e/this.sampleRate}_level=64;get level(){return this._level}set level(A){this.gain=A/127*Vr,this._level=A}process(A,e,t,s,n,a,r){let o=this.leftDelayBuffer,i=this.rightDelayBuffer,g=this.rateInc,c=o.length,l=this.depthSamples,B=this.delaySamples,h=this.gain,E=this.reverbGain,m=this.delayGain,D=this.feedbackGain,f=this._preLowpass>0,O=this.phase,R=this.write,Q=this.preLPFz,T=this.preLPFa;for(let U=0;U<r;U++){let x=A[U];f&&(Q+=T*(x-Q),x=Q);let V=2*Math.abs(O-.5),J=Math.max(1,Math.min(B+V*l,c)),L=R-J;L<0&&(L+=c);let H=L|0,q=H+1;q>=c&&(q-=c);let u=L-H,v=o[H]*(1-u)+o[q]*u;o[R]=x+v*D;let S=Math.max(1,Math.min(B+(1-V)*l,c)),k=R-S;k<0&&(k+=c),H=k|0,q=H+1,q>=c&&(q-=c),u=k-H;let p=i[H]*(1-u)+i[q]*u,P=U+a;e[P]+=v*h,t[P]+=p*h;let K=(v+p)/2;s[U]+=K*E,n[U]+=K*m,i[R]=x+p*D,++R>=c&&(R=0),(O+=g)>=1&&(O-=1)}this.write=R,this.phase=O,this.preLPFz=Q}getSnapshot(){return{preLowpass:this._preLowpass,depth:this._depth,delay:this._delay,sendLevelToDelay:this._sendLevelToDelay,sendLevelToReverb:this._sendLevelToReverb,rate:this._rate,feedback:this._feedback,level:this._level}}},Zr=[{start:1,end:20,timeStart:.1,resolution:.1},{start:20,end:35,timeStart:2,resolution:.2},{start:35,end:45,timeStart:5,resolution:.5},{start:45,end:55,timeStart:10,resolution:1},{start:55,end:70,timeStart:20,resolution:2},{start:70,end:80,timeStart:50,resolution:5},{start:80,end:90,timeStart:100,resolution:10},{start:90,end:105,timeStart:200,resolution:20},{start:105,end:116,timeStart:500,resolution:50}],Wr=1.66,zr=class{preLPFfc=8e3;preLPFa=0;preLPFz=0;delayLeft;delayRight;delayCenter;sampleRate;delayCenterOutput;delayPreLPF;delayCenterTime;delayLeftMultiplier=.04;delayRightMultiplier=.04;gain=0;reverbGain=0;constructor(A,e){this.sampleRate=A,this.delayCenterOutput=new Float32Array(e),this.delayPreLPF=new Float32Array(e),this.delayCenterTime=.34*A,this.delayCenter=new nt(A),this.delayLeft=new nt(A),this.delayRight=new nt(A)}_sendLevelToReverb=0;get sendLevelToReverb(){return this._sendLevelToReverb}set sendLevelToReverb(A){this._sendLevelToReverb=A,this.reverbGain=A/127}_preLowpass=0;get preLowpass(){return this._preLowpass}set preLowpass(A){this._preLowpass=A,this.preLPFfc=8e3*.63**this._preLowpass;let e=Math.exp(-2*Math.PI*this.preLPFfc/this.sampleRate);this.preLPFa=1-e}_levelRight=0;get levelRight(){return this._levelRight}set levelRight(A){this._levelRight=A,this.updateGain()}_level=64;get level(){return this._level}set level(A){this._level=A,this.gain=A/127*Wr}_levelCenter=127;get levelCenter(){return this._levelCenter}set levelCenter(A){this._levelCenter=A,this.updateGain()}_levelLeft=0;get levelLeft(){return this._levelLeft}set levelLeft(A){this._levelLeft=A,this.updateGain()}_feedback=16;get feedback(){return this._feedback}set feedback(A){this._feedback=A,this.delayLeft.feedback=this.delayRight.feedback=0,this.delayCenter.feedback=(A-64)/66}_timeRatioRight=0;get timeRatioRight(){return this._timeRatioRight}set timeRatioRight(A){this._timeRatioRight=A,this.delayRightMultiplier=A*(100/2400),this.delayRight.time=this.delayCenterTime*this.delayRightMultiplier}_timeRatioLeft=0;get timeRatioLeft(){return this._timeRatioLeft}set timeRatioLeft(A){this._timeRatioLeft=A,this.delayLeftMultiplier=A*(100/2400),this.delayLeft.time=this.delayCenterTime*this.delayLeftMultiplier}_timeCenter=12;get timeCenter(){return this._timeCenter}set timeCenter(A){this._timeCenter=A;let e=.1;for(let t of Zr)if(A>=t.start&&A<t.end){e=t.timeStart+(A-t.start)*t.resolution;break}this.delayCenterTime=Math.max(2,this.sampleRate*(e/1e3)),this.delayCenter.time=this.delayCenterTime,this.delayLeft.time=this.delayCenterTime*this.delayLeftMultiplier,this.delayRight.time=this.delayCenterTime*this.delayRightMultiplier}process(A,e,t,s,n,a){let r;if(this._preLowpass>0){let l=this.delayPreLPF,B=this.preLPFz,h=this.preLPFa;for(let E=0;E<a;E++){let m=A[E];B+=h*(m-B),l[E]=B}this.preLPFz=B,r=l}else r=A;let{gain:o,reverbGain:i}=this;this.delayCenter.process(r,this.delayCenterOutput,a);let g=this.delayCenterOutput;for(let l=0,B=n;l<a;l++,B++){let h=g[l];s[l]+=h*i;let E=h*o;e[B]+=E,t[B]+=E}for(let l=0;l<a;l++)g[l]+=A[l];let c=this.delayPreLPF;this.delayLeft.process(g,c,a);for(let l=0,B=n;l<a;l++,B++){let h=c[l];e[B]+=h*o,s[l]+=h*i}this.delayRight.process(g,c,a);for(let l=0,B=n;l<a;l++,B++){let h=c[l];t[B]+=h*o,s[l]+=h*i}}getSnapshot(){return{level:this._level,preLowpass:this._preLowpass,timeCenter:this._timeCenter,timeRatioRight:this._timeRatioRight,timeRatioLeft:this._timeRatioLeft,levelCenter:this._levelCenter,levelLeft:this._levelLeft,levelRight:this._levelRight,feedback:this._feedback,sendLevelToReverb:this._sendLevelToReverb}}updateGain(){this.delayCenter.gain=this._levelCenter/127,this.delayLeft.gain=this._levelLeft/127,this.delayRight.gain=this._levelRight/127}},_r=.01,$r=.05,jr=class{voices;midiChannels=[];maxBufferSize;voiceBuffer;insertionInputL;insertionInputR;reverbInput;chorusInput;delayInput;delayActive=!1;soundBankManager=new lr(this.updatePresetList.bind(this));keyModifierManager=new Ei;sampleRate;tunings=new Float32Array(16384).fill(-1);masterParameters={...qn};currentTime=0;midiVolume=1;enableEffects;enableEventSystem;panLeft=Math.cos(Math.PI/4);panRight=Math.cos(Math.PI/4);defaultPreset;drumPreset;gainSmoothingFactor;panSmoothingFactor;eventCallbackHandler;missingPresetHandler;cachedVoices=new Map;setMasterParameter=Cr.bind(this);getMasterParameter=Br.bind(this);getAllMasterParameters=Er.bind(this);systemExclusive=ur.bind(this);voiceCount=0;customChannelNumbers=!1;reverbProcessor;chorusProcessor;delayProcessor;insertionFallback=new ha;insertionProcessor=this.insertionFallback;insertionEffects=new Map;insertionActive=!1;portSelectChannelOffset=0;insertionParams=new Uint8Array(23).fill(255);lastPriorityAssignmentTime=0;eventQueue=[];sampleTime;constructor(A,e,t,s){this.eventCallbackHandler=A,this.missingPresetHandler=e,this.sampleRate=t,this.sampleTime=1/t,this.currentTime=s.initialTime,this.enableEffects=s.enableEffects,this.enableEventSystem=s.enableEventSystem,this.maxBufferSize=s.maxBufferSize,this.gainSmoothingFactor=_r*(44100/t),this.panSmoothingFactor=$r*(44100/t),Ys.initCache(this.sampleRate);let n=this.maxBufferSize;this.reverbProcessor=s.reverbProcessor??new Kr(t,n),this.chorusProcessor=s.chorusProcessor??new Xr(t,n),this.delayProcessor=s.delayProcessor??new zr(t,n),this.voiceBuffer=new Float32Array(n),this.insertionInputL=new Float32Array(n),this.insertionInputR=new Float32Array(n),this.reverbInput=new Float32Array(n),this.chorusInput=new Float32Array(n),this.delayInput=new Float32Array(n);for(let a of Yr)this.registerInsertionProcessor(a);this.resetInsertionParams(),this.voices=[];for(let a=0;a<this.masterParameters.voiceCap;a++)this.voices.push(new ps(this.sampleRate))}controllerChange(A,e,t){if(this.customChannelNumbers){for(let s of this.midiChannels)s.rxChannel===A&&s.controllerChange(e,t);return}this.midiChannels[A+this.portSelectChannelOffset].controllerChange(e,t)}noteOn(A,e,t){if(this.customChannelNumbers){for(let s of this.midiChannels)s.rxChannel===A&&s.noteOn(e,t);return}this.midiChannels[A+this.portSelectChannelOffset].noteOn(e,t)}noteOff(A,e){if(this.customChannelNumbers){for(let t of this.midiChannels)t.rxChannel===A&&t.noteOff(e);return}this.midiChannels[A+this.portSelectChannelOffset].noteOff(e)}polyPressure(A,e,t){if(this.customChannelNumbers){for(let s of this.midiChannels)s.rxChannel===A&&s.polyPressure(e,t);return}this.midiChannels[A+this.portSelectChannelOffset].polyPressure(e,t)}channelPressure(A,e){if(this.customChannelNumbers){for(let t of this.midiChannels)t.rxChannel===A&&t.channelPressure(e);return}this.midiChannels[A+this.portSelectChannelOffset].channelPressure(e)}pitchWheel(A,e,t=-1){if(this.customChannelNumbers){for(let s of this.midiChannels)s.rxChannel===A&&s.pitchWheel(e,t);return}this.midiChannels[A+this.portSelectChannelOffset].pitchWheel(e,t)}programChange(A,e){if(this.customChannelNumbers){for(let t of this.midiChannels)t.rxChannel===A&&t.programChange(e);return}this.midiChannels[A+this.portSelectChannelOffset].programChange(e)}assignVoice(){for(let e=0;e<this.masterParameters.voiceCap;e++){let t=this.voices[e];if(!t.isActive)return t.priority=1/0,t}if(this.masterParameters.autoAllocateVoices){let e=new ps(this.sampleRate);return this.voices.push(e),this.masterParameters.voiceCap++,this.callEvent("masterParameterChange",{parameter:"voiceCap",value:this.masterParameters.voiceCap}),e}this.assignVoicePriorities();let A=this.voices[0];for(let e=0;e<this.masterParameters.voiceCap;e++){let t=this.voices[e];t.priority<A.priority&&(A=t)}return A.priority=1/0,A}stopAllChannels(A){y("%cStop all received!",C.info);for(let e of this.midiChannels)e.stopAllNotes(A)}processMessage(A,e=0,t=Da){let s=t.time;s>this.currentTime?(this.eventQueue.push({message:A,channelOffset:e,time:s}),this.eventQueue.sort((n,a)=>n.time-a.time)):this.processMessageInternal(A,e)}destroySynthProcessor(){this.voices.length=0;for(let A of this.midiChannels)A.lockedControllers=[],A.preset=void 0;this.clearCache(),this.midiChannels.length=0,this.soundBankManager.destroy()}getVoices(A,e,t){let s=this.midiChannels[A],n=this.keyModifierManager.hasOverridePatch(A,e),a=s.preset;if(n){let r=this.keyModifierManager.getPatch(A,e);a=this.soundBankManager.getPreset(r,this.masterParameters.midiSystem)}return a?this.getVoicesForPreset(a,e,t):[]}createMIDIChannel(A){let e=new Ir(this,this.defaultPreset,this.midiChannels.length);this.midiChannels.push(e),A&&(this.callEvent("newChannel",void 0),e.sendChannelProperty(),e.setDrums(!0))}resetAllControllers(A="gs"){if(this.callEvent("allControllerReset",void 0),this.setMasterParameter("midiSystem",A),this.tunings.fill(-1),this.portSelectChannelOffset=0,this.customChannelNumbers=!1,this.setMIDIVolume(1),this.setReverbMacro(4),this.setChorusMacro(2),this.setDelayMacro(0),this.masterParameters.delayLock||(this.delayActive=!1),this.resetInsertion(),!(!this.drumPreset||!this.defaultPreset))for(let e=0;e<this.midiChannels.length;e++){let t=this.midiChannels[e];t.resetControllers(!1),t.resetPreset();for(let s=0;s<128;s++)this.midiChannels[e].lockedControllers[s]&&this.callEvent("controllerChange",{channel:e,controllerNumber:s,controllerValue:this.midiChannels[e].midiControllers[s]>>7});if(!this.midiChannels[e].lockedControllers[128+Ae.pitchWheel]){let s=this.midiChannels[e].midiControllers[128+Ae.pitchWheel];this.callEvent("pitchWheel",{channel:e,pitch:s,midiNote:-1})}if(!this.midiChannels[e].lockedControllers[128+Ae.channelPressure]){let s=this.midiChannels[e].midiControllers[128+Ae.channelPressure]>>7;this.callEvent("channelPressure",{channel:e,pressure:s})}}}process(A,e,t=0,s=0){this.processSplit([[A,e]],A,e,t,s)}processSplit(A,e,t,s=0,n=0){if(this.eventQueue.length>0){let i=this.currentTime;for(;this.eventQueue[0]?.time<=i;){let g=this.eventQueue.shift();g&&this.processMessageInternal(g.message,g.channelOffset)}}s=Math.max(s,0);let a=n||A[0][0].length-s;if(a>this.maxBufferSize)throw new Error(`Requested ${a} samples, but maxBufferSize is ${this.maxBufferSize}`);this.reverbInput.fill(0),this.chorusInput.fill(0),this.delayActive&&this.delayInput.fill(0),this.insertionActive&&(this.insertionInputL.fill(0),this.insertionInputR.fill(0));for(let i of this.midiChannels)i.clearVoiceCount();this.voiceCount=0;let r=this.masterParameters.voiceCap,o=A.length;for(let i=0;i<r;i++){let g=this.voices[i],c=this.midiChannels[g.channel];if(!g.isActive||c.isMuted)continue;let l=g.channel%o;c.renderVoice(g,this.currentTime,A[l][0],A[l][1],s,a),c.voiceCount++,this.voiceCount++}if(this.enableEffects){let{chorusInput:i,delayInput:g,reverbInput:c,insertionInputR:l,insertionInputL:B}=this;this.insertionActive&&this.insertionProcessor.process(B,l,e,t,c,i,g,s,a),this.chorusProcessor.process(i,e,t,c,g,s,a),this.delayActive&&this.masterParameters.midiSystem!=="xg"&&this.delayProcessor.process(g,e,t,c,s,a),this.reverbProcessor.process(c,e,t,s,a)}for(let i of this.midiChannels)i.updateVoiceCount();this.currentTime+=a*this.sampleTime}getVoicesForPreset(A,e,t){let s=this.getCachedVoice(A,e,t);if(s!==void 0)return s;let n=new Array;for(let a of A.getVoiceParameters(e,t)){let r=a.sample;if(a.sample.getAudioData()===void 0){se(`Discarding invalid sample: ${r.name}`);continue}n.push(new Ji(a,e,t,this.sampleRate))}return this.setCachedVoice(A,e,t,n),n}clearCache(){this.cachedVoices.clear()}getInsertionSnapshot(){return{type:this.insertionProcessor.type,params:this.insertionParams.slice(),channels:this.midiChannels.map(A=>A.insertionEnabled)}}callEvent(A,e){this.eventCallbackHandler(A,e)}resetInsertionParams(){this.insertionParams.fill(255),this.insertionParams[20]=40,this.insertionParams[21]=0,this.insertionParams[22]=0}resetInsertion(){this.masterParameters.insertionEffectLock||(this.insertionActive=!1,this.insertionProcessor=this.insertionFallback,this.insertionProcessor.reset(),this.insertionProcessor.sendLevelToReverb=40/127*yt,this.insertionProcessor.sendLevelToChorus=0,this.insertionProcessor.sendLevelToDelay=0,this.resetInsertionParams(),this.callEvent("effectChange",{effect:"insertion",parameter:0,value:this.insertionProcessor.type}))}setMIDIVolume(A){this.midiVolume=Math.pow(A,Math.E)}setMasterTuning(A){A=Math.round(A);for(let e of this.midiChannels)e.setCustomController(oe.masterTuning,A)}setReverbMacro(A){if(this.masterParameters.reverbLock)return;let e=this.reverbProcessor;switch(e.level=64,e.preDelayTime=0,e.character=A,A){case 0:e.character=0,e.preLowpass=3,e.time=80,e.delayFeedback=0,e.preDelayTime=0;break;case 1:e.preLowpass=4,e.time=56,e.delayFeedback=0;break;case 2:e.preLowpass=0,e.time=72,e.delayFeedback=0;break;case 3:e.preLowpass=4,e.time=72,e.delayFeedback=0;break;case 4:e.preLowpass=0,e.time=64,e.delayFeedback=0;break;case 5:e.preLowpass=0,e.time=88,e.delayFeedback=0;break;case 6:e.preLowpass=0,e.time=32,e.delayFeedback=40;break;case 7:e.preLowpass=0,e.time=64,e.delayFeedback=32;break;default:se(`Invalid reverb macro: ${A}`);return}this.callEvent("effectChange",{effect:"reverb",parameter:"macro",value:A})}setChorusMacro(A){if(this.masterParameters.chorusLock)return;let e=this.chorusProcessor;switch(e.level=64,e.preLowpass=0,e.delay=127,e.sendLevelToDelay=0,e.sendLevelToReverb=0,A){case 0:e.feedback=0,e.delay=112,e.rate=3,e.depth=5;break;case 1:e.feedback=5,e.delay=80,e.rate=9,e.depth=19;break;case 2:e.feedback=8,e.delay=80,e.rate=3,e.depth=19;break;case 3:e.feedback=16,e.delay=64,e.rate=9,e.depth=16;break;case 4:e.feedback=64,e.delay=127,e.rate=2,e.depth=24;break;case 5:e.feedback=112,e.delay=127,e.rate=1,e.depth=5;break;case 6:e.feedback=0,e.depth=127,e.rate=0,e.depth=127;break;case 7:e.feedback=80,e.depth=127,e.rate=0,e.depth=127;break;default:se(`Invalid chorus macro: ${A}`);return}this.callEvent("effectChange",{effect:"chorus",parameter:"macro",value:A})}setDelayMacro(A){if(this.masterParameters.delayLock)return;let e=this.delayProcessor;switch(e.level=64,e.preLowpass=0,e.sendLevelToReverb=0,e.levelRight=e.levelLeft=0,e.levelCenter=127,A){case 0:e.timeCenter=97,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=80;break;case 1:e.timeCenter=106,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=80;break;case 2:e.timeCenter=115,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=72;break;case 3:e.timeCenter=83,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=72;break;case 4:e.timeCenter=105,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=125,e.levelRight=60,e.feedback=74;break;case 5:e.timeCenter=109,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=125,e.levelRight=60,e.feedback=71;break;case 6:e.timeCenter=115,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=120,e.levelRight=64,e.feedback=73;break;case 7:e.timeCenter=93,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=120,e.levelRight=64,e.feedback=72;break;case 8:e.timeCenter=109,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=114,e.levelRight=60,e.feedback=61,e.sendLevelToReverb=36;break;case 9:e.timeCenter=110,e.timeRatioLeft=21,e.timeRatioRight=32,e.levelCenter=97,e.levelLeft=127,e.levelRight=67,e.feedback=40;break;default:se(`Invalid delay macro: ${A}`);return}this.callEvent("effectChange",{effect:"delay",parameter:"macro",value:A})}getCachedVoice(A,e,t){return this.cachedVoices.get(this.getCachedVoiceIndex(A,e,t))}setCachedVoice(A,e,t,s){this.cachedVoices.set(this.getCachedVoiceIndex(A,e,t),s)}registerInsertionProcessor(A){let e=new A(this.sampleRate,this.maxBufferSize);this.insertionEffects.set(e.type,e)}processMessageInternal(A,e){let t=Gs(A[0]),s=t.channel+e;switch(t.status){case M.noteOn:{let n=A[2];n>0?this.noteOn(s,A[1],n):this.noteOff(s,A[1]);break}case M.noteOff:this.noteOff(s,A[1]);break;case M.pitchWheel:this.pitchWheel(s,A[2]<<7|A[1]);break;case M.controllerChange:this.controllerChange(s,A[1],A[2]);break;case M.programChange:this.programChange(s,A[1]);break;case M.polyPressure:this.polyPressure(s,A[1],A[2]);break;case M.channelPressure:this.channelPressure(s,A[1]);break;case M.systemExclusive:this.systemExclusive(new _(A.slice(1)),e);break;case M.reset:this.stopAllChannels(!1),this.resetAllControllers();break;default:break}}assignVoicePriorities(){if(this.lastPriorityAssignmentTime===this.currentTime)return;y("%cPolyphony exceeded, stealing voices",C.warn),this.lastPriorityAssignmentTime=this.currentTime;let A=this.masterParameters.voiceCap;for(let e=0;e<A;e++){let t=this.voices[e];t.priority=0,this.midiChannels[t.channel].drumChannel&&(t.priority+=5),t.isInRelease&&(t.priority-=5),t.priority+=t.velocity/25,t.priority-=t.volEnv.state,t.isInRelease&&(t.priority-=5),t.priority-=t.volEnv.attenuationCb/200}}updatePresetList(){let A=this.soundBankManager.presetList;this.clearCache(),this.callEvent("presetListChange",A),this.getDefaultPresets();for(let e of this.midiChannels)e.setPresetLock(!1);this.resetAllControllers()}getDefaultPresets(){this.defaultPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!1},"xg"),this.drumPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!0},"gs")}getCachedVoiceIndex(A,e,t){let s=A.bankMSB,n=A.bankLSB,{isGMGSDrum:a,program:r}=A;return a&&(s=128,n=0),s+n*128+r*16384+2097152*e+268435456*t}},Ba=class{processorInitialized=qt.isInitialized;sampleRate;onEventCall;process;processSplit;systemExclusive;controllerChange;noteOn;noteOff;polyPressure;channelPressure;pitchWheel;programChange;processMessage;synthCore;savedSnapshot;constructor(A,e={}){let t=Fs(e,Bi);if(this.sampleRate=A,!Number.isFinite(t.initialTime)||!Number.isFinite(A))throw new TypeError(`Initial time or sample rate is invalid! initial time: ${t.initialTime}, sample rate: ${A}`);this.synthCore=new jr(this.callEvent.bind(this),this.missingPreset.bind(this),this.sampleRate,t);let s=this.synthCore;this.process=s.process.bind(s),this.processSplit=s.processSplit.bind(s),this.systemExclusive=s.systemExclusive.bind(s),this.controllerChange=s.controllerChange.bind(s),this.noteOn=s.noteOn.bind(s),this.noteOff=s.noteOff.bind(s),this.polyPressure=s.polyPressure.bind(s),this.channelPressure=s.channelPressure.bind(s),this.pitchWheel=s.pitchWheel.bind(s),this.programChange=s.programChange.bind(s),this.processMessage=s.processMessage.bind(s);for(let n=0;n<16;n++)this.synthCore.createMIDIChannel(!1);this.processorInitialized.then(()=>{y("%cSpessaSynth is ready!",C.recognized)})}get enableEffects(){return this.synthCore.enableEffects}set enableEffects(A){this.synthCore.enableEffects=A}get enableEventSystem(){return this.synthCore.enableEventSystem}set enableEventSystem(A){this.synthCore.enableEventSystem=A}get midiChannels(){return this.synthCore.midiChannels}get totalVoicesAmount(){return this.synthCore.voiceCount}get currentSynthTime(){return this.synthCore.currentTime}get reverbProcessor(){return this.synthCore.reverbProcessor}get chorusProcessor(){return this.synthCore.chorusProcessor}get delayProcessor(){return this.synthCore.delayProcessor}get soundBankManager(){return this.synthCore.soundBankManager}get keyModifierManager(){return this.synthCore.keyModifierManager}renderAudio(A,e,t,s=0,n=0){let a=this.synthCore.maxBufferSize;if(n>a){let r=0;for(;r<n;){let o=Math.min(a,n-r);this.synthCore.process(A[0],A[1],s+r,o),r+=o}}else this.synthCore.process(A[0],A[1],s,n)}renderAudioSplit(A,e,t,s=0,n=0){let a=this.synthCore.maxBufferSize;if(n>a){let r=0;for(;r<n;){let o=Math.min(a,n-r);this.synthCore.processSplit(t,A[0],A[1],s+r,o),r+=o}}else this.synthCore.processSplit(t,A[0],A[1],s,n)}onMissingPreset=(A,e)=>{se(`No preset found for ${IA.toMIDIString(A)}! Did you forget to add a sound bank?`)};setMasterParameter(A,e){this.synthCore.setMasterParameter(A,e)}getMasterParameter(A){return this.synthCore.getMasterParameter(A)}getAllMasterParameters(){return this.synthCore.getAllMasterParameters()}resetAllControllers(A="gs"){this.synthCore.resetAllControllers(A)}applySynthesizerSnapshot(A){this.savedSnapshot=A,A.apply(this),y("%cFinished applying snapshot!",C.info),this.resetAllControllers()}getSnapshot(){return Hs.create(this)}getInsertionSnapshot(){return this.synthCore.getInsertionSnapshot()}setEmbeddedSoundBank(A,e){let t=ht.fromArrayBuffer(A);this.synthCore.soundBankManager.addSoundBank(t,Bt,e);let s=this.synthCore.soundBankManager.priorityOrder;s.pop(),s.unshift(Bt),this.synthCore.soundBankManager.priorityOrder=s,this.savedSnapshot!==void 0&&this.applySynthesizerSnapshot(this.savedSnapshot),y(`%cEmbedded sound bank set at offset %c${e}`,C.recognized,C.value)}clearEmbeddedBank(){this.synthCore.soundBankManager.soundBankList.some(A=>A.id===Bt)&&this.synthCore.soundBankManager.deleteSoundBank(Bt)}createMIDIChannel(){this.synthCore.createMIDIChannel(!0)}stopAllChannels(A=!1){this.synthCore.stopAllChannels(A)}destroySynthProcessor(){this.synthCore.destroySynthProcessor()}killVoices(A){se(`killVoices is deprecated, don't use it! Amount requested: ${A}`)}clearCache(){this.synthCore.clearCache()}getVoicesForPreset(A,e,t){return this.synthCore.getVoicesForPreset(A,e,t)}callEvent(A,e){this.onEventCall?.({type:A,data:e})}missingPreset(A,e){return this.onMissingPreset(A,e)}};var Vt=mA.consoleColors;var Ea="spessasynth-worklet-processor";function da(A,e){return{...e,...A}}var Qa={skipToFirstNoteOn:!0,initialPlaybackRate:1};var Vs=class extends Ot{events=[];constructor(e){super(),super.copyFrom(e),this.events=[]}},Xt=class A extends NA{tracks;embeddedSoundBank=void 0;embeddedSoundBankSize;constructor(e){super(),super.copyMetadataFrom(e),this.tracks=e.tracks.map(t=>new Vs(t)),this.embeddedSoundBankSize=e instanceof A?e.embeddedSoundBankSize:e?.embeddedSoundBank?.byteLength}};var Zt={shuffleOn:1,shuffleOff:2,index:3};var fa=1,Wt=class{synthesizer;sequencers=new Array;post;lastSequencerSync=0;alive=!1;enableEventSystem;constructor(e,t,s){this.synthesizer=new Ba(e,t),this.enableEventSystem=t.enableEventSystem??!1,this.post=s,this.synthesizer.onEventCall=n=>{this.post({type:"eventCall",data:n,currentTime:this.synthesizer.currentSynthTime})}}createNewSequencer(){let e=new On(this.synthesizer),t=this.sequencers.length;this.sequencers.push(e),e.onEventCall=s=>{if(this.enableEventSystem){if(s.type==="songListChange"){let a=s.data.newSongList.map(r=>new Xt(r));this.post({type:"sequencerReturn",data:{type:s.type,data:{newSongList:a,shuffledSongIndexes:e.shuffledSongIndexes},id:t},currentTime:this.synthesizer.currentSynthTime});return}this.post({type:"sequencerReturn",data:{...s,id:t},currentTime:this.synthesizer.currentSynthTime})}}}postReady(e,t,s=[]){this.post({type:"isFullyInitialized",data:{type:e,data:t},currentTime:this.synthesizer.currentSynthTime},s)}postProgress(e,t){this.post({type:"renderingProgress",data:{type:e,data:t},currentTime:this.synthesizer.currentSynthTime})}destroy(){this.synthesizer.destroySynthProcessor(),delete this.synthesizer,delete this.sequencers}handleMessage(e){let t=e.channelNumber,s;if(t>=0&&(s=this.synthesizer.midiChannels[t],s===void 0)){mA.SpessaSynthWarn(`Trying to access channel ${t} which does not exist... ignoring!`);return}switch(e.type){case"midiMessage":{this.synthesizer.processMessage(e.data.messageData,e.data.channelOffset,e.data.options);break}case"customCcChange":{s?.setCustomController(e.data.ccNumber,e.data.ccValue);break}case"ccReset":{t===Ht?this.synthesizer.resetAllControllers():s?.resetControllers();break}case"stopAll":{t===Ht?this.synthesizer.stopAllChannels(e.data===1):s?.stopAllNotes(e.data===1);break}case"muteChannel":{s?.muteChannel(e.data);break}case"addNewChannel":{this.synthesizer.createMIDIChannel();break}case"setMasterParameter":{this.synthesizer.setMasterParameter(e.data.type,e.data.data);break}case"setDrums":{s?.setDrums(e.data);break}case"transposeChannel":{s?.transposeChannel(e.data.semitones,e.data.force);break}case"lockController":{if(e.data.controllerNumber===Ht)s?.setPresetLock(e.data.isLocked);else{if(!s)return;s.lockedControllers[e.data.controllerNumber]=e.data.isLocked}break}case"sequencerSpecific":{let n=this.sequencers[e.data.id];if(!n)return;let a=e.data;switch(a.type){default:break;case"loadNewSongList":{try{let o=a.data.map(i=>"duration"in i?NA.copyFrom(i):NA.fromArrayBuffer(i.binary,i.fileName));n.loadNewSongList(o)}catch(r){console.error(r),this.post({type:"sequencerReturn",data:{type:"midiError",data:r,id:e.data.id},currentTime:this.synthesizer.currentSynthTime})}break}case"pause":{n.pause();break}case"play":{n.play();break}case"setTime":{n.currentTime=a.data;break}case"changeMIDIMessageSending":{n.externalMIDIPlayback=a.data;break}case"setPlaybackRate":{n.playbackRate=a.data;break}case"setLoopCount":{n.loopCount=a.data;break}case"changeSong":{switch(a.data.changeType){case Zt.shuffleOff:{n.shuffleMode=!1;break}case Zt.shuffleOn:{n.shuffleMode=!0;break}case Zt.index:{a.data.data!==void 0&&(n.songIndex=a.data.data);break}}break}case"getMIDI":{if(!n.midiData)throw new Error("No MIDI is loaded!");this.post({type:"sequencerReturn",data:{type:"getMIDI",data:n.midiData,id:e.data.id},currentTime:this.synthesizer.currentSynthTime});break}case"setSkipToFirstNote":{n.skipToFirstNoteOn=a.data;break}}break}case"soundBankManager":{try{let n=this.synthesizer.soundBankManager,a=e.data,r;switch(a.type){case"addSoundBank":{r=ht.fromArrayBuffer(a.data.soundBankBuffer),n.addSoundBank(r,a.data.id,a.data.bankOffset),this.postReady("soundBankManager",null);break}case"deleteSoundBank":{n.deleteSoundBank(a.data),this.postReady("soundBankManager",null);break}case"rearrangeSoundBanks":n.priorityOrder=a.data,this.postReady("soundBankManager",null)}}catch(n){this.post({type:"soundBankError",data:n,currentTime:this.synthesizer.currentSynthTime})}break}case"keyModifierManager":{let n=e.data,a=this.synthesizer.keyModifierManager;switch(n.type){default:return;case"addMapping":{a.addMapping(n.data.channel,n.data.midiNote,n.data.mapping);break}case"clearMappings":{a.clearMappings();break}case"deleteMapping":a.deleteMapping(n.data.channel,n.data.midiNote)}break}case"requestSynthesizerSnapshot":{let n=Hs.create(this.synthesizer);this.postReady("synthesizerSnapshot",n);break}case"requestNewSequencer":{this.createNewSequencer();break}case"setLogLevel":{Gn(e.data.enableInfo,e.data.enableWarning,e.data.enableGroup);break}case"destroyWorklet":{this.alive=!1,this.synthesizer.destroySynthProcessor(),this.destroy();break}default:{mA.SpessaSynthWarn("Unrecognized event!",e);break}}}};var zt=class extends Wt{alive=!0;oneOutputMode;port;constructor(e,t,s,n){super(e,{enableEffects:!n.oneOutput,enableEventSystem:n?.enableEventSystem,initialTime:t},(a,r)=>{s.postMessage(a,r)}),this.port=s,this.oneOutputMode=n.oneOutput,this.synthesizer.processorInitialized.then(()=>{this.port.onmessage=a=>this.handleMessage(a.data),this.postReady("sf3Decoder",null)})}process(e,t){if(!this.alive)return!1;for(let n of this.sequencers)n.processTick();if(this.oneOutputMode){let n=t[0],a=[];for(let r=0;r<32;r+=2)a.push([n[r],n[r+1]]);this.synthesizer.enableEffects=!1,this.synthesizer.processSplit(a,n[0],n[0])}else this.synthesizer.processSplit(t.slice(1),t[0][0],t[0][1]);let s=this.synthesizer.currentSynthTime;if(this.enableEventSystem&&s-this.lastSequencerSync>fa){for(let n=0;n<this.sequencers.length;n++)this.post({type:"sequencerReturn",data:{type:"sync",data:this.sequencers[n].currentTime,id:n},currentTime:s});this.lastSequencerSync=s}return!0}handleMessage(e){if(e.type==="startOfflineRender"){this.startOfflineRender(e.data);return}super.handleMessage(e)}startOfflineRender(e){this.sequencers.length===0&&this.createNewSequencer();let t=this.sequencers[0];for(let[n,a]of e.soundBankList.entries())try{this.synthesizer.soundBankManager.addSoundBank(ht.fromArrayBuffer(a.soundBankBuffer),`bank-${n}`,a.bankOffset)}catch(r){this.post({type:"soundBankError",data:r,currentTime:this.synthesizer.currentSynthTime})}e.snapshot!==void 0&&this.synthesizer.applySynthesizerSnapshot(e.snapshot),mA.SpessaSynthInfo("%cRendering enabled! Starting render.",Vt.info),t.loopCount=e.loopCount,this.synthesizer.setMasterParameter("autoAllocateVoices",!0);let s=da(e.sequencerOptions,Qa);t.skipToFirstNoteOn=s.skipToFirstNoteOn,t.playbackRate=s.initialPlaybackRate;try{t.loadNewSongList([NA.copyFrom(e.midiSequence)]),t.play()}catch(n){console.error(n),this.post({type:"sequencerReturn",data:{type:"midiError",data:n,id:0},currentTime:this.synthesizer.currentSynthTime})}this.postReady("startOfflineRender",null)}};var Xs=class extends AudioWorkletProcessor{core;constructor(e){super(),this.core=new zt(sampleRate,currentTime,this.port,e.processorOptions)}process(e,t){return this.core.process(e,t)}};registerProcessor(Ea,Xs);mA.SpessaSynthInfo("%cProcessor successfully registered!",Vt.recognized);
20
20
  //# sourceMappingURL=spessasynth_processor.min.js.map