spessasynth_lib 4.2.10 → 4.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -17,5 +17,5 @@ Destination: ${this.destinationName}`}write(){let e=new $(12);te(e,this.source.s
17
17
  (${e})`,l.warn,l.value,l.unrecognized)}toSFDestination(){let e=this.shortScale;switch(this.destination){default:case L.none:return;case L.pan:return g.pan;case L.gain:return{gen:g.initialAttenuation,newAmount:-e};case L.pitch:return g.fineTune;case L.keyNum:return g.overridingRootKey;case L.volEnvDelay:return g.delayVolEnv;case L.volEnvAttack:return g.attackVolEnv;case L.volEnvHold:return g.holdVolEnv;case L.volEnvDecay:return g.decayVolEnv;case L.volEnvSustain:return{gen:g.sustainVolEnv,newAmount:1e3-e};case L.volEnvRelease:return g.releaseVolEnv;case L.modEnvDelay:return g.delayModEnv;case L.modEnvAttack:return g.attackModEnv;case L.modEnvHold:return g.holdModEnv;case L.modEnvDecay:return g.decayModEnv;case L.modEnvSustain:return{gen:g.sustainModEnv,newAmount:1e3-e};case L.modEnvRelease:return g.releaseModEnv;case L.filterCutoff:return g.initialFilterFc;case L.filterQ:return g.initialFilterQ;case L.chorusSend:return g.chorusEffectsSend;case L.reverbSend:return g.reverbEffectsSend;case L.modLfoFreq:return g.freqModLFO;case L.modLfoDelay:return g.delayModLFO;case L.vibLfoFreq:return g.freqVibLFO;case L.vibLfoDelay:return g.delayVibLFO}}},Ai=class Bn extends ct{connectionBlocks=new Array;mode="dls2";get length(){return this.connectionBlocks.length}copyFrom(e){this.mode=e.mode;for(let t of e.connectionBlocks)this.connectionBlocks.push(pt.copyFrom(t))}fromSFZone(e){this.mode="dls2";let t=new Bs;t.copyFrom(e);for(let s of t.generators){let n;switch(s.generatorType){default:continue;case g.keyNumToVolEnvDecay:{n=g.decayVolEnv;break}case g.keyNumToVolEnvHold:{n=g.holdVolEnv;break}case g.keyNumToModEnvDecay:{n=g.decayModEnv;break}case g.keyNumToModEnvHold:n=g.holdModEnv}let a=t.getGenerator(n,void 0),o=s.generatorValue*-128;if(a===void 0)continue;let i=60/128*o,r=a-i;t.setGenerator(s.generatorType,o,!1),t.setGenerator(n,r,!1)}for(let s of t.generators)pt.fromSFGenerator(s,this);for(let s of t.modulators)pt.fromSFModulator(s,this)}read(e){let t=LA(e,"lart"),s=LA(e,"lar2");if(t)for(this.mode="dls1";t.data.currentIndex<t.data.length;){let n=ge(t.data);Bn.verifyHeader(n,"art1","art2");let a=n.data,o=V(a,4);o!==8&&ne(`CbSize in articulation mismatch. Expected 8, got ${o}`);let i=V(a,4);for(let r=0;r<i;r++)this.connectionBlocks.push(pt.read(a))}else if(s)for(this.mode="dls2";s.data.currentIndex<s.data.length;){let n=ge(s.data);Bn.verifyHeader(n,"art2","art1");let a=n.data,o=V(a,4);o!==8&&ne(`CbSize in articulation mismatch. Expected 8, got ${o}`);let i=V(a,4);for(let r=0;r<i;r++)this.connectionBlocks.push(pt.read(a))}}write(){let e=new $(8);de(e,8),de(e,this.connectionBlocks.length);let t=this.connectionBlocks.map(n=>n.write()),s=Ze(this.mode==="dls2"?"art2":"art1",[e,...t]);return Qe(this.mode==="dls2"?"lar2":"lart",s,!1,!0)}toSFZone(e){let t=(s,n,a,o)=>{let i=s/-128;if(e.setGenerator(n,i),i<=120){let r=Math.round(.46875*s),h=this.connectionBlocks.find(c=>c.isStaticParameter&&c.destination===o);h&&e.setGenerator(a,r+h.shortScale)}};for(let s of this.connectionBlocks){let n=s.shortScale,a=s.source.source,o=s.control.source,i=s.destination;if(s.isStaticParameter){s.toSFGenerator(e);continue}if(o===Z.none)if(a===Z.keyNum){if(i===L.pitch){e.setGenerator(g.scaleTuning,n/128);continue}if(i===L.modEnvHold||i===L.modEnvDecay||i===L.volEnvHold||i===L.volEnvDecay)continue}else{let r=s.toCombinedSFDestination();if(r){e.setGenerator(r,n);continue}}s.toSFModulator(e)}for(let s of this.connectionBlocks){if(s.source.source!==Z.keyNum)continue;let n=s.shortScale;switch(s.destination){default:case L.volEnvHold:{t(n,g.keyNumToVolEnvHold,g.holdVolEnv,L.volEnvHold);break}case L.volEnvDecay:{t(n,g.keyNumToVolEnvDecay,g.decayVolEnv,L.volEnvDecay);break}case L.modEnvHold:{t(n,g.keyNumToModEnvHold,g.holdModEnv,L.modEnvHold);break}case L.modEnvDecay:{t(n,g.keyNumToModEnvDecay,g.decayModEnv,L.modEnvDecay);break}}}if(this.mode==="dls1"){e.setGenerator(g.delayVibLFO,e.getGenerator(g.delayModLFO,null)),e.setGenerator(g.freqVibLFO,e.getGenerator(g.freqModLFO,null)),e.setGenerator(g.vibLfoToPitch,e.getGenerator(g.modLfoToPitch,null)),e.setGenerator(g.modLfoToPitch,null);for(let s of e.modulators)s.destination===g.modLfoToPitch&&(s.destination=g.vibLfoToPitch)}}},Vs=class $t{channel=1;tableIndex;fusOptions=0;phaseGroup=0;constructor(e){this.tableIndex=e}static copyFrom(e){let t=new $t(e.tableIndex);return t.channel=e.channel,t.phaseGroup=e.phaseGroup,t.fusOptions=e.fusOptions,t}static read(e){let t=V(e.data,2),s=V(e.data,2),n=V(e.data,4),a=V(e.data,4),o=new $t(a);return o.channel=n,o.fusOptions=t,o.phaseGroup=s,o}static fromSFZone(e,t){let s=e.indexOf(t.sample);if(s===-1)throw new Error(`Wave link error: Sample ${t.sample.name} does not exist in the sample list.`);let n=new $t(s);switch(t.sample.sampleType){default:case xe.leftSample:case xe.monoSample:{n.channel=Math.trunc(1);break}case xe.rightSample:n.channel=2}return n}write(){let e=new $(12);return te(e,this.fusOptions),te(e,this.phaseGroup),de(e,this.channel),de(e,this.tableIndex),Qe("wlnk",e)}},jt=class nt extends ct{articulation=new Ai;keyRange={min:0,max:127};velRange={min:0,max:127};keyGroup=0;fusOptions=0;usLayer=0;waveSample;waveLink;constructor(e,t){super(),this.waveSample=t,this.waveLink=e}static copyFrom(e){let t=new nt(Vs.copyFrom(e.waveLink),rt.copyFrom(e.waveSample));return t.keyGroup=e.keyGroup,t.keyRange={...e.keyRange},t.velRange={...e.velRange},t.usLayer=e.usLayer,t.fusOptions=e.fusOptions,t.articulation.copyFrom(e.articulation),t}static read(e,t){let s=this.verifyAndReadList(t,"rgn ","rgn2"),n=s.find(y=>y.header==="wsmp"),a=n?rt.read(n):void 0,o=s.find(y=>y.header==="wlnk");if(!o){ne("Invalid DLS region: missing 'wlnk' chunk! Discarding...");return}let i=Vs.read(o),r=s.find(y=>y.header==="rgnh");if(!r){ne("Invalid DLS region: missing 'rgnh' chunk! Discarding...");return}let h=e[i.tableIndex];h||nt.parsingError(`Invalid sample index: ${i.tableIndex}. Samples available: ${e.length}`),a??=h.waveSample;let c=new nt(i,a),I=V(r.data,2),E=V(r.data,2),B=V(r.data,2),d=V(r.data,2);return B===0&&d===0&&(d=127,B=0),c.keyRange.max=E,c.keyRange.min=I,c.velRange.max=d,c.velRange.min=B,c.fusOptions=V(r.data,2),c.keyGroup=V(r.data,2),r.data.length-r.data.currentIndex>=2&&(c.usLayer=V(r.data,2)),c.articulation.read(s),c}static fromSFZone(e,t){let s=rt.fromSFZone(e),n=Vs.fromSFZone(t,e),a=new nt(n,s);return a.keyRange.min=Math.max(e.keyRange.min,0),a.keyRange.max=e.keyRange.max,a.velRange.min=Math.max(e.velRange.min,0),a.velRange.max=e.velRange.max,a.keyGroup=e.getGenerator(g.exclusiveClass,0),a.articulation.fromSFZone(e),a}write(){let e=[this.writeHeader(),this.waveSample.write(),this.waveLink.write(),this.articulation.write()];return Ze("rgn2",e,!0)}toSFZone(e,t){let s=t[this.waveLink.tableIndex];s||nt.parsingError(`Invalid sample index: ${this.waveLink.tableIndex}`);let n=e.createZone(s);return n.keyRange=this.keyRange,n.velRange=this.velRange,this.keyRange.max===127&&this.keyRange.min===0&&(n.keyRange.min=-1),this.velRange.max===127&&this.velRange.min===0&&(n.velRange.min=-1),this.keyGroup!==0&&n.setGenerator(g.exclusiveClass,this.keyGroup),this.waveSample.toSFZone(n,s),this.articulation.toSFZone(n),n.generators=n.generators.filter(a=>a.generatorValue!==hA[a.generatorType].def),n}writeHeader(){let e=new $(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),Qe("rgnh",e)}},Xs=class es extends ct{articulation=new Ai;regions=new Array;name="Unnamed";bankLSB=0;bankMSB=0;isGMGSDrum=!1;program=0;static copyFrom(e){let t=new es;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(jt.copyFrom(s));return t}static read(e,t){let s=this.verifyAndReadList(t,"ins "),n=s.find(E=>E.header==="insh");if(!n)throw j(),new Error("No instrument header!");let a="",o=LA(s,"INFO");if(o){let E=ge(o.data);for(;E.header!=="INAM";)E=ge(o.data);a=pe(E.data,E.data.length).trim()}a.length===0&&(a="Unnamed Instrument");let i=new es;i.name=a;let r=V(n.data,4),h=V(n.data,4),c=V(n.data,4);i.program=c&127,i.bankMSB=h>>>8&127,i.bankLSB=h&127,i.isGMGSDrum=h>>>31>0,Xe(`%cParsing %c"${a}"%c...`,l.info,l.recognized,l.info);let I=LA(s,"lrgn");if(!I)throw j(),new Error("No region list!");i.articulation.read(s);for(let E=0;E<r;E++){let B=ge(I.data);this.verifyHeader(B,"LIST");let d=pe(B.data,4);d!=="rgn "&&d!=="rgn2"&&(j(),this.parsingError(`Invalid DLS region! Expected "rgn " or "rgn2" got "${d}"`));let y=jt.read(e,B);y&&i.regions.push(y)}return j(),i}static fromSFPreset(e,t){let s=new es;s.name=e.name,s.bankLSB=e.bankLSB,s.bankMSB=e.bankMSB,s.program=e.program,s.isGMGSDrum=e.isGMGSDrum,tA(`%cConverting %c${e.toString()}%c to DLS...`,l.info,l.value,l.info);let n=e.toFlattenedInstrument();for(let a of n.zones)s.regions.push(jt.fromSFZone(a,t));return j(),s}write(){Xe(`%cWriting %c${this.name}%c...`,l.info,l.recognized,l.info);let e=[this.writeHeader()],t=this.regions.map(n=>n.write());e.push(Ze("lrgn",t,!0)),this.articulation.length>0&&e.push(this.articulation.write());let s=Qe("INAM",fA(this.name,!0));return e.push(Qe("INFO",s,!1,!0)),j(),Ze("ins ",e,!0)}toSFPreset(e){let t=new vt(e);t.name=this.name,t.bankMSB=this.bankMSB,t.bankLSB=this.bankLSB,t.isGMGSDrum=this.isGMGSDrum,t.program=this.program;let s=new Rt;s.name=this.name,t.createZone(s),this.articulation.toSFZone(s.globalZone);for(let n of this.regions)n.toSFZone(s,e.samples);s.globalize(),s.globalZone.modulators.some(n=>n.destination===g.reverbEffectsSend)||s.globalZone.addModulators(Fe.copyFrom(ja)),s.globalZone.modulators.some(n=>n.destination===g.chorusEffectsSend)||s.globalZone.addModulators(Fe.copyFrom(ei)),s.globalZone.generators=s.globalZone.generators.filter(n=>n.generatorValue!==hA[n.generatorType].def),e.addPresets(t),e.addInstruments(s)}writeHeader(){let e=new $(12);de(e,this.regions.length);let t=(this.bankMSB&127)<<8|this.bankLSB&127;return this.isGMGSDrum&&(t|=1<<31),de(e,t),de(e,this.program&127),Qe("insh",e)}},ti={progressFunction:void 0},si=class dn extends ct{samples=new Array;instruments=new Array;soundBankInfo={name:"Unnamed",creationDate:new Date,software:"SpessaSynth",soundEngine:"DLS Level 2.2",version:{major:2,minor:4}};static read(e){if(!e)throw new Error("No data provided!");let t=new $(e);tA("%cParsing DLS file...",l.info);let s=ge(t,!1);this.verifyHeader(s,"RIFF"),this.verifyText(pe(t,4).toLowerCase(),"dls ");let n=[];for(;t.currentIndex<t.length;)n.push(ge(t));let a=new dn;a.soundBankInfo.name="Unnamed DLS",a.soundBankInfo.product="SpessaSynth DLS",a.soundBankInfo.comment="(no description)";let o=LA(n,"INFO");if(o)for(;o.data.currentIndex<o.data.length;){let d=ge(o.data),y=d.header,D=pe(d.data,d.size);switch(y){case"INAM":{a.soundBankInfo.name=D;break}case"ICRD":{a.soundBankInfo.creationDate=bn(D);break}case"ICMT":{a.soundBankInfo.comment=D;break}case"ISBJ":{a.soundBankInfo.subject=D;break}case"ICOP":{a.soundBankInfo.copyright=D;break}case"IENG":{a.soundBankInfo.engineer=D;break}case"IPRD":{a.soundBankInfo.product=D;break}case"ISFT":a.soundBankInfo.software=D}}this.printInfo(a);let i=n.find(d=>d.header==="colh");if(!i)return this.parsingError("No colh chunk!"),5;let r=V(i.data,4);k(`%cInstruments amount: %c${r}`,l.info,l.recognized);let h=LA(n,"wvpl");if(!h)return this.parsingError("No wvpl chunk!"),5;let c=this.verifyAndReadList(h,"wvpl");for(let d of c)a.samples.push(ia.read(d));let I=LA(n,"lins");if(!I)return this.parsingError("No lins chunk!"),5;let E=this.verifyAndReadList(I,"lins");Xe("%cLoading instruments...",l.info),E.length!==r&&ne(`Colh reported invalid amount of instruments. Detected ${E.length}, expected ${r}`);for(let d of E)a.instruments.push(Xs.read(a.samples,d));j();let B=n.find(d=>d.header==="pgal");if(B){k("%cFound the instrument aliasing chunk!",l.recognized);let d=B.data;(d[0]!==0||d[1]!==1||d[2]!==2||d[3]!==3)&&(d.currentIndex+=4);let y=a.instruments.find(M=>Re.isXGDrums(M.bankMSB)||M.isGMGSDrum);if(!y)return ne("MobileBAE aliasing chunk without a drum preset. Aborting!"),a;let D=d.slice(d.currentIndex,d.currentIndex+128);d.currentIndex+=128;for(let M=0;M<128;M++){let F=D[M];if(F===M)continue;let w=y.regions.find(P=>P.keyRange.max===F&&P.keyRange.min===F);if(!w){ne(`Invalid drum alias ${M} to ${F}: region does not exist.`);continue}let S=jt.copyFrom(w);S.keyRange.max=M,S.keyRange.min=M,y.regions.push(S)}for(d.currentIndex+=4;d.currentIndex<d.length;){let M=V(d,2),F=M&127,w=M>>7&127,S=d[d.currentIndex++],P=d[d.currentIndex++];P!==0&&ne(`Invalid alias byte. Expected 0, got ${P}`);let C=V(d,2),x=C&127,J=C>>7&127,Y=d[d.currentIndex++];P=d[d.currentIndex++],P!==0&&ne(`Invalid alias header. Expected 0, got ${P}`);let T=a.instruments.find(q=>q.bankLSB===x&&q.bankMSB===J&&q.program===Y&&!q.isGMGSDrum);if(!T){ne(`Invalid alias. Missing instrument: ${x}:${J}:${Y}`);continue}let U=Xs.copyFrom(T);U.bankMSB=w,U.bankLSB=F,U.program=S,a.instruments.push(U)}}return k(`%cParsing finished! %c"${a.soundBankInfo.name||"UNNAMED"}"%c has %c${a.instruments.length}%c instruments and %c${a.samples.length}%c samples.`,l.info,l.recognized,l.info,l.recognized,l.info,l.recognized,l.info),j(),a}static fromSF(e){Xe("%cSaving SF2 to DLS level 2...",l.info);let t=new dn;t.soundBankInfo={...e.soundBankInfo},t.soundBankInfo.comment=(t.soundBankInfo.comment??"(No description)")+`
18
18
  Converted from SF2 to DLS with SpessaSynth`;for(let s of e.samples)t.samples.push(ia.fromSFSample(s));for(let s of e.presets)t.instruments.push(Xs.fromSFPreset(s,e.samples));return k("%cConversion complete!",l.recognized),j(),t}static printInfo(e){for(let[t,s]of Object.entries(e.soundBankInfo)){if(typeof s=="object"&&"major"in s){let n=s;k(`%c${t}: %c"${n.major}.${n.minor}"`,l.info,l.recognized)}k(`%c${t}: %c${s.toLocaleString()}`,l.info,l.recognized)}}async write(e=ti){Xe("%cSaving DLS...",l.info);let t=new $(4);de(t,this.instruments.length);let s=Qe("colh",t);Xe("%cWriting instruments...",l.info);let n=Ze("lins",this.instruments.map(D=>D.write()),!0);k("%cSuccess!",l.recognized),j(),Xe("%cWriting WAVE samples...",l.info);let a=0,o=[],i=[],r=0;for(let D of this.samples){let M=D.write();await e?.progressFunction?.(D.name,r,this.samples.length),o.push(a),a+=M.length,i.push(M),r++}let h=Ze("wvpl",i,!0);k("%cSucceeded!",l.recognized);let c=new $(8+4*o.length);de(c,8),de(c,o.length);for(let D of o)de(c,D);let I=Qe("ptbl",c);this.soundBankInfo.software="SpessaSynth";let E=[],B=(D,M)=>{E.push(Qe(D,fA(M,!0)))};for(let[D,M]of Object.entries(this.soundBankInfo)){let F=D,w=M;if(w)switch(F){case"name":{B("INAM",w);break}case"comment":{B("ICMT",w);break}case"copyright":{B("ICOP",w);break}case"creationDate":{B("ICRD",wn(w));break}case"engineer":{B("IENG",w);break}case"product":{B("IPRD",w);break}case"romVersion":case"version":case"soundEngine":case"romInfo":break;case"software":{B("ISFT",w);break}case"subject":B("ISBJ",w)}}let d=Ze("INFO",E,!0);k("%cCombining everything...");let y=Ze("RIFF",[fA("DLS "),s,n,I,h,d]);return k("%cSaved successfully!",l.recognized),j(),y.buffer}toSF(){tA("%cConverting DLS to SF2...",l.info);let e=new ni;e.soundBankInfo.version.minor=4,e.soundBankInfo.version.major=2,e.soundBankInfo={...this.soundBankInfo},e.soundBankInfo.comment=(e.soundBankInfo.comment??"(No description)")+`
19
19
  Converted from DLS to SF2 with SpessaSynth`;for(let t of this.samples)t.toSFSample(e);for(let t of this.instruments)t.toSFPreset(e);return e.flush(),k("%cConversion complete!",l.recognized),j(),e}},ni=class As{static isSF3DecoderReady=Es.isInitialized;soundBankInfo={name:"Unnamed",creationDate:new Date,software:"SpessaSynth",soundEngine:"E-mu 10K2",version:{major:2,minor:4}};presets=[];samples=[];instruments=[];defaultModulators=Za.map(Fe.copyFrom.bind(Fe));customDefaultModulators=!1;_isXGBank=!1;get isXGBank(){return this._isXGBank}static mergeSoundBanks(...e){let t=e.shift();if(!t)throw new Error("No sound banks provided!");let s=t.presets;for(;e.length>0;){let a=e?.shift()?.presets;if(a)for(let o of a)s.some(i=>o.matches(i))||s.push(o)}let n=new As;return n.addCompletePresets(s),n.soundBankInfo={...t.soundBankInfo},n}static async getSampleSoundBankFile(){let e=new As,t=new Float32Array(128);for(let i=0;i<128;i++)t[i]=i/128*2-1;let s=new qr;s.name="Saw",s.originalKey=65,s.pitchCorrection=20,s.loopEnd=127,s.setAudioData(t,44100),e.addSamples(s);let n=new Rt;n.name="Saw Wave",n.globalZone.addGenerators(new Ye(g.initialAttenuation,375),new Ye(g.releaseVolEnv,-1e3),new Ye(g.sampleModes,1)),n.createZone(s),n.createZone(s).setGenerator(g.fineTune,-9),e.addInstruments(n);let o=new vt(e);return o.name="Saw Wave",o.createZone(n),e.addPresets(o),e.soundBankInfo.name="Dummy",e.flush(),await e.writeSF2()}static copyFrom(e){let t=new As;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=ti){return si.fromSF(this).write(e)}async writeSF2(e=ln){return _r(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 ds(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 Rt;s.name=e.name,s.globalZone.copyFrom(e.globalZone);for(let n of e.zones)s.createZone(this.cloneSample(n.sample)).copyFrom(n);return this.addInstruments(s),s}clonePreset(e){let t=this.presets.find(n=>n.name===e.name);if(t)return t;let s=new vt(this);s.name=e.name,s.bankMSB=e.bankMSB,s.bankLSB=e.bankLSB,s.isGMGSDrum=e.isGMGSDrum,s.program=e.program,s.library=e.library,s.genre=e.genre,s.morphology=e.morphology,s.globalZone.copyFrom(e.globalZone);for(let n of e.zones)s.createZone(this.cloneInstrument(n.instrument)).copyFrom(n);return this.addPresets(s),s}flush(){this.presets.sort(CA.sorter.bind(CA)),this.parseInternal()}trimSoundBank(e){let t=(n,a)=>{let o=0;for(let i=0;i<n.zones.length;i++){let r=n.zones[i],h=r.keyRange,c=r.velRange,I=!1;for(let E of a)if(E.key>=h.min&&E.key<=h.max&&E.velocity>=c.min&&E.velocity<=c.max){I=!0;break}!I&&r.sample&&(k(`%c${r.sample.name}%c removed from %c${n.name}%c.`,l.recognized,l.info,l.recognized,l.info),n.deleteZone(i)&&(o++,i--,k(`%c${r.sample.name}%c deleted`,l.recognized,l.info)),r.sample.useCount<1&&this.deleteSample(r.sample))}return o};tA("%cTrimming sound bank...",l.info);let s=e.getUsedProgramsAndKeys(this);Xe("%cModifying sound bank...",l.info),k("Detected keys for midi:",s);for(let n=0;n<this.presets.length;n++){let a=this.presets[n],o=s.get(a);if(o===void 0)k(`%cDeleting preset %c${a.name}%c and its zones`,l.info,l.recognized,l.info),this.deletePreset(a),n--;else{let i=[...o].map(h=>{let c=h.split("-");return{key:Number.parseInt(c[0]),velocity:Number.parseInt(c[1])}});Xe(`%cTrimming %c${a.name}`,l.info,l.recognized),k(`Keys for ${a.name}:`,i);let r=0;for(let h=0;h<a.zones.length;h++){let c=a.zones[h],I=c.keyRange,E=c.velRange,B=!1;for(let d of i)if(d.key>=I.min&&d.key<=I.max&&d.velocity>=E.min&&d.velocity<=E.max&&c.instrument){B=!0;let y=t(c.instrument,i);k(`%cTrimmed off %c${y}%c zones from %c${c.instrument.name}`,l.info,l.recognized,l.info,l.recognized);break}!B&&c.instrument&&(r++,a.deleteZone(h),c.instrument.useCount<1&&this.deleteInstrument(c.instrument),h--)}k(`%cTrimmed off %c${r}%c zones from %c${a.name}`,l.info,l.recognized,l.info,l.recognized),j()}}this.removeUnusedElements(),k("%cSound bank modified!",l.recognized),j(),j()}removeUnusedElements(){this.instruments=this.instruments.filter(e=>{e.deleteUnusedZones();let t=e.useCount<1;return t&&e.delete(),!t}),this.samples=this.samples.filter(e=>{let t=e.useCount<1;return t&&e.unlinkSample(),!t})}deleteInstrument(e){e.delete(),this.instruments.splice(this.instruments.indexOf(e),1)}deletePreset(e){e.delete(),this.presets.splice(this.presets.indexOf(e),1)}deleteSample(e){e.unlinkSample(),this.samples.splice(this.samples.indexOf(e),1)}getPreset(e,t){return $a(this.presets,e,t)}destroySoundBank(){this.presets.length=0,this.instruments.length=0,this.samples.length=0}parsingError(e){throw new Error(`SF parsing error: ${e} The file may be corrupted.`)}parseInternal(){this._isXGBank=!1;let e=new Set([0,1,2,3,4,5,6,7,8,9,16,17,24,25,26,27,28,29,30,31,32,33,40,41,48,56,57,58,64,65,66,126,127]);for(let t of this.presets)if(Re.isXGDrums(t.bankMSB)&&(this._isXGBank=!0,!e.has(t.program))){this._isXGBank=!1,k(`%cThis bank is not valid XG. Preset %c${t.toString()}%c is not a valid XG drum. XG mode will use presets on bank 128.`,l.info,l.value,l.info);break}}printInfo(){for(let[e,t]of Object.entries(this.soundBankInfo)){if(typeof t=="object"&&"major"in t){let s=t;k(`%c${e}: %c"${s.major}.${s.minor}"`,l.info,l.recognized)}k(`%c${e}: %c${t.toLocaleString()}`,l.info,l.recognized)}}},to=class extends Ye{constructor(A){let e=A.currentIndex,t=A[e+1]<<8|A[e],s=Qn(A[e+2],A[e+3]);A.currentIndex+=4,super(t,s,!1)}};function ra(A){let e=[];for(;A.data.length>A.data.currentIndex;)e.push(new to(A.data));return e.pop(),e}function so(A,e,t,s,n){let a=A.gen,o=A.mod,i=0,r=0;for(let h of n)for(let c=0;c<h.zonesCount;c++){let I=a[r++],E=a[r],B=e.slice(I,E),d=o[i++],y=o[i],D=t.slice(d,y);B.some(M=>M.generatorType===g.instrument)?h.createSoundFontZone(D,B,s):(h.globalZone.addGenerators(...B),h.globalZone.addModulators(...D))}}var no=class extends vt{zoneStartIndex;zonesCount=0;constructor(A,e){super(e),this.name=pe(A.data,20).replace(/\d{3}:\d{3}/,""),this.program=V(A.data,2);let t=V(A.data,2);this.bankMSB=t&127,this.isGMGSDrum=(t&128)>0,this.bankLSB=t>>8,this.zoneStartIndex=V(A.data,2),this.library=V(A.data,4),this.genre=V(A.data,4),this.morphology=V(A.data,4)}createSoundFontZone(A,e,t){let s=e.find(o=>o.generatorType===g.instrument),n;if(s)n=t[s.generatorValue];else throw new Error("No instrument ID found in preset zone.");if(!n)throw new Error(`Invalid instrument ID: ${s.generatorValue}, available instruments: ${t.length}`);let a=new _a(this,n);return a.addGenerators(...e),a.addModulators(...A),this.zones.push(a),a}};function oa(A,e){let t=[];for(;A.data.length>A.data.currentIndex;){let s=new no(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 ao=class extends Rt{zoneStartIndex;zonesCount=0;constructor(A){super(),this.name=pe(A.data,20),this.zoneStartIndex=V(A.data,2)}createSoundFontZone(A,e,t){let s=e.find(o=>o.generatorType===g.sampleID),n;if(s)n=t[s.generatorValue];else throw new Error("No sample ID found in instrument zone.");if(!n)throw new Error(`Invalid sample ID: ${s.generatorValue}, available samples: ${t.length}`);let a=new za(this,n);return a.addGenerators(...e),a.addModulators(...A),this.zones.push(a),a}};function ha(A){let e=[];for(;A.data.length>A.data.currentIndex;){let t=new ao(A);if(e.length>0){let s=e[e.length-1];s.zonesCount=t.zoneStartIndex-s.zoneStartIndex}e.push(t)}return e.pop(),e}function Zs(A){let e=[];for(;A.data.length>A.data.currentIndex;){let t=A.data,s=V(t,2),n=V(t,2),a=Qn(t[t.currentIndex++],t[t.currentIndex++]),o=V(t,2),i=V(t,2);e.push(new we(s,o,n,a,i))}return e.pop(),e}function io(A,e,t,s,n){let a=A.gen,o=A.mod,i=0,r=0;for(let h of n)for(let c=0;c<h.zonesCount;c++){let I=a[r++],E=a[r],B=e.slice(I,E),d=o[i++],y=o[i],D=t.slice(d,y);B.some(M=>M.generatorType===g.sampleID)?h.createSoundFontZone(D,B,s):(h.globalZone.addGenerators(...B),h.globalZone.addModulators(...D))}}function Xt(A){let e=[],t=[];for(;A.data.length>A.data.currentIndex;)t.push(V(A.data,2)),e.push(V(A.data,2));return{mod:e,gen:t}}var ro=class extends ni{sampleDataStartIndex=0;constructor(A,e=!0){if(super(),e)throw new Error("Using the constructor directly is deprecated. Use SoundBankLoader.fromArrayBuffer() instead.");let t=new $(A);tA("%cParsing a SoundFont2 file...",l.info),t||(j(),this.parsingError("No data provided!"));let s=ge(t,!1);this.verifyHeader(s,"riff");let n=pe(t,4).toLowerCase();if(n!=="sfbk"&&n!=="sfpk")throw j(),new SyntaxError(`Invalid soundFont! Expected "sfbk" or "sfpk" got "${n}"`);let a=n==="sfpk",o=ge(t);this.verifyHeader(o,"list");let i=pe(o.data,4);if(i!=="INFO")throw j(),new SyntaxError(`Invalid soundFont! Expected "INFO" or "${i}"`);let r;for(;o.data.length>o.data.currentIndex;){let O=ge(o.data),b=cA(O.data,O.data.length),G=O.header;switch(G){case"ifil":case"iver":{let K=V(O.data,2),ee=V(O.data,2);G==="ifil"?this.soundBankInfo.version={major:K,minor:ee}:this.soundBankInfo.romVersion={major:K,minor:ee};break}case"DMOD":{this.defaultModulators=Zs(O),this.customDefaultModulators=!0;break}case"LIST":{pe(O.data,4)==="xdta"&&(k("%cExtended SF2 found!",l.recognized),r=O);break}case"ICRD":{this.soundBankInfo.creationDate=bn(pe(O.data,O.data.length));break}case"ISFT":{this.soundBankInfo.software=b;break}case"IPRD":{this.soundBankInfo.product=b;break}case"IENG":{this.soundBankInfo.engineer=b;break}case"ICOP":{this.soundBankInfo.copyright=b;break}case"INAM":{this.soundBankInfo.name=b;break}case"ICMT":{this.soundBankInfo.comment=b;break}case"irom":{this.soundBankInfo.romInfo=b;break}case"isng":this.soundBankInfo.soundEngine=b}}this.printInfo();let h={};r!==void 0&&(h.phdr=ge(r.data),h.pbag=ge(r.data),h.pmod=ge(r.data),h.pgen=ge(r.data),h.inst=ge(r.data),h.ibag=ge(r.data),h.imod=ge(r.data),h.igen=ge(r.data),h.shdr=ge(r.data));let c=ge(t,!1);this.verifyHeader(c,"list"),this.verifyText(pe(t,4),"sdta"),k("%cVerifying smpl chunk...",l.warn);let I=ge(t,!1);this.verifyHeader(I,"smpl");let E;if(a){k("%cSF2Pack detected, attempting to decode the smpl chunk...",l.info);try{E=Es.decode(t.buffer.slice(t.currentIndex,t.currentIndex+c.size-12)).data[0]}catch(O){throw j(),new Error(`SF2Pack Ogg Vorbis decode error: ${O}`)}k(`%cDecoded the smpl chunk! Length: %c${E.length}`,l.info,l.value)}else E=t,this.sampleDataStartIndex=t.currentIndex;k(`%cSkipping sample chunk, length: %c${c.size-12}`,l.info,l.value),t.currentIndex+=c.size-12,k("%cLoading preset data chunk...",l.warn);let B=ge(t);this.verifyHeader(B,"list"),pe(B.data,4);let d=ge(B.data);this.verifyHeader(d,"phdr");let y=ge(B.data);this.verifyHeader(y,"pbag");let D=ge(B.data);this.verifyHeader(D,"pmod");let M=ge(B.data);this.verifyHeader(M,"pgen");let F=ge(B.data);this.verifyHeader(F,"inst");let w=ge(B.data);this.verifyHeader(w,"ibag");let S=ge(B.data);this.verifyHeader(S,"imod");let P=ge(B.data);this.verifyHeader(P,"igen");let C=ge(B.data);this.verifyHeader(C,"shdr"),k("%cParsing samples...",l.info),t.currentIndex=this.sampleDataStartIndex;let x=sa(C,E,r===void 0);if(r&&h.shdr){let O=sa(h.shdr,new Float32Array(1),!1);if(O.length===x.length)for(let[b,G]of x.entries())G.name+=O[b].name,G.linkedSampleIndex|=O[b].linkedSampleIndex<<16}for(let O of x)O.name=O.name.trim();this.samples.push(...x);let J=ra(P),Y=Zs(S),T=ha(F);if(r&&h.inst){let O=ha(h.inst);if(O.length===T.length){for(let[b,G]of T.entries())G.name+=O[b].name,G.zoneStartIndex|=O[b].zoneStartIndex<<16;for(let[b,G]of T.entries())b<T.length-1&&(G.zonesCount=T[b+1].zoneStartIndex-G.zoneStartIndex)}}for(let O of T)O.name=O.name.trim();this.instruments.push(...T);let U=Xt(w);if(r&&h.ibag){let O=Xt(h.ibag);for(let b=0;b<U.mod.length;b++)U.mod[b]|=O.mod[b]<<16;for(let b=0;b<U.gen.length;b++)U.gen[b]|=O.gen[b]<<16}io(U,J,Y,this.samples,T);let q=ra(M),m=Zs(D),v=oa(d,this);if(r&&h.phdr){let O=oa(h.phdr,this);if(O.length===v.length){for(let[b,G]of v.entries())G.name+=O[b].name,G.zoneStartIndex|=O[b].zoneStartIndex<<16;for(let[b,G]of v.entries())b<v.length-1&&(G.zonesCount=v[b+1].zoneStartIndex-G.zoneStartIndex)}}for(let O of v)O.name=O.name.trim();this.addPresets(...v);let H=Xt(y);if(r&&h.pbag){let O=Xt(h.pbag);for(let b=0;b<H.mod.length;b++)H.mod[b]|=O.mod[b]<<16;for(let b=0;b<H.gen.length;b++)H.gen[b]|=O.gen[b]<<16}so(H,q,m,this.instruments,v),this.flush(),k(`%cParsing finished! %c"${this.soundBankInfo.name}"%c has %c${this.presets.length}%c presets,
20
- %c${this.instruments.length}%c instruments and %c${this.samples.length}%c samples.`,l.info,l.recognized,l.info,l.recognized,l.info,l.recognized,l.info,l.recognized,l.info),j()}verifyHeader(A,e){A.header.toLowerCase()!==e.toLowerCase()&&(j(),this.parsingError(`Invalid chunk header! Expected "${e.toLowerCase()}" got "${A.header.toLowerCase()}"`))}verifyText(A,e){A.toLowerCase()!==e.toLowerCase()&&(j(),this.parsingError(`Invalid FourCC: Expected "${e.toLowerCase()}" got "${A.toLowerCase()}"\``))}},Ft=class{static fromArrayBuffer(A){let e=A.slice(8,12),t=new $(e);return pe(t,4).toLowerCase()==="dls "?this.loadDLS(A):new ro(A,!1)}static loadDLS(A){return si.read(A).toSF()}},os=class ai extends Fe{isEffectModulator;isDefaultResonantModulator;isModWheelModulator;constructor(e,t,s,n,a,o,i,r){super(e,t,s,n,a),this.isEffectModulator=o,this.isDefaultResonantModulator=i,this.isModWheelModulator=r}static fromData(e,t,s,n,a){let o=e.toSourceEnum(),i=t.toSourceEnum(),r=(o===219||o===221)&&i===0&&(s===g.reverbEffectsSend||s===g.chorusEffectsSend),h=o===Xa&&i===0&&s===g.initialFilterQ,c=(e.isCC&&e.index===u.modulationWheel||t.isCC&&t.index===u.modulationWheel)&&(s===g.modLfoToPitch||s===g.vibLfoToPitch);return new ai(e,t,s,n,a,r,h,c)}static fromModulator(e){return this.fromData(e.primarySource,e.secondarySource,e.destination,e.transformAmount,e.transformType)}},oo=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(os.fromModulator.bind(os)),this.generators=a,this.rootKey=n.originalKey,a[g.overridingRootKey]>-1&&(this.rootKey=a[g.overridingRootKey]),this.targetKey=e,a[g.keyNum]>-1&&(this.targetKey=a[g.keyNum]),this.velocity=t,a[g.velocity]>-1&&(this.velocity=a[g.velocity]),this.exclusiveClass=a[g.exclusiveClass],this.loopStart=n.loopStart,this.loopEnd=n.loopEnd,this.sampleData=n.getAudioData(),this.playbackStep=n.sampleRate/s*Math.pow(2,n.pitchCorrection/1200),this.loopingMode=a[g.sampleModes]}},ho=Math.PI*2;function go(A,e,t){if(t<A)return 0;let s=t-A;return Math.sin(ho*e*s)}var ga=Math.PI/2,ts=-500,ii=500,Ln=ii-ts,ri=new Float32Array(Ln+1),oi=new Float32Array(Ln+1);for(let A=ts;A<=ii;A++){let e=(A-ts)/Ln,t=A-ts;ri[t]=Math.cos(ga*e),oi[t]=Math.sin(ga*e)}function co(A,e,t,s,n,a){if(!A.isInRelease&&e>=A.releaseStartTime&&(A.isInRelease=!0,A.volEnv.startRelease(A),A.modEnv.startRelease(A),A.loopingMode===3&&(A.wavetable.isLooping=!1)),A.hasRendered=!0,!A.isActive)return;let o=this.synthCore,i=o.sampleRate,r=A.modulatedGenerators,h=A.targetKey,c=A.pitchOffset+r[g.fineTune]+this.octaveTuning[A.midiNote]+this.channelTuningCents,I=r[g.coarseTune],E=o.tunings[this.preset.program*128+A.realKey];if(E!==-1&&(h=Math.trunc(E),c+=(E-h)*100),A.portamentoFromKey>-1){let m=Math.min((e-A.startTime)/A.portamentoDuration,1),v=h-A.portamentoFromKey;I-=v*(1-m)}c+=(h-A.rootKey)*r[g.scaleTuning];let B=0,d=0,y=A.gainModifier*(1+r[g.amplitude]/1e3);if(e>=A.vibLfoStartTime){let m=r[g.vibLfoToPitch],v=r[g.vibLfoToFilterFc],H=r[g.vibLfoAmplitudeDepth];if(m!==0||v!==0||H!==0){let b=Math.max(0,rn(r[g.freqVibLFO])+r[g.vibLfoRate]/100)*a/i,G=1-4*Math.abs(A.vibLfoPhase-.5);(A.vibLfoPhase+=b)>=1&&(A.vibLfoPhase-=1),c+=G*m,B+=G*v,y*=1-(G+1)/2*(H/1e3)}}if(e>=A.modLfoStartTime){let m=r[g.modLfoToPitch],v=r[g.modLfoToVolume],H=r[g.modLfoToFilterFc],O=r[g.modLfoAmplitudeDepth];if(m!==0||H!==0||v!==0||O!==0){let G=Math.max(0,rn(r[g.freqModLFO])+r[g.modLfoRate]/100)*a/i,K=1-4*Math.abs(A.modLfoPhase-.5);(A.modLfoPhase+=G)>=1&&(A.modLfoPhase-=1),c+=K*m,d+=-K*v,B+=K*H,y*=1-(K+1)/2*(O/1e3)}}this.midiControllers[u.modulationWheel]===0&&this.channelVibrato.depth>0&&(c+=go(A.startTime+this.channelVibrato.delay,this.channelVibrato.rate,e)*this.channelVibrato.depth);let D=r[g.modEnvToPitch],M=r[g.modEnvToFilterFc];if(M!==0||D!==0){let m=A.modEnv.process(A,e);B+=m*M,c+=m*D}d-=A.resonanceOffset;let F=c+I*100|0;F!==A.tuningCents&&(A.tuningCents=F,A.tuningRatio=Math.pow(2,F/1200));let w=is(r[g.initialAttenuation])*is(d),S=o.voiceBuffer;if(A.loopingMode===2&&!A.isInRelease){A.isActive=A.volEnv.process(a,S,w);return}A.isActive=A.wavetable.process(a,A.tuningRatio,S);{let m=A.filter,v=r[g.initialFilterFc];m.initialized?m.currentInitialFc+=(v-m.currentInitialFc)*Gn.smoothingConstant:(m.initialized=!0,m.currentInitialFc=v);let H=m.currentInitialFc+B,O=r[g.initialFilterQ];if(m.currentInitialFc>13499&&H>13499&&O===0)m.currentInitialFc=13500;else{(Math.abs(m.lastTargetCutoff-H)>1||m.resonanceCb!==O)&&(m.lastTargetCutoff=H,m.resonanceCb=O,m.calculateCoefficients(H));let{a0:b,a1:G,a2:K,a3:ee,a4:ie}=m,{x1:Ee,x2:oe,y1:le,y2:re}=m;for(let Ie=0;Ie<a;Ie++){let ke=S[Ie],_=b*ke+G*Ee+K*oe-ee*le-re*ie;oe=Ee,Ee=ke,re=le,le=_,S[Ie]=_}m.x1=Ee,m.x2=oe,m.y1=le,m.y2=re}}let P=A.volEnv.process(a,S,w);A.isActive=A.isActive&&P;let C;A.overridePan?C=A.overridePan:(A.currentPan+=(r[g.pan]-A.currentPan)*o.panSmoothingFactor,C=A.currentPan);let x=o.masterParameters.masterGain*o.midiVolume*y,J=C+500|0,Y=ri[J]*x*o.panLeft,T=oi[J]*x*o.panRight;if(this.insertionEnabled){let m=o.insertionInputL,v=o.insertionInputR;for(let H=0;H<a;H++){let O=S[H];m[H]+=Y*O,v[H]+=T*O}return}for(let m=0;m<a;m++){let v=S[m],H=m+n;t[H]+=Y*v,s[H]+=T*v}if(!o.enableEffects)return;let U=r[g.reverbEffectsSend]*A.reverbSend;if(U>0){let m=o.masterParameters.reverbGain*x*(U/1e3),v=o.reverbInput;for(let H=0;H<a;H++)v[H]+=m*S[H]}let q=r[g.chorusEffectsSend]*A.chorusSend;if(q>0){let m=o.masterParameters.chorusGain*(q/1e3)*x,v=o.chorusInput;for(let H=0;H<a;H++)v[H]+=m*S[H]}if(o.delayActive){let m=this.midiControllers[u.variationDepth]*A.delaySend;if(m>0){let v=x*o.masterParameters.delayGain*((m>>7)/127),H=o.delayInput;for(let O=0;O<a;O++)H[O]+=v*S[O]}}}var MA={pitchWheelRange:0,fineTuning:1,coarseTuning:2,modulationDepth:5,resetParameters:16383},Ve={partParameter:1,drumPitch:24,drumPitchFine:25,drumLevel:26,drumPan:28,drumReverb:29,drumChorus:30,drumDelay:31,awe32:127,SF2:120},GA={vibratoRate:8,vibratoDepth:9,vibratoDelay:10,TVFFilterCutoff:32,TVFFilterResonance:33,EGAttackTime:99,EGDecayTime:100,EGReleaseTime:102},He=(A,e,t,s)=>{s.length>0&&(s=" "+s),k(`%c${e} for %c${A}%c is now set to %c${t}%c${s}.`,l.info,l.recognized,l.info,l.value,l.info)},Ws=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 Io(A){switch(this.midiControllers[u.dataEntryMSB]=A<<7,this.dataEntryState){default:case _e.Idle:break;case _e.NRPCoarse:case _e.NRPFine:{let e=this.midiControllers[u.nonRegisteredParameterMSB]>>7,t=this.midiControllers[u.nonRegisteredParameterLSB]>>7,s=this.midiControllers[u.dataEntryLSB]>>7;if(this.synthCore.masterParameters.drumLock&&e>=Ve.drumPitch&&e<=Ve.drumDelay)return;switch(e){default:{if(A===64)return;k(`%cUnrecognized NRPN for %c${this.channel}%c: %c(0x${t.toString(16).toUpperCase()} 0x${t.toString(16).toUpperCase()})%c data value: %c${A}`,l.warn,l.recognized,l.warn,l.unrecognized,l.warn,l.value);break}case Ve.partParameter:{let n=this.synthCore.masterParameters.nprnParamLock,a=this.synthCore.masterParameters.customVibratoLock||n;switch(t){default:{if(A===64)return;k(`%cUnrecognized NRPN for %c${this.channel}%c: %c(0x${e.toString(16)} 0x${t.toString(16)})%c data value: %c${A}`,l.warn,l.recognized,l.warn,l.unrecognized,l.warn,l.value);break}case GA.vibratoRate:{if(this.sysExModulators.active){this.controllerChange(u.vibratoRate,A);return}if(a||A===64)return;Ws(this),this.channelVibrato.rate=A/64*8,He(this.channel,"Vibrato rate",`${A} = ${this.channelVibrato.rate}`,"Hz");break}case GA.vibratoDepth:{if(a||A===64)return;Ws(this),this.channelVibrato.depth=A/2,He(this.channel,"Vibrato depth",`${A} = ${this.channelVibrato.depth}`,"cents of detune");break}case GA.vibratoDelay:{if(a||A===64)return;Ws(this),this.channelVibrato.delay=A/64/3,He(this.channel,"Vibrato delay",`${A} = ${this.channelVibrato.delay}`,"seconds");break}case GA.TVFFilterCutoff:{if(n)return;this.controllerChange(u.brightness,A),He(this.channel,"Filter cutoff",A.toString(),"");break}case GA.TVFFilterResonance:{if(n)return;this.controllerChange(u.filterResonance,A),He(this.channel,"Filter resonance",A.toString(),"");break}case GA.EGAttackTime:{if(n)return;this.controllerChange(u.attackTime,A),He(this.channel,"EG attack time",A.toString(),"");break}case GA.EGDecayTime:{if(n)return;this.controllerChange(u.decayTime,A),He(this.channel,"EG decay time",A.toString(),"");break}case GA.EGReleaseTime:{if(n)return;this.controllerChange(u.releaseTime,A),He(this.channel,"EG release time",A.toString(),"");break}}break}case Ve.drumPitch:{let n=this.channelSystem==="xg"||this.patch.bankLSB===1?(A-64)*100:(A-64)*50;this.drumParams[t].pitch=n,He(this.channel,`Drum ${t} pitch`,n,"cents");break}case Ve.drumPitchFine:{let n=A-64;this.drumParams[t].pitch+=n,He(this.channel,`Drum ${t} pitch fine`,this.drumParams[t].pitch,"cents");break}case Ve.drumLevel:{this.drumParams[t].gain=A/120,He(this.channel,`Drum ${t} level`,A,"");break}case Ve.drumPan:{this.drumParams[t].pan=A,He(this.channel,`Drum ${t} pan`,A,"");break}case Ve.drumReverb:{this.drumParams[t].reverbGain=A/127,He(this.channel,`Drum ${t} reverb level`,A,"");break}case Ve.drumChorus:{this.drumParams[t].chorusGain=A/127,He(this.channel,`Drum ${t} chorus level`,A,"");break}case Ve.drumDelay:{this.drumParams[t].delayGain=A/127,He(this.channel,`Drum ${t} delay level`,A,"");break}case Ve.awe32:break;case Ve.SF2:{if(t>100)break;let n=this.customControllers[Ce.sf2NPRNGeneratorLSB],a=(A<<7|s)-8192;this.setGeneratorOffset(n,a);break}}break}case _e.RPCoarse:case _e.RPFine:{let e=this.midiControllers[u.registeredParameterMSB]|this.midiControllers[u.registeredParameterLSB]>>7;switch(e){default:{k(`%cUnrecognized RPN for %c${this.channel}%c: %c(0x${e.toString(16)})%c data value: %c${A}`,l.warn,l.recognized,l.warn,l.unrecognized,l.warn,l.value);break}case MA.pitchWheelRange:{this.midiControllers[ve+Ae.pitchWheelRange]=A<<7,He(this.channel,"Pitch wheel range",A.toString(),"semitones");break}case MA.coarseTuning:{let t=A-64;this.setCustomController(Ce.channelTuningSemitones,t),He(this.channel,"Coarse tuning",t.toString(),"semitones");break}case MA.fineTuning:{this.setTuning(A-64,!1);break}case MA.modulationDepth:{this.setModulationDepth(A*100);break}case MA.resetParameters:{this.resetParameters();break}}}}}var lo=[g.delayModLFO,g.freqModLFO,g.delayVibLFO,g.freqVibLFO,g.delayModEnv,g.attackModEnv,g.holdModEnv,g.decayModEnv,g.sustainModEnv,g.releaseModEnv,g.delayVolEnv,g.attackVolEnv,g.holdVolEnv,g.decayVolEnv,g.sustainVolEnv,g.releaseVolEnv,g.fineTune,g.modLfoToPitch,g.vibLfoToPitch,g.modEnvToPitch,g.modLfoToVolume,g.initialFilterFc,g.initialFilterQ,g.modLfoToFilterFc,g.modEnvToFilterFc,g.chorusEffectsSend,g.reverbEffectsSend],kA=(A,e,t)=>Math.max(e,Math.min(t,A)),Zt=A=>Math.max(-32768,1200*Math.log2(A/1e3)),Co=A=>6900+1200*Math.log2(A/440);function Eo(A,e,t){let s=t<<7|e;s-=8192;let n=lo[A];n||ne(`Invalid AWE32 LSB: %c${A}`,l.unrecognized);let a,o,i,r;switch(n){default:break;case g.delayModLFO:case g.delayVibLFO:case g.delayVolEnv:case g.delayModEnv:{a=4*kA(s,0,5900),this.setGeneratorOverride(n,Zt(a));break}case g.attackVolEnv:case g.attackModEnv:{a=kA(s,0,5940),this.setGeneratorOverride(n,Zt(a));break}case g.holdVolEnv:case g.holdModEnv:{a=kA(s,0,8191),this.setGeneratorOverride(n,Zt(a));break}case g.decayModEnv:case g.decayVolEnv:case g.releaseVolEnv:case g.releaseModEnv:{a=4*kA(s,0,5940),this.setGeneratorOverride(n,Zt(a));break}case g.freqVibLFO:case g.freqModLFO:{o=.084*e,this.setGeneratorOverride(n,Co(o),!0);break}case g.sustainVolEnv:case g.sustainModEnv:{i=e*7.5,this.setGeneratorOverride(n,i);break}case g.fineTune:{this.setGeneratorOverride(n,s,!0);break}case g.modLfoToPitch:case g.vibLfoToPitch:{r=kA(s,-127,127)*9.375,this.setGeneratorOverride(n,r,!0);break}case g.modEnvToPitch:{r=kA(s,-127,127)*9.375,this.setGeneratorOverride(n,r);break}case g.modLfoToVolume:{i=1.875*e,this.setGeneratorOverride(n,i,!0);break}case g.initialFilterFc:{let h=4335+59*e;this.setGeneratorOverride(n,h,!0);break}case g.initialFilterQ:{i=215*(e/127),this.setGeneratorOverride(n,i,!0);break}case g.modLfoToFilterFc:{r=kA(s,-64,63)*56.25,this.setGeneratorOverride(n,r,!0);break}case g.modEnvToFilterFc:{r=kA(s,-64,63)*56.25,this.setGeneratorOverride(n,r);break}case g.chorusEffectsSend:case g.reverbEffectsSend:{this.setGeneratorOverride(n,kA(s,0,255)*(1e3/255));break}}}function Bo(A){switch(this.midiControllers[u.dataEntryLSB]=A<<7,this.dataEntryState){default:break;case _e.RPCoarse:case _e.RPFine:{switch(this.midiControllers[u.registeredParameterMSB]|this.midiControllers[u.registeredParameterLSB]>>7){default:break;case MA.pitchWheelRange:{if(A===0)break;this.midiControllers[ve+Ae.pitchWheelRange]|=A;let t=(this.midiControllers[ve+Ae.pitchWheelRange]>>7)+A/128;k(`%cChannel ${this.channel} pitch wheel range. Semitones: %c${t}`,l.info,l.value);break}case MA.fineTuning:{let s=this.customControllers[Ce.channelTuning]<<7|A;this.setTuning(s*.01220703125);break}case MA.modulationDepth:{let s=this.customControllers[Ce.modulationMultiplier]*50+A/128*100;this.setModulationDepth(s);break}case 16383:{this.resetParameters();break}}break}case _e.NRPFine:{let e=this.midiControllers[u.nonRegisteredParameterMSB]>>7,t=this.midiControllers[u.nonRegisteredParameterLSB]>>7;if(e===Ve.SF2)return;e===Ve.awe32?Eo.call(this,t,A,this.midiControllers[u.dataEntryMSB]>>7):k(`%cUnrecognized NRPN LSB for %c${this.channel}%c: %c(0x${t.toString(16).toUpperCase()} 0x${t.toString(16).toUpperCase()})%c data value: %c${A}`,l.warn,l.recognized,l.warn,l.unrecognized,l.warn,l.value)}}}function Qo(A,e,t=!0){if(A>127)throw new Error("Invalid MIDI Controller.");if(A>=u.modulationWheelLSB&&A<=u.effectControl2LSB&&A!==u.dataEntryLSB){let s=A-32;if(this.lockedControllers[s])return;this.midiControllers[s]=this.midiControllers[s]&16256|e&127,this.computeModulatorsAll(1,s)}if(!this.lockedControllers[A]){switch(this.midiControllers[A]=e<<7,A){case u.omniModeOff:case u.omniModeOn:case u.allNotesOff:{this.stopAllNotes();break}case u.allSoundOff:{this.stopAllNotes(!0);break}case u.polyModeOn:{this.stopAllNotes(!0),this.polyMode=!0;break}case u.monoModeOn:{this.stopAllNotes(!0),this.polyMode=!1;break}case u.bankSelect:{this.setBankMSB(e),this.channel%16===bA&&Re.isSystemXG(this.channelSystem)&&this.setBankMSB(127);break}case u.bankSelectLSB:{this.setBankLSB(e);break}case u.variationDepth:{this.synthCore.delayActive=!0;break}case u.registeredParameterLSB:{this.dataEntryState=_e.RPFine;break}case u.registeredParameterMSB:{this.dataEntryState=_e.RPCoarse;break}case u.nonRegisteredParameterMSB:{this.customControllers[Ce.sf2NPRNGeneratorLSB]=0,this.dataEntryState=_e.NRPCoarse;break}case u.nonRegisteredParameterLSB:{if(this.midiControllers[u.nonRegisteredParameterMSB]>>7===Ve.SF2)switch(this.customControllers[Ce.sf2NPRNGeneratorLSB]%100!==0&&(this.customControllers[Ce.sf2NPRNGeneratorLSB]=0),e){case 100:{this.customControllers[Ce.sf2NPRNGeneratorLSB]+=100;break}case 101:{this.customControllers[Ce.sf2NPRNGeneratorLSB]+=1e3;break}case 102:{this.customControllers[Ce.sf2NPRNGeneratorLSB]+=1e4;break}default:e<100&&(this.customControllers[Ce.sf2NPRNGeneratorLSB]+=e)}this.dataEntryState=_e.NRPFine;break}case u.dataEntryMSB:{this.dataEntryCoarse(e);break}case u.dataEntryLSB:{this.dataEntryFine(e);break}case u.resetAllControllers:{this.resetControllersRP15Compliant();break}case u.sustainPedal:{if(e<64){let s=0;if(this.voiceCount>0){for(let n of this.synthCore.voices)if(n.channel===this.channel&&n.isActive&&n.isHeld&&(n.isHeld=!1,n.releaseVoice(this.synthCore.currentTime),++s>=this.voiceCount))break}}break}default:{this.computeModulatorsAll(1,A);break}}t&&this.synthCore.callEvent("controllerChange",{channel:this.channel,controllerNumber:A,controllerValue:e})}}var fo=40;function uo(A){if(A<1)return 0;{let e=[1,2,4,8,16,32,64,80,96,112,120,124],t=[1,.5,.25,.125,.0625,.03125,.0625,.0625,.0625,.125,.25,1/3],s=[-.16653127382501215,.11863875218299408,.029479047361245264,-.005442312089231738,.1451520875973037,-.005056281449558275,-.005095486882876532,.03334009551111544,-.09361368678020432,.14132569702451822,-.15805565301011382,-.09918856955881927],n=[.028212773333433472,-.3388502064992847,-.15839529890929713,-.12398131766775483,-.2874848552685111,.012254866302537692,.005957797193345771,-.03745899330347374,.12911781869810196,-.15867193224162568,.504406322732748,.3786845131875458],a=[.7218950861255283,.5574536226347168,.47133893237025826,.48597095327079914,.44336276333518854,.6076986311801551,.30851975971827794,.30514889345633955,.3302511933827384,.153822885219165,.1302280559047337,.49865530675491687],o=[-2.2218487496163566,-1.6382721639824072,-1.3010299956639813,-.958607314841775,-.6020599913279624,-.3010299956639812,.31386722036915343,.6232492903979004,.9242792860618817,1.290034611362518,1.4265112613645752,1.9030899869919435],i=[2,4,8,16,32,64,80,96,112,120,124],r=-1;for(let c=i.length-1;c>=0;c--)if(i[c]<A){r=c;break}r+=1;let h=(A-e[r])*t[r];return Math.exp(2.302585092994046*(((s[r]*h+n[r])*h+a[r])*h+o[r]))/fo}}function mo(A,e){return uo(A)*e}var Wt=(A,e,t)=>Math.max(e,Math.min(t,A));function po(A,e){if(e<1){this.noteOff(A);return}if(e=Math.min(127,e),this.synthCore.masterParameters.blackMIDIMode&&this.synthCore.voiceCount>200&&e<40||this.synthCore.masterParameters.blackMIDIMode&&e<10||this._isMuted||!this.preset)return;let t=A+this.keyShift+this.customControllers[Ce.channelKeyShift],s=t;if(t>127||t<0)return;let n=this.preset.program,a=this.synthCore.tunings[n*128+t];a>=0&&(s=Math.trunc(a)),this.synthCore.masterParameters.monophonicRetriggerMode&&this.killNote(A);let o=this.synthCore.keyModifierManager.getVelocity(this.channel,t);o>-1&&(e=o);let i=this.synthCore.keyModifierManager.getGain(this.channel,t),r=-1,h=0,c=this.midiControllers[u.portamentoTime]>>7,I=this.midiControllers[u.portamentoControl]>>7;if(!this.drumChannel&&I!==s&&this.midiControllers[u.portamentoOnOff]>=8192&&c>0){if(I>0){let w=Math.abs(s-I);h=mo(c,w),r=I}this.controllerChange(u.portamentoControl,s)}if(!this.polyMode){let w=0;if(this.voiceCount>0){for(let S of this.synthCore.voices)if(S.isActive&&S.channel===this.channel&&(S.exclusiveRelease(this.synthCore.currentTime,0),++w>=this.voiceCount))break}}let E=this.synthCore.getVoices(this.channel,s,e),B=0,d=0,y=0,D=1,M=1,F=1;if(this.randomPan&&(B=Math.round(Math.random()*1e3-500)),this.drumChannel){let w=this.drumParams[s];if(!w.rxNoteOn)return;let S=w.pan;if(S!==64){let P=Math.max(-63,Math.min(S-64+((this.midiControllers[u.pan]>>7)-64),63))||1;B=S===0?Math.round(Math.random()*1e3-500):P/63*500}y=w.pitch,d=w.exclusiveClass,D=w.reverbGain,M=w.chorusGain,F=w.delayGain,i===1&&(i=w.gain)}for(let w of E){let S=this.synthCore.assignVoice(),P=this.synthCore.currentTime;if(S.setup(P,this.channel,s,e,t),S.wavetable=S.oscillators[this.synthCore.masterParameters.interpolationType],S.generators.set(w.generators),S.exclusiveClass=d||w.exclusiveClass,S.rootKey=w.rootKey,S.loopingMode=w.loopingMode,S.wavetable.sampleData=w.sampleData,S.wavetable.playbackStep=w.playbackStep,S.targetKey=w.targetKey,this.sysExModulators.active){S.modulators=[...w.modulators];for(let U of this.sysExModulators.modulatorList){let q=S.modulators.findIndex(m=>Fe.isIdentical(m,U.mod));q===-1?S.modulators.push(U.mod):S.modulators[q]=U.mod}}else S.modulators=w.modulators;if(S.modulators.length>S.modulatorValues.length&&(ne(`${S.modulators.length} modulators! Increasing modulatorValues table.`),S.modulatorValues=new Int16Array(S.modulators.length)),this.generatorOverridesEnabled)for(let[U,q]of this.generatorOverrides.entries())q!==Fa&&(S.generators[U]=q);if(S.exclusiveClass!==0&&this.polyMode){let U=0;if(this.voiceCount>0){for(let q of this.synthCore.voices)if(q.isActive&&q.channel===this.channel&&q.exclusiveClass===S.exclusiveClass&&q.hasRendered&&(q.exclusiveRelease(this.synthCore.currentTime),++U>=this.voiceCount))break}}this.computeModulators(S),S.volEnv.init(S),S.modEnv.init(S),S.filter.init(),S.vibLfoStartTime=P+ns(S.modulatedGenerators[g.delayVibLFO]),S.modLfoStartTime=P+ns(S.modulatedGenerators[g.delayModLFO]);let C=S.modulatedGenerators[g.startAddrsOffset]+S.modulatedGenerators[g.startAddrsCoarseOffset]*32768,x=S.modulatedGenerators[g.endAddrOffset]+S.modulatedGenerators[g.endAddrsCoarseOffset]*32768,J=S.modulatedGenerators[g.startloopAddrsOffset]+S.modulatedGenerators[g.startloopAddrsCoarseOffset]*32768,Y=S.modulatedGenerators[g.endloopAddrsOffset]+S.modulatedGenerators[g.endloopAddrsCoarseOffset]*32768,T=w.sampleData.length-1;if(S.wavetable.cursor=Wt(C,0,T),S.wavetable.end=Wt(T+x,0,T),S.wavetable.loopStart=Wt(w.loopStart+J,0,T),S.wavetable.loopEnd=Wt(w.loopEnd+Y,0,T),S.wavetable.loopEnd<S.wavetable.loopStart){let U=S.wavetable.loopStart;S.wavetable.loopStart=S.wavetable.loopEnd,S.wavetable.loopEnd=U}S.wavetable.loopEnd-S.wavetable.loopStart<1&&(S.loopingMode===1||S.loopingMode===3)&&(S.loopingMode=0),S.wavetable.loopLength=S.wavetable.loopEnd-S.wavetable.loopStart,S.wavetable.isLooping=S.loopingMode===1||S.loopingMode===3,S.portamentoFromKey=r,S.portamentoDuration=h,S.overridePan=B,S.gainModifier=i,S.pitchOffset=y,S.reverbSend=D,S.chorusSend=M,S.delaySend=F,S.currentPan=Math.max(-500,Math.min(500,B||S.modulatedGenerators[g.pan]))}this.voiceCount+=E.length,this.sendChannelProperty(),this.synthCore.callEvent("noteOn",{midiNote:A,channel:this.channel,velocity:e})}function yo(A){if(A>127||A<0){ne("Received a noteOn for note",A,"Ignoring.");return}let e=A+this.keyShift+this.customControllers[Ce.channelKeyShift];if(this.synthCore.masterParameters.blackMIDIMode&&!this.drumChannel||this.drumChannel&&this.drumParams[e].rxNoteOff){this.killNote(e),this.synthCore.callEvent("noteOff",{midiNote:A,channel:this.channel});return}let t=this.midiControllers[u.sustainPedal]>=8192,s=0;if(this.voiceCount>0){for(let n of this.synthCore.voices)if(n.channel===this.channel&&n.isActive&&n.realKey===e&&!n.isInRelease&&(t?n.isHeld=!0:n.releaseVoice(this.synthCore.currentTime),++s>=this.voiceCount))break}this.synthCore.callEvent("noteOff",{midiNote:A,channel:this.channel})}function So(A){if(this.lockPreset)return;this.patch.program=A;let e=this.synthCore.soundBankManager.getPreset(this.patch,this.channelSystem);!e&&(e=this.synthCore.missingPresetHandler(this.patch,this.channelSystem),!e)||(this.preset=e,e.isAnyDrums!==this.drumChannel&&this.setDrumFlag(e.isAnyDrums),this.resetDrumParams(),this.synthCore.callEvent("programChange",{channel:this.channel,bankLSB:this.preset.bankLSB,bankMSB:this.preset.bankMSB,program:this.preset.program,isGMGSDrum:this.preset.isGMGSDrum}),this.sendChannelProperty())}function AA(A,e,t,s){k(`%cChannel %c${A}%c ${t} is now set to %c${e} ${s}.`,l.info,l.recognized,l.info,l.value)}function qe(A,e){k(`%cUnrecognized %c${e} %cSysEx: %c${cs(A)}`,l.warn,l.recognized,l.warn,l.unrecognized)}var ko=[os.fromModulator(new we(oA(me.linear,!0,!1,!0,u.vibratoRate),0,g.vibLfoRate,1e3,0))],Do=class{modulatorList=[];active=!1;channelNumber;constructor(A){this.channelNumber=A}resetModulators(){this.modulatorList=ko.map(A=>({mod:A,id:this.getModulatorID(A.primarySource.toSourceEnum(),A.destination,A.primarySource.isBipolar,A.primarySource.isNegative)})),this.active=!1}setupReceiver(A,e,t,s,n=!1){this.active=!0;let a=e-64,o=a/64,i=e/127;switch(A&15){case 0:{this.setModulator(t,g.fineTune,a*100,n),AA(this.channelNumber,a,`${s} pitch control`,"semitones");break}case 1:{this.setModulator(t,g.initialFilterFc,o*9600,n),AA(this.channelNumber,o*9600,`${s} filter control`,"cents");break}case 2:{this.setModulator(t,g.amplitude,o*1e3,n),AA(this.channelNumber,o*100,`${s} amplitude`,"%");break}case 3:{this.setModulator(t,g.vibLfoRate,o*1e3,n),AA(this.channelNumber,o*10,`${s} LFO1 rate`,"Hz");break}case 4:{this.setModulator(t,g.vibLfoToPitch,i*600,n),AA(this.channelNumber,i*600,`${s} LFO1 pitch depth`,"cents");break}case 5:{this.setModulator(t,g.vibLfoToFilterFc,i*2400,n),AA(this.channelNumber,i*2400,`${s} LFO1 filter depth`,"cents");break}case 6:{this.setModulator(t,g.vibLfoAmplitudeDepth,i*1e3,n),AA(this.channelNumber,i*100,`${s} LFO1 amplitude depth`,"%");break}case 7:{this.setModulator(t,g.modLfoRate,o*1e3,n),AA(this.channelNumber,o*10,`${s} LFO2 rate`,"Hz");break}case 8:{this.setModulator(t,g.modLfoToPitch,i*600,n),AA(this.channelNumber,i*600,`${s} LFO2 pitch depth`,"cents");break}case 9:{this.setModulator(t,g.modLfoToFilterFc,i*2400,n),AA(this.channelNumber,i*2400,`${s} LFO2 filter depth`,"cents");break}case 10:{this.setModulator(t,g.modLfoAmplitudeDepth,i*1e3,n),AA(this.channelNumber,i*100,`${s} LFO2 amplitude depth`,"%");break}}}setModulator(A,e,t,s=!1,n=!1){let a=this.getModulatorID(A,e,s,n);t===0&&this.deleteModulator(a);let o=this.modulatorList.find(i=>i.id===a);if(o)o.mod.transformAmount=t;else{let i,r;A>=ve?(i=A-ve,r=!1):(i=A,r=!0);let h=os.fromData(new IA(i,me.linear,r,s),new IA,e,t,0);this.modulatorList.push({mod:h,id:a})}}getModulatorID(A,e,t,s){return`${A}-${e}-${t}-${s}`}deleteModulator(A){this.modulatorList=this.modulatorList.filter(e=>e.id!==A)}},wo=1e3/200;function bo(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),o=s.transformAmount;s.isEffectModulator&&o<=1e3&&(o*=wo,o=Math.min(o,1e3));let i=n*a*o;return s.transformType===2&&(i=Math.abs(i)),s.isDefaultResonantModulator&&(A.resonanceOffset=Math.max(0,i/2)),s.isModWheelModulator&&(i*=this.customControllers[Ce.modulationMultiplier]),A.modulatorValues[t]=i,i}function vo(A,e=-1,t=0){let s=A.modulators,n=A.generators;if(this.generatorOffsetsEnabled){n=new Int16Array(n);for(let r=0;r<n.length;r++)n[r]+=this.generatorOffsets[r]}let a=A.modulatedGenerators,o=this.perNotePitch?this.pitchWheels[A.realKey]:this.midiControllers[Ae.pitchWheel+ve];if(e===-1){a.set(n);for(let r=0;r<s.length;r++){let h=s[r];a[h.destination]=Math.min(32767,Math.max(-32768,a[h.destination]+this.computeModulator(A,o,r)))}for(let r=0;r<a.length;r++){let h=hA[r];h&&(a[r]=Math.min(h.max,Math.max(h.min,a[r])))}return}let i=!!e;for(let r=0;r<s.length;r++){let h=s[r];if(h.primarySource.isCC===i&&h.primarySource.index===t||h.secondarySource.isCC===i&&h.secondarySource.index===t){let c=h.destination,I=n[c];this.computeModulator(A,o,r);for(let B=0;B<s.length;B++)s[B].destination===c&&(I+=A.modulatorValues[B]);let E=hA[c];a[c]=Math.max(E.min,Math.min(I,E.max))}}}var Ro=class{midiControllers=new Int16Array(en);pitchWheels=new Int16Array(128).fill(8192);lockedControllers=new Array(en).fill(!1);customControllers=new Float32Array(Ua);octaveTuning=new Int8Array(128);drumParams=[];sysExModulators;keyShift=0;drumChannel=!1;randomPan=!1;insertionEnabled=!1;cc1=16;cc2=17;drumMap=0;dataEntryState=_e.Idle;patch={bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1};preset;lockPreset=!1;lockedSystem="gs";channelVibrato={delay:0,depth:0,rate:0};polyMode=!0;voiceCount=0;channel;rxChannel;synthCore;noteOn=po.bind(this);noteOff=yo.bind(this);programChange=So.bind(this);controllerChange=Qo.bind(this);resetControllers=ur.bind(this);resetPreset=mr.bind(this);resetControllersRP15Compliant=pr.bind(this);resetParameters=yr.bind(this);dataEntryFine=Bo.bind(this);dataEntryCoarse=Io.bind(this);renderVoice=co.bind(this);perNotePitch=!1;channelTuningCents=0;generatorOffsets=new Int16Array(ot);generatorOffsetsEnabled=!1;generatorOverrides=new Int16Array(ot);generatorOverridesEnabled=!1;computeModulator=bo.bind(this);computeModulators=vo.bind(this);previousVoiceCount=0;constructor(A,e,t){this.synthCore=A,this.preset=e,this.channel=t,this.rxChannel=t,this.sysExModulators=new Do(t),this.resetGeneratorOverrides(),this.resetGeneratorOffsets();for(let s=0;s<128;s++)this.drumParams.push(new An);this.resetDrumParams(),this.resetVibratoParams()}_isMuted=!1;get isMuted(){return this._isMuted}get channelSystem(){return this.lockPreset?this.lockedSystem:this.synthCore.masterParameters.midiSystem}clearVoiceCount(){this.previousVoiceCount=this.voiceCount,this.voiceCount=0}updateVoiceCount(){this.voiceCount!==this.previousVoiceCount&&this.sendChannelProperty()}transposeChannel(A,e=!1){this.drumChannel||(A+=this.synthCore.masterParameters.transposition);let t=Math.trunc(A),s=this.keyShift+this.customControllers[Ce.channelTransposeFine]/100;this.drumChannel&&!e||A===s||(t!==this.keyShift&&this.stopAllNotes(),this.keyShift=t,this.setCustomController(Ce.channelTransposeFine,(A-t)*100),this.sendChannelProperty())}setOctaveTuning(A){if(A.length!==12)throw new Error("Tuning is not the length of 12.");for(let e=0;e<128;e++)this.octaveTuning[e]=A[e%12]}setModulationDepth(A){A=Math.round(A),k(`%cChannel ${this.channel} modulation depth. Cents: %c${A}`,l.info,l.value),this.setCustomController(Ce.modulationMultiplier,A/50)}setTuning(A,e=!0){A=Math.round(A),this.setCustomController(Ce.channelTuning,A),e&&k(`%cFine tuning for %c${this.channel}%c is now set to %c${A}%c cents.`,l.info,l.recognized,l.info,l.value,l.info)}pitchWheel(A,e=-1){if(!this.lockedControllers[ve+Ae.pitchWheel]){if(e===-1)this.perNotePitch=!1,this.midiControllers[ve+Ae.pitchWheel]=A,this.computeModulatorsAll(0,Ae.pitchWheel),this.sendChannelProperty();else{this.perNotePitch||this.pitchWheels.fill(this.midiControllers[ve+Ae.pitchWheel]),this.perNotePitch=!0,this.pitchWheels[e]=A;let t=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.isActive&&s.channel===this.channel&&s.midiNote===e&&(this.computeModulators(s,0,Ae.polyPressure),++t>=this.voiceCount))break}}this.synthCore.callEvent("pitchWheel",{channel:this.channel,pitch:A,midiNote:e})}}channelPressure(A){this.midiControllers[ve+Ae.channelPressure]=A<<7,this.updateChannelTuning(),this.computeModulatorsAll(0,Ae.channelPressure),this.synthCore.callEvent("channelPressure",{channel:this.channel,pressure:A})}polyPressure(A,e){let t=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.isActive&&s.channel===this.channel&&s.midiNote===A&&(s.pressure=e,this.computeModulators(s,0,Ae.polyPressure),++t>=this.voiceCount))break}this.synthCore.callEvent("polyPressure",{channel:this.channel,midiNote:A,pressure:e})}setCustomController(A,e){this.customControllers[A]=e,this.updateChannelTuning()}updateChannelTuning(){this.channelTuningCents=this.customControllers[Ce.channelTuning]+this.customControllers[Ce.channelTransposeFine]+this.customControllers[Ce.masterTuning]+this.customControllers[Ce.channelTuningSemitones]*100}setPresetLock(A){this.lockPreset!==A&&(this.lockPreset=A,A&&(this.lockedSystem=this.synthCore.masterParameters.midiSystem))}setDrums(A){if(Re.isSystemXG(this.channelSystem))if(A)this.setBankMSB(Re.getDrumBank(this.channelSystem)),this.setBankLSB(0);else{if(this.channel%16===bA)throw new Error(`Cannot disable drums on channel ${this.channel} for XG.`);this.setBankMSB(0),this.setBankLSB(0)}else this.setGSDrums(A);this.setDrumFlag(A),this.programChange(this.patch.program)}setPatch(A){this.setBankMSB(A.bankMSB),this.setBankLSB(A.bankLSB),this.setGSDrums(A.isGMGSDrum),this.programChange(A.program)}setGSDrums(A){A!==this.patch.isGMGSDrum&&(this.setBankLSB(0),this.setBankMSB(0),this.patch.isGMGSDrum=A)}resetGeneratorOverrides(){this.generatorOverrides.fill(Fa),this.generatorOverridesEnabled=!1}setGeneratorOverride(A,e,t=!1){if(this.generatorOverrides[A]=e,this.generatorOverridesEnabled=!0,t){let s=0;if(this.voiceCount>0){for(let n of this.synthCore.voices)if(n.channel===this.channel&&n.isActive&&(n.generators[A]=e,this.computeModulators(n),++s>=this.voiceCount))break}}}resetGeneratorOffsets(){this.generatorOffsets.fill(0),this.generatorOffsetsEnabled=!1}setGeneratorOffset(A,e){this.generatorOffsets[A]=e*hA[A].nrpn,this.generatorOffsetsEnabled=!0;let t=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&(this.computeModulators(s),++t>=this.voiceCount))break}}killNote(A,e=-12e3){A+=this.customControllers[Ce.channelKeyShift];let t=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&s.realKey===A&&(s.overrideReleaseVolEnv=e,s.isInRelease=!1,s.releaseVoice(this.synthCore.currentTime),++t>=this.voiceCount))break}}stopAllNotes(A=!1){if(A){let e=0;if(this.voiceCount>0){for(let t of this.synthCore.voices)if(t.channel===this.channel&&t.isActive&&(t.isActive=!1,++e>=this.voiceCount))break}this.clearVoiceCount(),this.updateVoiceCount()}else{let e=0;if(this.voiceCount>0){for(let t of this.synthCore.voices)if(t.channel===this.channel&&t.isActive&&(t.releaseVoice(this.synthCore.currentTime),++e>=this.voiceCount))break}}this.synthCore.callEvent("stopAll",{channel:this.channel,force:A})}muteChannel(A){A&&this.stopAllNotes(!0),this._isMuted=A,this.sendChannelProperty(),this.synthCore.callEvent("muteChannel",{channel:this.channel,isMuted:A})}sendChannelProperty(){if(!this.synthCore.enableEventSystem)return;let A={voicesAmount:this.voiceCount,pitchWheel:this.midiControllers[ve+Ae.pitchWheel],pitchWheelRange:this.midiControllers[ve+Ae.pitchWheelRange]/128,isMuted:this.isMuted,transposition:this.keyShift+this.customControllers[Ce.channelTransposeFine]/100,isDrum:this.drumChannel,isEFX:this.insertionEnabled};this.synthCore.callEvent("channelPropertyChange",{channel:this.channel,property:A})}resetDrumParams(){if(!(this.synthCore.masterParameters.drumLock||!this.drumChannel))for(let A=0;A<128;A++){let e=this.drumParams[A];e.pitch=0,e.gain=1,e.exclusiveClass=0,e.pan=64,e.reverbGain=vn[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}))}},Fo=class extends vt{constructor(A,e){super(A.parentSoundBank,A.globalZone),this.bankMSB=Re.addBankOffset(A.bankMSB,e,A.isXGDrums),this.name=A.name,this.bankLSB=A.bankLSB,this.isGMGSDrum=A.isGMGSDrum,this.program=A.program,this.genre=A.genre,this.morphology=A.morphology,this.library=A.library,this.zones=A.zones}},Go=class{soundBankList=[];presetListChangeCallback;selectablePresetList=[];constructor(A){this.presetListChangeCallback=A}_presetList=[];get presetList(){return[...this._presetList]}get priorityOrder(){return this.soundBankList.map(A=>A.id)}set priorityOrder(A){this.soundBankList.sort((e,t)=>A.indexOf(e.id)-A.indexOf(t.id)),this.generatePresetList()}deleteSoundBank(A){if(this.soundBankList.length===0){ne("1 soundbank left. Aborting!");return}let e=this.soundBankList.findIndex(t=>t.id===A);if(e===-1)throw new Error(`No sound bank with id "${A}"`);this.soundBankList.splice(e,1),this.generatePresetList()}addSoundBank(A,e,t=0){let s=this.soundBankList.find(n=>n.id===e);s===void 0?this.soundBankList.push({id:e,soundBank:A,bankOffset:t}):(s.soundBank=A,s.bankOffset=t),this.generatePresetList()}getPreset(A,e){if(!(this.soundBankList.length===0||this.selectablePresetList.length===0))return $a(this.selectablePresetList,A,e)}destroy(){for(let A of this.soundBankList)A.soundBank.destroySoundBank();this.soundBankList=[]}generatePresetList(){let A=new Array,e=new Set;for(let t of this.soundBankList){let s=t.soundBank,n=t.bankOffset;for(let a of s.presets){let o=new Fo(a,n);e.has(o.toMIDIString())||(e.add(o.toMIDIString()),A.push(o))}}A.sort(CA.sorter.bind(CA)),this.selectablePresetList=A,this._presetList=A.map(t=>({bankMSB:t.bankMSB,bankLSB:t.bankLSB,program:t.program,isGMGSDrum:t.isGMGSDrum,name:t.name,isAnyDrums:t.isAnyDrums})),this.presetListChangeCallback()}};function Mo(A,e){switch(this.masterParameters[A]=e,A){default:break;case"masterPan":{let t=e;t=t/2+.5,this.panLeft=Math.cos(Math.PI/2*t),this.panRight=Math.sin(Math.PI/2*t);break}case"voiceCap":{let t=Math.min(e,1e6);this.masterParameters.voiceCap=t;for(let s=t;s<this.voices.length;s++)this.voices[s].isActive=!1;if(t>this.voices.length){ne(`Allocating ${t-this.voices.length} new voices!`);for(let s=this.voices.length;s<t;s++)this.voices.push(new hn(this.sampleRate))}break}case"transposition":{let t=e;this.masterParameters.transposition=0;for(let s of this.midiChannels)s.transposeChannel(t);this.masterParameters.transposition=t}}this.callEvent("masterParameterChange",{parameter:A,value:e})}function Lo(A){return this.masterParameters[A]}function No(){return{...this.masterParameters}}function ca(A,e,t){let s=A,n=e<<7|t;return A===127&&e===127&&t===127?-1:s+n*61e-6}function To(A,e=0){switch(A[2]){case 4:{let t;switch(A[3]){case 1:{let s=A[5]<<7|A[4];this.setMIDIVolume(s/16384),k(`%cMaster Volume. Volume: %c${s}`,l.info,l.value);break}case 2:{let n=((A[5]<<7|A[4])-8192)/8192;this.setMasterParameter("masterPan",n),k(`%cMaster Pan. Pan: %c${n}`,l.info,l.value);break}case 3:{let s=(A[5]<<7|A[6])-8192;t=Math.floor(s/81.92),this.setMasterTuning(t),k(`%cMaster Fine Tuning. Cents: %c${t}`,l.info,l.value);break}case 4:{t=(A[5]-64)*100,this.setMasterTuning(t),k(`%cMaster Coarse Tuning. Cents: %c${t}`,l.info,l.value);break}default:k(`%cUnrecognized MIDI Device Control Real-time message: %c${cs(A)}`,l.warn,l.unrecognized)}break}case 9:{A[3]===1?(k("%cGM1 system on",l.info),this.resetAllControllers("gm")):A[3]===3?(k("%cGM2 system on",l.info),this.resetAllControllers("gm2")):(k("%cGM system off, defaulting to GS",l.info),this.setMasterParameter("midiSystem","gs"));break}case 8:{let t=4;switch(A[3]){case 1:{let s=A[t++],n=cA(A,16,t);if(t+=16,A.length<384){ne(`The Bulk Tuning Dump is too short! (${A.length} bytes, at least 384 are expected)`);return}for(let a=0;a<128;a++)this.tunings[s*128+a]=ca(A[t++],A[t++],A[t++]);k(`%cBulk Tuning Dump %c${n}%c Program: %c${s}`,l.info,l.value,l.info,l.recognized);break}case 2:case 7:{A[3]===7&&t++;let s=A[t++],n=A[t++];for(let a=0;a<n;a++){let o=A[t++];this.tunings[s*128+o]=ca(A[t++],A[t++],A[t++])}k(`%cSingle Note Tuning. Program: %c${s}%c Keys affected: %c${n}`,l.info,l.recognized,l.info,l.recognized);break}case 9:case 8:{let s=new Int8Array(12);if(A[3]===8)for(let n=0;n<12;n++)s[n]=A[7+n]-64;else for(let n=0;n<24;n+=2){let a=(A[7+n]<<7|A[8+n])-8192;s[n/2]=Math.floor(a/81.92)}(A[4]&1)===1&&this.midiChannels[14+e].setOctaveTuning(s),(A[4]>>1&1)===1&&this.midiChannels[15+e].setOctaveTuning(s);for(let n=0;n<7;n++)(A[5]>>n&1)===1&&this.midiChannels[7+n+e].setOctaveTuning(s);for(let n=0;n<7;n++)(A[6]>>n&1)===1&&this.midiChannels[n+e].setOctaveTuning(s);k(`%cMIDI Octave Scale ${A[3]===8?"(1 byte)":"(2 bytes)"} tuning via Tuning: %c${s.join(" ")}`,l.info,l.value);break}default:{qe(A,"MIDI Tuning Standard");break}}break}default:qe(A,"General MIDI")}}var z=(A,e)=>{k(`%cRoland GS ${A}%c is now set to %c${e}%c.`,l.recognized,l.info,l.value,l.info)};function Uo(A,e=0){if(A[3]===18)switch(A[2]){case 66:{let t=A[4],s=A[5],n=A[6],a=Math.min(A[7],127);if(t===0&&s===0&&n===127&&a===0){k("%cGS Reset received!",l.info),this.resetAllControllers("gs");return}if(t===64){if(s===0){switch(n){case 0:{let i=((a<<12|A[8]<<8|A[9]<<4|A[10])-1024)/10;this.setMasterTuning(i),z("Master Tune",i);break}case 4:{z("Master Volume",a);break}case 5:{let o=a-64;z("Master Key-Shift",o),this.setMasterTuning(o*100);break}case 6:{z("Master Pan",a),this.setMasterParameter("masterPan",(a-64)/64);break}case 127:{a===0?(k("%cGS Reset received!",l.info),this.resetAllControllers("gs")):a===127&&(k("%cGS system off, switching to GM",l.info),this.resetAllControllers("gm"));break}default:{qe(A,"Roland GS");break}}return}if(s===1){let o=n>=48&&n<=55,i=n>=56&&n<=64,r=n>=80&&n<=90;if(o&&this.masterParameters.reverbLock||i&&this.masterParameters.chorusLock||r&&this.masterParameters.delayLock)return;switch(this.delayActive||=n===64||r,n){default:{k(`%cUnsupported Patch Common parameter: %c${n.toString(16)}`,l.warn,l.unrecognized);break}case 0:{let h=cA(A,16,7);z(`Patch Name for ${n&15}`,h);break}case 48:{this.setReverbMacro(a),z("Reverb Macro",a);break}case 49:{this.reverbProcessor.character=a,z("Reverb Character",a),this.callEvent("effectChange",{effect:"reverb",parameter:"character",value:a});break}case 50:{this.reverbProcessor.preLowpass=a,z("Reverb Pre-LPF",a),this.callEvent("effectChange",{effect:"reverb",parameter:"preLowpass",value:a});break}case 51:{this.reverbProcessor.level=a,z("Reverb Level",a),this.callEvent("effectChange",{effect:"reverb",parameter:"level",value:a});break}case 52:{this.reverbProcessor.time=a,z("Reverb Time",a),this.callEvent("effectChange",{effect:"reverb",parameter:"time",value:a});break}case 53:{this.reverbProcessor.delayFeedback=a,z("Reverb Delay Feedback",a),this.callEvent("effectChange",{effect:"reverb",parameter:"delayFeedback",value:a});break}case 54:break;case 55:{this.reverbProcessor.preDelayTime=a,z("Reverb Predelay Time",a),this.callEvent("effectChange",{effect:"reverb",parameter:"preDelayTime",value:a});break}case 56:{this.setChorusMacro(a),z("Chorus Macro",a);break}case 57:{this.chorusProcessor.preLowpass=a,z("Pre-LPF",a),this.callEvent("effectChange",{effect:"chorus",parameter:"preLowpass",value:a});break}case 58:{this.chorusProcessor.level=a,z("Chorus Level",a),this.callEvent("effectChange",{effect:"chorus",parameter:"level",value:a});break}case 59:{this.chorusProcessor.feedback=a,z("Chorus Feedback",a),this.callEvent("effectChange",{effect:"chorus",parameter:"feedback",value:a});break}case 60:{this.chorusProcessor.delay=a,z("Chorus Delay",a),this.callEvent("effectChange",{effect:"chorus",parameter:"delay",value:a});break}case 61:{this.chorusProcessor.rate=a,z("Chorus Rate",a),this.callEvent("effectChange",{effect:"chorus",parameter:"rate",value:a});break}case 62:{this.chorusProcessor.depth=a,z("Chorus Depth",a),this.callEvent("effectChange",{effect:"chorus",parameter:"depth",value:a});break}case 63:{this.chorusProcessor.sendLevelToReverb=a,z("Chorus Send Level To Reverb",a),this.callEvent("effectChange",{effect:"chorus",parameter:"sendLevelToReverb",value:a});break}case 64:{this.chorusProcessor.sendLevelToDelay=a,z("Chorus Send Level To Delay",a),this.callEvent("effectChange",{effect:"chorus",parameter:"sendLevelToDelay",value:a});break}case 80:{this.setDelayMacro(a),z("Delay Macro",a);break}case 81:{this.delayProcessor.preLowpass=a,z("Delay Pre-LPF",a),this.callEvent("effectChange",{effect:"delay",parameter:"preLowpass",value:a});break}case 82:{this.delayProcessor.timeCenter=a,z("Delay Time Center",a),this.callEvent("effectChange",{effect:"delay",parameter:"timeCenter",value:a});break}case 83:{this.delayProcessor.timeRatioLeft=a,z("Delay Time Ratio Left",a),this.callEvent("effectChange",{effect:"delay",parameter:"timeRatioLeft",value:a});break}case 84:{this.delayProcessor.timeRatioRight=a,z("Delay Time Ratio Right",a),this.callEvent("effectChange",{effect:"delay",parameter:"timeRatioRight",value:a});break}case 85:{this.delayProcessor.levelCenter=a,z("Delay Level Center",a),this.callEvent("effectChange",{effect:"delay",parameter:"levelCenter",value:a});break}case 86:{this.delayProcessor.levelLeft=a,z("Delay Level Left",a),this.callEvent("effectChange",{effect:"delay",parameter:"levelLeft",value:a});break}case 87:{this.delayProcessor.levelRight=a,z("Delay Level Right",a),this.callEvent("effectChange",{effect:"delay",parameter:"levelRight",value:a});break}case 88:{this.delayProcessor.level=a,z("Delay Level",a),this.callEvent("effectChange",{effect:"delay",parameter:"level",value:a});break}case 89:{this.delayProcessor.feedback=a,z("Delay Feedback",a),this.callEvent("effectChange",{effect:"delay",parameter:"feedback",value:a});break}case 90:{this.delayProcessor.sendLevelToReverb=a,z("Delay Send Level To Reverb",a),this.callEvent("effectChange",{effect:"delay",parameter:"sendLevelToReverb",value:a});break}}break}if(s===3){if(this.masterParameters.insertionEffectLock)return;if(n>=3&&n<=25&&(this.insertionParams[n-3]=a),n>=3&&n<=22){this.insertionProcessor.setParameter(n,a),z(`EFX Parameter ${n-2}`,a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return}switch(n){default:{qe(A,"Roland GS EFX");return}case 0:{let o=a<<8|A[8],i=this.insertionEffects.get(o);i?(z("EFX Type",o.toString(16)),this.insertionProcessor=i):(this.insertionProcessor=this.insertionFallback,k(`%cUnsupported EFX processor: %c${o.toString(16)}%c, using Thru.`,l.warn,l.unrecognized,l.warn)),this.resetInsertionParams(),this.insertionProcessor.reset(),this.callEvent("effectChange",{effect:"insertion",parameter:0,value:o});return}case 23:{this.insertionProcessor.sendLevelToReverb=a/127*zt,z("EFX Send Level to Reverb",a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return}case 24:{this.insertionProcessor.sendLevelToChorus=a/127*zt,z("EFX Send Level to Chorus",a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return}case 25:{this.insertionProcessor.sendLevelToDelay=a/127*zt,this.delayActive=!0,z("EFX Send Level to Delay",a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return}}}if(s>>4===1){let o=it(s&15)+e,i=this.midiChannels[o];switch(n){default:{qe(A,"Roland GS");return}case 0:{i.controllerChange(u.bankSelect,a),i.programChange(A[8]);break}case 2:{i.rxChannel=a===16?-1:a+e,this.customChannelNumbers||=i.rxChannel!==i.channel,z(`Rx. Channel on ${o}`,i.rxChannel);break}case 19:{i.polyMode=a===1,z(`Mono/poly on ${o}`,i.polyMode?"POLY":"MONO");break}case 20:{z(`Assign mode on ${o}`,a);break}case 21:{i.drumMap=a;let r=a>0;i.setGSDrums(r),z(`Drums on ${o}`,r.toString());return}case 22:{let r=a-64;i.setCustomController(Ce.channelKeyShift,r),z(`Key shift on ${o}`,r);return}case 25:{i.controllerChange(u.mainVolume,a);return}case 28:{let r=a;r===0?(i.randomPan=!0,z(`Random pan on ${o}`,"ON")):(i.randomPan=!1,i.controllerChange(u.pan,r));break}case 31:{i.cc1=a,z("CC1 Controller Number",a);break}case 32:{i.cc2=a,z("CC2 Controller Number",a);break}case 33:{i.controllerChange(u.chorusDepth,a);break}case 34:{i.controllerChange(u.reverbDepth,a);break}case 42:{let h=((a<<7|A[8])-8192)/81.92;i.setTuning(h);break}case 44:{i.controllerChange(u.variationDepth,a);break}case 48:{i.controllerChange(u.vibratoRate,a);break}case 49:{i.controllerChange(u.vibratoDepth,a);break}case 50:{i.controllerChange(u.brightness,a);break}case 51:{i.controllerChange(u.filterResonance,a);break}case 52:{i.controllerChange(u.attackTime,a);break}case 53:{i.controllerChange(u.decayTime,a);break}case 54:{i.controllerChange(u.releaseTime,a);break}case 55:{i.controllerChange(u.vibratoDelay,a);break}case 64:{let r=A.length-9,h=new Int8Array(12);for(let I=0;I<r;I++)h[I]=A[I+7]-64;i.setOctaveTuning(h);let c=a-64;z(`Octave Scale Tuning on ${o}`,h.join(", ")),i.setTuning(c);break}}return}if(s>>4===2){let o=it(s&15)+e,i=this.midiChannels[o];switch(n&240){default:{qe(A,"Roland GS Patch Parameter Controller");break}case 0:{if((n&15)===4){let r=a/127*600;i.customControllers[Ce.modulationMultiplier]=r/50,AA(i.channel,r,"modulation wheel depth","cents");break}i.sysExModulators.setupReceiver(n,a,u.modulationWheel,"mod wheel");break}case 16:{if((n&15)===0){let r=a-64;i.midiControllers[ve+Ae.pitchWheelRange]=r<<7,AA(i.channel,r,"pitch wheel range","semitones");break}i.sysExModulators.setupReceiver(n,a,ve+Ae.pitchWheel,"pitch wheel",!0);break}case 32:{i.sysExModulators.setupReceiver(n,a,ve+Ae.channelPressure,"channel pressure");break}case 48:{i.sysExModulators.setupReceiver(n,a,ve+Ae.polyPressure,"poly pressure");break}case 64:{i.sysExModulators.setupReceiver(n,a,i.cc1,"CC1");break}case 80:i.sysExModulators.setupReceiver(n,a,i.cc2,"CC2")}return}if(s>>4===4){let o=it(s&15)+e,i=this.midiChannels[o];switch(n){default:{qe(A,"Roland GS Patch Part Parameter");break}case 0:case 1:{i.controllerChange(u.bankSelectLSB,a);break}case 34:{if(this.masterParameters.insertionEffectLock)return;let r=a===1;i.insertionEnabled=r,this.insertionActive||=r,z(`Insertion for ${o}`,r?"ON":"OFF"),this.callEvent("effectChange",{effect:"insertion",parameter:r?-1:-2,value:o})}}return}qe(A,"Roland GS Patch Parameter");return}if(t===65){if(this.masterParameters.drumLock)return;let o=(s>>4)+1,i=n;switch(s&15){default:{qe(A,"Roland GS Drum Setup");return}case 0:{let h=cA(A,12,7);z(`Patch Name for MAP${o}`,h);break}case 1:{let h=a-60;for(let c of this.midiChannels)c.drumMap===o&&(c.drumParams[i].pitch=h*(c.patch.bankLSB===1?100:50));z(`Drum Pitch for MAP${o}, key ${i}`,h);break}case 2:{for(let h of this.midiChannels)h.drumMap===o&&(h.drumParams[i].gain=a/120);z(`Drum Level for MAP${o}, key ${i}`,a);break}case 3:{for(let h of this.midiChannels)h.drumMap===o&&(h.drumParams[i].exclusiveClass=a);z(`Drum Assign Group for MAP${o}, key ${i}`,a);break}case 4:{for(let h of this.midiChannels)h.drumMap===o&&(h.drumParams[i].pan=a);z(`Drum Pan for MAP${o}, key ${i}`,a);break}case 5:{for(let h of this.midiChannels)h.drumMap===o&&(h.drumParams[i].reverbGain=a/127);z(`Drum Reverb for MAP${o}, key ${i}`,a);break}case 6:{for(let h of this.midiChannels)h.drumMap===o&&(h.drumParams[i].chorusGain=a/127);z(`Drum Chorus for MAP${o}, key ${i}`,a);break}case 7:{for(let h of this.midiChannels)h.drumMap===o&&(h.drumParams[i].rxNoteOff=a===1);z(`Drum Note Off for MAP${o}, key ${i}`,a===1);break}case 8:{for(let h of this.midiChannels)h.drumMap===o&&(h.drumParams[i].rxNoteOn=a===1);z(`Drum Note On for MAP${o}, key ${i}`,a===1);break}case 9:{for(let h of this.midiChannels)h.drumMap===o&&(h.drumParams[i].delayGain=a/127);z(`Drum Delay for MAP${o}, key ${i}`,a);break}}return}qe(A,"Roland GS");return}case 69:{A[4]===16&&(A[5]===0?this.callEvent("synthDisplay",[...A]):A[5]===1?this.callEvent("synthDisplay",[...A]):qe(A,"Roland GS Display"));return}case 22:if(A[4]===16){this.setMIDIVolume(A[7]/100),k(`%cRoland Master Volume control set to: %c${A[7]}`,l.info,l.value);return}else qe(A,"Roland")}else{qe(A,"Roland");return}}var Oe=(A,e)=>{k(`%cYamaha XG ${A}%c for is now set to %c${e}%c.`,l.recognized,l.info,l.value,l.info)};function Po(A,e=0){if(A[2]===76){let t=A[3],s=A[4],n=A[5],a=A[6];if(t===0&&s===0){switch(n){case 0:{{let i=(((A[6]&15)<<12|(A[7]&15)<<8|(A[8]&15)<<4|A[9]&15)-1024)/10;this.setMasterTuning(i),Oe("Master Tune",i)}break}case 4:{this.setMIDIVolume(a/127),Oe("Master Volume",a);break}case 5:{let o=127-a;this.setMIDIVolume(o/127),Oe("Master Attenuation",a);break}case 6:{let o=a-64;this.setMasterParameter("transposition",o),Oe("Master Transpose",o);break}case 127:case 126:{k("%cXG system on",l.info),this.resetAllControllers("xg");break}}return}if(t===2&&s===1){let o,i=n;i<=21?o="Reverb":i<=35?o="Chorus":o="Variation",k(`%cUnsupported XG ${o} Parameter: %c${i.toString(16)}`,l.warn,l.unrecognized);return}if(t===8){if(!Re.isSystemXG(this.masterParameters.midiSystem))return;let o=s+e;if(o>=this.midiChannels.length)return;let i=this.midiChannels[o];switch(n){case 1:{i.controllerChange(u.bankSelect,a);break}case 2:{i.controllerChange(u.bankSelectLSB,a);break}case 3:{i.programChange(a);break}case 4:{i.rxChannel=a+e,this.customChannelNumbers||=i.rxChannel!==i.channel,Oe(`Rev. Channel on ${o}`,i.rxChannel);break}case 5:{i.polyMode=a===1,Oe(`Mono/poly on ${o}`,i.polyMode?"POLY":"MONO");break}case 7:{i.setDrums(a!==0);break}case 8:{if(i.drumChannel)break;let r=a-64;i.setCustomController(Ce.channelKeyShift,r),Oe(`Key shift on ${o}`,r);break}case 11:{i.controllerChange(u.mainVolume,a);break}case 14:{let r=a;r===0?(i.randomPan=!0,Oe(`Random Pan for ${o}`,"ON")):i.controllerChange(u.pan,r);break}case 18:{i.controllerChange(u.chorusDepth,a);break}case 19:{i.controllerChange(u.reverbDepth,a);break}case 21:{i.controllerChange(u.vibratoRate,a);break}case 22:{i.controllerChange(u.vibratoDepth,a);break}case 23:{i.controllerChange(u.vibratoDelay,a);break}case 24:{i.controllerChange(u.brightness,a);break}case 25:{i.controllerChange(u.filterResonance,a);break}case 26:{i.controllerChange(u.attackTime,a);break}case 27:{i.controllerChange(u.decayTime,a);break}case 28:{i.controllerChange(u.releaseTime,a);break}default:k(`%cUnsupported Yamaha XG Part Setup: %c${A[5].toString(16).toUpperCase()}%c for channel ${o}`,l.warn,l.unrecognized,l.warn)}return}if(t>>4===3){if(this.masterParameters.drumLock)return;let o=s;switch(n){default:{qe([n],"Yamaha XG Drum Setup");return}case 0:{let i=(a-64)*100;for(let r of this.midiChannels)r.drumChannel&&(r.drumParams[o].pitch=i);Oe(`Drum Pitch, key ${o}`,i);break}case 1:{let i=a-64;for(let r of this.midiChannels)r.drumChannel&&(r.drumParams[o].pitch+=i);Oe(`Drum Pitch Fine, key ${o}`,i);break}case 2:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[o].gain=a/120);Oe(`Drum Level, key ${o}`,a);break}case 3:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[o].exclusiveClass=a);Oe(`Drum Alternate Group, key ${o}`,a);break}case 4:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[o].pan=a);Oe(`Drum Pan, key ${o}`,a);break}case 5:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[o].reverbGain=a/127);Oe(`Drum Reverb, key ${o}`,a);break}case 6:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[o].chorusGain=a/127);Oe(`Drum Chorus, key ${o}`,a);break}case 9:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[o].rxNoteOff=a===1);Oe(`Drum Note Off, key ${o}`,a===1);break}case 10:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[o].rxNoteOn=a===1);Oe(`Drum Note On, key ${o}`,a===1);break}}return}t===6||t===7?this.callEvent("synthDisplay",[...A]):Re.isSystemXG(this.masterParameters.midiSystem)&&qe(A,"Yamaha XG")}else qe(A,"Yamaha")}function xo(A,e=0){e+=this.portSelectChannelOffset;let t=A[0];if(!(this.masterParameters.deviceID!==gt&&A[1]!==127&&this.masterParameters.deviceID!==A[1]))switch(t){default:{k(`%cUnknown manufacturer: %c${cs(A)}`,l.warn,l.unrecognized);break}case 126:case 127:{To.call(this,A,e);break}case 65:{Uo.call(this,A,e);break}case 67:{Po.call(this,A,e);break}case 245:{if(A.length<2)return;for(this.portSelectChannelOffset=(A[1]-1)*16;this.midiChannels.length<=this.portSelectChannelOffset;){k(`%cPort select, channel offset %c${this.portSelectChannelOffset}%c. Creating a new port!`,l.info,l.value,l.info);for(let s=0;s<16;s++)this.createMIDIChannel(!0)}break}}}var hi=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=0;reset(){}process(A,e,t,s,n,a,o,i,r){let{sendLevelToReverb:h,sendLevelToChorus:c,sendLevelToDelay:I}=this;for(let E=0;E<r;E++){let B=A[E],d=e[E],y=i+E;t[y]+=B,s[y]+=d;let D=(B+d)*.5;n[E]+=D*h,a[E]+=D*c,o[E]+=D*I}}setParameter(A,e){}},wA=class{static data=[[0,200,200,0,0,.05,.05,315,250,200,250,100,-180,0],[.1,205,205,.1,5,.1,.1,315,250,200,250,110,-180,1],[.2,210,210,.2,10,.15,.15,315,250,200,250,120,-180,2],[.3,215,215,.3,15,.2,.2,315,250,200,250,130,-180,3],[.4,220,220,.4,20,.25,.25,315,250,200,250,140,-180,4],[.5,225,225,.5,25,.3,.3,315,250,200,250,150,-180,5],[.6,230,230,.6,30,.35,.35,315,250,200,250,160,-168,5],[.7,235,235,.7,35,.4,.4,315,250,200,250,170,-168,5],[.8,240,240,.8,40,.45,.45,400,315,250,315,180,-168,5],[.9,245,245,.9,45,.5,.5,400,315,250,315,190,-168,5],[1,250,250,1,50,.55,.55,400,315,250,315,200,-156,5],[1.1,255,255,1.1,55,.6,.6,400,315,250,315,210,-156,5],[1.2,260,260,1.2,60,.65,.65,400,315,250,315,220,-156,5],[1.3,265,265,1.3,65,.7,.7,400,315,250,315,230,-156,5],[1.4,270,270,1.4,70,.75,.75,400,315,250,315,240,-144,5],[1.5,275,275,1.5,75,.8,.8,400,315,250,315,250,-144,5],[1.6,280,280,1.6,80,.85,.85,500,400,315,400,260,-144,5],[1.7,285,285,1.7,85,.9,.9,500,400,315,400,270,-144,5],[1.8,290,290,1.8,90,.95,.95,500,400,315,400,280,-132,5],[1.9,295,295,1.9,95,1,1,500,400,315,400,290,-132,5],[2,300,300,2,100,1.05,1.05,500,400,315,400,300,-132,5],[2.1,305,305,2.1,105,1.1,1.1,500,400,315,400,320,-132,5],[2.2,310,310,2.2,110,1.15,1.15,500,400,315,400,340,-120,5],[2.3,315,315,2.3,115,1.2,1.2,500,400,315,400,360,-120,5],[2.4,320,320,2.4,120,1.25,1.25,630,500,400,500,380,-120,5],[2.5,325,325,2.5,125,1.3,1.3,630,500,400,500,400,-120,5],[2.6,330,330,2.6,130,1.35,1.35,630,500,400,500,420,-108,5],[2.7,335,335,2.7,135,1.4,1.4,630,500,400,500,440,-108,5],[2.8,340,340,2.8,140,1.45,1.45,630,500,400,500,460,-108,5],[2.9,345,345,2.9,145,1.5,1.5,630,500,400,500,480,-108,5],[3,350,350,3,150,1.55,1.55,630,500,400,500,500,-96,6],[3.1,355,355,3.1,155,1.6,1.6,630,500,400,500,520,-96,6],[3.2,360,360,3.2,160,1.65,1.65,800,630,500,630,540,-96,6],[3.3,365,365,3.3,165,1.7,1.7,800,630,500,630,560,-96,6],[3.4,370,370,3.4,170,1.75,1.75,800,630,500,630,580,-84,6],[3.5,375,375,3.5,175,1.8,1.8,800,630,500,630,600,-84,6],[3.6,380,380,3.6,180,1.85,1.85,800,630,500,630,620,-84,6],[3.7,385,385,3.7,185,1.9,1.9,800,630,500,630,640,-84,6],[3.8,390,390,3.8,190,1.95,1.95,800,630,500,630,660,-72,6],[3.9,395,395,3.9,195,2,2,800,630,500,630,680,-72,6],[4,400,400,4,200,2.05,2.05,1e3,800,630,800,700,-72,6],[4.1,405,405,4.1,205,2.1,2.1,1e3,800,630,800,720,-72,6],[4.2,410,410,4.2,210,2.15,2.15,1e3,800,630,800,740,-60,6],[4.3,415,415,4.3,215,2.2,2.2,1e3,800,630,800,760,-60,6],[4.4,420,420,4.4,220,2.25,2.25,1e3,800,630,800,780,-60,6],[4.5,425,425,4.5,225,2.3,2.3,1e3,800,630,800,800,-60,6],[4.6,430,430,4.6,230,2.35,2.35,1e3,800,630,800,820,-48,6],[4.7,435,435,4.7,235,2.4,2.4,1e3,800,630,800,840,-48,6],[4.8,440,440,4.8,240,2.45,2.45,1250,1e3,800,1e3,860,-48,9],[4.9,445,445,4.9,245,2.5,2.5,1250,1e3,800,1e3,880,-48,9],[5,450,450,5,250,2.55,2.55,1250,1e3,800,1e3,900,-36,9],[5.5,455,455,5.5,255,2.6,2.6,1250,1e3,800,1e3,920,-36,9],[6,460,460,6,260,2.65,2.65,1250,1e3,800,1e3,940,-36,9],[6.5,465,465,6.5,265,2.7,2.7,1250,1e3,800,1e3,960,-36,9],[7,470,470,7,270,2.75,2.75,1250,1e3,800,1e3,980,-24,9],[7.5,475,475,7.5,275,2.8,2.8,1250,1e3,800,1e3,1e3,-24,9],[8,480,480,8,280,2.85,2.85,1600,1250,1e3,1250,1100,-24,9],[8.5,485,485,8.5,285,2.9,2.9,1600,1250,1e3,1250,1200,-24,9],[9,490,490,9,290,2.95,2.95,1600,1250,1e3,1250,1300,-12,9],[9.5,495,495,9.5,295,3,3,1600,1250,1e3,1250,1400,-12,9],[10,500,500,10,300,3.05,3.05,1600,1250,1e3,1250,1500,-12,9],[11,505,505,11,305,3.1,3.1,1600,1250,1e3,1250,1600,-12,9],[12,510,510,12,310,3.15,3.15,1600,1250,1e3,1250,1700,0,9],[13,515,515,13,315,3.2,3.2,1600,1250,1e3,1250,1800,0,9],[14,520,520,14,320,3.25,3.25,2e3,1600,1250,1600,1900,0,12],[15,525,525,15,325,3.3,3.3,2e3,1600,1250,1600,2e3,0,12],[16,530,530,16,330,3.35,3.35,2e3,1600,1250,1600,2100,12,12],[17,535,535,17,335,3.4,3.4,2e3,1600,1250,1600,2200,12,12],[18,540,540,18,340,3.45,3.45,2e3,1600,1250,1600,2300,12,12],[19,545,545,19,345,3.5,3.5,2e3,1600,1250,1600,2400,12,12],[20,550,550,20,350,3.55,3.55,2e3,1600,1250,1600,2500,24,12],[21,560,555,21,355,3.6,3.6,2e3,1600,1250,1600,2600,24,12],[22,570,560,22,360,3.65,3.65,2500,2e3,1600,2e3,2700,24,12],[23,580,565,23,365,3.7,3.7,2500,2e3,1600,2e3,2800,24,12],[24,590,570,24,370,3.75,3.75,2500,2e3,1600,2e3,2900,36,12],[25,600,575,25,375,3.8,3.8,2500,2e3,1600,2e3,3e3,36,12],[26,610,580,26,380,3.85,3.85,2500,2e3,1600,2e3,3100,36,12],[27,620,585,27,385,3.9,3.9,2500,2e3,1600,2e3,3200,36,12],[28,630,590,28,390,3.95,3.95,2500,2e3,1600,2e3,3300,48,12],[29,640,595,29,395,4,4,2500,2e3,1600,2e3,3400,48,12],[30,650,600,30,400,4.05,4.05,3150,2500,2e3,2500,3500,48,10],[31,660,610,31,405,4.1,4.1,3150,2500,2e3,2500,3600,48,10],[32,670,620,32,410,4.15,4.15,3150,2500,2e3,2500,3700,60,10],[33,680,630,33,415,4.2,4.2,3150,2500,2e3,2500,3800,60,10],[34,690,640,34,420,4.25,4.25,3150,2500,2e3,2500,3900,60,10],[35,700,650,35,425,4.3,4.3,3150,2500,2e3,2500,4e3,60,10],[36,710,660,36,430,4.35,4.35,3150,2500,2e3,2500,4100,72,10],[37,720,670,37,435,4.4,4.4,3150,2500,2e3,2500,4200,72,10],[38,730,680,38,440,4.45,4.45,4e3,3150,2500,3150,4300,72,11],[39,740,690,39,445,4.5,4.5,4e3,3150,2500,3150,4400,72,11],[40,750,700,40,450,4.55,4.55,4e3,3150,2500,3150,4500,84,11],[41,760,710,50,455,4.6,4.6,4e3,3150,2500,3150,4600,84,11],[42,770,720,60,460,4.65,4.65,4e3,3150,2500,3150,4700,84,11],[43,780,730,70,465,4.7,4.7,4e3,3150,2500,3150,4800,84,11],[44,790,740,80,470,4.75,4.75,4e3,3150,2500,3150,4900,96,11],[45,800,750,90,475,4.8,4.8,4e3,3150,2500,3150,5e3,96,11],[46,810,760,100,480,4.85,4.85,5e3,4e3,3150,4e3,5100,96,12],[47,820,770,110,485,4.9,4.9,5e3,4e3,3150,4e3,5200,96,12],[48,830,780,120,490,4.95,4.95,5e3,4e3,3150,4e3,5300,108,12],[49,840,790,130,495,5,5,5e3,4e3,3150,4e3,5400,108,12],[50,850,800,140,500,5.1,5.05,5e3,4e3,3150,4e3,5500,108,12],[52,860,810,150,505,5.2,5.1,5e3,4e3,3150,4e3,5600,108,12],[54,870,820,160,510,5.3,5.15,5e3,4e3,3150,4e3,5700,120,12],[56,880,830,170,515,5.4,5.2,5e3,4e3,3150,4e3,5800,120,12],[58,890,840,180,520,5.5,5.25,6300,5e3,4e3,5e3,5900,120,13],[60,900,850,190,525,5.6,5.3,6300,5e3,4e3,5e3,6e3,120,13],[62,910,860,200,530,5.7,5.35,6300,5e3,4e3,5e3,6100,132,13],[64,920,870,210,535,5.8,5.4,6300,5e3,4e3,5e3,6200,132,13],[66,930,880,220,540,5.9,5.45,6300,5e3,4e3,5e3,6300,132,13],[68,940,890,230,545,6,5.5,6300,5e3,4e3,5e3,6400,132,13],[70,950,900,240,550,6.1,5.55,6300,5e3,4e3,5e3,6500,144,13],[72,960,910,250,555,6.2,5.6,6300,5e3,4e3,5e3,6600,144,13],[74,970,920,260,560,6.3,5.65,8e3,6300,5e3,6300,6700,144,14],[76,980,930,270,565,6.4,5.7,8e3,6300,5e3,6300,6800,144,14],[78,990,940,280,570,6.5,5.75,8e3,6300,5e3,6300,6900,156,14],[80,1e3,950,290,575,6.6,5.8,8e3,6300,5e3,6300,7e3,156,14],[82,1e3,960,300,580,6.7,5.85,8e3,6300,5e3,6300,7100,156,14],[84,1e3,970,320,585,6.8,5.9,8e3,6300,5e3,6300,7200,156,14],[86,1e3,980,340,590,6.9,5.95,8e3,6300,5e3,6300,7300,168,14],[88,1e3,990,360,595,7,6,8e3,6300,5e3,6300,7400,168,14],[90,1e3,1e3,380,600,7.5,6.05,13500,8e3,6300,13500,7500,168,15],[92,1e3,1e3,400,605,8,6.1,13500,8e3,6300,13500,7600,168,15],[94,1e3,1e3,420,610,8.5,6.15,13500,8e3,6300,13500,7700,-180,15],[96,1e3,1e3,440,615,9,6.2,13500,8e3,6300,13500,7800,-180,15],[98,1e3,1e3,460,620,9.5,6.25,13500,8e3,6300,13500,7900,-180,15],[100,1e3,1e3,480,625,10,6.3,13500,8e3,6300,13500,8e3,-180,15],[100,1e3,1e3,500,630,10,6.35,13500,8e3,6300,13500,8e3,-180,15],[100,1e3,1e3,500,635,10,6.4,13500,8e3,6300,13500,8e3,-180,15]];static preDelayTime(A){return this.data[A][0]}static delayTime1(A){return this.data[A][1]}static delayTime2(A){return this.data[A][2]}static delayTime3(A){return this.data[A][3]}static delayTime4(A){return this.data[A][4]}static rate1(A){return this.data[A][5]}static rate2(A){return this.data[A][6]}static hfDamp(A){return this.data[A][7]}static cutoffFreq(A){return this.data[A][8]}static eqFreq(A){return this.data[A][9]}static lpf(A){return this.data[A][10]}static manual(A){return this.data[A][11]}static azimuth(A){return this.data[A][12]}static accl(A){return this.data[A][13]}},Ia=Math.PI/2,ss=-64,gi=63,Nn=gi-ss,hs=new Float32Array(Nn+1),gs=new Float32Array(Nn+1);for(let A=ss;A<=gi;A++){let e=(A-ss)/Nn,t=A-ss;hs[t]=Math.cos(Ia*e),gs[t]=Math.sin(Ia*e)}function be(A){A.x1=A.x2=A.y1=A.y2=0}var $e={b0:1,b1:0,b2:0,a0:1,a1:0,a2:0};function XA(A,e,t,s,n){let a=e.b0*A+e.b1*s.x1+e.b2*s.x2-e.a1*s.y1-e.a2*s.y2;s.x2=s.x1,s.x1=A,s.y2=s.y1,s.y1=a;let o=t.b0*a+t.b1*n.x1+t.b2*n.x2-t.a1*n.y1-t.a2*n.y2;return n.x2=n.x1,n.x1=a,n.y2=n.y1,n.y1=o,o}function QA(A,e,t){let s=e.b0*A+e.b1*t.x1+e.b2*t.x2-e.a1*t.y1-e.a2*t.y2;return t.x2=t.x1,t.x1=A,t.y2=t.y1,t.y1=s,s}function NA(A,e,t,s,n){let a=Math.pow(10,e/40),o=2*Math.PI*t/s,i=Math.cos(o),c=Math.sin(o)/2*Math.sqrt((a+1/a)*(1/1-1)+2),I,E,B,d,y,D;n?(I=a*(a+1-(a-1)*i+2*Math.sqrt(a)*c),E=2*a*(a-1-(a+1)*i),B=a*(a+1-(a-1)*i-2*Math.sqrt(a)*c),d=a+1+(a-1)*i+2*Math.sqrt(a)*c,y=-2*(a-1+(a+1)*i),D=a+1+(a-1)*i-2*Math.sqrt(a)*c):(I=a*(a+1+(a-1)*i+2*Math.sqrt(a)*c),E=-2*a*(a-1+(a+1)*i),B=a*(a+1+(a-1)*i-2*Math.sqrt(a)*c),d=a+1-(a-1)*i+2*Math.sqrt(a)*c,y=2*(a-1-(a+1)*i),D=a+1-(a-1)*i-2*Math.sqrt(a)*c),A.b0=I/d,A.b1=E/d,A.b2=B/d,A.a0=1,A.a1=y/d,A.a2=D/d}var Le={x1:0,x2:0,y1:0,y2:0},Ho=class{type=256;sendLevelToReverb=0;sendLevelToChorus=0;sendLevelToDelay=0;sampleRate;level=1;lowFreq=400;lowGain=5;hiFreq=8e3;hiGain=-12;m1Freq=1600;m1Q=.5;m1Gain=8;m2Freq=1e3;m2Q=.5;m2Gain=-8;lowCoeffs={...$e};m1Coeffs={...$e};m2Coeffs={...$e};hiCoeffs={...$e};lowStateL={...Le};lowStateR={...Le};m1StateL={...Le};m1StateR={...Le};m2StateL={...Le};m2StateR={...Le};hiStateL={...Le};hiStateR={...Le};constructor(A){this.sampleRate=A,this.reset(),this.updateCoefficients()}reset(){this.level=1,this.lowFreq=400,this.lowGain=5,this.hiGain=-12,this.hiFreq=8e3,this.m1Freq=1600,this.m1Q=.5,this.m1Gain=8,this.m2Freq=1e3,this.m2Q=.5,this.m2Gain=-8,be(this.lowStateL),be(this.lowStateR),be(this.m1StateL),be(this.m1StateR),be(this.m2StateL),be(this.m2StateR),be(this.hiStateL),be(this.hiStateR),this.updateCoefficients()}setParameter(A,e){switch(A){default:break;case 3:{this.lowFreq=e===1?400:200;break}case 4:{this.lowGain=e-64;break}case 5:{this.hiFreq=e===1?8e3:4e3;break}case 6:{this.hiGain=e-64;break}case 7:{this.m1Freq=wA.eqFreq(e);break}case 8:{this.m1Q=[.5,1,2,4,9][e]||1;break}case 9:{this.m1Gain=e-64;break}case 10:{this.m2Freq=wA.eqFreq(e);break}case 11:{this.m2Q=[.5,1,2,4,9][e]||1;break}case 12:{this.m2Gain=e-64;break}case 22:{this.level=e/127;break}}this.updateCoefficients()}process(A,e,t,s,n,a,o,i,r){let{level:h,sendLevelToChorus:c,sendLevelToDelay:I,sendLevelToReverb:E,lowCoeffs:B,lowStateL:d,lowStateR:y,m1Coeffs:D,m1StateL:M,m1StateR:F,m2StateL:w,m2StateR:S,m2Coeffs:P,hiCoeffs:C,hiStateL:x,hiStateR:J}=this;for(let Y=0;Y<r;Y++){let T=A[Y],U=e[Y];T=QA(T,B,d),U=QA(U,B,y),T=QA(T,D,M),U=QA(U,D,F),T=QA(T,P,w),U=QA(U,P,S),T=QA(T,C,x),U=QA(U,C,J);let q=i+Y;t[q]+=T*h,s[q]+=U*h;let m=.5*(T+U);n[Y]+=m*E,a[Y]+=m*c,o[Y]+=m*I}}updateCoefficients(){Oo(this.lowCoeffs,this.lowFreq,this.lowGain/2,this.sampleRate),la(this.m1Coeffs,this.m1Freq,this.m1Gain,this.m1Q,this.sampleRate),la(this.m2Coeffs,this.m2Freq,this.m2Gain,this.m2Q,this.sampleRate),Yo(this.hiCoeffs,this.hiFreq,this.hiGain/2,this.sampleRate)}},ci=1;function la(A,e,t,s,n){let a=Math.pow(10,t/40),o=2*Math.PI*e/n,i=Math.cos(o),h=Math.sin(o)/(2*s),c=1+h*a,I=-2*i,E=1-h*a,B=1+h/a,d=-2*i,y=1-h/a;A.a0=1,A.a1=d/B,A.a2=y/B,A.b0=c/B,A.b1=I/B,A.b2=E/B}function Oo(A,e,t,s){let n=Math.pow(10,t/40),a=2*Math.PI*e/s,o=Math.cos(a),r=Math.sin(a)/2*Math.sqrt((n+1/n)*(1/ci-1)+2),h=n*(n+1-(n-1)*o+2*Math.sqrt(n)*r),c=2*n*(n-1-(n+1)*o),I=n*(n+1-(n-1)*o-2*Math.sqrt(n)*r),E=n+1+(n-1)*o+2*Math.sqrt(n)*r,B=-2*(n-1+(n+1)*o),d=n+1+(n-1)*o-2*Math.sqrt(n)*r;A.a0=1,A.a1=B/E,A.a2=d/E,A.b0=h/E,A.b1=c/E,A.b2=I/E}function Yo(A,e,t,s){let n=Math.pow(10,t/40),a=2*Math.PI*e/s,o=Math.cos(a),r=Math.sin(a)/2*Math.sqrt((n+1/n)*(1/ci-1)+2),h=n*(n+1+(n-1)*o+2*Math.sqrt(n)*r),c=-2*n*(n-1+(n+1)*o),I=n*(n+1+(n-1)*o-2*Math.sqrt(n)*r),E=n+1-(n-1)*o+2*Math.sqrt(n)*r,B=2*(n-1-(n+1)*o),d=n+1-(n-1)*o-2*Math.sqrt(n)*r;A.a0=1,A.a1=B/E,A.a2=d/E,A.b0=h/E,A.b1=c/E,A.b2=I/E}var st=8,zs=128,Ca=4,_s=600,qo=.9,Ea=.35,Ii=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=288;manual=620;rate=.85;depth=64/zs;reso=16/127;mix=1;lowGain=0;hiGain=0;prevInL;prevOutL;prevInR;prevOutR;lowShelfCoef={...$e};highShelfCoef={...$e};manualOffset=_s;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=Ea;sampleRate;constructor(A){this.sampleRate=A,this.prevInL=new Float32Array(st),this.prevOutL=new Float32Array(st),this.prevInR=new Float32Array(st),this.prevOutR=new Float32Array(st),this.reset()}reset(){this.phase=Ea,this.setManual(620),this.rate=.85,this.depth=64/zs,this.reso=16/127,this.mix=1,this.lowGain=0,this.hiGain=0,this.level=104/127,be(this.highShelfStateL),be(this.highShelfStateR),be(this.lowShelfStateL),be(this.lowShelfStateR),this.updateShelves(),this.clearAllPass()}process(A,e,t,s,n,a,o,i,r){let{sendLevelToReverb:h,sendLevelToChorus:c,sendLevelToDelay:I,level:E,manual:B,manualOffset:d,mix:y,lowShelfCoef:D,lowShelfStateR:M,lowShelfStateL:F,highShelfCoef:w,highShelfStateL:S,highShelfStateR:P,prevInL:C,prevInR:x,prevOutL:J,prevOutR:Y,sampleRate:T,depth:U}=this,{prevL:q,prevR:m,phase:v}=this,H=this.rate/this.sampleRate,O=this.reso*qo;for(let b=0;b<r;b++){let G=XA(A[b],D,w,F,S),K=XA(e[b],D,w,M,P),ee=2*Math.abs(v-.5);(v+=H)>=1&&(v-=1);let ie=1-U*ee,Ee=d+B*ie,oe=Math.tan(Math.PI*Ee/T),le=Math.max(-.9999,Math.min(.9999,(1-oe)/(1+oe))),re=G+O*q,Ie=K+O*m;for(let Be=0;Be<st;Be++){let Ue=-le*re+C[Be]+le*J[Be];C[Be]=re,J[Be]=Ue,re=Ue;let Je=-le*Ie+x[Be]+le*Y[Be];x[Be]=Ie,Y[Be]=Je,Ie=Je}q=re,m=Ie;let ke=(G+re*y)*E,_=(K+Ie*y)*E,ce=i+b;t[ce]+=ke,s[ce]+=_;let Te=(ke+_)*.5;n[b]+=Te*h,a[b]+=Te*c,o[b]+=Te*I}this.phase=v,this.prevL=q,this.prevR=m}setParameter(A,e){switch(A){default:break;case 3:{this.setManual(wA.manual(e));break}case 4:{this.rate=wA.rate1(e);break}case 5:{this.depth=e/zs;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=_s*1.5*Ca,this.manual=A):(this.manualOffset=_s,this.manual=A*Ca)}clearAllPass(){this.prevR=0,this.prevL=0;for(let A=0;A<st;A++)this.prevInL[A]=0,this.prevOutL[A]=0,this.prevInR[A]=0,this.prevOutR[A]=0}updateShelves(){NA(this.lowShelfCoef,this.lowGain,200,this.sampleRate,!0),NA(this.highShelfCoef,this.hiGain,4e3,this.sampleRate,!1)}},Ba=Math.PI*2,Jo=.935,Ko=2,Vo=.01,da=127,Xo=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=294;modWave=1;modRate=3.05;modDepth=96;lowGain=0;hiGain=0;level=da/127;currentPan=0;phase=0;lsCoeffs={...$e};hsCoeffs={...$e};lsStateR={...Le};lsStateL={...Le};hsStateR={...Le};hsStateL={...Le};sampleRate;constructor(A){this.sampleRate=A,this.reset()}reset(){this.modWave=1,this.modRate=3.05,this.modDepth=96,this.lowGain=0,this.hiGain=0,this.level=da/127,this.currentPan=0,this.phase=0,be(this.hsStateR),be(this.hsStateL),be(this.lsStateR),be(this.lsStateL),this.updateShelves()}process(A,e,t,s,n,a,o,i,r){let{sendLevelToReverb:h,sendLevelToChorus:c,sendLevelToDelay:I,level:E,lsCoeffs:B,lsStateL:d,lsStateR:y,hsCoeffs:D,hsStateR:M,hsStateL:F,modWave:w}=this,S=Math.pow(this.modDepth/127,Ko),P=2/(1+S)*Jo,C=this.modRate/this.sampleRate,{phase:x,currentPan:J}=this;for(let Y=0;Y<r;Y++){let T=XA(A[Y],B,D,d,F),U=XA(e[Y],B,D,y,M),q;switch(w){default:{q=1-4*Math.abs(x-.5);break}case 1:{q=x>.5?-1:-Math.cos((x-.75)*Ba);break}case 2:{q=Math.sin(Ba*x);break}case 3:{q=1-2*x;break}case 4:{q=2*x-1;break}}(x+=C)>=1&&(x-=1),J+=(q-J)*Vo;let m=J*S,v=(1-m)*.5*P,H=(1+m)*.5*P,O=T*E*v,b=U*E*H,G=i+Y;t[G]+=O,s[G]+=b;let K=(O+b)*.5;n[Y]+=K*h,a[Y]+=K*c,o[Y]+=K*I}this.currentPan=J,this.phase=x}setParameter(A,e){switch(A){default:break;case 3:{this.modWave=e;break}case 4:{this.modRate=wA.rate1(e);break}case 5:{this.modDepth=e;break}case 19:{this.lowGain=e-64;break}case 20:{this.hiGain=e-64;break}case 22:{this.level=e/127;break}}this.updateShelves()}updateShelves(){NA(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),NA(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}},Qa=96,Zo=.1,Wo=.1,zo=27,_o=28,$o=-28,jo=400,eh=.62,Ah=.005,li=5,fa=li*.5,Ci=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=Qa/127;coeffs={...$e};state={...Le};hpCoeffs={...$e};hpState={...Le};phase=0;lsCoeffs={...$e};hsCoeffs={...$e};lsState={...Le};hsState={...Le};sampleRate;lastFc=this.manual;attackCoeff;releaseCoeff;envelope=0;constructor(A){this.sampleRate=A,this.attackCoeff=Math.exp(-1/(Zo*A)),this.releaseCoeff=Math.exp(-1/(Wo*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=Qa/127,this.phase=.2,this.lastFc=this.manual,be(this.hsState),be(this.lsState),be(this.state),be(this.hpState),this.updateShelves()}process(A,e,t,s,n,a,o,i,r){let{sendLevelToReverb:h,sendLevelToChorus:c,sendLevelToDelay:I,level:E,lsCoeffs:B,lsState:d,hsCoeffs:y,hsState:D,coeffs:M,state:F,sampleRate:w,filType:S,manual:P,pan:C,attackCoeff:x,releaseCoeff:J,hpState:Y,hpCoeffs:T}=this,{phase:U,lastFc:q,envelope:m}=this,v=this.rate/this.sampleRate,H=Math.pow(10,this.peak/127*_o/20),O=Math.pow(10,this.peak/127*$o/20),b=this.polarity===0?-1:li,G=this.depth/127*b,K=this.sens/127,ee=C+64|0,ie=hs[ee],Ee=gs[ee];for(let oe=0;oe<r;oe++){let le=XA((A[oe]+e[oe])*.5,B,y,d,D),re=Math.abs(le);m=re>m?x*m+(1-x)*re:J*m+(1-J)*re;let Ie=2*Math.abs(U-.5)*G;(U+=v)>=1&&(U-=1);let ke=Ie>=fa||b<0?1:Math.sin(Ie*Math.PI/(2*fa)),_=P*(1+K*m*zo),ce=Math.max(20,_*(1+ke*Ie)),Te=Math.max(10,ce);q+=(Te-q)*Ah,th(M,q,H,w);let Be=le;S===1&&(sh(T,jo,O,w),Be=QA(Be,T,Y));let Ue=QA(Be,M,F)*E,Je=Ue*ie,TA=Ue*Ee,uA=i+oe;t[uA]+=Je,s[uA]+=TA,n[oe]+=Ue*h,a[oe]+=Ue*c,o[oe]+=Ue*I}this.phase=U,this.lastFc=q,this.envelope=m}setParameter(A,e){switch(A){default:break;case 3:{this.filType=e;break}case 4:{this.sens=e;break}case 5:{this.setManual(e);break}case 6:{this.peak=e;break}case 7:{this.rate=wA.rate1(e);break}case 8:{this.depth=e;break}case 9:{this.polarity=e;break}case 19:{this.lowGain=e-64;break}case 20:{this.hiGain=e-64;break}case 21:{this.pan=e-64;break}case 22:{this.level=e/127;break}}this.updateShelves()}setManual(A){let e=A*eh,t=wA.manual(Math.floor(e)),s=wA.manual(Math.ceil(e)),n=e-Math.floor(e);this.manual=t+(s-t)*n}updateShelves(){NA(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),NA(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}};function th(A,e,t,s){let n=2*Math.PI*e/s,a=Math.cos(n),i=Math.sin(n)/(2*t),r=1-a,h=r/2,c=h,I=1+i,E=-2*a,B=1-i;A.a0=1,A.a1=E/I,A.a2=B/I,A.b0=h/I,A.b1=r/I,A.b2=c/I}function sh(A,e,t,s){let n=2*Math.PI*e/s,a=Math.cos(n),i=Math.sin(n)/(2*t),r=(1+a)/2,h=-(1+a),c=r,I=1+i,E=-2*a,B=1-i;A.a0=1,A.a1=E/I,A.a2=B/I,A.b0=r/I,A.b1=h/I,A.b2=c/I}var ua=127,nh=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=4360;phPan=0;awPan=127;level=ua/127;phaser;autoWah;bufferPh;bufferAw;constructor(A,e){this.phaser=new Ii(A),this.autoWah=new Ci(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=ua/127,this.phaser.reset(),this.autoWah.reset(),this.phaser.setParameter(22,127),this.autoWah.setParameter(22,127)}process(A,e,t,s,n,a,o,i,r){let{sendLevelToReverb:h,sendLevelToChorus:c,sendLevelToDelay:I,level:E}=this,{bufferPh:B,bufferAw:d}=this;this.bufferPh.fill(0),this.phaser.process(A,A,B,B,B,B,B,0,r),this.bufferAw.fill(0),this.autoWah.process(e,e,d,d,d,d,d,0,r);let y=this.phPan|0,D=hs[y],M=gs[y],F=this.awPan|0,w=hs[F],S=gs[F];for(let P=0;P<r;P++){let C=B[P]*.5*E,x=d[P]*.5*E,J=C*D+x*w,Y=C*M+x*S,T=i+P;t[T]+=J,s[T]+=Y;let U=(J+Y)*.5;n[P]+=U*h,a[P]+=U*c,o[P]+=U*I}}setParameter(A,e){if(A>=3&&A<=7){this.phaser.setParameter(A,e);return}if(A>=8&&A<=14){this.autoWah.setParameter(A-5,e);return}switch(A){default:break;case 18:{this.phPan=e;break}case 19:{this.phaser.setParameter(22,e);break}case 20:{this.awPan=e;break}case 21:{this.autoWah.setParameter(22,e);break}case 22:{this.level=e/127;break}}}},ma=127,pa=Math.PI*2,ah=.01,ih=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=293;modWave=1;modRate=3.05;modDepth=96;lowGain=0;hiGain=0;level=ma/127;phase=0;currentGain=1;lsCoeffs={...$e};hsCoeffs={...$e};lsStateR={...Le};lsStateL={...Le};hsStateR={...Le};hsStateL={...Le};sampleRate;constructor(A){this.sampleRate=A,this.reset()}reset(){this.modWave=1,this.modRate=3.05,this.modDepth=96,this.lowGain=0,this.hiGain=0,this.level=ma/127,this.phase=0,this.currentGain=1,be(this.hsStateR),be(this.hsStateL),be(this.lsStateR),be(this.lsStateL),this.updateShelves()}process(A,e,t,s,n,a,o,i,r){let{sendLevelToReverb:h,sendLevelToChorus:c,sendLevelToDelay:I,level:E,lsCoeffs:B,lsStateL:d,lsStateR:y,hsCoeffs:D,hsStateR:M,hsStateL:F,modDepth:w,modWave:S}=this,P=this.modRate/this.sampleRate,{currentGain:C,phase:x}=this;for(let J=0;J<r;J++){let Y=XA(A[J],B,D,d,F),T=XA(e[J],B,D,y,M),U;switch(S){default:{U=1-4*Math.abs(x-.5);break}case 1:{U=x>.5?-1:-Math.cos((x-.75)*pa);break}case 2:{U=Math.sin(pa*x);break}case 3:{U=1-2*x;break}case 4:{U=2*x-1;break}}(x+=P)>=1&&(x-=1);let q=1-(U/2+.5)*(w/127);C+=(q-C)*ah;let m=Y*E*C,v=T*E*C,H=i+J;t[H]+=m,s[H]+=v;let O=(m+v)*.5;n[J]+=O*h,a[J]+=O*c,o[J]+=O*I}this.phase=x,this.currentGain=C}setParameter(A,e){switch(A){default:break;case 3:{this.modWave=e;break}case 4:{this.modRate=wA.rate1(e);break}case 5:{this.modDepth=e;break}case 19:{this.lowGain=e-64;break}case 20:{this.hiGain=e-64;break}case 22:{this.level=e/127;break}}this.updateShelves()}updateShelves(){NA(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),NA(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}},rh=[hi,Ho,Ii,Xo,Ci,nh,ih],oh=class{preDelay=0;preLPF=.5;inputDiffusion1=.75;inputDiffusion2=.625;decay=.5;decayDiffusion1=.7;decayDiffusion2=.5;damping=.005;excursionRate=.1;excursionDepth=.2;gain=1;sampleRate;lp1=0;lp2=0;lp3=0;excPhase=0;pDWrite=0;taps;pDelay;pDLength;delays=new Array;constructor(A){this.sampleRate=A,this.pDLength=A,this.pDelay=new Float32Array(this.pDLength);let e=[.004771345,.003595309,.012734787,.009307483,.022579886,.149625349,.060481839,.1249958,.030509727,.141695508,.089244313,.106280031];for(let t of e)this.makeDelayLine(t);this.taps=Int16Array.from([.008937872,.099929438,.064278754,.067067639,.066866033,.006283391,.035818689,.011861161,.121870905,.041262054,.08981553,.070931756,.011256342,.004065724],t=>Math.round(t*this.sampleRate))}process(A,e,t,s,n){let a=this.preDelay|0,o=this.inputDiffusion1,i=this.inputDiffusion2,r=this.decay,h=this.decayDiffusion1,c=this.decayDiffusion2,I=1-this.damping,E=this.excursionRate/this.sampleRate,B=this.excursionDepth*this.sampleRate/1e3,d=this.pDWrite;for(let y=0;y<n;y++)this.pDelay[(d+y)%this.pDLength]=A[y];for(let y=0;y<n;y++){this.lp1+=this.preLPF*(this.pDelay[(this.pDLength+this.pDWrite-a+y)%this.pDLength]-this.lp1);let D=this.writeDelay(0,this.lp1-o*this.readDelay(0));D=this.writeDelay(1,o*(D-this.readDelay(1))+this.readDelay(0)),D=this.writeDelay(2,o*D+this.readDelay(1)-i*this.readDelay(2)),D=this.writeDelay(3,i*(D-this.readDelay(3))+this.readDelay(2));let M=i*D+this.readDelay(3),F=B*(1+Math.cos(this.excPhase*6.28)),w=B*(1+Math.sin(this.excPhase*6.2847)),S=this.writeDelay(4,M+r*this.readDelay(11)+h*this.readDelayCAt(4,F));this.writeDelay(5,this.readDelayCAt(4,F)-h*S),this.lp2+=I*(this.readDelay(5)-this.lp2),S=this.writeDelay(6,r*this.lp2-c*this.readDelay(6)),this.writeDelay(7,this.readDelay(6)+c*S),S=this.writeDelay(8,M+r*this.readDelay(7)+h*this.readDelayCAt(8,w)),this.writeDelay(9,this.readDelayCAt(8,w)-h*S),this.lp3+=I*(this.readDelay(9)-this.lp3),S=this.writeDelay(10,r*this.lp3-c*this.readDelay(10)),this.writeDelay(11,this.readDelay(10)+c*S);let P=this.readDelayAt(9,this.taps[0])+this.readDelayAt(9,this.taps[1])-this.readDelayAt(10,this.taps[2])+this.readDelayAt(11,this.taps[3])-this.readDelayAt(5,this.taps[4])-this.readDelayAt(6,this.taps[5])-this.readDelayAt(7,this.taps[6]),C=y+s;e[C]+=P*this.gain;let x=this.readDelayAt(5,this.taps[7])+this.readDelayAt(5,this.taps[8])-this.readDelayAt(6,this.taps[9])+this.readDelayAt(7,this.taps[10])-this.readDelayAt(9,this.taps[11])-this.readDelayAt(10,this.taps[12])-this.readDelayAt(11,this.taps[13]);t[C]+=x*this.gain,this.excPhase+=E;for(let J=0,Y=this.delays[0];J<this.delays.length;Y=this.delays[++J])Y[1]=Y[1]+1&Y[3],Y[2]=Y[2]+1&Y[3]}this.pDWrite=(d+n)%this.pDLength}makeDelayLine(A){let e=Math.round(A*this.sampleRate),t=2**Math.ceil(Math.log2(e));this.delays.push([new Float32Array(t),e-1,0,t-1])}writeDelay(A,e){return this.delays[A][0][this.delays[A][1]]=e}readDelay(A){return this.delays[A][0][this.delays[A][2]]}readDelayAt(A,e){let t=this.delays[A];return t[0][t[2]+e&t[3]]}readDelayCAt(A,e){let t=this.delays[A],s=e-~~e,n=t[3],a=~~e+t[2]-1,o=t[0][a++&n],i=t[0][a++&n],r=t[0][a++&n],h=t[0][a&n],c=(3*(i-r)-o+h)/2,I=2*r+o-(5*i+h)/2,E=(r-o)/2;return((c*s+I)*s+E)*s+i}},Dt=class{feedback=0;gain=1;buffer;bufferLength;writeIndex=0;constructor(A){this.buffer=new Float32Array(A),this.bufferLength=this.buffer.length,this._time=A-5}_time;get time(){return this._time}set time(A){this._time=Math.min(this.bufferLength,A)|0}clear(){this.buffer.fill(0)}process(A,e,t){let s=this.writeIndex,n=this._time,a=this.buffer,o=this.bufferLength,i=this.feedback,r=this.gain;for(let h=0;h<t;h++){let c=s-n;c<0&&(c+=o);let I=a[c];e[h]=I*r,a[s]=A[h]+I*i,++s>=o&&(s=0)}this.writeIndex=s}},hh=1.5,gh=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 oh(A),this.delayLeft=new Dt(A),this.delayRight=new Dt(A)}_delayFeedback=0;get delayFeedback(){return this._delayFeedback}set delayFeedback(A){this._delayFeedback=A,this.updateFeedback()}_character=0;get character(){return this._character}set character(A){switch(this._character=A,this.dattorro.damping=.005,this.characterTimeCoefficient=1,this.characterGainCoefficient=1,this.characterLPFCoefficient=0,this.dattorro.inputDiffusion1=.75,this.dattorro.inputDiffusion2=.625,this.dattorro.decayDiffusion1=.7,this.dattorro.decayDiffusion2=.5,this.dattorro.excursionRate=.5,this.dattorro.excursionDepth=.7,A){case 0:{this.dattorro.damping=.85,this.characterTimeCoefficient=.9,this.characterGainCoefficient=.7,this.characterLPFCoefficient=.2;break}case 1:{this.dattorro.damping=.2,this.characterGainCoefficient=.5,this.characterTimeCoefficient=1,this.dattorro.decayDiffusion2=.64,this.dattorro.decayDiffusion1=.6,this.characterLPFCoefficient=.2;break}case 2:{this.dattorro.damping=.56,this.characterGainCoefficient=.55,this.characterTimeCoefficient=1,this.dattorro.decayDiffusion2=.64,this.dattorro.decayDiffusion1=.6,this.characterLPFCoefficient=.1;break}case 3:{this.dattorro.damping=.6,this.characterGainCoefficient=1,this.characterLPFCoefficient=0,this.dattorro.decayDiffusion2=.7,this.dattorro.decayDiffusion1=.66;break}case 4:{this.characterGainCoefficient=.75,this.dattorro.damping=.2,this.characterLPFCoefficient=.2;break}case 5:{this.characterGainCoefficient=.55,this.dattorro.damping=.65,this.characterTimeCoefficient=.5;break}}this.updateTime(),this.updateGain(),this.updateLowpass(),this.updateFeedback(),this.delayLeft.clear(),this.delayRight.clear()}_time=0;get time(){return this._time}set time(A){this._time=A,this.updateTime()}_preDelayTime=0;get preDelayTime(){return this._preDelayTime}set preDelayTime(A){this._preDelayTime=A,this.dattorro.preDelay=A/1e3*this.sampleRate}_level=0;get level(){return this._level}set level(A){this._level=A,this.updateGain()}_preLowpass=0;get preLowpass(){return this._preLowpass}set preLowpass(A){this._preLowpass=A,this.preLPFfc=8e3*.63**this._preLowpass;let e=Math.exp(-2*Math.PI*this.preLPFfc/this.sampleRate);this.preLPFa=1-e,this.updateLowpass()}process(A,e,t,s,n){switch(this._character){default:{this.dattorro.process(A,e,t,s,n);return}case 6:{let a;if(this._preLowpass>0){let r=this.delayPreLPF,h=this.preLPFz,c=this.preLPFa;for(let I=0;I<n;I++){let E=A[I];h+=c*(E-h),r[I]=h}this.preLPFz=h,a=r}else a=A;this.delayLeft.process(a,this.delayLeftOutput,n);let o=this.delayGain,i=this.delayLeftOutput;for(let r=0,h=s;r<n;r++,h++){let c=i[r]*o;t[h]+=c,e[h]+=c}return}case 7:{let a;if(this._preLowpass>0){let I=this.delayPreLPF,E=this.preLPFz,B=this.preLPFa;for(let d=0;d<n;d++){let y=A[d];E+=B*(y-E),I[d]=E}this.preLPFz=E,a=I}else a=A;let o=this.panDelayFeedback,{delayLeftInput:i,delayLeftOutput:r,delayRightOutput:h}=this;for(let I=0;I<n;I++)i[I]=a[I]+h[I]*o;this.delayLeft.process(i,r,n),this.delayRight.process(r,h,n);let c=this.delayGain;for(let I=0,E=s;I<n;I++,E++)e[E]+=r[I]*c,t[E]+=h[I]*c;return}}}getSnapshot(){return{level:this._level,preLowpass:this._preLowpass,character:this._character,time:this._time,delayFeedback:this._delayFeedback,preDelayTime:this._preDelayTime}}updateFeedback(){let e=1-(1-this._delayFeedback/127)**1.9;this._character===6?this.delayLeft.feedback=e*.73:(this.delayLeft.feedback=this.delayRight.feedback=0,this.panDelayFeedback=e*.73)}updateLowpass(){this.dattorro.preLPF=Math.min(1,.1+(7-this.preLowpass)/14+this.characterLPFCoefficient)}updateGain(){this.dattorro.gain=this._level/348*this.characterGainCoefficient,this.delayGain=this._level/127*hh}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}},ch=1.3,Ih=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*ch,this._level=A}process(A,e,t,s,n,a,o){let i=this.leftDelayBuffer,r=this.rightDelayBuffer,h=this.rateInc,c=i.length,I=this.depthSamples,E=this.delaySamples,B=this.gain,d=this.reverbGain,y=this.delayGain,D=this.feedbackGain,M=this._preLowpass>0,F=this.phase,w=this.write,S=this.preLPFz,P=this.preLPFa;for(let C=0;C<o;C++){let x=A[C];M&&(S+=P*(x-S),x=S);let J=2*Math.abs(F-.5),Y=Math.max(1,Math.min(E+J*I,c)),T=w-Y;T<0&&(T+=c);let U=T|0,q=U+1;q>=c&&(q-=c);let m=T-U,v=i[U]*(1-m)+i[q]*m;i[w]=x+v*D;let H=Math.max(1,Math.min(E+(1-J)*I,c)),O=w-H;O<0&&(O+=c),U=O|0,q=U+1,q>=c&&(q-=c),m=O-U;let b=r[U]*(1-m)+r[q]*m,G=C+a;e[G]+=v*B,t[G]+=b*B;let K=(v+b)/2;s[C]+=K*d,n[C]+=K*y,r[w]=x+b*D,++w>=c&&(w=0),(F+=h)>=1&&(F-=1)}this.write=w,this.phase=F,this.preLPFz=S}getSnapshot(){return{preLowpass:this._preLowpass,depth:this._depth,delay:this._delay,sendLevelToDelay:this._sendLevelToDelay,sendLevelToReverb:this._sendLevelToReverb,rate:this._rate,feedback:this._feedback,level:this._level}}},lh=[{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}],Ch=1.66,Eh=class{preLPFfc=8e3;preLPFa=0;preLPFz=0;delayLeft;delayRight;delayCenter;sampleRate;delayCenterOutput;delayPreLPF;delayCenterTime;delayLeftMultiplier=.04;delayRightMultiplier=.04;gain=0;reverbGain=0;constructor(A,e){this.sampleRate=A,this.delayCenterOutput=new Float32Array(e),this.delayPreLPF=new Float32Array(e),this.delayCenterTime=.34*A,this.delayCenter=new Dt(A),this.delayLeft=new Dt(A),this.delayRight=new Dt(A)}_sendLevelToReverb=0;get sendLevelToReverb(){return this._sendLevelToReverb}set sendLevelToReverb(A){this._sendLevelToReverb=A,this.reverbGain=A/127}_preLowpass=0;get preLowpass(){return this._preLowpass}set preLowpass(A){this._preLowpass=A,this.preLPFfc=8e3*.63**this._preLowpass;let e=Math.exp(-2*Math.PI*this.preLPFfc/this.sampleRate);this.preLPFa=1-e}_levelRight=0;get levelRight(){return this._levelRight}set levelRight(A){this._levelRight=A,this.updateGain()}_level=64;get level(){return this._level}set level(A){this._level=A,this.gain=A/127*Ch}_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 lh)if(A>=t.start&&A<t.end){e=t.timeStart+(A-t.start)*t.resolution;break}this.delayCenterTime=Math.max(2,this.sampleRate*(e/1e3)),this.delayCenter.time=this.delayCenterTime,this.delayLeft.time=this.delayCenterTime*this.delayLeftMultiplier,this.delayRight.time=this.delayCenterTime*this.delayRightMultiplier}process(A,e,t,s,n,a){let o;if(this._preLowpass>0){let I=this.delayPreLPF,E=this.preLPFz,B=this.preLPFa;for(let d=0;d<a;d++){let y=A[d];E+=B*(y-E),I[d]=E}this.preLPFz=E,o=I}else o=A;let{gain:i,reverbGain:r}=this;this.delayCenter.process(o,this.delayCenterOutput,a);let h=this.delayCenterOutput;for(let I=0,E=n;I<a;I++,E++){let B=h[I];s[I]+=B*r;let d=B*i;e[E]+=d,t[E]+=d}for(let I=0;I<a;I++)h[I]+=A[I];let c=this.delayPreLPF;this.delayLeft.process(h,c,a);for(let I=0,E=n;I<a;I++,E++){let B=c[I];e[E]+=B*i,s[I]+=B*r}this.delayRight.process(h,c,a);for(let I=0,E=n;I<a;I++,E++){let B=c[I];t[E]+=B*i,s[I]+=B*r}}getSnapshot(){return{level:this._level,preLowpass:this._preLowpass,timeCenter:this._timeCenter,timeRatioRight:this._timeRatioRight,timeRatioLeft:this._timeRatioLeft,levelCenter:this._levelCenter,levelLeft:this._levelLeft,levelRight:this._levelRight,feedback:this._feedback,sendLevelToReverb:this._sendLevelToReverb}}updateGain(){this.delayCenter.gain=this._levelCenter/127,this.delayLeft.gain=this._levelLeft/127,this.delayRight.gain=this._levelRight/127}},Bh=.01,dh=.05,Qh=class{voices;midiChannels=[];maxBufferSize;voiceBuffer;insertionInputL;insertionInputR;reverbInput;chorusInput;delayInput;delayActive=!1;soundBankManager=new Go(this.updatePresetList.bind(this));keyModifierManager=new br;sampleRate;tunings=new Float32Array(16384).fill(-1);masterParameters={...Ya};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=Mo.bind(this);getMasterParameter=Lo.bind(this);getAllMasterParameters=No.bind(this);systemExclusive=xo.bind(this);voiceCount=0;customChannelNumbers=!1;reverbProcessor;chorusProcessor;delayProcessor;insertionFallback=new hi;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=Bh*(44100/t),this.panSmoothingFactor=dh*(44100/t),Gn.initCache(this.sampleRate);let n=this.maxBufferSize;this.reverbProcessor=s.reverbProcessor??new gh(t,n),this.chorusProcessor=s.chorusProcessor??new Ih(t,n),this.delayProcessor=s.delayProcessor??new Eh(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 rh)this.registerInsertionProcessor(a);this.resetInsertionParams(),this.voices=[];for(let a=0;a<this.masterParameters.voiceCap;a++)this.voices.push(new hn(this.sampleRate))}controllerChange(A,e,t){if(this.customChannelNumbers){for(let s of this.midiChannels)s.rxChannel===A&&s.controllerChange(e,t);return}this.midiChannels[A+this.portSelectChannelOffset].controllerChange(e,t)}noteOn(A,e,t){if(this.customChannelNumbers){for(let s of this.midiChannels)s.rxChannel===A&&s.noteOn(e,t);return}this.midiChannels[A+this.portSelectChannelOffset].noteOn(e,t)}noteOff(A,e){if(this.customChannelNumbers){for(let t of this.midiChannels)t.rxChannel===A&&t.noteOff(e);return}this.midiChannels[A+this.portSelectChannelOffset].noteOff(e)}polyPressure(A,e,t){if(this.customChannelNumbers){for(let s of this.midiChannels)s.rxChannel===A&&s.polyPressure(e,t);return}this.midiChannels[A+this.portSelectChannelOffset].polyPressure(e,t)}channelPressure(A,e){if(this.customChannelNumbers){for(let t of this.midiChannels)t.rxChannel===A&&t.channelPressure(e);return}this.midiChannels[A+this.portSelectChannelOffset].channelPressure(e)}pitchWheel(A,e,t=-1){if(this.customChannelNumbers){for(let s of this.midiChannels)s.rxChannel===A&&s.pitchWheel(e,t);return}this.midiChannels[A+this.portSelectChannelOffset].pitchWheel(e,t)}programChange(A,e){if(this.customChannelNumbers){for(let t of this.midiChannels)t.rxChannel===A&&t.programChange(e);return}this.midiChannels[A+this.portSelectChannelOffset].programChange(e)}assignVoice(){for(let e=0;e<this.masterParameters.voiceCap;e++){let t=this.voices[e];if(!t.isActive)return t.priority=1/0,t}if(this.masterParameters.autoAllocateVoices){let e=new hn(this.sampleRate);return this.voices.push(e),this.masterParameters.voiceCap++,this.callEvent("masterParameterChange",{parameter:"voiceCap",value:this.masterParameters.voiceCap}),e}this.assignVoicePriorities();let A=this.voices[0];for(let e=0;e<this.masterParameters.voiceCap;e++){let t=this.voices[e];t.priority<A.priority&&(A=t)}return A.priority=1/0,A}stopAllChannels(A){k("%cStop all received!",l.info);for(let e of this.midiChannels)e.stopAllNotes(A)}processMessage(A,e=0,t=Li){let s=t.time;s>this.currentTime?(this.eventQueue.push({message:A,channelOffset:e,time:s}),this.eventQueue.sort((n,a)=>n.time-a.time)):this.processMessageInternal(A,e)}destroySynthProcessor(){this.voices.length=0;for(let A of this.midiChannels)A.lockedControllers=[],A.preset=void 0;this.clearCache(),this.midiChannels.length=0,this.soundBankManager.destroy()}getVoices(A,e,t){let s=this.midiChannels[A],n=this.keyModifierManager.hasOverridePatch(A,e),a=s.preset;if(n){let o=this.keyModifierManager.getPatch(A,e);a=this.soundBankManager.getPreset(o,this.masterParameters.midiSystem)}return a?this.getVoicesForPreset(a,e,t):[]}createMIDIChannel(A){let e=new Ro(this,this.defaultPreset,this.midiChannels.length);this.midiChannels.push(e),A&&(this.callEvent("newChannel",void 0),e.sendChannelProperty(),e.setDrums(!0))}resetAllControllers(A=mn){if(this.callEvent("allControllerReset",void 0),this.setMasterParameter("midiSystem",A),this.tunings.fill(-1),this.portSelectChannelOffset=0,this.customChannelNumbers=!1,this.setMIDIVolume(1),this.setReverbMacro(4),this.setChorusMacro(2),this.setDelayMacro(0),this.masterParameters.delayLock||(this.delayActive=!1),this.resetInsertion(),!(!this.drumPreset||!this.defaultPreset))for(let e=0;e<this.midiChannels.length;e++){let t=this.midiChannels[e];t.resetControllers(!1),t.resetPreset();for(let s=0;s<128;s++)this.midiChannels[e].lockedControllers[s]&&this.callEvent("controllerChange",{channel:e,controllerNumber:s,controllerValue:this.midiChannels[e].midiControllers[s]>>7});if(!this.midiChannels[e].lockedControllers[ve+Ae.pitchWheel]){let s=this.midiChannels[e].midiControllers[ve+Ae.pitchWheel];this.callEvent("pitchWheel",{channel:e,pitch:s,midiNote:-1})}if(!this.midiChannels[e].lockedControllers[ve+Ae.channelPressure]){let s=this.midiChannels[e].midiControllers[ve+Ae.channelPressure]>>7;this.callEvent("channelPressure",{channel:e,pressure:s})}}}process(A,e,t=0,s=0){this.processSplit([[A,e]],A,e,t,s)}processSplit(A,e,t,s=0,n=0){if(this.eventQueue.length>0){let r=this.currentTime;for(;this.eventQueue[0]?.time<=r;){let h=this.eventQueue.shift();h&&this.processMessageInternal(h.message,h.channelOffset)}}s=Math.max(s,0);let a=n||A[0][0].length-s;if(a>this.maxBufferSize)throw new Error(`Requested ${a} samples, but maxBufferSize is ${this.maxBufferSize}`);this.reverbInput.fill(0),this.chorusInput.fill(0),this.delayActive&&this.delayInput.fill(0),this.insertionActive&&(this.insertionInputL.fill(0),this.insertionInputR.fill(0));for(let r of this.midiChannels)r.clearVoiceCount();this.voiceCount=0;let o=this.masterParameters.voiceCap,i=A.length;for(let r=0;r<o;r++){let h=this.voices[r],c=this.midiChannels[h.channel];if(!h.isActive||c.isMuted)continue;let I=h.channel%i;c.renderVoice(h,this.currentTime,A[I][0],A[I][1],s,a),c.voiceCount++,this.voiceCount++}if(this.enableEffects){let{chorusInput:r,delayInput:h,reverbInput:c,insertionInputR:I,insertionInputL:E}=this;this.insertionActive&&this.insertionProcessor.process(E,I,e,t,c,r,h,s,a),this.chorusProcessor.process(r,e,t,c,h,s,a),this.delayActive&&this.masterParameters.midiSystem!=="xg"&&this.delayProcessor.process(h,e,t,c,s,a),this.reverbProcessor.process(c,e,t,s,a)}for(let r of this.midiChannels)r.updateVoiceCount();this.currentTime+=a*this.sampleTime}getVoicesForPreset(A,e,t){let s=this.getCachedVoice(A,e,t);if(s!==void 0)return s;let n=new Array;for(let a of A.getVoiceParameters(e,t)){let o=a.sample;if(a.sample.getAudioData()===void 0){ne(`Discarding invalid sample: ${o.name}`);continue}n.push(new oo(a,e,t,this.sampleRate))}return this.setCachedVoice(A,e,t,n),n}clearCache(){this.cachedVoices.clear()}getInsertionSnapshot(){return{type:this.insertionProcessor.type,params:this.insertionParams.slice(),channels:this.midiChannels.map(A=>A.insertionEnabled)}}callEvent(A,e){this.eventCallbackHandler(A,e)}resetInsertionParams(){this.insertionParams.fill(255),this.insertionParams[20]=40,this.insertionParams[21]=0,this.insertionParams[22]=0}resetInsertion(){this.masterParameters.insertionEffectLock||(this.insertionActive=!1,this.insertionProcessor=this.insertionFallback,this.insertionProcessor.reset(),this.insertionProcessor.sendLevelToReverb=40/127*zt,this.insertionProcessor.sendLevelToChorus=0,this.insertionProcessor.sendLevelToDelay=0,this.resetInsertionParams(),this.callEvent("effectChange",{effect:"insertion",parameter:0,value:this.insertionProcessor.type}))}setMIDIVolume(A){this.midiVolume=Math.pow(A,Math.E)}setMasterTuning(A){A=Math.round(A);for(let e of this.midiChannels)e.setCustomController(Ce.masterTuning,A)}setReverbMacro(A){if(this.masterParameters.reverbLock)return;let e=this.reverbProcessor;switch(e.level=64,e.preDelayTime=0,e.character=A,A){case 0:{e.character=0,e.preLowpass=3,e.time=80,e.delayFeedback=0,e.preDelayTime=0;break}case 1:{e.preLowpass=4,e.time=56,e.delayFeedback=0;break}case 2:{e.preLowpass=0,e.time=72,e.delayFeedback=0;break}case 3:{e.preLowpass=4,e.time=72,e.delayFeedback=0;break}case 4:{e.preLowpass=0,e.time=64,e.delayFeedback=0;break}case 5:{e.preLowpass=0,e.time=88,e.delayFeedback=0;break}case 6:{e.preLowpass=0,e.time=32,e.delayFeedback=40;break}case 7:{e.preLowpass=0,e.time=64,e.delayFeedback=32;break}default:{ne(`Invalid reverb macro: ${A}`);return}}this.callEvent("effectChange",{effect:"reverb",parameter:"macro",value:A})}setChorusMacro(A){if(this.masterParameters.chorusLock)return;let e=this.chorusProcessor;switch(e.level=64,e.preLowpass=0,e.delay=127,e.sendLevelToDelay=0,e.sendLevelToReverb=0,A){case 0:{e.feedback=0,e.delay=112,e.rate=3,e.depth=5;break}case 1:{e.feedback=5,e.delay=80,e.rate=9,e.depth=19;break}case 2:{e.feedback=8,e.delay=80,e.rate=3,e.depth=19;break}case 3:{e.feedback=16,e.delay=64,e.rate=9,e.depth=16;break}case 4:{e.feedback=64,e.delay=127,e.rate=2,e.depth=24;break}case 5:{e.feedback=112,e.delay=127,e.rate=1,e.depth=5;break}case 6:{e.feedback=0,e.depth=127,e.rate=0,e.depth=127;break}case 7:{e.feedback=80,e.depth=127,e.rate=0,e.depth=127;break}default:{ne(`Invalid chorus macro: ${A}`);return}}this.callEvent("effectChange",{effect:"chorus",parameter:"macro",value:A})}setDelayMacro(A){if(this.masterParameters.delayLock)return;let e=this.delayProcessor;switch(e.level=64,e.preLowpass=0,e.sendLevelToReverb=0,e.levelRight=e.levelLeft=0,e.levelCenter=127,A){case 0:{e.timeCenter=97,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=80;break}case 1:{e.timeCenter=106,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=80;break}case 2:{e.timeCenter=115,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=72;break}case 3:{e.timeCenter=83,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=72;break}case 4:{e.timeCenter=105,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=125,e.levelRight=60,e.feedback=74;break}case 5:{e.timeCenter=109,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=125,e.levelRight=60,e.feedback=71;break}case 6:{e.timeCenter=115,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=120,e.levelRight=64,e.feedback=73;break}case 7:{e.timeCenter=93,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=120,e.levelRight=64,e.feedback=72;break}case 8:{e.timeCenter=109,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=114,e.levelRight=60,e.feedback=61,e.sendLevelToReverb=36;break}case 9:{e.timeCenter=110,e.timeRatioLeft=21,e.timeRatioRight=32,e.levelCenter=97,e.levelLeft=127,e.levelRight=67,e.feedback=40;break}default:{ne(`Invalid delay macro: ${A}`);return}}this.callEvent("effectChange",{effect:"delay",parameter:"macro",value:A})}getCachedVoice(A,e,t){return this.cachedVoices.get(this.getCachedVoiceIndex(A,e,t))}setCachedVoice(A,e,t,s){this.cachedVoices.set(this.getCachedVoiceIndex(A,e,t),s)}registerInsertionProcessor(A){let e=new A(this.sampleRate,this.maxBufferSize);this.insertionEffects.set(e.type,e)}processMessageInternal(A,e){let t=un(A[0]),s=t.channel+e;switch(t.status){case N.noteOn:{let n=A[2];n>0?this.noteOn(s,A[1],n):this.noteOff(s,A[1]);break}case N.noteOff:{this.noteOff(s,A[1]);break}case N.pitchWheel:{this.pitchWheel(s,A[2]<<7|A[1]);break}case N.controllerChange:{this.controllerChange(s,A[1],A[2]);break}case N.programChange:{this.programChange(s,A[1]);break}case N.polyPressure:{this.polyPressure(s,A[1],A[2]);break}case N.channelPressure:{this.channelPressure(s,A[1]);break}case N.systemExclusive:{this.systemExclusive(new $(A.slice(1)),e);break}case N.reset:{this.stopAllChannels(!1),this.resetAllControllers();break}default:break}}assignVoicePriorities(){if(this.lastPriorityAssignmentTime===this.currentTime)return;k("%cPolyphony exceeded, stealing voices",l.warn),this.lastPriorityAssignmentTime=this.currentTime;let A=this.masterParameters.voiceCap;for(let e=0;e<A;e++){let t=this.voices[e];t.priority=0,this.midiChannels[t.channel].drumChannel&&(t.priority+=5),t.isInRelease&&(t.priority-=5),t.priority+=t.velocity/25,t.priority-=t.volEnv.state,t.isInRelease&&(t.priority-=5),t.priority-=t.volEnv.attenuationCb/200}}updatePresetList(){let A=this.soundBankManager.presetList;this.clearCache(),this.callEvent("presetListChange",A),this.getDefaultPresets();for(let e of this.midiChannels)e.setPresetLock(!1);this.resetAllControllers()}getDefaultPresets(){this.defaultPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!1},"xg"),this.drumPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!0},"gs")}getCachedVoiceIndex(A,e,t){let s=A.bankMSB,n=A.bankLSB,{isGMGSDrum:a,program:o}=A;return a&&(s=128,n=0),s+n*128+o*16384+2097152*e+268435456*t}},Ei=class{processorInitialized=Es.isInitialized;sampleRate;onEventCall;process;processSplit;systemExclusive;controllerChange;noteOn;noteOff;polyPressure;channelPressure;pitchWheel;programChange;processMessage;synthCore;savedSnapshot;constructor(A,e={}){let t=fn(e,wr);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 Qh(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<Ra;n++)this.synthCore.createMIDIChannel(!1);this.processorInitialized.then(()=>{k("%cSpessaSynth is ready!",l.recognized)})}get enableEffects(){return this.synthCore.enableEffects}set enableEffects(A){this.synthCore.enableEffects=A}get enableEventSystem(){return this.synthCore.enableEventSystem}set enableEventSystem(A){this.synthCore.enableEventSystem=A}get midiChannels(){return this.synthCore.midiChannels}get totalVoicesAmount(){return this.synthCore.voiceCount}get currentSynthTime(){return this.synthCore.currentTime}get reverbProcessor(){return this.synthCore.reverbProcessor}get chorusProcessor(){return this.synthCore.chorusProcessor}get delayProcessor(){return this.synthCore.delayProcessor}get soundBankManager(){return this.synthCore.soundBankManager}get keyModifierManager(){return this.synthCore.keyModifierManager}renderAudio(A,e,t,s=0,n=0){let a=this.synthCore.maxBufferSize;if(n>a){let o=0;for(;o<n;){let i=Math.min(a,n-o);this.synthCore.process(A[0],A[1],s+o,i),o+=i}}else this.synthCore.process(A[0],A[1],s,n)}renderAudioSplit(A,e,t,s=0,n=0){let a=this.synthCore.maxBufferSize;if(n>a){let o=0;for(;o<n;){let i=Math.min(a,n-o);this.synthCore.processSplit(t,A[0],A[1],s+o,i),o+=i}}else this.synthCore.processSplit(t,A[0],A[1],s,n)}onMissingPreset=(A,e)=>{ne(`No preset found for ${CA.toMIDIString(A)}! Did you forget to add a sound bank?`)};setMasterParameter(A,e){this.synthCore.setMasterParameter(A,e)}getMasterParameter(A){return this.synthCore.getMasterParameter(A)}getAllMasterParameters(){return this.synthCore.getAllMasterParameters()}resetAllControllers(A=mn){this.synthCore.resetAllControllers(A)}applySynthesizerSnapshot(A){this.savedSnapshot=A,A.apply(this),k("%cFinished applying snapshot!",l.info),this.resetAllControllers()}getSnapshot(){return Rn.create(this)}getInsertionSnapshot(){return this.synthCore.getInsertionSnapshot()}setEmbeddedSoundBank(A,e){let t=Ft.fromArrayBuffer(A);this.synthCore.soundBankManager.addSoundBank(t,Yt,e);let s=this.synthCore.soundBankManager.priorityOrder;s.pop(),s.unshift(Yt),this.synthCore.soundBankManager.priorityOrder=s,this.savedSnapshot!==void 0&&this.applySynthesizerSnapshot(this.savedSnapshot),k(`%cEmbedded sound bank set at offset %c${e}`,l.recognized,l.value)}clearEmbeddedBank(){this.synthCore.soundBankManager.soundBankList.some(A=>A.id===Yt)&&this.synthCore.soundBankManager.deleteSoundBank(Yt)}createMIDIChannel(){this.synthCore.createMIDIChannel(!0)}stopAllChannels(A=!1){this.synthCore.stopAllChannels(A)}destroySynthProcessor(){this.synthCore.destroySynthProcessor()}killVoices(A){ne(`killVoices is deprecated, don't use it! Amount requested: ${A}`)}clearCache(){this.synthCore.clearCache()}getVoicesForPreset(A,e,t){return this.synthCore.getVoicesForPreset(A,e,t)}callEvent(A,e){this.onEventCall?.({type:A,data:e})}missingPreset(A,e){return this.onMissingPreset(A,e)}};var Qs=vA.consoleColors;var Bi="spessasynth-worklet-processor";function di(A,e){return{...e,...A}}var Qi={skipToFirstNoteOn:!0,initialPlaybackRate:1};var Tn=class extends ls{events=[];constructor(e){super(),super.copyFrom(e),this.events=[]}},fs=class A extends ZA{tracks;embeddedSoundBank=void 0;embeddedSoundBankSize;constructor(e){super(),super.copyMetadataFrom(e),this.tracks=e.tracks.map(t=>new Tn(t)),this.embeddedSoundBankSize=e instanceof A?e.embeddedSoundBankSize:e?.embeddedSoundBank?.byteLength}};var us={shuffleOn:1,shuffleOff:2,index:3};var fi=1,ms=class{synthesizer;sequencers=new Array;post;lastSequencerSync=0;alive=!1;enableEventSystem;constructor(e,t,s){this.synthesizer=new Ei(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 Ha(this.synthesizer),t=this.sequencers.length;this.sequencers.push(e),e.onEventCall=s=>{if(this.enableEventSystem){if(s.type==="songListChange"){let a=s.data.newSongList.map(o=>new fs(o));this.post({type:"sequencerReturn",data:{type:s.type,data:{newSongList:a,shuffledSongIndexes:e.shuffledSongIndexes},id:t},currentTime:this.synthesizer.currentSynthTime});return}this.post({type:"sequencerReturn",data:{...s,id:t},currentTime:this.synthesizer.currentSynthTime})}}}postReady(e,t,s=[]){this.post({type:"isFullyInitialized",data:{type:e,data:t},currentTime:this.synthesizer.currentSynthTime},s)}postProgress(e,t){this.post({type:"renderingProgress",data:{type:e,data:t},currentTime:this.synthesizer.currentSynthTime})}destroy(){this.synthesizer.destroySynthProcessor(),delete this.synthesizer,delete this.sequencers}handleMessage(e){let t=e.channelNumber,s;if(t>=0&&(s=this.synthesizer.midiChannels[t],s===void 0)){vA.SpessaSynthWarn(`Trying to access channel ${t} which does not exist... ignoring!`);return}switch(e.type){case"midiMessage":{this.synthesizer.processMessage(e.data.messageData,e.data.channelOffset,e.data.options);break}case"customCcChange":{s?.setCustomController(e.data.ccNumber,e.data.ccValue);break}case"ccReset":{t===gt?this.synthesizer.resetAllControllers():s?.resetControllers();break}case"stopAll":{t===gt?this.synthesizer.stopAllChannels(e.data===1):s?.stopAllNotes(e.data===1);break}case"muteChannel":{s?.muteChannel(e.data);break}case"addNewChannel":{this.synthesizer.createMIDIChannel();break}case"setMasterParameter":{this.synthesizer.setMasterParameter(e.data.type,e.data.data);break}case"setDrums":{s?.setDrums(e.data);break}case"transposeChannel":{s?.transposeChannel(e.data.semitones,e.data.force);break}case"lockController":{if(e.data.controllerNumber===gt)s?.setPresetLock(e.data.isLocked);else{if(!s)return;s.lockedControllers[e.data.controllerNumber]=e.data.isLocked}break}case"sequencerSpecific":{let n=this.sequencers[e.data.id];if(!n)return;let a=e.data;switch(a.type){default:break;case"loadNewSongList":{try{let i=a.data.map(r=>"duration"in r?ZA.copyFrom(r):ZA.fromArrayBuffer(r.binary,r.fileName));n.loadNewSongList(i)}catch(o){console.error(o),this.post({type:"sequencerReturn",data:{type:"midiError",data:o,id:e.data.id},currentTime:this.synthesizer.currentSynthTime})}break}case"pause":{n.pause();break}case"play":{n.play();break}case"setTime":{n.currentTime=a.data;break}case"changeMIDIMessageSending":{n.externalMIDIPlayback=a.data;break}case"setPlaybackRate":{n.playbackRate=a.data;break}case"setLoopCount":{n.loopCount=a.data;break}case"changeSong":{switch(a.data.changeType){case us.shuffleOff:{n.shuffleMode=!1;break}case us.shuffleOn:{n.shuffleMode=!0;break}case us.index:{a.data.data!==void 0&&(n.songIndex=a.data.data);break}}break}case"getMIDI":{if(!n.midiData)throw new Error("No MIDI is loaded!");this.post({type:"sequencerReturn",data:{type:"getMIDI",data:n.midiData,id:e.data.id},currentTime:this.synthesizer.currentSynthTime});break}case"setSkipToFirstNote":{n.skipToFirstNoteOn=a.data;break}}break}case"soundBankManager":{try{let n=this.synthesizer.soundBankManager,a=e.data,o;switch(a.type){case"addSoundBank":{o=Ft.fromArrayBuffer(a.data.soundBankBuffer),n.addSoundBank(o,a.data.id,a.data.bankOffset),this.postReady("soundBankManager",null);break}case"deleteSoundBank":{n.deleteSoundBank(a.data),this.postReady("soundBankManager",null);break}case"rearrangeSoundBanks":n.priorityOrder=a.data,this.postReady("soundBankManager",null)}}catch(n){this.post({type:"soundBankError",data:n,currentTime:this.synthesizer.currentSynthTime})}break}case"keyModifierManager":{let n=e.data,a=this.synthesizer.keyModifierManager;switch(n.type){default:return;case"addMapping":{a.addMapping(n.data.channel,n.data.midiNote,n.data.mapping);break}case"clearMappings":{a.clearMappings();break}case"deleteMapping":a.deleteMapping(n.data.channel,n.data.midiNote)}break}case"requestSynthesizerSnapshot":{let n=Rn.create(this.synthesizer);this.postReady("synthesizerSnapshot",n);break}case"requestNewSequencer":{this.createNewSequencer();break}case"setLogLevel":{ba(e.data.enableInfo,e.data.enableWarning,e.data.enableGroup);break}case"destroyWorklet":{this.alive=!1,this.synthesizer.destroySynthProcessor(),this.destroy();break}default:{vA.SpessaSynthWarn("Unrecognized event!",e);break}}}};var ps=class extends ms{alive=!0;oneOutputMode;port;constructor(e,t,s,n){super(e,{enableEffects:!n.oneOutput,enableEventSystem:n?.enableEventSystem,initialTime:t},(a,o)=>{s.postMessage(a,o)}),this.port=s,this.oneOutputMode=n.oneOutput,this.synthesizer.processorInitialized.then(()=>{this.port.onmessage=a=>this.handleMessage(a.data),this.postReady("sf3Decoder",null)})}process(e,t){if(!this.alive)return!1;for(let n of this.sequencers)n.processTick();if(this.oneOutputMode){let n=t[0],a=[];for(let o=0;o<32;o+=2)a.push([n[o],n[o+1]]);this.synthesizer.enableEffects=!1,this.synthesizer.processSplit(a,n[0],n[0])}else this.synthesizer.processSplit(t.slice(1),t[0][0],t[0][1]);let s=this.synthesizer.currentSynthTime;if(this.enableEventSystem&&s-this.lastSequencerSync>fi){for(let n=0;n<this.sequencers.length;n++)this.post({type:"sequencerReturn",data:{type:"sync",data:this.sequencers[n].currentTime,id:n},currentTime:s});this.lastSequencerSync=s}return!0}handleMessage(e){if(e.type==="startOfflineRender"){this.startOfflineRender(e.data);return}super.handleMessage(e)}startOfflineRender(e){this.sequencers.length===0&&this.createNewSequencer();let t=this.sequencers[0];for(let[n,a]of e.soundBankList.entries())try{this.synthesizer.soundBankManager.addSoundBank(Ft.fromArrayBuffer(a.soundBankBuffer),`bank-${n}`,a.bankOffset)}catch(o){this.post({type:"soundBankError",data:o,currentTime:this.synthesizer.currentSynthTime})}e.snapshot!==void 0&&this.synthesizer.applySynthesizerSnapshot(e.snapshot),vA.SpessaSynthInfo("%cRendering enabled! Starting render.",Qs.info),t.loopCount=e.loopCount,this.synthesizer.setMasterParameter("autoAllocateVoices",!0);let s=di(e.sequencerOptions,Qi);t.skipToFirstNoteOn=s.skipToFirstNoteOn,t.playbackRate=s.initialPlaybackRate;try{t.loadNewSongList([ZA.copyFrom(e.midiSequence)]),t.play()}catch(n){console.error(n),this.post({type:"sequencerReturn",data:{type:"midiError",data:n,id:0},currentTime:this.synthesizer.currentSynthTime})}this.postReady("startOfflineRender",null)}};var Un=class extends AudioWorkletProcessor{process;core;constructor(e){super(),this.core=new ps(sampleRate,currentTime,this.port,e.processorOptions),this.process=this.core.process.bind(this.core)}};registerProcessor(Bi,Un);vA.SpessaSynthInfo("%cProcessor successfully registered!",Qs.recognized);
20
+ %c${this.instruments.length}%c instruments and %c${this.samples.length}%c samples.`,l.info,l.recognized,l.info,l.recognized,l.info,l.recognized,l.info,l.recognized,l.info),j()}verifyHeader(A,e){A.header.toLowerCase()!==e.toLowerCase()&&(j(),this.parsingError(`Invalid chunk header! Expected "${e.toLowerCase()}" got "${A.header.toLowerCase()}"`))}verifyText(A,e){A.toLowerCase()!==e.toLowerCase()&&(j(),this.parsingError(`Invalid FourCC: Expected "${e.toLowerCase()}" got "${A.toLowerCase()}"\``))}},Ft=class{static fromArrayBuffer(A){let e=A.slice(8,12),t=new $(e);return pe(t,4).toLowerCase()==="dls "?this.loadDLS(A):new ro(A,!1)}static loadDLS(A){return si.read(A).toSF()}},os=class ai extends Fe{isEffectModulator;isDefaultResonantModulator;isModWheelModulator;constructor(e,t,s,n,a,o,i,r){super(e,t,s,n,a),this.isEffectModulator=o,this.isDefaultResonantModulator=i,this.isModWheelModulator=r}static fromData(e,t,s,n,a){let o=e.toSourceEnum(),i=t.toSourceEnum(),r=(o===219||o===221)&&i===0&&(s===g.reverbEffectsSend||s===g.chorusEffectsSend),h=o===Xa&&i===0&&s===g.initialFilterQ,c=(e.isCC&&e.index===u.modulationWheel||t.isCC&&t.index===u.modulationWheel)&&(s===g.modLfoToPitch||s===g.vibLfoToPitch);return new ai(e,t,s,n,a,r,h,c)}static fromModulator(e){return this.fromData(e.primarySource,e.secondarySource,e.destination,e.transformAmount,e.transformType)}},oo=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(os.fromModulator.bind(os)),this.generators=a,this.rootKey=n.originalKey,a[g.overridingRootKey]>-1&&(this.rootKey=a[g.overridingRootKey]),this.targetKey=e,a[g.keyNum]>-1&&(this.targetKey=a[g.keyNum]),this.velocity=t,a[g.velocity]>-1&&(this.velocity=a[g.velocity]),this.exclusiveClass=a[g.exclusiveClass],this.loopStart=n.loopStart,this.loopEnd=n.loopEnd,this.sampleData=n.getAudioData(),this.playbackStep=n.sampleRate/s*Math.pow(2,n.pitchCorrection/1200),this.loopingMode=a[g.sampleModes]}},ho=Math.PI*2;function go(A,e,t){if(t<A)return 0;let s=t-A;return Math.sin(ho*e*s)}var ga=Math.PI/2,ts=-500,ii=500,Ln=ii-ts,ri=new Float32Array(Ln+1),oi=new Float32Array(Ln+1);for(let A=ts;A<=ii;A++){let e=(A-ts)/Ln,t=A-ts;ri[t]=Math.cos(ga*e),oi[t]=Math.sin(ga*e)}function co(A,e,t,s,n,a){if(!A.isInRelease&&e>=A.releaseStartTime&&(A.isInRelease=!0,A.volEnv.startRelease(A),A.modEnv.startRelease(A),A.loopingMode===3&&(A.wavetable.isLooping=!1)),A.hasRendered=!0,!A.isActive)return;let o=this.synthCore,i=o.sampleRate,r=A.modulatedGenerators,h=A.targetKey,c=A.pitchOffset+r[g.fineTune]+this.octaveTuning[A.midiNote]+this.channelTuningCents,I=r[g.coarseTune],E=o.tunings[this.preset.program*128+A.realKey];if(E!==-1&&(h=Math.trunc(E),c+=(E-h)*100),A.portamentoFromKey>-1){let m=Math.min((e-A.startTime)/A.portamentoDuration,1),v=h-A.portamentoFromKey;I-=v*(1-m)}c+=(h-A.rootKey)*r[g.scaleTuning];let B=0,d=0,y=A.gainModifier*(1+r[g.amplitude]/1e3);if(e>=A.vibLfoStartTime){let m=r[g.vibLfoToPitch],v=r[g.vibLfoToFilterFc],H=r[g.vibLfoAmplitudeDepth];if(m!==0||v!==0||H!==0){let b=Math.max(0,rn(r[g.freqVibLFO])+r[g.vibLfoRate]/100)*a/i,G=1-4*Math.abs(A.vibLfoPhase-.5);(A.vibLfoPhase+=b)>=1&&(A.vibLfoPhase-=1),c+=G*m,B+=G*v,y*=1-(G+1)/2*(H/1e3)}}if(e>=A.modLfoStartTime){let m=r[g.modLfoToPitch],v=r[g.modLfoToVolume],H=r[g.modLfoToFilterFc],O=r[g.modLfoAmplitudeDepth];if(m!==0||H!==0||v!==0||O!==0){let G=Math.max(0,rn(r[g.freqModLFO])+r[g.modLfoRate]/100)*a/i,K=1-4*Math.abs(A.modLfoPhase-.5);(A.modLfoPhase+=G)>=1&&(A.modLfoPhase-=1),c+=K*m,d+=-K*v,B+=K*H,y*=1-(K+1)/2*(O/1e3)}}this.midiControllers[u.modulationWheel]===0&&this.channelVibrato.depth>0&&(c+=go(A.startTime+this.channelVibrato.delay,this.channelVibrato.rate,e)*this.channelVibrato.depth);let D=r[g.modEnvToPitch],M=r[g.modEnvToFilterFc];if(M!==0||D!==0){let m=A.modEnv.process(A,e);B+=m*M,c+=m*D}d-=A.resonanceOffset;let F=c+I*100|0;F!==A.tuningCents&&(A.tuningCents=F,A.tuningRatio=Math.pow(2,F/1200));let w=is(r[g.initialAttenuation])*is(d),S=o.voiceBuffer;if(A.loopingMode===2&&!A.isInRelease){A.isActive=A.volEnv.process(a,S,w);return}A.isActive=A.wavetable.process(a,A.tuningRatio,S);{let m=A.filter,v=r[g.initialFilterFc];m.initialized?m.currentInitialFc+=(v-m.currentInitialFc)*Gn.smoothingConstant:(m.initialized=!0,m.currentInitialFc=v);let H=m.currentInitialFc+B,O=r[g.initialFilterQ];if(m.currentInitialFc>13499&&H>13499&&O===0)m.currentInitialFc=13500;else{(Math.abs(m.lastTargetCutoff-H)>1||m.resonanceCb!==O)&&(m.lastTargetCutoff=H,m.resonanceCb=O,m.calculateCoefficients(H));let{a0:b,a1:G,a2:K,a3:ee,a4:ie}=m,{x1:Ee,x2:oe,y1:le,y2:re}=m;for(let Ie=0;Ie<a;Ie++){let ke=S[Ie],_=b*ke+G*Ee+K*oe-ee*le-re*ie;oe=Ee,Ee=ke,re=le,le=_,S[Ie]=_}m.x1=Ee,m.x2=oe,m.y1=le,m.y2=re}}let P=A.volEnv.process(a,S,w);A.isActive=A.isActive&&P;let C;A.overridePan?C=A.overridePan:(A.currentPan+=(r[g.pan]-A.currentPan)*o.panSmoothingFactor,C=A.currentPan);let x=o.masterParameters.masterGain*o.midiVolume*y,J=C+500|0,Y=ri[J]*x*o.panLeft,T=oi[J]*x*o.panRight;if(this.insertionEnabled){let m=o.insertionInputL,v=o.insertionInputR;for(let H=0;H<a;H++){let O=S[H];m[H]+=Y*O,v[H]+=T*O}return}for(let m=0;m<a;m++){let v=S[m],H=m+n;t[H]+=Y*v,s[H]+=T*v}if(!o.enableEffects)return;let U=r[g.reverbEffectsSend]*A.reverbSend;if(U>0){let m=o.masterParameters.reverbGain*x*(U/1e3),v=o.reverbInput;for(let H=0;H<a;H++)v[H]+=m*S[H]}let q=r[g.chorusEffectsSend]*A.chorusSend;if(q>0){let m=o.masterParameters.chorusGain*(q/1e3)*x,v=o.chorusInput;for(let H=0;H<a;H++)v[H]+=m*S[H]}if(o.delayActive){let m=this.midiControllers[u.variationDepth]*A.delaySend;if(m>0){let v=x*o.masterParameters.delayGain*((m>>7)/127),H=o.delayInput;for(let O=0;O<a;O++)H[O]+=v*S[O]}}}var MA={pitchWheelRange:0,fineTuning:1,coarseTuning:2,modulationDepth:5,resetParameters:16383},Ve={partParameter:1,drumPitch:24,drumPitchFine:25,drumLevel:26,drumPan:28,drumReverb:29,drumChorus:30,drumDelay:31,awe32:127,SF2:120},GA={vibratoRate:8,vibratoDepth:9,vibratoDelay:10,TVFFilterCutoff:32,TVFFilterResonance:33,EGAttackTime:99,EGDecayTime:100,EGReleaseTime:102},He=(A,e,t,s)=>{s.length>0&&(s=" "+s),k(`%c${e} for %c${A}%c is now set to %c${t}%c${s}.`,l.info,l.recognized,l.info,l.value,l.info)},Ws=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 Io(A){switch(this.midiControllers[u.dataEntryMSB]=A<<7,this.dataEntryState){default:case _e.Idle:break;case _e.NRPCoarse:case _e.NRPFine:{let e=this.midiControllers[u.nonRegisteredParameterMSB]>>7,t=this.midiControllers[u.nonRegisteredParameterLSB]>>7,s=this.midiControllers[u.dataEntryLSB]>>7;if(this.synthCore.masterParameters.drumLock&&e>=Ve.drumPitch&&e<=Ve.drumDelay)return;switch(e){default:{if(A===64)return;k(`%cUnrecognized NRPN for %c${this.channel}%c: %c(0x${t.toString(16).toUpperCase()} 0x${t.toString(16).toUpperCase()})%c data value: %c${A}`,l.warn,l.recognized,l.warn,l.unrecognized,l.warn,l.value);break}case Ve.partParameter:{let n=this.synthCore.masterParameters.nprnParamLock,a=this.synthCore.masterParameters.customVibratoLock||n;switch(t){default:{if(A===64)return;k(`%cUnrecognized NRPN for %c${this.channel}%c: %c(0x${e.toString(16)} 0x${t.toString(16)})%c data value: %c${A}`,l.warn,l.recognized,l.warn,l.unrecognized,l.warn,l.value);break}case GA.vibratoRate:{if(this.sysExModulators.active){this.controllerChange(u.vibratoRate,A);return}if(a||A===64)return;Ws(this),this.channelVibrato.rate=A/64*8,He(this.channel,"Vibrato rate",`${A} = ${this.channelVibrato.rate}`,"Hz");break}case GA.vibratoDepth:{if(a||A===64)return;Ws(this),this.channelVibrato.depth=A/2,He(this.channel,"Vibrato depth",`${A} = ${this.channelVibrato.depth}`,"cents of detune");break}case GA.vibratoDelay:{if(a||A===64)return;Ws(this),this.channelVibrato.delay=A/64/3,He(this.channel,"Vibrato delay",`${A} = ${this.channelVibrato.delay}`,"seconds");break}case GA.TVFFilterCutoff:{if(n)return;this.controllerChange(u.brightness,A),He(this.channel,"Filter cutoff",A.toString(),"");break}case GA.TVFFilterResonance:{if(n)return;this.controllerChange(u.filterResonance,A),He(this.channel,"Filter resonance",A.toString(),"");break}case GA.EGAttackTime:{if(n)return;this.controllerChange(u.attackTime,A),He(this.channel,"EG attack time",A.toString(),"");break}case GA.EGDecayTime:{if(n)return;this.controllerChange(u.decayTime,A),He(this.channel,"EG decay time",A.toString(),"");break}case GA.EGReleaseTime:{if(n)return;this.controllerChange(u.releaseTime,A),He(this.channel,"EG release time",A.toString(),"");break}}break}case Ve.drumPitch:{let n=this.channelSystem==="xg"||this.patch.bankLSB===1?(A-64)*100:(A-64)*50;this.drumParams[t].pitch=n,He(this.channel,`Drum ${t} pitch`,n,"cents");break}case Ve.drumPitchFine:{let n=A-64;this.drumParams[t].pitch+=n,He(this.channel,`Drum ${t} pitch fine`,this.drumParams[t].pitch,"cents");break}case Ve.drumLevel:{this.drumParams[t].gain=A/120,He(this.channel,`Drum ${t} level`,A,"");break}case Ve.drumPan:{this.drumParams[t].pan=A,He(this.channel,`Drum ${t} pan`,A,"");break}case Ve.drumReverb:{this.drumParams[t].reverbGain=A/127,He(this.channel,`Drum ${t} reverb level`,A,"");break}case Ve.drumChorus:{this.drumParams[t].chorusGain=A/127,He(this.channel,`Drum ${t} chorus level`,A,"");break}case Ve.drumDelay:{this.drumParams[t].delayGain=A/127,He(this.channel,`Drum ${t} delay level`,A,"");break}case Ve.awe32:break;case Ve.SF2:{if(t>100)break;let n=this.customControllers[Ce.sf2NPRNGeneratorLSB],a=(A<<7|s)-8192;this.setGeneratorOffset(n,a);break}}break}case _e.RPCoarse:case _e.RPFine:{let e=this.midiControllers[u.registeredParameterMSB]|this.midiControllers[u.registeredParameterLSB]>>7;switch(e){default:{k(`%cUnrecognized RPN for %c${this.channel}%c: %c(0x${e.toString(16)})%c data value: %c${A}`,l.warn,l.recognized,l.warn,l.unrecognized,l.warn,l.value);break}case MA.pitchWheelRange:{this.midiControllers[ve+Ae.pitchWheelRange]=A<<7,He(this.channel,"Pitch wheel range",A.toString(),"semitones");break}case MA.coarseTuning:{let t=A-64;this.setCustomController(Ce.channelTuningSemitones,t),He(this.channel,"Coarse tuning",t.toString(),"semitones");break}case MA.fineTuning:{this.setTuning(A-64,!1);break}case MA.modulationDepth:{this.setModulationDepth(A*100);break}case MA.resetParameters:{this.resetParameters();break}}}}}var lo=[g.delayModLFO,g.freqModLFO,g.delayVibLFO,g.freqVibLFO,g.delayModEnv,g.attackModEnv,g.holdModEnv,g.decayModEnv,g.sustainModEnv,g.releaseModEnv,g.delayVolEnv,g.attackVolEnv,g.holdVolEnv,g.decayVolEnv,g.sustainVolEnv,g.releaseVolEnv,g.fineTune,g.modLfoToPitch,g.vibLfoToPitch,g.modEnvToPitch,g.modLfoToVolume,g.initialFilterFc,g.initialFilterQ,g.modLfoToFilterFc,g.modEnvToFilterFc,g.chorusEffectsSend,g.reverbEffectsSend],kA=(A,e,t)=>Math.max(e,Math.min(t,A)),Zt=A=>Math.max(-32768,1200*Math.log2(A/1e3)),Co=A=>6900+1200*Math.log2(A/440);function Eo(A,e,t){let s=t<<7|e;s-=8192;let n=lo[A];n||ne(`Invalid AWE32 LSB: %c${A}`,l.unrecognized);let a,o,i,r;switch(n){default:break;case g.delayModLFO:case g.delayVibLFO:case g.delayVolEnv:case g.delayModEnv:{a=4*kA(s,0,5900),this.setGeneratorOverride(n,Zt(a));break}case g.attackVolEnv:case g.attackModEnv:{a=kA(s,0,5940),this.setGeneratorOverride(n,Zt(a));break}case g.holdVolEnv:case g.holdModEnv:{a=kA(s,0,8191),this.setGeneratorOverride(n,Zt(a));break}case g.decayModEnv:case g.decayVolEnv:case g.releaseVolEnv:case g.releaseModEnv:{a=4*kA(s,0,5940),this.setGeneratorOverride(n,Zt(a));break}case g.freqVibLFO:case g.freqModLFO:{o=.084*e,this.setGeneratorOverride(n,Co(o),!0);break}case g.sustainVolEnv:case g.sustainModEnv:{i=e*7.5,this.setGeneratorOverride(n,i);break}case g.fineTune:{this.setGeneratorOverride(n,s,!0);break}case g.modLfoToPitch:case g.vibLfoToPitch:{r=kA(s,-127,127)*9.375,this.setGeneratorOverride(n,r,!0);break}case g.modEnvToPitch:{r=kA(s,-127,127)*9.375,this.setGeneratorOverride(n,r);break}case g.modLfoToVolume:{i=1.875*e,this.setGeneratorOverride(n,i,!0);break}case g.initialFilterFc:{let h=4335+59*e;this.setGeneratorOverride(n,h,!0);break}case g.initialFilterQ:{i=215*(e/127),this.setGeneratorOverride(n,i,!0);break}case g.modLfoToFilterFc:{r=kA(s,-64,63)*56.25,this.setGeneratorOverride(n,r,!0);break}case g.modEnvToFilterFc:{r=kA(s,-64,63)*56.25,this.setGeneratorOverride(n,r);break}case g.chorusEffectsSend:case g.reverbEffectsSend:{this.setGeneratorOverride(n,kA(s,0,255)*(1e3/255));break}}}function Bo(A){switch(this.midiControllers[u.dataEntryLSB]=A<<7,this.dataEntryState){default:break;case _e.RPCoarse:case _e.RPFine:{switch(this.midiControllers[u.registeredParameterMSB]|this.midiControllers[u.registeredParameterLSB]>>7){default:break;case MA.pitchWheelRange:{if(A===0)break;this.midiControllers[ve+Ae.pitchWheelRange]|=A;let t=(this.midiControllers[ve+Ae.pitchWheelRange]>>7)+A/128;k(`%cChannel ${this.channel} pitch wheel range. Semitones: %c${t}`,l.info,l.value);break}case MA.fineTuning:{let s=this.customControllers[Ce.channelTuning]<<7|A;this.setTuning(s*.01220703125);break}case MA.modulationDepth:{let s=this.customControllers[Ce.modulationMultiplier]*50+A/128*100;this.setModulationDepth(s);break}case 16383:{this.resetParameters();break}}break}case _e.NRPFine:{let e=this.midiControllers[u.nonRegisteredParameterMSB]>>7,t=this.midiControllers[u.nonRegisteredParameterLSB]>>7;if(e===Ve.SF2)return;e===Ve.awe32?Eo.call(this,t,A,this.midiControllers[u.dataEntryMSB]>>7):k(`%cUnrecognized NRPN LSB for %c${this.channel}%c: %c(0x${t.toString(16).toUpperCase()} 0x${t.toString(16).toUpperCase()})%c data value: %c${A}`,l.warn,l.recognized,l.warn,l.unrecognized,l.warn,l.value)}}}function Qo(A,e,t=!0){if(A>127)throw new Error("Invalid MIDI Controller.");if(A>=u.modulationWheelLSB&&A<=u.effectControl2LSB&&A!==u.dataEntryLSB){let s=A-32;if(this.lockedControllers[s])return;this.midiControllers[s]=this.midiControllers[s]&16256|e&127,this.computeModulatorsAll(1,s)}if(!this.lockedControllers[A]){switch(this.midiControllers[A]=e<<7,A){case u.omniModeOff:case u.omniModeOn:case u.allNotesOff:{this.stopAllNotes();break}case u.allSoundOff:{this.stopAllNotes(!0);break}case u.polyModeOn:{this.stopAllNotes(!0),this.polyMode=!0;break}case u.monoModeOn:{this.stopAllNotes(!0),this.polyMode=!1;break}case u.bankSelect:{this.setBankMSB(e),this.channel%16===bA&&Re.isSystemXG(this.channelSystem)&&this.setBankMSB(127);break}case u.bankSelectLSB:{this.setBankLSB(e);break}case u.variationDepth:{this.synthCore.delayActive=!0;break}case u.registeredParameterLSB:{this.dataEntryState=_e.RPFine;break}case u.registeredParameterMSB:{this.dataEntryState=_e.RPCoarse;break}case u.nonRegisteredParameterMSB:{this.customControllers[Ce.sf2NPRNGeneratorLSB]=0,this.dataEntryState=_e.NRPCoarse;break}case u.nonRegisteredParameterLSB:{if(this.midiControllers[u.nonRegisteredParameterMSB]>>7===Ve.SF2)switch(this.customControllers[Ce.sf2NPRNGeneratorLSB]%100!==0&&(this.customControllers[Ce.sf2NPRNGeneratorLSB]=0),e){case 100:{this.customControllers[Ce.sf2NPRNGeneratorLSB]+=100;break}case 101:{this.customControllers[Ce.sf2NPRNGeneratorLSB]+=1e3;break}case 102:{this.customControllers[Ce.sf2NPRNGeneratorLSB]+=1e4;break}default:e<100&&(this.customControllers[Ce.sf2NPRNGeneratorLSB]+=e)}this.dataEntryState=_e.NRPFine;break}case u.dataEntryMSB:{this.dataEntryCoarse(e);break}case u.dataEntryLSB:{this.dataEntryFine(e);break}case u.resetAllControllers:{this.resetControllersRP15Compliant();break}case u.sustainPedal:{if(e<64){let s=0;if(this.voiceCount>0){for(let n of this.synthCore.voices)if(n.channel===this.channel&&n.isActive&&n.isHeld&&(n.isHeld=!1,n.releaseVoice(this.synthCore.currentTime),++s>=this.voiceCount))break}}break}default:{this.computeModulatorsAll(1,A);break}}t&&this.synthCore.callEvent("controllerChange",{channel:this.channel,controllerNumber:A,controllerValue:e})}}var fo=40;function uo(A){if(A<1)return 0;{let e=[1,2,4,8,16,32,64,80,96,112,120,124],t=[1,.5,.25,.125,.0625,.03125,.0625,.0625,.0625,.125,.25,1/3],s=[-.16653127382501215,.11863875218299408,.029479047361245264,-.005442312089231738,.1451520875973037,-.005056281449558275,-.005095486882876532,.03334009551111544,-.09361368678020432,.14132569702451822,-.15805565301011382,-.09918856955881927],n=[.028212773333433472,-.3388502064992847,-.15839529890929713,-.12398131766775483,-.2874848552685111,.012254866302537692,.005957797193345771,-.03745899330347374,.12911781869810196,-.15867193224162568,.504406322732748,.3786845131875458],a=[.7218950861255283,.5574536226347168,.47133893237025826,.48597095327079914,.44336276333518854,.6076986311801551,.30851975971827794,.30514889345633955,.3302511933827384,.153822885219165,.1302280559047337,.49865530675491687],o=[-2.2218487496163566,-1.6382721639824072,-1.3010299956639813,-.958607314841775,-.6020599913279624,-.3010299956639812,.31386722036915343,.6232492903979004,.9242792860618817,1.290034611362518,1.4265112613645752,1.9030899869919435],i=[2,4,8,16,32,64,80,96,112,120,124],r=-1;for(let c=i.length-1;c>=0;c--)if(i[c]<A){r=c;break}r+=1;let h=(A-e[r])*t[r];return Math.exp(2.302585092994046*(((s[r]*h+n[r])*h+a[r])*h+o[r]))/fo}}function mo(A,e){return uo(A)*e}var Wt=(A,e,t)=>Math.max(e,Math.min(t,A));function po(A,e){if(e<1){this.noteOff(A);return}if(e=Math.min(127,e),this.synthCore.masterParameters.blackMIDIMode&&this.synthCore.voiceCount>200&&e<40||this.synthCore.masterParameters.blackMIDIMode&&e<10||this._isMuted||!this.preset)return;let t=A+this.keyShift+this.customControllers[Ce.channelKeyShift],s=t;if(t>127||t<0)return;let n=this.preset.program,a=this.synthCore.tunings[n*128+t];a>=0&&(s=Math.trunc(a)),this.synthCore.masterParameters.monophonicRetriggerMode&&this.killNote(A);let o=this.synthCore.keyModifierManager.getVelocity(this.channel,t);o>-1&&(e=o);let i=this.synthCore.keyModifierManager.getGain(this.channel,t),r=-1,h=0,c=this.midiControllers[u.portamentoTime]>>7,I=this.midiControllers[u.portamentoControl]>>7;if(!this.drumChannel&&I!==s&&this.midiControllers[u.portamentoOnOff]>=8192&&c>0){if(I>0){let w=Math.abs(s-I);h=mo(c,w),r=I}this.controllerChange(u.portamentoControl,s)}if(!this.polyMode){let w=0;if(this.voiceCount>0){for(let S of this.synthCore.voices)if(S.isActive&&S.channel===this.channel&&(S.exclusiveRelease(this.synthCore.currentTime,0),++w>=this.voiceCount))break}}let E=this.synthCore.getVoices(this.channel,s,e),B=0,d=0,y=0,D=1,M=1,F=1;if(this.randomPan&&(B=Math.round(Math.random()*1e3-500)),this.drumChannel){let w=this.drumParams[s];if(!w.rxNoteOn)return;let S=w.pan;if(S!==64){let P=Math.max(-63,Math.min(S-64+((this.midiControllers[u.pan]>>7)-64),63))||1;B=S===0?Math.round(Math.random()*1e3-500):P/63*500}y=w.pitch,d=w.exclusiveClass,D=w.reverbGain,M=w.chorusGain,F=w.delayGain,i===1&&(i=w.gain)}for(let w of E){let S=this.synthCore.assignVoice(),P=this.synthCore.currentTime;if(S.setup(P,this.channel,s,e,t),S.wavetable=S.oscillators[this.synthCore.masterParameters.interpolationType],S.generators.set(w.generators),S.exclusiveClass=d||w.exclusiveClass,S.rootKey=w.rootKey,S.loopingMode=w.loopingMode,S.wavetable.sampleData=w.sampleData,S.wavetable.playbackStep=w.playbackStep,S.targetKey=w.targetKey,this.sysExModulators.active){S.modulators=[...w.modulators];for(let U of this.sysExModulators.modulatorList){let q=S.modulators.findIndex(m=>Fe.isIdentical(m,U.mod));q===-1?S.modulators.push(U.mod):S.modulators[q]=U.mod}}else S.modulators=w.modulators;if(S.modulators.length>S.modulatorValues.length&&(ne(`${S.modulators.length} modulators! Increasing modulatorValues table.`),S.modulatorValues=new Int16Array(S.modulators.length)),this.generatorOverridesEnabled)for(let[U,q]of this.generatorOverrides.entries())q!==Fa&&(S.generators[U]=q);if(S.exclusiveClass!==0&&this.polyMode){let U=0;if(this.voiceCount>0){for(let q of this.synthCore.voices)if(q.isActive&&q.channel===this.channel&&q.exclusiveClass===S.exclusiveClass&&q.hasRendered&&(q.exclusiveRelease(this.synthCore.currentTime),++U>=this.voiceCount))break}}this.computeModulators(S),S.volEnv.init(S),S.modEnv.init(S),S.filter.init(),S.vibLfoStartTime=P+ns(S.modulatedGenerators[g.delayVibLFO]),S.modLfoStartTime=P+ns(S.modulatedGenerators[g.delayModLFO]);let C=S.modulatedGenerators[g.startAddrsOffset]+S.modulatedGenerators[g.startAddrsCoarseOffset]*32768,x=S.modulatedGenerators[g.endAddrOffset]+S.modulatedGenerators[g.endAddrsCoarseOffset]*32768,J=S.modulatedGenerators[g.startloopAddrsOffset]+S.modulatedGenerators[g.startloopAddrsCoarseOffset]*32768,Y=S.modulatedGenerators[g.endloopAddrsOffset]+S.modulatedGenerators[g.endloopAddrsCoarseOffset]*32768,T=w.sampleData.length-1;if(S.wavetable.cursor=Wt(C,0,T),S.wavetable.end=Wt(T+x,0,T),S.wavetable.loopStart=Wt(w.loopStart+J,0,T),S.wavetable.loopEnd=Wt(w.loopEnd+Y,0,T),S.wavetable.loopEnd<S.wavetable.loopStart){let U=S.wavetable.loopStart;S.wavetable.loopStart=S.wavetable.loopEnd,S.wavetable.loopEnd=U}S.wavetable.loopEnd-S.wavetable.loopStart<1&&(S.loopingMode===1||S.loopingMode===3)&&(S.loopingMode=0),S.wavetable.loopLength=S.wavetable.loopEnd-S.wavetable.loopStart,S.wavetable.isLooping=S.loopingMode===1||S.loopingMode===3,S.portamentoFromKey=r,S.portamentoDuration=h,S.overridePan=B,S.gainModifier=i,S.pitchOffset=y,S.reverbSend=D,S.chorusSend=M,S.delaySend=F,S.currentPan=Math.max(-500,Math.min(500,B||S.modulatedGenerators[g.pan]))}this.voiceCount+=E.length,this.sendChannelProperty(),this.synthCore.callEvent("noteOn",{midiNote:A,channel:this.channel,velocity:e})}function yo(A){if(A>127||A<0){ne("Received a noteOn for note",A,"Ignoring.");return}let e=A+this.keyShift+this.customControllers[Ce.channelKeyShift];if(this.synthCore.masterParameters.blackMIDIMode&&!this.drumChannel||this.drumChannel&&this.drumParams[e].rxNoteOff){this.killNote(e),this.synthCore.callEvent("noteOff",{midiNote:A,channel:this.channel});return}let t=this.midiControllers[u.sustainPedal]>=8192,s=0;if(this.voiceCount>0){for(let n of this.synthCore.voices)if(n.channel===this.channel&&n.isActive&&n.realKey===e&&!n.isInRelease&&(t?n.isHeld=!0:n.releaseVoice(this.synthCore.currentTime),++s>=this.voiceCount))break}this.synthCore.callEvent("noteOff",{midiNote:A,channel:this.channel})}function So(A){if(this.lockPreset)return;this.patch.program=A;let e=this.synthCore.soundBankManager.getPreset(this.patch,this.channelSystem);!e&&(e=this.synthCore.missingPresetHandler(this.patch,this.channelSystem),!e)||(this.preset=e,e.isAnyDrums!==this.drumChannel&&this.setDrumFlag(e.isAnyDrums),this.resetDrumParams(),this.synthCore.callEvent("programChange",{channel:this.channel,bankLSB:this.preset.bankLSB,bankMSB:this.preset.bankMSB,program:this.preset.program,isGMGSDrum:this.preset.isGMGSDrum}),this.sendChannelProperty())}function AA(A,e,t,s){k(`%cChannel %c${A}%c ${t} is now set to %c${e} ${s}.`,l.info,l.recognized,l.info,l.value)}function qe(A,e){k(`%cUnrecognized %c${e} %cSysEx: %c${cs(A)}`,l.warn,l.recognized,l.warn,l.unrecognized)}var ko=[os.fromModulator(new we(oA(me.linear,!0,!1,!0,u.vibratoRate),0,g.vibLfoRate,1e3,0))],Do=class{modulatorList=[];active=!1;channelNumber;constructor(A){this.channelNumber=A}resetModulators(){this.modulatorList=ko.map(A=>({mod:A,id:this.getModulatorID(A.primarySource.toSourceEnum(),A.destination,A.primarySource.isBipolar,A.primarySource.isNegative)})),this.active=!1}setupReceiver(A,e,t,s,n=!1){this.active=!0;let a=e-64,o=a/64,i=e/127;switch(A&15){case 0:{this.setModulator(t,g.fineTune,a*100,n),AA(this.channelNumber,a,`${s} pitch control`,"semitones");break}case 1:{this.setModulator(t,g.initialFilterFc,o*9600,n),AA(this.channelNumber,o*9600,`${s} filter control`,"cents");break}case 2:{this.setModulator(t,g.amplitude,o*1e3,n),AA(this.channelNumber,o*100,`${s} amplitude`,"%");break}case 3:{this.setModulator(t,g.vibLfoRate,o*1e3,n),AA(this.channelNumber,o*10,`${s} LFO1 rate`,"Hz");break}case 4:{this.setModulator(t,g.vibLfoToPitch,i*600,n),AA(this.channelNumber,i*600,`${s} LFO1 pitch depth`,"cents");break}case 5:{this.setModulator(t,g.vibLfoToFilterFc,i*2400,n),AA(this.channelNumber,i*2400,`${s} LFO1 filter depth`,"cents");break}case 6:{this.setModulator(t,g.vibLfoAmplitudeDepth,i*1e3,n),AA(this.channelNumber,i*100,`${s} LFO1 amplitude depth`,"%");break}case 7:{this.setModulator(t,g.modLfoRate,o*1e3,n),AA(this.channelNumber,o*10,`${s} LFO2 rate`,"Hz");break}case 8:{this.setModulator(t,g.modLfoToPitch,i*600,n),AA(this.channelNumber,i*600,`${s} LFO2 pitch depth`,"cents");break}case 9:{this.setModulator(t,g.modLfoToFilterFc,i*2400,n),AA(this.channelNumber,i*2400,`${s} LFO2 filter depth`,"cents");break}case 10:{this.setModulator(t,g.modLfoAmplitudeDepth,i*1e3,n),AA(this.channelNumber,i*100,`${s} LFO2 amplitude depth`,"%");break}}}setModulator(A,e,t,s=!1,n=!1){let a=this.getModulatorID(A,e,s,n);t===0&&this.deleteModulator(a);let o=this.modulatorList.find(i=>i.id===a);if(o)o.mod.transformAmount=t;else{let i,r;A>=ve?(i=A-ve,r=!1):(i=A,r=!0);let h=os.fromData(new IA(i,me.linear,r,s),new IA,e,t,0);this.modulatorList.push({mod:h,id:a})}}getModulatorID(A,e,t,s){return`${A}-${e}-${t}-${s}`}deleteModulator(A){this.modulatorList=this.modulatorList.filter(e=>e.id!==A)}},wo=1e3/200;function bo(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),o=s.transformAmount;s.isEffectModulator&&o<=1e3&&(o*=wo,o=Math.min(o,1e3));let i=n*a*o;return s.transformType===2&&(i=Math.abs(i)),s.isDefaultResonantModulator&&(A.resonanceOffset=Math.max(0,i/2)),s.isModWheelModulator&&(i*=this.customControllers[Ce.modulationMultiplier]),A.modulatorValues[t]=i,i}function vo(A,e=-1,t=0){let s=A.modulators,n=A.generators;if(this.generatorOffsetsEnabled){n=new Int16Array(n);for(let r=0;r<n.length;r++)n[r]+=this.generatorOffsets[r]}let a=A.modulatedGenerators,o=this.perNotePitch?this.pitchWheels[A.realKey]:this.midiControllers[Ae.pitchWheel+ve];if(e===-1){a.set(n);for(let r=0;r<s.length;r++){let h=s[r];a[h.destination]=Math.min(32767,Math.max(-32768,a[h.destination]+this.computeModulator(A,o,r)))}for(let r=0;r<a.length;r++){let h=hA[r];h&&(a[r]=Math.min(h.max,Math.max(h.min,a[r])))}return}let i=!!e;for(let r=0;r<s.length;r++){let h=s[r];if(h.primarySource.isCC===i&&h.primarySource.index===t||h.secondarySource.isCC===i&&h.secondarySource.index===t){let c=h.destination,I=n[c];this.computeModulator(A,o,r);for(let B=0;B<s.length;B++)s[B].destination===c&&(I+=A.modulatorValues[B]);let E=hA[c];a[c]=Math.max(E.min,Math.min(I,E.max))}}}var Ro=class{midiControllers=new Int16Array(en);pitchWheels=new Int16Array(128).fill(8192);lockedControllers=new Array(en).fill(!1);customControllers=new Float32Array(Ua);octaveTuning=new Int8Array(128);drumParams=[];sysExModulators;keyShift=0;drumChannel=!1;randomPan=!1;insertionEnabled=!1;cc1=16;cc2=17;drumMap=0;dataEntryState=_e.Idle;patch={bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1};preset;lockPreset=!1;lockedSystem="gs";channelVibrato={delay:0,depth:0,rate:0};polyMode=!0;voiceCount=0;channel;rxChannel;synthCore;noteOn=po.bind(this);noteOff=yo.bind(this);programChange=So.bind(this);controllerChange=Qo.bind(this);resetControllers=ur.bind(this);resetPreset=mr.bind(this);resetControllersRP15Compliant=pr.bind(this);resetParameters=yr.bind(this);dataEntryFine=Bo.bind(this);dataEntryCoarse=Io.bind(this);renderVoice=co.bind(this);perNotePitch=!1;channelTuningCents=0;generatorOffsets=new Int16Array(ot);generatorOffsetsEnabled=!1;generatorOverrides=new Int16Array(ot);generatorOverridesEnabled=!1;computeModulator=bo.bind(this);computeModulators=vo.bind(this);previousVoiceCount=0;constructor(A,e,t){this.synthCore=A,this.preset=e,this.channel=t,this.rxChannel=t,this.sysExModulators=new Do(t),this.resetGeneratorOverrides(),this.resetGeneratorOffsets();for(let s=0;s<128;s++)this.drumParams.push(new An);this.resetDrumParams(),this.resetVibratoParams()}_isMuted=!1;get isMuted(){return this._isMuted}get channelSystem(){return this.lockPreset?this.lockedSystem:this.synthCore.masterParameters.midiSystem}clearVoiceCount(){this.previousVoiceCount=this.voiceCount,this.voiceCount=0}updateVoiceCount(){this.voiceCount!==this.previousVoiceCount&&this.sendChannelProperty()}transposeChannel(A,e=!1){this.drumChannel||(A+=this.synthCore.masterParameters.transposition);let t=Math.trunc(A),s=this.keyShift+this.customControllers[Ce.channelTransposeFine]/100;this.drumChannel&&!e||A===s||(t!==this.keyShift&&this.stopAllNotes(),this.keyShift=t,this.setCustomController(Ce.channelTransposeFine,(A-t)*100),this.sendChannelProperty())}setOctaveTuning(A){if(A.length!==12)throw new Error("Tuning is not the length of 12.");for(let e=0;e<128;e++)this.octaveTuning[e]=A[e%12]}setModulationDepth(A){A=Math.round(A),k(`%cChannel ${this.channel} modulation depth. Cents: %c${A}`,l.info,l.value),this.setCustomController(Ce.modulationMultiplier,A/50)}setTuning(A,e=!0){A=Math.round(A),this.setCustomController(Ce.channelTuning,A),e&&k(`%cFine tuning for %c${this.channel}%c is now set to %c${A}%c cents.`,l.info,l.recognized,l.info,l.value,l.info)}pitchWheel(A,e=-1){if(!this.lockedControllers[ve+Ae.pitchWheel]){if(e===-1)this.perNotePitch=!1,this.midiControllers[ve+Ae.pitchWheel]=A,this.computeModulatorsAll(0,Ae.pitchWheel),this.sendChannelProperty();else{this.perNotePitch||this.pitchWheels.fill(this.midiControllers[ve+Ae.pitchWheel]),this.perNotePitch=!0,this.pitchWheels[e]=A;let t=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.isActive&&s.channel===this.channel&&s.midiNote===e&&(this.computeModulators(s,0,Ae.polyPressure),++t>=this.voiceCount))break}}this.synthCore.callEvent("pitchWheel",{channel:this.channel,pitch:A,midiNote:e})}}channelPressure(A){this.midiControllers[ve+Ae.channelPressure]=A<<7,this.updateChannelTuning(),this.computeModulatorsAll(0,Ae.channelPressure),this.synthCore.callEvent("channelPressure",{channel:this.channel,pressure:A})}polyPressure(A,e){let t=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.isActive&&s.channel===this.channel&&s.midiNote===A&&(s.pressure=e,this.computeModulators(s,0,Ae.polyPressure),++t>=this.voiceCount))break}this.synthCore.callEvent("polyPressure",{channel:this.channel,midiNote:A,pressure:e})}setCustomController(A,e){this.customControllers[A]=e,this.updateChannelTuning()}updateChannelTuning(){this.channelTuningCents=this.customControllers[Ce.channelTuning]+this.customControllers[Ce.channelTransposeFine]+this.customControllers[Ce.masterTuning]+this.customControllers[Ce.channelTuningSemitones]*100}setPresetLock(A){this.lockPreset!==A&&(this.lockPreset=A,A&&(this.lockedSystem=this.synthCore.masterParameters.midiSystem))}setDrums(A){if(Re.isSystemXG(this.channelSystem))if(A)this.setBankMSB(Re.getDrumBank(this.channelSystem)),this.setBankLSB(0);else{if(this.channel%16===bA)throw new Error(`Cannot disable drums on channel ${this.channel} for XG.`);this.setBankMSB(0),this.setBankLSB(0)}else this.setGSDrums(A);this.setDrumFlag(A),this.programChange(this.patch.program)}setPatch(A){this.setBankMSB(A.bankMSB),this.setBankLSB(A.bankLSB),this.setGSDrums(A.isGMGSDrum),this.programChange(A.program)}setGSDrums(A){A!==this.patch.isGMGSDrum&&(this.setBankLSB(0),this.setBankMSB(0),this.patch.isGMGSDrum=A)}resetGeneratorOverrides(){this.generatorOverrides.fill(Fa),this.generatorOverridesEnabled=!1}setGeneratorOverride(A,e,t=!1){if(this.generatorOverrides[A]=e,this.generatorOverridesEnabled=!0,t){let s=0;if(this.voiceCount>0){for(let n of this.synthCore.voices)if(n.channel===this.channel&&n.isActive&&(n.generators[A]=e,this.computeModulators(n),++s>=this.voiceCount))break}}}resetGeneratorOffsets(){this.generatorOffsets.fill(0),this.generatorOffsetsEnabled=!1}setGeneratorOffset(A,e){this.generatorOffsets[A]=e*hA[A].nrpn,this.generatorOffsetsEnabled=!0;let t=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&(this.computeModulators(s),++t>=this.voiceCount))break}}killNote(A,e=-12e3){A+=this.customControllers[Ce.channelKeyShift];let t=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&s.realKey===A&&(s.overrideReleaseVolEnv=e,s.isInRelease=!1,s.releaseVoice(this.synthCore.currentTime),++t>=this.voiceCount))break}}stopAllNotes(A=!1){if(A){let e=0;if(this.voiceCount>0){for(let t of this.synthCore.voices)if(t.channel===this.channel&&t.isActive&&(t.isActive=!1,++e>=this.voiceCount))break}this.clearVoiceCount(),this.updateVoiceCount()}else{let e=0;if(this.voiceCount>0){for(let t of this.synthCore.voices)if(t.channel===this.channel&&t.isActive&&(t.releaseVoice(this.synthCore.currentTime),++e>=this.voiceCount))break}}this.synthCore.callEvent("stopAll",{channel:this.channel,force:A})}muteChannel(A){A&&this.stopAllNotes(!0),this._isMuted=A,this.sendChannelProperty(),this.synthCore.callEvent("muteChannel",{channel:this.channel,isMuted:A})}sendChannelProperty(){if(!this.synthCore.enableEventSystem)return;let A={voicesAmount:this.voiceCount,pitchWheel:this.midiControllers[ve+Ae.pitchWheel],pitchWheelRange:this.midiControllers[ve+Ae.pitchWheelRange]/128,isMuted:this.isMuted,transposition:this.keyShift+this.customControllers[Ce.channelTransposeFine]/100,isDrum:this.drumChannel,isEFX:this.insertionEnabled};this.synthCore.callEvent("channelPropertyChange",{channel:this.channel,property:A})}resetDrumParams(){if(!(this.synthCore.masterParameters.drumLock||!this.drumChannel))for(let A=0;A<128;A++){let e=this.drumParams[A];e.pitch=0,e.gain=1,e.exclusiveClass=0,e.pan=64,e.reverbGain=vn[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}))}},Fo=class extends vt{constructor(A,e){super(A.parentSoundBank,A.globalZone),this.bankMSB=Re.addBankOffset(A.bankMSB,e,A.isXGDrums),this.name=A.name,this.bankLSB=A.bankLSB,this.isGMGSDrum=A.isGMGSDrum,this.program=A.program,this.genre=A.genre,this.morphology=A.morphology,this.library=A.library,this.zones=A.zones}},Go=class{soundBankList=[];presetListChangeCallback;selectablePresetList=[];constructor(A){this.presetListChangeCallback=A}_presetList=[];get presetList(){return[...this._presetList]}get priorityOrder(){return this.soundBankList.map(A=>A.id)}set priorityOrder(A){this.soundBankList.sort((e,t)=>A.indexOf(e.id)-A.indexOf(t.id)),this.generatePresetList()}deleteSoundBank(A){if(this.soundBankList.length===0){ne("1 soundbank left. Aborting!");return}let e=this.soundBankList.findIndex(t=>t.id===A);if(e===-1)throw new Error(`No sound bank with id "${A}"`);this.soundBankList.splice(e,1),this.generatePresetList()}addSoundBank(A,e,t=0){let s=this.soundBankList.find(n=>n.id===e);s===void 0?this.soundBankList.push({id:e,soundBank:A,bankOffset:t}):(s.soundBank=A,s.bankOffset=t),this.generatePresetList()}getPreset(A,e){if(!(this.soundBankList.length===0||this.selectablePresetList.length===0))return $a(this.selectablePresetList,A,e)}destroy(){for(let A of this.soundBankList)A.soundBank.destroySoundBank();this.soundBankList=[]}generatePresetList(){let A=new Array,e=new Set;for(let t of this.soundBankList){let s=t.soundBank,n=t.bankOffset;for(let a of s.presets){let o=new Fo(a,n);e.has(o.toMIDIString())||(e.add(o.toMIDIString()),A.push(o))}}A.sort(CA.sorter.bind(CA)),this.selectablePresetList=A,this._presetList=A.map(t=>({bankMSB:t.bankMSB,bankLSB:t.bankLSB,program:t.program,isGMGSDrum:t.isGMGSDrum,name:t.name,isAnyDrums:t.isAnyDrums})),this.presetListChangeCallback()}};function Mo(A,e){switch(this.masterParameters[A]=e,A){default:break;case"masterPan":{let t=e;t=t/2+.5,this.panLeft=Math.cos(Math.PI/2*t),this.panRight=Math.sin(Math.PI/2*t);break}case"voiceCap":{let t=Math.min(e,1e6);this.masterParameters.voiceCap=t;for(let s=t;s<this.voices.length;s++)this.voices[s].isActive=!1;if(t>this.voices.length){ne(`Allocating ${t-this.voices.length} new voices!`);for(let s=this.voices.length;s<t;s++)this.voices.push(new hn(this.sampleRate))}break}case"transposition":{let t=e;this.masterParameters.transposition=0;for(let s of this.midiChannels)s.transposeChannel(t);this.masterParameters.transposition=t}}this.callEvent("masterParameterChange",{parameter:A,value:e})}function Lo(A){return this.masterParameters[A]}function No(){return{...this.masterParameters}}function ca(A,e,t){let s=A,n=e<<7|t;return A===127&&e===127&&t===127?-1:s+n*61e-6}function To(A,e=0){switch(A[2]){case 4:{let t;switch(A[3]){case 1:{let s=A[5]<<7|A[4];this.setMIDIVolume(s/16384),k(`%cMaster Volume. Volume: %c${s}`,l.info,l.value);break}case 2:{let n=((A[5]<<7|A[4])-8192)/8192;this.setMasterParameter("masterPan",n),k(`%cMaster Pan. Pan: %c${n}`,l.info,l.value);break}case 3:{let s=(A[5]<<7|A[6])-8192;t=Math.floor(s/81.92),this.setMasterTuning(t),k(`%cMaster Fine Tuning. Cents: %c${t}`,l.info,l.value);break}case 4:{t=(A[5]-64)*100,this.setMasterTuning(t),k(`%cMaster Coarse Tuning. Cents: %c${t}`,l.info,l.value);break}default:k(`%cUnrecognized MIDI Device Control Real-time message: %c${cs(A)}`,l.warn,l.unrecognized)}break}case 9:{A[3]===1?(k("%cGM1 system on",l.info),this.resetAllControllers("gm")):A[3]===3?(k("%cGM2 system on",l.info),this.resetAllControllers("gm2")):(k("%cGM system off, defaulting to GS",l.info),this.setMasterParameter("midiSystem","gs"));break}case 8:{let t=4;switch(A[3]){case 1:{let s=A[t++],n=cA(A,16,t);if(t+=16,A.length<384){ne(`The Bulk Tuning Dump is too short! (${A.length} bytes, at least 384 are expected)`);return}for(let a=0;a<128;a++)this.tunings[s*128+a]=ca(A[t++],A[t++],A[t++]);k(`%cBulk Tuning Dump %c${n}%c Program: %c${s}`,l.info,l.value,l.info,l.recognized);break}case 2:case 7:{A[3]===7&&t++;let s=A[t++],n=A[t++];for(let a=0;a<n;a++){let o=A[t++];this.tunings[s*128+o]=ca(A[t++],A[t++],A[t++])}k(`%cSingle Note Tuning. Program: %c${s}%c Keys affected: %c${n}`,l.info,l.recognized,l.info,l.recognized);break}case 9:case 8:{let s=new Int8Array(12);if(A[3]===8)for(let n=0;n<12;n++)s[n]=A[7+n]-64;else for(let n=0;n<24;n+=2){let a=(A[7+n]<<7|A[8+n])-8192;s[n/2]=Math.floor(a/81.92)}(A[4]&1)===1&&this.midiChannels[14+e].setOctaveTuning(s),(A[4]>>1&1)===1&&this.midiChannels[15+e].setOctaveTuning(s);for(let n=0;n<7;n++)(A[5]>>n&1)===1&&this.midiChannels[7+n+e].setOctaveTuning(s);for(let n=0;n<7;n++)(A[6]>>n&1)===1&&this.midiChannels[n+e].setOctaveTuning(s);k(`%cMIDI Octave Scale ${A[3]===8?"(1 byte)":"(2 bytes)"} tuning via Tuning: %c${s.join(" ")}`,l.info,l.value);break}default:{qe(A,"MIDI Tuning Standard");break}}break}default:qe(A,"General MIDI")}}var z=(A,e)=>{k(`%cRoland GS ${A}%c is now set to %c${e}%c.`,l.recognized,l.info,l.value,l.info)};function Uo(A,e=0){if(A[3]===18)switch(A[2]){case 66:{let t=A[4],s=A[5],n=A[6],a=Math.min(A[7],127);if(t===0&&s===0&&n===127&&a===0){k("%cGS Reset received!",l.info),this.resetAllControllers("gs");return}if(t===64){if(s===0){switch(n){case 0:{let i=((a<<12|A[8]<<8|A[9]<<4|A[10])-1024)/10;this.setMasterTuning(i),z("Master Tune",i);break}case 4:{z("Master Volume",a);break}case 5:{let o=a-64;z("Master Key-Shift",o),this.setMasterTuning(o*100);break}case 6:{z("Master Pan",a),this.setMasterParameter("masterPan",(a-64)/64);break}case 127:{a===0?(k("%cGS Reset received!",l.info),this.resetAllControllers("gs")):a===127&&(k("%cGS system off, switching to GM",l.info),this.resetAllControllers("gm"));break}default:{qe(A,"Roland GS");break}}return}if(s===1){let o=n>=48&&n<=55,i=n>=56&&n<=64,r=n>=80&&n<=90;if(o&&this.masterParameters.reverbLock||i&&this.masterParameters.chorusLock||r&&this.masterParameters.delayLock)return;switch(this.delayActive||=n===64||r,n){default:{k(`%cUnsupported Patch Common parameter: %c${n.toString(16)}`,l.warn,l.unrecognized);break}case 0:{let h=cA(A,16,7);z(`Patch Name for ${n&15}`,h);break}case 48:{this.setReverbMacro(a),z("Reverb Macro",a);break}case 49:{this.reverbProcessor.character=a,z("Reverb Character",a),this.callEvent("effectChange",{effect:"reverb",parameter:"character",value:a});break}case 50:{this.reverbProcessor.preLowpass=a,z("Reverb Pre-LPF",a),this.callEvent("effectChange",{effect:"reverb",parameter:"preLowpass",value:a});break}case 51:{this.reverbProcessor.level=a,z("Reverb Level",a),this.callEvent("effectChange",{effect:"reverb",parameter:"level",value:a});break}case 52:{this.reverbProcessor.time=a,z("Reverb Time",a),this.callEvent("effectChange",{effect:"reverb",parameter:"time",value:a});break}case 53:{this.reverbProcessor.delayFeedback=a,z("Reverb Delay Feedback",a),this.callEvent("effectChange",{effect:"reverb",parameter:"delayFeedback",value:a});break}case 54:break;case 55:{this.reverbProcessor.preDelayTime=a,z("Reverb Predelay Time",a),this.callEvent("effectChange",{effect:"reverb",parameter:"preDelayTime",value:a});break}case 56:{this.setChorusMacro(a),z("Chorus Macro",a);break}case 57:{this.chorusProcessor.preLowpass=a,z("Pre-LPF",a),this.callEvent("effectChange",{effect:"chorus",parameter:"preLowpass",value:a});break}case 58:{this.chorusProcessor.level=a,z("Chorus Level",a),this.callEvent("effectChange",{effect:"chorus",parameter:"level",value:a});break}case 59:{this.chorusProcessor.feedback=a,z("Chorus Feedback",a),this.callEvent("effectChange",{effect:"chorus",parameter:"feedback",value:a});break}case 60:{this.chorusProcessor.delay=a,z("Chorus Delay",a),this.callEvent("effectChange",{effect:"chorus",parameter:"delay",value:a});break}case 61:{this.chorusProcessor.rate=a,z("Chorus Rate",a),this.callEvent("effectChange",{effect:"chorus",parameter:"rate",value:a});break}case 62:{this.chorusProcessor.depth=a,z("Chorus Depth",a),this.callEvent("effectChange",{effect:"chorus",parameter:"depth",value:a});break}case 63:{this.chorusProcessor.sendLevelToReverb=a,z("Chorus Send Level To Reverb",a),this.callEvent("effectChange",{effect:"chorus",parameter:"sendLevelToReverb",value:a});break}case 64:{this.chorusProcessor.sendLevelToDelay=a,z("Chorus Send Level To Delay",a),this.callEvent("effectChange",{effect:"chorus",parameter:"sendLevelToDelay",value:a});break}case 80:{this.setDelayMacro(a),z("Delay Macro",a);break}case 81:{this.delayProcessor.preLowpass=a,z("Delay Pre-LPF",a),this.callEvent("effectChange",{effect:"delay",parameter:"preLowpass",value:a});break}case 82:{this.delayProcessor.timeCenter=a,z("Delay Time Center",a),this.callEvent("effectChange",{effect:"delay",parameter:"timeCenter",value:a});break}case 83:{this.delayProcessor.timeRatioLeft=a,z("Delay Time Ratio Left",a),this.callEvent("effectChange",{effect:"delay",parameter:"timeRatioLeft",value:a});break}case 84:{this.delayProcessor.timeRatioRight=a,z("Delay Time Ratio Right",a),this.callEvent("effectChange",{effect:"delay",parameter:"timeRatioRight",value:a});break}case 85:{this.delayProcessor.levelCenter=a,z("Delay Level Center",a),this.callEvent("effectChange",{effect:"delay",parameter:"levelCenter",value:a});break}case 86:{this.delayProcessor.levelLeft=a,z("Delay Level Left",a),this.callEvent("effectChange",{effect:"delay",parameter:"levelLeft",value:a});break}case 87:{this.delayProcessor.levelRight=a,z("Delay Level Right",a),this.callEvent("effectChange",{effect:"delay",parameter:"levelRight",value:a});break}case 88:{this.delayProcessor.level=a,z("Delay Level",a),this.callEvent("effectChange",{effect:"delay",parameter:"level",value:a});break}case 89:{this.delayProcessor.feedback=a,z("Delay Feedback",a),this.callEvent("effectChange",{effect:"delay",parameter:"feedback",value:a});break}case 90:{this.delayProcessor.sendLevelToReverb=a,z("Delay Send Level To Reverb",a),this.callEvent("effectChange",{effect:"delay",parameter:"sendLevelToReverb",value:a});break}}break}if(s===3){if(this.masterParameters.insertionEffectLock)return;if(n>=3&&n<=25&&(this.insertionParams[n-3]=a),n>=3&&n<=22){this.insertionProcessor.setParameter(n,a),z(`EFX Parameter ${n-2}`,a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return}switch(n){default:{qe(A,"Roland GS EFX");return}case 0:{let o=a<<8|A[8],i=this.insertionEffects.get(o);i?(z("EFX Type",o.toString(16)),this.insertionProcessor=i):(this.insertionProcessor=this.insertionFallback,k(`%cUnsupported EFX processor: %c${o.toString(16)}%c, using Thru.`,l.warn,l.unrecognized,l.warn)),this.resetInsertionParams(),this.insertionProcessor.reset(),this.callEvent("effectChange",{effect:"insertion",parameter:0,value:o});return}case 23:{this.insertionProcessor.sendLevelToReverb=a/127*zt,z("EFX Send Level to Reverb",a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return}case 24:{this.insertionProcessor.sendLevelToChorus=a/127*zt,z("EFX Send Level to Chorus",a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return}case 25:{this.insertionProcessor.sendLevelToDelay=a/127*zt,this.delayActive=!0,z("EFX Send Level to Delay",a),this.callEvent("effectChange",{effect:"insertion",parameter:n,value:a});return}}}if(s>>4===1){let o=it(s&15)+e,i=this.midiChannels[o];switch(n){default:{qe(A,"Roland GS");return}case 0:{i.controllerChange(u.bankSelect,a),i.programChange(A[8]);break}case 2:{i.rxChannel=a===16?-1:a+e,this.customChannelNumbers||=i.rxChannel!==i.channel,z(`Rx. Channel on ${o}`,i.rxChannel);break}case 19:{i.polyMode=a===1,z(`Mono/poly on ${o}`,i.polyMode?"POLY":"MONO");break}case 20:{z(`Assign mode on ${o}`,a);break}case 21:{i.drumMap=a;let r=a>0;i.setGSDrums(r),z(`Drums on ${o}`,r.toString());return}case 22:{let r=a-64;i.setCustomController(Ce.channelKeyShift,r),z(`Key shift on ${o}`,r);return}case 25:{i.controllerChange(u.mainVolume,a);return}case 28:{let r=a;r===0?(i.randomPan=!0,z(`Random pan on ${o}`,"ON")):(i.randomPan=!1,i.controllerChange(u.pan,r));break}case 31:{i.cc1=a,z("CC1 Controller Number",a);break}case 32:{i.cc2=a,z("CC2 Controller Number",a);break}case 33:{i.controllerChange(u.chorusDepth,a);break}case 34:{i.controllerChange(u.reverbDepth,a);break}case 42:{let h=((a<<7|A[8])-8192)/81.92;i.setTuning(h);break}case 44:{i.controllerChange(u.variationDepth,a);break}case 48:{i.controllerChange(u.vibratoRate,a);break}case 49:{i.controllerChange(u.vibratoDepth,a);break}case 50:{i.controllerChange(u.brightness,a);break}case 51:{i.controllerChange(u.filterResonance,a);break}case 52:{i.controllerChange(u.attackTime,a);break}case 53:{i.controllerChange(u.decayTime,a);break}case 54:{i.controllerChange(u.releaseTime,a);break}case 55:{i.controllerChange(u.vibratoDelay,a);break}case 64:{let r=A.length-9,h=new Int8Array(12);for(let I=0;I<r;I++)h[I]=A[I+7]-64;i.setOctaveTuning(h);let c=a-64;z(`Octave Scale Tuning on ${o}`,h.join(", ")),i.setTuning(c);break}}return}if(s>>4===2){let o=it(s&15)+e,i=this.midiChannels[o];switch(n&240){default:{qe(A,"Roland GS Patch Parameter Controller");break}case 0:{if((n&15)===4){let r=a/127*600;i.customControllers[Ce.modulationMultiplier]=r/50,AA(i.channel,r,"modulation wheel depth","cents");break}i.sysExModulators.setupReceiver(n,a,u.modulationWheel,"mod wheel");break}case 16:{if((n&15)===0){let r=a-64;i.midiControllers[ve+Ae.pitchWheelRange]=r<<7,AA(i.channel,r,"pitch wheel range","semitones");break}i.sysExModulators.setupReceiver(n,a,ve+Ae.pitchWheel,"pitch wheel",!0);break}case 32:{i.sysExModulators.setupReceiver(n,a,ve+Ae.channelPressure,"channel pressure");break}case 48:{i.sysExModulators.setupReceiver(n,a,ve+Ae.polyPressure,"poly pressure");break}case 64:{i.sysExModulators.setupReceiver(n,a,i.cc1,"CC1");break}case 80:i.sysExModulators.setupReceiver(n,a,i.cc2,"CC2")}return}if(s>>4===4){let o=it(s&15)+e,i=this.midiChannels[o];switch(n){default:{qe(A,"Roland GS Patch Part Parameter");break}case 0:case 1:{i.controllerChange(u.bankSelectLSB,a);break}case 34:{if(this.masterParameters.insertionEffectLock)return;let r=a===1;i.insertionEnabled=r,this.insertionActive||=r,z(`Insertion for ${o}`,r?"ON":"OFF"),this.callEvent("effectChange",{effect:"insertion",parameter:r?-1:-2,value:o})}}return}qe(A,"Roland GS Patch Parameter");return}if(t===65){if(this.masterParameters.drumLock)return;let o=(s>>4)+1,i=n;switch(s&15){default:{qe(A,"Roland GS Drum Setup");return}case 0:{let h=cA(A,12,7);z(`Patch Name for MAP${o}`,h);break}case 1:{let h=a-60;for(let c of this.midiChannels)c.drumMap===o&&(c.drumParams[i].pitch=h*(c.patch.bankLSB===1?100:50));z(`Drum Pitch for MAP${o}, key ${i}`,h);break}case 2:{for(let h of this.midiChannels)h.drumMap===o&&(h.drumParams[i].gain=a/120);z(`Drum Level for MAP${o}, key ${i}`,a);break}case 3:{for(let h of this.midiChannels)h.drumMap===o&&(h.drumParams[i].exclusiveClass=a);z(`Drum Assign Group for MAP${o}, key ${i}`,a);break}case 4:{for(let h of this.midiChannels)h.drumMap===o&&(h.drumParams[i].pan=a);z(`Drum Pan for MAP${o}, key ${i}`,a);break}case 5:{for(let h of this.midiChannels)h.drumMap===o&&(h.drumParams[i].reverbGain=a/127);z(`Drum Reverb for MAP${o}, key ${i}`,a);break}case 6:{for(let h of this.midiChannels)h.drumMap===o&&(h.drumParams[i].chorusGain=a/127);z(`Drum Chorus for MAP${o}, key ${i}`,a);break}case 7:{for(let h of this.midiChannels)h.drumMap===o&&(h.drumParams[i].rxNoteOff=a===1);z(`Drum Note Off for MAP${o}, key ${i}`,a===1);break}case 8:{for(let h of this.midiChannels)h.drumMap===o&&(h.drumParams[i].rxNoteOn=a===1);z(`Drum Note On for MAP${o}, key ${i}`,a===1);break}case 9:{for(let h of this.midiChannels)h.drumMap===o&&(h.drumParams[i].delayGain=a/127);z(`Drum Delay for MAP${o}, key ${i}`,a);break}}return}qe(A,"Roland GS");return}case 69:{A[4]===16&&(A[5]===0?this.callEvent("synthDisplay",[...A]):A[5]===1?this.callEvent("synthDisplay",[...A]):qe(A,"Roland GS Display"));return}case 22:if(A[4]===16){this.setMIDIVolume(A[7]/100),k(`%cRoland Master Volume control set to: %c${A[7]}`,l.info,l.value);return}else qe(A,"Roland")}else{qe(A,"Roland");return}}var Oe=(A,e)=>{k(`%cYamaha XG ${A}%c for is now set to %c${e}%c.`,l.recognized,l.info,l.value,l.info)};function Po(A,e=0){if(A[2]===76){let t=A[3],s=A[4],n=A[5],a=A[6];if(t===0&&s===0){switch(n){case 0:{{let i=(((A[6]&15)<<12|(A[7]&15)<<8|(A[8]&15)<<4|A[9]&15)-1024)/10;this.setMasterTuning(i),Oe("Master Tune",i)}break}case 4:{this.setMIDIVolume(a/127),Oe("Master Volume",a);break}case 5:{let o=127-a;this.setMIDIVolume(o/127),Oe("Master Attenuation",a);break}case 6:{let o=a-64;this.setMasterParameter("transposition",o),Oe("Master Transpose",o);break}case 127:case 126:{k("%cXG system on",l.info),this.resetAllControllers("xg");break}}return}if(t===2&&s===1){let o,i=n;i<=21?o="Reverb":i<=35?o="Chorus":o="Variation",k(`%cUnsupported XG ${o} Parameter: %c${i.toString(16)}`,l.warn,l.unrecognized);return}if(t===8){if(!Re.isSystemXG(this.masterParameters.midiSystem))return;let o=s+e;if(o>=this.midiChannels.length)return;let i=this.midiChannels[o];switch(n){case 1:{i.controllerChange(u.bankSelect,a);break}case 2:{i.controllerChange(u.bankSelectLSB,a);break}case 3:{i.programChange(a);break}case 4:{i.rxChannel=a+e,this.customChannelNumbers||=i.rxChannel!==i.channel,Oe(`Rev. Channel on ${o}`,i.rxChannel);break}case 5:{i.polyMode=a===1,Oe(`Mono/poly on ${o}`,i.polyMode?"POLY":"MONO");break}case 7:{i.setDrums(a!==0);break}case 8:{if(i.drumChannel)break;let r=a-64;i.setCustomController(Ce.channelKeyShift,r),Oe(`Key shift on ${o}`,r);break}case 11:{i.controllerChange(u.mainVolume,a);break}case 14:{let r=a;r===0?(i.randomPan=!0,Oe(`Random Pan for ${o}`,"ON")):i.controllerChange(u.pan,r);break}case 18:{i.controllerChange(u.chorusDepth,a);break}case 19:{i.controllerChange(u.reverbDepth,a);break}case 21:{i.controllerChange(u.vibratoRate,a);break}case 22:{i.controllerChange(u.vibratoDepth,a);break}case 23:{i.controllerChange(u.vibratoDelay,a);break}case 24:{i.controllerChange(u.brightness,a);break}case 25:{i.controllerChange(u.filterResonance,a);break}case 26:{i.controllerChange(u.attackTime,a);break}case 27:{i.controllerChange(u.decayTime,a);break}case 28:{i.controllerChange(u.releaseTime,a);break}default:k(`%cUnsupported Yamaha XG Part Setup: %c${A[5].toString(16).toUpperCase()}%c for channel ${o}`,l.warn,l.unrecognized,l.warn)}return}if(t>>4===3){if(this.masterParameters.drumLock)return;let o=s;switch(n){default:{qe([n],"Yamaha XG Drum Setup");return}case 0:{let i=(a-64)*100;for(let r of this.midiChannels)r.drumChannel&&(r.drumParams[o].pitch=i);Oe(`Drum Pitch, key ${o}`,i);break}case 1:{let i=a-64;for(let r of this.midiChannels)r.drumChannel&&(r.drumParams[o].pitch+=i);Oe(`Drum Pitch Fine, key ${o}`,i);break}case 2:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[o].gain=a/120);Oe(`Drum Level, key ${o}`,a);break}case 3:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[o].exclusiveClass=a);Oe(`Drum Alternate Group, key ${o}`,a);break}case 4:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[o].pan=a);Oe(`Drum Pan, key ${o}`,a);break}case 5:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[o].reverbGain=a/127);Oe(`Drum Reverb, key ${o}`,a);break}case 6:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[o].chorusGain=a/127);Oe(`Drum Chorus, key ${o}`,a);break}case 9:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[o].rxNoteOff=a===1);Oe(`Drum Note Off, key ${o}`,a===1);break}case 10:{for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[o].rxNoteOn=a===1);Oe(`Drum Note On, key ${o}`,a===1);break}}return}t===6||t===7?this.callEvent("synthDisplay",[...A]):Re.isSystemXG(this.masterParameters.midiSystem)&&qe(A,"Yamaha XG")}else qe(A,"Yamaha")}function xo(A,e=0){e+=this.portSelectChannelOffset;let t=A[0];if(!(this.masterParameters.deviceID!==gt&&A[1]!==127&&this.masterParameters.deviceID!==A[1]))switch(t){default:{k(`%cUnknown manufacturer: %c${cs(A)}`,l.warn,l.unrecognized);break}case 126:case 127:{To.call(this,A,e);break}case 65:{Uo.call(this,A,e);break}case 67:{Po.call(this,A,e);break}case 245:{if(A.length<2)return;for(this.portSelectChannelOffset=(A[1]-1)*16;this.midiChannels.length<=this.portSelectChannelOffset;){k(`%cPort select, channel offset %c${this.portSelectChannelOffset}%c. Creating a new port!`,l.info,l.value,l.info);for(let s=0;s<16;s++)this.createMIDIChannel(!0)}break}}}var hi=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=0;reset(){}process(A,e,t,s,n,a,o,i,r){let{sendLevelToReverb:h,sendLevelToChorus:c,sendLevelToDelay:I}=this;for(let E=0;E<r;E++){let B=A[E],d=e[E],y=i+E;t[y]+=B,s[y]+=d;let D=(B+d)*.5;n[E]+=D*h,a[E]+=D*c,o[E]+=D*I}}setParameter(A,e){}},wA=class{static data=[[0,200,200,0,0,.05,.05,315,250,200,250,100,-180,0],[.1,205,205,.1,5,.1,.1,315,250,200,250,110,-180,1],[.2,210,210,.2,10,.15,.15,315,250,200,250,120,-180,2],[.3,215,215,.3,15,.2,.2,315,250,200,250,130,-180,3],[.4,220,220,.4,20,.25,.25,315,250,200,250,140,-180,4],[.5,225,225,.5,25,.3,.3,315,250,200,250,150,-180,5],[.6,230,230,.6,30,.35,.35,315,250,200,250,160,-168,5],[.7,235,235,.7,35,.4,.4,315,250,200,250,170,-168,5],[.8,240,240,.8,40,.45,.45,400,315,250,315,180,-168,5],[.9,245,245,.9,45,.5,.5,400,315,250,315,190,-168,5],[1,250,250,1,50,.55,.55,400,315,250,315,200,-156,5],[1.1,255,255,1.1,55,.6,.6,400,315,250,315,210,-156,5],[1.2,260,260,1.2,60,.65,.65,400,315,250,315,220,-156,5],[1.3,265,265,1.3,65,.7,.7,400,315,250,315,230,-156,5],[1.4,270,270,1.4,70,.75,.75,400,315,250,315,240,-144,5],[1.5,275,275,1.5,75,.8,.8,400,315,250,315,250,-144,5],[1.6,280,280,1.6,80,.85,.85,500,400,315,400,260,-144,5],[1.7,285,285,1.7,85,.9,.9,500,400,315,400,270,-144,5],[1.8,290,290,1.8,90,.95,.95,500,400,315,400,280,-132,5],[1.9,295,295,1.9,95,1,1,500,400,315,400,290,-132,5],[2,300,300,2,100,1.05,1.05,500,400,315,400,300,-132,5],[2.1,305,305,2.1,105,1.1,1.1,500,400,315,400,320,-132,5],[2.2,310,310,2.2,110,1.15,1.15,500,400,315,400,340,-120,5],[2.3,315,315,2.3,115,1.2,1.2,500,400,315,400,360,-120,5],[2.4,320,320,2.4,120,1.25,1.25,630,500,400,500,380,-120,5],[2.5,325,325,2.5,125,1.3,1.3,630,500,400,500,400,-120,5],[2.6,330,330,2.6,130,1.35,1.35,630,500,400,500,420,-108,5],[2.7,335,335,2.7,135,1.4,1.4,630,500,400,500,440,-108,5],[2.8,340,340,2.8,140,1.45,1.45,630,500,400,500,460,-108,5],[2.9,345,345,2.9,145,1.5,1.5,630,500,400,500,480,-108,5],[3,350,350,3,150,1.55,1.55,630,500,400,500,500,-96,6],[3.1,355,355,3.1,155,1.6,1.6,630,500,400,500,520,-96,6],[3.2,360,360,3.2,160,1.65,1.65,800,630,500,630,540,-96,6],[3.3,365,365,3.3,165,1.7,1.7,800,630,500,630,560,-96,6],[3.4,370,370,3.4,170,1.75,1.75,800,630,500,630,580,-84,6],[3.5,375,375,3.5,175,1.8,1.8,800,630,500,630,600,-84,6],[3.6,380,380,3.6,180,1.85,1.85,800,630,500,630,620,-84,6],[3.7,385,385,3.7,185,1.9,1.9,800,630,500,630,640,-84,6],[3.8,390,390,3.8,190,1.95,1.95,800,630,500,630,660,-72,6],[3.9,395,395,3.9,195,2,2,800,630,500,630,680,-72,6],[4,400,400,4,200,2.05,2.05,1e3,800,630,800,700,-72,6],[4.1,405,405,4.1,205,2.1,2.1,1e3,800,630,800,720,-72,6],[4.2,410,410,4.2,210,2.15,2.15,1e3,800,630,800,740,-60,6],[4.3,415,415,4.3,215,2.2,2.2,1e3,800,630,800,760,-60,6],[4.4,420,420,4.4,220,2.25,2.25,1e3,800,630,800,780,-60,6],[4.5,425,425,4.5,225,2.3,2.3,1e3,800,630,800,800,-60,6],[4.6,430,430,4.6,230,2.35,2.35,1e3,800,630,800,820,-48,6],[4.7,435,435,4.7,235,2.4,2.4,1e3,800,630,800,840,-48,6],[4.8,440,440,4.8,240,2.45,2.45,1250,1e3,800,1e3,860,-48,9],[4.9,445,445,4.9,245,2.5,2.5,1250,1e3,800,1e3,880,-48,9],[5,450,450,5,250,2.55,2.55,1250,1e3,800,1e3,900,-36,9],[5.5,455,455,5.5,255,2.6,2.6,1250,1e3,800,1e3,920,-36,9],[6,460,460,6,260,2.65,2.65,1250,1e3,800,1e3,940,-36,9],[6.5,465,465,6.5,265,2.7,2.7,1250,1e3,800,1e3,960,-36,9],[7,470,470,7,270,2.75,2.75,1250,1e3,800,1e3,980,-24,9],[7.5,475,475,7.5,275,2.8,2.8,1250,1e3,800,1e3,1e3,-24,9],[8,480,480,8,280,2.85,2.85,1600,1250,1e3,1250,1100,-24,9],[8.5,485,485,8.5,285,2.9,2.9,1600,1250,1e3,1250,1200,-24,9],[9,490,490,9,290,2.95,2.95,1600,1250,1e3,1250,1300,-12,9],[9.5,495,495,9.5,295,3,3,1600,1250,1e3,1250,1400,-12,9],[10,500,500,10,300,3.05,3.05,1600,1250,1e3,1250,1500,-12,9],[11,505,505,11,305,3.1,3.1,1600,1250,1e3,1250,1600,-12,9],[12,510,510,12,310,3.15,3.15,1600,1250,1e3,1250,1700,0,9],[13,515,515,13,315,3.2,3.2,1600,1250,1e3,1250,1800,0,9],[14,520,520,14,320,3.25,3.25,2e3,1600,1250,1600,1900,0,12],[15,525,525,15,325,3.3,3.3,2e3,1600,1250,1600,2e3,0,12],[16,530,530,16,330,3.35,3.35,2e3,1600,1250,1600,2100,12,12],[17,535,535,17,335,3.4,3.4,2e3,1600,1250,1600,2200,12,12],[18,540,540,18,340,3.45,3.45,2e3,1600,1250,1600,2300,12,12],[19,545,545,19,345,3.5,3.5,2e3,1600,1250,1600,2400,12,12],[20,550,550,20,350,3.55,3.55,2e3,1600,1250,1600,2500,24,12],[21,560,555,21,355,3.6,3.6,2e3,1600,1250,1600,2600,24,12],[22,570,560,22,360,3.65,3.65,2500,2e3,1600,2e3,2700,24,12],[23,580,565,23,365,3.7,3.7,2500,2e3,1600,2e3,2800,24,12],[24,590,570,24,370,3.75,3.75,2500,2e3,1600,2e3,2900,36,12],[25,600,575,25,375,3.8,3.8,2500,2e3,1600,2e3,3e3,36,12],[26,610,580,26,380,3.85,3.85,2500,2e3,1600,2e3,3100,36,12],[27,620,585,27,385,3.9,3.9,2500,2e3,1600,2e3,3200,36,12],[28,630,590,28,390,3.95,3.95,2500,2e3,1600,2e3,3300,48,12],[29,640,595,29,395,4,4,2500,2e3,1600,2e3,3400,48,12],[30,650,600,30,400,4.05,4.05,3150,2500,2e3,2500,3500,48,10],[31,660,610,31,405,4.1,4.1,3150,2500,2e3,2500,3600,48,10],[32,670,620,32,410,4.15,4.15,3150,2500,2e3,2500,3700,60,10],[33,680,630,33,415,4.2,4.2,3150,2500,2e3,2500,3800,60,10],[34,690,640,34,420,4.25,4.25,3150,2500,2e3,2500,3900,60,10],[35,700,650,35,425,4.3,4.3,3150,2500,2e3,2500,4e3,60,10],[36,710,660,36,430,4.35,4.35,3150,2500,2e3,2500,4100,72,10],[37,720,670,37,435,4.4,4.4,3150,2500,2e3,2500,4200,72,10],[38,730,680,38,440,4.45,4.45,4e3,3150,2500,3150,4300,72,11],[39,740,690,39,445,4.5,4.5,4e3,3150,2500,3150,4400,72,11],[40,750,700,40,450,4.55,4.55,4e3,3150,2500,3150,4500,84,11],[41,760,710,50,455,4.6,4.6,4e3,3150,2500,3150,4600,84,11],[42,770,720,60,460,4.65,4.65,4e3,3150,2500,3150,4700,84,11],[43,780,730,70,465,4.7,4.7,4e3,3150,2500,3150,4800,84,11],[44,790,740,80,470,4.75,4.75,4e3,3150,2500,3150,4900,96,11],[45,800,750,90,475,4.8,4.8,4e3,3150,2500,3150,5e3,96,11],[46,810,760,100,480,4.85,4.85,5e3,4e3,3150,4e3,5100,96,12],[47,820,770,110,485,4.9,4.9,5e3,4e3,3150,4e3,5200,96,12],[48,830,780,120,490,4.95,4.95,5e3,4e3,3150,4e3,5300,108,12],[49,840,790,130,495,5,5,5e3,4e3,3150,4e3,5400,108,12],[50,850,800,140,500,5.1,5.05,5e3,4e3,3150,4e3,5500,108,12],[52,860,810,150,505,5.2,5.1,5e3,4e3,3150,4e3,5600,108,12],[54,870,820,160,510,5.3,5.15,5e3,4e3,3150,4e3,5700,120,12],[56,880,830,170,515,5.4,5.2,5e3,4e3,3150,4e3,5800,120,12],[58,890,840,180,520,5.5,5.25,6300,5e3,4e3,5e3,5900,120,13],[60,900,850,190,525,5.6,5.3,6300,5e3,4e3,5e3,6e3,120,13],[62,910,860,200,530,5.7,5.35,6300,5e3,4e3,5e3,6100,132,13],[64,920,870,210,535,5.8,5.4,6300,5e3,4e3,5e3,6200,132,13],[66,930,880,220,540,5.9,5.45,6300,5e3,4e3,5e3,6300,132,13],[68,940,890,230,545,6,5.5,6300,5e3,4e3,5e3,6400,132,13],[70,950,900,240,550,6.1,5.55,6300,5e3,4e3,5e3,6500,144,13],[72,960,910,250,555,6.2,5.6,6300,5e3,4e3,5e3,6600,144,13],[74,970,920,260,560,6.3,5.65,8e3,6300,5e3,6300,6700,144,14],[76,980,930,270,565,6.4,5.7,8e3,6300,5e3,6300,6800,144,14],[78,990,940,280,570,6.5,5.75,8e3,6300,5e3,6300,6900,156,14],[80,1e3,950,290,575,6.6,5.8,8e3,6300,5e3,6300,7e3,156,14],[82,1e3,960,300,580,6.7,5.85,8e3,6300,5e3,6300,7100,156,14],[84,1e3,970,320,585,6.8,5.9,8e3,6300,5e3,6300,7200,156,14],[86,1e3,980,340,590,6.9,5.95,8e3,6300,5e3,6300,7300,168,14],[88,1e3,990,360,595,7,6,8e3,6300,5e3,6300,7400,168,14],[90,1e3,1e3,380,600,7.5,6.05,13500,8e3,6300,13500,7500,168,15],[92,1e3,1e3,400,605,8,6.1,13500,8e3,6300,13500,7600,168,15],[94,1e3,1e3,420,610,8.5,6.15,13500,8e3,6300,13500,7700,-180,15],[96,1e3,1e3,440,615,9,6.2,13500,8e3,6300,13500,7800,-180,15],[98,1e3,1e3,460,620,9.5,6.25,13500,8e3,6300,13500,7900,-180,15],[100,1e3,1e3,480,625,10,6.3,13500,8e3,6300,13500,8e3,-180,15],[100,1e3,1e3,500,630,10,6.35,13500,8e3,6300,13500,8e3,-180,15],[100,1e3,1e3,500,635,10,6.4,13500,8e3,6300,13500,8e3,-180,15]];static preDelayTime(A){return this.data[A][0]}static delayTime1(A){return this.data[A][1]}static delayTime2(A){return this.data[A][2]}static delayTime3(A){return this.data[A][3]}static delayTime4(A){return this.data[A][4]}static rate1(A){return this.data[A][5]}static rate2(A){return this.data[A][6]}static hfDamp(A){return this.data[A][7]}static cutoffFreq(A){return this.data[A][8]}static eqFreq(A){return this.data[A][9]}static lpf(A){return this.data[A][10]}static manual(A){return this.data[A][11]}static azimuth(A){return this.data[A][12]}static accl(A){return this.data[A][13]}},Ia=Math.PI/2,ss=-64,gi=63,Nn=gi-ss,hs=new Float32Array(Nn+1),gs=new Float32Array(Nn+1);for(let A=ss;A<=gi;A++){let e=(A-ss)/Nn,t=A-ss;hs[t]=Math.cos(Ia*e),gs[t]=Math.sin(Ia*e)}function be(A){A.x1=A.x2=A.y1=A.y2=0}var $e={b0:1,b1:0,b2:0,a0:1,a1:0,a2:0};function XA(A,e,t,s,n){let a=e.b0*A+e.b1*s.x1+e.b2*s.x2-e.a1*s.y1-e.a2*s.y2;s.x2=s.x1,s.x1=A,s.y2=s.y1,s.y1=a;let o=t.b0*a+t.b1*n.x1+t.b2*n.x2-t.a1*n.y1-t.a2*n.y2;return n.x2=n.x1,n.x1=a,n.y2=n.y1,n.y1=o,o}function QA(A,e,t){let s=e.b0*A+e.b1*t.x1+e.b2*t.x2-e.a1*t.y1-e.a2*t.y2;return t.x2=t.x1,t.x1=A,t.y2=t.y1,t.y1=s,s}function NA(A,e,t,s,n){let a=Math.pow(10,e/40),o=2*Math.PI*t/s,i=Math.cos(o),c=Math.sin(o)/2*Math.sqrt((a+1/a)*(1/1-1)+2),I,E,B,d,y,D;n?(I=a*(a+1-(a-1)*i+2*Math.sqrt(a)*c),E=2*a*(a-1-(a+1)*i),B=a*(a+1-(a-1)*i-2*Math.sqrt(a)*c),d=a+1+(a-1)*i+2*Math.sqrt(a)*c,y=-2*(a-1+(a+1)*i),D=a+1+(a-1)*i-2*Math.sqrt(a)*c):(I=a*(a+1+(a-1)*i+2*Math.sqrt(a)*c),E=-2*a*(a-1+(a+1)*i),B=a*(a+1+(a-1)*i-2*Math.sqrt(a)*c),d=a+1-(a-1)*i+2*Math.sqrt(a)*c,y=2*(a-1-(a+1)*i),D=a+1-(a-1)*i-2*Math.sqrt(a)*c),A.b0=I/d,A.b1=E/d,A.b2=B/d,A.a0=1,A.a1=y/d,A.a2=D/d}var Le={x1:0,x2:0,y1:0,y2:0},Ho=class{type=256;sendLevelToReverb=0;sendLevelToChorus=0;sendLevelToDelay=0;sampleRate;level=1;lowFreq=400;lowGain=5;hiFreq=8e3;hiGain=-12;m1Freq=1600;m1Q=.5;m1Gain=8;m2Freq=1e3;m2Q=.5;m2Gain=-8;lowCoeffs={...$e};m1Coeffs={...$e};m2Coeffs={...$e};hiCoeffs={...$e};lowStateL={...Le};lowStateR={...Le};m1StateL={...Le};m1StateR={...Le};m2StateL={...Le};m2StateR={...Le};hiStateL={...Le};hiStateR={...Le};constructor(A){this.sampleRate=A,this.reset(),this.updateCoefficients()}reset(){this.level=1,this.lowFreq=400,this.lowGain=5,this.hiGain=-12,this.hiFreq=8e3,this.m1Freq=1600,this.m1Q=.5,this.m1Gain=8,this.m2Freq=1e3,this.m2Q=.5,this.m2Gain=-8,be(this.lowStateL),be(this.lowStateR),be(this.m1StateL),be(this.m1StateR),be(this.m2StateL),be(this.m2StateR),be(this.hiStateL),be(this.hiStateR),this.updateCoefficients()}setParameter(A,e){switch(A){default:break;case 3:{this.lowFreq=e===1?400:200;break}case 4:{this.lowGain=e-64;break}case 5:{this.hiFreq=e===1?8e3:4e3;break}case 6:{this.hiGain=e-64;break}case 7:{this.m1Freq=wA.eqFreq(e);break}case 8:{this.m1Q=[.5,1,2,4,9][e]||1;break}case 9:{this.m1Gain=e-64;break}case 10:{this.m2Freq=wA.eqFreq(e);break}case 11:{this.m2Q=[.5,1,2,4,9][e]||1;break}case 12:{this.m2Gain=e-64;break}case 22:{this.level=e/127;break}}this.updateCoefficients()}process(A,e,t,s,n,a,o,i,r){let{level:h,sendLevelToChorus:c,sendLevelToDelay:I,sendLevelToReverb:E,lowCoeffs:B,lowStateL:d,lowStateR:y,m1Coeffs:D,m1StateL:M,m1StateR:F,m2StateL:w,m2StateR:S,m2Coeffs:P,hiCoeffs:C,hiStateL:x,hiStateR:J}=this;for(let Y=0;Y<r;Y++){let T=A[Y],U=e[Y];T=QA(T,B,d),U=QA(U,B,y),T=QA(T,D,M),U=QA(U,D,F),T=QA(T,P,w),U=QA(U,P,S),T=QA(T,C,x),U=QA(U,C,J);let q=i+Y;t[q]+=T*h,s[q]+=U*h;let m=.5*(T+U);n[Y]+=m*E,a[Y]+=m*c,o[Y]+=m*I}}updateCoefficients(){Oo(this.lowCoeffs,this.lowFreq,this.lowGain/2,this.sampleRate),la(this.m1Coeffs,this.m1Freq,this.m1Gain,this.m1Q,this.sampleRate),la(this.m2Coeffs,this.m2Freq,this.m2Gain,this.m2Q,this.sampleRate),Yo(this.hiCoeffs,this.hiFreq,this.hiGain/2,this.sampleRate)}},ci=1;function la(A,e,t,s,n){let a=Math.pow(10,t/40),o=2*Math.PI*e/n,i=Math.cos(o),h=Math.sin(o)/(2*s),c=1+h*a,I=-2*i,E=1-h*a,B=1+h/a,d=-2*i,y=1-h/a;A.a0=1,A.a1=d/B,A.a2=y/B,A.b0=c/B,A.b1=I/B,A.b2=E/B}function Oo(A,e,t,s){let n=Math.pow(10,t/40),a=2*Math.PI*e/s,o=Math.cos(a),r=Math.sin(a)/2*Math.sqrt((n+1/n)*(1/ci-1)+2),h=n*(n+1-(n-1)*o+2*Math.sqrt(n)*r),c=2*n*(n-1-(n+1)*o),I=n*(n+1-(n-1)*o-2*Math.sqrt(n)*r),E=n+1+(n-1)*o+2*Math.sqrt(n)*r,B=-2*(n-1+(n+1)*o),d=n+1+(n-1)*o-2*Math.sqrt(n)*r;A.a0=1,A.a1=B/E,A.a2=d/E,A.b0=h/E,A.b1=c/E,A.b2=I/E}function Yo(A,e,t,s){let n=Math.pow(10,t/40),a=2*Math.PI*e/s,o=Math.cos(a),r=Math.sin(a)/2*Math.sqrt((n+1/n)*(1/ci-1)+2),h=n*(n+1+(n-1)*o+2*Math.sqrt(n)*r),c=-2*n*(n-1+(n+1)*o),I=n*(n+1+(n-1)*o-2*Math.sqrt(n)*r),E=n+1-(n-1)*o+2*Math.sqrt(n)*r,B=2*(n-1-(n+1)*o),d=n+1-(n-1)*o-2*Math.sqrt(n)*r;A.a0=1,A.a1=B/E,A.a2=d/E,A.b0=h/E,A.b1=c/E,A.b2=I/E}var st=8,zs=128,Ca=4,_s=600,qo=.9,Ea=.35,Ii=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=288;manual=620;rate=.85;depth=64/zs;reso=16/127;mix=1;lowGain=0;hiGain=0;prevInL;prevOutL;prevInR;prevOutR;lowShelfCoef={...$e};highShelfCoef={...$e};manualOffset=_s;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=Ea;sampleRate;constructor(A){this.sampleRate=A,this.prevInL=new Float32Array(st),this.prevOutL=new Float32Array(st),this.prevInR=new Float32Array(st),this.prevOutR=new Float32Array(st),this.reset()}reset(){this.phase=Ea,this.setManual(620),this.rate=.85,this.depth=64/zs,this.reso=16/127,this.mix=1,this.lowGain=0,this.hiGain=0,this.level=104/127,be(this.highShelfStateL),be(this.highShelfStateR),be(this.lowShelfStateL),be(this.lowShelfStateR),this.updateShelves(),this.clearAllPass()}process(A,e,t,s,n,a,o,i,r){let{sendLevelToReverb:h,sendLevelToChorus:c,sendLevelToDelay:I,level:E,manual:B,manualOffset:d,mix:y,lowShelfCoef:D,lowShelfStateR:M,lowShelfStateL:F,highShelfCoef:w,highShelfStateL:S,highShelfStateR:P,prevInL:C,prevInR:x,prevOutL:J,prevOutR:Y,sampleRate:T,depth:U}=this,{prevL:q,prevR:m,phase:v}=this,H=this.rate/this.sampleRate,O=this.reso*qo;for(let b=0;b<r;b++){let G=XA(A[b],D,w,F,S),K=XA(e[b],D,w,M,P),ee=2*Math.abs(v-.5);(v+=H)>=1&&(v-=1);let ie=1-U*ee,Ee=d+B*ie,oe=Math.tan(Math.PI*Ee/T),le=Math.max(-.9999,Math.min(.9999,(1-oe)/(1+oe))),re=G+O*q,Ie=K+O*m;for(let Be=0;Be<st;Be++){let Ue=-le*re+C[Be]+le*J[Be];C[Be]=re,J[Be]=Ue,re=Ue;let Je=-le*Ie+x[Be]+le*Y[Be];x[Be]=Ie,Y[Be]=Je,Ie=Je}q=re,m=Ie;let ke=(G+re*y)*E,_=(K+Ie*y)*E,ce=i+b;t[ce]+=ke,s[ce]+=_;let Te=(ke+_)*.5;n[b]+=Te*h,a[b]+=Te*c,o[b]+=Te*I}this.phase=v,this.prevL=q,this.prevR=m}setParameter(A,e){switch(A){default:break;case 3:{this.setManual(wA.manual(e));break}case 4:{this.rate=wA.rate1(e);break}case 5:{this.depth=e/zs;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=_s*1.5*Ca,this.manual=A):(this.manualOffset=_s,this.manual=A*Ca)}clearAllPass(){this.prevR=0,this.prevL=0;for(let A=0;A<st;A++)this.prevInL[A]=0,this.prevOutL[A]=0,this.prevInR[A]=0,this.prevOutR[A]=0}updateShelves(){NA(this.lowShelfCoef,this.lowGain,200,this.sampleRate,!0),NA(this.highShelfCoef,this.hiGain,4e3,this.sampleRate,!1)}},Ba=Math.PI*2,Jo=.935,Ko=2,Vo=.01,da=127,Xo=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=294;modWave=1;modRate=3.05;modDepth=96;lowGain=0;hiGain=0;level=da/127;currentPan=0;phase=0;lsCoeffs={...$e};hsCoeffs={...$e};lsStateR={...Le};lsStateL={...Le};hsStateR={...Le};hsStateL={...Le};sampleRate;constructor(A){this.sampleRate=A,this.reset()}reset(){this.modWave=1,this.modRate=3.05,this.modDepth=96,this.lowGain=0,this.hiGain=0,this.level=da/127,this.currentPan=0,this.phase=0,be(this.hsStateR),be(this.hsStateL),be(this.lsStateR),be(this.lsStateL),this.updateShelves()}process(A,e,t,s,n,a,o,i,r){let{sendLevelToReverb:h,sendLevelToChorus:c,sendLevelToDelay:I,level:E,lsCoeffs:B,lsStateL:d,lsStateR:y,hsCoeffs:D,hsStateR:M,hsStateL:F,modWave:w}=this,S=Math.pow(this.modDepth/127,Ko),P=2/(1+S)*Jo,C=this.modRate/this.sampleRate,{phase:x,currentPan:J}=this;for(let Y=0;Y<r;Y++){let T=XA(A[Y],B,D,d,F),U=XA(e[Y],B,D,y,M),q;switch(w){default:{q=1-4*Math.abs(x-.5);break}case 1:{q=x>.5?-1:-Math.cos((x-.75)*Ba);break}case 2:{q=Math.sin(Ba*x);break}case 3:{q=1-2*x;break}case 4:{q=2*x-1;break}}(x+=C)>=1&&(x-=1),J+=(q-J)*Vo;let m=J*S,v=(1-m)*.5*P,H=(1+m)*.5*P,O=T*E*v,b=U*E*H,G=i+Y;t[G]+=O,s[G]+=b;let K=(O+b)*.5;n[Y]+=K*h,a[Y]+=K*c,o[Y]+=K*I}this.currentPan=J,this.phase=x}setParameter(A,e){switch(A){default:break;case 3:{this.modWave=e;break}case 4:{this.modRate=wA.rate1(e);break}case 5:{this.modDepth=e;break}case 19:{this.lowGain=e-64;break}case 20:{this.hiGain=e-64;break}case 22:{this.level=e/127;break}}this.updateShelves()}updateShelves(){NA(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),NA(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}},Qa=96,Zo=.1,Wo=.1,zo=27,_o=28,$o=-28,jo=400,eh=.62,Ah=.005,li=5,fa=li*.5,Ci=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=Qa/127;coeffs={...$e};state={...Le};hpCoeffs={...$e};hpState={...Le};phase=0;lsCoeffs={...$e};hsCoeffs={...$e};lsState={...Le};hsState={...Le};sampleRate;lastFc=this.manual;attackCoeff;releaseCoeff;envelope=0;constructor(A){this.sampleRate=A,this.attackCoeff=Math.exp(-1/(Zo*A)),this.releaseCoeff=Math.exp(-1/(Wo*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=Qa/127,this.phase=.2,this.lastFc=this.manual,be(this.hsState),be(this.lsState),be(this.state),be(this.hpState),this.updateShelves()}process(A,e,t,s,n,a,o,i,r){let{sendLevelToReverb:h,sendLevelToChorus:c,sendLevelToDelay:I,level:E,lsCoeffs:B,lsState:d,hsCoeffs:y,hsState:D,coeffs:M,state:F,sampleRate:w,filType:S,manual:P,pan:C,attackCoeff:x,releaseCoeff:J,hpState:Y,hpCoeffs:T}=this,{phase:U,lastFc:q,envelope:m}=this,v=this.rate/this.sampleRate,H=Math.pow(10,this.peak/127*_o/20),O=Math.pow(10,this.peak/127*$o/20),b=this.polarity===0?-1:li,G=this.depth/127*b,K=this.sens/127,ee=C+64|0,ie=hs[ee],Ee=gs[ee];for(let oe=0;oe<r;oe++){let le=XA((A[oe]+e[oe])*.5,B,y,d,D),re=Math.abs(le);m=re>m?x*m+(1-x)*re:J*m+(1-J)*re;let Ie=2*Math.abs(U-.5)*G;(U+=v)>=1&&(U-=1);let ke=Ie>=fa||b<0?1:Math.sin(Ie*Math.PI/(2*fa)),_=P*(1+K*m*zo),ce=Math.max(20,_*(1+ke*Ie)),Te=Math.max(10,ce);q+=(Te-q)*Ah,th(M,q,H,w);let Be=le;S===1&&(sh(T,jo,O,w),Be=QA(Be,T,Y));let Ue=QA(Be,M,F)*E,Je=Ue*ie,TA=Ue*Ee,uA=i+oe;t[uA]+=Je,s[uA]+=TA,n[oe]+=Ue*h,a[oe]+=Ue*c,o[oe]+=Ue*I}this.phase=U,this.lastFc=q,this.envelope=m}setParameter(A,e){switch(A){default:break;case 3:{this.filType=e;break}case 4:{this.sens=e;break}case 5:{this.setManual(e);break}case 6:{this.peak=e;break}case 7:{this.rate=wA.rate1(e);break}case 8:{this.depth=e;break}case 9:{this.polarity=e;break}case 19:{this.lowGain=e-64;break}case 20:{this.hiGain=e-64;break}case 21:{this.pan=e-64;break}case 22:{this.level=e/127;break}}this.updateShelves()}setManual(A){let e=A*eh,t=wA.manual(Math.floor(e)),s=wA.manual(Math.ceil(e)),n=e-Math.floor(e);this.manual=t+(s-t)*n}updateShelves(){NA(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),NA(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}};function th(A,e,t,s){let n=2*Math.PI*e/s,a=Math.cos(n),i=Math.sin(n)/(2*t),r=1-a,h=r/2,c=h,I=1+i,E=-2*a,B=1-i;A.a0=1,A.a1=E/I,A.a2=B/I,A.b0=h/I,A.b1=r/I,A.b2=c/I}function sh(A,e,t,s){let n=2*Math.PI*e/s,a=Math.cos(n),i=Math.sin(n)/(2*t),r=(1+a)/2,h=-(1+a),c=r,I=1+i,E=-2*a,B=1-i;A.a0=1,A.a1=E/I,A.a2=B/I,A.b0=r/I,A.b1=h/I,A.b2=c/I}var ua=127,nh=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=4360;phPan=0;awPan=127;level=ua/127;phaser;autoWah;bufferPh;bufferAw;constructor(A,e){this.phaser=new Ii(A),this.autoWah=new Ci(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=ua/127,this.phaser.reset(),this.autoWah.reset(),this.phaser.setParameter(22,127),this.autoWah.setParameter(22,127)}process(A,e,t,s,n,a,o,i,r){let{sendLevelToReverb:h,sendLevelToChorus:c,sendLevelToDelay:I,level:E}=this,{bufferPh:B,bufferAw:d}=this;this.bufferPh.fill(0),this.phaser.process(A,A,B,B,B,B,B,0,r),this.bufferAw.fill(0),this.autoWah.process(e,e,d,d,d,d,d,0,r);let y=this.phPan|0,D=hs[y],M=gs[y],F=this.awPan|0,w=hs[F],S=gs[F];for(let P=0;P<r;P++){let C=B[P]*.5*E,x=d[P]*.5*E,J=C*D+x*w,Y=C*M+x*S,T=i+P;t[T]+=J,s[T]+=Y;let U=(J+Y)*.5;n[P]+=U*h,a[P]+=U*c,o[P]+=U*I}}setParameter(A,e){if(A>=3&&A<=7){this.phaser.setParameter(A,e);return}if(A>=8&&A<=14){this.autoWah.setParameter(A-5,e);return}switch(A){default:break;case 18:{this.phPan=e;break}case 19:{this.phaser.setParameter(22,e);break}case 20:{this.awPan=e;break}case 21:{this.autoWah.setParameter(22,e);break}case 22:{this.level=e/127;break}}}},ma=127,pa=Math.PI*2,ah=.01,ih=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=293;modWave=1;modRate=3.05;modDepth=96;lowGain=0;hiGain=0;level=ma/127;phase=0;currentGain=1;lsCoeffs={...$e};hsCoeffs={...$e};lsStateR={...Le};lsStateL={...Le};hsStateR={...Le};hsStateL={...Le};sampleRate;constructor(A){this.sampleRate=A,this.reset()}reset(){this.modWave=1,this.modRate=3.05,this.modDepth=96,this.lowGain=0,this.hiGain=0,this.level=ma/127,this.phase=0,this.currentGain=1,be(this.hsStateR),be(this.hsStateL),be(this.lsStateR),be(this.lsStateL),this.updateShelves()}process(A,e,t,s,n,a,o,i,r){let{sendLevelToReverb:h,sendLevelToChorus:c,sendLevelToDelay:I,level:E,lsCoeffs:B,lsStateL:d,lsStateR:y,hsCoeffs:D,hsStateR:M,hsStateL:F,modDepth:w,modWave:S}=this,P=this.modRate/this.sampleRate,{currentGain:C,phase:x}=this;for(let J=0;J<r;J++){let Y=XA(A[J],B,D,d,F),T=XA(e[J],B,D,y,M),U;switch(S){default:{U=1-4*Math.abs(x-.5);break}case 1:{U=x>.5?-1:-Math.cos((x-.75)*pa);break}case 2:{U=Math.sin(pa*x);break}case 3:{U=1-2*x;break}case 4:{U=2*x-1;break}}(x+=P)>=1&&(x-=1);let q=1-(U/2+.5)*(w/127);C+=(q-C)*ah;let m=Y*E*C,v=T*E*C,H=i+J;t[H]+=m,s[H]+=v;let O=(m+v)*.5;n[J]+=O*h,a[J]+=O*c,o[J]+=O*I}this.phase=x,this.currentGain=C}setParameter(A,e){switch(A){default:break;case 3:{this.modWave=e;break}case 4:{this.modRate=wA.rate1(e);break}case 5:{this.modDepth=e;break}case 19:{this.lowGain=e-64;break}case 20:{this.hiGain=e-64;break}case 22:{this.level=e/127;break}}this.updateShelves()}updateShelves(){NA(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),NA(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}},rh=[hi,Ho,Ii,Xo,Ci,nh,ih],oh=class{preDelay=0;preLPF=.5;inputDiffusion1=.75;inputDiffusion2=.625;decay=.5;decayDiffusion1=.7;decayDiffusion2=.5;damping=.005;excursionRate=.1;excursionDepth=.2;gain=1;sampleRate;lp1=0;lp2=0;lp3=0;excPhase=0;pDWrite=0;taps;pDelay;pDLength;delays=new Array;constructor(A){this.sampleRate=A,this.pDLength=A,this.pDelay=new Float32Array(this.pDLength);let e=[.004771345,.003595309,.012734787,.009307483,.022579886,.149625349,.060481839,.1249958,.030509727,.141695508,.089244313,.106280031];for(let t of e)this.makeDelayLine(t);this.taps=Int16Array.from([.008937872,.099929438,.064278754,.067067639,.066866033,.006283391,.035818689,.011861161,.121870905,.041262054,.08981553,.070931756,.011256342,.004065724],t=>Math.round(t*this.sampleRate))}process(A,e,t,s,n){let a=this.preDelay|0,o=this.inputDiffusion1,i=this.inputDiffusion2,r=this.decay,h=this.decayDiffusion1,c=this.decayDiffusion2,I=1-this.damping,E=this.excursionRate/this.sampleRate,B=this.excursionDepth*this.sampleRate/1e3,d=this.pDWrite;for(let y=0;y<n;y++)this.pDelay[(d+y)%this.pDLength]=A[y];for(let y=0;y<n;y++){this.lp1+=this.preLPF*(this.pDelay[(this.pDLength+this.pDWrite-a+y)%this.pDLength]-this.lp1);let D=this.writeDelay(0,this.lp1-o*this.readDelay(0));D=this.writeDelay(1,o*(D-this.readDelay(1))+this.readDelay(0)),D=this.writeDelay(2,o*D+this.readDelay(1)-i*this.readDelay(2)),D=this.writeDelay(3,i*(D-this.readDelay(3))+this.readDelay(2));let M=i*D+this.readDelay(3),F=B*(1+Math.cos(this.excPhase*6.28)),w=B*(1+Math.sin(this.excPhase*6.2847)),S=this.writeDelay(4,M+r*this.readDelay(11)+h*this.readDelayCAt(4,F));this.writeDelay(5,this.readDelayCAt(4,F)-h*S),this.lp2+=I*(this.readDelay(5)-this.lp2),S=this.writeDelay(6,r*this.lp2-c*this.readDelay(6)),this.writeDelay(7,this.readDelay(6)+c*S),S=this.writeDelay(8,M+r*this.readDelay(7)+h*this.readDelayCAt(8,w)),this.writeDelay(9,this.readDelayCAt(8,w)-h*S),this.lp3+=I*(this.readDelay(9)-this.lp3),S=this.writeDelay(10,r*this.lp3-c*this.readDelay(10)),this.writeDelay(11,this.readDelay(10)+c*S);let P=this.readDelayAt(9,this.taps[0])+this.readDelayAt(9,this.taps[1])-this.readDelayAt(10,this.taps[2])+this.readDelayAt(11,this.taps[3])-this.readDelayAt(5,this.taps[4])-this.readDelayAt(6,this.taps[5])-this.readDelayAt(7,this.taps[6]),C=y+s;e[C]+=P*this.gain;let x=this.readDelayAt(5,this.taps[7])+this.readDelayAt(5,this.taps[8])-this.readDelayAt(6,this.taps[9])+this.readDelayAt(7,this.taps[10])-this.readDelayAt(9,this.taps[11])-this.readDelayAt(10,this.taps[12])-this.readDelayAt(11,this.taps[13]);t[C]+=x*this.gain,this.excPhase+=E;for(let J=0,Y=this.delays[0];J<this.delays.length;Y=this.delays[++J])Y[1]=Y[1]+1&Y[3],Y[2]=Y[2]+1&Y[3]}this.pDWrite=(d+n)%this.pDLength}makeDelayLine(A){let e=Math.round(A*this.sampleRate),t=2**Math.ceil(Math.log2(e));this.delays.push([new Float32Array(t),e-1,0,t-1])}writeDelay(A,e){return this.delays[A][0][this.delays[A][1]]=e}readDelay(A){return this.delays[A][0][this.delays[A][2]]}readDelayAt(A,e){let t=this.delays[A];return t[0][t[2]+e&t[3]]}readDelayCAt(A,e){let t=this.delays[A],s=e-~~e,n=t[3],a=~~e+t[2]-1,o=t[0][a++&n],i=t[0][a++&n],r=t[0][a++&n],h=t[0][a&n],c=(3*(i-r)-o+h)/2,I=2*r+o-(5*i+h)/2,E=(r-o)/2;return((c*s+I)*s+E)*s+i}},Dt=class{feedback=0;gain=1;buffer;bufferLength;writeIndex=0;constructor(A){this.buffer=new Float32Array(A),this.bufferLength=this.buffer.length,this._time=A-5}_time;get time(){return this._time}set time(A){this._time=Math.min(this.bufferLength,A)|0}clear(){this.buffer.fill(0)}process(A,e,t){let s=this.writeIndex,n=this._time,a=this.buffer,o=this.bufferLength,i=this.feedback,r=this.gain;for(let h=0;h<t;h++){let c=s-n;c<0&&(c+=o);let I=a[c];e[h]=I*r,a[s]=A[h]+I*i,++s>=o&&(s=0)}this.writeIndex=s}},hh=1.5,gh=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 oh(A),this.delayLeft=new Dt(A),this.delayRight=new Dt(A)}_delayFeedback=0;get delayFeedback(){return this._delayFeedback}set delayFeedback(A){this._delayFeedback=A,this.updateFeedback()}_character=0;get character(){return this._character}set character(A){switch(this._character=A,this.dattorro.damping=.005,this.characterTimeCoefficient=1,this.characterGainCoefficient=1,this.characterLPFCoefficient=0,this.dattorro.inputDiffusion1=.75,this.dattorro.inputDiffusion2=.625,this.dattorro.decayDiffusion1=.7,this.dattorro.decayDiffusion2=.5,this.dattorro.excursionRate=.5,this.dattorro.excursionDepth=.7,A){case 0:{this.dattorro.damping=.85,this.characterTimeCoefficient=.9,this.characterGainCoefficient=.7,this.characterLPFCoefficient=.2;break}case 1:{this.dattorro.damping=.2,this.characterGainCoefficient=.5,this.characterTimeCoefficient=1,this.dattorro.decayDiffusion2=.64,this.dattorro.decayDiffusion1=.6,this.characterLPFCoefficient=.2;break}case 2:{this.dattorro.damping=.56,this.characterGainCoefficient=.55,this.characterTimeCoefficient=1,this.dattorro.decayDiffusion2=.64,this.dattorro.decayDiffusion1=.6,this.characterLPFCoefficient=.1;break}case 3:{this.dattorro.damping=.6,this.characterGainCoefficient=1,this.characterLPFCoefficient=0,this.dattorro.decayDiffusion2=.7,this.dattorro.decayDiffusion1=.66;break}case 4:{this.characterGainCoefficient=.75,this.dattorro.damping=.2,this.characterLPFCoefficient=.2;break}case 5:{this.characterGainCoefficient=.55,this.dattorro.damping=.65,this.characterTimeCoefficient=.5;break}}this.updateTime(),this.updateGain(),this.updateLowpass(),this.updateFeedback(),this.delayLeft.clear(),this.delayRight.clear()}_time=0;get time(){return this._time}set time(A){this._time=A,this.updateTime()}_preDelayTime=0;get preDelayTime(){return this._preDelayTime}set preDelayTime(A){this._preDelayTime=A,this.dattorro.preDelay=A/1e3*this.sampleRate}_level=0;get level(){return this._level}set level(A){this._level=A,this.updateGain()}_preLowpass=0;get preLowpass(){return this._preLowpass}set preLowpass(A){this._preLowpass=A,this.preLPFfc=8e3*.63**this._preLowpass;let e=Math.exp(-2*Math.PI*this.preLPFfc/this.sampleRate);this.preLPFa=1-e,this.updateLowpass()}process(A,e,t,s,n){switch(this._character){default:{this.dattorro.process(A,e,t,s,n);return}case 6:{let a;if(this._preLowpass>0){let r=this.delayPreLPF,h=this.preLPFz,c=this.preLPFa;for(let I=0;I<n;I++){let E=A[I];h+=c*(E-h),r[I]=h}this.preLPFz=h,a=r}else a=A;this.delayLeft.process(a,this.delayLeftOutput,n);let o=this.delayGain,i=this.delayLeftOutput;for(let r=0,h=s;r<n;r++,h++){let c=i[r]*o;t[h]+=c,e[h]+=c}return}case 7:{let a;if(this._preLowpass>0){let I=this.delayPreLPF,E=this.preLPFz,B=this.preLPFa;for(let d=0;d<n;d++){let y=A[d];E+=B*(y-E),I[d]=E}this.preLPFz=E,a=I}else a=A;let o=this.panDelayFeedback,{delayLeftInput:i,delayLeftOutput:r,delayRightOutput:h}=this;for(let I=0;I<n;I++)i[I]=a[I]+h[I]*o;this.delayLeft.process(i,r,n),this.delayRight.process(r,h,n);let c=this.delayGain;for(let I=0,E=s;I<n;I++,E++)e[E]+=r[I]*c,t[E]+=h[I]*c;return}}}getSnapshot(){return{level:this._level,preLowpass:this._preLowpass,character:this._character,time:this._time,delayFeedback:this._delayFeedback,preDelayTime:this._preDelayTime}}updateFeedback(){let e=1-(1-this._delayFeedback/127)**1.9;this._character===6?this.delayLeft.feedback=e*.73:(this.delayLeft.feedback=this.delayRight.feedback=0,this.panDelayFeedback=e*.73)}updateLowpass(){this.dattorro.preLPF=Math.min(1,.1+(7-this.preLowpass)/14+this.characterLPFCoefficient)}updateGain(){this.dattorro.gain=this._level/348*this.characterGainCoefficient,this.delayGain=this._level/127*hh}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}},ch=1.3,Ih=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*ch,this._level=A}process(A,e,t,s,n,a,o){let i=this.leftDelayBuffer,r=this.rightDelayBuffer,h=this.rateInc,c=i.length,I=this.depthSamples,E=this.delaySamples,B=this.gain,d=this.reverbGain,y=this.delayGain,D=this.feedbackGain,M=this._preLowpass>0,F=this.phase,w=this.write,S=this.preLPFz,P=this.preLPFa;for(let C=0;C<o;C++){let x=A[C];M&&(S+=P*(x-S),x=S);let J=2*Math.abs(F-.5),Y=Math.max(1,Math.min(E+J*I,c)),T=w-Y;T<0&&(T+=c);let U=T|0,q=U+1;q>=c&&(q-=c);let m=T-U,v=i[U]*(1-m)+i[q]*m;i[w]=x+v*D;let H=Math.max(1,Math.min(E+(1-J)*I,c)),O=w-H;O<0&&(O+=c),U=O|0,q=U+1,q>=c&&(q-=c),m=O-U;let b=r[U]*(1-m)+r[q]*m,G=C+a;e[G]+=v*B,t[G]+=b*B;let K=(v+b)/2;s[C]+=K*d,n[C]+=K*y,r[w]=x+b*D,++w>=c&&(w=0),(F+=h)>=1&&(F-=1)}this.write=w,this.phase=F,this.preLPFz=S}getSnapshot(){return{preLowpass:this._preLowpass,depth:this._depth,delay:this._delay,sendLevelToDelay:this._sendLevelToDelay,sendLevelToReverb:this._sendLevelToReverb,rate:this._rate,feedback:this._feedback,level:this._level}}},lh=[{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}],Ch=1.66,Eh=class{preLPFfc=8e3;preLPFa=0;preLPFz=0;delayLeft;delayRight;delayCenter;sampleRate;delayCenterOutput;delayPreLPF;delayCenterTime;delayLeftMultiplier=.04;delayRightMultiplier=.04;gain=0;reverbGain=0;constructor(A,e){this.sampleRate=A,this.delayCenterOutput=new Float32Array(e),this.delayPreLPF=new Float32Array(e),this.delayCenterTime=.34*A,this.delayCenter=new Dt(A),this.delayLeft=new Dt(A),this.delayRight=new Dt(A)}_sendLevelToReverb=0;get sendLevelToReverb(){return this._sendLevelToReverb}set sendLevelToReverb(A){this._sendLevelToReverb=A,this.reverbGain=A/127}_preLowpass=0;get preLowpass(){return this._preLowpass}set preLowpass(A){this._preLowpass=A,this.preLPFfc=8e3*.63**this._preLowpass;let e=Math.exp(-2*Math.PI*this.preLPFfc/this.sampleRate);this.preLPFa=1-e}_levelRight=0;get levelRight(){return this._levelRight}set levelRight(A){this._levelRight=A,this.updateGain()}_level=64;get level(){return this._level}set level(A){this._level=A,this.gain=A/127*Ch}_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 lh)if(A>=t.start&&A<t.end){e=t.timeStart+(A-t.start)*t.resolution;break}this.delayCenterTime=Math.max(2,this.sampleRate*(e/1e3)),this.delayCenter.time=this.delayCenterTime,this.delayLeft.time=this.delayCenterTime*this.delayLeftMultiplier,this.delayRight.time=this.delayCenterTime*this.delayRightMultiplier}process(A,e,t,s,n,a){let o;if(this._preLowpass>0){let I=this.delayPreLPF,E=this.preLPFz,B=this.preLPFa;for(let d=0;d<a;d++){let y=A[d];E+=B*(y-E),I[d]=E}this.preLPFz=E,o=I}else o=A;let{gain:i,reverbGain:r}=this;this.delayCenter.process(o,this.delayCenterOutput,a);let h=this.delayCenterOutput;for(let I=0,E=n;I<a;I++,E++){let B=h[I];s[I]+=B*r;let d=B*i;e[E]+=d,t[E]+=d}for(let I=0;I<a;I++)h[I]+=A[I];let c=this.delayPreLPF;this.delayLeft.process(h,c,a);for(let I=0,E=n;I<a;I++,E++){let B=c[I];e[E]+=B*i,s[I]+=B*r}this.delayRight.process(h,c,a);for(let I=0,E=n;I<a;I++,E++){let B=c[I];t[E]+=B*i,s[I]+=B*r}}getSnapshot(){return{level:this._level,preLowpass:this._preLowpass,timeCenter:this._timeCenter,timeRatioRight:this._timeRatioRight,timeRatioLeft:this._timeRatioLeft,levelCenter:this._levelCenter,levelLeft:this._levelLeft,levelRight:this._levelRight,feedback:this._feedback,sendLevelToReverb:this._sendLevelToReverb}}updateGain(){this.delayCenter.gain=this._levelCenter/127,this.delayLeft.gain=this._levelLeft/127,this.delayRight.gain=this._levelRight/127}},Bh=.01,dh=.05,Qh=class{voices;midiChannels=[];maxBufferSize;voiceBuffer;insertionInputL;insertionInputR;reverbInput;chorusInput;delayInput;delayActive=!1;soundBankManager=new Go(this.updatePresetList.bind(this));keyModifierManager=new br;sampleRate;tunings=new Float32Array(16384).fill(-1);masterParameters={...Ya};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=Mo.bind(this);getMasterParameter=Lo.bind(this);getAllMasterParameters=No.bind(this);systemExclusive=xo.bind(this);voiceCount=0;customChannelNumbers=!1;reverbProcessor;chorusProcessor;delayProcessor;insertionFallback=new hi;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=Bh*(44100/t),this.panSmoothingFactor=dh*(44100/t),Gn.initCache(this.sampleRate);let n=this.maxBufferSize;this.reverbProcessor=s.reverbProcessor??new gh(t,n),this.chorusProcessor=s.chorusProcessor??new Ih(t,n),this.delayProcessor=s.delayProcessor??new Eh(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 rh)this.registerInsertionProcessor(a);this.resetInsertionParams(),this.voices=[];for(let a=0;a<this.masterParameters.voiceCap;a++)this.voices.push(new hn(this.sampleRate))}controllerChange(A,e,t){if(this.customChannelNumbers){for(let s of this.midiChannels)s.rxChannel===A&&s.controllerChange(e,t);return}this.midiChannels[A+this.portSelectChannelOffset].controllerChange(e,t)}noteOn(A,e,t){if(this.customChannelNumbers){for(let s of this.midiChannels)s.rxChannel===A&&s.noteOn(e,t);return}this.midiChannels[A+this.portSelectChannelOffset].noteOn(e,t)}noteOff(A,e){if(this.customChannelNumbers){for(let t of this.midiChannels)t.rxChannel===A&&t.noteOff(e);return}this.midiChannels[A+this.portSelectChannelOffset].noteOff(e)}polyPressure(A,e,t){if(this.customChannelNumbers){for(let s of this.midiChannels)s.rxChannel===A&&s.polyPressure(e,t);return}this.midiChannels[A+this.portSelectChannelOffset].polyPressure(e,t)}channelPressure(A,e){if(this.customChannelNumbers){for(let t of this.midiChannels)t.rxChannel===A&&t.channelPressure(e);return}this.midiChannels[A+this.portSelectChannelOffset].channelPressure(e)}pitchWheel(A,e,t=-1){if(this.customChannelNumbers){for(let s of this.midiChannels)s.rxChannel===A&&s.pitchWheel(e,t);return}this.midiChannels[A+this.portSelectChannelOffset].pitchWheel(e,t)}programChange(A,e){if(this.customChannelNumbers){for(let t of this.midiChannels)t.rxChannel===A&&t.programChange(e);return}this.midiChannels[A+this.portSelectChannelOffset].programChange(e)}assignVoice(){for(let e=0;e<this.masterParameters.voiceCap;e++){let t=this.voices[e];if(!t.isActive)return t.priority=1/0,t}if(this.masterParameters.autoAllocateVoices){let e=new hn(this.sampleRate);return this.voices.push(e),this.masterParameters.voiceCap++,this.callEvent("masterParameterChange",{parameter:"voiceCap",value:this.masterParameters.voiceCap}),e}this.assignVoicePriorities();let A=this.voices[0];for(let e=0;e<this.masterParameters.voiceCap;e++){let t=this.voices[e];t.priority<A.priority&&(A=t)}return A.priority=1/0,A}stopAllChannels(A){k("%cStop all received!",l.info);for(let e of this.midiChannels)e.stopAllNotes(A)}processMessage(A,e=0,t=Li){let s=t.time;s>this.currentTime?(this.eventQueue.push({message:A,channelOffset:e,time:s}),this.eventQueue.sort((n,a)=>n.time-a.time)):this.processMessageInternal(A,e)}destroySynthProcessor(){this.voices.length=0;for(let A of this.midiChannels)A.lockedControllers=[],A.preset=void 0;this.clearCache(),this.midiChannels.length=0,this.soundBankManager.destroy()}getVoices(A,e,t){let s=this.midiChannels[A],n=this.keyModifierManager.hasOverridePatch(A,e),a=s.preset;if(n){let o=this.keyModifierManager.getPatch(A,e);a=this.soundBankManager.getPreset(o,this.masterParameters.midiSystem)}return a?this.getVoicesForPreset(a,e,t):[]}createMIDIChannel(A){let e=new Ro(this,this.defaultPreset,this.midiChannels.length);this.midiChannels.push(e),A&&(this.callEvent("newChannel",void 0),e.sendChannelProperty(),e.setDrums(!0))}resetAllControllers(A=mn){if(this.callEvent("allControllerReset",void 0),this.setMasterParameter("midiSystem",A),this.tunings.fill(-1),this.portSelectChannelOffset=0,this.customChannelNumbers=!1,this.setMIDIVolume(1),this.setReverbMacro(4),this.setChorusMacro(2),this.setDelayMacro(0),this.masterParameters.delayLock||(this.delayActive=!1),this.resetInsertion(),!(!this.drumPreset||!this.defaultPreset))for(let e=0;e<this.midiChannels.length;e++){let t=this.midiChannels[e];t.resetControllers(!1),t.resetPreset();for(let s=0;s<128;s++)this.midiChannels[e].lockedControllers[s]&&this.callEvent("controllerChange",{channel:e,controllerNumber:s,controllerValue:this.midiChannels[e].midiControllers[s]>>7});if(!this.midiChannels[e].lockedControllers[ve+Ae.pitchWheel]){let s=this.midiChannels[e].midiControllers[ve+Ae.pitchWheel];this.callEvent("pitchWheel",{channel:e,pitch:s,midiNote:-1})}if(!this.midiChannels[e].lockedControllers[ve+Ae.channelPressure]){let s=this.midiChannels[e].midiControllers[ve+Ae.channelPressure]>>7;this.callEvent("channelPressure",{channel:e,pressure:s})}}}process(A,e,t=0,s=0){this.processSplit([[A,e]],A,e,t,s)}processSplit(A,e,t,s=0,n=0){if(this.eventQueue.length>0){let r=this.currentTime;for(;this.eventQueue[0]?.time<=r;){let h=this.eventQueue.shift();h&&this.processMessageInternal(h.message,h.channelOffset)}}s=Math.max(s,0);let a=n||A[0][0].length-s;if(a>this.maxBufferSize)throw new Error(`Requested ${a} samples, but maxBufferSize is ${this.maxBufferSize}`);this.reverbInput.fill(0),this.chorusInput.fill(0),this.delayActive&&this.delayInput.fill(0),this.insertionActive&&(this.insertionInputL.fill(0),this.insertionInputR.fill(0));for(let r of this.midiChannels)r.clearVoiceCount();this.voiceCount=0;let o=this.masterParameters.voiceCap,i=A.length;for(let r=0;r<o;r++){let h=this.voices[r],c=this.midiChannels[h.channel];if(!h.isActive||c.isMuted)continue;let I=h.channel%i;c.renderVoice(h,this.currentTime,A[I][0],A[I][1],s,a),c.voiceCount++,this.voiceCount++}if(this.enableEffects){let{chorusInput:r,delayInput:h,reverbInput:c,insertionInputR:I,insertionInputL:E}=this;this.insertionActive&&this.insertionProcessor.process(E,I,e,t,c,r,h,s,a),this.chorusProcessor.process(r,e,t,c,h,s,a),this.delayActive&&this.masterParameters.midiSystem!=="xg"&&this.delayProcessor.process(h,e,t,c,s,a),this.reverbProcessor.process(c,e,t,s,a)}for(let r of this.midiChannels)r.updateVoiceCount();this.currentTime+=a*this.sampleTime}getVoicesForPreset(A,e,t){let s=this.getCachedVoice(A,e,t);if(s!==void 0)return s;let n=new Array;for(let a of A.getVoiceParameters(e,t)){let o=a.sample;if(a.sample.getAudioData()===void 0){ne(`Discarding invalid sample: ${o.name}`);continue}n.push(new oo(a,e,t,this.sampleRate))}return this.setCachedVoice(A,e,t,n),n}clearCache(){this.cachedVoices.clear()}getInsertionSnapshot(){return{type:this.insertionProcessor.type,params:this.insertionParams.slice(),channels:this.midiChannels.map(A=>A.insertionEnabled)}}callEvent(A,e){this.eventCallbackHandler(A,e)}resetInsertionParams(){this.insertionParams.fill(255),this.insertionParams[20]=40,this.insertionParams[21]=0,this.insertionParams[22]=0}resetInsertion(){this.masterParameters.insertionEffectLock||(this.insertionActive=!1,this.insertionProcessor=this.insertionFallback,this.insertionProcessor.reset(),this.insertionProcessor.sendLevelToReverb=40/127*zt,this.insertionProcessor.sendLevelToChorus=0,this.insertionProcessor.sendLevelToDelay=0,this.resetInsertionParams(),this.callEvent("effectChange",{effect:"insertion",parameter:0,value:this.insertionProcessor.type}))}setMIDIVolume(A){this.midiVolume=Math.pow(A,Math.E)}setMasterTuning(A){A=Math.round(A);for(let e of this.midiChannels)e.setCustomController(Ce.masterTuning,A)}setReverbMacro(A){if(this.masterParameters.reverbLock)return;let e=this.reverbProcessor;switch(e.level=64,e.preDelayTime=0,e.character=A,A){case 0:{e.character=0,e.preLowpass=3,e.time=80,e.delayFeedback=0,e.preDelayTime=0;break}case 1:{e.preLowpass=4,e.time=56,e.delayFeedback=0;break}case 2:{e.preLowpass=0,e.time=72,e.delayFeedback=0;break}case 3:{e.preLowpass=4,e.time=72,e.delayFeedback=0;break}case 4:{e.preLowpass=0,e.time=64,e.delayFeedback=0;break}case 5:{e.preLowpass=0,e.time=88,e.delayFeedback=0;break}case 6:{e.preLowpass=0,e.time=32,e.delayFeedback=40;break}case 7:{e.preLowpass=0,e.time=64,e.delayFeedback=32;break}default:{ne(`Invalid reverb macro: ${A}`);return}}this.callEvent("effectChange",{effect:"reverb",parameter:"macro",value:A})}setChorusMacro(A){if(this.masterParameters.chorusLock)return;let e=this.chorusProcessor;switch(e.level=64,e.preLowpass=0,e.delay=127,e.sendLevelToDelay=0,e.sendLevelToReverb=0,A){case 0:{e.feedback=0,e.delay=112,e.rate=3,e.depth=5;break}case 1:{e.feedback=5,e.delay=80,e.rate=9,e.depth=19;break}case 2:{e.feedback=8,e.delay=80,e.rate=3,e.depth=19;break}case 3:{e.feedback=16,e.delay=64,e.rate=9,e.depth=16;break}case 4:{e.feedback=64,e.delay=127,e.rate=2,e.depth=24;break}case 5:{e.feedback=112,e.delay=127,e.rate=1,e.depth=5;break}case 6:{e.feedback=0,e.depth=127,e.rate=0,e.depth=127;break}case 7:{e.feedback=80,e.depth=127,e.rate=0,e.depth=127;break}default:{ne(`Invalid chorus macro: ${A}`);return}}this.callEvent("effectChange",{effect:"chorus",parameter:"macro",value:A})}setDelayMacro(A){if(this.masterParameters.delayLock)return;let e=this.delayProcessor;switch(e.level=64,e.preLowpass=0,e.sendLevelToReverb=0,e.levelRight=e.levelLeft=0,e.levelCenter=127,A){case 0:{e.timeCenter=97,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=80;break}case 1:{e.timeCenter=106,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=80;break}case 2:{e.timeCenter=115,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=72;break}case 3:{e.timeCenter=83,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=72;break}case 4:{e.timeCenter=105,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=125,e.levelRight=60,e.feedback=74;break}case 5:{e.timeCenter=109,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=125,e.levelRight=60,e.feedback=71;break}case 6:{e.timeCenter=115,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=120,e.levelRight=64,e.feedback=73;break}case 7:{e.timeCenter=93,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=120,e.levelRight=64,e.feedback=72;break}case 8:{e.timeCenter=109,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=114,e.levelRight=60,e.feedback=61,e.sendLevelToReverb=36;break}case 9:{e.timeCenter=110,e.timeRatioLeft=21,e.timeRatioRight=32,e.levelCenter=97,e.levelLeft=127,e.levelRight=67,e.feedback=40;break}default:{ne(`Invalid delay macro: ${A}`);return}}this.callEvent("effectChange",{effect:"delay",parameter:"macro",value:A})}getCachedVoice(A,e,t){return this.cachedVoices.get(this.getCachedVoiceIndex(A,e,t))}setCachedVoice(A,e,t,s){this.cachedVoices.set(this.getCachedVoiceIndex(A,e,t),s)}registerInsertionProcessor(A){let e=new A(this.sampleRate,this.maxBufferSize);this.insertionEffects.set(e.type,e)}processMessageInternal(A,e){let t=un(A[0]),s=t.channel+e;switch(t.status){case N.noteOn:{let n=A[2];n>0?this.noteOn(s,A[1],n):this.noteOff(s,A[1]);break}case N.noteOff:{this.noteOff(s,A[1]);break}case N.pitchWheel:{this.pitchWheel(s,A[2]<<7|A[1]);break}case N.controllerChange:{this.controllerChange(s,A[1],A[2]);break}case N.programChange:{this.programChange(s,A[1]);break}case N.polyPressure:{this.polyPressure(s,A[1],A[2]);break}case N.channelPressure:{this.channelPressure(s,A[1]);break}case N.systemExclusive:{this.systemExclusive(new $(A.slice(1)),e);break}case N.reset:{this.stopAllChannels(!1),this.resetAllControllers();break}default:break}}assignVoicePriorities(){if(this.lastPriorityAssignmentTime===this.currentTime)return;k("%cPolyphony exceeded, stealing voices",l.warn),this.lastPriorityAssignmentTime=this.currentTime;let A=this.masterParameters.voiceCap;for(let e=0;e<A;e++){let t=this.voices[e];t.priority=0,this.midiChannels[t.channel].drumChannel&&(t.priority+=5),t.isInRelease&&(t.priority-=5),t.priority+=t.velocity/25,t.priority-=t.volEnv.state,t.isInRelease&&(t.priority-=5),t.priority-=t.volEnv.attenuationCb/200}}updatePresetList(){let A=this.soundBankManager.presetList;this.clearCache(),this.callEvent("presetListChange",A),this.getDefaultPresets();for(let e of this.midiChannels)e.setPresetLock(!1);this.resetAllControllers()}getDefaultPresets(){this.defaultPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!1},"xg"),this.drumPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!0},"gs")}getCachedVoiceIndex(A,e,t){let s=A.bankMSB,n=A.bankLSB,{isGMGSDrum:a,program:o}=A;return a&&(s=128,n=0),s+n*128+o*16384+2097152*e+268435456*t}},Ei=class{processorInitialized=Es.isInitialized;sampleRate;onEventCall;process;processSplit;systemExclusive;controllerChange;noteOn;noteOff;polyPressure;channelPressure;pitchWheel;programChange;processMessage;synthCore;savedSnapshot;constructor(A,e={}){let t=fn(e,wr);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 Qh(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<Ra;n++)this.synthCore.createMIDIChannel(!1);this.processorInitialized.then(()=>{k("%cSpessaSynth is ready!",l.recognized)})}get enableEffects(){return this.synthCore.enableEffects}set enableEffects(A){this.synthCore.enableEffects=A}get enableEventSystem(){return this.synthCore.enableEventSystem}set enableEventSystem(A){this.synthCore.enableEventSystem=A}get midiChannels(){return this.synthCore.midiChannels}get totalVoicesAmount(){return this.synthCore.voiceCount}get currentSynthTime(){return this.synthCore.currentTime}get reverbProcessor(){return this.synthCore.reverbProcessor}get chorusProcessor(){return this.synthCore.chorusProcessor}get delayProcessor(){return this.synthCore.delayProcessor}get soundBankManager(){return this.synthCore.soundBankManager}get keyModifierManager(){return this.synthCore.keyModifierManager}renderAudio(A,e,t,s=0,n=0){let a=this.synthCore.maxBufferSize;if(n>a){let o=0;for(;o<n;){let i=Math.min(a,n-o);this.synthCore.process(A[0],A[1],s+o,i),o+=i}}else this.synthCore.process(A[0],A[1],s,n)}renderAudioSplit(A,e,t,s=0,n=0){let a=this.synthCore.maxBufferSize;if(n>a){let o=0;for(;o<n;){let i=Math.min(a,n-o);this.synthCore.processSplit(t,A[0],A[1],s+o,i),o+=i}}else this.synthCore.processSplit(t,A[0],A[1],s,n)}onMissingPreset=(A,e)=>{ne(`No preset found for ${CA.toMIDIString(A)}! Did you forget to add a sound bank?`)};setMasterParameter(A,e){this.synthCore.setMasterParameter(A,e)}getMasterParameter(A){return this.synthCore.getMasterParameter(A)}getAllMasterParameters(){return this.synthCore.getAllMasterParameters()}resetAllControllers(A=mn){this.synthCore.resetAllControllers(A)}applySynthesizerSnapshot(A){this.savedSnapshot=A,A.apply(this),k("%cFinished applying snapshot!",l.info),this.resetAllControllers()}getSnapshot(){return Rn.create(this)}getInsertionSnapshot(){return this.synthCore.getInsertionSnapshot()}setEmbeddedSoundBank(A,e){let t=Ft.fromArrayBuffer(A);this.synthCore.soundBankManager.addSoundBank(t,Yt,e);let s=this.synthCore.soundBankManager.priorityOrder;s.pop(),s.unshift(Yt),this.synthCore.soundBankManager.priorityOrder=s,this.savedSnapshot!==void 0&&this.applySynthesizerSnapshot(this.savedSnapshot),k(`%cEmbedded sound bank set at offset %c${e}`,l.recognized,l.value)}clearEmbeddedBank(){this.synthCore.soundBankManager.soundBankList.some(A=>A.id===Yt)&&this.synthCore.soundBankManager.deleteSoundBank(Yt)}createMIDIChannel(){this.synthCore.createMIDIChannel(!0)}stopAllChannels(A=!1){this.synthCore.stopAllChannels(A)}destroySynthProcessor(){this.synthCore.destroySynthProcessor()}killVoices(A){ne(`killVoices is deprecated, don't use it! Amount requested: ${A}`)}clearCache(){this.synthCore.clearCache()}getVoicesForPreset(A,e,t){return this.synthCore.getVoicesForPreset(A,e,t)}callEvent(A,e){this.onEventCall?.({type:A,data:e})}missingPreset(A,e){return this.onMissingPreset(A,e)}};var Qs=vA.consoleColors;var Bi="spessasynth-worklet-processor";function di(A,e){return{...e,...A}}var Qi={skipToFirstNoteOn:!0,initialPlaybackRate:1};var Tn=class extends ls{events=[];constructor(e){super(),super.copyFrom(e),this.events=[]}},fs=class A extends ZA{tracks;embeddedSoundBank=void 0;embeddedSoundBankSize;constructor(e){super(),super.copyMetadataFrom(e),this.tracks=e.tracks.map(t=>new Tn(t)),this.embeddedSoundBankSize=e instanceof A?e.embeddedSoundBankSize:e?.embeddedSoundBank?.byteLength}};var us={shuffleOn:1,shuffleOff:2,index:3};var fi=1,ms=class{synthesizer;sequencers=new Array;post;lastSequencerSync=0;alive=!1;enableEventSystem;constructor(e,t,s){this.synthesizer=new Ei(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 Ha(this.synthesizer),t=this.sequencers.length;this.sequencers.push(e),e.onEventCall=s=>{if(this.enableEventSystem){if(s.type==="songListChange"){let a=s.data.newSongList.map(o=>new fs(o));this.post({type:"sequencerReturn",data:{type:s.type,data:{newSongList:a,shuffledSongIndexes:e.shuffledSongIndexes},id:t},currentTime:this.synthesizer.currentSynthTime});return}this.post({type:"sequencerReturn",data:{...s,id:t},currentTime:this.synthesizer.currentSynthTime})}}}postReady(e,t,s=[]){this.post({type:"isFullyInitialized",data:{type:e,data:t},currentTime:this.synthesizer.currentSynthTime},s)}postProgress(e,t){this.post({type:"renderingProgress",data:{type:e,data:t},currentTime:this.synthesizer.currentSynthTime})}destroy(){this.synthesizer.destroySynthProcessor(),delete this.synthesizer,delete this.sequencers}handleMessage(e){let t=e.channelNumber,s;if(t>=0&&(s=this.synthesizer.midiChannels[t],s===void 0)){vA.SpessaSynthWarn(`Trying to access channel ${t} which does not exist... ignoring!`);return}switch(e.type){case"midiMessage":{this.synthesizer.processMessage(e.data.messageData,e.data.channelOffset,e.data.options);break}case"customCcChange":{s?.setCustomController(e.data.ccNumber,e.data.ccValue);break}case"ccReset":{t===gt?this.synthesizer.resetAllControllers():s?.resetControllers();break}case"stopAll":{t===gt?this.synthesizer.stopAllChannels(e.data===1):s?.stopAllNotes(e.data===1);break}case"muteChannel":{s?.muteChannel(e.data);break}case"addNewChannel":{this.synthesizer.createMIDIChannel();break}case"setMasterParameter":{this.synthesizer.setMasterParameter(e.data.type,e.data.data);break}case"setDrums":{s?.setDrums(e.data);break}case"transposeChannel":{s?.transposeChannel(e.data.semitones,e.data.force);break}case"lockController":{if(e.data.controllerNumber===gt)s?.setPresetLock(e.data.isLocked);else{if(!s)return;s.lockedControllers[e.data.controllerNumber]=e.data.isLocked}break}case"sequencerSpecific":{let n=this.sequencers[e.data.id];if(!n)return;let a=e.data;switch(a.type){default:break;case"loadNewSongList":{try{let i=a.data.map(r=>"duration"in r?ZA.copyFrom(r):ZA.fromArrayBuffer(r.binary,r.fileName));n.loadNewSongList(i)}catch(o){console.error(o),this.post({type:"sequencerReturn",data:{type:"midiError",data:o,id:e.data.id},currentTime:this.synthesizer.currentSynthTime})}break}case"pause":{n.pause();break}case"play":{n.play();break}case"setTime":{n.currentTime=a.data;break}case"changeMIDIMessageSending":{n.externalMIDIPlayback=a.data;break}case"setPlaybackRate":{n.playbackRate=a.data;break}case"setLoopCount":{n.loopCount=a.data;break}case"changeSong":{switch(a.data.changeType){case us.shuffleOff:{n.shuffleMode=!1;break}case us.shuffleOn:{n.shuffleMode=!0;break}case us.index:{a.data.data!==void 0&&(n.songIndex=a.data.data);break}}break}case"getMIDI":{if(!n.midiData)throw new Error("No MIDI is loaded!");this.post({type:"sequencerReturn",data:{type:"getMIDI",data:n.midiData,id:e.data.id},currentTime:this.synthesizer.currentSynthTime});break}case"setSkipToFirstNote":{n.skipToFirstNoteOn=a.data;break}}break}case"soundBankManager":{try{let n=this.synthesizer.soundBankManager,a=e.data,o;switch(a.type){case"addSoundBank":{o=Ft.fromArrayBuffer(a.data.soundBankBuffer),n.addSoundBank(o,a.data.id,a.data.bankOffset),this.postReady("soundBankManager",null);break}case"deleteSoundBank":{n.deleteSoundBank(a.data),this.postReady("soundBankManager",null);break}case"rearrangeSoundBanks":n.priorityOrder=a.data,this.postReady("soundBankManager",null)}}catch(n){this.post({type:"soundBankError",data:n,currentTime:this.synthesizer.currentSynthTime})}break}case"keyModifierManager":{let n=e.data,a=this.synthesizer.keyModifierManager;switch(n.type){default:return;case"addMapping":{a.addMapping(n.data.channel,n.data.midiNote,n.data.mapping);break}case"clearMappings":{a.clearMappings();break}case"deleteMapping":a.deleteMapping(n.data.channel,n.data.midiNote)}break}case"requestSynthesizerSnapshot":{let n=Rn.create(this.synthesizer);this.postReady("synthesizerSnapshot",n);break}case"requestNewSequencer":{this.createNewSequencer();break}case"setLogLevel":{ba(e.data.enableInfo,e.data.enableWarning,e.data.enableGroup);break}case"destroyWorklet":{this.alive=!1,this.synthesizer.destroySynthProcessor(),this.destroy();break}default:{vA.SpessaSynthWarn("Unrecognized event!",e);break}}}};var ps=class extends ms{alive=!0;oneOutputMode;port;constructor(e,t,s,n){super(e,{enableEffects:!n.oneOutput,enableEventSystem:n?.enableEventSystem,initialTime:t},(a,o)=>{s.postMessage(a,o)}),this.port=s,this.oneOutputMode=n.oneOutput,this.synthesizer.processorInitialized.then(()=>{this.port.onmessage=a=>this.handleMessage(a.data),this.postReady("sf3Decoder",null)})}process(e,t){if(!this.alive)return!1;for(let n of this.sequencers)n.processTick();if(this.oneOutputMode){let n=t[0],a=[];for(let o=0;o<32;o+=2)a.push([n[o],n[o+1]]);this.synthesizer.enableEffects=!1,this.synthesizer.processSplit(a,n[0],n[0])}else this.synthesizer.processSplit(t.slice(1),t[0][0],t[0][1]);let s=this.synthesizer.currentSynthTime;if(this.enableEventSystem&&s-this.lastSequencerSync>fi){for(let n=0;n<this.sequencers.length;n++)this.post({type:"sequencerReturn",data:{type:"sync",data:this.sequencers[n].currentTime,id:n},currentTime:s});this.lastSequencerSync=s}return!0}handleMessage(e){if(e.type==="startOfflineRender"){this.startOfflineRender(e.data);return}super.handleMessage(e)}startOfflineRender(e){this.sequencers.length===0&&this.createNewSequencer();let t=this.sequencers[0];for(let[n,a]of e.soundBankList.entries())try{this.synthesizer.soundBankManager.addSoundBank(Ft.fromArrayBuffer(a.soundBankBuffer),`bank-${n}`,a.bankOffset)}catch(o){this.post({type:"soundBankError",data:o,currentTime:this.synthesizer.currentSynthTime})}e.snapshot!==void 0&&this.synthesizer.applySynthesizerSnapshot(e.snapshot),vA.SpessaSynthInfo("%cRendering enabled! Starting render.",Qs.info),t.loopCount=e.loopCount,this.synthesizer.setMasterParameter("autoAllocateVoices",!0);let s=di(e.sequencerOptions,Qi);t.skipToFirstNoteOn=s.skipToFirstNoteOn,t.playbackRate=s.initialPlaybackRate;try{t.loadNewSongList([ZA.copyFrom(e.midiSequence)]),t.play()}catch(n){console.error(n),this.post({type:"sequencerReturn",data:{type:"midiError",data:n,id:0},currentTime:this.synthesizer.currentSynthTime})}this.postReady("startOfflineRender",null)}};var Un=class extends AudioWorkletProcessor{core;constructor(e){super(),this.core=new ps(sampleRate,currentTime,this.port,e.processorOptions)}process(e,t){return this.core.process(e,t)}};registerProcessor(Bi,Un);vA.SpessaSynthInfo("%cProcessor successfully registered!",Qs.recognized);
21
21
  //# sourceMappingURL=spessasynth_processor.min.js.map