spessasynth_lib 3.26.28 → 3.26.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
var Ws=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(A,t)=>(typeof require<"u"?require:A)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var _s=!1,zs=!0,In=!1,wi=!0;function ss(e,A,t,n){_s=e,zs=A,In=t,wi=n}function y(...e){_s&&console.info(...e)}function P(...e){zs&&console.warn(...e)}function ce(...e){In&&console.group(...e)}function fA(...e){In&&console.groupCollapsed(...e)}function Z(){In&&console.groupEnd()}function os(e){e=Math.floor(e);let A=Math.floor(e/60),t=Math.round(e-A*60);return{minutes:A,seconds:t,time:`${A.toString().padStart(2,"0")}:${t.toString().padStart(2,"0")}`}}function js(e){return e.trim().replaceAll(".mid","").replaceAll(".kar","").replaceAll(".rmi","").replaceAll(".xmf","").replaceAll(".mxmf","").replaceAll("_"," ").trim()}function JA(e){let A="";for(let t=0;t<e.length;t++){let n=e[t].toString(16).padStart(2,"0").toUpperCase();A+=n,A+=" "}return A}function $s(e){let A=[];for(let t of e)(t===47||t===92)&&(t=10),A.push(t);return new Uint8Array(A)}var c={warn:"color: orange;",unrecognized:"color: red;",info:"color: aqua;",recognized:"color: lime",value:"color: yellow; background-color: black;"};function Ri(e,A){let t=0;return e.drumChannel&&(t+=5),A.isInRelease&&(t-=5),t+=A.velocity/25,t-=A.volumeEnvelope.state,A.isInRelease&&(t-=5),t-=A.volumeEnvelope.currentAttenuationDb/50,t}function Ao(e){let A=[];for(let n of this.midiAudioChannels)for(let s of n.voices)if(!s.finished){let r=Ri(n,s);A.push({channel:n,voice:s,priority:r})}A.sort((n,s)=>n.priority-s.priority);let t=A.slice(0,e);for(let{channel:n,voice:s}of t){let r=n.voices.indexOf(s);r>-1&&n.voices.splice(r,1)}}var Yt="gs";var At=`SPESSASYNTH_EMBEDDED_BANK_${Math.random()}`,cn=32767;var De=De!==void 0?De:{},eo=!1,to;De.isInitialized=new Promise(e=>to=e);var Gi=function(e){var A,t,n,s,r,i,a,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",I="",B=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");do s=o.indexOf(e.charAt(B++)),r=o.indexOf(e.charAt(B++)),i=o.indexOf(e.charAt(B++)),a=o.indexOf(e.charAt(B++)),A=s<<2|r>>4,t=(15&r)<<4|i>>2,n=(3&i)<<6|a,I+=String.fromCharCode(A),i!==64&&(I+=String.fromCharCode(t)),a!==64&&(I+=String.fromCharCode(n));while(B<e.length);return I};(function(){var e,A,t,n,s,r,i,a,o,I,B,C,h,l,u,f,S,R,D,x,J,H,E=E!==void 0?E:{};E.wasmBinary=Uint8Array.from(Gi("AGFzbQEAAAABpQEYYAJ/fwF/YAF/AGAAAX9gBH9/f38AYAAAYAN/f38Bf2ABfwF/YAJ/fwBgBn9/f39/fwF/YAR/f39/AX9gBX9/f39/AX9gB39/f39/f38Bf2AGf39/f39/AGAIf39/f39/f38Bf2AFf39/f38AYAd/f39/f39/AGADf39/AGABfwF9YAF9AX1gAnx/AXxgAnx/AX9gA3x8fwF8YAJ8fAF8YAF8AXwCngIPA2VudgZtZW1vcnkCAIACA2VudgV0YWJsZQFwAQQEA2Vudgl0YWJsZUJhc2UDfwADZW52DkRZTkFNSUNUT1BfUFRSA38AA2VudghTVEFDS1RPUAN/AANlbnYJU1RBQ0tfTUFYA38ABmdsb2JhbAhJbmZpbml0eQN8AANlbnYFYWJvcnQAAQNlbnYNZW5sYXJnZU1lbW9yeQACA2Vudg5nZXRUb3RhbE1lbW9yeQACA2VudhdhYm9ydE9uQ2Fubm90R3Jvd01lbW9yeQACA2Vudg5fX19hc3NlcnRfZmFpbAADA2VudgtfX19zZXRFcnJObwABA2VudgZfYWJvcnQABANlbnYWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwAFA3d2BgYCAQcHAQIBAQcBCAcFAAkGCQoHBgYGBgEFBgIBBgYKAAgLAAYGBgYGBgYBAAoMDAMGBQANCAoJAAwODA8OAQAGBgcEABAJEAERAAADBQwAAAMHBxIGAQAABwIFEwMOBw8HBgYQFAoVExYXFxcXFgQFBQYFAAYkB38BIwELfwEjAgt/ASMDC38BQQALfwFBAAt8ASMEC38BQQALB9MCFRBfX2dyb3dXYXNtTWVtb3J5AAgRX19fZXJybm9fbG9jYXRpb24AYwVfZnJlZQBfB19tYWxsb2MAXgdfbWVtY3B5AHkHX21lbXNldAB6BV9zYnJrAHsXX3N0Yl92b3JiaXNfanNfY2hhbm5lbHMAJhRfc3RiX3ZvcmJpc19qc19jbG9zZQAlFV9zdGJfdm9yYmlzX2pzX2RlY29kZQAoE19zdGJfdm9yYmlzX2pzX29wZW4AJBpfc3RiX3ZvcmJpc19qc19zYW1wbGVfcmF0ZQAnC2R5bkNhbGxfaWlpAHwTZXN0YWJsaXNoU3RhY2tTcGFjZQAMC2dldFRlbXBSZXQwAA8LcnVuUG9zdFNldHMAeAtzZXRUZW1wUmV0MAAOCHNldFRocmV3AA0Kc3RhY2tBbGxvYwAJDHN0YWNrUmVzdG9yZQALCXN0YWNrU2F2ZQAKCQoBACMACwR9VFl9Csb2A3YGACAAQAALGwEBfyMGIQEjBiAAaiQGIwZBD2pBcHEkBiABCwQAIwYLBgAgACQGCwoAIAAkBiABJAcLEAAjCEUEQCAAJAggASQJCwsGACAAJAsLBAAjCwsRACAABEAgABARIAAgABASCwvvBwEKfyAAQYADaiEHIAcoAgAhBQJAIAUEQCAAQfwBaiEEIAQoAgAhASABQQBKBEAgAEHwAGohCANAIAUgAkEYbGpBEGohCSAJKAIAIQEgAQRAIAgoAgAhAyAFIAJBGGxqQQ1qIQogCi0AACEGIAZB/wFxIQYgAyAGQbAQbGpBBGohAyADKAIAIQMgA0EASgRAQQAhAwNAIAEgA0ECdGohASABKAIAIQEgACABEBIgA0EBaiEDIAgoAgAhASAKLQAAIQYgBkH/AXEhBiABIAZBsBBsakEEaiEBIAEoAgAhBiAJKAIAIQEgAyAGSA0ACwsgACABEBILIAUgAkEYbGpBFGohASABKAIAIQEgACABEBIgAkEBaiECIAQoAgAhASACIAFODQMgBygCACEFDAAACwALCwsgAEHwAGohAyADKAIAIQEgAQRAIABB7ABqIQUgBSgCACECIAJBAEoEQEEAIQIDQAJAIAEgAkGwEGxqQQhqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQRxqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQSBqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQaQQaiEEIAQoAgAhBCAAIAQQEiABIAJBsBBsakGoEGohASABKAIAIQEgAUUhBCABQXxqIQFBACABIAQbIQEgACABEBIgAkEBaiECIAUoAgAhASACIAFODQAgAygCACEBDAELCyADKAIAIQELIAAgARASCyAAQfgBaiEBIAEoAgAhASAAIAEQEiAHKAIAIQEgACABEBIgAEGIA2ohAyADKAIAIQEgAQRAIABBhANqIQUgBSgCACECIAJBAEoEQEEAIQIDQCABIAJBKGxqQQRqIQEgASgCACEBIAAgARASIAJBAWohAiAFKAIAIQcgAygCACEBIAIgB0gNAAsLIAAgARASCyAAQQRqIQIgAigCACEBIAFBAEoEQEEAIQEDQCAAQZQGaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQZQHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQdgHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiABQQFqIQEgAigCACEDIAEgA0ghAyABQRBJIQUgBSADcQ0ACwtBACEBA0AgAEGgCGogAUECdGohAiACKAIAIQIgACACEBIgAEGoCGogAUECdGohAiACKAIAIQIgACACEBIgAEGwCGogAUECdGohAiACKAIAIQIgACACEBIgAEG4CGogAUECdGohAiACKAIAIQIgACACEBIgAEHACGogAUECdGohAiACKAIAIQIgACACEBIgAUEBaiEBIAFBAkcNAAsLGwAgAEHEAGohACAAKAIAIQAgAEUEQCABEF8LC3wBAX8gAEHUB2ohASABQQA2AgAgAEGAC2ohASABQQA2AgAgAEH4CmohASABQQA2AgAgAEGcCGohASABQQA2AgAgAEHVCmohASABQQA6AAAgAEH8CmohASABQQA2AgAgAEHUC2ohASABQQA2AgAgAEHYC2ohACAAQQA2AgAL8AQBB38jBiELIwZBEGokBiALQQhqIQcgC0EEaiEKIAshCCAAQSRqIQYgBiwAACEGAn8gBgR/IABBgAtqIQYgBigCACEGIAZBf0oEQCAFQQA2AgAgACABIAIQFgwCCyAAQRRqIQYgBiABNgIAIAEgAmohAiAAQRxqIQkgCSACNgIAIABB2ABqIQIgAkEANgIAIABBABAXIQkgCUUEQCAFQQA2AgBBAAwCCyAAIAcgCCAKEBghCSAJBEAgBygCACECIAgoAgAhCSAKKAIAIQggACACIAkgCBAaIQogByAKNgIAIABBBGohAiACKAIAIQggCEEASgRAQQAhAgNAIABBlAZqIAJBAnRqIQcgBygCACEHIAcgCUECdGohByAAQdQGaiACQQJ0aiEMIAwgBzYCACACQQFqIQIgAiAISA0ACwsgAwRAIAMgCDYCAAsgBSAKNgIAIABB1AZqIQAgBCAANgIAIAYoAgAhACAAIAFrDAILAkACQAJAAkACQCACKAIAIgNBIGsOBAECAgACCyACQQA2AgAgAEHUAGohAiAAEBkhAwJAIANBf0cEQANAIAIoAgAhAyADDQIgABAZIQMgA0F/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ACECIABBmAhqIQYgBigCACEHIAUgA2shCSAJIAdqIQkgAiAJSSEJIAIgB0khDSACIAdrIQJBACACIA0bIQIgAiADaiECIAIgBUohByAFIAIgBxshAiAJBEAgASACNgIAIAYoAgAhACAAIAJqIQAgBiAANgIAQQEMBgsLCyAAQfQKaiECIAIoAgAhAiADIB9rIQYgBiACaiEGIABBmAhqIQIgAiAGNgIAIAhBATYCAAwBBSAAQZgIaiECIAYNAQsMAQsgBCADayEDIAIoAgAhBCADIARqIQMgAiADNgIACyATKAIAIQIgAgRAIABByABqIQIgAigCACECIABB0ABqIQAgACgCACEAIAIgAEcEQEHTE0HEE0HkGkHnFBAECwsgASAFNgIAQQELIQAgHCQGIAALqAIBBX8gAEHoCmohBSAFKAIAIQICQCACQQBIBEBBACEABSACIAFIBEAgAUEYSgRAIABBGBAsIQIgAUFoaiEBIAAgARAsIQAgAEEYdCEAIAAgAmohACAADwsgAkUEQCAAQeQKaiECIAJBADYCAAsgAEHkCmohAwJAAkACQANAIAAQLiECIAJBf0YNASAFKAIAIQQgAiAEdCECIAMoAgAhBiAGIAJqIQIgAyACNgIAIAUgBEEIaiICNgIAIAIgAUgNAAwCAAsACyAFQX82AgBBACEADAQLIARBeEgEQEEAIQAMBAsLCyAAQeQKaiEEIAQoAgAhA0EBIAF0IQAgAEF/aiEAIAMgAHEhACADIAF2IQMgBCADNgIAIAIgAWshASAFIAE2AgALCyAAC40CAAJAIABBAEgEf0EABSAAQYCAAUgEQCAAQRBIBEAgAEGACGohACAALAAAIQAMAwsgAEGABEgEQCAAQQV2IQAgAEGACGohACAALAAAIQAgAEEFaiEABSAAQQp2IQAgAEGACGohACAALAAAIQAgAEEKaiEACwwCCyAAQYCAgAhIBH8gAEGAgCBIBH8gAEEPdiEAIABBgAhqIQAgACwAACEAIABBD2oFIABBFHYhACAAQYAIaiEAIAAsAAAhACAAQRRqCwUgAEGAgICAAkgEfyAAQRl2IQAgAEGACGohACAALAAAIQAgAEEZagUgAEEediEAIABBgAhqIQAgACwAACEAIABBHmoLCwshAAsgAAuiAQEDfyAAQdQKaiECIAIsAAAhAQJAAkAgAQ0AIABB3ApqIQEgASgCACEBIAEEQEF/IQMFIAAQLyEBIAEEQCACLAAAIQEgAQ0CQaEUQcQTQfYLQbUUEAQFQX8hAwsLDAELIAFBf2pBGHRBGHUhASACIAE6AAAgAEHsCmohASABKAIAIQIgAkEBaiECIAEgAjYCACAAEDAhACAAQf8BcSEDCyADC6wCAQd/IABB3ApqIQIgAigCACEBAkAgAUUEQCAAQdgKaiEEIAQoAgAhASABQX9GBEAgAEHQCGohASABKAIAIQEgAUF/aiEBIABB4ApqIQMgAyABNgIAIAAQMSEBIAFFBEAgAkEBNgIADAMLIABB0wpqIQEgASwAACEBIAFBAXEhASABBH8gBCgCAAUgAEEgEBUMAwshAQsgAUEBaiEHIAQgBzYCACAAQdQIaiABaiEDIAMsAAAhBiAGQf8BcSEDIAZBf0cEQCACQQE2AgAgAEHgCmohAiACIAE2AgALIABB0AhqIQEgASgCACEBIAcgAU4EQCAEQX82AgALIABB1ApqIQAgACwAACEBIAEEQEHFFEHEE0HoC0HaFBAEBSAAIAY6AAAgAyEFCwsLIAULUQEDfyAAQRRqIQMgAygCACEBIABBHGohAiACKAIAIQIgASACSQR/IAFBAWohACADIAA2AgAgASwAAAUgAEHUAGohACAAQQE2AgBBAAshACAACyABAX8gABAyIQEgAQR/IAAQMwUgAEEeEBVBAAshACAAC2ABAX8gABAwIQEgAUH/AXFBzwBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQAgAEH/AXFB0wBGIQAFQQAhAAsFQQAhAAsFQQAhAAsgAAvZAwEGfyAAEDAhAQJ/IAFB/wFxBH8gAEEfEBVBAAUgABAwIQEgAEHTCmohAiACIAE6AAAgABAjIQUgABAjIQIgABAjGiAAECMhASAAQcwIaiEDIAMgATYCACAAECMaIAAQMCEBIAFB/wFxIQEgAEHQCGohAyADIAE2AgAgAEHUCGohBCAAIAQgARAiIQEgAUUEQCAAQQoQFUEADAILIABB8ApqIQQgBEF+NgIAIAIgBXEhAQJAIAFBf0cEQCADKAIAIQEgAUEASgRAA0ACQCABQX9qIQIgAEHUCGogAmohBiAGLAAAIQYgBkF/Rw0AIAFBAUwNBCACIQEMAQsLIAQgAjYCACAAQfQKaiEBIAEgBTYCAAsLCyAAQdUKaiEBIAEsAAAhASABBEAgAygCACEDIANBAEoEf0EAIQJBACEBA0AgAEHUCGogAWohBCAELQAAIQQgBEH/AXEhBCACIARqIQIgAUEBaiEBIAEgA0gNAAsgAkEbagVBGwshASAAQShqIQIgAigCACECIAEgA2ohASABIAJqIQEgAEEsaiEDIAMgAjYCACAAQTBqIQIgAiABNgIAIABBNGohASABIAU2AgALIABB2ApqIQAgAEEANgIAQQELCyEAIAALowEBB38gAEHoCmohAyADKAIAIQECQCABQRlIBEAgAEHkCmohBCABRQRAIARBADYCAAsgAEHUCmohBSAAQdwKaiEGA0AgBigCACEBIAEEQCAFLAAAIQEgAUUNAwsgABAuIQIgAkF/Rg0CIAMoAgAhASACIAF0IQIgBCgCACEHIAcgAmohAiAEIAI2AgAgAUEIaiECIAMgAjYCACABQRFIDQALCwsLrQUBCX8gABA0IAFBIGohAiACKAIAIQUCQAJAIAVFIgNFDQAgAUGkEGohAiACKAIAIQIgAg0AQX8hAQwBCyABQQRqIQIgAigCACECAkACQCACQQhKBEAgAUGkEGohAyADKAIAIQMgAw0BBSADDQELDAELIABB5ApqIQggCCgCACEJIAkQOiEHIAFBrBBqIQIgAigCACECIAJBAUoEQCABQaQQaigCACEKQQAhAwNAIAJBAXYhBSAFIANqIQQgCiAEQQJ0aiEGIAYoAgAhBiAGIAdLIQYgAiAFayECIAMgBCAGGyEDIAUgAiAGGyECIAJBAUoNAAsFQQAhAwsgAUEXaiECIAIsAAAhAiACRQRAIAFBqBBqIQIgAigCACECIAIgA0ECdGohAiACKAIAIQMLIAFBCGohASABKAIAIQEgASADaiEBIAEtAAAhASABQf8BcSEBIABB6ApqIQIgAigCACEAIAAgAUgEf0EAIQBBfwUgACABayEAIAkgAXYhASAIIAE2AgAgAwshASACIAA2AgAMAQsgAUEXaiEDIAMsAAAhAyADBEBBgRVBxBNB6gxBjBUQBAsCQCACQQBKBEAgASgCCCEIIABB5ApqIQlBACEBA0ACQCAIIAFqIQMgAywAACEEIARB/wFxIQMgBEF/RwRAIAUgAUECdGoh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IwZBEGokBiACIQECfCAAvUIgiKdB/////wdxIgNB/MOk/wNJBHwgA0GewZryA0kEfEQAAAAAAADwPwUgAEQAAAAAAAAAABByCwUgACAAoSADQf//v/8HSw0BGgJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwgQcgwECyABKwMAIAErAwhBARBwmgwDCyABKwMAIAErAwgQcpoMAgsgASsDACABKwMIQQEQcAsLIQAgAiQGIAALywEBA38jBiECIwZBEGokBiACIQECQCAAvUIgiKdB/////wdxIgNB/MOk/wNJBEAgA0GAgMDyA08EQCAARAAAAAAAAAAAQQAQcCEACwUgA0H//7//B0sEQCAAIAChIQAMAgsCQAJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwhBARBwIQAMBQsgASsDACABKwMIEHIhAAwECyABKwMAIAErAwhBARBwmiEADAMLIAErAwAgASsDCBBymiEACwsLIAIkBiAAC5sDAwJ/AX4CfCAAvSIDQj+IpyEBAnwCfwJAIANCIIinQf////8HcSICQarGmIQESwR8IANC////////////AINCgICAgICAgPj/AFYEQCAADwsgAETvOfr+Qi6GQGQEQCAARAAAAAAAAOB/og8FIABE0rx63SsjhsBjIABEUTAt1RBJh8BjcUUNAkQAAAAAAAAAACIADwsABSACQcLc2P4DSwRAIAJBscXC/wNLDQIgAUEBcyABawwDCyACQYCAwPEDSwR8QQAhASAABSAARAAAAAAAAPA/oA8LCwwCCyAARP6CK2VHFfc/oiABQQN0QYATaisDAKCqCyEBIAAgAbciBEQAAOD+Qi7mP6KhIgAgBER2PHk17znqPaIiBaELIQQgACAEIAQgBCAEoiIAIAAgACAAIABE0KS+cmk3Zj6iRPFr0sVBvbu+oKJELN4lr2pWET+gokSTvb4WbMFmv6CiRD5VVVVVVcU/oKKhIgCiRAAAAAAAAABAIAChoyAFoaBEAAAAAAAA8D+gIQAgAUUEQCAADwsgACABEGULnwMDAn8BfgV8IAC9IgNCIIinIQECfyADQgBTIgIgAUGAgMAASXIEfyADQv///////////wCDQgBRBEBEAAAAAAAA8L8gACAAoqMPCyACRQRAIABEAAAAAAAAUEOi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mgDjqR0AXmGRAAgb5gCFmWUAoBRfAI1AaACA2P8AJ3NNAAYGMQDKVhUAyahzAHviYABrjMAAQcMSC11A+yH5PwAAAAAtRHQ+AAAAgJhG+DwAAABgUcx4OwAAAICDG/A5AAAAQCAlejgAAACAIoLjNgAAAAAd82k1AAAAAAAA4D8AAAAAAADgvwAAAAAAAPA/AAAAAAAA+D8AQagTCwgG0M9D6/1MPgBBuxMLigZAA7jiP09nZ1MuL3N0Yl92b3JiaXMuYwBmLT5hbGxvYy5hbGxvY19idWZmZXJfbGVuZ3RoX2luX2J5dGVzID09IGYtPnRlbXBfb2Zmc2V0AHZvcmJpc19kZWNvZGVfaW5pdGlhbABmLT5ieXRlc19pbl9zZWcgPiAwAGdldDhfcGFja2V0X3JhdwBmLT5ieXRlc19pbl9zZWcgPT0gMABuZXh0X3NlZ21lbnQAdm9yYmlzX2RlY29kZV9wYWNrZXRfcmVzdAAhYy0+c3BhcnNlAGNvZGVib29rX2RlY29kZV9zY2FsYXJfcmF3ACFjLT5zcGFyc2UgfHwgeiA8IGMtPnNvcnRlZF9lbnRyaWVzAGNvZGVib29rX2RlY29kZV9kZWludGVybGVhdmVfcmVwZWF0AHogPCBjLT5zb3J0ZWRfZW50cmllcwBjb2RlYm9va19kZWNvZGVfc3RhcnQAKG4gJiAzKSA9PSAwAGltZGN0X3N0ZXAzX2l0ZXIwX2xvb3AAMABnZXRfd2luZG93AGYtPnRlbXBfb2Zmc2V0ID09IGYtPmFsbG9jLmFsbG9jX2J1ZmZlcl9sZW5ndGhfaW5fYnl0ZXMAc3RhcnRfZGVjb2RlcgB2b3JiaXNjLT5zb3J0ZWRfZW50cmllcyA9PSAwAGNvbXB1dGVfY29kZXdvcmRzAHogPj0gMCAmJiB6IDwgMzIAbGVuW2ldID49IDAgJiYgbGVuW2ldIDwgMzIAYXZhaWxhYmxlW3ldID09IDAAayA9PSBjLT5zb3J0ZWRfZW50cmllcwBjb21wdXRlX3NvcnRlZF9odWZmbWFuAGMtPnNvcnRlZF9jb2Rld29yZHNbeF0gPT0gY29kZQBsZW4gIT0gTk9fQ09ERQBpbmNsdWRlX2luX3NvcnQAcG93KChmbG9hdCkgcisxLCBkaW0pID4gZW50cmllcwBsb29rdXAxX3ZhbHVlcwAoaW50KSBmbG9vcihwb3coKGZsb2F0KSByLCBkaW0pKSA8PSBlbnRyaWVzAOoPBG5hbWUB4g9+AAVhYm9ydAENZW5sYXJnZU1lbW9yeQIOZ2V0VG90YWxNZW1vcnkDF2Fib3J0T25DYW5ub3RHcm93TWVtb3J5BA5fX19hc3NlcnRfZmFpbAULX19fc2V0RXJyTm8GBl9hYm9ydAcWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwgQX19ncm93V2FzbU1lbW9yeQkKc3RhY2tBbGxvYwoJc3RhY2tTYXZlCwxzdGFja1Jlc3RvcmUME2VzdGFibGlzaFN0YWNrU3BhY2UNCHNldFRocmV3DgtzZXRUZW1wUmV0MA8LZ2V0VGVtcFJldDAQEV9zdGJfdm9yYmlzX2Nsb3NlEQ5fdm9yYmlzX2RlaW5pdBILX3NldHVwX2ZyZWUTGl9zdGJfdm9yYmlzX2ZsdXNoX3B1c2hkYXRhFCFfc3RiX3ZvcmJpc19kZWNvZGVfZnJhbWVfcHVzaGRhdGEVBl9lcnJvchYgX3ZvcmJpc19zZWFyY2hfZm9yX3BhZ2VfcHVzaGRhdGEXGF9pc193aG9sZV9wYWNrZXRfcHJlc2VudBgVX3ZvcmJpc19kZWNvZGVfcGFja2V0GQxfZ2V0OF9wYWNrZXQaFF92b3JiaXNfZmluaXNoX2ZyYW1lGxlfc3RiX3ZvcmJpc19vcGVuX3B1c2hkYXRhHAxfdm9yYmlzX2luaXQdDl9zdGFydF9kZWNvZGVyHg1fdm9yYmlzX2FsbG9jHxtfc3RiX3ZvcmJpc19nZXRfZmlsZV9vZmZzZXQgE19tYXliZV9zdGFydF9wYWNrZXQhDV9mbHVzaF9wYWNrZXQiBV9nZXRuIwZfZ2V0MzIkE19zdGJfdm9yYmlzX2pzX29wZW4lFF9zdGJfdm9yYmlzX2pzX2Nsb3NlJhdfc3RiX3ZvcmJpc19qc19jaGFubmVscycaX3N0Yl92b3JiaXNfanNfc2FtcGxlX3JhdGUoFV9zdGJfdm9yYmlzX2pzX2RlY29kZSkNX2NyYzMyX3VwZGF0ZSoWX3ZvcmJpc19kZWNvZGVfaW5pdGlhbCsaX3ZvcmJpc19kZWNvZGVfcGFja2V0X3Jlc3QsCV9nZXRfYml0cy0FX2lsb2cuEF9nZXQ4X3BhY2tldF9yYXcvDV9uZXh0X3NlZ21lbnQwBV9nZXQ4MQtfc3RhcnRfcGFnZTIQX2NhcHR1cmVfcGF0dGVybjMdX3N0YXJ0X3BhZ2Vfbm9fY2FwdHVyZXBhdHRlcm40DV9wcmVwX2h1ZmZtYW41G19jb2RlYm9va19kZWNvZGVfc2NhbGFyX3JhdzYOX3ByZWRpY3RfcG9pbnQ3D19kZWNvZGVfcmVzaWR1ZTgJX2RvX2Zsb29yOQ1faW52ZXJzZV9tZGN0OgxfYml0X3JldmVyc2U7EV9tYWtlX2Jsb2NrX2FycmF5PBJfc2V0dXBfdGVtcF9tYWxsb2M9JF9jb2RlYm9va19kZWNvZGVfZGVpbnRlcmxlYXZlX3JlcGVhdD4PX3Jlc2lkdWVfZGVjb2RlPxVfY29kZWJvb2tfZGVjb2RlX3N0ZXBAEF9jb2RlYm9va19kZWNvZGVBFl9jb2RlYm9va19kZWNvZGVfc3RhcnRCCl9kcmF3X2xpbmVDF19pbWRjdF9zdGVwM19pdGVyMF9sb29wRBlfaW1kY3Rfc3RlcDNfaW5uZXJfcl9sb29wRRlfaW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wRh9faW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wX2xkNjU0RwhfaXRlcl81NEgLX2dldF93aW5kb3dJEF92b3JiaXNfdmFsaWRhdGVKDV9zdGFydF9wYWNrZXRLBV9za2lwTAtfY3JjMzJfaW5pdE0NX3NldHVwX21hbGxvY04QX3NldHVwX3RlbXBfZnJlZU8SX2NvbXB1dGVfY29kZXdvcmRzUBdfY29tcHV0ZV9zb3J0ZWRfaHVmZm1hblEcX2NvbXB1dGVfYWNjZWxlcmF0ZWRfaHVmZm1hblIPX2Zsb2F0MzJfdW5wYWNrUw9fbG9va3VwMV92YWx1ZXNUDl9wb2ludF9jb21wYXJlVQpfbmVpZ2hib3JzVg9faW5pdF9ibG9ja3NpemVXCl9hZGRfZW50cnlYEF9pbmNsdWRlX2luX3NvcnRZD191aW50MzJfY29tcGFyZVoYX2NvbXB1dGVfdHdpZGRsZV9mYWN0b3JzWw9fY29tcHV0ZV93aW5kb3dcE19jb21wdXRlX2JpdHJldmVyc2VdB19zcXVhcmVeB19tYWxsb2NfBV9mcmVlYAhfcmVhbGxvY2ESX3RyeV9yZWFsbG9jX2NodW5rYg5fZGlzcG9zZV9jaHVua2MRX19fZXJybm9fbG9jYXRpb25kB19tZW1jbXBlB19zY2FsYm5mBl9xc29ydGcFX3NpZnRoBF9zaHJpCF90cmlua2xlagRfc2hsawVfcG50emwIX2FfY3R6X2xtBl9jeWNsZW4LX19fcmVtX3BpbzJvEV9fX3JlbV9waW8yX2xhcmdlcAZfX19zaW5xBl9sZGV4cHIGX19fY29zcwRfY29zdARfc2ludQRfZXhwdgRfbG9ndwRfcG93eAtydW5Qb3N0U2V0c3kHX21lbWNweXoHX21lbXNldHsFX3Nicmt8C2R5bkNhbGxfaWlpfQJiMA=="),function(d){return d.charCodeAt(0)});var E=E!==void 0?E:{},L={};for(e in E)E.hasOwnProperty(e)&&(L[e]=E[e]);E.arguments=[],E.thisProgram="./this.program",E.quit=function(d,Q){throw Q},E.preRun=[],E.postRun=[];var b=!1,$=!1,AA=!1,K=!1;b=typeof window=="object",$=typeof importScripts=="function",AA=typeof process=="object"&&typeof Ws=="function"&&!b&&!$,K=!b&&!AA&&!$;var oA="";function QA(d){return E.locateFile?E.locateFile(d,oA):oA+d}AA?(oA=__dirname+"/",E.read=function(Q,m){var F;return A||(A=void 0),t||(t=void 0),Q=t.normalize(Q),F=A.readFileSync(Q),m?F:F.toString()},E.readBinary=function(Q){var m=E.read(Q,!0);return m.buffer||(m=new Uint8Array(m)),$A(m.buffer),m},process.argv.length>1&&(E.thisProgram=process.argv[1].replace(/\\/g,"/")),E.arguments=process.argv.slice(2),typeof module<"u",process.on("uncaughtException",function(d){if(!(d instanceof vt))throw d}),process.on("unhandledRejection",function(d,Q){process.exit(1)}),E.quit=function(d){process.exit(d)},E.inspect=function(){return"[Emscripten Module object]"}):K?(typeof read<"u"&&(E.read=function(Q){return read(Q)}),E.readBinary=function(Q){var m;return typeof readbuffer=="function"?new Uint8Array(readbuffer(Q)):($A(typeof(m=read(Q,"binary"))=="object"),m)},typeof scriptArgs<"u"?E.arguments=scriptArgs:typeof arguments<"u"&&(E.arguments=arguments),typeof quit=="function"&&(E.quit=function(d){quit(d)})):(b||$)&&(b?document.currentScript&&(oA=document.currentScript.src):oA=self.location.href,oA=oA.indexOf("blob:")!==0?oA.split("/").slice(0,-1).join("/")+"/":"",E.read=function(Q){var m=new XMLHttpRequest;return m.open("GET",Q,!1),m.send(null),m.responseText},$&&(E.readBinary=function(Q){var m=new XMLHttpRequest;return m.open("GET",Q,!1),m.responseType="arraybuffer",m.send(null),new Uint8Array(m.response)}),E.readAsync=function(Q,m,F){var V=new XMLHttpRequest;V.open("GET",Q,!0),V.responseType="arraybuffer",V.onload=function(){if(V.status==200||V.status==0&&V.response){m(V.response);return}F()},V.onerror=F,V.send(null)},E.setWindowTitle=function(d){document.title=d});var MA=E.print||(typeof console<"u"?console.log.bind(console):typeof print<"u"?print:null),nA=E.printErr||(typeof printErr<"u"?printErr:typeof console<"u"&&console.warn.bind(console)||MA);for(e in L)L.hasOwnProperty(e)&&(E[e]=L[e]);function q(d){var Q=l;return l=l+d+15&-16,Q}function T(d){var Q=o[x>>2],m=Q+d+15&-16;return o[x>>2]=m,m>=bA&&!Lt()?(o[x>>2]=Q,0):Q}function k(d,Q){return Q||(Q=16),d=Math.ceil(d/Q)*Q}function M(d){switch(d){case"i1":case"i8":return 1;case"i16":return 2;case"i32":case"float":return 4;case"i64":case"double":return 8;default:if(d[d.length-1]==="*")return 4;if(d[0]!=="i")return 0;var Q=parseInt(d.substr(1));return $A(Q%8==0),Q/8}}function O(d){O.shown||(O.shown={}),O.shown[d]||(O.shown[d]=1,nA(d))}L=void 0;var iA={"f64-rem":function(d,Q){return d%Q},debugger:function(){}},VA=[];function he(d,Q){for(var m=0,F=m;F<m+0;F++)if(!VA[F])return VA[F]=d,1+F;throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS."}function ue(d){VA[d-1]=null}var me={};function ct(d,Q){if(d){$A(Q),me[Q]||(me[Q]={});var m=me[Q];return m[d]||(Q.length===1?m[d]=function(){return IA(Q,d)}:Q.length===2?m[d]=function(V){return IA(Q,d,[V])}:m[d]=function(){return IA(Q,d,Array.prototype.slice.call(arguments))}),m[d]}}function Fe(d,Q,m){return m?+(d>>>0)+4294967296*+(Q>>>0):+(d>>>0)+4294967296*+(0|Q)}function IA(d,Q,m){return m&&m.length?E["dynCall_"+d].apply(null,[Q].concat(m)):E["dynCall_"+d].call(null,Q)}var BA=0,pe=0;function $A(d,Q){d||Me("Assertion failed: "+Q)}function He(d){var Q=E["_"+d];return $A(Q,"Cannot call unknown function "+d+", make sure it is exported"),Q}var Oe={stackSave:function(){As()},stackRestore:function(){$n()},arrayToC:function(d){var Q,m,F=an(d.length);return Q=d,m=F,s.set(Q,m),F},stringToC:function(d){var Q=0;if(d!=null&&d!==0){var m=(d.length<<2)+1;Q=an(m),Nt(d,Q,m)}return Q}},Mt={string:Oe.stringToC,array:Oe.arrayToC};function Et(d,Q,m,F,V){var gA=He(d),EA=[],z=0;if(F)for(var UA=0;UA<F.length;UA++){var SA=Mt[m[UA]];SA?(z===0&&(z=As()),EA[UA]=SA(F[UA])):EA[UA]=F[UA]}var DA,dA=gA.apply(null,EA);return dA=(DA=dA,Q==="string"?Ye(DA):Q==="boolean"?!!DA:DA),z!==0&&$n(z),dA}function xt(d,Q,m,F){switch((m=m||"i8").charAt(m.length-1)==="*"&&(m="i32"),m){case"i1":case"i8":s[d>>0]=Q;break;case"i16":i[d>>1]=Q;break;case"i32":o[d>>2]=Q;break;case"i64":tempI64=[Q>>>0,+yi(tempDouble=Q)>=1?tempDouble>0?(0|Di(+Ks(tempDouble/4294967296),4294967295))>>>0:~~+Si((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0],o[d>>2]=tempI64[0],o[d+4>>2]=tempI64[1];break;case"float":B[d>>2]=Q;break;case"double":C[d>>3]=Q;break;default:Me("invalid type for setValue: "+m)}}function qn(d,Q,m){switch((Q=Q||"i8").charAt(Q.length-1)==="*"&&(Q="i32"),Q){case"i1":case"i8":return s[d>>0];case"i16":return i[d>>1];case"i32":case"i64":return o[d>>2];case"float":return B[d>>2];case"double":return C[d>>3];default:Me("invalid type for getValue: "+Q)}return null}function Vn(d,Q,m,F){typeof d=="number"?(gA=!0,EA=d):(gA=!1,EA=d.length);var V=typeof Q=="string"?Q:null;if(z=m==4?F:[typeof rn=="function"?rn:q,an,q,T][m===void 0?2:m](Math.max(EA,V?1:Q.length)),gA){for(F=z,$A((3&z)==0),UA=z+(-4&EA);F<UA;F+=4)o[F>>2]=0;for(UA=z+EA;F<UA;)s[F++>>0]=0;return z}if(V==="i8")return d.subarray||d.slice?r.set(d,z):r.set(new Uint8Array(d),z),z;for(var gA,EA,z,UA,SA,DA,dA,aA=0;aA<EA;){var WA=d[aA];if((SA=V||Q[aA])===0){aA++;continue}SA=="i64"&&(SA="i32"),xt(z+aA,WA,SA),dA!==SA&&(DA=M(SA),dA=SA),aA+=DA}return z}function Ct(d){return u?zn?rn(d):T(d):q(d)}function Ye(d,Q){if(Q===0||!d)return"";for(var m,F,V,gA=0,EA=0;gA|=F=r[d+EA>>0],(F!=0||Q)&&(EA++,!Q||EA!=Q););Q||(Q=EA);var z="";if(gA<128){for(;Q>0;)V=String.fromCharCode.apply(String,r.subarray(d,d+Math.min(Q,1024))),z=z?z+V:V,d+=1024,Q-=1024;return z}return m=d,function(SA,DA){for(var dA=DA;SA[dA];)++dA;if(dA-DA>16&&SA.subarray&&An)return An.decode(SA.subarray(DA,dA));for(var aA,WA,ie,ae,ge,$e,Ie="";;){if(!(aA=SA[DA++]))return Ie;if(!(128&aA)){Ie+=String.fromCharCode(aA);continue}if(WA=63&SA[DA++],(224&aA)==192){Ie+=String.fromCharCode((31&aA)<<6|WA);continue}if(ie=63&SA[DA++],(240&aA)==224?aA=(15&aA)<<12|WA<<6|ie:(ae=63&SA[DA++],(248&aA)==240?aA=(7&aA)<<18|WA<<12|ie<<6|ae:(ge=63&SA[DA++],aA=(252&aA)==248?(3&aA)<<24|WA<<18|ie<<12|ae<<6|ge:(1&aA)<<30|WA<<24|ie<<18|ae<<12|ge<<6|($e=63&SA[DA++]))),aA<65536)Ie+=String.fromCharCode(aA);else{var Ht=aA-65536;Ie+=String.fromCharCode(55296|Ht>>10,56320|1023&Ht)}}}(r,m)}function Ae(d){for(var Q="";;){var m=s[d++>>0];if(!m)return Q;Q+=String.fromCharCode(m)}}function Zn(d,Q){return function(F,V,gA){for(var EA=0;EA<F.length;++EA)s[V++>>0]=F.charCodeAt(EA);gA||(s[V>>0]=0)}(d,Q,!1)}var An=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function ht(d,Q,m,F){if(!(F>0))return 0;for(var V=m,gA=m+F-1,EA=0;EA<d.length;++EA){var z=d.charCodeAt(EA);if(z>=55296&&z<=57343&&(z=65536+((1023&z)<<10)|1023&d.charCodeAt(++EA)),z<=127){if(m>=gA)break;Q[m++]=z}else if(z<=2047){if(m+1>=gA)break;Q[m++]=192|z>>6,Q[m++]=128|63&z}else if(z<=65535){if(m+2>=gA)break;Q[m++]=224|z>>12,Q[m++]=128|z>>6&63,Q[m++]=128|63&z}else if(z<=2097151){if(m+3>=gA)break;Q[m++]=240|z>>18,Q[m++]=128|z>>12&63,Q[m++]=128|z>>6&63,Q[m++]=128|63&z}else if(z<=67108863){if(m+4>=gA)break;Q[m++]=248|z>>24,Q[m++]=128|z>>18&63,Q[m++]=128|z>>12&63,Q[m++]=128|z>>6&63,Q[m++]=128|63&z}else{if(m+5>=gA)break;Q[m++]=252|z>>30,Q[m++]=128|z>>24&63,Q[m++]=128|z>>18&63,Q[m++]=128|z>>12&63,Q[m++]=128|z>>6&63,Q[m++]=128|63&z}}return Q[m]=0,m-V}function Nt(d,Q,m){return ht(d,r,Q,m)}function ZA(d){for(var Q=0,m=0;m<d.length;++m){var F=d.charCodeAt(m);F>=55296&&F<=57343&&(F=65536+((1023&F)<<10)|1023&d.charCodeAt(++m)),F<=127?++Q:F<=2047?Q+=2:F<=65535?Q+=3:F<=2097151?Q+=4:F<=67108863?Q+=5:Q+=6}return Q}var we=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function bt(d){for(var Q=d,m=Q>>1;i[m];)++m;if((Q=m<<1)-d>32&&we)return we.decode(r.subarray(d,Q));for(var F=0,V="";;){var gA=i[d+2*F>>1];if(gA==0)return V;++F,V+=String.fromCharCode(gA)}}function Xn(d,Q,m){if(m===void 0&&(m=2147483647),m<2)return 0;for(var F=Q,V=(m-=2)<2*d.length?m/2:d.length,gA=0;gA<V;++gA){var EA=d.charCodeAt(gA);i[Q>>1]=EA,Q+=2}return i[Q>>1]=0,Q-F}function Re(d){return 2*d.length}function en(d){for(var Q=0,m="";;){var F=o[d+4*Q>>2];if(F==0)return m;if(++Q,F>=65536){var V=F-65536;m+=String.fromCharCode(55296|V>>10,56320|1023&V)}else m+=String.fromCharCode(F)}}function tn(d,Q,m){if(m===void 0&&(m=2147483647),m<4)return 0;for(var F=Q,V=F+m-4,gA=0;gA<d.length;++gA){var EA=d.charCodeAt(gA);if(EA>=55296&&EA<=57343&&(EA=65536+((1023&EA)<<10)|1023&d.charCodeAt(++gA)),o[Q>>2]=EA,(Q+=4)+4>V)break}return o[Q>>2]=0,Q-F}function Hs(d){for(var Q=0,m=0;m<d.length;++m){var F=d.charCodeAt(m);F>=55296&&F<=57343&&++m,Q+=4}return Q}function Os(d){var Q=ZA(d)+1,m=rn(Q);return m&&ht(d,s,m,Q),m}function nn(d){var Q=ZA(d)+1,m=an(Q);return ht(d,s,m,Q),m}function _e(d){return d}function Wn(){var d,Q=function(){var F=Error();if(!F.stack){try{throw Error(0)}catch(V){F=V}if(!F.stack)return"(no stack trace available)"}return F.stack.toString()}();return E.extraStackTrace&&(Q+=`
|
|
2
|
-
`+E.extraStackTrace()),(d=Q).replace(/__Z[\w\d_]+/g,function(m){var F,V=F=m;return m===V?m:m+" ["+V+"]"})}function Ge(d,Q){return d%Q>0&&(d+=Q-d%Q),d}function lt(d){E.buffer=n=d}function ze(){E.HEAP8=s=new Int8Array(n),E.HEAP16=i=new Int16Array(n),E.HEAP32=o=new Int32Array(n),E.HEAPU8=r=new Uint8Array(n),E.HEAPU16=a=new Uint16Array(n),E.HEAPU32=I=new Uint32Array(n),E.HEAPF32=B=new Float32Array(n),E.HEAPF64=C=new Float64Array(n)}function Lt(){var d=E.usingWasm?65536:16777216,Q=2147483648-d;if(o[x>>2]>Q)return!1;var m=bA;for(bA=Math.max(bA,16777216);bA<o[x>>2];)bA=bA<=536870912?Ge(2*bA,d):Math.min(Ge((3*bA+2147483648)/4,d),Q);var F=E.reallocBuffer(bA);return F&&F.byteLength==bA?(lt(F),ze(),!0):(bA=m,!1)}h=l=f=S=R=D=x=0,u=!1,E.reallocBuffer||(E.reallocBuffer=function(d){try{if(ArrayBuffer.transfer)Q=ArrayBuffer.transfer(n,d);else{var Q,m=s;Q=new ArrayBuffer(d),new Int8Array(Q).set(m)}}catch{return!1}return!!ki(Q)&&Q});try{(J=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get))(new ArrayBuffer(4))}catch{J=function(Q){return Q.byteLength}}var Bt=E.TOTAL_STACK||5242880,bA=E.TOTAL_MEMORY||16777216;function sn(){return bA}function Je(d){for(;d.length>0;){var Q=d.shift();if(typeof Q=="function"){Q();continue}var m=Q.func;typeof m=="number"?Q.arg===void 0?E.dynCall_v(m):E.dynCall_vi(m,Q.arg):m(Q.arg===void 0?null:Q.arg)}}bA<Bt&&nA("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+bA+"! (TOTAL_STACK="+Bt+")"),E.buffer?n=E.buffer:(typeof WebAssembly=="object"&&typeof WebAssembly.Memory=="function"?(E.wasmMemory=new WebAssembly.Memory({initial:bA/65536}),n=E.wasmMemory.buffer):n=new ArrayBuffer(bA),E.buffer=n),ze();var Tt=[],_n=[],Ys=[],Js=[],Ps=[],zn=!1,ui=!1;function mi(d){Tt.unshift(d)}function ea(d){_n.unshift(d)}function ta(d){Ys.unshift(d)}function na(d){Js.unshift(d)}function pi(d){Ps.unshift(d)}function sa(d,Q,m){var F,V;O("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!"),m&&(F=s[V=Q+ZA(d)]),Nt(d,Q,1/0),m&&(s[V]=F)}function oa(d,Q,m){return d>=0?d:Q<=32?2*Math.abs(1<<Q-1)+d:Math.pow(2,Q)+d}function ra(d,Q,m){if(d<=0)return d;var F=Q<=32?Math.abs(1<<Q-1):Math.pow(2,Q-1);return d>=F&&(Q<=32||d>F)&&(d=-2*F+d),d}var yi=Math.abs,Si=Math.ceil,Ks=Math.floor,Di=Math.min,je=0,jn=null,Ut=null;function ia(d){return d}E.preloadedImages={},E.preloadedAudios={};var qs="data:application/octet-stream;base64,";function on(d){return String.prototype.startsWith?d.startsWith(qs):d.indexOf(qs)===0}(function(){var Q="main.wast",m="main.wasm",F="main.temp.asm.js";on(Q)||(Q=QA(Q)),on(m)||(m=QA(m)),on(F)||(F=QA(F));var V={global:null,env:null,asm2wasm:iA,parent:E},gA=null;function EA(dA){return dA}function z(){try{if(E.wasmBinary)return new Uint8Array(E.wasmBinary);if(E.readBinary)return E.readBinary(m);throw"both async and sync fetching of the wasm failed"}catch(dA){Me(dA)}}E.asmPreload=E.asm;var UA=E.reallocBuffer,SA=function(dA){dA=Ge(dA,E.usingWasm?65536:16777216);var aA=E.buffer.byteLength;if(E.usingWasm)try{var WA=E.wasmMemory.grow((dA-aA)/65536);return WA!==-1?E.buffer=E.wasmMemory.buffer:null}catch{return null}};E.reallocBuffer=function(dA){return DA==="asmjs"?UA(dA):SA(dA)};var DA="";E.asm=function(dA,aA,WA){var ie;if(!(aA=ie=aA).table){var ae,ge=E.wasmTableSize;ge===void 0&&(ge=1024);var $e=E.wasmMaxTableSize;typeof WebAssembly=="object"&&typeof WebAssembly.Table=="function"?$e!==void 0?aA.table=new WebAssembly.Table({initial:ge,maximum:$e,element:"anyfunc"}):aA.table=new WebAssembly.Table({initial:ge,element:"anyfunc"}):aA.table=Array(ge),E.wasmTable=aA.table}return aA.memoryBase||(aA.memoryBase=E.STATIC_BASE),aA.tableBase||(aA.tableBase=0),ae=function(Ht,dt,ts){if(typeof WebAssembly!="object")return nA("no native wasm support detected"),!1;if(!(E.wasmMemory instanceof WebAssembly.Memory))return nA("no native wasm Memory in use"),!1;function gn(ye,Se){if((gA=ye.exports).memory){var Ot,ns,Xs;Ot=gA.memory,ns=E.buffer,Ot.byteLength<ns.byteLength&&nA("the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here"),Xs=new Int8Array(ns),new Int8Array(Ot).set(Xs),lt(Ot),ze()}E.asm=gA,E.usingWasm=!0,function(ha){if(je--,E.monitorRunDependencies&&E.monitorRunDependencies(je),je==0&&(jn!==null&&(clearInterval(jn),jn=null),Ut)){var Fi=Ut;Ut=null,Fi()}}("wasm-instantiate")}if(dt.memory=E.wasmMemory,V.global={NaN:NaN,Infinity:1/0},V["global.Math"]=Math,V.env=dt,je++,E.monitorRunDependencies&&E.monitorRunDependencies(je),E.instantiateWasm)try{return E.instantiateWasm(V,gn)}catch(ye){return nA("Module.instantiateWasm callback failed with error: "+ye),!1}function Qt(ye){gn(ye.instance,ye.module)}function Zs(ye){(!E.wasmBinary&&(b||$)&&typeof fetch=="function"?fetch(m,{credentials:"same-origin"}).then(function(Se){if(!Se.ok)throw"failed to load wasm binary file at '"+m+"'";return Se.arrayBuffer()}).catch(function(){return z()}):new Promise(function(Se,Ot){Se(z())})).then(function(Se){return WebAssembly.instantiate(Se,V)}).then(ye).catch(function(Se){nA("failed to asynchronously prepare wasm: "+Se),Me(Se)})}return E.wasmBinary||typeof WebAssembly.instantiateStreaming!="function"||on(m)||typeof fetch!="function"?Zs(Qt):WebAssembly.instantiateStreaming(fetch(m,{credentials:"same-origin"}),V).then(Qt).catch(function(ye){nA("wasm streaming compile failed: "+ye),nA("falling back to ArrayBuffer instantiation"),Zs(Qt)}),{}}(dA,aA,WA),$A(ae,"no binaryen method succeeded."),ae},E.asm})(),l=(h=1024)+4816,_n.push(),E.STATIC_BASE=h,E.STATIC_BUMP=4816;var ee=l;function aa(d){s[ee]=s[d],s[ee+1]=s[d+1],s[ee+2]=s[d+2],s[ee+3]=s[d+3]}function ga(d){s[ee]=s[d],s[ee+1]=s[d+1],s[ee+2]=s[d+2],s[ee+3]=s[d+3],s[ee+4]=s[d+4],s[ee+5]=s[d+5],s[ee+6]=s[d+6],s[ee+7]=s[d+7]}function Ia(d,Q,m){var F=m>0?m:ZA(d)+1,V=Array(F),gA=ht(d,V,0,V.length);return Q&&(V.length=gA),V}function ca(d){for(var Q=[],m=0;m<d.length;m++){var F=d[m];F>255&&(F&=255),Q.push(String.fromCharCode(F))}return Q.join("")}l+=16,x=q(4),R=(f=S=k(l))+Bt,D=k(R),o[x>>2]=D,u=!0,E.wasmTableSize=4,E.wasmMaxTableSize=4,E.asmGlobalArg={},E.asmLibraryArg={abort:Me,assert:$A,enlargeMemory:Lt,getTotalMemory:sn,abortOnCannotGrowMemory:function(){Me("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+bA+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")},invoke_iii:function(Q,m,F){var V=As();try{return E.dynCall_iii(Q,m,F)}catch(gA){if($n(V),typeof gA!="number"&&gA!=="longjmp")throw gA;E.setThrew(1,0)}},___assert_fail:function(Q,m,F,V){Me("Assertion failed: "+Ye(Q)+", at: "+[m?Ye(m):"unknown filename",F,V?Ye(V):"unknown function"])},___setErrNo:function(Q){return E.___errno_location&&(o[E.___errno_location()>>2]=Q),Q},_abort:function(){E.abort()},_emscripten_memcpy_big:function(Q,m,F){return r.set(r.subarray(m,m+F),Q),Q},_llvm_floor_f64:Ks,DYNAMICTOP_PTR:x,tempDoublePtr:ee,ABORT:BA,STACKTOP:S,STACK_MAX:R};var Vs=E.asm(E.asmGlobalArg,E.asmLibraryArg,n);E.asm=Vs,E.___errno_location=function(){return E.asm.___errno_location.apply(null,arguments)};var ki=E._emscripten_replace_memory=function(){return E.asm._emscripten_replace_memory.apply(null,arguments)};E._free=function(){return E.asm._free.apply(null,arguments)};var rn=E._malloc=function(){return E.asm._malloc.apply(null,arguments)};E._memcpy=function(){return E.asm._memcpy.apply(null,arguments)},E._memset=function(){return E.asm._memset.apply(null,arguments)},E._sbrk=function(){return E.asm._sbrk.apply(null,arguments)},E._stb_vorbis_js_channels=function(){return E.asm._stb_vorbis_js_channels.apply(null,arguments)},E._stb_vorbis_js_close=function(){return E.asm._stb_vorbis_js_close.apply(null,arguments)},E._stb_vorbis_js_decode=function(){return E.asm._stb_vorbis_js_decode.apply(null,arguments)},E._stb_vorbis_js_open=function(){return E.asm._stb_vorbis_js_open.apply(null,arguments)},E._stb_vorbis_js_sample_rate=function(){return E.asm._stb_vorbis_js_sample_rate.apply(null,arguments)},E.establishStackSpace=function(){return E.asm.establishStackSpace.apply(null,arguments)},E.getTempRet0=function(){return E.asm.getTempRet0.apply(null,arguments)},E.runPostSets=function(){return E.asm.runPostSets.apply(null,arguments)},E.setTempRet0=function(){return E.asm.setTempRet0.apply(null,arguments)},E.setThrew=function(){return E.asm.setThrew.apply(null,arguments)};var an=E.stackAlloc=function(){return E.asm.stackAlloc.apply(null,arguments)},$n=E.stackRestore=function(){return E.asm.stackRestore.apply(null,arguments)},As=E.stackSave=function(){return E.asm.stackSave.apply(null,arguments)};function vt(d){this.name="ExitStatus",this.message="Program terminated with exit("+d+")",this.status=d}function es(d){d=d||E.arguments,!(je>0)&&(function(){if(E.preRun)for(typeof E.preRun=="function"&&(E.preRun=[E.preRun]);E.preRun.length;)mi(E.preRun.shift());Je(Tt)}(),!(je>0)&&(E.calledRun||(E.setStatus?(E.setStatus("Running..."),setTimeout(function(){setTimeout(function(){E.setStatus("")},1),Q()},1)):Q())));function Q(){!E.calledRun&&(E.calledRun=!0,BA||(zn||(zn=!0,Je(_n)),Je(Ys),E.onRuntimeInitialized&&E.onRuntimeInitialized(),function(){if(E.postRun)for(typeof E.postRun=="function"&&(E.postRun=[E.postRun]);E.postRun.length;)pi(E.postRun.shift());Je(Ps)}()))}}function Ea(d,Q){(!Q||!E.noExitRuntime||d!==0)&&(E.noExitRuntime||(BA=!0,pe=d,S=H,Je(Js),ui=!0,E.onExit&&E.onExit(d)),E.quit(d,new vt(d)))}function Me(d){throw E.onAbort&&E.onAbort(d),d!==void 0?(MA(d),nA(d),d=JSON.stringify(d)):d="",BA=!0,pe=1,"abort("+d+"). Build with -s ASSERTIONS=1 for more info."}if(E.dynCall_iii=function(){return E.asm.dynCall_iii.apply(null,arguments)},E.asm=Vs,E.ccall=Et,E.cwrap=function(Q,m,F,V){var gA=(F=F||[]).every(function(EA){return EA==="number"});return m!=="string"&&gA&&!V?He(Q):function(){return Et(Q,m,F,arguments,V)}},vt.prototype=Error(),vt.prototype.constructor=vt,Ut=function d(){E.calledRun||es(),E.calledRun||(Ut=d)},E.run=es,E.abort=Me,E.preInit)for(typeof E.preInit=="function"&&(E.preInit=[E.preInit]);E.preInit.length>0;)E.preInit.pop()();E.noExitRuntime=!0,es(),E.onRuntimeInitialized=()=>{eo=!0,to()},De.decode=function(d){return function(m){if(!eo)throw Error("SF3 decoder has not been initialized yet. Did you await synth.isReady?");var F={};function V(dt){return new Int32Array(E.HEAPU8.buffer,dt,1)[0]}function gA(dt,ts){var gn=new ArrayBuffer(ts*Float32Array.BYTES_PER_ELEMENT),Qt=new Float32Array(gn);return Qt.set(new Float32Array(E.HEAPU8.buffer,dt,ts)),Qt}F.open=E.cwrap("stb_vorbis_js_open","number",[]),F.close=E.cwrap("stb_vorbis_js_close","void",["number"]),F.channels=E.cwrap("stb_vorbis_js_channels","number",["number"]),F.sampleRate=E.cwrap("stb_vorbis_js_sample_rate","number",["number"]),F.decode=E.cwrap("stb_vorbis_js_decode","number",["number","number","number","number","number"]);var EA,z,UA,SA,DA=F.open(),dA=(EA=m,z=m.byteLength,UA=E._malloc(z),(SA=new Uint8Array(E.HEAPU8.buffer,UA,z)).set(new Uint8Array(EA,0,z)),SA),aA=E._malloc(4),WA=E._malloc(4),ie=F.decode(DA,dA.byteOffset,dA.byteLength,aA,WA);if(E._free(dA.byteOffset),ie<0)throw F.close(DA),E._free(aA),Error("stbvorbis decode failed: "+ie);for(var ae=F.channels(DA),ge=Array(ae),$e=new Int32Array(E.HEAPU32.buffer,V(aA),ae),Ie=0;Ie<ae;Ie++)ge[Ie]=gA($e[Ie],ie),E._free($e[Ie]);var Ht=F.sampleRate(DA);return F.close(DA),E._free(V(aA)),E._free(aA),{data:ge,sampleRate:Ht,eof:!0,error:null}}(d)}})();var rs=new Float32Array(30001);for(let e=0;e<rs.length;e++){let A=-15e3+e;rs[e]=Math.pow(2,A/1200)}function le(e){return e<=-32767?0:rs[e- -15e3]}var En=-2e4,no=16500,is=new Float32Array(no-En+1);for(let e=0;e<is.length;e++){let A=En+e;is[e]=440*Math.pow(2,(A-6900)/1200)}function Jt(e){return e<En||e>no?440*Math.pow(2,(e-6900)/1200):is[~~e-En]}var gs=-1660,Mi=1600,as=new Float32Array((Mi-gs)*100+1);for(let e=0;e<as.length;e++){let A=(gs*100+e)/100;as[e]=Math.pow(10,-A/20)}function Ee(e){return as[Math.floor((e-gs)*100)]}var g={INVALID:-1,startAddrsOffset:0,endAddrOffset:1,startloopAddrsOffset:2,endloopAddrsOffset:3,startAddrsCoarseOffset:4,modLfoToPitch:5,vibLfoToPitch:6,modEnvToPitch:7,initialFilterFc:8,initialFilterQ:9,modLfoToFilterFc:10,modEnvToFilterFc:11,endAddrsCoarseOffset:12,modLfoToVolume:13,unused1:14,chorusEffectsSend:15,reverbEffectsSend:16,pan:17,unused2:18,unused3:19,unused4:20,delayModLFO:21,freqModLFO:22,delayVibLFO:23,freqVibLFO:24,delayModEnv:25,attackModEnv:26,holdModEnv:27,decayModEnv:28,sustainModEnv:29,releaseModEnv:30,keyNumToModEnvHold:31,keyNumToModEnvDecay:32,delayVolEnv:33,attackVolEnv:34,holdVolEnv:35,decayVolEnv:36,sustainVolEnv:37,releaseVolEnv:38,keyNumToVolEnvHold:39,keyNumToVolEnvDecay:40,instrument:41,reserved1:42,keyRange:43,velRange:44,startloopAddrsCoarseOffset:45,keyNum:46,velocity:47,initialAttenuation:48,reserved2:49,endloopAddrsCoarseOffset:50,coarseTune:51,fineTune:52,sampleID:53,sampleModes:54,reserved3:55,scaleTuning:56,exclusiveClass:57,overridingRootKey:58,unused5:59,endOper:60,vibLfoToVolume:61,vibLfoToFilterFc:62},Pt=Object.keys(g).length,so=Math.max(...Object.values(g)),X=[];X[g.startAddrsOffset]={min:0,max:32768,def:0,nrpn:1};X[g.endAddrOffset]={min:-32768,max:32768,def:0,nrpn:1};X[g.startloopAddrsOffset]={min:-32768,max:32768,def:0,nrpn:1};X[g.endloopAddrsOffset]={min:-32768,max:32768,def:0,nrpn:1};X[g.startAddrsCoarseOffset]={min:0,max:32768,def:0,nrpn:1};X[g.modLfoToPitch]={min:-12e3,max:12e3,def:0,nrpn:2};X[g.vibLfoToPitch]={min:-12e3,max:12e3,def:0,nrpn:2};X[g.modEnvToPitch]={min:-12e3,max:12e3,def:0,nrpn:2};X[g.initialFilterFc]={min:1500,max:13500,def:13500,nrpn:2};X[g.initialFilterQ]={min:0,max:960,def:0,nrpn:1};X[g.modLfoToFilterFc]={min:-12e3,max:12e3,def:0,nrpn:2};X[g.vibLfoToFilterFc]={min:-12e3,max:12e3,def:0,nrpn:2};X[g.modEnvToFilterFc]={min:-12e3,max:12e3,def:0,nrpn:2};X[g.endAddrsCoarseOffset]={min:-32768,max:32768,def:0,nrpn:1};X[g.modLfoToVolume]={min:-960,max:960,def:0,nrpn:1};X[g.vibLfoToVolume]={min:-960,max:960,def:0,nrpn:1};X[g.chorusEffectsSend]={min:0,max:1e3,def:0,nrpn:1};X[g.reverbEffectsSend]={min:0,max:1e3,def:0,nrpn:1};X[g.pan]={min:-500,max:500,def:0,nrpn:1};X[g.delayModLFO]={min:-12e3,max:5e3,def:-12e3,nrpn:2};X[g.freqModLFO]={min:-16e3,max:4500,def:0,nrpn:4};X[g.delayVibLFO]={min:-12e3,max:5e3,def:-12e3,nrpn:2};X[g.freqVibLFO]={min:-16e3,max:4500,def:0,nrpn:4};X[g.delayModEnv]={min:-32768,max:5e3,def:-32768,nrpn:2};X[g.attackModEnv]={min:-32768,max:8e3,def:-32768,nrpn:2};X[g.holdModEnv]={min:-12e3,max:5e3,def:-12e3,nrpn:2};X[g.decayModEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};X[g.sustainModEnv]={min:0,max:1e3,def:0,nrpn:1};X[g.releaseModEnv]={min:-7200,max:8e3,def:-12e3,nrpn:2};X[g.keyNumToModEnvHold]={min:-1200,max:1200,def:0,nrpn:1};X[g.keyNumToModEnvDecay]={min:-1200,max:1200,def:0,nrpn:1};X[g.delayVolEnv]={min:-12e3,max:5e3,def:-12e3,nrpn:2};X[g.attackVolEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};X[g.holdVolEnv]={min:-12e3,max:5e3,def:-12e3,nrpn:2};X[g.decayVolEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};X[g.sustainVolEnv]={min:0,max:1440,def:0,nrpn:1};X[g.releaseVolEnv]={min:-7200,max:8e3,def:-12e3,nrpn:2};X[g.keyNumToVolEnvHold]={min:-1200,max:1200,def:0,nrpn:1};X[g.keyNumToVolEnvDecay]={min:-1200,max:1200,def:0,nrpn:1};X[g.startloopAddrsCoarseOffset]={min:-32768,max:32768,def:0,nrpn:1};X[g.keyNum]={min:-1,max:127,def:-1,nrpn:1};X[g.velocity]={min:-1,max:127,def:-1,nrpn:1};X[g.initialAttenuation]={min:0,max:1440,def:0,nrpn:1};X[g.endloopAddrsCoarseOffset]={min:-32768,max:32768,def:0,nrpn:1};X[g.coarseTune]={min:-120,max:120,def:0,nrpn:1};X[g.fineTune]={min:-12700,max:12700,def:0,nrpn:1};X[g.scaleTuning]={min:0,max:1200,def:100,nrpn:1};X[g.exclusiveClass]={min:0,max:99999,def:0,nrpn:0};X[g.overridingRootKey]={min:-1,max:127,def:-1,nrpn:0};X[g.sampleModes]={min:0,max:3,def:0,nrpn:0};var oo=.01,te=100,Is=90,xi=15e-6,Be=class e{currentSampleTime=0;sampleRate;currentAttenuationDb=te;state=0;releaseStartDb=te;releaseStartTimeSamples=0;currentReleaseGain=1;attackDuration=0;decayDuration=0;releaseDuration=0;attenuation=0;attenuationTargetGain=0;attenuationTarget=0;sustainDbRelative=0;delayEnd=0;attackEnd=0;holdEnd=0;decayEnd=0;constructor(A,t){this.sampleRate=A,this.canEndOnSilentSustain=t/10>=Is}static startRelease(A){A.volumeEnvelope.releaseStartTimeSamples=A.volumeEnvelope.currentSampleTime,A.volumeEnvelope.currentReleaseGain=Ee(A.volumeEnvelope.currentAttenuationDb),e.recalculate(A)}static recalculate(A){let t=A.volumeEnvelope,n=I=>Math.max(0,Math.floor(le(I)*t.sampleRate));t.attenuationTarget=Math.max(0,Math.min(A.modulatedGenerators[g.initialAttenuation],1440))/10,t.attenuationTargetGain=Ee(t.attenuationTarget),t.sustainDbRelative=Math.min(te,A.modulatedGenerators[g.sustainVolEnv]/10);let s=Math.min(te,t.sustainDbRelative);t.attackDuration=n(A.modulatedGenerators[g.attackVolEnv]);let r=A.modulatedGenerators[g.decayVolEnv],i=(60-A.targetKey)*A.modulatedGenerators[g.keyNumToVolEnvDecay],a=s/te;t.decayDuration=n(r+i)*a,t.releaseDuration=n(A.modulatedGenerators[g.releaseVolEnv]),t.delayEnd=n(A.modulatedGenerators[g.delayVolEnv]),t.attackEnd=t.attackDuration+t.delayEnd;let o=(60-A.targetKey)*A.modulatedGenerators[g.keyNumToVolEnvHold];if(t.holdEnd=n(A.modulatedGenerators[g.holdVolEnv]+o)+t.attackEnd,t.decayEnd=t.decayDuration+t.holdEnd,t.state===0&&t.attackEnd===0&&(t.state=2),A.isInRelease){let I=Math.max(0,Math.min(te,t.sustainDbRelative)),B=I/te;switch(t.decayDuration=n(r+i)*B,t.state){case 0:t.releaseStartDb=te;break;case 1:let h=1-(t.attackEnd-t.releaseStartTimeSamples)/t.attackDuration;t.releaseStartDb=20*Math.log10(h)*-1;break;case 2:t.releaseStartDb=0;break;case 3:t.releaseStartDb=(1-(t.decayEnd-t.releaseStartTimeSamples)/t.decayDuration)*I;break;case 4:t.releaseStartDb=I;break}t.releaseStartDb=Math.max(0,Math.min(t.releaseStartDb,te)),t.releaseStartDb>=Is&&(A.finished=!0),t.currentReleaseGain=Ee(t.releaseStartDb);let C=(te-t.releaseStartDb)/te;t.releaseDuration*=C}}static apply(A,t,n,s){let r=A.volumeEnvelope,i=n/10,a=s;if(A.isInRelease){let I=r.currentSampleTime-r.releaseStartTimeSamples;if(I>=r.releaseDuration){for(let C=0;C<t.length;C++)t[C]=0;A.finished=!0;return}let B=te-r.releaseStartDb;for(let C=0;C<t.length;C++){r.attenuation+=(r.attenuationTargetGain-r.attenuation)*a;let h=I/r.releaseDuration*B+r.releaseStartDb;r.currentReleaseGain=r.attenuation*Ee(h+i),t[C]*=r.currentReleaseGain,r.currentSampleTime++,I++}r.currentReleaseGain<=xi&&(A.finished=!0);return}let o=0;switch(r.state){case 0:for(;r.currentSampleTime<r.delayEnd;)if(r.currentAttenuationDb=te,t[o]=0,r.currentSampleTime++,++o>=t.length)return;r.state++;case 1:for(;r.currentSampleTime<r.attackEnd;){r.attenuation+=(r.attenuationTargetGain-r.attenuation)*a;let I=1-(r.attackEnd-r.currentSampleTime)/r.attackDuration;if(t[o]*=I*r.attenuation*Ee(i),r.currentAttenuationDb=0,r.currentSampleTime++,++o>=t.length)return}r.state++;case 2:for(;r.currentSampleTime<r.holdEnd;)if(r.attenuation+=(r.attenuationTargetGain-r.attenuation)*a,t[o]*=r.attenuation*Ee(i),r.currentAttenuationDb=0,r.currentSampleTime++,++o>=t.length)return;r.state++;case 3:for(;r.currentSampleTime<r.decayEnd;)if(r.attenuation+=(r.attenuationTargetGain-r.attenuation)*a,r.currentAttenuationDb=(1-(r.decayEnd-r.currentSampleTime)/r.decayDuration)*r.sustainDbRelative,t[o]*=r.attenuation*Ee(r.currentAttenuationDb+i),r.currentSampleTime++,++o>=t.length)return;r.state++;case 4:for(r.canEndOnSilentSustain&&r.sustainDbRelative>=Is&&(A.finished=!0);;)if(r.attenuation+=(r.attenuationTargetGain-r.attenuation)*a,t[o]*=r.attenuation*Ee(r.sustainDbRelative+i),r.currentAttenuationDb=r.sustainDbRelative,r.currentSampleTime++,++o>=t.length)return}}};var N=class extends Uint8Array{currentIndex=0;constructor(A){super(A)}slice(A,t){let n=super.slice(A,t);return n.currentIndex=0,n}};function kA(e){let A=e.reduce((s,r)=>s+r.length,0),t=new N(A),n=0;for(let s of e)t.set(s,n),n+=s.length;return t}var PA=class{ticks;messageStatusByte;messageData;constructor(A,t,n){this.ticks=A,this.messageStatusByte=t,this.messageData=n}};function ro(e){let A=e&240,t=e&15,n=t;switch(A){case 128:case 144:case 160:case 176:case 192:case 208:case 224:break;case 240:switch(t){case 0:n=-3;break;case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:n=-1;break;case 15:n=-2;break}break;default:n=-1}return n}var w={noteOff:128,noteOn:144,polyPressure:160,controllerChange:176,programChange:192,channelPressure:208,pitchBend:224,systemExclusive:240,timecode:241,songPosition:242,songSelect:243,tuneRequest:246,clock:248,start:250,continue:251,stop:252,activeSensing:254,reset:255,sequenceNumber:0,text:1,copyright:2,trackName:3,instrumentName:4,lyric:5,marker:6,cuePoint:7,programName:8,midiChannelPrefix:32,midiPort:33,endOfTrack:47,setTempo:81,smpteOffset:84,timeSignature:88,keySignature:89,sequenceSpecific:127};function ft(e){let A=e&240,t=e&15,n=-1,s=e;return A>=128&&A<=224&&(n=t,s=A),{status:s,channel:n}}var p={bankSelect:0,modulationWheel:1,breathController:2,footController:4,portamentoTime:5,dataEntryMsb:6,mainVolume:7,balance:8,pan:10,expressionController:11,effectControl1:12,effectControl2:13,generalPurposeController1:16,generalPurposeController2:17,generalPurposeController3:18,generalPurposeController4:19,lsbForControl0BankSelect:32,lsbForControl1ModulationWheel:33,lsbForControl2BreathController:34,lsbForControl4FootController:36,lsbForControl5PortamentoTime:37,lsbForControl6DataEntry:38,lsbForControl7MainVolume:39,lsbForControl8Balance:40,lsbForControl10Pan:42,lsbForControl11ExpressionController:43,lsbForControl12EffectControl1:44,lsbForControl13EffectControl2:45,sustainPedal:64,portamentoOnOff:65,sostenutoPedal:66,softPedal:67,legatoFootswitch:68,hold2Pedal:69,soundVariation:70,filterResonance:71,releaseTime:72,attackTime:73,brightness:74,decayTime:75,vibratoRate:76,vibratoDepth:77,vibratoDelay:78,soundController10:79,generalPurposeController5:80,generalPurposeController6:81,generalPurposeController7:82,generalPurposeController8:83,portamentoControl:84,reverbDepth:91,tremoloDepth:92,chorusDepth:93,detuneDepth:94,phaserDepth:95,dataIncrement:96,dataDecrement:97,NRPNLsb:98,NRPNMsb:99,RPNLsb:100,RPNMsb:101,allSoundOff:120,resetAllControllers:121,localControlOnOff:122,allNotesOff:123,omniModeOff:124,omniModeOn:125,monoModeOn:126,polyModeOn:127},io={8:2,9:2,10:2,11:2,12:1,13:1,14:2};var hn=64,ao=121;function go(e){return e==="gm2"?ao:0}function ne(e){return e===120||e===126||e===127}function Cn(e){return ne(e)||e===hn||e===ao}function ut(e,A,t,n,s,r){let i=e,a=0;if(n)xA(t)?Cn(A)||(i=A):t==="gm2"&&(i=A);else{let o=!0;switch(t){case"gm":y(`%cIgnoring the Bank Select (${A}), as the synth is in GM mode.`,c.info),o=!1;break;case"xg":o=Cn(A),ne(A)?a=2:r%16!==9&&(a=1);break;case"gm2":A===120?a=2:r%16!==9&&(a=1)}s&&(A=128),A===128&&!s&&(A=e),o&&(i=A)}return{newBank:i,drumsStatus:a}}function mt(e,A,t,n){return n?t?ne(e)?e:128:Cn(e)||A===0&&e!==0?e:Cn(A)?0:A:t?128:e}function xA(e){return e==="gm2"||e==="xg"}var KA={mainVolume:0,masterPan:1,voicesCap:2,interpolationType:3,midiSystem:4};function Io(e,A){switch(e){case KA.masterPan:let t=A;this.pan=t,t=t/2+.5,this.panLeft=1-t,this.panRight=t;break;case KA.mainVolume:this.masterGain=A*cs,this.setMasterParameter(KA.masterPan,this.pan);break;case KA.voicesCap:this.voiceCap=A;break;case KA.interpolationType:this.interpolationType=A;break;case KA.midiSystem:this.setSystem(A)}}function eA(e,A,t=void 0,n=!0){if(t){let s=e.slice(e.currentIndex,e.currentIndex+A);return e.currentIndex+=A,new TextDecoder(t.replace(/[^\x20-\x7E]/g,"")).decode(s.buffer)}else{let s=!1,r="";for(let i=0;i<A;i++){let a=e[e.currentIndex++];if(!s){if((a<32||a>127)&&a!==10){if(n){s=!0;continue}else if(a===0){s=!0;continue}}r+=String.fromCharCode(a)}}return r}}function XA(e,A=!1){let t=e.length;A&&(t=t+1);let n=new N(t);return FA(n,e),n}function FA(e,A,t=0){t>0&&A.length>t&&(A=A.slice(0,t));for(let n=0;n<A.length;n++)e[e.currentIndex++]=A.charCodeAt(n);if(t>A.length)for(let n=0;n<t-A.length;n++)e[e.currentIndex++]=0;return e}var et={linear:0,nearestNeighbor:1,fourthOrder:2},Kt={SoundCanvasText:0,XGText:1,SoundCanvasDotDisplay:2};var vA=10,_={noController:0,noteOnVelocity:2,noteOnKeyNum:3,polyPressure:10,channelPressure:13,pitchWheel:14,pitchWheelRange:16,link:127},wA={linear:0,concave:1,convex:2,switch:3},hA=class e{currentValue=0;modulatorDestination;transformAmount;transformType;isEffectModulator=!1;sourcePolarity;sourceDirection;sourceUsesCC;sourceIndex;sourceCurveType;secSrcPolarity;secSrcDirection;secSrcUsesCC;secSrcIndex;secSrcCurveType;constructor(A,t,n,s,r,i,a,o,I,B,C,h,l,u=!1){this.sourcePolarity=s,this.sourceDirection=r,this.sourceUsesCC=n,this.sourceIndex=A,this.sourceCurveType=t,this.secSrcPolarity=I,this.secSrcDirection=B,this.secSrcUsesCC=o,this.secSrcIndex=i,this.secSrcCurveType=a,this.modulatorDestination=C,this.transformAmount=h,this.transformType=l,this.isEffectModulator=u,this.modulatorDestination>so&&(this.modulatorDestination=g.INVALID)}static copy(A){return new e(A.sourceIndex,A.sourceCurveType,A.sourceUsesCC,A.sourcePolarity,A.sourceDirection,A.secSrcIndex,A.secSrcCurveType,A.secSrcUsesCC,A.secSrcPolarity,A.secSrcDirection,A.modulatorDestination,A.transformAmount,A.transformType,A.isEffectModulator)}static isIdentical(A,t,n=!1){return A.sourceIndex===t.sourceIndex&&A.sourceUsesCC===t.sourceUsesCC&&A.sourcePolarity===t.sourcePolarity&&A.sourceDirection===t.sourceDirection&&A.sourceCurveType===t.sourceCurveType&&A.secSrcIndex===t.secSrcIndex&&A.secSrcUsesCC===t.secSrcUsesCC&&A.secSrcPolarity===t.secSrcPolarity&&A.secSrcDirection===t.secSrcDirection&&A.secSrcCurveType===t.secSrcCurveType&&A.modulatorDestination===t.modulatorDestination&&A.transformType===t.transformType&&(!n||A.transformAmount===t.transformAmount)}static debugString(A){function t(r,i){return Object.keys(r).find(a=>r[a]===i)}let n=t(wA,A.sourceCurveType);n+=A.sourcePolarity===0?" unipolar ":" bipolar ",n+=A.sourceDirection===0?"forwards ":"backwards ",A.sourceUsesCC?n+=t(p,A.sourceIndex):n+=t(_,A.sourceIndex);let s=t(wA,A.secSrcCurveType);return s+=A.secSrcPolarity===0?" unipolar ":" bipolar ",s+=A.secSrcDirection===0?"forwards ":"backwards ",A.secSrcUsesCC?s+=t(p,A.secSrcIndex):s+=t(_,A.secSrcIndex),`Modulator:
|
|
1
|
+
var Ws=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(A,t)=>(typeof require<"u"?require:A)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var _s=!1,zs=!0,an=!1,wi=!0;function ts(e,A,t,n){_s=e,zs=A,an=t,wi=n}function y(...e){_s&&console.info(...e)}function J(...e){zs&&console.warn(...e)}function Ie(...e){an&&console.group(...e)}function dA(...e){an&&console.groupCollapsed(...e)}function q(){an&&console.groupEnd()}function ns(e){e=Math.floor(e);let A=Math.floor(e/60),t=Math.round(e-A*60);return{minutes:A,seconds:t,time:`${A.toString().padStart(2,"0")}:${t.toString().padStart(2,"0")}`}}function js(e){return e.trim().replaceAll(".mid","").replaceAll(".kar","").replaceAll(".rmi","").replaceAll(".xmf","").replaceAll(".mxmf","").replaceAll("_"," ").trim()}function OA(e){let A="";for(let t=0;t<e.length;t++){let n=e[t].toString(16).padStart(2,"0").toUpperCase();A+=n,A+=" "}return A}function $s(e){let A=[];for(let t of e)(t===47||t===92)&&(t=10),A.push(t);return new Uint8Array(A)}var E={warn:"color: orange;",unrecognized:"color: red;",info:"color: aqua;",recognized:"color: lime",value:"color: yellow; background-color: black;"};function Ri(e,A){let t=0;return e.drumChannel&&(t+=5),A.isInRelease&&(t-=5),t+=A.velocity/25,t-=A.volumeEnvelope.state,A.isInRelease&&(t-=5),t-=A.volumeEnvelope.currentAttenuationDb/50,t}function Ao(e){let A=[];for(let n of this.midiAudioChannels)for(let s of n.voices)if(!s.finished){let r=Ri(n,s);A.push({channel:n,voice:s,priority:r})}A.sort((n,s)=>n.priority-s.priority);let t=A.slice(0,e);for(let{channel:n,voice:s}of t){let r=n.voices.indexOf(s);r>-1&&n.voices.splice(r,1)}}var Ht="gs";var je=`SPESSASYNTH_EMBEDDED_BANK_${Math.random()}`,gn=32767;var Ee=Ee!==void 0?Ee:{},eo=!1,to;Ee.isInitialized=new Promise(e=>to=e);var Gi=function(e){var A,t,n,s,r,i,a,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",I="",l=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");do s=o.indexOf(e.charAt(l++)),r=o.indexOf(e.charAt(l++)),i=o.indexOf(e.charAt(l++)),a=o.indexOf(e.charAt(l++)),A=s<<2|r>>4,t=(15&r)<<4|i>>2,n=(3&i)<<6|a,I+=String.fromCharCode(A),i!==64&&(I+=String.fromCharCode(t)),a!==64&&(I+=String.fromCharCode(n));while(l<e.length);return I};(function(){var e,A,t,n,s,r,i,a,o,I,l,c,h,B,u,f,S,G,k,F,M,N,C=C!==void 0?C:{};C.wasmBinary=Uint8Array.from(Gi("AGFzbQEAAAABpQEYYAJ/fwF/YAF/AGAAAX9gBH9/f38AYAAAYAN/f38Bf2ABfwF/YAJ/fwBgBn9/f39/fwF/YAR/f39/AX9gBX9/f39/AX9gB39/f39/f38Bf2AGf39/f39/AGAIf39/f39/f38Bf2AFf39/f38AYAd/f39/f39/AGADf39/AGABfwF9YAF9AX1gAnx/AXxgAnx/AX9gA3x8fwF8YAJ8fAF8YAF8AXwCngIPA2VudgZtZW1vcnkCAIACA2VudgV0YWJsZQFwAQQEA2Vudgl0YWJsZUJhc2UDfwADZW52DkRZTkFNSUNUT1BfUFRSA38AA2VudghTVEFDS1RPUAN/AANlbnYJU1RBQ0tfTUFYA38ABmdsb2JhbAhJbmZpbml0eQN8AANlbnYFYWJvcnQAAQNlbnYNZW5sYXJnZU1lbW9yeQACA2Vudg5nZXRUb3RhbE1lbW9yeQACA2VudhdhYm9ydE9uQ2Fubm90R3Jvd01lbW9yeQACA2Vudg5fX19hc3NlcnRfZmFpbAADA2VudgtfX19zZXRFcnJObwABA2VudgZfYWJvcnQABANlbnYWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwAFA3d2BgYCAQcHAQIBAQcBCAcFAAkGCQoHBgYGBgEFBgIBBgYKAAgLAAYGBgYGBgYBAAoMDAMGBQANCAoJAAwODA8OAQAGBgcEABAJEAERAAADBQwAAAMHBxIGAQAABwIFEwMOBw8HBgYQFAoVExYXFxcXFgQFBQYFAAYkB38BIwELfwEjAgt/ASMDC38BQQALfwFBAAt8ASMEC38BQQALB9MCFRBfX2dyb3dXYXNtTWVtb3J5AAgRX19fZXJybm9fbG9jYXRpb24AYwVfZnJlZQBfB19tYWxsb2MAXgdfbWVtY3B5AHkHX21lbXNldAB6BV9zYnJrAHsXX3N0Yl92b3JiaXNfanNfY2hhbm5lbHMAJhRfc3RiX3ZvcmJpc19qc19jbG9zZQAlFV9zdGJfdm9yYmlzX2pzX2RlY29kZQAoE19zdGJfdm9yYmlzX2pzX29wZW4AJBpfc3RiX3ZvcmJpc19qc19zYW1wbGVfcmF0ZQAnC2R5bkNhbGxfaWlpAHwTZXN0YWJsaXNoU3RhY2tTcGFjZQAMC2dldFRlbXBSZXQwAA8LcnVuUG9zdFNldHMAeAtzZXRUZW1wUmV0MAAOCHNldFRocmV3AA0Kc3RhY2tBbGxvYwAJDHN0YWNrUmVzdG9yZQALCXN0YWNrU2F2ZQAKCQoBACMACwR9VFl9Csb2A3YGACAAQAALGwEBfyMGIQEjBiAAaiQGIwZBD2pBcHEkBiABCwQAIwYLBgAgACQGCwoAIAAkBiABJAcLEAAjCEUEQCAAJAggASQJCwsGACAAJAsLBAAjCwsRACAABEAgABARIAAgABASCwvvBwEKfyAAQYADaiEHIAcoAgAhBQJAIAUEQCAAQfwBaiEEIAQoAgAhASABQQBKBEAgAEHwAGohCANAIAUgAkEYbGpBEGohCSAJKAIAIQEgAQRAIAgoAgAhAyAFIAJBGGxqQQ1qIQogCi0AACEGIAZB/wFxIQYgAyAGQbAQbGpBBGohAyADKAIAIQMgA0EASgRAQQAhAwNAIAEgA0ECdGohASABKAIAIQEgACABEBIgA0EBaiEDIAgoAgAhASAKLQAAIQYgBkH/AXEhBiABIAZBsBBsakEEaiEBIAEoAgAhBiAJKAIAIQEgAyAGSA0ACwsgACABEBILIAUgAkEYbGpBFGohASABKAIAIQEgACABEBIgAkEBaiECIAQoAgAhASACIAFODQMgBygCACEFDAAACwALCwsgAEHwAGohAyADKAIAIQEgAQRAIABB7ABqIQUgBSgCACECIAJBAEoEQEEAIQIDQAJAIAEgAkGwEGxqQQhqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQRxqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQSBqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQaQQaiEEIAQoAgAhBCAAIAQQEiABIAJBsBBsakGoEGohASABKAIAIQEgAUUhBCABQXxqIQFBACABIAQbIQEgACABEBIgAkEBaiECIAUoAgAhASACIAFODQAgAygCACEBDAELCyADKAIAIQELIAAgARASCyAAQfgBaiEBIAEoAgAhASAAIAEQEiAHKAIAIQEgACABEBIgAEGIA2ohAyADKAIAIQEgAQRAIABBhANqIQUgBSgCACECIAJBAEoEQEEAIQIDQCABIAJBKGxqQQRqIQEgASgCACEBIAAgARASIAJBAWohAiAFKAIAIQcgAygCACEBIAIgB0gNAAsLIAAgARASCyAAQQRqIQIgAigCACEBIAFBAEoEQEEAIQEDQCAAQZQGaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQZQHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQdgHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiABQQFqIQEgAigCACEDIAEgA0ghAyABQRBJIQUgBSADcQ0ACwtBACEBA0AgAEGgCGogAUECdGohAiACKAIAIQIgACACEBIgAEGoCGogAUECdGohAiACKAIAIQIgACACEBIgAEGwCGogAUECdGohAiACKAIAIQIgACACEBIgAEG4CGogAUECdGohAiACKAIAIQIgACACEBIgAEHACGogAUECdGohAiACKAIAIQIgACACEBIgAUEBaiEBIAFBAkcNAAsLGwAgAEHEAGohACAAKAIAIQAgAEUEQCABEF8LC3wBAX8gAEHUB2ohASABQQA2AgAgAEGAC2ohASABQQA2AgAgAEH4CmohASABQQA2AgAgAEGcCGohASABQQA2AgAgAEHVCmohASABQQA6AAAgAEH8CmohASABQQA2AgAgAEHUC2ohASABQQA2AgAgAEHYC2ohACAAQQA2AgAL8AQBB38jBiELIwZBEGokBiALQQhqIQcgC0EEaiEKIAshCCAAQSRqIQYgBiwAACEGAn8gBgR/IABBgAtqIQYgBigCACEGIAZBf0oEQCAFQQA2AgAgACABIAIQFgwCCyAAQRRqIQYgBiABNgIAIAEgAmohAiAAQRxqIQkgCSACNgIAIABB2ABqIQIgAkEANgIAIABBABAXIQkgCUUEQCAFQQA2AgBBAAwCCyAAIAcgCCAKEBghCSAJBEAgBygCACECIAgoAgAhCSAKKAIAIQggACACIAkgCBAaIQogByAKNgIAIABBBGohAiACKAIAIQggCEEASgRAQQAhAgNAIABBlAZqIAJBAnRqIQcgBygCACEHIAcgCUECdGohByAAQdQGaiACQQJ0aiEMIAwgBzYCACACQQFqIQIgAiAISA0ACwsgAwRAIAMgCDYCAAsgBSAKNgIAIABB1AZqIQAgBCAANgIAIAYoAgAhACAAIAFrDAILAkACQAJAAkACQCACKAIAIgNBIGsOBAECAgACCyACQQA2AgAgAEHUAGohAiAAEBkhAwJAIANBf0cEQANAIAIoAgAhAyADDQIgABAZIQMgA0F/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ACECIABBmAhqIQYgBigCACEHIAUgA2shCSAJIAdqIQkgAiAJSSEJIAIgB0khDSACIAdrIQJBACACIA0bIQIgAiADaiECIAIgBUohByAFIAIgBxshAiAJBEAgASACNgIAIAYoAgAhACAAIAJqIQAgBiAANgIAQQEMBgsLCyAAQfQKaiECIAIoAgAhAiADIB9rIQYgBiACaiEGIABBmAhqIQIgAiAGNgIAIAhBATYCAAwBBSAAQZgIaiECIAYNAQsMAQsgBCADayEDIAIoAgAhBCADIARqIQMgAiADNgIACyATKAIAIQIgAgRAIABByABqIQIgAigCACECIABB0ABqIQAgACgCACEAIAIgAEcEQEHTE0HEE0HkGkHnFBAECwsgASAFNgIAQQELIQAgHCQGIAALqAIBBX8gAEHoCmohBSAFKAIAIQICQCACQQBIBEBBACEABSACIAFIBEAgAUEYSgRAIABBGBAsIQIgAUFoaiEBIAAgARAsIQAgAEEYdCEAIAAgAmohACAADwsgAkUEQCAAQeQKaiECIAJBADYCAAsgAEHkCmohAwJAAkACQANAIAAQLiECIAJBf0YNASAFKAIAIQQgAiAEdCECIAMoAgAhBiAGIAJqIQIgAyACNgIAIAUgBEEIaiICNgIAIAIgAUgNAAwCAAsACyAFQX82AgBBACEADAQLIARBeEgEQEEAIQAMBAsLCyAAQeQKaiEEIAQoAgAhA0EBIAF0IQAgAEF/aiEAIAMgAHEhACADIAF2IQMgBCADNgIAIAIgAWshASAFIAE2AgALCyAAC40CAAJAIABBAEgEf0EABSAAQYCAAUgEQCAAQRBIBEAgAEGACGohACAALAAAIQAMAwsgAEGABEgEQCAAQQV2IQAgAEGACGohACAALAAAIQAgAEEFaiEABSAAQQp2IQAgAEGACGohACAALAAAIQAgAEEKaiEACwwCCyAAQYCAgAhIBH8gAEGAgCBIBH8gAEEPdiEAIABBgAhqIQAgACwAACEAIABBD2oFIABBFHYhACAAQYAIaiEAIAAsAAAhACAAQRRqCwUgAEGAgICAAkgEfyAAQRl2IQAgAEGACGohACAALAAAIQAgAEEZagUgAEEediEAIABBgAhqIQAgACwAACEAIABBHmoLCwshAAsgAAuiAQEDfyAAQdQKaiECIAIsAAAhAQJAAkAgAQ0AIABB3ApqIQEgASgCACEBIAEEQEF/IQMFIAAQLyEBIAEEQCACLAAAIQEgAQ0CQaEUQcQTQfYLQbUUEAQFQX8hAwsLDAELIAFBf2pBGHRBGHUhASACIAE6AAAgAEHsCmohASABKAIAIQIgAkEBaiECIAEgAjYCACAAEDAhACAAQf8BcSEDCyADC6wCAQd/IABB3ApqIQIgAigCACEBAkAgAUUEQCAAQdgKaiEEIAQoAgAhASABQX9GBEAgAEHQCGohASABKAIAIQEgAUF/aiEBIABB4ApqIQMgAyABNgIAIAAQMSEBIAFFBEAgAkEBNgIADAMLIABB0wpqIQEgASwAACEBIAFBAXEhASABBH8gBCgCAAUgAEEgEBUMAwshAQsgAUEBaiEHIAQgBzYCACAAQdQIaiABaiEDIAMsAAAhBiAGQf8BcSEDIAZBf0cEQCACQQE2AgAgAEHgCmohAiACIAE2AgALIABB0AhqIQEgASgCACEBIAcgAU4EQCAEQX82AgALIABB1ApqIQAgACwAACEBIAEEQEHFFEHEE0HoC0HaFBAEBSAAIAY6AAAgAyEFCwsLIAULUQEDfyAAQRRqIQMgAygCACEBIABBHGohAiACKAIAIQIgASACSQR/IAFBAWohACADIAA2AgAgASwAAAUgAEHUAGohACAAQQE2AgBBAAshACAACyABAX8gABAyIQEgAQR/IAAQMwUgAEEeEBVBAAshACAAC2ABAX8gABAwIQEgAUH/AXFBzwBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQAgAEH/AXFB0wBGIQAFQQAhAAsFQQAhAAsFQQAhAAsgAAvZAwEGfyAAEDAhAQJ/IAFB/wFxBH8gAEEfEBVBAAUgABAwIQEgAEHTCmohAiACIAE6AAAgABAjIQUgABAjIQIgABAjGiAAECMhASAAQcwIaiEDIAMgATYCACAAECMaIAAQMCEBIAFB/wFxIQEgAEHQCGohAyADIAE2AgAgAEHUCGohBCAAIAQgARAiIQEgAUUEQCAAQQoQFUEADAILIABB8ApqIQQgBEF+NgIAIAIgBXEhAQJAIAFBf0cEQCADKAIAIQEgAUEASgRAA0ACQCABQX9qIQIgAEHUCGogAmohBiAGLAAAIQYgBkF/Rw0AIAFBAUwNBCACIQEMAQsLIAQgAjYCACAAQfQKaiEBIAEgBTYCAAsLCyAAQdUKaiEBIAEsAAAhASABBEAgAygCACEDIANBAEoEf0EAIQJBACEBA0AgAEHUCGogAWohBCAELQAAIQQgBEH/AXEhBCACIARqIQIgAUEBaiEBIAEgA0gNAAsgAkEbagVBGwshASAAQShqIQIgAigCACECIAEgA2ohASABIAJqIQEgAEEsaiEDIAMgAjYCACAAQTBqIQIgAiABNgIAIABBNGohASABIAU2AgALIABB2ApqIQAgAEEANgIAQQELCyEAIAALowEBB38gAEHoCmohAyADKAIAIQECQCABQRlIBEAgAEHkCmohBCABRQRAIARBADYCAAsgAEHUCmohBSAAQdwKaiEGA0AgBigCACEBIAEEQCAFLAAAIQEgAUUNAwsgABAuIQIgAkF/Rg0CIAMoAgAhASACIAF0IQIgBCgCACEHIAcgAmohAiAEIAI2AgAgAUEIaiECIAMgAjYCACABQRFIDQALCwsLrQUBCX8gABA0IAFBIGohAiACKAIAIQUCQAJAIAVFIgNFDQAgAUGkEGohAiACKAIAIQIgAg0AQX8hAQwBCyABQQRqIQIgAigCACECAkACQCACQQhKBEAgAUGkEGohAyADKAIAIQMgAw0BBSADDQELDAELIABB5ApqIQggCCgCACEJIAkQOiEHIAFBrBBqIQIgAigCACECIAJBAUoEQCABQaQQaigCACEKQQAhAwNAIAJBAXYhBSAFIANqIQQgCiAEQQJ0aiEGIAYoAgAhBiAGIAdLIQYgAiAFayECIAMgBCAGGyEDIAUgAiAGGyECIAJBAUoNAAsFQQAhAwsgAUEXaiECIAIsAAAhAiACRQRAIAFBqBBqIQIgAigCACECIAIgA0ECdGohAiACKAIAIQMLIAFBCGohASABKAIAIQEgASADaiEBIAEtAAAhASABQf8BcSEBIABB6ApqIQIgAigCACEAIAAgAUgEf0EAIQBBfwUgACABayEAIAkgAXYhASAIIAE2AgAgAwshASACIAA2AgAMAQsgAUEXaiEDIAMsAAAhAyADBEBBgRVBxBNB6gxBjBUQBAsCQCACQQBKBEAgASgCCCEIIABB5ApqIQlBACEBA0ACQCAIIAFqIQMgAywAACEEIARB/wFxIQMgBEF/RwRAIAUgAUECdGoh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IwZBEGokBiACIQECfCAAvUIgiKdB/////wdxIgNB/MOk/wNJBHwgA0GewZryA0kEfEQAAAAAAADwPwUgAEQAAAAAAAAAABByCwUgACAAoSADQf//v/8HSw0BGgJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwgQcgwECyABKwMAIAErAwhBARBwmgwDCyABKwMAIAErAwgQcpoMAgsgASsDACABKwMIQQEQcAsLIQAgAiQGIAALywEBA38jBiECIwZBEGokBiACIQECQCAAvUIgiKdB/////wdxIgNB/MOk/wNJBEAgA0GAgMDyA08EQCAARAAAAAAAAAAAQQAQcCEACwUgA0H//7//B0sEQCAAIAChIQAMAgsCQAJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwhBARBwIQAMBQsgASsDACABKwMIEHIhAAwECyABKwMAIAErAwhBARBwmiEADAMLIAErAwAgASsDCBBymiEACwsLIAIkBiAAC5sDAwJ/AX4CfCAAvSIDQj+IpyEBAnwCfwJAIANCIIinQf////8HcSICQarGmIQESwR8IANC////////////AINCgICAgICAgPj/AFYEQCAADwsgAETvOfr+Qi6GQGQEQCAARAAAAAAAAOB/og8FIABE0rx63SsjhsBjIABEUTAt1RBJh8BjcUUNAkQAAAAAAAAAACIADwsABSACQcLc2P4DSwRAIAJBscXC/wNLDQIgAUEBcyABawwDCyACQYCAwPEDSwR8QQAhASAABSAARAAAAAAAAPA/oA8LCwwCCyAARP6CK2VHFfc/oiABQQN0QYATaisDAKCqCyEBIAAgAbciBEQAAOD+Qi7mP6KhIgAgBER2PHk17znqPaIiBaELIQQgACAEIAQgBCAEoiIAIAAgACAAIABE0KS+cmk3Zj6iRPFr0sVBvbu+oKJELN4lr2pWET+gokSTvb4WbMFmv6CiRD5VVVVVVcU/oKKhIgCiRAAAAAAAAABAIAChoyAFoaBEAAAAAAAA8D+gIQAgAUUEQCAADwsgACABEGULnwMDAn8BfgV8IAC9IgNCIIinIQECfyADQgBTIgIgAUGAgMAASXIEfyADQv///////////wCDQgBRBEBEAAAAAAAA8L8gACAAoqMPCyACRQRAIABEAAAAAAAAUEOi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mgDjqR0AXmGRAAgb5gCFmWUAoBRfAI1AaACA2P8AJ3NNAAYGMQDKVhUAyahzAHviYABrjMAAQcMSC11A+yH5PwAAAAAtRHQ+AAAAgJhG+DwAAABgUcx4OwAAAICDG/A5AAAAQCAlejgAAACAIoLjNgAAAAAd82k1AAAAAAAA4D8AAAAAAADgvwAAAAAAAPA/AAAAAAAA+D8AQagTCwgG0M9D6/1MPgBBuxMLigZAA7jiP09nZ1MuL3N0Yl92b3JiaXMuYwBmLT5hbGxvYy5hbGxvY19idWZmZXJfbGVuZ3RoX2luX2J5dGVzID09IGYtPnRlbXBfb2Zmc2V0AHZvcmJpc19kZWNvZGVfaW5pdGlhbABmLT5ieXRlc19pbl9zZWcgPiAwAGdldDhfcGFja2V0X3JhdwBmLT5ieXRlc19pbl9zZWcgPT0gMABuZXh0X3NlZ21lbnQAdm9yYmlzX2RlY29kZV9wYWNrZXRfcmVzdAAhYy0+c3BhcnNlAGNvZGVib29rX2RlY29kZV9zY2FsYXJfcmF3ACFjLT5zcGFyc2UgfHwgeiA8IGMtPnNvcnRlZF9lbnRyaWVzAGNvZGVib29rX2RlY29kZV9kZWludGVybGVhdmVfcmVwZWF0AHogPCBjLT5zb3J0ZWRfZW50cmllcwBjb2RlYm9va19kZWNvZGVfc3RhcnQAKG4gJiAzKSA9PSAwAGltZGN0X3N0ZXAzX2l0ZXIwX2xvb3AAMABnZXRfd2luZG93AGYtPnRlbXBfb2Zmc2V0ID09IGYtPmFsbG9jLmFsbG9jX2J1ZmZlcl9sZW5ndGhfaW5fYnl0ZXMAc3RhcnRfZGVjb2RlcgB2b3JiaXNjLT5zb3J0ZWRfZW50cmllcyA9PSAwAGNvbXB1dGVfY29kZXdvcmRzAHogPj0gMCAmJiB6IDwgMzIAbGVuW2ldID49IDAgJiYgbGVuW2ldIDwgMzIAYXZhaWxhYmxlW3ldID09IDAAayA9PSBjLT5zb3J0ZWRfZW50cmllcwBjb21wdXRlX3NvcnRlZF9odWZmbWFuAGMtPnNvcnRlZF9jb2Rld29yZHNbeF0gPT0gY29kZQBsZW4gIT0gTk9fQ09ERQBpbmNsdWRlX2luX3NvcnQAcG93KChmbG9hdCkgcisxLCBkaW0pID4gZW50cmllcwBsb29rdXAxX3ZhbHVlcwAoaW50KSBmbG9vcihwb3coKGZsb2F0KSByLCBkaW0pKSA8PSBlbnRyaWVzAOoPBG5hbWUB4g9+AAVhYm9ydAENZW5sYXJnZU1lbW9yeQIOZ2V0VG90YWxNZW1vcnkDF2Fib3J0T25DYW5ub3RHcm93TWVtb3J5BA5fX19hc3NlcnRfZmFpbAULX19fc2V0RXJyTm8GBl9hYm9ydAcWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwgQX19ncm93V2FzbU1lbW9yeQkKc3RhY2tBbGxvYwoJc3RhY2tTYXZlCwxzdGFja1Jlc3RvcmUME2VzdGFibGlzaFN0YWNrU3BhY2UNCHNldFRocmV3DgtzZXRUZW1wUmV0MA8LZ2V0VGVtcFJldDAQEV9zdGJfdm9yYmlzX2Nsb3NlEQ5fdm9yYmlzX2RlaW5pdBILX3NldHVwX2ZyZWUTGl9zdGJfdm9yYmlzX2ZsdXNoX3B1c2hkYXRhFCFfc3RiX3ZvcmJpc19kZWNvZGVfZnJhbWVfcHVzaGRhdGEVBl9lcnJvchYgX3ZvcmJpc19zZWFyY2hfZm9yX3BhZ2VfcHVzaGRhdGEXGF9pc193aG9sZV9wYWNrZXRfcHJlc2VudBgVX3ZvcmJpc19kZWNvZGVfcGFja2V0GQxfZ2V0OF9wYWNrZXQaFF92b3JiaXNfZmluaXNoX2ZyYW1lGxlfc3RiX3ZvcmJpc19vcGVuX3B1c2hkYXRhHAxfdm9yYmlzX2luaXQdDl9zdGFydF9kZWNvZGVyHg1fdm9yYmlzX2FsbG9jHxtfc3RiX3ZvcmJpc19nZXRfZmlsZV9vZmZzZXQgE19tYXliZV9zdGFydF9wYWNrZXQhDV9mbHVzaF9wYWNrZXQiBV9nZXRuIwZfZ2V0MzIkE19zdGJfdm9yYmlzX2pzX29wZW4lFF9zdGJfdm9yYmlzX2pzX2Nsb3NlJhdfc3RiX3ZvcmJpc19qc19jaGFubmVscycaX3N0Yl92b3JiaXNfanNfc2FtcGxlX3JhdGUoFV9zdGJfdm9yYmlzX2pzX2RlY29kZSkNX2NyYzMyX3VwZGF0ZSoWX3ZvcmJpc19kZWNvZGVfaW5pdGlhbCsaX3ZvcmJpc19kZWNvZGVfcGFja2V0X3Jlc3QsCV9nZXRfYml0cy0FX2lsb2cuEF9nZXQ4X3BhY2tldF9yYXcvDV9uZXh0X3NlZ21lbnQwBV9nZXQ4MQtfc3RhcnRfcGFnZTIQX2NhcHR1cmVfcGF0dGVybjMdX3N0YXJ0X3BhZ2Vfbm9fY2FwdHVyZXBhdHRlcm40DV9wcmVwX2h1ZmZtYW41G19jb2RlYm9va19kZWNvZGVfc2NhbGFyX3JhdzYOX3ByZWRpY3RfcG9pbnQ3D19kZWNvZGVfcmVzaWR1ZTgJX2RvX2Zsb29yOQ1faW52ZXJzZV9tZGN0OgxfYml0X3JldmVyc2U7EV9tYWtlX2Jsb2NrX2FycmF5PBJfc2V0dXBfdGVtcF9tYWxsb2M9JF9jb2RlYm9va19kZWNvZGVfZGVpbnRlcmxlYXZlX3JlcGVhdD4PX3Jlc2lkdWVfZGVjb2RlPxVfY29kZWJvb2tfZGVjb2RlX3N0ZXBAEF9jb2RlYm9va19kZWNvZGVBFl9jb2RlYm9va19kZWNvZGVfc3RhcnRCCl9kcmF3X2xpbmVDF19pbWRjdF9zdGVwM19pdGVyMF9sb29wRBlfaW1kY3Rfc3RlcDNfaW5uZXJfcl9sb29wRRlfaW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wRh9faW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wX2xkNjU0RwhfaXRlcl81NEgLX2dldF93aW5kb3dJEF92b3JiaXNfdmFsaWRhdGVKDV9zdGFydF9wYWNrZXRLBV9za2lwTAtfY3JjMzJfaW5pdE0NX3NldHVwX21hbGxvY04QX3NldHVwX3RlbXBfZnJlZU8SX2NvbXB1dGVfY29kZXdvcmRzUBdfY29tcHV0ZV9zb3J0ZWRfaHVmZm1hblEcX2NvbXB1dGVfYWNjZWxlcmF0ZWRfaHVmZm1hblIPX2Zsb2F0MzJfdW5wYWNrUw9fbG9va3VwMV92YWx1ZXNUDl9wb2ludF9jb21wYXJlVQpfbmVpZ2hib3JzVg9faW5pdF9ibG9ja3NpemVXCl9hZGRfZW50cnlYEF9pbmNsdWRlX2luX3NvcnRZD191aW50MzJfY29tcGFyZVoYX2NvbXB1dGVfdHdpZGRsZV9mYWN0b3JzWw9fY29tcHV0ZV93aW5kb3dcE19jb21wdXRlX2JpdHJldmVyc2VdB19zcXVhcmVeB19tYWxsb2NfBV9mcmVlYAhfcmVhbGxvY2ESX3RyeV9yZWFsbG9jX2NodW5rYg5fZGlzcG9zZV9jaHVua2MRX19fZXJybm9fbG9jYXRpb25kB19tZW1jbXBlB19zY2FsYm5mBl9xc29ydGcFX3NpZnRoBF9zaHJpCF90cmlua2xlagRfc2hsawVfcG50emwIX2FfY3R6X2xtBl9jeWNsZW4LX19fcmVtX3BpbzJvEV9fX3JlbV9waW8yX2xhcmdlcAZfX19zaW5xBl9sZGV4cHIGX19fY29zcwRfY29zdARfc2ludQRfZXhwdgRfbG9ndwRfcG93eAtydW5Qb3N0U2V0c3kHX21lbWNweXoHX21lbXNldHsFX3Nicmt8C2R5bkNhbGxfaWlpfQJiMA=="),function(d){return d.charCodeAt(0)});var C=C!==void 0?C:{},j={};for(e in C)C.hasOwnProperty(e)&&(j[e]=C[e]);C.arguments=[],C.thisProgram="./this.program",C.quit=function(d,Q){throw Q},C.preRun=[],C.postRun=[];var T=!1,Y=!1,iA=!1,IA=!1;T=typeof window=="object",Y=typeof importScripts=="function",iA=typeof process=="object"&&typeof Ws=="function"&&!T&&!Y,IA=!T&&!iA&&!Y;var oA="";function gA(d){return C.locateFile?C.locateFile(d,oA):oA+d}iA?(oA=__dirname+"/",C.read=function(Q,m){var w;return A||(A=void 0),t||(t=void 0),Q=t.normalize(Q),w=A.readFileSync(Q),m?w:w.toString()},C.readBinary=function(Q){var m=C.read(Q,!0);return m.buffer||(m=new Uint8Array(m)),jA(m.buffer),m},process.argv.length>1&&(C.thisProgram=process.argv[1].replace(/\\/g,"/")),C.arguments=process.argv.slice(2),typeof module<"u",process.on("uncaughtException",function(d){if(!(d instanceof Tt))throw d}),process.on("unhandledRejection",function(d,Q){process.exit(1)}),C.quit=function(d){process.exit(d)},C.inspect=function(){return"[Emscripten Module object]"}):IA?(typeof read<"u"&&(C.read=function(Q){return read(Q)}),C.readBinary=function(Q){var m;return typeof readbuffer=="function"?new Uint8Array(readbuffer(Q)):(jA(typeof(m=read(Q,"binary"))=="object"),m)},typeof scriptArgs<"u"?C.arguments=scriptArgs:typeof arguments<"u"&&(C.arguments=arguments),typeof quit=="function"&&(C.quit=function(d){quit(d)})):(T||Y)&&(T?document.currentScript&&(oA=document.currentScript.src):oA=self.location.href,oA=oA.indexOf("blob:")!==0?oA.split("/").slice(0,-1).join("/")+"/":"",C.read=function(Q){var m=new XMLHttpRequest;return m.open("GET",Q,!1),m.send(null),m.responseText},Y&&(C.readBinary=function(Q){var m=new XMLHttpRequest;return m.open("GET",Q,!1),m.responseType="arraybuffer",m.send(null),new Uint8Array(m.response)}),C.readAsync=function(Q,m,w){var K=new XMLHttpRequest;K.open("GET",Q,!0),K.responseType="arraybuffer",K.onload=function(){if(K.status==200||K.status==0&&K.response){m(K.response);return}w()},K.onerror=w,K.send(null)},C.setWindowTitle=function(d){document.title=d});var uA=C.print||(typeof console<"u"?console.log.bind(console):typeof print<"u"?print:null),cA=C.printErr||(typeof printErr<"u"?printErr:typeof console<"u"&&console.warn.bind(console)||uA);for(e in j)j.hasOwnProperty(e)&&(C[e]=j[e]);function W(d){var Q=B;return B=B+d+15&-16,Q}function L(d){var Q=o[F>>2],m=Q+d+15&-16;return o[F>>2]=m,m>=xA&&!Nt()?(o[F>>2]=Q,0):Q}function D(d,Q){return Q||(Q=16),d=Math.ceil(d/Q)*Q}function b(d){switch(d){case"i1":case"i8":return 1;case"i16":return 2;case"i32":case"float":return 4;case"i64":case"double":return 8;default:if(d[d.length-1]==="*")return 4;if(d[0]!=="i")return 0;var Q=parseInt(d.substr(1));return jA(Q%8==0),Q/8}}function _(d){_.shown||(_.shown={}),_.shown[d]||(_.shown[d]=1,cA(d))}j=void 0;var aA={"f64-rem":function(d,Q){return d%Q},debugger:function(){}},qA=[];function Ce(d,Q){for(var m=0,w=m;w<m+0;w++)if(!qA[w])return qA[w]=d,1+w;throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS."}function fe(d){qA[d-1]=null}var ue={};function gt(d,Q){if(d){jA(Q),ue[Q]||(ue[Q]={});var m=ue[Q];return m[d]||(Q.length===1?m[d]=function(){return rA(Q,d)}:Q.length===2?m[d]=function(K){return rA(Q,d,[K])}:m[d]=function(){return rA(Q,d,Array.prototype.slice.call(arguments))}),m[d]}}function De(d,Q,m){return m?+(d>>>0)+4294967296*+(Q>>>0):+(d>>>0)+4294967296*+(0|Q)}function rA(d,Q,m){return m&&m.length?C["dynCall_"+d].apply(null,[Q].concat(m)):C["dynCall_"+d].call(null,Q)}var lA=0,me=0;function jA(d,Q){d||Re("Assertion failed: "+Q)}function Ue(d){var Q=C["_"+d];return jA(Q,"Cannot call unknown function "+d+", make sure it is exported"),Q}var ve={stackSave:function(){jn()},stackRestore:function(){zn()},arrayToC:function(d){var Q,m,w=on(d.length);return Q=d,m=w,s.set(Q,m),w},stringToC:function(d){var Q=0;if(d!=null&&d!==0){var m=(d.length<<2)+1;Q=on(m),Mt(d,Q,m)}return Q}},Rt={string:ve.stringToC,array:ve.arrayToC};function It(d,Q,m,w,K){var sA=Ue(d),EA=[],z=0;if(w)for(var LA=0;LA<w.length;LA++){var SA=Rt[m[LA]];SA?(z===0&&(z=jn()),EA[LA]=SA(w[LA])):EA[LA]=w[LA]}var DA,BA=sA.apply(null,EA);return BA=(DA=BA,Q==="string"?He(DA):Q==="boolean"?!!DA:DA),z!==0&&zn(z),BA}function Gt(d,Q,m,w){switch((m=m||"i8").charAt(m.length-1)==="*"&&(m="i32"),m){case"i1":case"i8":s[d>>0]=Q;break;case"i16":i[d>>1]=Q;break;case"i32":o[d>>2]=Q;break;case"i64":tempI64=[Q>>>0,+yi(tempDouble=Q)>=1?tempDouble>0?(0|Di(+Ks(tempDouble/4294967296),4294967295))>>>0:~~+Si((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0],o[d>>2]=tempI64[0],o[d+4>>2]=tempI64[1];break;case"float":l[d>>2]=Q;break;case"double":c[d>>3]=Q;break;default:Re("invalid type for setValue: "+m)}}function Pn(d,Q,m){switch((Q=Q||"i8").charAt(Q.length-1)==="*"&&(Q="i32"),Q){case"i1":case"i8":return s[d>>0];case"i16":return i[d>>1];case"i32":case"i64":return o[d>>2];case"float":return l[d>>2];case"double":return c[d>>3];default:Re("invalid type for getValue: "+Q)}return null}function Kn(d,Q,m,w){typeof d=="number"?(sA=!0,EA=d):(sA=!1,EA=d.length);var K=typeof Q=="string"?Q:null;if(z=m==4?w:[typeof sn=="function"?sn:W,on,W,L][m===void 0?2:m](Math.max(EA,K?1:Q.length)),sA){for(w=z,jA((3&z)==0),LA=z+(-4&EA);w<LA;w+=4)o[w>>2]=0;for(LA=z+EA;w<LA;)s[w++>>0]=0;return z}if(K==="i8")return d.subarray||d.slice?r.set(d,z):r.set(new Uint8Array(d),z),z;for(var sA,EA,z,LA,SA,DA,BA,nA=0;nA<EA;){var XA=d[nA];if((SA=K||Q[nA])===0){nA++;continue}SA=="i64"&&(SA="i32"),Gt(z+nA,XA,SA),BA!==SA&&(DA=b(SA),BA=SA),nA+=DA}return z}function Et(d){return u?Wn?sn(d):L(d):W(d)}function He(d,Q){if(Q===0||!d)return"";for(var m,w,K,sA=0,EA=0;sA|=w=r[d+EA>>0],(w!=0||Q)&&(EA++,!Q||EA!=Q););Q||(Q=EA);var z="";if(sA<128){for(;Q>0;)K=String.fromCharCode.apply(String,r.subarray(d,d+Math.min(Q,1024))),z=z?z+K:K,d+=1024,Q-=1024;return z}return m=d,function(SA,DA){for(var BA=DA;SA[BA];)++BA;if(BA-DA>16&&SA.subarray&&jt)return jt.decode(SA.subarray(DA,BA));for(var nA,XA,re,ie,ae,ze,ge="";;){if(!(nA=SA[DA++]))return ge;if(!(128&nA)){ge+=String.fromCharCode(nA);continue}if(XA=63&SA[DA++],(224&nA)==192){ge+=String.fromCharCode((31&nA)<<6|XA);continue}if(re=63&SA[DA++],(240&nA)==224?nA=(15&nA)<<12|XA<<6|re:(ie=63&SA[DA++],(248&nA)==240?nA=(7&nA)<<18|XA<<12|re<<6|ie:(ae=63&SA[DA++],nA=(252&nA)==248?(3&nA)<<24|XA<<18|re<<12|ie<<6|ae:(1&nA)<<30|XA<<24|re<<18|ie<<12|ae<<6|(ze=63&SA[DA++]))),nA<65536)ge+=String.fromCharCode(nA);else{var Ut=nA-65536;ge+=String.fromCharCode(55296|Ut>>10,56320|1023&Ut)}}}(r,m)}function $A(d){for(var Q="";;){var m=s[d++>>0];if(!m)return Q;Q+=String.fromCharCode(m)}}function qn(d,Q){return function(w,K,sA){for(var EA=0;EA<w.length;++EA)s[K++>>0]=w.charCodeAt(EA);sA||(s[K>>0]=0)}(d,Q,!1)}var jt=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function ct(d,Q,m,w){if(!(w>0))return 0;for(var K=m,sA=m+w-1,EA=0;EA<d.length;++EA){var z=d.charCodeAt(EA);if(z>=55296&&z<=57343&&(z=65536+((1023&z)<<10)|1023&d.charCodeAt(++EA)),z<=127){if(m>=sA)break;Q[m++]=z}else if(z<=2047){if(m+1>=sA)break;Q[m++]=192|z>>6,Q[m++]=128|63&z}else if(z<=65535){if(m+2>=sA)break;Q[m++]=224|z>>12,Q[m++]=128|z>>6&63,Q[m++]=128|63&z}else if(z<=2097151){if(m+3>=sA)break;Q[m++]=240|z>>18,Q[m++]=128|z>>12&63,Q[m++]=128|z>>6&63,Q[m++]=128|63&z}else if(z<=67108863){if(m+4>=sA)break;Q[m++]=248|z>>24,Q[m++]=128|z>>18&63,Q[m++]=128|z>>12&63,Q[m++]=128|z>>6&63,Q[m++]=128|63&z}else{if(m+5>=sA)break;Q[m++]=252|z>>30,Q[m++]=128|z>>24&63,Q[m++]=128|z>>18&63,Q[m++]=128|z>>12&63,Q[m++]=128|z>>6&63,Q[m++]=128|63&z}}return Q[m]=0,m-K}function Mt(d,Q,m){return ct(d,r,Q,m)}function VA(d){for(var Q=0,m=0;m<d.length;++m){var w=d.charCodeAt(m);w>=55296&&w<=57343&&(w=65536+((1023&w)<<10)|1023&d.charCodeAt(++m)),w<=127?++Q:w<=2047?Q+=2:w<=65535?Q+=3:w<=2097151?Q+=4:w<=67108863?Q+=5:Q+=6}return Q}var ke=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function xt(d){for(var Q=d,m=Q>>1;i[m];)++m;if((Q=m<<1)-d>32&&ke)return ke.decode(r.subarray(d,Q));for(var w=0,K="";;){var sA=i[d+2*w>>1];if(sA==0)return K;++w,K+=String.fromCharCode(sA)}}function Vn(d,Q,m){if(m===void 0&&(m=2147483647),m<2)return 0;for(var w=Q,K=(m-=2)<2*d.length?m/2:d.length,sA=0;sA<K;++sA){var EA=d.charCodeAt(sA);i[Q>>1]=EA,Q+=2}return i[Q>>1]=0,Q-w}function Fe(d){return 2*d.length}function $t(d){for(var Q=0,m="";;){var w=o[d+4*Q>>2];if(w==0)return m;if(++Q,w>=65536){var K=w-65536;m+=String.fromCharCode(55296|K>>10,56320|1023&K)}else m+=String.fromCharCode(w)}}function An(d,Q,m){if(m===void 0&&(m=2147483647),m<4)return 0;for(var w=Q,K=w+m-4,sA=0;sA<d.length;++sA){var EA=d.charCodeAt(sA);if(EA>=55296&&EA<=57343&&(EA=65536+((1023&EA)<<10)|1023&d.charCodeAt(++sA)),o[Q>>2]=EA,(Q+=4)+4>K)break}return o[Q>>2]=0,Q-w}function Hs(d){for(var Q=0,m=0;m<d.length;++m){var w=d.charCodeAt(m);w>=55296&&w<=57343&&++m,Q+=4}return Q}function Ys(d){var Q=VA(d)+1,m=sn(Q);return m&&ct(d,s,m,Q),m}function en(d){var Q=VA(d)+1,m=on(Q);return ct(d,s,m,Q),m}function Xe(d){return d}function Zn(){var d,Q=function(){var w=Error();if(!w.stack){try{throw Error(0)}catch(K){w=K}if(!w.stack)return"(no stack trace available)"}return w.stack.toString()}();return C.extraStackTrace&&(Q+=`
|
|
2
|
+
`+C.extraStackTrace()),(d=Q).replace(/__Z[\w\d_]+/g,function(m){var w,K=w=m;return m===K?m:m+" ["+K+"]"})}function we(d,Q){return d%Q>0&&(d+=Q-d%Q),d}function Ct(d){C.buffer=n=d}function We(){C.HEAP8=s=new Int8Array(n),C.HEAP16=i=new Int16Array(n),C.HEAP32=o=new Int32Array(n),C.HEAPU8=r=new Uint8Array(n),C.HEAPU16=a=new Uint16Array(n),C.HEAPU32=I=new Uint32Array(n),C.HEAPF32=l=new Float32Array(n),C.HEAPF64=c=new Float64Array(n)}function Nt(){var d=C.usingWasm?65536:16777216,Q=2147483648-d;if(o[F>>2]>Q)return!1;var m=xA;for(xA=Math.max(xA,16777216);xA<o[F>>2];)xA=xA<=536870912?we(2*xA,d):Math.min(we((3*xA+2147483648)/4,d),Q);var w=C.reallocBuffer(xA);return w&&w.byteLength==xA?(Ct(w),We(),!0):(xA=m,!1)}h=B=f=S=G=k=F=0,u=!1,C.reallocBuffer||(C.reallocBuffer=function(d){try{if(ArrayBuffer.transfer)Q=ArrayBuffer.transfer(n,d);else{var Q,m=s;Q=new ArrayBuffer(d),new Int8Array(Q).set(m)}}catch{return!1}return!!ki(Q)&&Q});try{(M=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get))(new ArrayBuffer(4))}catch{M=function(Q){return Q.byteLength}}var ht=C.TOTAL_STACK||5242880,xA=C.TOTAL_MEMORY||16777216;function tn(){return xA}function Ye(d){for(;d.length>0;){var Q=d.shift();if(typeof Q=="function"){Q();continue}var m=Q.func;typeof m=="number"?Q.arg===void 0?C.dynCall_v(m):C.dynCall_vi(m,Q.arg):m(Q.arg===void 0?null:Q.arg)}}xA<ht&&cA("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+xA+"! (TOTAL_STACK="+ht+")"),C.buffer?n=C.buffer:(typeof WebAssembly=="object"&&typeof WebAssembly.Memory=="function"?(C.wasmMemory=new WebAssembly.Memory({initial:xA/65536}),n=C.wasmMemory.buffer):n=new ArrayBuffer(xA),C.buffer=n),We();var bt=[],Xn=[],Os=[],Js=[],Ps=[],Wn=!1,ui=!1;function mi(d){bt.unshift(d)}function ea(d){Xn.unshift(d)}function ta(d){Os.unshift(d)}function na(d){Js.unshift(d)}function pi(d){Ps.unshift(d)}function sa(d,Q,m){var w,K;_("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!"),m&&(w=s[K=Q+VA(d)]),Mt(d,Q,1/0),m&&(s[K]=w)}function oa(d,Q,m){return d>=0?d:Q<=32?2*Math.abs(1<<Q-1)+d:Math.pow(2,Q)+d}function ra(d,Q,m){if(d<=0)return d;var w=Q<=32?Math.abs(1<<Q-1):Math.pow(2,Q-1);return d>=w&&(Q<=32||d>w)&&(d=-2*w+d),d}var yi=Math.abs,Si=Math.ceil,Ks=Math.floor,Di=Math.min,_e=0,_n=null,Lt=null;function ia(d){return d}C.preloadedImages={},C.preloadedAudios={};var qs="data:application/octet-stream;base64,";function nn(d){return String.prototype.startsWith?d.startsWith(qs):d.indexOf(qs)===0}(function(){var Q="main.wast",m="main.wasm",w="main.temp.asm.js";nn(Q)||(Q=gA(Q)),nn(m)||(m=gA(m)),nn(w)||(w=gA(w));var K={global:null,env:null,asm2wasm:aA,parent:C},sA=null;function EA(BA){return BA}function z(){try{if(C.wasmBinary)return new Uint8Array(C.wasmBinary);if(C.readBinary)return C.readBinary(m);throw"both async and sync fetching of the wasm failed"}catch(BA){Re(BA)}}C.asmPreload=C.asm;var LA=C.reallocBuffer,SA=function(BA){BA=we(BA,C.usingWasm?65536:16777216);var nA=C.buffer.byteLength;if(C.usingWasm)try{var XA=C.wasmMemory.grow((BA-nA)/65536);return XA!==-1?C.buffer=C.wasmMemory.buffer:null}catch{return null}};C.reallocBuffer=function(BA){return DA==="asmjs"?LA(BA):SA(BA)};var DA="";C.asm=function(BA,nA,XA){var re;if(!(nA=re=nA).table){var ie,ae=C.wasmTableSize;ae===void 0&&(ae=1024);var ze=C.wasmMaxTableSize;typeof WebAssembly=="object"&&typeof WebAssembly.Table=="function"?ze!==void 0?nA.table=new WebAssembly.Table({initial:ae,maximum:ze,element:"anyfunc"}):nA.table=new WebAssembly.Table({initial:ae,element:"anyfunc"}):nA.table=Array(ae),C.wasmTable=nA.table}return nA.memoryBase||(nA.memoryBase=C.STATIC_BASE),nA.tableBase||(nA.tableBase=0),ie=function(Ut,lt,As){if(typeof WebAssembly!="object")return cA("no native wasm support detected"),!1;if(!(C.wasmMemory instanceof WebAssembly.Memory))return cA("no native wasm Memory in use"),!1;function rn(pe,ye){if((sA=pe.exports).memory){var vt,es,Xs;vt=sA.memory,es=C.buffer,vt.byteLength<es.byteLength&&cA("the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here"),Xs=new Int8Array(es),new Int8Array(vt).set(Xs),Ct(vt),We()}C.asm=sA,C.usingWasm=!0,function(ha){if(_e--,C.monitorRunDependencies&&C.monitorRunDependencies(_e),_e==0&&(_n!==null&&(clearInterval(_n),_n=null),Lt)){var Fi=Lt;Lt=null,Fi()}}("wasm-instantiate")}if(lt.memory=C.wasmMemory,K.global={NaN:NaN,Infinity:1/0},K["global.Math"]=Math,K.env=lt,_e++,C.monitorRunDependencies&&C.monitorRunDependencies(_e),C.instantiateWasm)try{return C.instantiateWasm(K,rn)}catch(pe){return cA("Module.instantiateWasm callback failed with error: "+pe),!1}function Bt(pe){rn(pe.instance,pe.module)}function Zs(pe){(!C.wasmBinary&&(T||Y)&&typeof fetch=="function"?fetch(m,{credentials:"same-origin"}).then(function(ye){if(!ye.ok)throw"failed to load wasm binary file at '"+m+"'";return ye.arrayBuffer()}).catch(function(){return z()}):new Promise(function(ye,vt){ye(z())})).then(function(ye){return WebAssembly.instantiate(ye,K)}).then(pe).catch(function(ye){cA("failed to asynchronously prepare wasm: "+ye),Re(ye)})}return C.wasmBinary||typeof WebAssembly.instantiateStreaming!="function"||nn(m)||typeof fetch!="function"?Zs(Bt):WebAssembly.instantiateStreaming(fetch(m,{credentials:"same-origin"}),K).then(Bt).catch(function(pe){cA("wasm streaming compile failed: "+pe),cA("falling back to ArrayBuffer instantiation"),Zs(Bt)}),{}}(BA,nA,XA),jA(ie,"no binaryen method succeeded."),ie},C.asm})(),B=(h=1024)+4816,Xn.push(),C.STATIC_BASE=h,C.STATIC_BUMP=4816;var Ae=B;function aa(d){s[Ae]=s[d],s[Ae+1]=s[d+1],s[Ae+2]=s[d+2],s[Ae+3]=s[d+3]}function ga(d){s[Ae]=s[d],s[Ae+1]=s[d+1],s[Ae+2]=s[d+2],s[Ae+3]=s[d+3],s[Ae+4]=s[d+4],s[Ae+5]=s[d+5],s[Ae+6]=s[d+6],s[Ae+7]=s[d+7]}function Ia(d,Q,m){var w=m>0?m:VA(d)+1,K=Array(w),sA=ct(d,K,0,K.length);return Q&&(K.length=sA),K}function Ea(d){for(var Q=[],m=0;m<d.length;m++){var w=d[m];w>255&&(w&=255),Q.push(String.fromCharCode(w))}return Q.join("")}B+=16,F=W(4),G=(f=S=D(B))+ht,k=D(G),o[F>>2]=k,u=!0,C.wasmTableSize=4,C.wasmMaxTableSize=4,C.asmGlobalArg={},C.asmLibraryArg={abort:Re,assert:jA,enlargeMemory:Nt,getTotalMemory:tn,abortOnCannotGrowMemory:function(){Re("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+xA+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")},invoke_iii:function(Q,m,w){var K=jn();try{return C.dynCall_iii(Q,m,w)}catch(sA){if(zn(K),typeof sA!="number"&&sA!=="longjmp")throw sA;C.setThrew(1,0)}},___assert_fail:function(Q,m,w,K){Re("Assertion failed: "+He(Q)+", at: "+[m?He(m):"unknown filename",w,K?He(K):"unknown function"])},___setErrNo:function(Q){return C.___errno_location&&(o[C.___errno_location()>>2]=Q),Q},_abort:function(){C.abort()},_emscripten_memcpy_big:function(Q,m,w){return r.set(r.subarray(m,m+w),Q),Q},_llvm_floor_f64:Ks,DYNAMICTOP_PTR:F,tempDoublePtr:Ae,ABORT:lA,STACKTOP:S,STACK_MAX:G};var Vs=C.asm(C.asmGlobalArg,C.asmLibraryArg,n);C.asm=Vs,C.___errno_location=function(){return C.asm.___errno_location.apply(null,arguments)};var ki=C._emscripten_replace_memory=function(){return C.asm._emscripten_replace_memory.apply(null,arguments)};C._free=function(){return C.asm._free.apply(null,arguments)};var sn=C._malloc=function(){return C.asm._malloc.apply(null,arguments)};C._memcpy=function(){return C.asm._memcpy.apply(null,arguments)},C._memset=function(){return C.asm._memset.apply(null,arguments)},C._sbrk=function(){return C.asm._sbrk.apply(null,arguments)},C._stb_vorbis_js_channels=function(){return C.asm._stb_vorbis_js_channels.apply(null,arguments)},C._stb_vorbis_js_close=function(){return C.asm._stb_vorbis_js_close.apply(null,arguments)},C._stb_vorbis_js_decode=function(){return C.asm._stb_vorbis_js_decode.apply(null,arguments)},C._stb_vorbis_js_open=function(){return C.asm._stb_vorbis_js_open.apply(null,arguments)},C._stb_vorbis_js_sample_rate=function(){return C.asm._stb_vorbis_js_sample_rate.apply(null,arguments)},C.establishStackSpace=function(){return C.asm.establishStackSpace.apply(null,arguments)},C.getTempRet0=function(){return C.asm.getTempRet0.apply(null,arguments)},C.runPostSets=function(){return C.asm.runPostSets.apply(null,arguments)},C.setTempRet0=function(){return C.asm.setTempRet0.apply(null,arguments)},C.setThrew=function(){return C.asm.setThrew.apply(null,arguments)};var on=C.stackAlloc=function(){return C.asm.stackAlloc.apply(null,arguments)},zn=C.stackRestore=function(){return C.asm.stackRestore.apply(null,arguments)},jn=C.stackSave=function(){return C.asm.stackSave.apply(null,arguments)};function Tt(d){this.name="ExitStatus",this.message="Program terminated with exit("+d+")",this.status=d}function $n(d){d=d||C.arguments,!(_e>0)&&(function(){if(C.preRun)for(typeof C.preRun=="function"&&(C.preRun=[C.preRun]);C.preRun.length;)mi(C.preRun.shift());Ye(bt)}(),!(_e>0)&&(C.calledRun||(C.setStatus?(C.setStatus("Running..."),setTimeout(function(){setTimeout(function(){C.setStatus("")},1),Q()},1)):Q())));function Q(){!C.calledRun&&(C.calledRun=!0,lA||(Wn||(Wn=!0,Ye(Xn)),Ye(Os),C.onRuntimeInitialized&&C.onRuntimeInitialized(),function(){if(C.postRun)for(typeof C.postRun=="function"&&(C.postRun=[C.postRun]);C.postRun.length;)pi(C.postRun.shift());Ye(Ps)}()))}}function ca(d,Q){(!Q||!C.noExitRuntime||d!==0)&&(C.noExitRuntime||(lA=!0,me=d,S=N,Ye(Js),ui=!0,C.onExit&&C.onExit(d)),C.quit(d,new Tt(d)))}function Re(d){throw C.onAbort&&C.onAbort(d),d!==void 0?(uA(d),cA(d),d=JSON.stringify(d)):d="",lA=!0,me=1,"abort("+d+"). Build with -s ASSERTIONS=1 for more info."}if(C.dynCall_iii=function(){return C.asm.dynCall_iii.apply(null,arguments)},C.asm=Vs,C.ccall=It,C.cwrap=function(Q,m,w,K){var sA=(w=w||[]).every(function(EA){return EA==="number"});return m!=="string"&&sA&&!K?Ue(Q):function(){return It(Q,m,w,arguments,K)}},Tt.prototype=Error(),Tt.prototype.constructor=Tt,Lt=function d(){C.calledRun||$n(),C.calledRun||(Lt=d)},C.run=$n,C.abort=Re,C.preInit)for(typeof C.preInit=="function"&&(C.preInit=[C.preInit]);C.preInit.length>0;)C.preInit.pop()();C.noExitRuntime=!0,$n(),C.onRuntimeInitialized=()=>{eo=!0,to()},Ee.decode=function(d){return function(m){if(!eo)throw Error("SF3 decoder has not been initialized yet. Did you await synth.isReady?");var w={};function K(lt){return new Int32Array(C.HEAPU8.buffer,lt,1)[0]}function sA(lt,As){var rn=new ArrayBuffer(As*Float32Array.BYTES_PER_ELEMENT),Bt=new Float32Array(rn);return Bt.set(new Float32Array(C.HEAPU8.buffer,lt,As)),Bt}w.open=C.cwrap("stb_vorbis_js_open","number",[]),w.close=C.cwrap("stb_vorbis_js_close","void",["number"]),w.channels=C.cwrap("stb_vorbis_js_channels","number",["number"]),w.sampleRate=C.cwrap("stb_vorbis_js_sample_rate","number",["number"]),w.decode=C.cwrap("stb_vorbis_js_decode","number",["number","number","number","number","number"]);var EA,z,LA,SA,DA=w.open(),BA=(EA=m,z=m.byteLength,LA=C._malloc(z),(SA=new Uint8Array(C.HEAPU8.buffer,LA,z)).set(new Uint8Array(EA,0,z)),SA),nA=C._malloc(4),XA=C._malloc(4),re=w.decode(DA,BA.byteOffset,BA.byteLength,nA,XA);if(C._free(BA.byteOffset),re<0)throw w.close(DA),C._free(nA),Error("stbvorbis decode failed: "+re);for(var ie=w.channels(DA),ae=Array(ie),ze=new Int32Array(C.HEAPU32.buffer,K(nA),ie),ge=0;ge<ie;ge++)ae[ge]=sA(ze[ge],re),C._free(ze[ge]);var Ut=w.sampleRate(DA);return w.close(DA),C._free(K(nA)),C._free(nA),{data:ae,sampleRate:Ut,eof:!0,error:null}}(d)}})();var ss=new Float32Array(30001);for(let e=0;e<ss.length;e++){let A=-15e3+e;ss[e]=Math.pow(2,A/1200)}function he(e){return e<=-32767?0:ss[e- -15e3]}var In=-2e4,no=16500,os=new Float32Array(no-In+1);for(let e=0;e<os.length;e++){let A=In+e;os[e]=440*Math.pow(2,(A-6900)/1200)}function Yt(e){return e<In||e>no?440*Math.pow(2,(e-6900)/1200):os[~~e-In]}var is=-1660,Mi=1600,rs=new Float32Array((Mi-is)*100+1);for(let e=0;e<rs.length;e++){let A=(is*100+e)/100;rs[e]=Math.pow(10,-A/20)}function ce(e){return rs[Math.floor((e-is)*100)]}var g={INVALID:-1,startAddrsOffset:0,endAddrOffset:1,startloopAddrsOffset:2,endloopAddrsOffset:3,startAddrsCoarseOffset:4,modLfoToPitch:5,vibLfoToPitch:6,modEnvToPitch:7,initialFilterFc:8,initialFilterQ:9,modLfoToFilterFc:10,modEnvToFilterFc:11,endAddrsCoarseOffset:12,modLfoToVolume:13,unused1:14,chorusEffectsSend:15,reverbEffectsSend:16,pan:17,unused2:18,unused3:19,unused4:20,delayModLFO:21,freqModLFO:22,delayVibLFO:23,freqVibLFO:24,delayModEnv:25,attackModEnv:26,holdModEnv:27,decayModEnv:28,sustainModEnv:29,releaseModEnv:30,keyNumToModEnvHold:31,keyNumToModEnvDecay:32,delayVolEnv:33,attackVolEnv:34,holdVolEnv:35,decayVolEnv:36,sustainVolEnv:37,releaseVolEnv:38,keyNumToVolEnvHold:39,keyNumToVolEnvDecay:40,instrument:41,reserved1:42,keyRange:43,velRange:44,startloopAddrsCoarseOffset:45,keyNum:46,velocity:47,initialAttenuation:48,reserved2:49,endloopAddrsCoarseOffset:50,coarseTune:51,fineTune:52,sampleID:53,sampleModes:54,reserved3:55,scaleTuning:56,exclusiveClass:57,overridingRootKey:58,unused5:59,endOper:60,vibLfoToVolume:61,vibLfoToFilterFc:62},Ot=Object.keys(g).length,so=Math.max(...Object.values(g)),V=[];V[g.startAddrsOffset]={min:0,max:32768,def:0,nrpn:1};V[g.endAddrOffset]={min:-32768,max:32768,def:0,nrpn:1};V[g.startloopAddrsOffset]={min:-32768,max:32768,def:0,nrpn:1};V[g.endloopAddrsOffset]={min:-32768,max:32768,def:0,nrpn:1};V[g.startAddrsCoarseOffset]={min:0,max:32768,def:0,nrpn:1};V[g.modLfoToPitch]={min:-12e3,max:12e3,def:0,nrpn:2};V[g.vibLfoToPitch]={min:-12e3,max:12e3,def:0,nrpn:2};V[g.modEnvToPitch]={min:-12e3,max:12e3,def:0,nrpn:2};V[g.initialFilterFc]={min:1500,max:13500,def:13500,nrpn:2};V[g.initialFilterQ]={min:0,max:960,def:0,nrpn:1};V[g.modLfoToFilterFc]={min:-12e3,max:12e3,def:0,nrpn:2};V[g.vibLfoToFilterFc]={min:-12e3,max:12e3,def:0,nrpn:2};V[g.modEnvToFilterFc]={min:-12e3,max:12e3,def:0,nrpn:2};V[g.endAddrsCoarseOffset]={min:-32768,max:32768,def:0,nrpn:1};V[g.modLfoToVolume]={min:-960,max:960,def:0,nrpn:1};V[g.vibLfoToVolume]={min:-960,max:960,def:0,nrpn:1};V[g.chorusEffectsSend]={min:0,max:1e3,def:0,nrpn:1};V[g.reverbEffectsSend]={min:0,max:1e3,def:0,nrpn:1};V[g.pan]={min:-500,max:500,def:0,nrpn:1};V[g.delayModLFO]={min:-12e3,max:5e3,def:-12e3,nrpn:2};V[g.freqModLFO]={min:-16e3,max:4500,def:0,nrpn:4};V[g.delayVibLFO]={min:-12e3,max:5e3,def:-12e3,nrpn:2};V[g.freqVibLFO]={min:-16e3,max:4500,def:0,nrpn:4};V[g.delayModEnv]={min:-32768,max:5e3,def:-32768,nrpn:2};V[g.attackModEnv]={min:-32768,max:8e3,def:-32768,nrpn:2};V[g.holdModEnv]={min:-12e3,max:5e3,def:-12e3,nrpn:2};V[g.decayModEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};V[g.sustainModEnv]={min:0,max:1e3,def:0,nrpn:1};V[g.releaseModEnv]={min:-7200,max:8e3,def:-12e3,nrpn:2};V[g.keyNumToModEnvHold]={min:-1200,max:1200,def:0,nrpn:1};V[g.keyNumToModEnvDecay]={min:-1200,max:1200,def:0,nrpn:1};V[g.delayVolEnv]={min:-12e3,max:5e3,def:-12e3,nrpn:2};V[g.attackVolEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};V[g.holdVolEnv]={min:-12e3,max:5e3,def:-12e3,nrpn:2};V[g.decayVolEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};V[g.sustainVolEnv]={min:0,max:1440,def:0,nrpn:1};V[g.releaseVolEnv]={min:-7200,max:8e3,def:-12e3,nrpn:2};V[g.keyNumToVolEnvHold]={min:-1200,max:1200,def:0,nrpn:1};V[g.keyNumToVolEnvDecay]={min:-1200,max:1200,def:0,nrpn:1};V[g.startloopAddrsCoarseOffset]={min:-32768,max:32768,def:0,nrpn:1};V[g.keyNum]={min:-1,max:127,def:-1,nrpn:1};V[g.velocity]={min:-1,max:127,def:-1,nrpn:1};V[g.initialAttenuation]={min:0,max:1440,def:0,nrpn:1};V[g.endloopAddrsCoarseOffset]={min:-32768,max:32768,def:0,nrpn:1};V[g.coarseTune]={min:-120,max:120,def:0,nrpn:1};V[g.fineTune]={min:-12700,max:12700,def:0,nrpn:1};V[g.scaleTuning]={min:0,max:1200,def:100,nrpn:1};V[g.exclusiveClass]={min:0,max:99999,def:0,nrpn:0};V[g.overridingRootKey]={min:-1,max:127,def:-1,nrpn:0};V[g.sampleModes]={min:0,max:3,def:0,nrpn:0};var oo=.01,ee=100,as=90,xi=15e-6,le=class e{currentSampleTime=0;sampleRate;currentAttenuationDb=ee;state=0;releaseStartDb=ee;releaseStartTimeSamples=0;currentReleaseGain=1;attackDuration=0;decayDuration=0;releaseDuration=0;attenuation=0;attenuationTargetGain=0;attenuationTarget=0;sustainDbRelative=0;delayEnd=0;attackEnd=0;holdEnd=0;decayEnd=0;constructor(A,t){this.sampleRate=A,this.canEndOnSilentSustain=t/10>=as}static startRelease(A){A.volumeEnvelope.releaseStartTimeSamples=A.volumeEnvelope.currentSampleTime,A.volumeEnvelope.currentReleaseGain=ce(A.volumeEnvelope.currentAttenuationDb),e.recalculate(A)}static recalculate(A){let t=A.volumeEnvelope,n=I=>Math.max(0,Math.floor(he(I)*t.sampleRate));t.attenuationTarget=Math.max(0,Math.min(A.modulatedGenerators[g.initialAttenuation],1440))/10,t.attenuationTargetGain=ce(t.attenuationTarget),t.sustainDbRelative=Math.min(ee,A.modulatedGenerators[g.sustainVolEnv]/10);let s=Math.min(ee,t.sustainDbRelative);t.attackDuration=n(A.modulatedGenerators[g.attackVolEnv]);let r=A.modulatedGenerators[g.decayVolEnv],i=(60-A.targetKey)*A.modulatedGenerators[g.keyNumToVolEnvDecay],a=s/ee;t.decayDuration=n(r+i)*a,t.releaseDuration=n(A.modulatedGenerators[g.releaseVolEnv]),t.delayEnd=n(A.modulatedGenerators[g.delayVolEnv]),t.attackEnd=t.attackDuration+t.delayEnd;let o=(60-A.targetKey)*A.modulatedGenerators[g.keyNumToVolEnvHold];if(t.holdEnd=n(A.modulatedGenerators[g.holdVolEnv]+o)+t.attackEnd,t.decayEnd=t.decayDuration+t.holdEnd,t.state===0&&t.attackEnd===0&&(t.state=2),A.isInRelease){let I=Math.max(0,Math.min(ee,t.sustainDbRelative)),l=I/ee;switch(t.decayDuration=n(r+i)*l,t.state){case 0:t.releaseStartDb=ee;break;case 1:let h=1-(t.attackEnd-t.releaseStartTimeSamples)/t.attackDuration;t.releaseStartDb=20*Math.log10(h)*-1;break;case 2:t.releaseStartDb=0;break;case 3:t.releaseStartDb=(1-(t.decayEnd-t.releaseStartTimeSamples)/t.decayDuration)*I;break;case 4:t.releaseStartDb=I;break}t.releaseStartDb=Math.max(0,Math.min(t.releaseStartDb,ee)),t.releaseStartDb>=as&&(A.finished=!0),t.currentReleaseGain=ce(t.releaseStartDb);let c=(ee-t.releaseStartDb)/ee;t.releaseDuration*=c}}static apply(A,t,n,s){let r=A.volumeEnvelope,i=n/10,a=s;if(A.isInRelease){let I=r.currentSampleTime-r.releaseStartTimeSamples;if(I>=r.releaseDuration){for(let c=0;c<t.length;c++)t[c]=0;A.finished=!0;return}let l=ee-r.releaseStartDb;for(let c=0;c<t.length;c++){r.attenuation+=(r.attenuationTargetGain-r.attenuation)*a;let h=I/r.releaseDuration*l+r.releaseStartDb;r.currentReleaseGain=r.attenuation*ce(h+i),t[c]*=r.currentReleaseGain,r.currentSampleTime++,I++}r.currentReleaseGain<=xi&&(A.finished=!0);return}let o=0;switch(r.state){case 0:for(;r.currentSampleTime<r.delayEnd;)if(r.currentAttenuationDb=ee,t[o]=0,r.currentSampleTime++,++o>=t.length)return;r.state++;case 1:for(;r.currentSampleTime<r.attackEnd;){r.attenuation+=(r.attenuationTargetGain-r.attenuation)*a;let I=1-(r.attackEnd-r.currentSampleTime)/r.attackDuration;if(t[o]*=I*r.attenuation*ce(i),r.currentAttenuationDb=0,r.currentSampleTime++,++o>=t.length)return}r.state++;case 2:for(;r.currentSampleTime<r.holdEnd;)if(r.attenuation+=(r.attenuationTargetGain-r.attenuation)*a,t[o]*=r.attenuation*ce(i),r.currentAttenuationDb=0,r.currentSampleTime++,++o>=t.length)return;r.state++;case 3:for(;r.currentSampleTime<r.decayEnd;)if(r.attenuation+=(r.attenuationTargetGain-r.attenuation)*a,r.currentAttenuationDb=(1-(r.decayEnd-r.currentSampleTime)/r.decayDuration)*r.sustainDbRelative,t[o]*=r.attenuation*ce(r.currentAttenuationDb+i),r.currentSampleTime++,++o>=t.length)return;r.state++;case 4:for(r.canEndOnSilentSustain&&r.sustainDbRelative>=as&&(A.finished=!0);;)if(r.attenuation+=(r.attenuationTargetGain-r.attenuation)*a,t[o]*=r.attenuation*ce(r.sustainDbRelative+i),r.currentAttenuationDb=r.sustainDbRelative,r.currentSampleTime++,++o>=t.length)return}}};var U=class extends Uint8Array{currentIndex=0;constructor(A){super(A)}slice(A,t){let n=super.slice(A,t);return n.currentIndex=0,n}};var JA=class{ticks;messageStatusByte;messageData;constructor(A,t,n){this.ticks=A,this.messageStatusByte=t,this.messageData=n}};function ro(e){let A=e&240,t=e&15,n=t;switch(A){case 128:case 144:case 160:case 176:case 192:case 208:case 224:break;case 240:switch(t){case 0:n=-3;break;case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:n=-1;break;case 15:n=-2;break}break;default:n=-1}return n}var R={noteOff:128,noteOn:144,polyPressure:160,controllerChange:176,programChange:192,channelPressure:208,pitchBend:224,systemExclusive:240,timecode:241,songPosition:242,songSelect:243,tuneRequest:246,clock:248,start:250,continue:251,stop:252,activeSensing:254,reset:255,sequenceNumber:0,text:1,copyright:2,trackName:3,instrumentName:4,lyric:5,marker:6,cuePoint:7,programName:8,midiChannelPrefix:32,midiPort:33,endOfTrack:47,setTempo:81,smpteOffset:84,timeSignature:88,keySignature:89,sequenceSpecific:127};function dt(e){let A=e&240,t=e&15,n=-1,s=e;return A>=128&&A<=224&&(n=t,s=A),{status:s,channel:n}}var p={bankSelect:0,modulationWheel:1,breathController:2,footController:4,portamentoTime:5,dataEntryMsb:6,mainVolume:7,balance:8,pan:10,expressionController:11,effectControl1:12,effectControl2:13,generalPurposeController1:16,generalPurposeController2:17,generalPurposeController3:18,generalPurposeController4:19,lsbForControl0BankSelect:32,lsbForControl1ModulationWheel:33,lsbForControl2BreathController:34,lsbForControl4FootController:36,lsbForControl5PortamentoTime:37,lsbForControl6DataEntry:38,lsbForControl7MainVolume:39,lsbForControl8Balance:40,lsbForControl10Pan:42,lsbForControl11ExpressionController:43,lsbForControl12EffectControl1:44,lsbForControl13EffectControl2:45,sustainPedal:64,portamentoOnOff:65,sostenutoPedal:66,softPedal:67,legatoFootswitch:68,hold2Pedal:69,soundVariation:70,filterResonance:71,releaseTime:72,attackTime:73,brightness:74,decayTime:75,vibratoRate:76,vibratoDepth:77,vibratoDelay:78,soundController10:79,generalPurposeController5:80,generalPurposeController6:81,generalPurposeController7:82,generalPurposeController8:83,portamentoControl:84,reverbDepth:91,tremoloDepth:92,chorusDepth:93,detuneDepth:94,phaserDepth:95,dataIncrement:96,dataDecrement:97,NRPNLsb:98,NRPNMsb:99,RPNLsb:100,RPNMsb:101,allSoundOff:120,resetAllControllers:121,localControlOnOff:122,allNotesOff:123,omniModeOff:124,omniModeOn:125,monoModeOn:126,polyModeOn:127},io={8:2,9:2,10:2,11:2,12:1,13:1,14:2};var cn=64,ao=121;function go(e){return e==="gm2"?ao:0}function te(e){return e===120||e===126||e===127}function En(e){return te(e)||e===cn||e===ao}function Qt(e,A,t,n,s,r){let i=e,a=0;if(n)GA(t)?En(A)||(i=A):t==="gm2"&&(i=A);else{let o=!0;switch(t){case"gm":y(`%cIgnoring the Bank Select (${A}), as the synth is in GM mode.`,E.info),o=!1;break;case"xg":o=En(A),te(A)?a=2:r%16!==9&&(a=1);break;case"gm2":A===120?a=2:r%16!==9&&(a=1)}s&&(A=128),A===128&&!s&&(A=e),o&&(i=A)}return{newBank:i,drumsStatus:a}}function ft(e,A,t,n){return n?t?te(e)?e:128:En(e)||A===0&&e!==0?e:En(A)?0:A:t?128:e}function GA(e){return e==="gm2"||e==="xg"}var PA={mainVolume:0,masterPan:1,voicesCap:2,interpolationType:3,midiSystem:4};function Io(e,A){switch(e){case PA.masterPan:let t=A;this.pan=t,t=t/2+.5,this.panLeft=1-t,this.panRight=t;break;case PA.mainVolume:this.masterGain=A*gs,this.setMasterParameter(PA.masterPan,this.pan);break;case PA.voicesCap:this.voiceCap=A;break;case PA.interpolationType:this.interpolationType=A;break;case PA.midiSystem:this.setSystem(A)}}function $(e,A,t=void 0,n=!0){if(t){let s=e.slice(e.currentIndex,e.currentIndex+A);return e.currentIndex+=A,new TextDecoder(t.replace(/[^\x20-\x7E]/g,"")).decode(s.buffer)}else{let s=!1,r="";for(let i=0;i<A;i++){let a=e[e.currentIndex++];if(!s){if((a<32||a>127)&&a!==10){if(n){s=!0;continue}else if(a===0){s=!0;continue}}r+=String.fromCharCode(a)}}return r}}function YA(e,A=!1,t=!1){let n=e.length;A&&n++,t&&n%2!==0&&n++;let s=new U(n);return mA(s,e),s}function mA(e,A,t=0){t>0&&A.length>t&&(A=A.slice(0,t));for(let n=0;n<A.length;n++)e[e.currentIndex++]=A.charCodeAt(n);if(t>A.length)for(let n=0;n<t-A.length;n++)e[e.currentIndex++]=0;return e}var $e={linear:0,nearestNeighbor:1,fourthOrder:2},Jt={SoundCanvasText:0,XGText:1,SoundCanvasDotDisplay:2};var TA=10,X={noController:0,noteOnVelocity:2,noteOnKeyNum:3,polyPressure:10,channelPressure:13,pitchWheel:14,pitchWheelRange:16,link:127},kA={linear:0,concave:1,convex:2,switch:3},CA=class e{currentValue=0;modulatorDestination;transformAmount;transformType;isEffectModulator=!1;sourcePolarity;sourceDirection;sourceUsesCC;sourceIndex;sourceCurveType;secSrcPolarity;secSrcDirection;secSrcUsesCC;secSrcIndex;secSrcCurveType;constructor(A,t,n,s,r,i,a,o,I,l,c,h,B,u=!1){this.sourcePolarity=s,this.sourceDirection=r,this.sourceUsesCC=n,this.sourceIndex=A,this.sourceCurveType=t,this.secSrcPolarity=I,this.secSrcDirection=l,this.secSrcUsesCC=o,this.secSrcIndex=i,this.secSrcCurveType=a,this.modulatorDestination=c,this.transformAmount=h,this.transformType=B,this.isEffectModulator=u,this.modulatorDestination>so&&(this.modulatorDestination=g.INVALID)}static copy(A){return new e(A.sourceIndex,A.sourceCurveType,A.sourceUsesCC,A.sourcePolarity,A.sourceDirection,A.secSrcIndex,A.secSrcCurveType,A.secSrcUsesCC,A.secSrcPolarity,A.secSrcDirection,A.modulatorDestination,A.transformAmount,A.transformType,A.isEffectModulator)}static isIdentical(A,t,n=!1){return A.sourceIndex===t.sourceIndex&&A.sourceUsesCC===t.sourceUsesCC&&A.sourcePolarity===t.sourcePolarity&&A.sourceDirection===t.sourceDirection&&A.sourceCurveType===t.sourceCurveType&&A.secSrcIndex===t.secSrcIndex&&A.secSrcUsesCC===t.secSrcUsesCC&&A.secSrcPolarity===t.secSrcPolarity&&A.secSrcDirection===t.secSrcDirection&&A.secSrcCurveType===t.secSrcCurveType&&A.modulatorDestination===t.modulatorDestination&&A.transformType===t.transformType&&(!n||A.transformAmount===t.transformAmount)}static debugString(A){function t(r,i){return Object.keys(r).find(a=>r[a]===i)}let n=t(kA,A.sourceCurveType);n+=A.sourcePolarity===0?" unipolar ":" bipolar ",n+=A.sourceDirection===0?"forwards ":"backwards ",A.sourceUsesCC?n+=t(p,A.sourceIndex):n+=t(X,A.sourceIndex);let s=t(kA,A.secSrcCurveType);return s+=A.secSrcPolarity===0?" unipolar ":" bipolar ",s+=A.secSrcDirection===0?"forwards ":"backwards ",A.secSrcUsesCC?s+=t(p,A.secSrcIndex):s+=t(X,A.secSrcIndex),`Modulator:
|
|
3
3
|
Source: ${n}
|
|
4
4
|
Secondary source: ${s}
|
|
5
5
|
Destination: ${t(g,A.modulatorDestination)}
|
|
@@ -7,16 +7,16 @@ var Ws=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(A,t)=>(
|
|
|
7
7
|
Transform type: ${A.transformType}
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
`}getSourceEnum(){return _A(this.sourceCurveType,this.sourcePolarity,this.sourceDirection,this.sourceUsesCC,this.sourceIndex)}getSecSrcEnum(){return _A(this.secSrcCurveType,this.secSrcPolarity,this.secSrcDirection,this.secSrcUsesCC,this.secSrcIndex)}sumTransform(A){return new e(this.sourceIndex,this.sourceCurveType,this.sourceUsesCC,this.sourcePolarity,this.sourceDirection,this.secSrcIndex,this.secSrcCurveType,this.secSrcUsesCC,this.secSrcPolarity,this.secSrcDirection,this.modulatorDestination,this.transformAmount+A.transformAmount,this.transformType,this.isEffectModulator)}},pA=class extends hA{constructor(A,t,n,s,r){let i=A>>9&1,a=A>>8&1,o=A>>7&1,I=A&127,B=A>>10&3,C=t>>9&1,h=t>>8&1,l=t>>7&1,u=t&127,f=t>>10&3;super(I,B,o,i,a,u,f,l,C,h,n,s,r),this.isEffectModulator=(A===219||A===221)&&t===0&&(this.modulatorDestination===g.reverbEffectsSend||this.modulatorDestination===g.chorusEffectsSend)}},Es=960,Cs=wA.concave;function _A(e,A,t,n,s){return e<<10|A<<9|t<<8|n<<7|s}var Ni=[new pA(_A(Cs,0,1,0,_.noteOnVelocity),0,g.initialAttenuation,Es,0),new pA(129,0,g.vibLfoToPitch,50,0),new pA(_A(Cs,0,1,1,p.mainVolume),0,g.initialAttenuation,Es,0),new pA(13,0,g.vibLfoToPitch,50,0),new pA(526,16,g.fineTune,12700,0),new pA(650,0,g.pan,500,0),new pA(_A(Cs,0,1,1,p.expressionController),0,g.initialAttenuation,Es,0),new pA(219,0,g.reverbEffectsSend,200,0),new pA(221,0,g.chorusEffectsSend,200,0)],bi=[new pA(_A(wA.linear,0,0,0,_.polyPressure),0,g.vibLfoToPitch,50,0),new pA(_A(wA.linear,0,0,1,p.tremoloDepth),0,g.modLfoToVolume,24,0),new pA(_A(wA.convex,1,0,1,p.attackTime),0,g.attackVolEnv,6e3,0),new pA(_A(wA.linear,1,0,1,p.releaseTime),0,g.releaseVolEnv,3600,0),new pA(_A(wA.linear,1,0,1,p.brightness),0,g.initialFilterFc,6e3,0),new pA(_A(wA.linear,1,0,1,p.filterResonance),0,g.initialFilterQ,250,0)],co=Ni.concat(bi);var lA=128,ln=147,Pe=new Int16Array(ln).fill(0),NA=(e,A)=>Pe[e]=A<<7;NA(p.mainVolume,100);NA(p.balance,64);NA(p.expressionController,127);NA(p.pan,64);NA(p.portamentoOnOff,127);NA(p.filterResonance,64);NA(p.releaseTime,64);NA(p.attackTime,64);NA(p.brightness,64);NA(p.decayTime,64);NA(p.vibratoRate,64);NA(p.vibratoDepth,64);NA(p.vibratoDelay,64);NA(p.generalPurposeController6,64);NA(p.generalPurposeController8,64);NA(p.RPNLsb,127);NA(p.RPNMsb,127);NA(p.NRPNLsb,127);NA(p.NRPNMsb,127);var Bn=1;Pe[p.portamentoControl]=Bn;NA(lA+_.pitchWheel,64);NA(lA+_.pitchWheelRange,2);var rA={channelTuning:0,channelTransposeFine:1,modulationMultiplier:2,masterTuning:3,channelTuningSemitones:4,channelKeyShift:5,sf2NPRNGeneratorLSB:6},hs=Object.keys(rA).length,ls=new Float32Array(hs);ls[rA.modulationMultiplier]=1;var HA={Idle:0,RPCoarse:1,RPFine:2,NRPCoarse:3,NRPFine:4,DataCoarse:5,DataFine:6},Bs={velocityOverride:128};function Eo(e,A,t){let n=e,s=A<<7|t;return e===127&&A===127&&t===127?{midiNote:-1,centTuning:null}:{midiNote:n,centTuning:s*.0061}}function Co(e,A=0){let t=e[0];if(this.deviceID!==-1&&e[1]!==127&&this.deviceID!==e[1])return;function n(r,i,a,o){y(`%cChannel %c${r}%c ${a}. %c${i} ${o}%c, with %c${JA(e)}`,c.info,c.recognized,c.info,c.value,c.info,c.value)}function s(){P(`%cUnrecognized Roland %cGS %cSysEx: %c${JA(e)}`,c.warn,c.recognized,c.warn,c.unrecognized)}switch(t){default:P(`%cUnrecognized SysEx: %c${JA(e)}`,c.warn,c.unrecognized);break;case 126:case 127:switch(e[2]){case 4:let r;switch(e[3]){case 1:let a=e[5]<<7|e[4];this.setMIDIVolume(a/16384),y(`%cMaster Volume. Volume: %c${a}`,c.info,c.value);break;case 2:let I=((e[5]<<7|e[4])-8192)/8192;this.setMasterParameter(KA.masterPan,I),y(`%cMaster Pan. Pan: %c${I}`,c.info,c.value);break;case 3:let B=(e[5]<<7|e[6])-8192;r=Math.floor(B/81.92),this.setMasterTuning(r),y(`%cMaster Fine Tuning. Cents: %c${r}`,c.info,c.value);break;case 4:r=(e[5]-64)*100,this.setMasterTuning(r),y(`%cMaster Coarse Tuning. Cents: %c${r}`,c.info,c.value);break;default:P(`%cUnrecognized MIDI Device Control Real-time message: %c${JA(e)}`,c.warn,c.unrecognized)}break;case 9:e[3]===1?(y("%cGM1 system on",c.info),this.setSystem("gm")):e[3]===3?(y("%cGM2 system on",c.info),this.setSystem("gm2")):(y("%cGM system off, defaulting to GS",c.info),this.setSystem("gs"));break;case 8:let i=4;switch(e[3]){case 1:let a=e[i++];e.currentIndex=i;let o=eA(e,16);if(i+=16,e.length<384){P(`The Bulk Tuning Dump is too short! (${e.length} bytes, at least 384 are expected)`);return}for(let h=0;h<128;h++)this.tunings[a][h]=Eo(e[i++],e[i++],e[i++]);y(`%cBulk Tuning Dump %c${o}%c Program: %c${a}`,c.info,c.value,c.info,c.recognized);break;case 2:case 7:e[3]===7&&i++;let I=e[i++],B=e[i++];for(let h=0;h<B;h++)this.tunings[I][e[i++]]=Eo(e[i++],e[i++],e[i++]);y(`%cSingle Note Tuning. Program: %c${I}%c Keys affected: %c${B}`,c.info,c.recognized,c.info,c.recognized);break;case 9:case 8:let C=new Int8Array(12);if(e[3]===8)for(let h=0;h<12;h++)C[h]=e[7+h]-64;else for(let h=0;h<24;h+=2){let l=(e[7+h]<<7|e[8+h])-8192;C[h/2]=Math.floor(l/81.92)}(e[4]&1)===1&&this.midiAudioChannels[14+A].setOctaveTuning(C),(e[4]>>1&1)===1&&this.midiAudioChannels[15+A].setOctaveTuning(C);for(let h=0;h<7;h++)(e[5]>>h&1)===1&&this.midiAudioChannels[7+h+A].setOctaveTuning(C);for(let h=0;h<7;h++)(e[6]>>h&1)===1&&this.midiAudioChannels[h+A].setOctaveTuning(C);y(`%cMIDI Octave Scale ${e[3]===8?"(1 byte)":"(2 bytes)"} tuning via Tuning: %c${C.join(" ")}`,c.info,c.value);break;default:P(`%cUnrecognized MIDI Tuning standard message: %c${JA(e)}`,c.warn,c.unrecognized);break}break;default:P(`%cUnrecognized MIDI Realtime/non realtime message: %c${JA(e)}`,c.warn,c.unrecognized)}break;case 65:if(e[2]===66&&e[3]===18){let r=e[7];if(e[4]===64||e[4]===0&&e[6]===127){if((e[5]&16)>0){let i=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][e[5]&15]+A,a=this.midiAudioChannels[i];switch(e[6]){default:s();break;case 21:let o=r>0&&e[5]>>4;a.setDrums(o),y(`%cChannel %c${i}%c ${o?"is now a drum channel":"now isn't a drum channel"}%c via: %c${JA(e)}`,c.info,c.value,c.recognized,c.info,c.value);return;case 22:let I=r-64;a.setCustomController(rA.channelKeyShift,I),n(i,I,"key shift","keys");return;case 28:let B=r;B===0?(a.randomPan=!0,y(`%cRandom pan is set to %cON%c for %c${i}`,c.info,c.recognized,c.info,c.value)):(a.randomPan=!1,a.controllerChange(p.pan,B));break;case 33:a.controllerChange(p.chorusDepth,r);break;case 34:a.controllerChange(p.reverbDepth,r);break;case 64:case 65:case 66:case 67:case 68:case 69:case 70:case 71:case 72:case 73:case 74:case 75:let C=e.length-9,h=new Int8Array(12);for(let u=0;u<C;u++)h[u]=e[u+7]-64;a.setOctaveTuning(h);let l=r-64;n(i,h.join(" "),"octave scale tuning","cents"),a.setTuning(l);break}return}else if((e[5]&32)>0){let i=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][e[5]&15]+A,a=this.midiAudioChannels[i],o=r-64,I=o/64,B=r/128,C=(h,l,u=!1)=>{switch(e[6]&15){case 0:h===lA+_.pitchWheel?(a.controllerChange(p.RPNMsb,0),a.controllerChange(p.RPNLsb,0),a.controllerChange(p.dataEntryMsb,Math.floor(o))):(a.sysExModulators.setModulator(h,g.fineTune,o*100,u),n(i,o,`${l} pitch control`,"semitones"));break;case 1:a.sysExModulators.setModulator(h,g.initialFilterFc,I*9600,u),n(i,I*9600,`${l} pitch control`,"cents");break;case 2:a.sysExModulators.setModulator(h,g.initialAttenuation,I*960,u),n(i,I*960,`${l} amplitude`,"cB");break;case 4:a.sysExModulators.setModulator(h,g.vibLfoToPitch,B*600,u),n(i,B*600,`${l} LFO1 pitch depth`,"cents");break;case 5:a.sysExModulators.setModulator(h,g.vibLfoToFilterFc,B*2400,u),n(i,B*2400,`${l} LFO1 filter depth`,"cents");break;case 6:a.sysExModulators.setModulator(h,g.vibLfoToVolume,I*960,u),n(i,I*960,`${l} LFO1 amplitude depth`,"cB");break;case 8:a.sysExModulators.setModulator(h,g.modLfoToPitch,B*600,u),n(i,B*600,`${l} LFO2 pitch depth`,"cents");break;case 9:a.sysExModulators.setModulator(h,g.modLfoToFilterFc,B*2400,u),n(i,B*2400,`${l} LFO2 filter depth`,"cents");break;case 10:a.sysExModulators.setModulator(h,g.modLfoToVolume,I*960,u),n(i,I*960,`${l} LFO2 amplitude depth`,"cB");break}};switch(e[6]&240){default:s();break;case 0:C(p.modulationWheel,"mod wheel");break;case 16:C(lA+_.pitchWheel,"pitch bend",!0);break;case 32:C(lA+_.channelPressure,"channel pressure");break;case 48:C(lA+_.polyPressure,"poly pressure");break}return}else if(e[5]===0){switch(e[6]){default:s();break;case 127:r===0?(y("%cGS Reset received!",c.info),this.resetAllControllers(!1),this.setSystem("gs")):r===127&&(y("%cGS system off, switching to GM2",c.info),this.resetAllControllers(!1),this.setSystem("gm2"));break;case 6:y(`%cRoland GS Master Pan set to: %c${r}%c with: %c${JA(e)}`,c.info,c.value,c.info,c.value),this.setMasterParameter(KA.masterPan,(r-64)/64);break;case 4:y(`%cRoland GS Master Volume set to: %c${r}%c with: %c${JA(e)}`,c.info,c.value,c.info,c.value),this.setMIDIVolume(r/127);break;case 5:let i=r-64;y(`%cRoland GS Master Key-Shift set to: %c${i}%c with: %c${JA(e)}`,c.info,c.value,c.info,c.value),this.setMasterTuning(i*100);break}return}else if(e[5]===1)switch(e[6]){default:s();break;case 0:e.currentIndex=7;let i=eA(e,16);y(`%cGS Patch name: %c${i}`,c.info,c.value);break;case 51:y(`%cGS Reverb level: %c${r}`,c.info,c.value),this.reverbSend=r/64;break;case 48:case 49:case 50:case 52:case 53:case 55:y(`%cUnsupported GS Reverb Parameter: %c${e[6].toString(16)}`,c.warn,c.unrecognized);break;case 58:y(`%cGS Chorus level: %c${r}`,c.info,c.value),this.chorusSend=r/64;break;case 56:case 57:case 59:case 60:case 61:case 62:case 63:case 64:y(`%cUnsupported GS Chorus Parameter: %c${e[6].toString(16)}`,c.warn,c.unrecognized);break}}else s();return}else if(e[2]===69&&e[3]===18){if(e[4]===16&&e[6]===0)if(e[5]===0){let r=new Uint8Array(e.slice(7,e.length-2));this.callEvent("synthdisplay",{displayData:r,displayType:Kt.SoundCanvasText})}else if(e[5]===1){let r=new Uint8Array(e.slice(7,e.length-3));this.callEvent("synthdisplay",{displayData:r,displayType:Kt.SoundCanvasDotDisplay}),y(`%cRoland SC Display Dot Matrix via: %c${JA(e)}`,c.info,c.value)}else s()}else if(e[2]===22&&e[3]===18&&e[4]===16){this.setMIDIVolume(e[7]/100),y(`%cRoland Master Volume control set to: %c${e[7]}%c via: %c${JA(e)}`,c.info,c.value,c.info,c.value);return}else{P(`%cUnrecognized Roland SysEx: %c${JA(e)}`,c.warn,c.unrecognized);return}break;case 67:if(e[2]===76)if(e[3]===0&&e[4]===0)switch(e[5]){case 4:let r=e[6];this.setMIDIVolume(r/127),y(`%cXG master volume. Volume: %c${r}`,c.info,c.recognized);break;case 6:let i=e[6]-64;this.transposeAllChannels(i),y(`%cXG master transpose. Volume: %c${i}`,c.info,c.recognized);break;case 126:y("%cXG system on",c.info),this.resetAllControllers(!1),this.setSystem("xg");break}else if(e[3]===8){if(!xA(this.system))return;let r=e[4]+A;if(r>=this.midiAudioChannels.length)return;let i=this.midiAudioChannels[r],a=e[6];switch(e[5]){case 1:i.controllerChange(p.bankSelect,a);break;case 2:i.controllerChange(p.lsbForControl0BankSelect,a);break;case 3:i.programChange(a);break;case 8:if(i.drumChannel)return;let o=a-64;i.channelTransposeKeyShift=o;break;case 11:i.controllerChange(p.mainVolume,a);break;case 14:let I=a;I===0?(i.randomPan=!0,y(`%cRandom pan is set to %cON%c for %c${r}`,c.info,c.recognized,c.info,c.value)):i.controllerChange(p.pan,I);break;case 19:i.controllerChange(p.reverbDepth,a);break;case 18:i.controllerChange(p.chorusDepth,a);break;default:P(`%cUnrecognized Yamaha XG Part Setup: %c${e[5].toString(16).toUpperCase()}`,c.warn,c.unrecognized)}}else if(e[3]===6&&e[4]===0){let r=new Uint8Array(e.slice(5,e.length-1));this.callEvent("synthdisplay",{displayData:r,displayType:Kt.XGText})}else xA(this.system)&&P(`%cUnrecognized Yamaha XG SysEx: %c${JA(e)}`,c.warn,c.unrecognized);else xA(this.system)&&P(`%cUnrecognized Yamaha SysEx: %c${JA(e)}`,c.warn,c.unrecognized);break}}function ho(e=!0){e&&y("%cResetting all controllers!",c.info),this.callEvent("allcontrollerreset",void 0),this.setSystem(Yt);for(let A=0;A<this.midiAudioChannels.length;A++){this.midiAudioChannels[A].resetControllers();let t=this.midiAudioChannels[A];t.lockPreset?this.callEvent("drumchange",{channel:A,isDrumChannel:t.drumChannel}):(t.setBankSelect(go(this.system)),A%16===9?(t.setPreset(this.drumPreset),t.drumChannel=!0,this.callEvent("drumchange",{channel:A,isDrumChannel:!0})):(t.drumChannel=!1,t.setPreset(this.defaultPreset),this.callEvent("drumchange",{channel:A,isDrumChannel:!1})));let n=t.preset.bank;this.callEvent("programchange",{channel:A,program:t.preset.program,bank:n});for(let s=0;s<128;s++)this.midiAudioChannels[A].lockedControllers[s]&&this.callEvent("controllerchange",{channel:A,controllerNumber:s,controllerValue:this.midiAudioChannels[A].midiControllers[s]>>7});if(this.midiAudioChannels[A].lockedControllers[lA+_.pitchWheel]===!1){let s=this.midiAudioChannels[A].midiControllers[lA+_.pitchWheel],r=s>>7,i=s&127;this.callEvent("pitchwheel",{channel:A,MSB:r,LSB:i})}if(this.midiAudioChannels[A].lockedControllers[lA+_.channelPressure]===!1){let s=this.midiAudioChannels[A].midiControllers[lA+_.channelPressure]>>7;this.callEvent("channelpressure",{channel:A,pressure:s})}}this.tunings=[],this.tunings=[];for(let A=0;A<128;A++)this.tunings.push([]);this.setMIDIVolume(1)}function lo(){this.channelOctaveTuning.fill(0);for(let A=0;A<Pe.length;A++){if(this.lockedControllers[A])continue;let t=Pe[A];this.midiControllers[A]!==t&&A<127?A===p.portamentoControl?this.midiControllers[A]=Bn:this.controllerChange(A,t>>7):this.midiControllers[A]=t}this.channelVibrato={rate:0,depth:0,delay:0},this.holdPedal=!1,this.randomPan=!1,this.sysExModulators.resetModulators();let e=this.customControllers[rA.channelTransposeFine];this.customControllers.set(ls),this.setCustomController(rA.channelTransposeFine,e),this.resetParameters()}var ds=new Set([p.bankSelect,p.lsbForControl0BankSelect,p.mainVolume,p.lsbForControl7MainVolume,p.pan,p.lsbForControl10Pan,p.reverbDepth,p.tremoloDepth,p.chorusDepth,p.detuneDepth,p.phaserDepth,p.soundVariation,p.filterResonance,p.releaseTime,p.attackTime,p.brightness,p.decayTime,p.vibratoRate,p.vibratoDepth,p.vibratoDelay,p.soundController10]);function Bo(){this.channelOctaveTuning.fill(0),this.pitchWheel(64,0),this.channelVibrato={rate:0,depth:0,delay:0};for(let e=0;e<128;e++){let A=Pe[e];!ds.has(e)&&A!==this.midiControllers[e]&&(e===p.portamentoControl?this.midiControllers[e]=Bn:this.controllerChange(e,A>>7))}this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}function Qo(){this.dataEntryState=HA.Idle,this.midiControllers[p.NRPNLsb]=16256,this.midiControllers[p.NRPNMsb]=16256,this.midiControllers[p.RPNLsb]=16256,this.midiControllers[p.RPNMsb]=16256,this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}var pt=class{soundfontList=[];presetList=[];constructor(A){this.presetListChangeCallback=A}generatePresetList(){let A={};for(let t=this.soundfontList.length-1;t>=0;t--){let n=this.soundfontList[t],s=new Set;for(let r of n.soundfont.presets){let a=`${Math.min(128,r.bank+n.bankOffset)}-${r.program}`;s.has(a)||(s.add(a),A[a]=r.presetName)}}this.presetList=[];for(let[t,n]of Object.entries(A)){let s=t.split("-");this.presetList.push({presetName:n,program:parseInt(s[1]),bank:parseInt(s[0])})}this.presetListChangeCallback()}getPresetList(){return this.presetList.slice()}reloadManager(A){this.soundfontList=this.soundfontList.filter(t=>t.id===At),this.soundfontList.push({id:"main",bankOffset:0,soundfont:A}),this.generatePresetList()}deleteSoundFont(A){if(this.soundfontList.length===0){P("1 soundfont left. Aborting!");return}let t=this.soundfontList.findIndex(n=>n.id===A);if(t===-1){y(`No soundfont with id of "${A}" found. Aborting!`);return}delete this.soundfontList[t].soundfont.presets,delete this.soundfontList[t].soundfont.instruments,delete this.soundfontList[t].soundfont.samples,this.soundfontList.splice(t,1),this.generatePresetList()}addNewSoundFont(A,t,n){if(this.soundfontList.find(s=>s.id===t)!==void 0){let s=this.soundfontList.find(r=>r.id===t);s.soundfont=A,s.bankOffset=n}else this.soundfontList.push({id:t,soundfont:A,bankOffset:n});this.generatePresetList()}getCurrentSoundFontOrder(){return this.soundfontList.map(A=>A.id)}rearrangeSoundFonts(A){this.soundfontList.sort((t,n)=>A.indexOf(t.id)-A.indexOf(n.id)),this.generatePresetList()}getPreset(A,t,n=!1){if(this.soundfontList.length<1)throw new Error("No soundfonts! Did you forget to add one?");let s=A===128||n&&ne(A);for(let r of this.soundfontList){let i=r.soundfont.getPresetNoFallback(A===128?128:A-r.bankOffset,t,n);if(i!==void 0)return{preset:i,bankOffset:r.bankOffset}}if(s){for(let i of this.soundfontList){let a=i.soundfont.presets.find(I=>I.isDrumPreset(n)&&I.program===t);if(a)return{preset:a,bankOffset:i.bankOffset};let o=i.soundfont.presets.find(I=>I.isDrumPreset(n));if(o)return{preset:o,bankOffset:i.bankOffset}}let r=this.soundfontList[0];return{preset:r.soundfont.presets[0],bankOffset:r.bankOffset}}else{for(let i of this.soundfontList){let a=i.soundfont.presets.find(o=>o.program===t&&!o.isDrumPreset(n));if(a)return{preset:a,bankOffset:i.bankOffset}}let r=this.soundfontList[0];return{preset:r.soundfont.presets[0],bankOffset:r.bankOffset}}}destroyManager(){this.soundfontList.forEach(A=>{A.soundfont.destroySoundBank()}),delete this.soundfontList}};var dn=class{_keyMappings=[];addMapping(A,t,n){this._keyMappings[A]===void 0&&(this._keyMappings[A]=[]),this._keyMappings[A][t]=n}deleteMapping(A,t){this._keyMappings[A]?.[t]!==void 0&&(this._keyMappings[A][t]=void 0)}clearMappings(){this._keyMappings=[]}setMappings(A){this._keyMappings=A}getMappings(){return this._keyMappings}getVelocity(A,t){return this._keyMappings[A]?.[t]?.velocity??-1}getGain(A,t){return this._keyMappings[A]?.[t]?.gain??1}hasOverridePatch(A,t){let n=this._keyMappings[A]?.[t]?.patch?.bank;return n!==void 0&&n>=0}getPatch(A,t){let n=this._keyMappings[A]?.[t];if(n)return n.patch;throw new Error("No modifier.")}};var fo=.1,Ke=class e{static cachedCoefficients=[];a0=0;a1=0;a2=0;a3=0;a4=0;x1=0;x2=0;y1=0;y2=0;resonanceCb=0;currentInitialFc=13500;lastTargetCutoff=1/0;initialized=!1;sampleRate;constructor(A){this.sampleRate=A,this.maxCutoff=A*.45}static apply(A,t,n,s){let r=A.modulatedGenerators[g.initialFilterFc],i=A.filter;i.initialized?i.currentInitialFc+=(r-i.currentInitialFc)*s:(i.initialized=!0,i.currentInitialFc=r);let a=i.currentInitialFc+n,o=A.modulatedGenerators[g.initialFilterQ];if(i.currentInitialFc>13499&&a>13499&&o===0){i.currentInitialFc=13500;return}(Math.abs(i.lastTargetCutoff-a)>1||i.resonanceCb!==o)&&(i.lastTargetCutoff=a,i.resonanceCb=o,e.calculateCoefficients(i,a));for(let I=0;I<t.length;I++){let B=t[I],C=i.a0*B+i.a1*i.x1+i.a2*i.x2-i.a3*i.y1-i.a4*i.y2;i.x2=i.x1,i.x1=B,i.y2=i.y1,i.y1=C,t[I]=C}}static calculateCoefficients(A,t){t=~~t;let n=A.resonanceCb,s=e.cachedCoefficients?.[n]?.[t];if(s!==void 0){A.a0=s.a0,A.a1=s.a1,A.a2=s.a2,A.a3=s.a3,A.a4=s.a4;return}let r=Jt(t);r=Math.min(r,A.maxCutoff);let i=n/10,a=Ee(-(i-3.01)),o=1/Math.sqrt(Ee(-i)),I=2*Math.PI*r/A.sampleRate,B=Math.cos(I),C=Math.sin(I)/(2*a),h=(1-B)*o,l=h/2,u=l,f=1+C,S=-2*B,R=1-C,D={};D.a0=l/f,D.a1=h/f,D.a2=u/f,D.a3=S/f,D.a4=R/f,A.a0=D.a0,A.a1=D.a1,A.a2=D.a2,A.a3=D.a3,A.a4=D.a4,e.cachedCoefficients[n]===void 0&&(e.cachedCoefficients[n]=[]),e.cachedCoefficients[n][t]=D}},Qs=new Ke(44100);Qs.resonanceCb=0;for(let e=1500;e<13500;e++)Qs.currentInitialFc=e,Ke.calculateCoefficients(Qs,e);var LA=16384,xe=new Float32Array(LA+1),tt=new Float32Array(LA+1);xe[0]=0;xe[xe.length-1]=1;tt[0]=0;tt[tt.length-1]=1;for(let e=1;e<LA-1;e++){let A=-.4166666666666667*Math.log(e/(xe.length-1))/Math.LN10;tt[e]=1-A,xe[xe.length-1-e]=A}function nt(e,A,t,n){switch(e&&(t=1-t),A){case wA.linear:return n?t*2-1:t;case wA.switch:return t=t>.5?1:0,n?t*2-1:t;case wA.concave:return n?(t=t*2-1,t<0?-xe[~~(t*-LA)]:xe[~~(t*LA)]):xe[~~(t*LA)];case wA.convex:return n?(t=t*2-1,t<0?-tt[~~(t*-LA)]:tt[~~(t*LA)]):tt[~~(t*LA)]}}var fs=1,us=new Float32Array(1e3);for(let e=0;e<us.length;e++)us[e]=nt(0,wA.convex,e/1e3,0);var de=class e{attackDuration=0;decayDuration=0;holdDuration=0;releaseDuration=0;sustainLevel=0;delayEnd=0;attackEnd=0;holdEnd=0;decayEnd=0;releaseStartLevel=0;currentValue=0;static startRelease(A){e.recalculate(A)}static recalculate(A){let t=A.modulationEnvelope;A.isInRelease&&(t.releaseStartLevel=e.getValue(A,A.releaseStartTime,!0)),t.sustainLevel=1-A.modulatedGenerators[g.sustainModEnv]/1e3,t.attackDuration=le(A.modulatedGenerators[g.attackModEnv]);let n=(60-A.midiNote)*A.modulatedGenerators[g.keyNumToModEnvDecay],s=le(A.modulatedGenerators[g.decayModEnv]+n);t.decayDuration=s*(1-t.sustainLevel);let r=(60-A.midiNote)*A.modulatedGenerators[g.keyNumToModEnvHold];t.holdDuration=le(r+A.modulatedGenerators[g.holdModEnv]);let i=le(A.modulatedGenerators[g.releaseModEnv]);t.releaseDuration=i*t.releaseStartLevel,t.delayEnd=A.startTime+le(A.modulatedGenerators[g.delayModEnv]),t.attackEnd=t.delayEnd+t.attackDuration,t.holdEnd=t.attackEnd+t.holdDuration,t.decayEnd=t.holdEnd+t.decayDuration}static getValue(A,t,n=!1){let s=A.modulationEnvelope;return A.isInRelease&&!n?s.releaseStartLevel===0?0:Math.max(0,(1-(t-A.releaseStartTime)/s.releaseDuration)*s.releaseStartLevel):(t<s.delayEnd?s.currentValue=0:t<s.attackEnd?s.currentValue=us[~~((1-(s.attackEnd-t)/s.attackDuration)*1e3)]:t<s.holdEnd?s.currentValue=fs:t<s.decayEnd?s.currentValue=(1-(s.decayEnd-t)/s.decayDuration)*(s.sustainLevel-fs)+fs:s.currentValue=s.sustainLevel,s.currentValue)}};var ke=4,Y=class{generatorType=g.INVALID;generatorValue=0;constructor(A=g.INVALID,t=0,n=!0){if(this.generatorType=A,t===void 0)throw new Error("No value provided.");if(this.generatorValue=Math.round(t),n){let s=X[A];s!==void 0&&(this.generatorValue=Math.max(s.min,Math.min(s.max,this.generatorValue)))}}};function uo(e,A,t){let n=X[e]||{min:0,max:32768,def:0},s=A.find(o=>o.generatorType===e),r=0;s&&(r=s.generatorValue);let i=t.find(o=>o.generatorType===e),a=n.def;return i&&(a=i.generatorValue),a+r}var Li=-2320,Ti=-1130,Qn=class{sampleData;playbackStep=0;cursor=0;rootKey=0;loopStart=0;loopEnd=0;end=0;loopingMode=0;isLooping=!1;constructor(A,t,n,s,r,i,a,o){this.sampleData=A,this.playbackStep=t,this.cursor=n,this.rootKey=s,this.loopStart=r,this.loopEnd=i,this.end=a,this.loopingMode=o,this.isLooping=this.loopingMode===1||this.loopingMode===3}},qt=class e{sample;filter;gain=1;generators;modulators=[];modulatedGenerators;finished=!1;isInRelease=!1;velocity=0;midiNote=0;pressure=0;targetKey=0;modulationEnvelope=new de;volumeEnvelope;startTime=0;releaseStartTime=1/0;currentTuningCents=0;currentTuningCalculated=1;currentPan=0;realKey;portamentoFromKey=-1;portamentoDuration=0;overridePan=0;exclusiveClass=0;constructor(A,t,n,s,r,i,a,o,I){this.sample=t,this.generators=o,this.exclusiveClass=this.generators[g.exclusiveClass],this.modulatedGenerators=new Int16Array(o),this.modulators=I,this.filter=new Ke(A),this.velocity=s,this.midiNote=n,this.startTime=r,this.targetKey=i,this.realKey=a,this.volumeEnvelope=new Be(A,o[g.sustainVolEnv])}static copy(A,t,n){let s=A.sample,r=new Qn(s.sampleData,s.playbackStep,s.cursor,s.rootKey,s.loopStart,s.loopEnd,s.end,s.loopingMode);return new e(A.volumeEnvelope.sampleRate,r,A.midiNote,A.velocity,t,A.targetKey,n,new Int16Array(A.generators),A.modulators.map(i=>hA.copy(i)))}exclusiveRelease(A){this.release(A,So),this.modulatedGenerators[g.releaseVolEnv]=Li,this.modulatedGenerators[g.releaseModEnv]=Ti,Be.recalculate(this),de.recalculate(this)}release(A,t=yo){this.releaseStartTime=A,this.releaseStartTime-this.startTime<t&&(this.releaseStartTime=this.startTime+t)}};function mo(e,A,t,n,s,r){let i=e.getSamplesAndGenerators(n,s).reduce((a,o)=>{if(o.sample.getAudioData()===void 0)return P(`Discarding invalid sample: ${o.sample.sampleName}`),a;let I=new Int16Array(Pt);for(let S=0;S<60;S++)I[S]=uo(S,o.presetGenerators,o.instrumentGenerators);I[g.initialAttenuation]=Math.floor(I[g.initialAttenuation]*.4);let B=o.sample.samplePitch;I[g.overridingRootKey]>-1&&(B=I[g.overridingRootKey]);let C=n;I[g.keyNum]>-1&&(C=I[g.keyNum]);let h=o.sample.sampleLoopStartIndex,l=o.sample.sampleLoopEndIndex,u=I[g.sampleModes],f=new Qn(o.sample.sampleData,o.sample.sampleRate/this.sampleRate*Math.pow(2,o.sample.samplePitchCorrection/1200),0,B,h,l,Math.floor(o.sample.sampleData.length)-1,u);return I[g.velocity]>-1&&(s=I[g.velocity]),a.push(new qt(this.sampleRate,f,n,s,this.currentSynthTime,C,r,I,o.modulators.map(S=>hA.copy(S)))),a},[]);return this.setCachedVoice(A,t,n,s,i),i.map(a=>qt.copy(a,this.currentSynthTime,r))}function po(e,A,t,n){let s=this.midiAudioChannels[e],r=this.keyModifierManager.hasOverridePatch(e,A),i=s.getBankSelect(),a=s.preset.program;if(r){let B=this.keyModifierManager.getPatch(e,A);i=B.bank,a=B.program}let o=this.getCachedVoice(i,a,A,t);if(o!==void 0)return o.map(B=>qt.copy(B,this.currentSynthTime,n));let I=s.preset;return r&&(I=this.getPreset(i,a)),this.getVoicesForPreset(I,i,a,A,t,n)}var ko=.05,Ui=3070,vi=2e3,Do=Math.PI/2,fn=-500,Fo=500,ms=Fo-fn,wo=new Float32Array(ms+1),Ro=new Float32Array(ms+1);for(let e=fn;e<=Fo;e++){let A=(e-fn)/ms,t=e-fn;wo[t]=Math.cos(Do*A),Ro[t]=Math.sin(Do*A)}function Go(e,A,t,n,s,r,i,a){if(isNaN(A[0]))return;let o;e.overridePan?o=e.overridePan:(e.currentPan+=(e.modulatedGenerators[g.pan]-e.currentPan)*this.synth.panSmoothingFactor,o=e.currentPan);let I=this.synth.currentGain*e.gain,B=~~(o+500),C=wo[B]*I*this.synth.panLeft,h=Ro[B]*I*this.synth.panRight;if(this.synth.effectsEnabled){let l=e.modulatedGenerators[g.reverbEffectsSend];if(l>0){let f=this.synth.reverbGain*this.synth.reverbSend*I*(l/Ui);for(let S=0;S<A.length;S++)s[S]+=f*A[S];r.set(s)}let u=e.modulatedGenerators[g.chorusEffectsSend];if(u>0){let f=this.synth.chorusGain*this.synth.chorusSend*(u/vi),S=C*f,R=h*f;for(let D=0;D<A.length;D++)i[D]+=S*A[D],a[D]+=R*A[D]}}if(C>0)for(let l=0;l<A.length;l++)t[l]+=C*A[l];if(h>0)for(let l=0;l<A.length;l++)n[l]+=h*A[l]}function Mo(e=!1){y("%cStop all received!",c.info);for(let A=0;A<this.midiAudioChannels.length;A++)this.midiAudioChannels[A].stopAllNotes(e);this.callEvent("stopall",void 0)}function U(e,A){let t=0;for(let n=0;n<A;n++)t|=e[e.currentIndex++]<<n*8;return t>>>0}function Ce(e,A,t){for(let n=0;n<t;n++)e[e.currentIndex++]=A>>n*8&255}function v(e,A){e[e.currentIndex++]=A&255,e[e.currentIndex++]=A>>8}function sA(e,A){Ce(e,A,4)}function qe(e,A){let t=A<<8|e;return t>32767?t-65536:t}function xo(e){return e>127?e-256:e}var cA=class{constructor(A,t,n){this.header=A,this.size=t,this.chunkData=n}};function tA(e,A=!0,t=!1){let n=eA(e,4),s=U(e,4),r;return A&&(r=e.slice(e.currentIndex,e.currentIndex+s)),(A||t)&&(e.currentIndex+=s),s%2!==0&&e[e.currentIndex]===0&&e.currentIndex++,new cA(n,s,r)}function CA(e,A=void 0){let t=8+e.size;e.size%2!==0&&t++,A&&(t+=A.length);let n=new N(t);return A&&(n.set(A,n.currentIndex),n.currentIndex+=A.length),FA(n,e.header),sA(n,t-8-(A?.length||0)),n.set(e.chunkData,n.currentIndex),n}function j(e,A,t=!1,n=!1){if(t){let I=new Uint8Array(A.length+1);I.set(A),A=I}let s=8,r=s+A.length,i=A.length;r%2!==0&&r++;let a=e;n&&(r+=4,i+=4,s+=4,a="LIST");let o=new N(r);return FA(o,a),sA(o,i),n&&FA(o,e),o.set(A,s),o}function zA(e,A){return e.find(t=>t.header!=="LIST"?!1:(t.chunkData.currentIndex=0,eA(t.chunkData,4)===A))}function No(){let e=ke;for(let i of this.instruments)e+=i.globalZone.generators.length*ke,e+=i.instrumentZones.reduce((a,o)=>(o.generators=o.generators.filter(I=>I.generatorType!==g.sampleID&&I.generatorType!==g.keyRange&&I.generatorType!==g.velRange),o.hasVelRange&&o.prependGenerator(new Y(g.velRange,o.velRange.max<<8|Math.max(o.velRange.min,0),!1)),o.hasKeyRange&&o.prependGenerator(new Y(g.keyRange,o.keyRange.max<<8|Math.max(o.keyRange.min,0),!1)),o.addGenerators(new Y(g.sampleID,this.samples.indexOf(o.sample),!1)),o.generators.length*ke+a),0);let A=new N(e),t=i=>{for(let a of i.generators)v(A,a.generatorType),v(A,a.generatorValue)};for(let i of this.instruments){t(i.globalZone);for(let a of i.instrumentZones)t(a)}sA(A,0);let n=new N(ke);sA(n,0);let s=CA(new cA("igen",A.length,A)),r=CA(new cA("igen",n.length,n));return{pdta:s,xdta:r,highestIndex:0}}function bo(e,A,t,n,s){let r=this.samples.map((I,B)=>{t&&I.compressSample(n,s);let C=I.getRawData();return y(`%cEncoded sample %c${B}. ${I.sampleName}%c of %c${this.samples.length}%c. Compressed: %c${I.isCompressed}%c.`,c.info,c.recognized,c.info,c.recognized,c.info,I.isCompressed?c.recognized:c.unrecognized,c.info),C}),i=this.samples.reduce((I,B,C)=>I+r[C].length+46,0),a=new N(i);this.samples.forEach((I,B)=>{let C=r[B],h,l,u=C.length;I.isCompressed?(h=a.currentIndex,l=h+C.length):(h=a.currentIndex/2,l=h+C.length/2,u+=46),e.push(h),a.set(C,a.currentIndex),a.currentIndex+=u,A.push(l)});let o=CA(new cA("smpl",a.length,a),new N([115,100,116,97]));return CA(new cA("LIST",o.length,o))}var Hi=48e3,OA={monoSample:1,rightSample:2,leftSample:4,linkedSample:8,romMonoSample:32769,romRightSample:32770,romLeftSample:32772,romLinkedSample:32776},Ne=class{sampleName;sampleRate;samplePitch;samplePitchCorrection;linkedSample;sampleType;sampleLoopStartIndex;sampleLoopEndIndex;isCompressed;compressedData=void 0;linkedInstruments=[];sampleData=void 0;dataOverriden=!1;constructor(A,t,n,s,r,i,a){this.sampleName=A,this.sampleRate=t,this.samplePitch=n,this.samplePitchCorrection=s,this.sampleLoopStartIndex=i,this.sampleLoopEndIndex=a,this.sampleType=r}get isLinked(){return this.sampleType===OA.rightSample||this.sampleType===OA.leftSample||this.sampleType===OA.linkedSample}get useCount(){return this.linkedInstruments.length}getRawData(A=!0){return this.encodeS16LE()}resampleData(A){let t=this.getAudioData(),n=A/this.sampleRate,s=new Float32Array(Math.floor(t.length*n));for(let r=0;r<s.length;r++)s[r]=t[Math.floor(r*(1/n))];t=s,this.sampleRate=A,this.sampleLoopStartIndex=Math.floor(this.sampleLoopStartIndex*n),this.sampleLoopEndIndex=Math.floor(this.sampleLoopEndIndex*n),this.sampleData=t}compressSample(A,t){if(!this.isCompressed)try{let n=this.getAudioData();(this.sampleRate<8e3||this.sampleRate>96e3)&&(this.resampleData(Hi),n=this.getAudioData()),this.compressedData=t([n],1,this.sampleRate,A),this.isCompressed=!0,this.dataOverriden=!1}catch{P(`Failed to compress ${this.sampleName}. Leaving as uncompressed!`),delete this.compressedData,this.isCompressed=!1}}setSampleType(A){if(this.sampleType=A,this.isLinked||(this.linkedSample&&(this.linkedSample.linkedSample=void 0,this.linkedSample.sampleType=A),this.linkedSample=void 0),(A&32768)>0)throw new Error("ROM samples are not supported.")}deleteSample(){if(this.useCount>0)throw new Error(`Cannot delete sample that has ${this.useCount} usages.`);this.unlinkSample()}unlinkSample(){this.setSampleType(OA.monoSample)}setLinkedSample(A,t){if(this.linkedSample=A,A.linkedSample=this,t===OA.leftSample)this.setSampleType(OA.leftSample),A.setSampleType(OA.rightSample);else if(t===OA.rightSample)this.setSampleType(OA.rightSample),A.setSampleType(OA.leftSample);else if(t===OA.linkedSample)this.setSampleType(OA.linkedSample),A.setSampleType(OA.linkedSample);else throw new Error("Invalid sample type: "+t)}linkTo(A){this.linkedInstruments.push(A)}unlinkFrom(A){let t=this.linkedInstruments.indexOf(A);if(t<0)throw new Error(`Cannot unlink ${A.instrumentName} from ${this.sampleName}: not linked.`);this.linkedInstruments.splice(t,1)}getAudioData(){if(!this.sampleData)throw new Error("Error! Sample data is undefined. Is the method overriden properly?");return this.sampleData}encodeS16LE(){let A=this.getAudioData(),t=new Int16Array(A.length);for(let n=0;n<A.length;n++)t[n]=A[n]*32768;return new N(t.buffer)}setAudioData(A){this.isCompressed=!1,delete this.compressedData,this.sampleData=A,this.dataOverriden=!0}};var un=16,ps=class extends Ne{linkedSampleIndex;sf2FileArrayHandle;s16leStart=0;s16leEnd=0;constructor(A,t,n,s,r,i,a,o,I,B,C,h){let l=(B&un)>0;B&=~un,super(A,i,a,o,B,s-t/2,r-t/2),this.isCompressed=l,this.sampleName=A,this.sampleStartIndex=t,this.sampleEndIndex=n,this.sampleID=h,this.sampleLength=this.sampleEndIndex-this.sampleStartIndex;let u=C.currentIndex;this.isCompressed?(this.sampleLoopStartIndex+=this.sampleStartIndex/2,this.sampleLoopEndIndex+=this.sampleStartIndex/2,this.sampleLength=99999999,this.compressedData=C.slice(this.sampleStartIndex/2+u,this.sampleEndIndex/2+u)):C instanceof Float32Array?this.sampleData=C.slice(this.sampleStartIndex/2,this.sampleEndIndex/2):(this.s16leStart=u+this.sampleStartIndex,this.s16leEnd=u+this.sampleEndIndex,this.sf2FileArrayHandle=C),this.linkedSampleIndex=I}getLinkedSample(A){if(this.linkedSample||!this.isLinked)return;A[this.linkedSampleIndex]?this.setLinkedSample(A[this.linkedSampleIndex],this.sampleType):(P(`Invalid linked sample for ${this.sampleName}. Setting to mono.`),this.setSampleType(OA.monoSample))}decodeVorbis(){if(this.sampleData)return this.sampleData;if(this.sampleLength<1)return new Float32Array(0);try{let t=De.decode(this.compressedData).data[0];if(t===void 0)return P(`Error decoding sample ${this.sampleName}: Vorbis decode returned undefined.`),new Float32Array(0);for(let n=0;n<t.length;n++)t[n]=Math.max(-1,Math.min(t[n],.999969482421875));return t}catch(A){return P(`Error decoding sample ${this.sampleName}: ${A}`),new Float32Array(this.sampleLoopEndIndex+1)}}setAudioData(A){super.setAudioData(A)}getAudioData(){if(this.sampleData)return this.sampleData;if(this.sampleLength<1)return P(`Invalid sample ${this.sampleName}! Invalid length: ${this.sampleLength}`),new Float32Array(1);if(this.isCompressed)return this.sampleData=this.decodeVorbis(),this.sampleData;let A=new Float32Array(this.sampleLength/2),t=new Int16Array(this.sf2FileArrayHandle.buffer.slice(this.s16leStart,this.s16leEnd));for(let n=0;n<t.length;n++)A[n]=t[n]/32768;return this.sampleData=A,A}getRawData(A=!0){return this.dataOverriden?this.encodeS16LE():this.compressedData&&A?this.compressedData:this.sf2FileArrayHandle.slice(this.s16leStart,this.s16leEnd)}};function ys(e,A,t=!0){let n=[],s=0;for(;e.chunkData.length>e.chunkData.currentIndex;){let r=Oi(s,e.chunkData,A);n.push(r),s++}return n.pop(),t&&n.forEach(r=>r.getLinkedSample(n)),n}function Oi(e,A,t){let n=eA(A,20),s=U(A,4)*2,r=U(A,4)*2,i=U(A,4),a=U(A,4),o=U(A,4),I=A[A.currentIndex++];I>127&&(I=60);let B=xo(A[A.currentIndex++]),C=U(A,2),h=U(A,2);return new ps(n,s,r,i,a,o,I,B,C,h,t,e)}function Lo(e,A){let n=46*(this.samples.length+1),s=new N(n),r=new N(n),i=0;this.samples.forEach((I,B)=>{FA(s,I.sampleName.substring(0,20),20),FA(r,I.sampleName.substring(20),20);let C=e[B];sA(s,C),r.currentIndex+=4;let h=A[B];sA(s,h),r.currentIndex+=4;let l=I.sampleLoopStartIndex+C,u=I.sampleLoopEndIndex+C;I.isCompressed&&(l-=C,u-=C),sA(s,l),sA(s,u),sA(s,I.sampleRate),s[s.currentIndex++]=I.samplePitch,s[s.currentIndex++]=I.samplePitchCorrection,r.currentIndex+=14;let f=this.samples.indexOf(I.linkedSample);v(s,Math.max(0,f)&65535),v(r,Math.max(0,f)>>16),i=Math.max(i,f);let S=I.sampleType;I.isCompressed&&(S|=un),v(s,S),r.currentIndex+=2}),FA(s,"EOS",46),FA(r,"EOS",46);let a=CA(new cA("shdr",s.length,s)),o=CA(new cA("shdr",r.length,r));return{pdta:a,xdta:o,highestIndex:i}}function To(){let e=vA;for(let i of this.instruments)e+=i.globalZone.modulators.length*vA,e+=i.instrumentZones.reduce((a,o)=>o.modulators.length*vA+a,0);let A=new N(e),t=i=>{for(let a of i.modulators)v(A,a.getSourceEnum()),v(A,a.modulatorDestination),v(A,a.transformAmount),v(A,a.getSecSrcEnum()),v(A,a.transformType)};for(let i of this.instruments){t(i.globalZone);for(let a of i.instrumentZones)t(a)}Ce(A,0,vA);let n=new N(vA);Ce(n,0,vA);let s=CA(new cA("imod",A.length,A)),r=CA(new cA("imod",n.length,n));return{pdta:s,xdta:r,highestIndex:0}}var Uo=4;function vo(){let e=this.instruments.reduce((o,I)=>(I.instrumentZones.length+1)*Uo+o,Uo),A=new N(e),t=new N(e),n=0,s=0,r=o=>{v(A,n&65535),v(A,s&65535),v(t,n>>16),v(t,s>>16),n+=o.generators.length,s+=o.modulators.length};for(let o of this.instruments){r(o.globalZone);for(let I of o.instrumentZones)r(I)}v(A,n&65535),v(A,s&65535),v(t,n>>16),v(t,s>>16);let i=CA(new cA("ibag",A.length,A)),a=CA(new cA("ibag",t.length,t));return{pdta:i,xdta:a,highestIndex:Math.max(n,s)}}var Ho=22;function Oo(){let e=this.instruments.length*Ho+Ho,A=new N(e),t=new N(e),n=0;for(let i of this.instruments)FA(A,i.instrumentName.substring(0,20),20),FA(t,i.instrumentName.substring(20),20),v(A,n&65535),v(t,n>>16),n+=i.instrumentZones.length+1;FA(A,"EOI",20),FA(t,"EOI",20),v(A,n&65535),v(t,n>>16);let s=CA(new cA("inst",A.length,A)),r=CA(new cA("inst",t.length,t));return{pdta:s,xdta:r,highestIndex:n}}function Yo(){let e=ke;for(let i of this.presets)e+=i.globalZone.generators.length*ke,e+=i.presetZones.reduce((a,o)=>(o.generators=o.generators.filter(I=>I.generatorType!==g.instrument&&I.generatorType!==g.keyRange&&I.generatorType!==g.velRange),o.hasVelRange&&o.prependGenerator(new Y(g.velRange,o.velRange.max<<8|Math.max(o.velRange.min,0),!1)),o.hasKeyRange&&o.prependGenerator(new Y(g.keyRange,o.keyRange.max<<8|Math.max(o.keyRange.min,0),!1)),o.addGenerators(new Y(g.instrument,this.instruments.indexOf(o.instrument),!1)),o.generators.length*ke+a),0);let A=new N(e),t=i=>{for(let a of i.generators)v(A,a.generatorType),v(A,a.generatorValue)};for(let i of this.presets){t(i.globalZone);for(let a of i.presetZones)t(a)}sA(A,0);let n=new N(ke);sA(n,0);let s=CA(new cA("pgen",A.length,A)),r=CA(new cA("pgen",n.length,n));return{pdta:s,xdta:r,highestIndex:0}}function Jo(){let e=vA;for(let i of this.presets)e+=i.globalZone.modulators.length*vA,e+=i.presetZones.reduce((a,o)=>o.modulators.length*vA+a,0);let A=new N(e),t=i=>{for(let a of i.modulators)v(A,a.getSourceEnum()),v(A,a.modulatorDestination),v(A,a.transformAmount),v(A,a.getSecSrcEnum()),v(A,a.transformType)};for(let i of this.presets){t(i.globalZone);for(let a of i.presetZones)t(a)}Ce(A,0,vA);let n=new N(vA);Ce(n,0,vA);let s=CA(new cA("pmod",A.length,A)),r=CA(new cA("pmod",n.length,n));return{pdta:s,xdta:r,highestIndex:0}}var Po=4;function Ko(){let e=this.presets.reduce((o,I)=>(I.presetZones.length+1)*Po+o,Po),A=new N(e),t=new N(e),n=0,s=0,r=o=>{v(A,n&65535),v(A,s&65535),v(t,n>>16),v(t,s>>16),n+=o.generators.length,s+=o.modulators.length};for(let o of this.presets){r(o.globalZone);for(let I of o.presetZones)r(I)}v(A,n),v(A,s),v(t,n),v(t,s);let i=CA(new cA("pbag",A.length,A)),a=CA(new cA("pbag",t.length,t));return{pdta:i,xdta:a,highestIndex:Math.max(n,s)}}var qo=38;function Vo(){let e=this.presets.length*qo+qo,A=new N(e),t=new N(e),n=0;for(let i of this.presets)FA(A,i.presetName.substring(0,20),20),FA(t,i.presetName.substring(20),20),v(A,i.program),v(A,i.bank),v(A,n&65535),t.currentIndex+=4,v(t,n>>16),sA(A,i.library),sA(A,i.genre),sA(A,i.morphology),t.currentIndex+=12,n+=i.presetZones.length+1;FA(A,"EOP",20),A.currentIndex+=4,v(A,n&65535),A.currentIndex+=12,FA(t,"EOP",20),t.currentIndex+=4,v(t,n>>16),t.currentIndex+=12;let s=CA(new cA("phdr",A.length,A)),r=CA(new cA("phdr",t.length,t));return{pdta:s,xdta:r,highestIndex:n}}function mn(e,A){e===void 0&&(e={});for(let t in A)A.hasOwnProperty(t)&&!(t in e)&&(e[t]=A[t]);return e}var Zo={compress:!1,compressionQuality:.5,compressionFunction:void 0,writeDefaultModulators:!0,writeExtendedLimits:!0};function Xo(e=Zo){if(e=mn(e,Zo),e.compress&&typeof e.compressionFunction!="function")throw new TypeError("No compression function supplied but compression enabled.");fA("%cSaving soundfont...",c.info),y(`%cCompression: %c${e?.compress||"false"}%c quality: %c${e?.compressionQuality||"none"}`,c.info,c.recognized,c.info,c.recognized),y("%cWriting INFO...",c.info);let A=[];this.soundFontInfo.ISFT="SpessaSynth",e?.compress&&(this.soundFontInfo.ifil="3.0"),e?.writeDefaultModulators?(this.soundFontInfo.DMOD=`${this.defaultModulators.length} Modulators`,this.customDefaultModulators=!0):delete this.soundFontInfo.DMOD;for(let[E,L]of Object.entries(this.soundFontInfo))if(E==="ifil"||E==="iver"){let b=parseInt(L.split(".")[0]),$=parseInt(L.split(".")[1]),AA=new N(4);v(AA,b),v(AA,$),A.push(CA(new cA(E,4,AA)))}else if(E==="DMOD"){let b=this.defaultModulators;y(`%cWriting %c${b.length}%c default modulators...`,c.info,c.recognized,c.info);let $=vA+b.length*vA,AA=new N($);for(let K of b)v(AA,K.getSourceEnum()),v(AA,K.modulatorDestination),v(AA,K.transformAmount),v(AA,K.getSecSrcEnum()),v(AA,K.transformType);Ce(AA,0,vA),A.push(CA(new cA(E,AA.length,AA)))}else{let b=new N(L.length+1);FA(b,L),A.push(CA(new cA(E,b.length,b)))}y("%cWriting SDTA...",c.info);let t=[],n=[],s=bo.call(this,t,n,e?.compress,e?.compressionQuality??.5,e.compressionFunction);y("%cWriting PDTA...",c.info),y("%cWriting SHDR...",c.info);let r=Lo.call(this,t,n);y("%cWriting IGEN...",c.info);let i=No.call(this);y("%cWriting IMOD...",c.info);let a=To.call(this);y("%cWriting IBAG...",c.info);let o=vo.call(this);y("%cWriting INST...",c.info);let I=Oo.call(this),B=Yo.call(this);y("%cWriting PMOD...",c.info);let C=Jo.call(this);y("%cWriting PBAG...",c.info);let h=Ko.call(this);y("%cWriting PHDR...",c.info);let u=[Vo.call(this),h,C,B,I,o,a,i,r],f=kA([new N([112,100,116,97]),...u.map(E=>E.pdta)]),S=CA(new cA("LIST",f.length,f)),R=Math.max(...u.map(E=>E.highestIndex));if(e.writeExtendedLimits&&(R>4095||this.presets.some(E=>E.presetName.length>20)||this.instruments.some(E=>E.instrumentName.length>20)||this.samples.some(E=>E.sampleName.length>20))){y(`%cWriting the xdta chunk! Max index: %c${R}`,c.info,c.value);let E=kA([new N([120,100,116,97]),...u.map(b=>b.xdta)]),L=CA(new cA("LIST",E.length,E));A.push(L)}let x=j("INFO",kA(A),!1,!0);y("%cWriting the output file...",c.info);let J=kA([new N([115,102,98,107]),x,s,S]),H=CA(new cA("RIFF",J.length,J));return y(`%cSaved succesfully! Final file size: %c${H.length}`,c.info,c.recognized),Z(),H}var Ve=class{velRange={min:-1,max:127};keyRange={min:-1,max:127};generators=[];modulators=[];get hasKeyRange(){return this.keyRange.min!==-1}get hasVelRange(){return this.velRange.min!==-1}prependGenerator(A){this.generators.unshift(A)}setGenerator(A,t){switch(A){case g.sampleID:throw new Error("Use setSample()");case g.instrument:throw new Error("Use setInstrument()");case g.velRange:case g.keyRange:throw new Error("Set the range manually")}let n=this.generators.find(s=>s.generatorType===A);n?n.generatorValue=t:this.addGenerators(new Y(A,t))}addGenerators(...A){A.forEach(t=>{switch(t.generatorType){default:this.generators.push(t);break;case g.velRange:this.velRange.min=t.generatorValue&127,this.velRange.max=t.generatorValue>>8&127;break;case g.keyRange:this.keyRange.min=t.generatorValue&127,this.keyRange.max=t.generatorValue>>8&127}})}addModulators(...A){this.modulators.push(...A)}getGeneratorValue(A,t){return this.generators.find(n=>n.generatorType===A)?.generatorValue??t}copyFrom(A){this.generators=[...A.generators],this.modulators=[...A.modulators],this.velRange={...A.velRange},this.keyRange={...A.keyRange}}};var Ze=class extends Ve{};var be=class e extends Ve{parentInstrument;sample;useCount;constructor(A){super(),this.parentInstrument=A,this.useCount=A.useCount}setSample(A){this.sample=A,A.linkTo(this.parentInstrument)}deleteZone(){this.sample.unlinkFrom(this.parentInstrument)}copyFrom(A){super.copyFrom(A),A instanceof e&&(this.sample=A.sample)}};var Qe=class{instrumentName="";instrumentZones=[];globalZone=new Ze;linkedPresets=[];get useCount(){return this.linkedPresets.length}createZone(){let A=new be(this);return this.instrumentZones.push(A),A}linkTo(A){this.linkedPresets.push(A),this.instrumentZones.forEach(t=>t.useCount++)}unlinkFrom(A){let t=this.linkedPresets.indexOf(A);if(t<0)throw new Error(`Cannot unlink ${A.presetName} from ${this.instrumentName}: not linked.`);this.linkedPresets.splice(t,1),this.instrumentZones.forEach(n=>n.useCount--)}deleteUnusedZones(){this.instrumentZones=this.instrumentZones.filter(A=>{let t=A.useCount>0;return t||A.deleteZone(),t})}deleteInstrument(){if(this.useCount>0)throw new Error(`Cannot delete an instrument that has ${this.useCount} usages.`);this.instrumentZones.forEach(A=>A.deleteZone()),this.instrumentZones.length=0}deleteZone(A){let t=this.instrumentZones[A];return t.useCount-=1,t.useCount<1?(t.deleteZone(),this.instrumentZones.splice(A,1),!0):!1}};var Yi=new Set([g.velRange,g.keyRange,g.instrument,g.exclusiveClass,g.endOper,g.sampleModes,g.startloopAddrsOffset,g.startloopAddrsCoarseOffset,g.endloopAddrsOffset,g.endloopAddrsCoarseOffset,g.startAddrsOffset,g.startAddrsCoarseOffset,g.endAddrOffset,g.endAddrsCoarseOffset,g.initialAttenuation,g.fineTune,g.coarseTune,g.keyNumToVolEnvHold,g.keyNumToVolEnvDecay,g.keyNumToModEnvHold,g.keyNumToModEnvDecay]);function Wo(e,A=!0){function t(h,l){h.push(...l.filter(u=>!h.find(f=>f.generatorType===u.generatorType)))}function n(h,l){return{min:Math.max(h.min,l.min),max:Math.min(h.max,l.max)}}function s(h,l){h.push(...l.filter(u=>!h.find(f=>hA.isIdentical(u,f))))}let r=new Qe,i=[],a=[],o=e.globalZone;i.push(...o.generators),a.push(...o.modulators);let I=o.keyRange,B=o.velRange;for(let h of e.presetZones){let l=h.keyRange;h.hasKeyRange||(l=I);let u=h.velRange;h.hasVelRange||(u=B);let f=h.generators.map(b=>new Y(b.generatorType,b.generatorValue));t(f,i);let S=[...h.modulators];s(S,a);let R=h.instrument,D=R.instrumentZones,x=[],J=[],H=R.globalZone;x.push(...H.generators),J.push(...H.modulators);let E=H.keyRange,L=H.velRange;for(let b of D){let $=b.keyRange;b.hasKeyRange||($=E);let AA=b.velRange;if(b.hasVelRange||(AA=L),$=n($,l),AA=n(AA,u),$.max<$.min||AA.max<AA.min)continue;let K=b.generators.map(q=>new Y(q.generatorType,q.generatorValue));t(K,x);let oA=[...b.modulators];s(oA,J);let QA=[...oA];for(let q of S){let T=QA.findIndex(k=>hA.isIdentical(q,k));T!==-1?QA[T]=QA[T].sumTransform(q):QA.push(q)}let MA=K.map(q=>new Y(q.generatorType,q.generatorValue));for(let q of f){if(q.generatorType===g.velRange||q.generatorType===g.keyRange||q.generatorType===g.instrument||q.generatorType===g.endOper||q.generatorType===g.sampleModes)continue;let T=K.findIndex(k=>k.generatorType===q.generatorType);if(T!==-1){let k=MA[T].generatorValue+q.generatorValue;MA[T]=new Y(q.generatorType,k)}else{let k=X[q.generatorType].def+q.generatorValue;MA.push(new Y(q.generatorType,k))}}MA=MA.filter(q=>q.generatorType!==g.sampleID&&q.generatorType!==g.keyRange&&q.generatorType!==g.velRange&&q.generatorType!==g.endOper&&q.generatorType!==g.instrument&&q.generatorValue!==X[q.generatorType].def);let nA=r.createZone();nA.keyRange=$,nA.velRange=AA,nA.keyRange.min===0&&nA.keyRange.max===127&&(nA.keyRange.min=-1),nA.velRange.min===0&&nA.velRange.max===127&&(nA.velRange.min=-1),nA.setSample(b.sample),nA.addGenerators(...MA),nA.addModulators(...QA)}}let C=r.globalZone;if(A){for(let u=0;u<58;u++){if(Yi.has(u))continue;let f={},S=X[u]?.def||0;f[S]=0;for(let R of r.instrumentZones){let D=R.generators.find(H=>H.generatorType===u);if(D){let H=D.generatorValue;f[H]===void 0?f[H]=1:f[H]++}else f[S]++;let x;switch(u){default:continue;case g.decayVolEnv:x=g.keyNumToVolEnvDecay;break;case g.holdVolEnv:x=g.keyNumToVolEnvHold;break;case g.decayModEnv:x=g.keyNumToModEnvDecay;break;case g.holdModEnv:x=g.keyNumToModEnvHold}if(R.generators.find(H=>H.generatorType===x)!==void 0){f={};break}}if(Object.keys(f).length>0){let R=Object.entries(f).reduce((x,J)=>x[1]<J[1]?J:x,[0,0]),D=parseInt(R[0]);D!==S&&C.addGenerators(new Y(u,D)),r.instrumentZones.forEach(x=>{let J=x.generators.findIndex(H=>H.generatorType===u);J!==-1?x.generators[J].generatorValue===D&&x.generators.splice(J,1):D!==S&&x.addGenerators(new Y(u,S))})}}let l=r.instrumentZones[0].modulators.map(u=>hA.copy(u));for(let u of l){let f=!0;for(let S of r.instrumentZones){if(!f)continue;S.modulators.find(D=>hA.isIdentical(D,u))||(f=!1)}if(f===!0){C.addModulators(hA.copy(u));for(let S of r.instrumentZones){let R=S.modulators.find(D=>hA.isIdentical(D,u));R.transformAmount===u.transformAmount&&S.modulators.splice(S.modulators.indexOf(R),1)}}}}return r}var _o=20;function pn(e,A,t,n,s,r,i){let a=i===0?0:1,o=new N(_o+a*16);sA(o,_o),v(o,A),v(o,t);let I=n*.4,B=Math.floor(I*-65536);sA(o,B),sA(o,2);let C=r-s,h=0;switch(i){default:case 0:a=0;break;case 1:h=0,a=1;break;case 3:h=1,a=1}return sA(o,a),a===1&&(sA(o,16),sA(o,h),sA(o,s),sA(o,C)),j("wsmp",o)}var W={none:0,modLfo:1,velocity:2,keyNum:3,volEnv:4,modEnv:5,pitchWheel:6,polyPressure:7,channelPressure:8,vibratoLfo:9,modulationWheel:129,volume:135,pan:138,expression:139,chorus:221,reverb:219,pitchWheelRange:256,fineTune:257,coarseTune:258},yn=new pA(219,0,g.reverbEffectsSend,1e3,0),Sn=new pA(221,0,g.chorusEffectsSend,1e3,0),Dn=new pA(129,0,g.vibLfoToPitch,0,0),kn=new pA(13,0,g.vibLfoToPitch,0,0);var G={none:0,gain:1,reserved:2,pitch:3,pan:4,keyNum:5,chorusSend:128,reverbSend:129,modLfoFreq:260,modLfoDelay:261,vibLfoFreq:276,vibLfoDelay:277,volEnvAttack:518,volEnvDecay:519,volEnvRelease:521,volEnvSustain:522,volEnvDelay:523,volEnvHold:524,modEnvAttack:778,modEnvDecay:779,modEnvRelease:781,modEnvSustain:782,modEnvDelay:783,modEnvHold:784,filterCutoff:1280,filterQ:1281};var Vt=class{source;control;destination;scale;transform;constructor(A,t,n,s,r){this.source=A,this.control=t,this.destination=n,this.scale=s,this.transform=r}writeArticulator(){let A=new N(12);return v(A,this.source),v(A,this.control),v(A,this.destination),v(A,this.transform),sA(A,this.scale<<16),A}};function zo(e,A){if(e)switch(A){default:return;case p.modulationWheel:return W.modulationWheel;case p.mainVolume:return W.volume;case p.pan:return W.pan;case p.expressionController:return W.expression;case p.chorusDepth:return W.chorus;case p.reverbDepth:return W.reverb}else switch(A){default:return;case _.noteOnKeyNum:return W.keyNum;case _.noteOnVelocity:return W.velocity;case _.noController:return W.none;case _.polyPressure:return W.polyPressure;case _.channelPressure:return W.channelPressure;case _.pitchWheel:return W.pitchWheel;case _.pitchWheelRange:return W.pitchWheelRange}}function jo(e,A){switch(e){default:return;case g.initialAttenuation:return{dest:G.gain,amount:-A};case g.fineTune:return G.pitch;case g.pan:return G.pan;case g.keyNum:return G.keyNum;case g.reverbEffectsSend:return G.reverbSend;case g.chorusEffectsSend:return G.chorusSend;case g.freqModLFO:return G.modLfoFreq;case g.delayModLFO:return G.modLfoDelay;case g.delayVibLFO:return G.vibLfoDelay;case g.freqVibLFO:return G.vibLfoFreq;case g.delayVolEnv:return G.volEnvDelay;case g.attackVolEnv:return G.volEnvAttack;case g.holdVolEnv:return G.volEnvHold;case g.decayVolEnv:return G.volEnvDecay;case g.sustainVolEnv:return{dest:G.volEnvSustain,amount:1e3-A};case g.releaseVolEnv:return G.volEnvRelease;case g.delayModEnv:return G.modEnvDelay;case g.attackModEnv:return G.modEnvAttack;case g.holdModEnv:return G.modEnvHold;case g.decayModEnv:return G.modEnvDecay;case g.sustainModEnv:return{dest:G.modEnvSustain,amount:1e3-A};case g.releaseModEnv:return G.modEnvRelease;case g.initialFilterFc:return G.filterCutoff;case g.initialFilterQ:return G.filterQ}}function $o(e,A){switch(e){default:return;case g.modEnvToFilterFc:return{source:W.modEnv,dest:G.filterCutoff,amt:A,isBipolar:!1};case g.modEnvToPitch:return{source:W.modEnv,dest:G.pitch,amt:A,isBipolar:!1};case g.modLfoToFilterFc:return{source:W.modLfo,dest:G.filterCutoff,amt:A,isBipolar:!0};case g.modLfoToVolume:return{source:W.modLfo,dest:G.gain,amt:A,isBipolar:!0};case g.modLfoToPitch:return{source:W.modLfo,dest:G.pitch,amt:A,isBipolar:!0};case g.vibLfoToPitch:return{source:W.vibratoLfo,dest:G.pitch,amt:A,isBipolar:!0};case g.keyNumToVolEnvHold:return{source:W.keyNum,dest:G.volEnvHold,amt:A,isBipolar:!0};case g.keyNumToVolEnvDecay:return{source:W.keyNum,dest:G.volEnvDecay,amt:A,isBipolar:!0};case g.keyNumToModEnvHold:return{source:W.keyNum,dest:G.modEnvHold,amt:A,isBipolar:!0};case g.keyNumToModEnvDecay:return{source:W.keyNum,dest:G.modEnvDecay,amt:A,isBipolar:!0};case g.scaleTuning:return{source:W.keyNum,dest:G.pitch,amt:A*128,isBipolar:!1}}}function Ar(e){let A=jo(e.generatorType,e.generatorValue),t=A,n=0,s=e.generatorValue;A?.amount!==void 0&&(s=A.amount,t=A.dest);let r=$o(e.generatorType,e.generatorValue);if(r!==void 0)s=r.amt,t=r.dest,n=r.source;else if(t===void 0){P(`Invalid generator type: ${e.generatorType}`);return}return new Vt(n,0,t,s,0)}function er(e){if(e.transformType!==0){P("Other transform types are not supported.");return}let A=zo(e.sourceUsesCC,e.sourceIndex),t=e.sourceCurveType,n=e.sourcePolarity,s=e.sourceDirection;if(A===void 0){P(`Invalid source: ${e.sourceIndex}, CC: ${e.sourceUsesCC}`);return}e.modulatorDestination===g.initialAttenuation&&(s=s===1?0:1);let r=zo(e.secSrcUsesCC,e.secSrcIndex),i=e.secSrcCurveType,a=e.secSrcPolarity,o=e.secSrcDirection;if(r===void 0){P(`Invalid secondary source: ${e.secSrcIndex}, CC: ${e.secSrcUsesCC}`);return}let I=jo(e.modulatorDestination,e.transformAmount),B=I,C=e.transformAmount;I?.dest!==void 0&&(B=I.dest,C=I.amount);let h=$o(e.modulatorDestination,e.transformAmount);if(h!==void 0)C=h.amt,r=A,i=t,a=n,o=s,t=wA.linear,n=h.isBipolar?1:0,s=0,A=h.source,B=h.dest;else if(B===void 0){P(`Invalid destination: ${e.modulatorDestination}`);return}let l=0;return l|=i<<4,l|=a<<8,l|=o<<9,l|=t,l|=n<<14,l|=s<<15,new Vt(A,r,B,C,l)}var Ji=new Set([g.sampleModes,g.initialAttenuation,g.keyRange,g.velRange,g.sampleID,g.fineTune,g.coarseTune,g.startAddrsOffset,g.startAddrsCoarseOffset,g.endAddrOffset,g.endAddrsCoarseOffset,g.startloopAddrsOffset,g.startloopAddrsCoarseOffset,g.endloopAddrsOffset,g.endloopAddrsCoarseOffset,g.overridingRootKey,g.exclusiveClass]);function Fn(e){for(let r=0;r<e.generators.length;r++){let i=e.generators[r];(i.generatorType===g.delayVolEnv||i.generatorType===g.attackVolEnv||i.generatorType===g.holdVolEnv||i.generatorType===g.decayVolEnv||i.generatorType===g.releaseVolEnv||i.generatorType===g.delayModEnv||i.generatorType===g.attackModEnv||i.generatorType===g.holdModEnv||i.generatorType===g.decayModEnv)&&(e.generators[r]=new Y(i.generatorType,Math.min(i.generatorValue,6386),!1))}for(let r=0;r<e.generators.length;r++){let i=e.generators[r],a;switch(i.generatorType){default:continue;case g.keyNumToVolEnvDecay:a=g.decayVolEnv;break;case g.keyNumToVolEnvHold:a=g.holdVolEnv;break;case g.keyNumToModEnvDecay:a=g.decayModEnv;break;case g.keyNumToModEnvHold:a=g.holdModEnv}let o=e.generators.find(u=>u.generatorType===a);if(o===void 0)continue;let I=i.generatorValue*-128,B=60/128*I,C=o.generatorValue-B,h=e.generators.indexOf(i),l=e.generators.indexOf(o);e.generators[l]=new Y(a,C,!1),e.generators[h]=new Y(i.generatorType,I,!1)}let A=e.generators.reduce((r,i)=>{if(Ji.has(i.generatorType))return r;let a=Ar(i);return a!==void 0?(r.push(a),y("%cSucceeded converting to DLS Articulator!",c.recognized)):P("Failed converting to DLS Articulator!"),r},[]),t=e.modulators.reduce((r,i)=>{if(hA.isIdentical(i,Sn,!0)||hA.isIdentical(i,yn,!0)||hA.isIdentical(i,Dn,!0)||hA.isIdentical(i,kn,!0))return r;let a=er(i);return a!==void 0?(r.push(a),y("%cSucceeded converting to DLS Articulator!",c.recognized)):P("Failed converting to DLS Articulator!"),r},[]);A.push(...t);let n=new N(8);sA(n,8),sA(n,A.length);let s=A.map(r=>r.writeArticulator());return j("art2",kA([n,...s]))}function tr(e,A){let t=new N(12);v(t,Math.max(e.keyRange.min,0)),v(t,e.keyRange.max),v(t,Math.max(e.velRange.min,0)),v(t,e.velRange.max),v(t,0);let n=e.getGeneratorValue(g.exclusiveClass,0);v(t,n),v(t,0);let s=j("rgnh",t),r=e.getGeneratorValue(g.overridingRootKey,e.sample.samplePitch);e.getGeneratorValue(g.scaleTuning,A.getGeneratorValue(g.scaleTuning,100))===0&&e.keyRange.max-e.keyRange.min===0&&(r=e.keyRange.min);let a=pn(e.sample,r,e.getGeneratorValue(g.fineTune,0)+e.getGeneratorValue(g.coarseTune,0)*100+e.sample.samplePitchCorrection,e.getGeneratorValue(g.initialAttenuation,0),e.sample.sampleLoopStartIndex+e.getGeneratorValue(g.startloopAddrsOffset,0)+e.getGeneratorValue(g.startloopAddrsCoarseOffset,0)*32768,e.sample.sampleLoopEndIndex+e.getGeneratorValue(g.endloopAddrsOffset,0)+e.getGeneratorValue(g.endloopAddrsCoarseOffset,0)*32768,e.getGeneratorValue(g.sampleModes,0)),o=new N(12);v(o,0),v(o,0),sA(o,1),sA(o,this.samples.indexOf(e.sample));let I=j("wlnk",o),B=new N(0);if(e.modulators.length+e.generators.length>0){let C=Fn(e);B=j("lar2",C,!1,!0)}return j("rgn2",kA([s,a,I,B]),!1,!0)}function nr(e){fA(`%cWriting %c${e.presetName}%c...`,c.info,c.recognized,c.info);let A=Wo(e),t=A.globalZone,n=A.instrumentZones,s=new N(12);sA(s,n.length);let r=(e.bank&127)<<8;e.bank===128&&(r|=1<<31),sA(s,r),sA(s,e.program&127);let i=j("insh",s),a=Fn(t),o=j("lar2",a,!1,!0),I=kA(n.reduce((l,u)=>(l.push(tr.apply(this,[u,t])),l),[])),B=j("lrgn",I,!1,!0),C=j("INAM",XA(e.presetName,!0)),h=j("INFO",C,!1,!0);return Z(),j("ins ",kA([i,B,o,h]),!1,!0)}function sr(){let e=kA(this.presets.map(A=>nr.apply(this,[A])));return j("lins",e,!1,!0)}function or(e){let A=new N(18);v(A,1),v(A,1),sA(A,e.sampleRate),sA(A,e.sampleRate*2),v(A,2),v(A,16);let t=j("fmt ",A),n=1;e.sampleLoopStartIndex+Math.abs(e.getAudioData().length-e.sampleLoopEndIndex)<2&&(n=0);let s=pn(e,e.samplePitch,e.samplePitchCorrection,0,e.sampleLoopStartIndex,e.sampleLoopEndIndex,n),r=e.getAudioData(),i;if(e.isCompressed){let I=new Int16Array(r.length);for(let B=0;B<r.length;B++)I[B]=r[B]*32767;i=j("data",new N(I.buffer))}else i=j("data",e.getRawData(!1));let a=j("INAM",XA(e.sampleName,!0)),o=j("INFO",a,!1,!0);return y(`%cSaved %c${e.sampleName}%c succesfully!`,c.recognized,c.value,c.recognized),j("wave",kA([t,s,i,o]),!1,!0)}function rr(){let e=0,A=[],t=this.samples.map(n=>{let s=or(n);return A.push(e),e+=s.length,s});return{data:j("wvpl",kA(t),!1,!0),indexes:A}}function ir(){fA("%cSaving DLS...",c.info);let e=new N(4);sA(e,this.presets.length);let A=j("colh",e);fA("%cWriting instruments...",c.info);let t=sr.apply(this);y("%cSuccess!",c.recognized),Z(),fA("%cWriting WAVE samples...",c.info);let n=rr.apply(this),s=n.data,r=n.indexes;y("%cSucceeded!",c.recognized),Z();let i=new N(8+4*r.length);sA(i,8),sA(i,r.length);for(let C of r)sA(i,C);let a=j("ptbl",i);this.soundFontInfo.ICMT=(this.soundFontInfo.ICMT||"Soundfont")+`
|
|
11
|
-
Converted from SF2 to DLS using SpessaSynth`,this.soundFontInfo.ISFT="SpessaSynth";let o=[];for(let[
|
|
10
|
+
`}getSourceEnum(){return WA(this.sourceCurveType,this.sourcePolarity,this.sourceDirection,this.sourceUsesCC,this.sourceIndex)}getSecSrcEnum(){return WA(this.secSrcCurveType,this.secSrcPolarity,this.secSrcDirection,this.secSrcUsesCC,this.secSrcIndex)}sumTransform(A){return new e(this.sourceIndex,this.sourceCurveType,this.sourceUsesCC,this.sourcePolarity,this.sourceDirection,this.secSrcIndex,this.secSrcCurveType,this.secSrcUsesCC,this.secSrcPolarity,this.secSrcDirection,this.modulatorDestination,this.transformAmount+A.transformAmount,this.transformType,this.isEffectModulator)}},pA=class extends CA{constructor(A,t,n,s,r){let i=A>>9&1,a=A>>8&1,o=A>>7&1,I=A&127,l=A>>10&3,c=t>>9&1,h=t>>8&1,B=t>>7&1,u=t&127,f=t>>10&3;super(I,l,o,i,a,u,f,B,c,h,n,s,r),this.isEffectModulator=(A===219||A===221)&&t===0&&(this.modulatorDestination===g.reverbEffectsSend||this.modulatorDestination===g.chorusEffectsSend)}},Is=960,Es=kA.concave;function WA(e,A,t,n,s){return e<<10|A<<9|t<<8|n<<7|s}var Ni=[new pA(WA(Es,0,1,0,X.noteOnVelocity),0,g.initialAttenuation,Is,0),new pA(129,0,g.vibLfoToPitch,50,0),new pA(WA(Es,0,1,1,p.mainVolume),0,g.initialAttenuation,Is,0),new pA(13,0,g.vibLfoToPitch,50,0),new pA(526,16,g.fineTune,12700,0),new pA(650,0,g.pan,500,0),new pA(WA(Es,0,1,1,p.expressionController),0,g.initialAttenuation,Is,0),new pA(219,0,g.reverbEffectsSend,200,0),new pA(221,0,g.chorusEffectsSend,200,0)],bi=[new pA(WA(kA.linear,0,0,0,X.polyPressure),0,g.vibLfoToPitch,50,0),new pA(WA(kA.linear,0,0,1,p.tremoloDepth),0,g.modLfoToVolume,24,0),new pA(WA(kA.convex,1,0,1,p.attackTime),0,g.attackVolEnv,6e3,0),new pA(WA(kA.linear,1,0,1,p.releaseTime),0,g.releaseVolEnv,3600,0),new pA(WA(kA.linear,1,0,1,p.brightness),0,g.initialFilterFc,6e3,0),new pA(WA(kA.linear,1,0,1,p.filterResonance),0,g.initialFilterQ,250,0)],Eo=Ni.concat(bi);var hA=128,Cn=147,Oe=new Int16Array(Cn).fill(0),MA=(e,A)=>Oe[e]=A<<7;MA(p.mainVolume,100);MA(p.balance,64);MA(p.expressionController,127);MA(p.pan,64);MA(p.portamentoOnOff,127);MA(p.filterResonance,64);MA(p.releaseTime,64);MA(p.attackTime,64);MA(p.brightness,64);MA(p.decayTime,64);MA(p.vibratoRate,64);MA(p.vibratoDepth,64);MA(p.vibratoDelay,64);MA(p.generalPurposeController6,64);MA(p.generalPurposeController8,64);MA(p.RPNLsb,127);MA(p.RPNMsb,127);MA(p.NRPNLsb,127);MA(p.NRPNMsb,127);var hn=1;Oe[p.portamentoControl]=hn;MA(hA+X.pitchWheel,64);MA(hA+X.pitchWheelRange,2);var tA={channelTuning:0,channelTransposeFine:1,modulationMultiplier:2,masterTuning:3,channelTuningSemitones:4,channelKeyShift:5,sf2NPRNGeneratorLSB:6},cs=Object.keys(tA).length,Cs=new Float32Array(cs);Cs[tA.modulationMultiplier]=1;var UA={Idle:0,RPCoarse:1,RPFine:2,NRPCoarse:3,NRPFine:4,DataCoarse:5,DataFine:6},hs={velocityOverride:128};function co(e,A,t){let n=e,s=A<<7|t;return e===127&&A===127&&t===127?{midiNote:-1,centTuning:null}:{midiNote:n,centTuning:s*.0061}}function Co(e,A=0){let t=e[0];if(this.deviceID!==-1&&e[1]!==127&&this.deviceID!==e[1])return;function n(r,i,a,o){y(`%cChannel %c${r}%c ${a}. %c${i} ${o}%c, with %c${OA(e)}`,E.info,E.recognized,E.info,E.value,E.info,E.value)}function s(){J(`%cUnrecognized Roland %cGS %cSysEx: %c${OA(e)}`,E.warn,E.recognized,E.warn,E.unrecognized)}switch(t){default:J(`%cUnrecognized SysEx: %c${OA(e)}`,E.warn,E.unrecognized);break;case 126:case 127:switch(e[2]){case 4:let r;switch(e[3]){case 1:let a=e[5]<<7|e[4];this.setMIDIVolume(a/16384),y(`%cMaster Volume. Volume: %c${a}`,E.info,E.value);break;case 2:let I=((e[5]<<7|e[4])-8192)/8192;this.setMasterParameter(PA.masterPan,I),y(`%cMaster Pan. Pan: %c${I}`,E.info,E.value);break;case 3:let l=(e[5]<<7|e[6])-8192;r=Math.floor(l/81.92),this.setMasterTuning(r),y(`%cMaster Fine Tuning. Cents: %c${r}`,E.info,E.value);break;case 4:r=(e[5]-64)*100,this.setMasterTuning(r),y(`%cMaster Coarse Tuning. Cents: %c${r}`,E.info,E.value);break;default:J(`%cUnrecognized MIDI Device Control Real-time message: %c${OA(e)}`,E.warn,E.unrecognized)}break;case 9:e[3]===1?(y("%cGM1 system on",E.info),this.setSystem("gm")):e[3]===3?(y("%cGM2 system on",E.info),this.setSystem("gm2")):(y("%cGM system off, defaulting to GS",E.info),this.setSystem("gs"));break;case 8:let i=4;switch(e[3]){case 1:let a=e[i++];e.currentIndex=i;let o=$(e,16);if(i+=16,e.length<384){J(`The Bulk Tuning Dump is too short! (${e.length} bytes, at least 384 are expected)`);return}for(let h=0;h<128;h++)this.tunings[a][h]=co(e[i++],e[i++],e[i++]);y(`%cBulk Tuning Dump %c${o}%c Program: %c${a}`,E.info,E.value,E.info,E.recognized);break;case 2:case 7:e[3]===7&&i++;let I=e[i++],l=e[i++];for(let h=0;h<l;h++)this.tunings[I][e[i++]]=co(e[i++],e[i++],e[i++]);y(`%cSingle Note Tuning. Program: %c${I}%c Keys affected: %c${l}`,E.info,E.recognized,E.info,E.recognized);break;case 9:case 8:let c=new Int8Array(12);if(e[3]===8)for(let h=0;h<12;h++)c[h]=e[7+h]-64;else for(let h=0;h<24;h+=2){let B=(e[7+h]<<7|e[8+h])-8192;c[h/2]=Math.floor(B/81.92)}(e[4]&1)===1&&this.midiAudioChannels[14+A].setOctaveTuning(c),(e[4]>>1&1)===1&&this.midiAudioChannels[15+A].setOctaveTuning(c);for(let h=0;h<7;h++)(e[5]>>h&1)===1&&this.midiAudioChannels[7+h+A].setOctaveTuning(c);for(let h=0;h<7;h++)(e[6]>>h&1)===1&&this.midiAudioChannels[h+A].setOctaveTuning(c);y(`%cMIDI Octave Scale ${e[3]===8?"(1 byte)":"(2 bytes)"} tuning via Tuning: %c${c.join(" ")}`,E.info,E.value);break;default:J(`%cUnrecognized MIDI Tuning standard message: %c${OA(e)}`,E.warn,E.unrecognized);break}break;default:J(`%cUnrecognized MIDI Realtime/non realtime message: %c${OA(e)}`,E.warn,E.unrecognized)}break;case 65:if(e[2]===66&&e[3]===18){let r=e[7];if(e[4]===64||e[4]===0&&e[6]===127){if((e[5]&16)>0){let i=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][e[5]&15]+A,a=this.midiAudioChannels[i];switch(e[6]){default:s();break;case 21:let o=r>0&&e[5]>>4;a.setDrums(o),y(`%cChannel %c${i}%c ${o?"is now a drum channel":"now isn't a drum channel"}%c via: %c${OA(e)}`,E.info,E.value,E.recognized,E.info,E.value);return;case 22:let I=r-64;a.setCustomController(tA.channelKeyShift,I),n(i,I,"key shift","keys");return;case 28:let l=r;l===0?(a.randomPan=!0,y(`%cRandom pan is set to %cON%c for %c${i}`,E.info,E.recognized,E.info,E.value)):(a.randomPan=!1,a.controllerChange(p.pan,l));break;case 33:a.controllerChange(p.chorusDepth,r);break;case 34:a.controllerChange(p.reverbDepth,r);break;case 64:case 65:case 66:case 67:case 68:case 69:case 70:case 71:case 72:case 73:case 74:case 75:let c=e.length-9,h=new Int8Array(12);for(let u=0;u<c;u++)h[u]=e[u+7]-64;a.setOctaveTuning(h);let B=r-64;n(i,h.join(" "),"octave scale tuning","cents"),a.setTuning(B);break}return}else if((e[5]&32)>0){let i=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][e[5]&15]+A,a=this.midiAudioChannels[i],o=r-64,I=o/64,l=r/128,c=(h,B,u=!1)=>{switch(e[6]&15){case 0:h===hA+X.pitchWheel?(a.controllerChange(p.RPNMsb,0),a.controllerChange(p.RPNLsb,0),a.controllerChange(p.dataEntryMsb,Math.floor(o))):(a.sysExModulators.setModulator(h,g.fineTune,o*100,u),n(i,o,`${B} pitch control`,"semitones"));break;case 1:a.sysExModulators.setModulator(h,g.initialFilterFc,I*9600,u),n(i,I*9600,`${B} pitch control`,"cents");break;case 2:a.sysExModulators.setModulator(h,g.initialAttenuation,I*960,u),n(i,I*960,`${B} amplitude`,"cB");break;case 4:a.sysExModulators.setModulator(h,g.vibLfoToPitch,l*600,u),n(i,l*600,`${B} LFO1 pitch depth`,"cents");break;case 5:a.sysExModulators.setModulator(h,g.vibLfoToFilterFc,l*2400,u),n(i,l*2400,`${B} LFO1 filter depth`,"cents");break;case 6:a.sysExModulators.setModulator(h,g.vibLfoToVolume,I*960,u),n(i,I*960,`${B} LFO1 amplitude depth`,"cB");break;case 8:a.sysExModulators.setModulator(h,g.modLfoToPitch,l*600,u),n(i,l*600,`${B} LFO2 pitch depth`,"cents");break;case 9:a.sysExModulators.setModulator(h,g.modLfoToFilterFc,l*2400,u),n(i,l*2400,`${B} LFO2 filter depth`,"cents");break;case 10:a.sysExModulators.setModulator(h,g.modLfoToVolume,I*960,u),n(i,I*960,`${B} LFO2 amplitude depth`,"cB");break}};switch(e[6]&240){default:s();break;case 0:c(p.modulationWheel,"mod wheel");break;case 16:c(hA+X.pitchWheel,"pitch bend",!0);break;case 32:c(hA+X.channelPressure,"channel pressure");break;case 48:c(hA+X.polyPressure,"poly pressure");break}return}else if(e[5]===0){switch(e[6]){default:s();break;case 127:r===0?(y("%cGS Reset received!",E.info),this.resetAllControllers(!1),this.setSystem("gs")):r===127&&(y("%cGS system off, switching to GM2",E.info),this.resetAllControllers(!1),this.setSystem("gm2"));break;case 6:y(`%cRoland GS Master Pan set to: %c${r}%c with: %c${OA(e)}`,E.info,E.value,E.info,E.value),this.setMasterParameter(PA.masterPan,(r-64)/64);break;case 4:y(`%cRoland GS Master Volume set to: %c${r}%c with: %c${OA(e)}`,E.info,E.value,E.info,E.value),this.setMIDIVolume(r/127);break;case 5:let i=r-64;y(`%cRoland GS Master Key-Shift set to: %c${i}%c with: %c${OA(e)}`,E.info,E.value,E.info,E.value),this.setMasterTuning(i*100);break}return}else if(e[5]===1)switch(e[6]){default:s();break;case 0:e.currentIndex=7;let i=$(e,16);y(`%cGS Patch name: %c${i}`,E.info,E.value);break;case 51:y(`%cGS Reverb level: %c${r}`,E.info,E.value),this.reverbSend=r/64;break;case 48:case 49:case 50:case 52:case 53:case 55:y(`%cUnsupported GS Reverb Parameter: %c${e[6].toString(16)}`,E.warn,E.unrecognized);break;case 58:y(`%cGS Chorus level: %c${r}`,E.info,E.value),this.chorusSend=r/64;break;case 56:case 57:case 59:case 60:case 61:case 62:case 63:case 64:y(`%cUnsupported GS Chorus Parameter: %c${e[6].toString(16)}`,E.warn,E.unrecognized);break}}else s();return}else if(e[2]===69&&e[3]===18){if(e[4]===16&&e[6]===0)if(e[5]===0){let r=new Uint8Array(e.slice(7,e.length-2));this.callEvent("synthdisplay",{displayData:r,displayType:Jt.SoundCanvasText})}else if(e[5]===1){let r=new Uint8Array(e.slice(7,e.length-3));this.callEvent("synthdisplay",{displayData:r,displayType:Jt.SoundCanvasDotDisplay}),y(`%cRoland SC Display Dot Matrix via: %c${OA(e)}`,E.info,E.value)}else s()}else if(e[2]===22&&e[3]===18&&e[4]===16){this.setMIDIVolume(e[7]/100),y(`%cRoland Master Volume control set to: %c${e[7]}%c via: %c${OA(e)}`,E.info,E.value,E.info,E.value);return}else{J(`%cUnrecognized Roland SysEx: %c${OA(e)}`,E.warn,E.unrecognized);return}break;case 67:if(e[2]===76)if(e[3]===0&&e[4]===0)switch(e[5]){case 4:let r=e[6];this.setMIDIVolume(r/127),y(`%cXG master volume. Volume: %c${r}`,E.info,E.recognized);break;case 6:let i=e[6]-64;this.transposeAllChannels(i),y(`%cXG master transpose. Volume: %c${i}`,E.info,E.recognized);break;case 126:y("%cXG system on",E.info),this.resetAllControllers(!1),this.setSystem("xg");break}else if(e[3]===8){if(!GA(this.system))return;let r=e[4]+A;if(r>=this.midiAudioChannels.length)return;let i=this.midiAudioChannels[r],a=e[6];switch(e[5]){case 1:i.controllerChange(p.bankSelect,a);break;case 2:i.controllerChange(p.lsbForControl0BankSelect,a);break;case 3:i.programChange(a);break;case 8:if(i.drumChannel)return;let o=a-64;i.channelTransposeKeyShift=o;break;case 11:i.controllerChange(p.mainVolume,a);break;case 14:let I=a;I===0?(i.randomPan=!0,y(`%cRandom pan is set to %cON%c for %c${r}`,E.info,E.recognized,E.info,E.value)):i.controllerChange(p.pan,I);break;case 19:i.controllerChange(p.reverbDepth,a);break;case 18:i.controllerChange(p.chorusDepth,a);break;default:J(`%cUnrecognized Yamaha XG Part Setup: %c${e[5].toString(16).toUpperCase()}`,E.warn,E.unrecognized)}}else if(e[3]===6&&e[4]===0){let r=new Uint8Array(e.slice(5,e.length-1));this.callEvent("synthdisplay",{displayData:r,displayType:Jt.XGText})}else GA(this.system)&&J(`%cUnrecognized Yamaha XG SysEx: %c${OA(e)}`,E.warn,E.unrecognized);else GA(this.system)&&J(`%cUnrecognized Yamaha SysEx: %c${OA(e)}`,E.warn,E.unrecognized);break}}function ho(e=!0){e&&y("%cResetting all controllers!",E.info),this.callEvent("allcontrollerreset",void 0),this.setSystem(Ht);for(let A=0;A<this.midiAudioChannels.length;A++){this.midiAudioChannels[A].resetControllers();let t=this.midiAudioChannels[A];t.lockPreset?this.callEvent("drumchange",{channel:A,isDrumChannel:t.drumChannel}):(t.setBankSelect(go(this.system)),A%16===9?(t.setPreset(this.drumPreset),t.drumChannel=!0,this.callEvent("drumchange",{channel:A,isDrumChannel:!0})):(t.drumChannel=!1,t.setPreset(this.defaultPreset),this.callEvent("drumchange",{channel:A,isDrumChannel:!1})));let n=t.preset.bank;this.callEvent("programchange",{channel:A,program:t.preset.program,bank:n});for(let s=0;s<128;s++)this.midiAudioChannels[A].lockedControllers[s]&&this.callEvent("controllerchange",{channel:A,controllerNumber:s,controllerValue:this.midiAudioChannels[A].midiControllers[s]>>7});if(this.midiAudioChannels[A].lockedControllers[hA+X.pitchWheel]===!1){let s=this.midiAudioChannels[A].midiControllers[hA+X.pitchWheel],r=s>>7,i=s&127;this.callEvent("pitchwheel",{channel:A,MSB:r,LSB:i})}if(this.midiAudioChannels[A].lockedControllers[hA+X.channelPressure]===!1){let s=this.midiAudioChannels[A].midiControllers[hA+X.channelPressure]>>7;this.callEvent("channelpressure",{channel:A,pressure:s})}}this.tunings=[],this.tunings=[];for(let A=0;A<128;A++)this.tunings.push([]);this.setMIDIVolume(1)}function lo(){this.channelOctaveTuning.fill(0);for(let A=0;A<Oe.length;A++){if(this.lockedControllers[A])continue;let t=Oe[A];this.midiControllers[A]!==t&&A<127?A===p.portamentoControl?this.midiControllers[A]=hn:this.controllerChange(A,t>>7):this.midiControllers[A]=t}this.channelVibrato={rate:0,depth:0,delay:0},this.holdPedal=!1,this.randomPan=!1,this.sysExModulators.resetModulators();let e=this.customControllers[tA.channelTransposeFine];this.customControllers.set(Cs),this.setCustomController(tA.channelTransposeFine,e),this.resetParameters()}var ls=new Set([p.bankSelect,p.lsbForControl0BankSelect,p.mainVolume,p.lsbForControl7MainVolume,p.pan,p.lsbForControl10Pan,p.reverbDepth,p.tremoloDepth,p.chorusDepth,p.detuneDepth,p.phaserDepth,p.soundVariation,p.filterResonance,p.releaseTime,p.attackTime,p.brightness,p.decayTime,p.vibratoRate,p.vibratoDepth,p.vibratoDelay,p.soundController10]);function Bo(){this.channelOctaveTuning.fill(0),this.pitchWheel(64,0),this.channelVibrato={rate:0,depth:0,delay:0};for(let e=0;e<128;e++){let A=Oe[e];!ls.has(e)&&A!==this.midiControllers[e]&&(e===p.portamentoControl?this.midiControllers[e]=hn:this.controllerChange(e,A>>7))}this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}function Qo(){this.dataEntryState=UA.Idle,this.midiControllers[p.NRPNLsb]=16256,this.midiControllers[p.NRPNMsb]=16256,this.midiControllers[p.RPNLsb]=16256,this.midiControllers[p.RPNMsb]=16256,this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}var ut=class{soundfontList=[];presetList=[];constructor(A){this.presetListChangeCallback=A}generatePresetList(){let A={};for(let t=this.soundfontList.length-1;t>=0;t--){let n=this.soundfontList[t],s=new Set;for(let r of n.soundfont.presets){let a=`${Math.min(128,r.bank+n.bankOffset)}-${r.program}`;s.has(a)||(s.add(a),A[a]=r.presetName)}}this.presetList=[];for(let[t,n]of Object.entries(A)){let s=t.split("-");this.presetList.push({presetName:n,program:parseInt(s[1]),bank:parseInt(s[0])})}this.presetListChangeCallback()}getPresetList(){return this.presetList.slice()}reloadManager(A){this.soundfontList=this.soundfontList.filter(t=>t.id===je),this.soundfontList.push({id:"main",bankOffset:0,soundfont:A}),this.generatePresetList()}deleteSoundFont(A){if(this.soundfontList.length===0){J("1 soundfont left. Aborting!");return}let t=this.soundfontList.findIndex(n=>n.id===A);if(t===-1){y(`No soundfont with id of "${A}" found. Aborting!`);return}delete this.soundfontList[t].soundfont.presets,delete this.soundfontList[t].soundfont.instruments,delete this.soundfontList[t].soundfont.samples,this.soundfontList.splice(t,1),this.generatePresetList()}addNewSoundFont(A,t,n){if(this.soundfontList.find(s=>s.id===t)!==void 0){let s=this.soundfontList.find(r=>r.id===t);s.soundfont=A,s.bankOffset=n}else this.soundfontList.push({id:t,soundfont:A,bankOffset:n});this.generatePresetList()}getCurrentSoundFontOrder(){return this.soundfontList.map(A=>A.id)}rearrangeSoundFonts(A){this.soundfontList.sort((t,n)=>A.indexOf(t.id)-A.indexOf(n.id)),this.generatePresetList()}getPreset(A,t,n=!1){if(this.soundfontList.length<1)throw new Error("No soundfonts! Did you forget to add one?");let s=A===128||n&&te(A);for(let r of this.soundfontList){let i=r.soundfont.getPresetNoFallback(A===128?128:A-r.bankOffset,t,n);if(i!==void 0)return{preset:i,bankOffset:r.bankOffset}}if(s){for(let i of this.soundfontList){let a=i.soundfont.presets.find(I=>I.isDrumPreset(n)&&I.program===t);if(a)return{preset:a,bankOffset:i.bankOffset};let o=i.soundfont.presets.find(I=>I.isDrumPreset(n));if(o)return{preset:o,bankOffset:i.bankOffset}}let r=this.soundfontList[0];return{preset:r.soundfont.presets[0],bankOffset:r.bankOffset}}else{for(let i of this.soundfontList){let a=i.soundfont.presets.find(o=>o.program===t&&!o.isDrumPreset(n));if(a)return{preset:a,bankOffset:i.bankOffset}}let r=this.soundfontList[0];return{preset:r.soundfont.presets[0],bankOffset:r.bankOffset}}}destroyManager(){this.soundfontList.forEach(A=>{A.soundfont.destroySoundBank()}),delete this.soundfontList}};var ln=class{_keyMappings=[];addMapping(A,t,n){this._keyMappings[A]===void 0&&(this._keyMappings[A]=[]),this._keyMappings[A][t]=n}deleteMapping(A,t){this._keyMappings[A]?.[t]!==void 0&&(this._keyMappings[A][t]=void 0)}clearMappings(){this._keyMappings=[]}setMappings(A){this._keyMappings=A}getMappings(){return this._keyMappings}getVelocity(A,t){return this._keyMappings[A]?.[t]?.velocity??-1}getGain(A,t){return this._keyMappings[A]?.[t]?.gain??1}hasOverridePatch(A,t){let n=this._keyMappings[A]?.[t]?.patch?.bank;return n!==void 0&&n>=0}getPatch(A,t){let n=this._keyMappings[A]?.[t];if(n)return n.patch;throw new Error("No modifier.")}};var fo=.1,Je=class e{static cachedCoefficients=[];a0=0;a1=0;a2=0;a3=0;a4=0;x1=0;x2=0;y1=0;y2=0;resonanceCb=0;currentInitialFc=13500;lastTargetCutoff=1/0;initialized=!1;sampleRate;constructor(A){this.sampleRate=A,this.maxCutoff=A*.45}static apply(A,t,n,s){let r=A.modulatedGenerators[g.initialFilterFc],i=A.filter;i.initialized?i.currentInitialFc+=(r-i.currentInitialFc)*s:(i.initialized=!0,i.currentInitialFc=r);let a=i.currentInitialFc+n,o=A.modulatedGenerators[g.initialFilterQ];if(i.currentInitialFc>13499&&a>13499&&o===0){i.currentInitialFc=13500;return}(Math.abs(i.lastTargetCutoff-a)>1||i.resonanceCb!==o)&&(i.lastTargetCutoff=a,i.resonanceCb=o,e.calculateCoefficients(i,a));for(let I=0;I<t.length;I++){let l=t[I],c=i.a0*l+i.a1*i.x1+i.a2*i.x2-i.a3*i.y1-i.a4*i.y2;i.x2=i.x1,i.x1=l,i.y2=i.y1,i.y1=c,t[I]=c}}static calculateCoefficients(A,t){t=~~t;let n=A.resonanceCb,s=e.cachedCoefficients?.[n]?.[t];if(s!==void 0){A.a0=s.a0,A.a1=s.a1,A.a2=s.a2,A.a3=s.a3,A.a4=s.a4;return}let r=Yt(t);r=Math.min(r,A.maxCutoff);let i=n/10,a=ce(-(i-3.01)),o=1/Math.sqrt(ce(-i)),I=2*Math.PI*r/A.sampleRate,l=Math.cos(I),c=Math.sin(I)/(2*a),h=(1-l)*o,B=h/2,u=B,f=1+c,S=-2*l,G=1-c,k={};k.a0=B/f,k.a1=h/f,k.a2=u/f,k.a3=S/f,k.a4=G/f,A.a0=k.a0,A.a1=k.a1,A.a2=k.a2,A.a3=k.a3,A.a4=k.a4,e.cachedCoefficients[n]===void 0&&(e.cachedCoefficients[n]=[]),e.cachedCoefficients[n][t]=k}},Bs=new Je(44100);Bs.resonanceCb=0;for(let e=1500;e<13500;e++)Bs.currentInitialFc=e,Je.calculateCoefficients(Bs,e);var NA=16384,Ge=new Float32Array(NA+1),At=new Float32Array(NA+1);Ge[0]=0;Ge[Ge.length-1]=1;At[0]=0;At[At.length-1]=1;for(let e=1;e<NA-1;e++){let A=-.4166666666666667*Math.log(e/(Ge.length-1))/Math.LN10;At[e]=1-A,Ge[Ge.length-1-e]=A}function et(e,A,t,n){switch(e&&(t=1-t),A){case kA.linear:return n?t*2-1:t;case kA.switch:return t=t>.5?1:0,n?t*2-1:t;case kA.concave:return n?(t=t*2-1,t<0?-Ge[~~(t*-NA)]:Ge[~~(t*NA)]):Ge[~~(t*NA)];case kA.convex:return n?(t=t*2-1,t<0?-At[~~(t*-NA)]:At[~~(t*NA)]):At[~~(t*NA)]}}var ds=1,Qs=new Float32Array(1e3);for(let e=0;e<Qs.length;e++)Qs[e]=et(0,kA.convex,e/1e3,0);var Be=class e{attackDuration=0;decayDuration=0;holdDuration=0;releaseDuration=0;sustainLevel=0;delayEnd=0;attackEnd=0;holdEnd=0;decayEnd=0;releaseStartLevel=0;currentValue=0;static startRelease(A){e.recalculate(A)}static recalculate(A){let t=A.modulationEnvelope;A.isInRelease&&(t.releaseStartLevel=e.getValue(A,A.releaseStartTime,!0)),t.sustainLevel=1-A.modulatedGenerators[g.sustainModEnv]/1e3,t.attackDuration=he(A.modulatedGenerators[g.attackModEnv]);let n=(60-A.midiNote)*A.modulatedGenerators[g.keyNumToModEnvDecay],s=he(A.modulatedGenerators[g.decayModEnv]+n);t.decayDuration=s*(1-t.sustainLevel);let r=(60-A.midiNote)*A.modulatedGenerators[g.keyNumToModEnvHold];t.holdDuration=he(r+A.modulatedGenerators[g.holdModEnv]);let i=he(A.modulatedGenerators[g.releaseModEnv]);t.releaseDuration=i*t.releaseStartLevel,t.delayEnd=A.startTime+he(A.modulatedGenerators[g.delayModEnv]),t.attackEnd=t.delayEnd+t.attackDuration,t.holdEnd=t.attackEnd+t.holdDuration,t.decayEnd=t.holdEnd+t.decayDuration}static getValue(A,t,n=!1){let s=A.modulationEnvelope;return A.isInRelease&&!n?s.releaseStartLevel===0?0:Math.max(0,(1-(t-A.releaseStartTime)/s.releaseDuration)*s.releaseStartLevel):(t<s.delayEnd?s.currentValue=0:t<s.attackEnd?s.currentValue=Qs[~~((1-(s.attackEnd-t)/s.attackDuration)*1e3)]:t<s.holdEnd?s.currentValue=ds:t<s.decayEnd?s.currentValue=(1-(s.decayEnd-t)/s.decayDuration)*(s.sustainLevel-ds)+ds:s.currentValue=s.sustainLevel,s.currentValue)}};var Se=4,O=class{generatorType=g.INVALID;generatorValue=0;constructor(A=g.INVALID,t=0,n=!0){if(this.generatorType=A,t===void 0)throw new Error("No value provided.");if(this.generatorValue=Math.round(t),n){let s=V[A];s!==void 0&&(this.generatorValue=Math.max(s.min,Math.min(s.max,this.generatorValue)))}}};function uo(e,A,t){let n=V[e]||{min:0,max:32768,def:0},s=A.find(o=>o.generatorType===e),r=0;s&&(r=s.generatorValue);let i=t.find(o=>o.generatorType===e),a=n.def;return i&&(a=i.generatorValue),a+r}var Li=-2320,Ti=-1130,Bn=class{sampleData;playbackStep=0;cursor=0;rootKey=0;loopStart=0;loopEnd=0;end=0;loopingMode=0;isLooping=!1;constructor(A,t,n,s,r,i,a,o){this.sampleData=A,this.playbackStep=t,this.cursor=n,this.rootKey=s,this.loopStart=r,this.loopEnd=i,this.end=a,this.loopingMode=o,this.isLooping=this.loopingMode===1||this.loopingMode===3}},Pt=class e{sample;filter;gain=1;generators;modulators=[];modulatedGenerators;finished=!1;isInRelease=!1;velocity=0;midiNote=0;pressure=0;targetKey=0;modulationEnvelope=new Be;volumeEnvelope;startTime=0;releaseStartTime=1/0;currentTuningCents=0;currentTuningCalculated=1;currentPan=0;realKey;portamentoFromKey=-1;portamentoDuration=0;overridePan=0;exclusiveClass=0;constructor(A,t,n,s,r,i,a,o,I){this.sample=t,this.generators=o,this.exclusiveClass=this.generators[g.exclusiveClass],this.modulatedGenerators=new Int16Array(o),this.modulators=I,this.filter=new Je(A),this.velocity=s,this.midiNote=n,this.startTime=r,this.targetKey=i,this.realKey=a,this.volumeEnvelope=new le(A,o[g.sustainVolEnv])}static copy(A,t,n){let s=A.sample,r=new Bn(s.sampleData,s.playbackStep,s.cursor,s.rootKey,s.loopStart,s.loopEnd,s.end,s.loopingMode);return new e(A.volumeEnvelope.sampleRate,r,A.midiNote,A.velocity,t,A.targetKey,n,new Int16Array(A.generators),A.modulators.map(i=>CA.copy(i)))}exclusiveRelease(A){this.release(A,So),this.modulatedGenerators[g.releaseVolEnv]=Li,this.modulatedGenerators[g.releaseModEnv]=Ti,le.recalculate(this),Be.recalculate(this)}release(A,t=yo){this.releaseStartTime=A,this.releaseStartTime-this.startTime<t&&(this.releaseStartTime=this.startTime+t)}};function mo(e,A,t,n,s,r){let i=e.getSamplesAndGenerators(n,s).reduce((a,o)=>{if(o.sample.getAudioData()===void 0)return J(`Discarding invalid sample: ${o.sample.sampleName}`),a;let I=new Int16Array(Ot);for(let S=0;S<60;S++)I[S]=uo(S,o.presetGenerators,o.instrumentGenerators);I[g.initialAttenuation]=Math.floor(I[g.initialAttenuation]*.4);let l=o.sample.samplePitch;I[g.overridingRootKey]>-1&&(l=I[g.overridingRootKey]);let c=n;I[g.keyNum]>-1&&(c=I[g.keyNum]);let h=o.sample.sampleLoopStartIndex,B=o.sample.sampleLoopEndIndex,u=I[g.sampleModes],f=new Bn(o.sample.sampleData,o.sample.sampleRate/this.sampleRate*Math.pow(2,o.sample.samplePitchCorrection/1200),0,l,h,B,Math.floor(o.sample.sampleData.length)-1,u);return I[g.velocity]>-1&&(s=I[g.velocity]),a.push(new Pt(this.sampleRate,f,n,s,this.currentSynthTime,c,r,I,o.modulators.map(S=>CA.copy(S)))),a},[]);return this.setCachedVoice(A,t,n,s,i),i.map(a=>Pt.copy(a,this.currentSynthTime,r))}function po(e,A,t,n){let s=this.midiAudioChannels[e],r=this.keyModifierManager.hasOverridePatch(e,A),i=s.getBankSelect(),a=s.preset.program;if(r){let l=this.keyModifierManager.getPatch(e,A);i=l.bank,a=l.program}let o=this.getCachedVoice(i,a,A,t);if(o!==void 0)return o.map(l=>Pt.copy(l,this.currentSynthTime,n));let I=s.preset;return r&&(I=this.getPreset(i,a)),this.getVoicesForPreset(I,i,a,A,t,n)}var ko=.05,Ui=3070,vi=2e3,Do=Math.PI/2,dn=-500,Fo=500,fs=Fo-dn,wo=new Float32Array(fs+1),Ro=new Float32Array(fs+1);for(let e=dn;e<=Fo;e++){let A=(e-dn)/fs,t=e-dn;wo[t]=Math.cos(Do*A),Ro[t]=Math.sin(Do*A)}function Go(e,A,t,n,s,r,i,a){if(isNaN(A[0]))return;let o;e.overridePan?o=e.overridePan:(e.currentPan+=(e.modulatedGenerators[g.pan]-e.currentPan)*this.synth.panSmoothingFactor,o=e.currentPan);let I=this.synth.currentGain*e.gain,l=~~(o+500),c=wo[l]*I*this.synth.panLeft,h=Ro[l]*I*this.synth.panRight;if(this.synth.effectsEnabled){let B=e.modulatedGenerators[g.reverbEffectsSend];if(B>0){let f=this.synth.reverbGain*this.synth.reverbSend*I*(B/Ui);for(let S=0;S<A.length;S++)s[S]+=f*A[S];r.set(s)}let u=e.modulatedGenerators[g.chorusEffectsSend];if(u>0){let f=this.synth.chorusGain*this.synth.chorusSend*(u/vi),S=c*f,G=h*f;for(let k=0;k<A.length;k++)i[k]+=S*A[k],a[k]+=G*A[k]}}if(c>0)for(let B=0;B<A.length;B++)t[B]+=c*A[B];if(h>0)for(let B=0;B<A.length;B++)n[B]+=h*A[B]}function Mo(e=!1){y("%cStop all received!",E.info);for(let A=0;A<this.midiAudioChannels.length;A++)this.midiAudioChannels[A].stopAllNotes(e);this.callEvent("stopall",void 0)}function v(e,A){let t=0;for(let n=0;n<A;n++)t|=e[e.currentIndex++]<<n*8;return t>>>0}function ZA(e,A,t){for(let n=0;n<t;n++)e[e.currentIndex++]=A>>n*8&255}function H(e,A){e[e.currentIndex++]=A&255,e[e.currentIndex++]=A>>8}function eA(e,A){ZA(e,A,4)}function Pe(e,A){let t=A<<8|e;return t>32767?t-65536:t}function xo(e){return e>127?e-256:e}var us=class{header;size;chunkData;constructor(A,t,n){this.header=A,this.size=t,this.chunkData=n}};function AA(e,A=!0,t=!1){let n=$(e,4),s=v(e,4),r;return A&&(r=e.slice(e.currentIndex,e.currentIndex+s)),(A||t)&&(e.currentIndex+=s),s%2!==0&&e[e.currentIndex]===0&&e.currentIndex++,new us(n,s,r)}function P(e,A,t=!1,n=!1){let s=8,r=e,i=A.length;t&&i++;let a=i;n&&(s+=4,a+=4,r="LIST");let o=s+i;o%2!==0&&o++;let I=new U(o);return mA(I,r),eA(I,a),n&&mA(I,e),I.set(A,s),I}function FA(e,A,t=!1){let n=8,s=e,r=A.reduce((I,l)=>l.length+I,0),i=r;t&&(n+=4,i+=4,s="LIST");let a=n+r;a%2!==0&&a++;let o=new U(a);return mA(o,s),eA(o,i),t&&mA(o,e),A.forEach(I=>{o.set(I,n),n+=I.length}),o}function _A(e,A){return e.find(t=>t.header!=="LIST"?!1:(t.chunkData.currentIndex=0,$(t.chunkData,4)===A))}function No(){let e=Se;for(let i of this.instruments)e+=i.globalZone.generators.length*Se,e+=i.instrumentZones.reduce((a,o)=>(o.generators=o.generators.filter(I=>I.generatorType!==g.sampleID&&I.generatorType!==g.keyRange&&I.generatorType!==g.velRange),o.hasVelRange&&o.prependGenerator(new O(g.velRange,o.velRange.max<<8|Math.max(o.velRange.min,0),!1)),o.hasKeyRange&&o.prependGenerator(new O(g.keyRange,o.keyRange.max<<8|Math.max(o.keyRange.min,0),!1)),o.addGenerators(new O(g.sampleID,this.samples.indexOf(o.sample),!1)),o.generators.length*Se+a),0);let A=new U(e),t=i=>{for(let a of i.generators)H(A,a.generatorType),H(A,a.generatorValue)};for(let i of this.instruments){t(i.globalZone);for(let a of i.instrumentZones)t(a)}eA(A,0);let n=new U(Se);eA(n,0);let s=P("igen",A),r=P("igen",n);return{pdta:s,xdta:r,highestIndex:0}}var ms=20;function bo(e,A,t,n,s){let r=0,i=this.samples.map((I,l)=>{t&&I.compressSample(n,s);let c=I.getRawData();return y(`%cEncoded sample %c${l}. ${I.sampleName}%c of %c${this.samples.length}%c. Compressed: %c${I.isCompressed}%c.`,E.info,E.recognized,E.info,E.recognized,E.info,I.isCompressed?E.recognized:E.unrecognized,E.info),r+=c.length+(I.isCompressed?0:92),c});r%2!==0&&r++;let a=new U(r+ms);mA(a,"LIST"),ZA(a,r+ms-8,4),mA(a,"sdta"),mA(a,"smpl"),ZA(a,r,4);let o=0;return this.samples.forEach((I,l)=>{let c=i[l];a.set(c,o+ms);let h,B;I.isCompressed?(h=o,B=h+c.length):(h=o/2,B=h+c.length/2,o+=92),o+=c.length,e.push(h),A.push(B)}),a}var Hi=48e3,vA={monoSample:1,rightSample:2,leftSample:4,linkedSample:8,romMonoSample:32769,romRightSample:32770,romLeftSample:32772,romLinkedSample:32776},Me=class{sampleName;sampleRate;samplePitch;samplePitchCorrection;linkedSample;sampleType;sampleLoopStartIndex;sampleLoopEndIndex;isCompressed;compressedData=void 0;linkedInstruments=[];sampleData=void 0;dataOverriden=!1;constructor(A,t,n,s,r,i,a){this.sampleName=A,this.sampleRate=t,this.samplePitch=n,this.samplePitchCorrection=s,this.sampleLoopStartIndex=i,this.sampleLoopEndIndex=a,this.sampleType=r}get isLinked(){return this.sampleType===vA.rightSample||this.sampleType===vA.leftSample||this.sampleType===vA.linkedSample}get useCount(){return this.linkedInstruments.length}getRawData(A=!0){return this.encodeS16LE()}resampleData(A){let t=this.getAudioData(),n=A/this.sampleRate,s=new Float32Array(Math.floor(t.length*n));for(let r=0;r<s.length;r++)s[r]=t[Math.floor(r*(1/n))];t=s,this.sampleRate=A,this.sampleLoopStartIndex=Math.floor(this.sampleLoopStartIndex*n),this.sampleLoopEndIndex=Math.floor(this.sampleLoopEndIndex*n),this.sampleData=t}compressSample(A,t){if(!this.isCompressed)try{let n=this.getAudioData();(this.sampleRate<8e3||this.sampleRate>96e3)&&(this.resampleData(Hi),n=this.getAudioData()),this.compressedData=t([n],1,this.sampleRate,A),this.isCompressed=!0,this.dataOverriden=!1}catch{J(`Failed to compress ${this.sampleName}. Leaving as uncompressed!`),delete this.compressedData,this.isCompressed=!1}}setSampleType(A){if(this.sampleType=A,this.isLinked||(this.linkedSample&&(this.linkedSample.linkedSample=void 0,this.linkedSample.sampleType=A),this.linkedSample=void 0),(A&32768)>0)throw new Error("ROM samples are not supported.")}deleteSample(){if(this.useCount>0)throw new Error(`Cannot delete sample that has ${this.useCount} usages.`);this.unlinkSample()}unlinkSample(){this.setSampleType(vA.monoSample)}setLinkedSample(A,t){if(this.linkedSample=A,A.linkedSample=this,t===vA.leftSample)this.setSampleType(vA.leftSample),A.setSampleType(vA.rightSample);else if(t===vA.rightSample)this.setSampleType(vA.rightSample),A.setSampleType(vA.leftSample);else if(t===vA.linkedSample)this.setSampleType(vA.linkedSample),A.setSampleType(vA.linkedSample);else throw new Error("Invalid sample type: "+t)}linkTo(A){this.linkedInstruments.push(A)}unlinkFrom(A){let t=this.linkedInstruments.indexOf(A);if(t<0)throw new Error(`Cannot unlink ${A.instrumentName} from ${this.sampleName}: not linked.`);this.linkedInstruments.splice(t,1)}getAudioData(){if(!this.sampleData)throw new Error("Error! Sample data is undefined. Is the method overriden properly?");return this.sampleData}encodeS16LE(){let A=this.getAudioData(),t=new Int16Array(A.length),n=A.length;for(let s=0;s<n;s++){let r=A[s]*32768;r>32767?r=32767:r<-32768&&(r=-32768),t[s]=r}return new U(t.buffer)}setAudioData(A){this.isCompressed=!1,delete this.compressedData,this.sampleData=A,this.dataOverriden=!0}};var Qn=16,ps=class extends Me{linkedSampleIndex;sf2FileArrayHandle;s16leStart=0;s16leEnd=0;constructor(A,t,n,s,r,i,a,o,I,l,c,h){let B=(l&Qn)>0;l&=~Qn,super(A,i,a,o,l,s-t/2,r-t/2),this.isCompressed=B,this.sampleName=A,this.sampleStartIndex=t,this.sampleEndIndex=n,this.sampleID=h,this.sampleLength=this.sampleEndIndex-this.sampleStartIndex;let u=c.currentIndex;this.isCompressed?(this.sampleLoopStartIndex+=this.sampleStartIndex/2,this.sampleLoopEndIndex+=this.sampleStartIndex/2,this.sampleLength=99999999,this.compressedData=c.slice(this.sampleStartIndex/2+u,this.sampleEndIndex/2+u)):c instanceof Float32Array?this.sampleData=c.slice(this.sampleStartIndex/2,this.sampleEndIndex/2):(this.s16leStart=u+this.sampleStartIndex,this.s16leEnd=u+this.sampleEndIndex,this.sf2FileArrayHandle=c),this.linkedSampleIndex=I}getLinkedSample(A){if(this.linkedSample||!this.isLinked)return;A[this.linkedSampleIndex]?this.setLinkedSample(A[this.linkedSampleIndex],this.sampleType):(y(`%cInvalid linked sample for ${this.sampleName}. Setting to mono.`,E.warn),this.setSampleType(vA.monoSample))}decodeVorbis(){if(this.sampleData)return this.sampleData;if(this.sampleLength<1)return new Float32Array(0);try{let t=Ee.decode(this.compressedData).data[0];if(t===void 0)return J(`Error decoding sample ${this.sampleName}: Vorbis decode returned undefined.`),new Float32Array(0);for(let n=0;n<t.length;n++)t[n]=Math.max(-1,Math.min(t[n],.999969482421875));return t}catch(A){return J(`Error decoding sample ${this.sampleName}: ${A}`),new Float32Array(this.sampleLoopEndIndex+1)}}setAudioData(A){super.setAudioData(A)}getAudioData(){if(this.sampleData)return this.sampleData;if(this.sampleLength<1)return J(`Invalid sample ${this.sampleName}! Invalid length: ${this.sampleLength}`),new Float32Array(1);if(this.isCompressed)return this.sampleData=this.decodeVorbis(),this.sampleData;let A=new Float32Array(this.sampleLength/2),t=new Int16Array(this.sf2FileArrayHandle.buffer.slice(this.s16leStart,this.s16leEnd));for(let n=0;n<t.length;n++)A[n]=t[n]/32768;return this.sampleData=A,A}getRawData(A=!0){return this.dataOverriden?this.encodeS16LE():this.compressedData?A?this.compressedData:this.encodeS16LE():this.sf2FileArrayHandle.slice(this.s16leStart,this.s16leEnd)}};function ys(e,A,t=!0){let n=[],s=0;for(;e.chunkData.length>e.chunkData.currentIndex;){let r=Yi(s,e.chunkData,A);n.push(r),s++}return n.pop(),t&&n.forEach(r=>r.getLinkedSample(n)),n}function Yi(e,A,t){let n=$(A,20),s=v(A,4)*2,r=v(A,4)*2,i=v(A,4),a=v(A,4),o=v(A,4),I=A[A.currentIndex++];I>127&&(I=60);let l=xo(A[A.currentIndex++]),c=v(A,2),h=v(A,2);return new ps(n,s,r,i,a,o,I,l,c,h,t,e)}function Lo(e,A){let n=46*(this.samples.length+1),s=new U(n),r=new U(n),i=0;this.samples.forEach((I,l)=>{mA(s,I.sampleName.substring(0,20),20),mA(r,I.sampleName.substring(20),20);let c=e[l];eA(s,c),r.currentIndex+=4;let h=A[l];eA(s,h),r.currentIndex+=4;let B=I.sampleLoopStartIndex+c,u=I.sampleLoopEndIndex+c;I.isCompressed&&(B-=c,u-=c),eA(s,B),eA(s,u),eA(s,I.sampleRate),s[s.currentIndex++]=I.samplePitch,s[s.currentIndex++]=I.samplePitchCorrection,r.currentIndex+=14;let f=this.samples.indexOf(I.linkedSample);H(s,Math.max(0,f)&65535),H(r,Math.max(0,f)>>16),i=Math.max(i,f);let S=I.sampleType;I.isCompressed&&(S|=Qn),H(s,S),r.currentIndex+=2}),mA(s,"EOS",46),mA(r,"EOS",46);let a=P("shdr",s),o=P("shdr",r);return{pdta:a,xdta:o,highestIndex:i}}function To(){let e=TA;for(let i of this.instruments)e+=i.globalZone.modulators.length*TA,e+=i.instrumentZones.reduce((a,o)=>o.modulators.length*TA+a,0);let A=new U(e),t=i=>{for(let a of i.modulators)H(A,a.getSourceEnum()),H(A,a.modulatorDestination),H(A,a.transformAmount),H(A,a.getSecSrcEnum()),H(A,a.transformType)};for(let i of this.instruments){t(i.globalZone);for(let a of i.instrumentZones)t(a)}ZA(A,0,TA);let n=new U(TA);ZA(n,0,TA);let s=P("imod",A),r=P("imod",n);return{pdta:s,xdta:r,highestIndex:0}}var Uo=4;function vo(){let e=this.instruments.reduce((o,I)=>(I.instrumentZones.length+1)*Uo+o,Uo),A=new U(e),t=new U(e),n=0,s=0,r=o=>{H(A,n&65535),H(A,s&65535),H(t,n>>16),H(t,s>>16),n+=o.generators.length,s+=o.modulators.length};for(let o of this.instruments){r(o.globalZone);for(let I of o.instrumentZones)r(I)}H(A,n&65535),H(A,s&65535),H(t,n>>16),H(t,s>>16);let i=P("ibag",A),a=P("ibag",t);return{pdta:i,xdta:a,highestIndex:Math.max(n,s)}}var Ho=22;function Yo(){let e=this.instruments.length*Ho+Ho,A=new U(e),t=new U(e),n=0;for(let i of this.instruments)mA(A,i.instrumentName.substring(0,20),20),mA(t,i.instrumentName.substring(20),20),H(A,n&65535),H(t,n>>16),n+=i.instrumentZones.length+1;mA(A,"EOI",20),mA(t,"EOI",20),H(A,n&65535),H(t,n>>16);let s=P("inst",A),r=P("inst",t);return{pdta:s,xdta:r,highestIndex:n}}function Oo(){let e=Se;for(let i of this.presets)e+=i.globalZone.generators.length*Se,e+=i.presetZones.reduce((a,o)=>(o.generators=o.generators.filter(I=>I.generatorType!==g.instrument&&I.generatorType!==g.keyRange&&I.generatorType!==g.velRange),o.hasVelRange&&o.prependGenerator(new O(g.velRange,o.velRange.max<<8|Math.max(o.velRange.min,0),!1)),o.hasKeyRange&&o.prependGenerator(new O(g.keyRange,o.keyRange.max<<8|Math.max(o.keyRange.min,0),!1)),o.addGenerators(new O(g.instrument,this.instruments.indexOf(o.instrument),!1)),o.generators.length*Se+a),0);let A=new U(e),t=i=>{for(let a of i.generators)H(A,a.generatorType),H(A,a.generatorValue)};for(let i of this.presets){t(i.globalZone);for(let a of i.presetZones)t(a)}eA(A,0);let n=new U(Se);eA(n,0);let s=P("pgen",A),r=P("pgen",n);return{pdta:s,xdta:r,highestIndex:0}}function Jo(){let e=TA;for(let i of this.presets)e+=i.globalZone.modulators.length*TA,e+=i.presetZones.reduce((a,o)=>o.modulators.length*TA+a,0);let A=new U(e),t=i=>{for(let a of i.modulators)H(A,a.getSourceEnum()),H(A,a.modulatorDestination),H(A,a.transformAmount),H(A,a.getSecSrcEnum()),H(A,a.transformType)};for(let i of this.presets){t(i.globalZone);for(let a of i.presetZones)t(a)}ZA(A,0,TA);let n=new U(TA);ZA(n,0,TA);let s=P("pmod",A),r=P("pmod",n);return{pdta:s,xdta:r,highestIndex:0}}var Po=4;function Ko(){let e=this.presets.reduce((o,I)=>(I.presetZones.length+1)*Po+o,Po),A=new U(e),t=new U(e),n=0,s=0,r=o=>{H(A,n&65535),H(A,s&65535),H(t,n>>16),H(t,s>>16),n+=o.generators.length,s+=o.modulators.length};for(let o of this.presets){r(o.globalZone);for(let I of o.presetZones)r(I)}H(A,n),H(A,s),H(t,n),H(t,s);let i=P("pbag",A),a=P("pbag",t);return{pdta:i,xdta:a,highestIndex:Math.max(n,s)}}var qo=38;function Vo(){let e=this.presets.length*qo+qo,A=new U(e),t=new U(e),n=0;for(let i of this.presets)mA(A,i.presetName.substring(0,20),20),mA(t,i.presetName.substring(20),20),H(A,i.program),H(A,i.bank),H(A,n&65535),t.currentIndex+=4,H(t,n>>16),eA(A,i.library),eA(A,i.genre),eA(A,i.morphology),t.currentIndex+=12,n+=i.presetZones.length+1;mA(A,"EOP",20),A.currentIndex+=4,H(A,n&65535),A.currentIndex+=12,mA(t,"EOP",20),t.currentIndex+=4,H(t,n>>16),t.currentIndex+=12;let s=P("phdr",A),r=P("phdr",t);return{pdta:s,xdta:r,highestIndex:n}}function fn(e,A){e===void 0&&(e={});for(let t in A)A.hasOwnProperty(t)&&!(t in e)&&(e[t]=A[t]);return e}var Zo={compress:!1,compressionQuality:.5,compressionFunction:void 0,writeDefaultModulators:!0,writeExtendedLimits:!0};function Xo(e=Zo){if(e=fn(e,Zo),e.compress&&typeof e.compressionFunction!="function")throw new TypeError("No compression function supplied but compression enabled.");dA("%cSaving soundfont...",E.info),y(`%cCompression: %c${e?.compress||"false"}%c quality: %c${e?.compressionQuality||"none"}`,E.info,E.recognized,E.info,E.recognized),y("%cWriting INFO...",E.info);let A=[];this.soundFontInfo.ISFT="SpessaSynth",e?.compress&&(this.soundFontInfo.ifil="3.0"),e?.writeDefaultModulators?(this.soundFontInfo.DMOD=`${this.defaultModulators.length} Modulators`,this.customDefaultModulators=!0):delete this.soundFontInfo.DMOD;for(let[M,N]of Object.entries(this.soundFontInfo))if(M==="ifil"||M==="iver"){let C=parseInt(N.split(".")[0]),j=parseInt(N.split(".")[1]),T=new U(4);H(T,C),H(T,j),A.push(P(M,T))}else if(M==="DMOD"){let C=this.defaultModulators;y(`%cWriting %c${C.length}%c default modulators...`,E.info,E.recognized,E.info);let j=TA+C.length*TA,T=new U(j);for(let Y of C)H(T,Y.getSourceEnum()),H(T,Y.modulatorDestination),H(T,Y.transformAmount),H(T,Y.getSecSrcEnum()),H(T,Y.transformType);ZA(T,0,TA),A.push(P(M,T))}else A.push(P(M,YA(N,!0,!0)));y("%cWriting SDTA...",E.info);let t=[],n=[],s=bo.call(this,t,n,e?.compress,e?.compressionQuality??.5,e.compressionFunction);y("%cWriting PDTA...",E.info),y("%cWriting SHDR...",E.info);let r=Lo.call(this,t,n);y("%cWriting IGEN...",E.info);let i=No.call(this);y("%cWriting IMOD...",E.info);let a=To.call(this);y("%cWriting IBAG...",E.info);let o=vo.call(this);y("%cWriting INST...",E.info);let I=Yo.call(this);y("%cWriting PGEN...",E.info);let l=Oo.call(this);y("%cWriting PMOD...",E.info);let c=Jo.call(this);y("%cWriting PBAG...",E.info);let h=Ko.call(this);y("%cWriting PHDR...",E.info);let u=[Vo.call(this),h,c,l,I,o,a,i,r],f=FA("pdta",u.map(M=>M.pdta),!0),S=Math.max(...u.map(M=>M.highestIndex));if(e.writeExtendedLimits&&(S>65535||this.presets.some(M=>M.presetName.length>20)||this.instruments.some(M=>M.instrumentName.length>20)||this.samples.some(M=>M.sampleName.length>20))){y(`%cWriting the xdta chunk! Max index: %c${S}`,E.info,E.value);let M=FA("xdta",u.map(N=>N.xdta),!0);A.push(M)}let k=FA("INFO",A,!0);y("%cWriting the output file...",E.info);let F=FA("RIFF",[YA("sfbk"),k,s,f]);return y(`%cSaved succesfully! Final file size: %c${F.length}`,E.info,E.recognized),q(),F}var Ke=class{velRange={min:-1,max:127};keyRange={min:-1,max:127};generators=[];modulators=[];get hasKeyRange(){return this.keyRange.min!==-1}get hasVelRange(){return this.velRange.min!==-1}prependGenerator(A){this.generators.unshift(A)}setGenerator(A,t){switch(A){case g.sampleID:throw new Error("Use setSample()");case g.instrument:throw new Error("Use setInstrument()");case g.velRange:case g.keyRange:throw new Error("Set the range manually")}let n=this.generators.find(s=>s.generatorType===A);n?n.generatorValue=t:this.addGenerators(new O(A,t))}addGenerators(...A){A.forEach(t=>{switch(t.generatorType){default:this.generators.push(t);break;case g.velRange:this.velRange.min=t.generatorValue&127,this.velRange.max=t.generatorValue>>8&127;break;case g.keyRange:this.keyRange.min=t.generatorValue&127,this.keyRange.max=t.generatorValue>>8&127}})}addModulators(...A){this.modulators.push(...A)}getGeneratorValue(A,t){return this.generators.find(n=>n.generatorType===A)?.generatorValue??t}copyFrom(A){this.generators=[...A.generators],this.modulators=[...A.modulators],this.velRange={...A.velRange},this.keyRange={...A.keyRange}}};var qe=class extends Ke{};var xe=class e extends Ke{parentInstrument;sample;useCount;constructor(A){super(),this.parentInstrument=A,this.useCount=A.useCount}setSample(A){this.sample=A,A.linkTo(this.parentInstrument)}deleteZone(){this.sample.unlinkFrom(this.parentInstrument)}copyFrom(A){super.copyFrom(A),A instanceof e&&(this.sample=A.sample)}};var de=class{instrumentName="";instrumentZones=[];globalZone=new qe;linkedPresets=[];get useCount(){return this.linkedPresets.length}createZone(){let A=new xe(this);return this.instrumentZones.push(A),A}linkTo(A){this.linkedPresets.push(A),this.instrumentZones.forEach(t=>t.useCount++)}unlinkFrom(A){let t=this.linkedPresets.indexOf(A);if(t<0)throw new Error(`Cannot unlink ${A.presetName} from ${this.instrumentName}: not linked.`);this.linkedPresets.splice(t,1),this.instrumentZones.forEach(n=>n.useCount--)}deleteUnusedZones(){this.instrumentZones=this.instrumentZones.filter(A=>{let t=A.useCount>0;return t||A.deleteZone(),t})}deleteInstrument(){if(this.useCount>0)throw new Error(`Cannot delete an instrument that has ${this.useCount} usages.`);this.instrumentZones.forEach(A=>A.deleteZone()),this.instrumentZones.length=0}deleteZone(A){let t=this.instrumentZones[A];return t.useCount-=1,t.useCount<1?(t.deleteZone(),this.instrumentZones.splice(A,1),!0):!1}};var Oi=new Set([g.velRange,g.keyRange,g.instrument,g.exclusiveClass,g.endOper,g.sampleModes,g.startloopAddrsOffset,g.startloopAddrsCoarseOffset,g.endloopAddrsOffset,g.endloopAddrsCoarseOffset,g.startAddrsOffset,g.startAddrsCoarseOffset,g.endAddrOffset,g.endAddrsCoarseOffset,g.initialAttenuation,g.fineTune,g.coarseTune,g.keyNumToVolEnvHold,g.keyNumToVolEnvDecay,g.keyNumToModEnvHold,g.keyNumToModEnvDecay]);function Wo(e,A=!0){function t(h,B){h.push(...B.filter(u=>!h.find(f=>f.generatorType===u.generatorType)))}function n(h,B){return{min:Math.max(h.min,B.min),max:Math.min(h.max,B.max)}}function s(h,B){h.push(...B.filter(u=>!h.find(f=>CA.isIdentical(u,f))))}let r=new de,i=[],a=[],o=e.globalZone;i.push(...o.generators),a.push(...o.modulators);let I=o.keyRange,l=o.velRange;for(let h of e.presetZones){let B=h.keyRange;h.hasKeyRange||(B=I);let u=h.velRange;h.hasVelRange||(u=l);let f=h.generators.map(T=>new O(T.generatorType,T.generatorValue));t(f,i);let S=[...h.modulators];s(S,a);let G=h.instrument,k=G.instrumentZones,F=[],M=[],N=G.globalZone;F.push(...N.generators),M.push(...N.modulators);let C=N.keyRange,j=N.velRange;for(let T of k){let Y=T.keyRange;T.hasKeyRange||(Y=C);let iA=T.velRange;if(T.hasVelRange||(iA=j),Y=n(Y,B),iA=n(iA,u),Y.max<Y.min||iA.max<iA.min)continue;let IA=T.generators.map(W=>new O(W.generatorType,W.generatorValue));t(IA,F);let oA=[...T.modulators];s(oA,M);let gA=[...oA];for(let W of S){let L=gA.findIndex(D=>CA.isIdentical(W,D));L!==-1?gA[L]=gA[L].sumTransform(W):gA.push(W)}let uA=IA.map(W=>new O(W.generatorType,W.generatorValue));for(let W of f){if(W.generatorType===g.velRange||W.generatorType===g.keyRange||W.generatorType===g.instrument||W.generatorType===g.endOper||W.generatorType===g.sampleModes)continue;let L=IA.findIndex(D=>D.generatorType===W.generatorType);if(L!==-1){let D=uA[L].generatorValue+W.generatorValue;uA[L]=new O(W.generatorType,D)}else{let D=V[W.generatorType].def+W.generatorValue;uA.push(new O(W.generatorType,D))}}uA=uA.filter(W=>W.generatorType!==g.sampleID&&W.generatorType!==g.keyRange&&W.generatorType!==g.velRange&&W.generatorType!==g.endOper&&W.generatorType!==g.instrument&&W.generatorValue!==V[W.generatorType].def);let cA=r.createZone();cA.keyRange=Y,cA.velRange=iA,cA.keyRange.min===0&&cA.keyRange.max===127&&(cA.keyRange.min=-1),cA.velRange.min===0&&cA.velRange.max===127&&(cA.velRange.min=-1),cA.setSample(T.sample),cA.addGenerators(...uA),cA.addModulators(...gA)}}let c=r.globalZone;if(A){for(let u=0;u<58;u++){if(Oi.has(u))continue;let f={},S=V[u]?.def||0;f[S]=0;for(let G of r.instrumentZones){let k=G.generators.find(N=>N.generatorType===u);if(k){let N=k.generatorValue;f[N]===void 0?f[N]=1:f[N]++}else f[S]++;let F;switch(u){default:continue;case g.decayVolEnv:F=g.keyNumToVolEnvDecay;break;case g.holdVolEnv:F=g.keyNumToVolEnvHold;break;case g.decayModEnv:F=g.keyNumToModEnvDecay;break;case g.holdModEnv:F=g.keyNumToModEnvHold}if(G.generators.find(N=>N.generatorType===F)!==void 0){f={};break}}if(Object.keys(f).length>0){let G=Object.entries(f).reduce((F,M)=>F[1]<M[1]?M:F,[0,0]),k=parseInt(G[0]);k!==S&&c.addGenerators(new O(u,k)),r.instrumentZones.forEach(F=>{let M=F.generators.findIndex(N=>N.generatorType===u);M!==-1?F.generators[M].generatorValue===k&&F.generators.splice(M,1):k!==S&&F.addGenerators(new O(u,S))})}}let B=r.instrumentZones[0].modulators.map(u=>CA.copy(u));for(let u of B){let f=!0;for(let S of r.instrumentZones){if(!f)continue;S.modulators.find(k=>CA.isIdentical(k,u))||(f=!1)}if(f===!0){c.addModulators(CA.copy(u));for(let S of r.instrumentZones){let G=S.modulators.find(k=>CA.isIdentical(k,u));G.transformAmount===u.transformAmount&&S.modulators.splice(S.modulators.indexOf(G),1)}}}}return r}var _o=20;function un(e,A,t,n,s,r,i){let a=i===0?0:1,o=new U(_o+a*16);eA(o,_o),H(o,A),H(o,t);let I=n*.4,l=Math.floor(I*-65536);eA(o,l),eA(o,2);let c=r-s,h=0;switch(i){default:case 0:a=0;break;case 1:h=0,a=1;break;case 3:h=1,a=1}return eA(o,a),a===1&&(eA(o,16),eA(o,h),eA(o,s),eA(o,c)),P("wsmp",o)}var Z={none:0,modLfo:1,velocity:2,keyNum:3,volEnv:4,modEnv:5,pitchWheel:6,polyPressure:7,channelPressure:8,vibratoLfo:9,modulationWheel:129,volume:135,pan:138,expression:139,chorus:221,reverb:219,pitchWheelRange:256,fineTune:257,coarseTune:258},mn=new pA(219,0,g.reverbEffectsSend,1e3,0),pn=new pA(221,0,g.chorusEffectsSend,1e3,0),yn=new pA(129,0,g.vibLfoToPitch,0,0),Sn=new pA(13,0,g.vibLfoToPitch,0,0);var x={none:0,gain:1,reserved:2,pitch:3,pan:4,keyNum:5,chorusSend:128,reverbSend:129,modLfoFreq:260,modLfoDelay:261,vibLfoFreq:276,vibLfoDelay:277,volEnvAttack:518,volEnvDecay:519,volEnvRelease:521,volEnvSustain:522,volEnvDelay:523,volEnvHold:524,modEnvAttack:778,modEnvDecay:779,modEnvRelease:781,modEnvSustain:782,modEnvDelay:783,modEnvHold:784,filterCutoff:1280,filterQ:1281};var Kt=class{source;control;destination;scale;transform;constructor(A,t,n,s,r){this.source=A,this.control=t,this.destination=n,this.scale=s,this.transform=r}writeArticulator(){let A=new U(12);return H(A,this.source),H(A,this.control),H(A,this.destination),H(A,this.transform),eA(A,this.scale<<16),A}};function zo(e,A){if(e)switch(A){default:return;case p.modulationWheel:return Z.modulationWheel;case p.mainVolume:return Z.volume;case p.pan:return Z.pan;case p.expressionController:return Z.expression;case p.chorusDepth:return Z.chorus;case p.reverbDepth:return Z.reverb}else switch(A){default:return;case X.noteOnKeyNum:return Z.keyNum;case X.noteOnVelocity:return Z.velocity;case X.noController:return Z.none;case X.polyPressure:return Z.polyPressure;case X.channelPressure:return Z.channelPressure;case X.pitchWheel:return Z.pitchWheel;case X.pitchWheelRange:return Z.pitchWheelRange}}function jo(e,A){switch(e){default:return;case g.initialAttenuation:return{dest:x.gain,amount:-A};case g.fineTune:return x.pitch;case g.pan:return x.pan;case g.keyNum:return x.keyNum;case g.reverbEffectsSend:return x.reverbSend;case g.chorusEffectsSend:return x.chorusSend;case g.freqModLFO:return x.modLfoFreq;case g.delayModLFO:return x.modLfoDelay;case g.delayVibLFO:return x.vibLfoDelay;case g.freqVibLFO:return x.vibLfoFreq;case g.delayVolEnv:return x.volEnvDelay;case g.attackVolEnv:return x.volEnvAttack;case g.holdVolEnv:return x.volEnvHold;case g.decayVolEnv:return x.volEnvDecay;case g.sustainVolEnv:return{dest:x.volEnvSustain,amount:1e3-A};case g.releaseVolEnv:return x.volEnvRelease;case g.delayModEnv:return x.modEnvDelay;case g.attackModEnv:return x.modEnvAttack;case g.holdModEnv:return x.modEnvHold;case g.decayModEnv:return x.modEnvDecay;case g.sustainModEnv:return{dest:x.modEnvSustain,amount:1e3-A};case g.releaseModEnv:return x.modEnvRelease;case g.initialFilterFc:return x.filterCutoff;case g.initialFilterQ:return x.filterQ}}function $o(e,A){switch(e){default:return;case g.modEnvToFilterFc:return{source:Z.modEnv,dest:x.filterCutoff,amt:A,isBipolar:!1};case g.modEnvToPitch:return{source:Z.modEnv,dest:x.pitch,amt:A,isBipolar:!1};case g.modLfoToFilterFc:return{source:Z.modLfo,dest:x.filterCutoff,amt:A,isBipolar:!0};case g.modLfoToVolume:return{source:Z.modLfo,dest:x.gain,amt:A,isBipolar:!0};case g.modLfoToPitch:return{source:Z.modLfo,dest:x.pitch,amt:A,isBipolar:!0};case g.vibLfoToPitch:return{source:Z.vibratoLfo,dest:x.pitch,amt:A,isBipolar:!0};case g.keyNumToVolEnvHold:return{source:Z.keyNum,dest:x.volEnvHold,amt:A,isBipolar:!0};case g.keyNumToVolEnvDecay:return{source:Z.keyNum,dest:x.volEnvDecay,amt:A,isBipolar:!0};case g.keyNumToModEnvHold:return{source:Z.keyNum,dest:x.modEnvHold,amt:A,isBipolar:!0};case g.keyNumToModEnvDecay:return{source:Z.keyNum,dest:x.modEnvDecay,amt:A,isBipolar:!0};case g.scaleTuning:return{source:Z.keyNum,dest:x.pitch,amt:A*128,isBipolar:!1}}}function Ar(e){let A=jo(e.generatorType,e.generatorValue),t=A,n=0,s=e.generatorValue;A?.amount!==void 0&&(s=A.amount,t=A.dest);let r=$o(e.generatorType,e.generatorValue);if(r!==void 0)s=r.amt,t=r.dest,n=r.source;else if(t===void 0){J(`Invalid generator type: ${e.generatorType}`);return}return new Kt(n,0,t,s,0)}function er(e){if(e.transformType!==0){J("Other transform types are not supported.");return}let A=zo(e.sourceUsesCC,e.sourceIndex),t=e.sourceCurveType,n=e.sourcePolarity,s=e.sourceDirection;if(A===void 0){J(`Invalid source: ${e.sourceIndex}, CC: ${e.sourceUsesCC}`);return}e.modulatorDestination===g.initialAttenuation&&(s=s===1?0:1);let r=zo(e.secSrcUsesCC,e.secSrcIndex),i=e.secSrcCurveType,a=e.secSrcPolarity,o=e.secSrcDirection;if(r===void 0){J(`Invalid secondary source: ${e.secSrcIndex}, CC: ${e.secSrcUsesCC}`);return}let I=jo(e.modulatorDestination,e.transformAmount),l=I,c=e.transformAmount;I?.dest!==void 0&&(l=I.dest,c=I.amount);let h=$o(e.modulatorDestination,e.transformAmount);if(h!==void 0)c=h.amt,r=A,i=t,a=n,o=s,t=kA.linear,n=h.isBipolar?1:0,s=0,A=h.source,l=h.dest;else if(l===void 0){J(`Invalid destination: ${e.modulatorDestination}`);return}let B=0;return B|=i<<4,B|=a<<8,B|=o<<9,B|=t,B|=n<<14,B|=s<<15,new Kt(A,r,l,c,B)}var Ji=new Set([g.sampleModes,g.initialAttenuation,g.keyRange,g.velRange,g.sampleID,g.fineTune,g.coarseTune,g.startAddrsOffset,g.startAddrsCoarseOffset,g.endAddrOffset,g.endAddrsCoarseOffset,g.startloopAddrsOffset,g.startloopAddrsCoarseOffset,g.endloopAddrsOffset,g.endloopAddrsCoarseOffset,g.overridingRootKey,g.exclusiveClass]);function Dn(e){for(let r=0;r<e.generators.length;r++){let i=e.generators[r];(i.generatorType===g.delayVolEnv||i.generatorType===g.attackVolEnv||i.generatorType===g.holdVolEnv||i.generatorType===g.decayVolEnv||i.generatorType===g.releaseVolEnv||i.generatorType===g.delayModEnv||i.generatorType===g.attackModEnv||i.generatorType===g.holdModEnv||i.generatorType===g.decayModEnv)&&(e.generators[r]=new O(i.generatorType,Math.min(i.generatorValue,6386),!1))}for(let r=0;r<e.generators.length;r++){let i=e.generators[r],a;switch(i.generatorType){default:continue;case g.keyNumToVolEnvDecay:a=g.decayVolEnv;break;case g.keyNumToVolEnvHold:a=g.holdVolEnv;break;case g.keyNumToModEnvDecay:a=g.decayModEnv;break;case g.keyNumToModEnvHold:a=g.holdModEnv}let o=e.generators.find(u=>u.generatorType===a);if(o===void 0)continue;let I=i.generatorValue*-128,l=60/128*I,c=o.generatorValue-l,h=e.generators.indexOf(i),B=e.generators.indexOf(o);e.generators[B]=new O(a,c,!1),e.generators[h]=new O(i.generatorType,I,!1)}let A=e.generators.reduce((r,i)=>{if(Ji.has(i.generatorType))return r;let a=Ar(i);return a!==void 0?(r.push(a),y("%cSucceeded converting to DLS Articulator!",E.recognized)):J("Failed converting to DLS Articulator!"),r},[]),t=e.modulators.reduce((r,i)=>{if(CA.isIdentical(i,pn,!0)||CA.isIdentical(i,mn,!0)||CA.isIdentical(i,yn,!0)||CA.isIdentical(i,Sn,!0))return r;let a=er(i);return a!==void 0?(r.push(a),y("%cSucceeded converting to DLS Articulator!",E.recognized)):J("Failed converting to DLS Articulator!"),r},[]);A.push(...t);let n=new U(8);eA(n,8),eA(n,A.length);let s=A.map(r=>r.writeArticulator());return FA("art2",[n,...s])}function tr(e,A){let t=new U(12);H(t,Math.max(e.keyRange.min,0)),H(t,e.keyRange.max),H(t,Math.max(e.velRange.min,0)),H(t,e.velRange.max),H(t,0);let n=e.getGeneratorValue(g.exclusiveClass,0);H(t,n),H(t,0);let s=P("rgnh",t),r=e.getGeneratorValue(g.overridingRootKey,e.sample.samplePitch);e.getGeneratorValue(g.scaleTuning,A.getGeneratorValue(g.scaleTuning,100))===0&&e.keyRange.max-e.keyRange.min===0&&(r=e.keyRange.min);let a=un(e.sample,r,e.getGeneratorValue(g.fineTune,0)+e.getGeneratorValue(g.coarseTune,0)*100+e.sample.samplePitchCorrection,e.getGeneratorValue(g.initialAttenuation,0),e.sample.sampleLoopStartIndex+e.getGeneratorValue(g.startloopAddrsOffset,0)+e.getGeneratorValue(g.startloopAddrsCoarseOffset,0)*32768,e.sample.sampleLoopEndIndex+e.getGeneratorValue(g.endloopAddrsOffset,0)+e.getGeneratorValue(g.endloopAddrsCoarseOffset,0)*32768,e.getGeneratorValue(g.sampleModes,0)),o=new U(12);H(o,0),H(o,0),eA(o,1),eA(o,this.samples.indexOf(e.sample));let I=P("wlnk",o),l=new U(0);if(e.modulators.length+e.generators.length>0){let c=Dn(e);l=P("lar2",c,!1,!0)}return FA("rgn2",[s,a,I,l],!0)}function nr(e){dA(`%cWriting %c${e.presetName}%c...`,E.info,E.recognized,E.info);let A=Wo(e),t=A.globalZone,n=A.instrumentZones,s=new U(12);eA(s,n.length);let r=(e.bank&127)<<8;e.bank===128&&(r|=1<<31),eA(s,r),eA(s,e.program&127);let i=P("insh",s),a=Dn(t),o=P("lar2",a,!1,!0),I=FA("lrgn",n.reduce((h,B)=>(h.push(tr.apply(this,[B,t])),h),[]),!0),l=P("INAM",YA(e.presetName,!0)),c=P("INFO",l,!1,!0);return q(),FA("ins ",[i,I,o,c],!0)}function sr(){return FA("lins",this.presets.map(e=>nr.apply(this,[e])),!0)}function or(e){let A=new U(18);H(A,1),H(A,1),eA(A,e.sampleRate),eA(A,e.sampleRate*2),H(A,2),H(A,16);let t=P("fmt ",A),n=1;e.sampleLoopStartIndex+Math.abs(e.getAudioData().length-e.sampleLoopEndIndex)<2&&(n=0);let s=un(e,e.samplePitch,e.samplePitchCorrection,0,e.sampleLoopStartIndex,e.sampleLoopEndIndex,n),r=P("data",e.getRawData(!1)),i=P("INAM",YA(e.sampleName,!0)),a=P("INFO",i,!1,!0);return y(`%cSaved %c${e.sampleName}%c succesfully!`,E.recognized,E.value,E.recognized),FA("wave",[t,s,r,a],!0)}function rr(){let e=0,A=[],t=this.samples.map(n=>{let s=or(n);return A.push(e),e+=s.length,s});return{data:FA("wvpl",t,!0),indexes:A}}function ir(){dA("%cSaving DLS...",E.info);let e=new U(4);eA(e,this.presets.length);let A=P("colh",e);dA("%cWriting instruments...",E.info);let t=sr.apply(this);y("%cSuccess!",E.recognized),q(),dA("%cWriting WAVE samples...",E.info);let n=rr.apply(this),s=n.data,r=n.indexes;y("%cSucceeded!",E.recognized),q();let i=new U(8+4*r.length);eA(i,8),eA(i,r.length);for(let l of r)eA(i,l);let a=P("ptbl",i);this.soundFontInfo.ICMT=(this.soundFontInfo.ICMT||"Soundfont")+`
|
|
11
|
+
Converted from SF2 to DLS using SpessaSynth`,this.soundFontInfo.ISFT="SpessaSynth";let o=[];for(let[l,c]of Object.entries(this.soundFontInfo))l!=="ICMT"&&l!=="INAM"&&l!=="ICRD"&&l!=="IENG"&&l!=="ICOP"&&l!=="ISFT"&&l!=="ISBJ"||o.push(P(l,YA(c,!0)));let I=FA("INFO",o,!0);return y("%cSaved succesfully!",E.recognized),q(),FA("RIFF",[YA("DLS "),A,t,a,s,I])}var tt=class e extends Ke{parentPreset;instrument;constructor(A){super(),this.parentPreset=A}deleteZone(){this.instrument.unlinkFrom(this.parentPreset)}setInstrument(A){this.instrument=A,this.instrument.linkTo(this.parentPreset)}copyFrom(A){super.copyFrom(A),A instanceof e&&(this.instrument=A.instrument)}};var Ne=class{parentSoundBank;presetName="";program=0;bank=0;presetZones=[];globalZone=new qe;library=0;genre=0;morphology=0;constructor(A){this.parentSoundBank=A}isDrumPreset(A,t=!1){let n=A&&this.parentSoundBank.isXGBank;return this.bank===128||n&&te(this.bank)&&(this.bank!==126||t)}deletePreset(){this.presetZones.forEach(A=>A.deleteZone()),this.presetZones.length=0}deleteZone(A){this.presetZones[A].deleteZone(),this.presetZones.splice(A,1)}createZone(){let A=new tt(this);return this.presetZones.push(A),A}preload(A,t){for(let n=A;n<t+1;n++)for(let s=0;s<128;s++)this.getSamplesAndGenerators(n,s).forEach(r=>{r.sample.getAudioData()})}getSamplesAndGenerators(A,t){if(this.presetZones.length<1)return[];function n(h,B){return B>=h.min&&B<=h.max}function s(h,B){h.push(...B.filter(u=>!h.find(f=>f.generatorType===u.generatorType)))}function r(h,B){h.push(...B.filter(u=>!h.find(f=>CA.isIdentical(u,f))))}let i=[],a=[...this.globalZone.generators],o=[...this.globalZone.modulators],I=this.globalZone.keyRange,l=this.globalZone.velRange;return this.presetZones.filter(h=>n(h.hasKeyRange?h.keyRange:I,A)&&n(h.hasVelRange?h.velRange:l,t)).forEach(h=>{let B=h.instrument;if(B.instrumentZones.length<1)return;let u=h.generators,f=h.modulators,S=[...B.globalZone.generators],G=[...B.globalZone.modulators],k=B.globalZone.keyRange,F=B.globalZone.velRange;B.instrumentZones.filter(N=>n(N.hasKeyRange?N.keyRange:k,A)&&n(N.hasVelRange?N.velRange:F,t)).forEach(N=>{let C=[...N.generators],j=[...N.modulators];s(u,a),s(C,S),r(f,o),r(j,G),r(j,this.parentSoundBank.defaultModulators);let T=[...j];for(let Y=0;Y<f.length;Y++){let iA=f[Y],IA=T.findIndex(oA=>CA.isIdentical(iA,oA));IA!==-1?T[IA]=T[IA].sumTransform(iA):T.push(iA)}i.push({instrumentGenerators:C,presetGenerators:u,modulators:T,sample:N.sample})})}),i}};var be=class e{static isSF3DecoderReady=Ee.isInitialized;soundFontInfo={};presets=[];samples=[];instruments=[];defaultModulators=Eo.map(A=>CA.copy(A));customDefaultModulators=!1;isXGBank=!1;constructor(A=void 0){if(A?.presets){this.soundFontInfo=A.info,this.addPresets(...A.presets);let t=[];for(let s of A.presets)for(let r of s.presetZones)t.includes(r.instrument)||t.push(r.instrument);this.addInstruments(...t);let n=[];for(let s of t)for(let r of s.instrumentZones)n.includes(r.sample)||n.push(r.sample);this.addSamples(...n)}}static mergeSoundBanks(...A){let t=A.shift(),n=t.presets;for(;A.length;)A.shift().presets.forEach(r=>{n.find(i=>i.bank===r.bank&&i.program===r.program)===void 0&&n.push(r)});return new e({presets:n,info:t.soundFontInfo})}static getDummySoundfontFile(){let A=new e,t=new Me("Saw",44100,65,20,0,0,127);t.sampleData=new Float32Array(128);for(let I=0;I<128;I++)t.sampleData[I]=I/128*2-1;A.addSamples(t);let n=new qe;n.addGenerators(new O(g.initialAttenuation,375),new O(g.releaseVolEnv,-1e3),new O(g.sampleModes,1));let s=new de;s.instrumentName="Saw Wave",s.globalZone=n,s.createZone().setSample(t);let i=s.createZone();i.setSample(t),i.addGenerators(new O(g.fineTune,-9)),A.addInstruments(s);let a=new Ne(A);return a.presetName="Saw Wave",a.createZone().setInstrument(s),A.addPresets(a),A.soundFontInfo.ifil="2.1",A.soundFontInfo.isng="E-mu 10K2",A.soundFontInfo.INAM="Dummy",A.flush(),A.write().buffer}addPresets(...A){this.presets.push(...A)}flush(){this.presets.sort((A,t)=>A.bank!==t.bank?A.bank-t.bank:A.program-t.program),this._parseInternal()}addInstruments(...A){this.instruments.push(...A)}addSamples(...A){this.samples.push(...A)}_parseInternal(){this.isXGBank=!1;let A=new Set([0,1,2,3,4,5,6,7,8,9,16,17,24,25,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(te(t.bank)&&(this.isXGBank=!0,!A.has(t.program))){this.isXGBank=!1,y(`%cThis bank is not valid XG. Preset %c${t.bank}:${t.program}%c is not a valid XG drum. XG mode will use presets on bank 128.`,E.info,E.value,E.info);break}}trimSoundBank(A){let t=this;function n(r,i){let a=0;for(let o=0;o<r.instrumentZones.length;o++){let I=r.instrumentZones[o],l=I.keyRange,c=I.velRange,h=!1;for(let B of i)if(B.key>=l.min&&B.key<=l.max&&B.velocity>=c.min&&B.velocity<=c.max){h=!0;break}h||(y(`%c${I.sample.sampleName} %cremoved from %c${r.instrumentName}%c.`,E.recognized,E.info,E.recognized,E.info),r.deleteZone(o)&&(a++,o--,y(`%c${I.sample.sampleName} %cdeleted`,E.recognized,E.info)),I.sample.useCount<1&&t.deleteSample(I.sample))}return a}Ie("%cTrimming soundfont...",E.info);let s=A.getUsedProgramsAndKeys(t);dA("%cModifying soundfont...",E.info),y("Detected keys for midi:",s);for(let r=0;r<t.presets.length;r++){let i=t.presets[r],a=i.bank+":"+i.program,o=s[a];if(o===void 0)y(`%cDeleting preset %c${i.presetName}%c and its zones`,E.info,E.recognized,E.info),t.deletePreset(i),r--;else{let I=[...o].map(c=>{let h=c.split("-");return{key:parseInt(h[0]),velocity:parseInt(h[1])}});dA(`%cTrimming %c${i.presetName}`,E.info,E.recognized),y(`Keys for ${i.presetName}:`,I);let l=0;for(let c=0;c<i.presetZones.length;c++){let h=i.presetZones[c],B=h.keyRange,u=h.velRange,f=!1;for(let S of I)if(S.key>=B.min&&S.key<=B.max&&S.velocity>=u.min&&S.velocity<=u.max){f=!0;let G=n(h.instrument,I);y(`%cTrimmed off %c${G}%c zones from %c${h.instrument.instrumentName}`,E.info,E.recognized,E.info,E.recognized);break}f||(l++,i.deleteZone(c),h.instrument.useCount<1&&t.deleteInstrument(h.instrument),c--)}y(`%cTrimmed off %c${l}%c zones from %c${i.presetName}`,E.info,E.recognized,E.info,E.recognized),q()}}t.removeUnusedElements(),t.soundFontInfo.ICMT=`NOTE: This soundfont was trimmed by SpessaSynth to only contain presets used in "${A.midiName}"
|
|
12
12
|
|
|
13
|
-
`+t.soundFontInfo.ICMT,y("%cSoundfont modified!",c.recognized),Z(),Z()}removeUnusedElements(){this.instruments=this.instruments.filter(A=>{A.deleteUnusedZones();let t=A.useCount<1;return t&&A.deleteInstrument(),!t}),this.samples=this.samples.filter(A=>{let t=A.useCount<1;return t&&A.deleteSample(),!t})}deleteInstrument(A){A.deleteInstrument(),this.instruments.splice(this.instruments.indexOf(A),1)}deletePreset(A){A.deletePreset(),this.presets.splice(this.presets.indexOf(A),1)}deleteSample(A){A.deleteSample(),this.samples.splice(this.samples.indexOf(A),1)}getPresetNoFallback(A,t,n=!1){let s=A===128||n&&ne(A),r;if(s?r=this.presets.find(i=>i.bank===A&&i.isDrumPreset(n)&&i.program===t):r=this.presets.find(i=>i.bank===A&&i.program===t),r)return r;if(s&&n){let i=this.presets.find(a=>a.isDrumPreset(n)&&a.program===t);if(i)return i}}getPreset(A,t,n=!1){let s=A===128||n&&ne(A),r;return s?r=this.presets.find(i=>i.bank===A&&i.isDrumPreset(n)&&i.program===t):r=this.presets.find(i=>i.bank===A&&i.program===t),r||(s?(r=this.presets.find(i=>i.isDrumPreset(n)&&i.program===t),r||(r=this.presets.find(i=>i.isDrumPreset(n)))):r=this.presets.find(i=>i.program===t&&!i.isDrumPreset(n)),r&&P(`%cPreset ${A}.${t} not found. Replaced with %c${r.presetName} (${r.bank}.${r.program})`,c.warn,c.recognized),r||(P(`Preset ${t} not found. Defaulting to`,this.presets[0].presetName),r=this.presets[0]),r)}getPresetByName(A){let t=this.presets.find(n=>n.presetName===A);return t||(P("Preset not found. Defaulting to:",this.presets[0].presetName),t=this.presets[0]),t}parsingError(A){throw new Error(`SF parsing error: ${A} The file may be corrupted.`)}destroySoundBank(){delete this.presets,delete this.instruments,delete this.samples,delete this.soundFontInfo}};Te.prototype.write=Xo;Te.prototype.writeDLS=ir;function ar(e){fA("%cLoading instruments...",c.info);for(let A=0;A<this.instrumentAmount;A++)this.readDLSInstrument(tA(e.chunkData));Z()}var wn=class extends be{constructor(A){super(A)}setWavesample(A,t,n,s,r,i,a){t!==0&&this.addGenerators(new Y(g.sampleModes,t)),this.addGenerators(new Y(g.initialAttenuation,A)),a-=r.samplePitchCorrection;let o=Math.trunc(a/100);o!==0&&this.addGenerators(new Y(g.coarseTune,o));let I=a-o*100;if(I!==0&&this.addGenerators(new Y(g.fineTune,I)),t!==0){let B=n.start-r.sampleLoopStartIndex,C=n.end-r.sampleLoopEndIndex;if(B!==0){let h=B%32768;this.addGenerators(new Y(g.startloopAddrsOffset,h));let l=Math.trunc(B/32768);l!==0&&this.addGenerators(new Y(g.startloopAddrsCoarseOffset,l))}if(C!==0){let h=C%32768;this.addGenerators(new Y(g.endloopAddrsOffset,h));let l=Math.trunc(C/32768);l!==0&&this.addGenerators(new Y(g.endloopAddrsCoarseOffset,l))}}s!==r.samplePitch&&this.addGenerators(new Y(g.overridingRootKey,s)),this.setSample(r)}};var Rn=class extends Qe{constructor(){super()}createZone(){let A=new wn(this);return this.instrumentZones.push(A),A}};var Gn=class extends Le{dlsInstrument=new Rn;constructor(A,t,n){super(A),this.program=n&127;let s=t>>8&127,r=t&127;s>0?this.bank=s:this.bank=r,t>>31&&(this.bank=128),this.createZone().setInstrument(this.dlsInstrument)}};function gr(e){this.verifyHeader(e,"LIST"),this.verifyText(eA(e.chunkData,4),"ins ");let A=[];for(;e.chunkData.length>e.chunkData.currentIndex;)A.push(tA(e.chunkData));let t=A.find(l=>l.header==="insh");if(!t)throw Z(),new Error("No instrument header!");let n=U(t.chunkData,4),s=U(t.chunkData,4),r=U(t.chunkData,4),i=new Gn(this,s,r),a="unnamedPreset",o=zA(A,"INFO");if(o){let l=tA(o.chunkData);for(;l.header!=="INAM";)l=tA(o.chunkData);a=eA(l.chunkData,l.chunkData.length).trim()}i.presetName=a,i.dlsInstrument.instrumentName=a,fA(`%cParsing %c"${a}"%c...`,c.info,c.recognized,c.info);let I=zA(A,"lrgn");if(!I)throw Z(),new Error("No region list!");let B=i.dlsInstrument.globalZone,C=zA(A,"lart"),h=zA(A,"lar2");(h!==void 0||C!==void 0)&&this.readLart(C,h,B),B.generators=B.generators.filter(l=>l.generatorValue!==X[l.generatorType].def),B.modulators.find(l=>l.modulatorDestination===g.reverbEffectsSend)===void 0&&B.addModulators(hA.copy(yn)),B.modulators.find(l=>l.modulatorDestination===g.chorusEffectsSend)===void 0&&B.addModulators(hA.copy(Sn));for(let l=0;l<n;l++){let u=tA(I.chunkData);this.verifyHeader(u,"LIST");let f=eA(u.chunkData,4);f!=="rgn "&&f!=="rgn2"&&(Z(),this.parsingError(`Invalid DLS region! Expected "rgn " or "rgn2" got "${f}"`));let S=i.dlsInstrument.createZone();this.readRegion(u,S)}this.addPresets(i),this.addInstruments(i.dlsInstrument),Z()}function Ir(e){let A,t=!1;switch(e){default:case W.modLfo:case W.vibratoLfo:case W.coarseTune:case W.fineTune:case W.modEnv:return;case W.keyNum:A=_.noteOnKeyNum;break;case W.none:A=_.noController;break;case W.modulationWheel:A=p.modulationWheel,t=!0;break;case W.pan:A=p.pan,t=!0;break;case W.reverb:A=p.reverbDepth,t=!0;break;case W.chorus:A=p.chorusDepth,t=!0;break;case W.expression:A=p.expressionController,t=!0;break;case W.volume:A=p.mainVolume,t=!0;break;case W.velocity:A=_.noteOnVelocity;break;case W.polyPressure:A=_.polyPressure;break;case W.channelPressure:A=_.channelPressure;break;case W.pitchWheel:A=_.pitchWheel;break;case W.pitchWheelRange:A=_.pitchWheelRange;break}if(A===void 0)throw new Error(`Unknown DLS Source: ${e}`);return{enum:A,isCC:t}}function Pi(e,A){switch(e){default:case G.none:return;case G.pan:return g.pan;case G.gain:return{gen:g.initialAttenuation,newAmount:A*-1};case G.pitch:return g.fineTune;case G.keyNum:return g.overridingRootKey;case G.volEnvDelay:return g.delayVolEnv;case G.volEnvAttack:return g.attackVolEnv;case G.volEnvHold:return g.holdVolEnv;case G.volEnvDecay:return g.decayVolEnv;case G.volEnvSustain:return{gen:g.sustainVolEnv,newAmount:1e3-A};case G.volEnvRelease:return g.releaseVolEnv;case G.modEnvDelay:return g.delayModEnv;case G.modEnvAttack:return g.attackModEnv;case G.modEnvHold:return g.holdModEnv;case G.modEnvDecay:return g.decayModEnv;case G.modEnvSustain:return{gen:g.sustainModEnv,newAmount:(1e3-A)/10};case G.modEnvRelease:return g.releaseModEnv;case G.filterCutoff:return g.initialFilterFc;case G.filterQ:return g.initialFilterQ;case G.chorusSend:return g.chorusEffectsSend;case G.reverbSend:return g.reverbEffectsSend;case G.modLfoFreq:return g.freqModLFO;case G.modLfoDelay:return g.delayModLFO;case G.vibLfoFreq:return g.freqVibLFO;case G.vibLfoDelay:return g.delayVibLFO}}function Ki(e,A){return e===W.vibratoLfo&&A===G.pitch?g.vibLfoToPitch:e===W.modLfo&&A===G.pitch?g.modLfoToPitch:e===W.modLfo&&A===G.filterCutoff?g.modLfoToFilterFc:e===W.modLfo&&A===G.gain?g.modLfoToVolume:e===W.modEnv&&A===G.filterCutoff?g.modEnvToFilterFc:e===W.modEnv&&A===G.pitch?g.modEnvToPitch:void 0}function cr(e,A,t,n,s){let r=Ki(e,t),i,a,o=!1,I=!1,B=s;if(r===void 0){let R=Pi(t,s);if(R===void 0){P(`Invalid destination: ${t}`);return}if(i=R,R.newAmount!==void 0&&(B=R.newAmount,i=R.gen),a=Ir(e),a===void 0){P(`Invalid source: ${e}`);return}}else i=r,o=!0,a={enum:_.noController,isCC:!1},I=!0;let C=Ir(A);if(C===void 0){P(`Invalid control: ${A}`);return}let h;if(I)h=0;else{let R=n&15,D=n>>10&15;D===wA.linear&&R!==wA.linear&&(D=R);let x=n>>14&1,J=n>>15&1;i===g.initialAttenuation&&s<0&&(J=1),h=_A(D,x,J,a.isCC,a.enum)}i===g.initialAttenuation&&(B=Math.max(960,Math.min(0,B)));let l=n>>4&15,u=n>>8&1,f=n>>9&1,S=_A(l,u,f,C.isCC,C.enum);if(o){let R=S;S=h,h=R}return new pA(h,S,i,B,0)}function Ss(e,A){let t=e.chunkData,n=[],s=[];U(t,4);let r=U(t,4);for(let i=0;i<r;i++){let a=U(t,2),o=U(t,2),I=U(t,2),B=U(t,2),h=(U(t,4)|0)>>16;if(a===0&&o===0&&B===0){let l;switch(I){case G.pan:l=new Y(g.pan,h);break;case G.gain:l=new Y(g.initialAttenuation,-h*10/.4);break;case G.filterCutoff:l=new Y(g.initialFilterFc,h);break;case G.filterQ:l=new Y(g.initialFilterQ,h);break;case G.modLfoFreq:l=new Y(g.freqModLFO,h);break;case G.modLfoDelay:l=new Y(g.delayModLFO,h);break;case G.vibLfoFreq:l=new Y(g.freqVibLFO,h);break;case G.vibLfoDelay:l=new Y(g.delayVibLFO,h);break;case G.volEnvDelay:l=new Y(g.delayVolEnv,h);break;case G.volEnvAttack:l=new Y(g.attackVolEnv,h);break;case G.volEnvHold:l=new Y(g.holdVolEnv,h,!1);break;case G.volEnvDecay:l=new Y(g.decayVolEnv,h,!1);break;case G.volEnvRelease:l=new Y(g.releaseVolEnv,h);break;case G.volEnvSustain:let u=1e3-h;l=new Y(g.sustainVolEnv,u);break;case G.modEnvDelay:l=new Y(g.delayModEnv,h);break;case G.modEnvAttack:l=new Y(g.attackModEnv,h);break;case G.modEnvHold:l=new Y(g.holdModEnv,h,!1);break;case G.modEnvDecay:l=new Y(g.decayModEnv,h,!1);break;case G.modEnvRelease:l=new Y(g.releaseModEnv,h);break;case G.modEnvSustain:let f=1e3-h;l=new Y(g.sustainModEnv,f);break;case G.reverbSend:l=new Y(g.reverbEffectsSend,h);break;case G.chorusSend:l=new Y(g.chorusEffectsSend,h);break;case G.pitch:let S=Math.floor(h/100),R=Math.floor(h-S*100);l=new Y(g.fineTune,R),n.push(new Y(g.coarseTune,S));break}l&&n.push(l)}else{let l=!0,u=(f,S,R)=>{let D=f/-128;if(n.push(new Y(S,D)),D<=120){let x=Math.round(.46875*f);n.forEach(J=>{J.generatorType===R&&(J.generatorValue+=x)})}};if(o===W.none?a===W.modLfo&&I===G.pitch?n.push(new Y(g.modLfoToPitch,h)):a===W.modLfo&&I===G.gain?n.push(new Y(g.modLfoToVolume,h)):a===W.modLfo&&I===G.filterCutoff?n.push(new Y(g.modLfoToFilterFc,h)):a===W.vibratoLfo&&I===G.pitch?n.push(new Y(g.vibLfoToPitch,h)):a===W.modEnv&&I===G.pitch?n.push(new Y(g.modEnvToPitch,h)):a===W.modEnv&&I===G.filterCutoff?n.push(new Y(g.modEnvToFilterFc,h)):a===W.keyNum&&I===G.pitch?n.push(new Y(g.scaleTuning,h/128)):a===W.keyNum&&I===G.volEnvHold?u(h,g.keyNumToVolEnvHold,g.holdVolEnv):a===W.keyNum&&I===G.volEnvDecay?u(h,g.keyNumToVolEnvDecay,g.decayVolEnv):a===W.keyNum&&I===G.modEnvHold?u(h,g.keyNumToModEnvHold,g.holdModEnv):a===W.keyNum&&I===G.modEnvDecay?u(h,g.keyNumToModEnvDecay,g.decayModEnv):l=!1:l=!1,l===!1){let f=cr(a,o,I,B,h);f?(s.push(f),y("%cSucceeded converting to SF2 Modulator!",c.recognized)):P("Failed converting to SF2 Modulator!")}}}return A&&s.push(hA.copy(Dn),hA.copy(kn)),{modulators:s,generators:n}}function Er(e,A,t){if(e)for(;e.chunkData.currentIndex<e.chunkData.length;){let n=tA(e.chunkData);this.verifyHeader(n,"art1","art2");let s=Ss(n,!0);t.addGenerators(...s.generators),t.addModulators(...s.modulators)}if(A)for(;A.chunkData.currentIndex<A.chunkData.length;){let n=tA(A.chunkData);this.verifyHeader(n,"art2","art1");let s=Ss(n,!1);t.addGenerators(...s.generators),t.addModulators(...s.modulators)}}function Cr(e,A){let t=[];for(;e.chunkData.length>e.chunkData.currentIndex;)t.push(tA(e.chunkData));let n=t.find(b=>b.header==="rgnh"),s=U(n.chunkData,2),r=U(n.chunkData,2),i=U(n.chunkData,2),a=U(n.chunkData,2);i===0&&a===0&&(a=127,i=0),A.keyRange={min:s,max:r},A.velRange={min:i,max:a},U(n.chunkData,2);let o=U(n.chunkData,2);o!==0&&A.addGenerators(new Y(g.exclusiveClass,o));let I=zA(t,"lart"),B=zA(t,"lar2");this.readLart(I,B,A);let C=t.find(b=>b.header==="wsmp");U(C.chunkData,4);let h=U(C.chunkData,2),l=qe(C.chunkData[C.chunkData.currentIndex++],C.chunkData[C.chunkData.currentIndex++]),f=(U(C.chunkData,4)|0)/-655360;U(C.chunkData,4);let S=U(C.chunkData,4),R,D={start:0,end:0};if(S===0)R=0;else{U(C.chunkData,4),U(C.chunkData,4)===0?R=1:R=3,D.start=U(C.chunkData,4);let $=U(C.chunkData,4);D.end=D.start+$}let x=t.find(b=>b.header==="wlnk");if(x===void 0)return;U(x.chunkData,2),U(x.chunkData,2),U(x.chunkData,4);let J=U(x.chunkData,4),H=this.samples[J];if(H===void 0)throw new Error("Invalid sample ID!");let L=(f||H.sampleDbAttenuation)*10/.4;A.setWavesample(L,R,D,h,H,J,l)}var Ds={PCM:1,ALAW:6};function qi(e,A){let t=Math.pow(2,A*8-1),n=Math.pow(2,A*8),s,r=!1;A===1?(s=255,r=!0):s=t;let i=e.length/A,a=new Float32Array(i);if(A===2){let o=new Int16Array(e.buffer);for(let I=0;I<o.length;I++)a[I]=o[I]/32768}else for(let o=0;o<a.length;o++){let I=U(e,A);r?a[o]=I/s-.5:(I>=t&&(I-=n),a[o]=I/s)}return a}function Vi(e,A){let t=e/A,n=new Float32Array(t);for(let s=0;s<n.length;s++){let r=U(e,A),i=r^85;i&=127;let a=i>>4,o=i&15;a>0&&(o+=16),o=(o<<4)+8,a>1&&(o=o<<a-1);let I=r>127?o:-o;n[s]=I/32678}return n}var Mn=class extends Ne{sampleDbAttenuation;sampleData;wFormatTag;bytesPerSample;rawData;constructor(A,t,n,s,r,i,a,o,I,B){super(A,t,n,s,OA.monoSample,r,i),this.sampleDbAttenuation=a,this.rawData=o.chunkData,this.wFormatTag=I,this.bytesPerSample=B}getAudioData(){if(!(this.rawData instanceof Uint8Array))return new Float32Array(0);if(!this.sampleData){let A;switch(this.wFormatTag){default:P(`Failed to decode sample. Unknown wFormatTag: ${this.wFormatTag}`),A=new Float32Array(this.rawData.length/this.bytesPerSample);break;case Ds.PCM:A=qi(this.rawData,this.bytesPerSample);break;case Ds.ALAW:A=Vi(this.rawData,this.bytesPerSample);break}this.setAudioData(A)}return this.sampleData}setAudioData(A){super.setAudioData(A)}getRawData(A=!0){return this.dataOverriden?this.encodeS16LE():this.compressedData&&A?this.compressedData:this.wFormatTag===Ds.PCM&&this.bytesPerSample===2?this.rawData:this.encodeS16LE()}};function hr(e){fA("%cLoading Wave samples...",c.recognized);let A=0;for(;e.chunkData.currentIndex<e.chunkData.length;){let t=tA(e.chunkData);this.verifyHeader(t,"LIST"),this.verifyText(eA(t.chunkData,4),"wave");let n=[];for(;t.chunkData.currentIndex<t.chunkData.length;)n.push(tA(t.chunkData));let s=n.find(J=>J.header==="fmt ");if(!s)throw new Error("No fmt chunk in the wave file!");let r=U(s.chunkData,2),i=U(s.chunkData,2);if(i!==1)throw new Error(`Only mono samples are supported. Fmt reports ${i} channels`);let a=U(s.chunkData,4);U(s.chunkData,4),U(s.chunkData,2);let I=U(s.chunkData,2)/8,B=n.find(J=>J.header==="data");B||this.parsingError("No data chunk in the WAVE chunk!");let C=zA(n,"INFO"),h=`Unnamed ${A}`;if(C){let J=tA(C.chunkData);for(;J.header!=="INAM"&&C.chunkData.currentIndex<C.chunkData.length;)J=tA(C.chunkData);J.header==="INAM"&&(h=eA(J.chunkData,J.size).trim())}let l=60,u=0,f=0,R=B.size/I-1,D=0,x=n.find(J=>J.header==="wsmp");if(x){U(x.chunkData,4),l=U(x.chunkData,2),u=qe(x.chunkData[x.chunkData.currentIndex++],x.chunkData[x.chunkData.currentIndex++]);let J=Math.trunc(u/100);if(l+=J,u-=J*100,D=(U(x.chunkData,4)|0)/-655360,U(x.chunkData,4),U(x.chunkData,4)===1){U(x.chunkData,8),f=U(x.chunkData,4);let L=U(x.chunkData,4);R=f+L}}else P("No wsmp chunk in wave... using sane defaults.");this.samples.push(new Mn(h,a,l,u,f,R,D,B,r,I)),A++,y(`%cLoaded sample %c${h}`,c.info,c.recognized)}Z()}var Ue=class extends Te{constructor(A){super(),this.dataArray=new N(A),ce("%cParsing DLS...",c.info),this.dataArray||(Z(),this.parsingError("No data provided!"));let t=tA(this.dataArray,!1);this.verifyHeader(t,"riff"),this.verifyText(eA(this.dataArray,4).toLowerCase(),"dls ");let n=[];for(;this.dataArray.currentIndex<this.dataArray.length;)n.push(tA(this.dataArray));this.soundFontInfo.ifil="2.1",this.soundFontInfo.isng="EMU8000",this.soundFontInfo.INAM="Unnamed DLS",this.soundFontInfo.IENG="Unknown",this.soundFontInfo.IPRD="SpessaSynth DLS",this.soundFontInfo.ICRD=new Date().toDateString();let s=zA(n,"INFO");if(s)for(;s.chunkData.currentIndex<s.chunkData.length;){let o=tA(s.chunkData);this.soundFontInfo[o.header]=eA(o.chunkData,o.size)}this.soundFontInfo.ICMT=this.soundFontInfo.ICMT||"(No description)",this.soundFontInfo.ISBJ&&(this.soundFontInfo.ICMT+=`
|
|
13
|
+
`+t.soundFontInfo.ICMT,y("%cSoundfont modified!",E.recognized),q(),q()}removeUnusedElements(){this.instruments=this.instruments.filter(A=>{A.deleteUnusedZones();let t=A.useCount<1;return t&&A.deleteInstrument(),!t}),this.samples=this.samples.filter(A=>{let t=A.useCount<1;return t&&A.deleteSample(),!t})}deleteInstrument(A){A.deleteInstrument(),this.instruments.splice(this.instruments.indexOf(A),1)}deletePreset(A){A.deletePreset(),this.presets.splice(this.presets.indexOf(A),1)}deleteSample(A){A.deleteSample(),this.samples.splice(this.samples.indexOf(A),1)}getPresetNoFallback(A,t,n=!1){let s=A===128||n&&te(A),r;if(s?r=this.presets.find(i=>i.bank===A&&i.isDrumPreset(n)&&i.program===t):r=this.presets.find(i=>i.bank===A&&i.program===t),r)return r;if(s&&n){let i=this.presets.find(a=>a.isDrumPreset(n)&&a.program===t);if(i)return i}}getPreset(A,t,n=!1){let s=A===128||n&&te(A),r;return s?r=this.presets.find(i=>i.bank===A&&i.isDrumPreset(n)&&i.program===t):r=this.presets.find(i=>i.bank===A&&i.program===t),r||(s?(r=this.presets.find(i=>i.isDrumPreset(n)&&i.program===t),r||(r=this.presets.find(i=>i.isDrumPreset(n)))):r=this.presets.find(i=>i.program===t&&!i.isDrumPreset(n)),r&&J(`%cPreset ${A}.${t} not found. Replaced with %c${r.presetName} (${r.bank}.${r.program})`,E.warn,E.recognized),r||(J(`Preset ${t} not found. Defaulting to`,this.presets[0].presetName),r=this.presets[0]),r)}getPresetByName(A){let t=this.presets.find(n=>n.presetName===A);return t||(J("Preset not found. Defaulting to:",this.presets[0].presetName),t=this.presets[0]),t}parsingError(A){throw new Error(`SF parsing error: ${A} The file may be corrupted.`)}destroySoundBank(){delete this.presets,delete this.instruments,delete this.samples,delete this.soundFontInfo}};be.prototype.write=Xo;be.prototype.writeDLS=ir;function ar(e){dA("%cLoading instruments...",E.info);for(let A=0;A<this.instrumentAmount;A++)this.readDLSInstrument(AA(e.chunkData));q()}var kn=class extends xe{constructor(A){super(A)}setWavesample(A,t,n,s,r,i,a){t!==0&&this.addGenerators(new O(g.sampleModes,t)),this.addGenerators(new O(g.initialAttenuation,A)),a-=r.samplePitchCorrection;let o=Math.trunc(a/100);o!==0&&this.addGenerators(new O(g.coarseTune,o));let I=a-o*100;if(I!==0&&this.addGenerators(new O(g.fineTune,I)),t!==0){let l=n.start-r.sampleLoopStartIndex,c=n.end-r.sampleLoopEndIndex;if(l!==0){let h=l%32768;this.addGenerators(new O(g.startloopAddrsOffset,h));let B=Math.trunc(l/32768);B!==0&&this.addGenerators(new O(g.startloopAddrsCoarseOffset,B))}if(c!==0){let h=c%32768;this.addGenerators(new O(g.endloopAddrsOffset,h));let B=Math.trunc(c/32768);B!==0&&this.addGenerators(new O(g.endloopAddrsCoarseOffset,B))}}s!==r.samplePitch&&this.addGenerators(new O(g.overridingRootKey,s)),this.setSample(r)}};var Fn=class extends de{constructor(){super()}createZone(){let A=new kn(this);return this.instrumentZones.push(A),A}};var wn=class extends Ne{dlsInstrument=new Fn;constructor(A,t,n){super(A),this.program=n&127;let s=t>>8&127,r=t&127;s>0?this.bank=s:this.bank=r,t>>31&&(this.bank=128),this.createZone().setInstrument(this.dlsInstrument)}};function gr(e){this.verifyHeader(e,"LIST"),this.verifyText($(e.chunkData,4),"ins ");let A=[];for(;e.chunkData.length>e.chunkData.currentIndex;)A.push(AA(e.chunkData));let t=A.find(B=>B.header==="insh");if(!t)throw q(),new Error("No instrument header!");let n=v(t.chunkData,4),s=v(t.chunkData,4),r=v(t.chunkData,4),i=new wn(this,s,r),a="unnamedPreset",o=_A(A,"INFO");if(o){let B=AA(o.chunkData);for(;B.header!=="INAM";)B=AA(o.chunkData);a=$(B.chunkData,B.chunkData.length).trim()}i.presetName=a,i.dlsInstrument.instrumentName=a,dA(`%cParsing %c"${a}"%c...`,E.info,E.recognized,E.info);let I=_A(A,"lrgn");if(!I)throw q(),new Error("No region list!");let l=i.dlsInstrument.globalZone,c=_A(A,"lart"),h=_A(A,"lar2");(h!==void 0||c!==void 0)&&this.readLart(c,h,l),l.generators=l.generators.filter(B=>B.generatorValue!==V[B.generatorType].def),l.modulators.find(B=>B.modulatorDestination===g.reverbEffectsSend)===void 0&&l.addModulators(CA.copy(mn)),l.modulators.find(B=>B.modulatorDestination===g.chorusEffectsSend)===void 0&&l.addModulators(CA.copy(pn));for(let B=0;B<n;B++){let u=AA(I.chunkData);this.verifyHeader(u,"LIST");let f=$(u.chunkData,4);f!=="rgn "&&f!=="rgn2"&&(q(),this.parsingError(`Invalid DLS region! Expected "rgn " or "rgn2" got "${f}"`));let S=i.dlsInstrument.createZone();this.readRegion(u,S)}this.addPresets(i),this.addInstruments(i.dlsInstrument),q()}function Ir(e){let A,t=!1;switch(e){default:case Z.modLfo:case Z.vibratoLfo:case Z.coarseTune:case Z.fineTune:case Z.modEnv:return;case Z.keyNum:A=X.noteOnKeyNum;break;case Z.none:A=X.noController;break;case Z.modulationWheel:A=p.modulationWheel,t=!0;break;case Z.pan:A=p.pan,t=!0;break;case Z.reverb:A=p.reverbDepth,t=!0;break;case Z.chorus:A=p.chorusDepth,t=!0;break;case Z.expression:A=p.expressionController,t=!0;break;case Z.volume:A=p.mainVolume,t=!0;break;case Z.velocity:A=X.noteOnVelocity;break;case Z.polyPressure:A=X.polyPressure;break;case Z.channelPressure:A=X.channelPressure;break;case Z.pitchWheel:A=X.pitchWheel;break;case Z.pitchWheelRange:A=X.pitchWheelRange;break}if(A===void 0)throw new Error(`Unknown DLS Source: ${e}`);return{enum:A,isCC:t}}function Pi(e,A){switch(e){default:case x.none:return;case x.pan:return g.pan;case x.gain:return{gen:g.initialAttenuation,newAmount:A*-1};case x.pitch:return g.fineTune;case x.keyNum:return g.overridingRootKey;case x.volEnvDelay:return g.delayVolEnv;case x.volEnvAttack:return g.attackVolEnv;case x.volEnvHold:return g.holdVolEnv;case x.volEnvDecay:return g.decayVolEnv;case x.volEnvSustain:return{gen:g.sustainVolEnv,newAmount:1e3-A};case x.volEnvRelease:return g.releaseVolEnv;case x.modEnvDelay:return g.delayModEnv;case x.modEnvAttack:return g.attackModEnv;case x.modEnvHold:return g.holdModEnv;case x.modEnvDecay:return g.decayModEnv;case x.modEnvSustain:return{gen:g.sustainModEnv,newAmount:(1e3-A)/10};case x.modEnvRelease:return g.releaseModEnv;case x.filterCutoff:return g.initialFilterFc;case x.filterQ:return g.initialFilterQ;case x.chorusSend:return g.chorusEffectsSend;case x.reverbSend:return g.reverbEffectsSend;case x.modLfoFreq:return g.freqModLFO;case x.modLfoDelay:return g.delayModLFO;case x.vibLfoFreq:return g.freqVibLFO;case x.vibLfoDelay:return g.delayVibLFO}}function Ki(e,A){return e===Z.vibratoLfo&&A===x.pitch?g.vibLfoToPitch:e===Z.modLfo&&A===x.pitch?g.modLfoToPitch:e===Z.modLfo&&A===x.filterCutoff?g.modLfoToFilterFc:e===Z.modLfo&&A===x.gain?g.modLfoToVolume:e===Z.modEnv&&A===x.filterCutoff?g.modEnvToFilterFc:e===Z.modEnv&&A===x.pitch?g.modEnvToPitch:void 0}function Er(e,A,t,n,s){let r=Ki(e,t),i,a,o=!1,I=!1,l=s;if(r===void 0){let G=Pi(t,s);if(G===void 0){J(`Invalid destination: ${t}`);return}if(i=G,G.newAmount!==void 0&&(l=G.newAmount,i=G.gen),a=Ir(e),a===void 0){J(`Invalid source: ${e}`);return}}else i=r,o=!0,a={enum:X.noController,isCC:!1},I=!0;let c=Ir(A);if(c===void 0){J(`Invalid control: ${A}`);return}let h;if(I)h=0;else{let G=n&15,k=n>>10&15;k===kA.linear&&G!==kA.linear&&(k=G);let F=n>>14&1,M=n>>15&1;i===g.initialAttenuation&&s<0&&(M=1),h=WA(k,F,M,a.isCC,a.enum)}i===g.initialAttenuation&&(l=Math.max(960,Math.min(0,l)));let B=n>>4&15,u=n>>8&1,f=n>>9&1,S=WA(B,u,f,c.isCC,c.enum);if(o){let G=S;S=h,h=G}return new pA(h,S,i,l,0)}function Ss(e,A){let t=e.chunkData,n=[],s=[];v(t,4);let r=v(t,4);for(let i=0;i<r;i++){let a=v(t,2),o=v(t,2),I=v(t,2),l=v(t,2),h=(v(t,4)|0)>>16;if(a===0&&o===0&&l===0){let B;switch(I){case x.pan:B=new O(g.pan,h);break;case x.gain:B=new O(g.initialAttenuation,-h*10/.4);break;case x.filterCutoff:B=new O(g.initialFilterFc,h);break;case x.filterQ:B=new O(g.initialFilterQ,h);break;case x.modLfoFreq:B=new O(g.freqModLFO,h);break;case x.modLfoDelay:B=new O(g.delayModLFO,h);break;case x.vibLfoFreq:B=new O(g.freqVibLFO,h);break;case x.vibLfoDelay:B=new O(g.delayVibLFO,h);break;case x.volEnvDelay:B=new O(g.delayVolEnv,h);break;case x.volEnvAttack:B=new O(g.attackVolEnv,h);break;case x.volEnvHold:B=new O(g.holdVolEnv,h,!1);break;case x.volEnvDecay:B=new O(g.decayVolEnv,h,!1);break;case x.volEnvRelease:B=new O(g.releaseVolEnv,h);break;case x.volEnvSustain:let u=1e3-h;B=new O(g.sustainVolEnv,u);break;case x.modEnvDelay:B=new O(g.delayModEnv,h);break;case x.modEnvAttack:B=new O(g.attackModEnv,h);break;case x.modEnvHold:B=new O(g.holdModEnv,h,!1);break;case x.modEnvDecay:B=new O(g.decayModEnv,h,!1);break;case x.modEnvRelease:B=new O(g.releaseModEnv,h);break;case x.modEnvSustain:let f=1e3-h;B=new O(g.sustainModEnv,f);break;case x.reverbSend:B=new O(g.reverbEffectsSend,h);break;case x.chorusSend:B=new O(g.chorusEffectsSend,h);break;case x.pitch:let S=Math.floor(h/100),G=Math.floor(h-S*100);B=new O(g.fineTune,G),n.push(new O(g.coarseTune,S));break}B&&n.push(B)}else{let B=!0,u=(f,S,G)=>{let k=f/-128;if(n.push(new O(S,k)),k<=120){let F=Math.round(.46875*f);n.forEach(M=>{M.generatorType===G&&(M.generatorValue+=F)})}};if(o===Z.none?a===Z.modLfo&&I===x.pitch?n.push(new O(g.modLfoToPitch,h)):a===Z.modLfo&&I===x.gain?n.push(new O(g.modLfoToVolume,h)):a===Z.modLfo&&I===x.filterCutoff?n.push(new O(g.modLfoToFilterFc,h)):a===Z.vibratoLfo&&I===x.pitch?n.push(new O(g.vibLfoToPitch,h)):a===Z.modEnv&&I===x.pitch?n.push(new O(g.modEnvToPitch,h)):a===Z.modEnv&&I===x.filterCutoff?n.push(new O(g.modEnvToFilterFc,h)):a===Z.keyNum&&I===x.pitch?n.push(new O(g.scaleTuning,h/128)):a===Z.keyNum&&I===x.volEnvHold?u(h,g.keyNumToVolEnvHold,g.holdVolEnv):a===Z.keyNum&&I===x.volEnvDecay?u(h,g.keyNumToVolEnvDecay,g.decayVolEnv):a===Z.keyNum&&I===x.modEnvHold?u(h,g.keyNumToModEnvHold,g.holdModEnv):a===Z.keyNum&&I===x.modEnvDecay?u(h,g.keyNumToModEnvDecay,g.decayModEnv):B=!1:B=!1,B===!1){let f=Er(a,o,I,l,h);f?(s.push(f),y("%cSucceeded converting to SF2 Modulator!",E.recognized)):J("Failed converting to SF2 Modulator!")}}}return A&&s.push(CA.copy(yn),CA.copy(Sn)),{modulators:s,generators:n}}function cr(e,A,t){if(e)for(;e.chunkData.currentIndex<e.chunkData.length;){let n=AA(e.chunkData);this.verifyHeader(n,"art1","art2");let s=Ss(n,!0);t.addGenerators(...s.generators),t.addModulators(...s.modulators)}if(A)for(;A.chunkData.currentIndex<A.chunkData.length;){let n=AA(A.chunkData);this.verifyHeader(n,"art2","art1");let s=Ss(n,!1);t.addGenerators(...s.generators),t.addModulators(...s.modulators)}}function Cr(e,A){let t=[];for(;e.chunkData.length>e.chunkData.currentIndex;)t.push(AA(e.chunkData));let n=t.find(T=>T.header==="rgnh"),s=v(n.chunkData,2),r=v(n.chunkData,2),i=v(n.chunkData,2),a=v(n.chunkData,2);i===0&&a===0&&(a=127,i=0),A.keyRange={min:s,max:r},A.velRange={min:i,max:a},v(n.chunkData,2);let o=v(n.chunkData,2);o!==0&&A.addGenerators(new O(g.exclusiveClass,o));let I=_A(t,"lart"),l=_A(t,"lar2");this.readLart(I,l,A);let c=t.find(T=>T.header==="wsmp");v(c.chunkData,4);let h=v(c.chunkData,2),B=Pe(c.chunkData[c.chunkData.currentIndex++],c.chunkData[c.chunkData.currentIndex++]),f=(v(c.chunkData,4)|0)/-655360;v(c.chunkData,4);let S=v(c.chunkData,4),G,k={start:0,end:0};if(S===0)G=0;else{v(c.chunkData,4),v(c.chunkData,4)===0?G=1:G=3,k.start=v(c.chunkData,4);let Y=v(c.chunkData,4);k.end=k.start+Y}let F=t.find(T=>T.header==="wlnk");if(F===void 0)return;v(F.chunkData,2),v(F.chunkData,2),v(F.chunkData,4);let M=v(F.chunkData,4),N=this.samples[M];if(N===void 0)throw new Error("Invalid sample ID!");let j=(f||N.sampleDbAttenuation)*10/.4;A.setWavesample(j,G,k,h,N,M,B)}var Ds={PCM:1,ALAW:6};function qi(e,A){let t=Math.pow(2,A*8-1),n=Math.pow(2,A*8),s,r=!1;A===1?(s=255,r=!0):s=t;let i=e.length/A,a=new Float32Array(i);if(A===2){let o=new Int16Array(e.buffer);for(let I=0;I<o.length;I++)a[I]=o[I]/32768}else for(let o=0;o<a.length;o++){let I=v(e,A);r?a[o]=I/s-.5:(I>=t&&(I-=n),a[o]=I/s)}return a}function Vi(e,A){let t=e/A,n=new Float32Array(t);for(let s=0;s<n.length;s++){let r=v(e,A),i=r^85;i&=127;let a=i>>4,o=i&15;a>0&&(o+=16),o=(o<<4)+8,a>1&&(o=o<<a-1);let I=r>127?o:-o;n[s]=I/32678}return n}var Rn=class extends Me{sampleDbAttenuation;sampleData;wFormatTag;bytesPerSample;rawData;constructor(A,t,n,s,r,i,a,o,I,l){super(A,t,n,s,vA.monoSample,r,i),this.sampleDbAttenuation=a,this.rawData=o.chunkData,this.wFormatTag=I,this.bytesPerSample=l}getAudioData(){if(!(this.rawData instanceof Uint8Array))return new Float32Array(0);if(!this.sampleData){let A;switch(this.wFormatTag){default:J(`Failed to decode sample. Unknown wFormatTag: ${this.wFormatTag}`),A=new Float32Array(this.rawData.length/this.bytesPerSample);break;case Ds.PCM:A=qi(this.rawData,this.bytesPerSample);break;case Ds.ALAW:A=Vi(this.rawData,this.bytesPerSample);break}this.setAudioData(A)}return this.sampleData}setAudioData(A){super.setAudioData(A)}getRawData(A=!0){return this.dataOverriden?this.encodeS16LE():this.compressedData&&A?this.compressedData:this.wFormatTag===Ds.PCM&&this.bytesPerSample===2?this.rawData:this.encodeS16LE()}};function hr(e){dA("%cLoading Wave samples...",E.recognized);let A=0;for(;e.chunkData.currentIndex<e.chunkData.length;){let t=AA(e.chunkData);this.verifyHeader(t,"LIST"),this.verifyText($(t.chunkData,4),"wave");let n=[];for(;t.chunkData.currentIndex<t.chunkData.length;)n.push(AA(t.chunkData));let s=n.find(M=>M.header==="fmt ");if(!s)throw new Error("No fmt chunk in the wave file!");let r=v(s.chunkData,2),i=v(s.chunkData,2);if(i!==1)throw new Error(`Only mono samples are supported. Fmt reports ${i} channels`);let a=v(s.chunkData,4);v(s.chunkData,4),v(s.chunkData,2);let I=v(s.chunkData,2)/8,l=n.find(M=>M.header==="data");l||this.parsingError("No data chunk in the WAVE chunk!");let c=_A(n,"INFO"),h=`Unnamed ${A}`;if(c){let M=AA(c.chunkData);for(;M.header!=="INAM"&&c.chunkData.currentIndex<c.chunkData.length;)M=AA(c.chunkData);M.header==="INAM"&&(h=$(M.chunkData,M.size).trim())}let B=60,u=0,f=0,G=l.size/I-1,k=0,F=n.find(M=>M.header==="wsmp");if(F){v(F.chunkData,4),B=v(F.chunkData,2),u=Pe(F.chunkData[F.chunkData.currentIndex++],F.chunkData[F.chunkData.currentIndex++]);let M=Math.trunc(u/100);if(B+=M,u-=M*100,k=(v(F.chunkData,4)|0)/-655360,v(F.chunkData,4),v(F.chunkData,4)===1){v(F.chunkData,8),f=v(F.chunkData,4);let j=v(F.chunkData,4);G=f+j}}else J("No wsmp chunk in wave... using sane defaults.");this.samples.push(new Rn(h,a,B,u,f,G,k,l,r,I)),A++,y(`%cLoaded sample %c${h}`,E.info,E.recognized)}q()}var Le=class extends be{constructor(A){super(),this.dataArray=new U(A),Ie("%cParsing DLS...",E.info),this.dataArray||(q(),this.parsingError("No data provided!"));let t=AA(this.dataArray,!1);this.verifyHeader(t,"riff"),this.verifyText($(this.dataArray,4).toLowerCase(),"dls ");let n=[];for(;this.dataArray.currentIndex<this.dataArray.length;)n.push(AA(this.dataArray));this.soundFontInfo.ifil="2.1",this.soundFontInfo.isng="E-mu 10K2",this.soundFontInfo.INAM="Unnamed DLS",this.soundFontInfo.IENG="Unknown",this.soundFontInfo.IPRD="SpessaSynth DLS",this.soundFontInfo.ICRD=new Date().toDateString();let s=_A(n,"INFO");if(s)for(;s.chunkData.currentIndex<s.chunkData.length;){let o=AA(s.chunkData);this.soundFontInfo[o.header]=$(o.chunkData,o.size)}this.soundFontInfo.ICMT=this.soundFontInfo.ICMT||"(No description)",this.soundFontInfo.ISBJ&&(this.soundFontInfo.ICMT+=`
|
|
14
14
|
`+this.soundFontInfo.ISBJ,delete this.soundFontInfo.ISBJ),this.soundFontInfo.ICMT+=`
|
|
15
|
-
Converted from DLS to SF2 with SpessaSynth`;for(let[o,I]of Object.entries(this.soundFontInfo))y(`%c"${o}": %c"${I}"`,
|
|
16
|
-
%c${this.instruments.length}%c instruments and %c${this.samples.length}%c samples.`,
|
|
17
|
-
%c${this.instruments.length}%c instruments and %c${this.samples.length}%c samples.`,c.info,c.recognized,c.info,c.recognized,c.info,c.recognized,c.info,c.recognized,c.info),Z()}verifyHeader(A,t){A.header.toLowerCase()!==t.toLowerCase()&&(Z(),this.parsingError(`Invalid chunk header! Expected "${t.toLowerCase()}" got "${A.header.toLowerCase()}"`))}verifyText(A,t){A.toLowerCase()!==t.toLowerCase()&&(Z(),this.parsingError(`Invalid FourCC: Expected "${t.toLowerCase()}" got "${A.toLowerCase()}"\``))}};function ot(e){let A=e.slice(8,12),t=new N(A);return eA(t,4,void 0,!1).toLowerCase()==="dls "?new Ue(e):new Ln(e,!1)}function dr(){this.soundfontManager.soundfontList.some(e=>e.id===At)&&this.soundfontManager.deleteSoundFont(At)}function Qr(e,A){this.soundfontBankOffset=A;let t=ot(e);this.soundfontManager.addNewSoundFont(t,At,A);let n=this.soundfontManager.getCurrentSoundFontOrder();n.pop(),n.unshift(At),this.soundfontManager.rearrangeSoundFonts(n),this._snapshot!==void 0&&this.applySynthesizerSnapshot(this._snapshot),y(`%cEmbedded sound bank set at offset %c${A}`,c.recognized,c.value)}function fr(){let e=this.soundfontManager.getPresetList();this.clearCache(),this.callEvent("presetlistchange",e),this.getDefaultPresets(),this.midiAudioChannels.forEach(A=>{A.setPresetLock(!1)}),this.resetAllControllers(!1)}function ur(e,A=!1){this.transposition=0;for(let t=0;t<this.midiAudioChannels.length;t++)this.midiAudioChannels[t].transposeChannel(e,A);this.transposition=e}function mr(e){e=Math.round(e);for(let A=0;A<this.midiAudioChannels.length;A++)this.midiAudioChannels[A].setCustomController(rA.masterTuning,e)}var yt=class e{program;bank;isBankLSB;patchName;lockPreset;lockedSystem;midiControllers;lockedControllers;customControllers;lockVibrato;channelVibrato;channelTransposeKeyShift;channelOctaveTuning;isMuted;velocityOverride;drumChannel;static getChannelSnapshot(A,t){let n=A.midiAudioChannels[t],s=new e;return s.program=n.preset.program,s.bank=n.getBankSelect(),s.isBankLSB=s.bank!==n.bank,s.lockPreset=n.lockPreset,s.lockedSystem=n.lockedSystem,s.patchName=n.preset.presetName,s.midiControllers=n.midiControllers,s.lockedControllers=n.lockedControllers,s.customControllers=n.customControllers,s.channelVibrato=n.channelVibrato,s.lockVibrato=n.lockGSNRPNParams,s.channelTransposeKeyShift=n.channelTransposeKeyShift,s.channelOctaveTuning=n.channelOctaveTuning,s.isMuted=n.isMuted,s.velocityOverride=n.velocityOverride,s.drumChannel=n.drumChannel,s}static applyChannelSnapshot(A,t,n){let s=A.midiAudioChannels[t];s.muteChannel(n.isMuted),s.setDrums(n.drumChannel),s.midiControllers=n.midiControllers,s.lockedControllers=n.lockedControllers,s.customControllers=n.customControllers,s.updateChannelTuning(),s.channelVibrato=n.channelVibrato,s.lockGSNRPNParams=n.lockVibrato,s.channelTransposeKeyShift=n.channelTransposeKeyShift,s.channelOctaveTuning=n.channelOctaveTuning,s.velocityOverride=n.velocityOverride,s.setPresetLock(!1),s.setBankSelect(n.bank,n.isBankLSB),s.programChange(n.program),s.setPresetLock(n.lockPreset),s.lockedSystem=n.lockedSystem}};var rt=class e{channelSnapshots;keyMappings;mainVolume;pan;interpolation;system;transposition;static createSynthesizerSnapshot(A){let t=new e;return t.channelSnapshots=A.midiAudioChannels.map((n,s)=>yt.getChannelSnapshot(A,s)),t.keyMappings=A.keyModifierManager.getMappings(),t.mainVolume=A.midiVolume,t.pan=A.pan,t.system=A.system,t.interpolation=A.interpolationType,t.transposition=A.transposition,t.effectsConfig={},t}static applySnapshot(A,t){for(A.setSystem(t.system),A.setMasterParameter(KA.mainVolume,t.mainVolume),A.setMasterParameter(KA.masterPan,t.pan),A.transposeAllChannels(t.transposition),A.interpolationType=t.interpolation,A.keyModifierManager.setMappings(t.keyMappings);A.midiAudioChannels.length<t.channelSnapshots.length;)A.createMidiChannel();t.channelSnapshots.forEach((n,s)=>{yt.applyChannelSnapshot(A,s,n)}),y("%cFinished restoring controllers!",c.info)}};function pr(e){this._snapshot=e,rt.applySnapshot(this,e),y("%cFinished applying snapshot!",c.info),this.resetAllControllers()}function Tn(e,A,t){if(t<e)return 0;let n=(t-e)/(1/A)+.25;return Math.abs(n-~~(n+.5))*4-1}var St=class{static getSampleLinear(A,t){let n=A.sample,s=n.cursor,r=n.sampleData;if(n.isLooping){let i=n.loopEnd-n.loopStart;for(let a=0;a<t.length;a++){for(;s>=n.loopEnd;)s-=i;let o=~~s,I=o+1;for(;I>=n.loopEnd;)I-=i;let B=s-o,C=r[I],h=r[o];t[a]=h+(C-h)*B,s+=n.playbackStep*A.currentTuningCalculated}}else{if(n.loopingMode===2&&!A.isInRelease)return;for(let i=0;i<t.length;i++){let a=~~s,o=a+1;if(o>=n.end){A.finished=!0;return}let I=s-a,B=r[o],C=r[a];t[i]=C+(B-C)*I,s+=n.playbackStep*A.currentTuningCalculated}}A.sample.cursor=s}static getSampleNearest(A,t){let n=A.sample,s=n.cursor,r=n.loopEnd-n.loopStart,i=n.sampleData;if(A.sample.isLooping)for(let a=0;a<t.length;a++){for(;s>=n.loopEnd;)s-=r;let o=~~s+1;for(;o>=n.loopEnd;)o-=r;t[a]=i[o],s+=n.playbackStep*A.currentTuningCalculated}else{if(n.loopingMode===2&&!A.isInRelease)return;for(let a=0;a<t.length;a++){let o=~~s+1;if(o>=n.end){A.finished=!0;return}t[a]=i[o],s+=n.playbackStep*A.currentTuningCalculated}}n.cursor=s}static getSampleCubic(A,t){let n=A.sample,s=n.cursor,r=n.sampleData;if(n.isLooping){let i=n.loopEnd-n.loopStart;for(let a=0;a<t.length;a++){for(;s>=n.loopEnd;)s-=i;let o=~~s,I=o+1,B=I+1,C=B+1,h=s-o;I>=n.loopEnd&&(I-=i),B>=n.loopEnd&&(B-=i),C>=n.loopEnd&&(C-=i);let l=r[o],u=r[I],f=r[B],S=r[C],R=.5*(f-l),D=l-2.5*u+2*f-.5*S,x=.5*(S-l)+1.5*(u-f);t[a]=((x*h+D)*h+R)*h+u,s+=n.playbackStep*A.currentTuningCalculated}}else{if(n.loopingMode===2&&!A.isInRelease)return;for(let i=0;i<t.length;i++){let a=~~s,o=a+1,I=o+1,B=I+1,C=s-a;if(o>=n.end||I>=n.end||B>=n.end){A.finished=!0;return}let h=r[a],l=r[o],u=r[I],f=r[B],S=.5*(u-h),R=h-2.5*l+2*u-.5*f,D=.5*(f-h)+1.5*(l-u);t[i]=((D*C+R)*C+S)*C+l,s+=n.playbackStep*A.currentTuningCalculated}}A.sample.cursor=s}};function yr(e,A,t,n,s,r,i,a){if(e.isInRelease||A>=e.releaseStartTime&&(e.isInRelease=!0,Be.startRelease(e),de.startRelease(e),e.sample.loopingMode===3&&(e.sample.isLooping=!1)),e.modulatedGenerators[g.initialAttenuation]>2500)return e.isInRelease&&(e.finished=!0),e.finished;let o=e.targetKey,I=e.modulatedGenerators[g.fineTune]+this.channelOctaveTuning[e.midiNote]+this.channelTuningCents,B=e.modulatedGenerators[g.coarseTune],C=this.synth.tunings[this.preset.program]?.[e.realKey];if(C!==void 0&&C?.midiNote>=0&&(o=C.midiNote,I+=C.centTuning),e.portamentoFromKey>-1){let b=Math.min((A-e.startTime)/e.portamentoDuration,1),$=o-e.portamentoFromKey;B-=$*(1-b)}I+=(o-e.sample.rootKey)*e.modulatedGenerators[g.scaleTuning];let h=0,l=0,u=e.modulatedGenerators[g.vibLfoToPitch],f=e.modulatedGenerators[g.vibLfoToVolume],S=e.modulatedGenerators[g.vibLfoToFilterFc];if(u!==0||f!==0||S!==0){let b=e.startTime+le(e.modulatedGenerators[g.delayVibLFO]),$=Jt(e.modulatedGenerators[g.freqVibLFO]),AA=Tn(b,$,A);I+=AA*(u*this.customControllers[rA.modulationMultiplier]),l+=-AA*f,h+=AA*S}let R=e.modulatedGenerators[g.modLfoToPitch],D=e.modulatedGenerators[g.modLfoToVolume],x=e.modulatedGenerators[g.modLfoToFilterFc];if(R!==0||x!==0||D!==0){let b=e.startTime+le(e.modulatedGenerators[g.delayModLFO]),$=Jt(e.modulatedGenerators[g.freqModLFO]),AA=Tn(b,$,A);I+=AA*(R*this.customControllers[rA.modulationMultiplier]),l+=-AA*D,h+=AA*x}if(this.channelVibrato.depth>0){let b=Tn(e.startTime+this.channelVibrato.delay,this.channelVibrato.rate,A);b&&(I+=b*this.channelVibrato.depth)}let J=e.modulatedGenerators[g.modEnvToPitch],H=e.modulatedGenerators[g.modEnvToFilterFc];if(H!==0||J!==0){let b=de.getValue(e,A);h+=b*H,I+=b*J}let E=~~(I+B*100);E!==e.currentTuningCents&&(e.currentTuningCents=E,e.currentTuningCalculated=Math.pow(2,E/1200));let L=new Float32Array(t.length);switch(this.synth.interpolationType){case et.fourthOrder:St.getSampleCubic(e,L);break;case et.linear:default:St.getSampleLinear(e,L);break;case et.nearestNeighbor:St.getSampleNearest(e,L);break}return Ke.apply(e,L,h,this.synth.filterSmoothingFactor),Be.apply(e,L,l,this.synth.volumeEnvelopeSmoothingFactor),this.panVoice(e,L,t,n,s,r,i,a),e.finished}function Sr(e,A=-12e3){e+=this.customControllers[rA.channelKeyShift],this.voices.forEach(t=>{t.realKey===e&&(t.modulatedGenerators[g.releaseVolEnv]=A,t.release(this.synth.currentSynthTime))})}function Dr(e,A=!0){e=Math.round(e),this.setCustomController(rA.channelTuning,e),A&&y(`%cFine tuning for %c${this.channelNumber}%c is now set to %c${e}%c cents.`,c.info,c.recognized,c.info,c.value,c.info)}function kr(e){e=Math.round(e),y(`%cChannel ${this.channelNumber} modulation depth. Cents: %c${e}`,c.info,c.value),this.setCustomController(rA.modulationMultiplier,e/50)}var ve={pitchBendRange:0,fineTuning:1,coarseTuning:2,modulationDepth:5,resetParameters:16383},Xe={partParameter:1,awe32:127,SF2:120},Dt={vibratoRate:8,vibratoDepth:9,vibratoDelay:10,TVFFilterCutoff:32,TVFFilterResonance:33,EGAttackTime:99,EGReleaseTime:102};function Fr(e){this.midiControllers[p.dataEntryMsb]=e<<7;let A=()=>{this.channelVibrato.delay===0&&this.channelVibrato.rate===0&&this.channelVibrato.depth===0&&(this.channelVibrato.depth=50,this.channelVibrato.rate=8,this.channelVibrato.delay=.6)},t=(n,s,r)=>{r.length>0&&(r=" "+r),y(`%c${n} for %c${this.channelNumber}%c is now set to %c${s}%c${r}.`,c.info,c.recognized,c.info,c.value,c.info)};switch(this.dataEntryState){default:case HA.Idle:break;case HA.NRPFine:if(this.lockGSNRPNParams)return;let n=this.midiControllers[p.NRPNMsb]>>7,s=this.midiControllers[p.NRPNLsb]>>7,r=this.midiControllers[p.lsbForControl6DataEntry]>>7;switch(n){default:if(e===64)return;P(`%cUnrecognized NRPN for %c${this.channelNumber}%c: %c(0x${s.toString(16).toUpperCase()} 0x${s.toString(16).toUpperCase()})%c data value: %c${e}`,c.warn,c.recognized,c.warn,c.unrecognized,c.warn,c.value);break;case Xe.partParameter:switch(s){default:if(e===64)return;P(`%cUnrecognized NRPN for %c${this.channelNumber}%c: %c(0x${n.toString(16)} 0x${s.toString(16)})%c data value: %c${e}`,c.warn,c.recognized,c.warn,c.unrecognized,c.warn,c.value);break;case Dt.vibratoRate:if(e===64)return;A(),this.channelVibrato.rate=e/64*8,t("Vibrato rate",`${e} = ${this.channelVibrato.rate}`,"Hz");break;case Dt.vibratoDepth:if(e===64)return;A(),this.channelVibrato.depth=e/2,t("Vibrato depth",`${e} = ${this.channelVibrato.depth}`,"cents of detune");break;case Dt.vibratoDelay:if(e===64)return;A(),this.channelVibrato.delay=e/64/3,t("Vibrato delay",`${e} = ${this.channelVibrato.delay}`,"seconds");break;case Dt.TVFFilterCutoff:this.controllerChange(p.brightness,e),t("Filter cutoff",e.toString(),"");break;case Dt.EGAttackTime:this.controllerChange(p.attackTime,e),t("EG attack time",e.toString(),"");break;case Dt.EGReleaseTime:this.controllerChange(p.releaseTime,e),t("EG release time",e.toString(),"");break}break;case Xe.awe32:break;case Xe.SF2:if(s>100)break;let a=this.customControllers[rA.sf2NPRNGeneratorLSB],o=(e<<7|r)-8192;this.setGeneratorOffset(a,o);break}break;case HA.RPCoarse:case HA.RPFine:let i=this.midiControllers[p.RPNMsb]|this.midiControllers[p.RPNLsb]>>7;switch(i){default:P(`%cUnrecognized RPN for %c${this.channelNumber}%c: %c(0x${i.toString(16)})%c data value: %c${e}`,c.warn,c.recognized,c.warn,c.unrecognized,c.warn,c.value);break;case ve.pitchBendRange:this.midiControllers[lA+_.pitchWheelRange]=e<<7,t("Pitch bend range",e.toString(),"semitones");break;case ve.coarseTuning:let a=e-64;this.setCustomController(rA.channelTuningSemitones,a),t("Coarse tuning",a.toString(),"semitones");break;case ve.fineTuning:this.setTuning(e-64,!1);break;case ve.modulationDepth:this.setModulationDepth(e*100);break;case ve.resetParameters:this.resetParameters();break}}}var Zi=[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];function wr(e,A,t){let n=(h,l,u)=>Math.max(l,Math.min(u,h)),s=h=>Math.max(-32768,1200*Math.log2(h/1e3)),r=h=>6900+1200*Math.log2(h/440),i=t<<7|A;i-=8192;let a=Zi[e];a||P(`Invalid AWE32 LSB: %c${e}`,c.unrecognized);let o,I,B,C;switch(a){default:break;case g.delayModLFO:case g.delayVibLFO:case g.delayVolEnv:case g.delayModEnv:o=4*n(i,0,5900),this.setGeneratorOverride(a,s(o));break;case g.attackVolEnv:case g.attackModEnv:o=n(i,0,5940),this.setGeneratorOverride(a,s(o));break;case g.holdVolEnv:case g.holdModEnv:o=n(i,0,8191),this.setGeneratorOverride(a,s(o));break;case g.decayModEnv:case g.decayVolEnv:case g.releaseVolEnv:case g.releaseModEnv:o=4*n(i,0,5940),this.setGeneratorOverride(a,s(o));break;case g.freqVibLFO:case g.freqModLFO:I=.084*A,this.setGeneratorOverride(a,r(I),!0);break;case g.sustainVolEnv:case g.sustainModEnv:B=A*7.5,this.setGeneratorOverride(a,B);break;case g.fineTune:this.setGeneratorOverride(a,i,!0);break;case g.modLfoToPitch:case g.vibLfoToPitch:C=n(i,-127,127)*9.375,this.setGeneratorOverride(a,C,!0);break;case g.modEnvToPitch:C=n(i,-127,127)*9.375,this.setGeneratorOverride(a,C);break;case g.modLfoToVolume:B=1.875*A,this.setGeneratorOverride(a,B,!0);break;case g.initialFilterFc:let h=4335+59*A;this.setGeneratorOverride(a,h,!0);break;case g.initialFilterQ:B=215*(A/127),this.setGeneratorOverride(a,B,!0);break;case g.modLfoToFilterFc:C=n(i,-64,63)*56.25,this.setGeneratorOverride(a,C,!0);break;case g.modEnvToFilterFc:C=n(i,-64,63)*56.25,this.setGeneratorOverride(a,C);break;case g.chorusEffectsSend:case g.reverbEffectsSend:this.setGeneratorOverride(a,n(i,0,255)*(1e3/255));break}}function Rr(e){switch(this.midiControllers[p.lsbForControl6DataEntry]=e<<7,this.dataEntryState){default:break;case HA.RPCoarse:case HA.RPFine:switch(this.midiControllers[p.RPNMsb]|this.midiControllers[p.RPNLsb]>>7){default:break;case ve.pitchBendRange:if(e===0)break;this.midiControllers[lA+_.pitchWheelRange]|=e;let s=(this.midiControllers[lA+_.pitchWheelRange]>>7)+e/128;y(`%cChannel ${this.channelNumber} bend range. Semitones: %c${s}`,c.info,c.value);break;case ve.fineTuning:let i=this.customControllers[rA.channelTuning]<<7|e;this.setTuning(i*.01220703125);break;case ve.modulationDepth:let o=this.customControllers[rA.modulationMultiplier]*50+e/128*100;this.setModulationDepth(o);break;case 16383:this.resetParameters();break}break;case HA.NRPFine:let t=this.midiControllers[p.NRPNMsb]>>7,n=this.midiControllers[p.NRPNLsb]>>7;if(t===Xe.SF2)return;switch(t){default:P(`%cUnrecognized NRPN LSB for %c${this.channelNumber}%c: %c(0x${n.toString(16).toUpperCase()} 0x${n.toString(16).toUpperCase()})%c data value: %c${e}`,c.warn,c.recognized,c.warn,c.unrecognized,c.warn,c.value);break;case Xe.awe32:wr.call(this,n,e,this.midiControllers[p.dataEntryMsb]>>7);break}}}function Gr(e,A,t=!1){if(e>127){if(!t)return;switch(e){default:return;case Bs.velocityOverride:this.velocityOverride=A}}if(e>=p.lsbForControl1ModulationWheel&&e<=p.lsbForControl13EffectControl2&&e!==p.lsbForControl6DataEntry){let n=e-32;if(this.lockedControllers[n])return;this.midiControllers[n]=this.midiControllers[n]&16256|A&127,this.voices.forEach(s=>this.computeModulators(s,1,n))}if(!this.lockedControllers[e]){switch(this.midiControllers[e]=A<<7,e){case p.allNotesOff:this.stopAllNotes();break;case p.allSoundOff:this.stopAllNotes(!0);break;case p.bankSelect:this.setBankSelect(A);break;case p.lsbForControl0BankSelect:this.setBankSelect(A,!0);break;case p.RPNLsb:this.dataEntryState=HA.RPFine;break;case p.RPNMsb:this.dataEntryState=HA.RPCoarse;break;case p.NRPNMsb:this.customControllers[rA.sf2NPRNGeneratorLSB]=0,this.dataEntryState=HA.NRPCoarse;break;case p.NRPNLsb:this.midiControllers[p.NRPNMsb]>>7===Xe.SF2&&(this.customControllers[rA.sf2NPRNGeneratorLSB]%100!==0&&(this.customControllers[rA.sf2NPRNGeneratorLSB]=0),A===100?this.customControllers[rA.sf2NPRNGeneratorLSB]+=100:A===101?this.customControllers[rA.sf2NPRNGeneratorLSB]+=1e3:A===102?this.customControllers[rA.sf2NPRNGeneratorLSB]+=1e4:A<100&&(this.customControllers[rA.sf2NPRNGeneratorLSB]+=A)),this.dataEntryState=HA.NRPFine;break;case p.dataEntryMsb:this.dataEntryCoarse(A);break;case p.lsbForControl6DataEntry:this.dataEntryFine(A);break;case p.resetAllControllers:this.resetControllersRP15Compliant();break;case p.sustainPedal:A>=64?this.holdPedal=!0:(this.holdPedal=!1,this.sustainedVoices.forEach(n=>{n.release(this.synth.currentSynthTime)}),this.sustainedVoices=[]);break;default:this.voices.forEach(n=>this.computeModulators(n,1,e));break}this.synth.callEvent("controllerchange",{channel:this.channelNumber,controllerNumber:e,controllerValue:A})}}function Mr(e=!1){e?(this.voices.length=0,this.sustainedVoices.length=0,this.sendChannelProperty()):(this.voices.forEach(A=>{A.isInRelease||A.release(this.synth.currentSynthTime)}),this.sustainedVoices.forEach(A=>{A.release(this.synth.currentSynthTime)}))}function xr(e){e&&this.stopAllNotes(!0),this.isMuted=e,this.sendChannelProperty(),this.synth.callEvent("mutechannel",{channel:this.channelNumber,isMuted:e})}function Nr(e,A=!1){this.drumChannel||(e+=this.synth.transposition);let t=Math.trunc(e),n=this.channelTransposeKeyShift+this.customControllers[rA.channelTransposeFine]/100;this.drumChannel&&!A||e===n||(t!==this.channelTransposeKeyShift&&this.controllerChange(p.allNotesOff,127),this.channelTransposeKeyShift=t,this.setCustomController(rA.channelTransposeFine,(e-t)*100),this.sendChannelProperty())}var Xt={0:0,1:.006,2:.023,4:.05,8:.11,16:.25,32:.5,64:2.06,80:4.2,96:8.4,112:19.5,116:26.7,120:40,124:80,127:480};function Xi(e){if(Xt[e]!==void 0)return Xt[e];let A=null,t=null;for(let n of Object.keys(Xt))n=parseInt(n),n<e&&(A===null||n>A)&&(A=n),n>e&&(t===null||n<t)&&(t=n);if(A!==null&&t!==null){let n=Xt[A],s=Xt[t];return n+(e-A)*(s-n)/(t-A)}return 0}function br(e,A){return Xi(e)*(A/30)}function Lr(e,A){if(A<1){this.noteOff(e);return}if(A=Math.min(127,A),this.synth.highPerformanceMode&&this.synth.totalVoicesAmount>200&&A<40||this.synth.highPerformanceMode&&A<10||this.isMuted)return;let t=e+this.channelTransposeKeyShift+this.customControllers[rA.channelKeyShift],n=t;if(t>127||t<0)return;let s=this.preset.program,r=this.synth.tunings[s]?.[t]?.midiNote;r>=0&&(n=r),this.velocityOverride>0&&(A=this.velocityOverride);let i=this.synth.keyModifierManager.getVelocity(this.channelNumber,t);i>-1&&(A=i);let a=this.synth.keyModifierManager.getGain(this.channelNumber,t),o=-1,I=0,B=this.midiControllers[p.portamentoTime]>>7,C=this.midiControllers[p.portamentoControl],h=C>>7;if(!this.drumChannel&&h!==n&&this.midiControllers[p.portamentoOnOff]>=8192&&B>0){if(C!==1){let S=Math.abs(n-h);I=br(B,S),o=h}this.controllerChange(p.portamentoControl,n)}let l=this.synth.getVoices(this.channelNumber,n,A,t),u=0;this.randomPan&&(u=Math.round(Math.random()*1e3-500));let f=this.voices;l.forEach(S=>{S.portamentoFromKey=o,S.portamentoDuration=I,S.overridePan=u,S.gain=a,this.sysExModulators.modulatorList.forEach(b=>{let $=b.mod,AA=S.modulators.findIndex(K=>hA.isIdentical(K,$));AA!==-1?S.modulators[AA]=hA.copy($):S.modulators.push(hA.copy($))}),this.generatorOverridesEnabled&&this.generatorOverrides.forEach((b,$)=>{b!==cn&&(S.generators[$]=b)});let R=S.exclusiveClass;R!==0&&f.forEach(b=>{b.exclusiveClass===R&&b.exclusiveRelease(this.synth.currentSynthTime)}),this.computeModulators(S);let D=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,H=S.modulatedGenerators[g.endloopAddrsOffset]+S.modulatedGenerators[g.endloopAddrsCoarseOffset]*32768,E=S.sample,L=b=>Math.max(0,Math.min(E.sampleData.length-1,b));if(E.cursor=L(E.cursor+D),E.end=L(E.end+x),E.loopStart=L(E.loopStart+J),E.loopEnd=L(E.loopEnd+H),E.loopEnd<E.loopStart){let b=E.loopStart;E.loopStart=E.loopEnd,E.loopEnd=b}E.loopEnd-E.loopStart<1&&(E.loopingMode=0,E.isLooping=!1),S.volumeEnvelope.attenuation=S.volumeEnvelope.attenuationTargetGain,S.currentPan=Math.max(-500,Math.min(500,S.modulatedGenerators[g.pan]))}),this.synth.totalVoicesAmount+=l.length,this.synth.totalVoicesAmount>this.synth.voiceCap&&this.synth.voiceKilling(l.length),f.push(...l),this.sendChannelProperty(),this.synth.callEvent("noteon",{midiNote:e,channel:this.channelNumber,velocity:A})}function Tr(e){if(e>127||e<0){P("Received a noteOn for note",e,"Ignoring.");return}let A=e+this.channelTransposeKeyShift+this.customControllers[rA.channelKeyShift];if(this.synth.highPerformanceMode&&!this.drumChannel){this.killNote(A,-6950),this.synth.callEvent("noteoff",{midiNote:e,channel:this.channelNumber});return}this.voices.forEach(n=>{n.realKey!==A||n.isInRelease===!0||(this.holdPedal?this.sustainedVoices.push(n):n.release(this.synth.currentSynthTime))}),this.synth.callEvent("noteoff",{midiNote:e,channel:this.channelNumber})}function Ur(e,A){this.voices.forEach(t=>{t.midiNote===e&&(t.pressure=A,this.computeModulators(t,0,_.polyPressure))}),this.synth.callEvent("polypressure",{channel:this.channelNumber,midiNote:e,pressure:A})}function vr(e){this.midiControllers[lA+_.channelPressure]=e<<7,this.updateChannelTuning(),this.voices.forEach(A=>this.computeModulators(A,0,_.channelPressure)),this.synth.callEvent("channelpressure",{channel:this.channelNumber,pressure:e})}function Hr(e,A){if(this.lockedControllers[lA+_.pitchWheel])return;let t=A|e<<7;this.synth.callEvent("pitchwheel",{channel:this.channelNumber,MSB:e,LSB:A}),this.midiControllers[lA+_.pitchWheel]=t,this.voices.forEach(n=>this.computeModulators(n,0,_.pitchWheel)),this.sendChannelProperty()}function Or(e){if(e.length!==12)throw new Error("Tuning is not the length of 12.");this.channelOctaveTuning=new Int8Array(128);for(let A=0;A<128;A++)this.channelOctaveTuning[A]=e[A%12]}function Yr(e){if(this.lockPreset)return;let A=this.getBankSelect(),t=this.isXGChannel,n=this.synth.soundfontManager.getPreset(A,e,t),s=n.preset;this.setPreset(s),this.sentBank=Math.min(128,s.bank+n.bankOffset),this.synth.callEvent("programchange",{channel:this.channelNumber,program:s.program,bank:this.sentBank}),this.sendChannelProperty()}var Un=class{modulatorList=[];resetModulators(){this.modulatorList=[]}_getModulatorId(A,t,n,s){return`${A}-${t}-${n}-${s}`}_deleteModulator(A){this.modulatorList=this.modulatorList.filter(t=>t.id!==A)}setModulator(A,t,n,s=!1,r=!1){let i=this._getModulatorId(A,t,s,r);n===0&&this._deleteModulator(i);let a=this.modulatorList.find(o=>o.id===i);if(a)a.mod.transformAmount=n;else{let o,I;A>=lA?(o=A-lA,I=!1):(o=A,I=!0);let B=new hA(o,wA.linear,I?1:0,s?1:0,0,_.noController,wA.linear,0,0,0,t,n,0);this.modulatorList.push({mod:B,id:i})}}};var Wi=1e3/200;function Jr(e,A,t){if(A.transformAmount===0)return A.currentValue=0,0;let n;if(A.sourceUsesCC)n=e[A.sourceIndex];else{let I=A.sourceIndex+lA;switch(A.sourceIndex){case _.noController:n=16383;break;case _.noteOnKeyNum:n=t.midiNote<<7;break;case _.noteOnVelocity:n=t.velocity<<7;break;case _.polyPressure:n=t.pressure<<7;break;default:n=e[I];break}}let s=it[A.sourceCurveType][A.sourcePolarity][A.sourceDirection][n],r;if(A.secSrcUsesCC)r=e[A.secSrcIndex];else{let I=A.secSrcIndex+lA;switch(A.secSrcIndex){case _.noController:r=16383;break;case _.noteOnKeyNum:r=t.midiNote<<7;break;case _.noteOnVelocity:r=t.velocity<<7;break;case _.polyPressure:r=t.pressure<<7;break;default:r=e[I]}}let i=it[A.secSrcCurveType][A.secSrcPolarity][A.secSrcDirection][r],a=A.transformAmount;A.isEffectModulator&&a<=1e3&&(a*=Wi,a=Math.min(a,1e3));let o=s*i*a;return A.transformType===2&&(o=Math.abs(o)),A.currentValue=o,o}function Pr(e,A=-1,t=0){let n=e.modulators,s=e.generators;if(this.generatorOffsetsEnabled){s=new Int16Array(s);for(let o=0;o<s.length;o++)s[o]+=this.generatorOffsets[o]}let r=e.modulatedGenerators;if(A===-1){r.set(s),n.forEach(o=>{r[o.modulatorDestination]+=Jr(this.midiControllers,o,e)});for(let o=0;o<r.length;o++){let I=X[o];I&&(r[o]=Math.min(I.max,Math.max(I.min,r[o])))}Be.recalculate(e),de.recalculate(e);return}let i=new Set([g.initialAttenuation,g.delayVolEnv,g.attackVolEnv,g.holdVolEnv,g.decayVolEnv,g.sustainVolEnv,g.releaseVolEnv,g.keyNumToVolEnvHold,g.keyNumToVolEnvDecay]),a=new Set;n.forEach(o=>{if(o.sourceUsesCC===A&&o.sourceIndex===t||o.secSrcUsesCC===A&&o.secSrcIndex===t){let I=o.modulatorDestination;if(!a.has(I)){r[I]=s[I],Jr(this.midiControllers,o,e),n.forEach(C=>{C.modulatorDestination===I&&(r[I]+=C.currentValue)});let B=X[I];r[I]=Math.max(B.min,Math.min(r[I],B.max)),a.add(I)}}}),[...a].some(o=>i.has(o))&&Be.recalculate(e),de.recalculate(e)}var it=[];for(let e=0;e<4;e++){it[e]=[[new Float32Array(LA),new Float32Array(LA)],[new Float32Array(LA),new Float32Array(LA)]];for(let A=0;A<LA;A++)it[e][0][0][A]=nt(0,e,A/LA,0),it[e][1][0][A]=nt(0,e,A/LA,1),it[e][0][1][A]=nt(1,e,A/LA,0),it[e][1][1][A]=nt(1,e,A/LA,1)}var yA=class{midiControllers=new Int16Array(ln);lockedControllers=Array(ln).fill(!1);customControllers=new Float32Array(hs);channelTransposeKeyShift=0;channelOctaveTuning=new Int8Array(128);channelTuningCents=0;sysExModulators=new Un;generatorOffsets=new Int16Array(Pt);generatorOffsetsEnabled=!1;generatorOverrides=new Int16Array(Pt);generatorOverridesEnabled=!1;holdPedal=!1;drumChannel=!1;velocityOverride=0;randomPan=!1;dataEntryState=HA.Idle;bank=0;sentBank=0;bankLSB=0;preset=void 0;lockPreset=!1;lockedSystem="gs";lockGSNRPNParams=!1;channelVibrato={delay:0,depth:0,rate:0};isMuted=!1;voices=[];sustainedVoices=[];channelNumber;synth;constructor(A,t,n){this.synth=A,this.preset=t,this.channelNumber=n,this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}get isXGChannel(){return xA(this.synth.system)||this.lockPreset&&xA(this.lockedSystem)}setCustomController(A,t){this.customControllers[A]=t,this.updateChannelTuning()}updateChannelTuning(){this.channelTuningCents=this.customControllers[rA.channelTuning]+this.customControllers[rA.channelTransposeFine]+this.customControllers[rA.masterTuning]+this.customControllers[rA.channelTuningSemitones]*100}renderAudio(A,t,n,s,r,i){this.voices=this.voices.filter(a=>!this.renderVoice(a,this.synth.currentSynthTime,A,t,n,s,r,i))}setPresetLock(A){this.lockPreset=A,A&&(this.lockedSystem=this.synth.system)}setBankSelect(A,t=!1){if(!this.lockPreset)if(t)this.bankLSB=A;else switch(this.bank=A,ut(this.getBankSelect(),A,this.synth.system,!1,this.drumChannel,this.channelNumber).drumsStatus){default:case 0:break;case 1:this.channelNumber%16===9&&(this.bank=127);break;case 2:this.setDrums(!0);break}}getBankSelect(){return mt(this.bank,this.bankLSB,this.drumChannel,this.isXGChannel)}setPreset(A){this.lockPreset||(delete this.preset,this.preset=A)}setDrums(A){this.lockPreset||this.drumChannel!==A&&(A?(this.channelTransposeKeyShift=0,this.drumChannel=!0):this.drumChannel=!1,this.synth.callEvent("drumchange",{channel:this.channelNumber,isDrumChannel:this.drumChannel}),this.programChange(this.preset.program),this.sendChannelProperty())}setVibrato(A,t,n){this.lockGSNRPNParams||(this.channelVibrato.rate=t,this.channelVibrato.delay=n,this.channelVibrato.depth=A)}disableAndLockGSNRPN(){this.lockGSNRPNParams=!0,this.channelVibrato.rate=0,this.channelVibrato.delay=0,this.channelVibrato.depth=0}sendChannelProperty(){if(!this.synth.enableEventSystem)return;let A={voicesAmount:this.voices.length,pitchBend:this.midiControllers[lA+_.pitchWheel],pitchBendRangeSemitones:this.midiControllers[lA+_.pitchWheelRange]/128,isMuted:this.isMuted,isDrum:this.drumChannel,transposition:this.channelTransposeKeyShift+this.customControllers[rA.channelTransposeFine]/100,bank:this.sentBank,program:this.preset.program};this.synth?.onChannelPropertyChange?.(A,this.channelNumber)}resetGeneratorOverrides(){this.generatorOverrides.fill(cn),this.generatorOverridesEnabled=!1}setGeneratorOverride(A,t,n=!1){this.generatorOverrides[A]=t,this.generatorOverridesEnabled=!0,n&&this.voices.forEach(s=>{s.generators[A]=t,this.computeModulators(s)})}resetGeneratorOffsets(){this.generatorOffsets.fill(0),this.generatorOffsetsEnabled=!1}setGeneratorOffset(A,t){this.generatorOffsets[A]=t*X[A].nrpn,this.generatorOffsetsEnabled=!0,this.voices.forEach(n=>{this.computeModulators(n)})}};yA.prototype.renderVoice=yr;yA.prototype.panVoice=Go;yA.prototype.killNote=Sr;yA.prototype.stopAllNotes=Mr;yA.prototype.muteChannel=xr;yA.prototype.computeModulators=Pr;yA.prototype.noteOn=Lr;yA.prototype.noteOff=Tr;yA.prototype.polyPressure=Ur;yA.prototype.channelPressure=vr;yA.prototype.pitchWheel=Hr;yA.prototype.programChange=Yr;yA.prototype.setTuning=Dr;yA.prototype.setOctaveTuning=Or;yA.prototype.setModulationDepth=kr;yA.prototype.transposeChannel=Nr;yA.prototype.controllerChange=Gr;yA.prototype.resetControllers=lo;yA.prototype.resetControllersRP15Compliant=Bo;yA.prototype.resetParameters=Qo;yA.prototype.dataEntryFine=Rr;yA.prototype.dataEntryCoarse=Fr;function Kr(e=!1){let A=new yA(this,this.defaultPreset,this.midiAudioChannels.length);this.midiAudioChannels.push(A),e&&(this.callEvent("newchannel",void 0),A.sendChannelProperty(),this.midiAudioChannels[this.midiAudioChannels.length-1].setDrums(!0))}var xs={enableEventSystem:!0,initialTime:0,effectsEnabled:!0,midiChannels:16};var _i={time:0},yo=.03,So=.07,cs=1,TA=class{cachedVoices=[];deviceID=-1;eventQueue=[];interpolationType=et.fourthOrder;transposition=0;tunings=[];soundfontBankOffset=0;masterGain=cs;midiVolume=1;reverbGain=1;chorusGain=1;reverbSend=1;chorusSend=1;voiceCap=350;pan=0;panLeft=.5;panRight=.5;highPerformanceMode=!1;keyModifierManager=new dn;midiAudioChannels=[];system=Yt;totalVoicesAmount=0;defaultPreset;drumPreset;processorInitialized=De.isInitialized;currentSynthTime=0;sampleRate;sampleTime;effectsEnabled;_snapshot;onEventCall;onChannelPropertyChange;onMasterParameterChange;constructor(A,t=xs){t=mn(t,xs),this.midiOutputsCount=t.midiChannels,this.effectsEnabled=t.effectsEnabled,this.enableEventSystem=t.enableEventSystem,this.currentSynthTime=t.initialTime,this.sampleTime=1/A,this.sampleRate=A,this.volumeEnvelopeSmoothingFactor=oo*(44100/A),this.panSmoothingFactor=ko*(44100/A),this.filterSmoothingFactor=fo*(44100/A);for(let n=0;n<128;n++)this.tunings.push([]);this.soundfontManager=new pt(this.updatePresetList.bind(this));for(let n=0;n<this.midiOutputsCount;n++)this.createMidiChannel(!1);this.processorInitialized.then(()=>{y("%cSpessaSynth is ready!",c.recognized)})}get currentGain(){return this.masterGain*this.midiVolume}getDefaultPresets(){let A=this.system;this.system="xg",this.defaultPreset=this.getPreset(0,0),this.system=A,this.drumPreset=this.getPreset(128,0)}setSystem(A){this.system=A,this?.onMasterParameterChange?.(KA.midiSystem,this.system)}getCachedVoice(A,t,n,s){return this.cachedVoices?.[A]?.[t]?.[n]?.[s]}setCachedVoice(A,t,n,s,r){this.cachedVoices[A]||(this.cachedVoices[A]=[]),this.cachedVoices[A][t]||(this.cachedVoices[A][t]=[]),this.cachedVoices[A][t][n]||(this.cachedVoices[A][t][n]=[]),this.cachedVoices[A][t][n][s]=r}renderAudio(A,t,n){this.renderAudioSplit(t,n,Array(16).fill(A))}renderAudioSplit(A,t,n){let s=this.currentSynthTime;for(;this.eventQueue[0]?.time<=s;)this.eventQueue.shift().callback();let r=A[0],i=A[1],a=t[0],o=t[1];this.totalVoicesAmount=0,this.midiAudioChannels.forEach((I,B)=>{if(I.voices.length<1||I.isMuted)return;let C=I.voices.length,h=B%16;I.renderAudio(n[h][0],n[h][1],r,i,a,o),this.totalVoicesAmount+=I.voices.length,I.voices.length!==C&&I.sendChannelProperty()}),this.currentSynthTime+=n[0][0].length*this.sampleTime}destroySynthProcessor(){this.midiAudioChannels.forEach(A=>{delete A.midiControllers,delete A.voices,delete A.sustainedVoices,delete A.lockedControllers,delete A.preset,delete A.customControllers}),delete this.cachedVoices,delete this.midiAudioChannels,this.soundfontManager.destroyManager(),delete this.soundfontManager}controllerChange(A,t,n,s=!1){this.midiAudioChannels[A].controllerChange(t,n,s)}noteOn(A,t,n){this.midiAudioChannels[A].noteOn(t,n)}noteOff(A,t){this.midiAudioChannels[A].noteOff(t)}polyPressure(A,t,n){this.midiAudioChannels[A].polyPressure(t,n)}channelPressure(A,t){this.midiAudioChannels[A].channelPressure(t)}pitchWheel(A,t,n){this.midiAudioChannels[A].pitchWheel(t,n)}programChange(A,t){this.midiAudioChannels[A].programChange(t)}processMessage(A,t=0,n=!1,s=_i){let r=()=>{let a=ft(A[0]),o=a.channel+t;switch(a.status){case w.noteOn:let I=A[2];I>0?this.noteOn(o,A[1],I):this.noteOff(o,A[1]);break;case w.noteOff:n?this.midiAudioChannels[o].killNote(A[1]):this.noteOff(o,A[1]);break;case w.pitchBend:this.pitchWheel(o,A[2],A[1]);break;case w.controllerChange:this.controllerChange(o,A[1],A[2],n);break;case w.programChange:this.programChange(o,A[1]);break;case w.polyPressure:this.polyPressure(o,A[0],A[1]);break;case w.channelPressure:this.channelPressure(o,A[1]);break;case w.systemExclusive:this.systemExclusive(new N(A.slice(1)),t);break;case w.reset:this.stopAllChannels(!0),this.resetAllControllers();break;default:break}},i=s.time;i>this.currentSynthTime?(this.eventQueue.push({callback:r.bind(this),time:i}),this.eventQueue.sort((a,o)=>a.time-o.time)):r()}setMIDIVolume(A){this.midiVolume=Math.pow(A,Math.E),this.setMasterParameter(KA.masterPan,this.pan)}callEvent(A,t){this?.onEventCall?.(A,t)}clearCache(){this.cachedVoices=[]}getPreset(A,t){return this.soundfontManager.getPreset(A,t,xA(this.system)).preset}};TA.prototype.voiceKilling=Ao;TA.prototype.getVoicesForPreset=mo;TA.prototype.getVoices=po;TA.prototype.systemExclusive=Co;TA.prototype.stopAllChannels=Mo;TA.prototype.createMidiChannel=Kr;TA.prototype.resetAllControllers=ho;TA.prototype.setMasterParameter=Io;TA.prototype.transposeAllChannels=ur;TA.prototype.setMasterTuning=mr;TA.prototype.clearEmbeddedBank=dr;TA.prototype.setEmbeddedSoundFont=Qr;TA.prototype.updatePresetList=fr;TA.prototype.applySynthesizerSnapshot=pr;function qA(e,A){let t=0;for(let n=8*(A-1);n>=0;n-=8)t|=e[e.currentIndex++]<<n;return t>>>0}function Wt(e,A){let t=new Array(A).fill(0);for(let n=A-1;n>=0;n--)t[n]=e&255,e>>=8;return t}function Vr(e,A){if(this.sendMIDIMessages&&e.messageStatusByte>=128){this.sendMIDIMessage([e.messageStatusByte,...e.messageData]);return}let t=ft(e.messageStatusByte),n=this.midiPortChannelOffsets[this.midiPorts[A]]||0;switch(t.channel+=n,t.status){case w.noteOn:let s=e.messageData[1];if(s>0)this.synth.noteOn(t.channel,e.messageData[0],s),this.playingNotes.push({midiNote:e.messageData[0],channel:t.channel,velocity:s});else{this.synth.noteOff(t.channel,e.messageData[0]);let a=this.playingNotes.findIndex(o=>o.midiNote===e.messageData[0]&&o.channel===t.channel);a!==-1&&this.playingNotes.splice(a,1)}break;case w.noteOff:this.synth.noteOff(t.channel,e.messageData[0]);let r=this.playingNotes.findIndex(a=>a.midiNote===e.messageData[0]&&a.channel===t.channel);r!==-1&&this.playingNotes.splice(r,1);break;case w.pitchBend:this.synth.pitchWheel(t.channel,e.messageData[1],e.messageData[0]);break;case w.controllerChange:if(this.midiData.isMultiPort&&this.midiData.usedChannelsOnTrack[A].size===0)return;this.synth.controllerChange(t.channel,e.messageData[0],e.messageData[1]);break;case w.programChange:if(this.midiData.isMultiPort&&this.midiData.usedChannelsOnTrack[A].size===0)return;this.synth.programChange(t.channel,e.messageData[0]);break;case w.polyPressure:this.synth.polyPressure(t.channel,e.messageData[0],e.messageData[1]);break;case w.channelPressure:this.synth.channelPressure(t.channel,e.messageData[0]);break;case w.systemExclusive:this.synth.systemExclusive(e.messageData,n);break;case w.setTempo:e.messageData.currentIndex=0;let i=6e7/qA(e.messageData,3);this.oneTickToSeconds=60/(i*this.midiData.timeDivision),this.oneTickToSeconds===0&&(this.oneTickToSeconds=60/(120*this.midiData.timeDivision),P("invalid tempo! falling back to 120 BPM"),i=120);break;case w.timeSignature:case w.endOfTrack:case w.midiChannelPrefix:case w.songPosition:case w.activeSensing:case w.keySignature:case w.sequenceNumber:case w.sequenceSpecific:case w.text:case w.lyric:case w.copyright:case w.trackName:case w.marker:case w.cuePoint:case w.instrumentName:case w.programName:break;case w.midiPort:this.assignMIDIPort(A,e.messageData[0]);break;case w.reset:this.synth.stopAllChannels(),this.synth.resetAllControllers();break;default:P(`%cUnrecognized Event: %c${e.messageStatusByte}%c status byte: %c${Object.keys(w).find(a=>w[a]===t.status)}`,c.warn,c.unrecognized,c.warn,c.value);break}t.status>=0&&t.status<128&&this?.onMetaEvent?.(e,A)}function Zr(){for(let e=0;e<16;e++)this.synth.createMidiChannel(!0)}function Xr(){if(!this.isActive)return;let e=this.currentTime;for(;this.playedTime<e;){let A=this._findFirstEventIndex(),t=this.tracks[A][this.eventIndex[A]];if(this._processEvent(t,A),this.eventIndex[A]++,A=this._findFirstEventIndex(),this.tracks[A].length<=this.eventIndex[A]){if(this.loop){this.setTimeTicks(this.midiData.loop.start);return}this.eventIndex[A]--,this.pause(!0),this.songs.length>1&&this.nextSong();return}let n=this.tracks[A][this.eventIndex[A]];this.playedTime+=this.oneTickToSeconds*(n.ticks-t.ticks);let s=this.loop&&(this.loopCount>0||this.loopCount===-1);if(this.midiData.loop.end<=t.ticks&&s){this.loopCount!==1/0&&(this.loopCount--,this?.onLoopCountChange?.(this.loopCount)),this.setTimeTicks(this.midiData.loop.start);return}else if(e>=this.duration){if(s){this.loopCount!==1/0&&(this.loopCount--,this?.onLoopCountChange?.(this.loopCount)),this.setTimeTicks(this.midiData.loop.start);return}this.eventIndex[A]--,this.pause(!0),this.songs.length>1&&this.nextSong();return}}}function Wr(){let e=0,A=1/0;return this.tracks.forEach((t,n)=>{this.eventIndex[n]>=t.length||t[this.eventIndex[n]].ticks<A&&(e=n,A=t[this.eventIndex[n]].ticks)}),e}var at=class{timeDivision=0;duration=0;tempoChanges=[{ticks:0,tempo:120}];copyright="";tracksAmount=0;trackNames=[];lyrics=[];lyricsTicks=[];firstNoteOn=0;keyRange={min:0,max:127};lastVoiceEventTick=0;midiPorts=[0];midiPortChannelOffsets=[0];usedChannelsOnTrack=[];loop={start:0,end:0};midiName="";midiNameUsesFileName=!1;fileName="";rawMidiName;format=0;RMIDInfo={};bankOffset=0;isKaraokeFile=!1;isMultiPort=!1;MIDIticksToSeconds(A){let t=0;for(;A>0;){let n=this.tempoChanges.find(r=>r.ticks<A),s=A-n.ticks;t+=s*60/(n.tempo*this.timeDivision),A-=s}return t}_copyFromSequence(A){this.midiName=A.midiName,this.midiNameUsesFileName=A.midiNameUsesFileName,this.fileName=A.fileName,this.timeDivision=A.timeDivision,this.duration=A.duration,this.copyright=A.copyright,this.tracksAmount=A.tracksAmount,this.firstNoteOn=A.firstNoteOn,this.lastVoiceEventTick=A.lastVoiceEventTick,this.format=A.format,this.bankOffset=A.bankOffset,this.isKaraokeFile=A.isKaraokeFile,this.isMultiPort=A.isMultiPort,this.tempoChanges=[...A.tempoChanges],this.lyrics=A.lyrics.map(t=>new Uint8Array(t)),this.lyricsTicks=[...A.lyricsTicks],this.midiPorts=[...A.midiPorts],this.trackNames=[...A.trackNames],this.midiPortChannelOffsets=[...A.midiPortChannelOffsets],this.usedChannelsOnTrack=A.usedChannelsOnTrack.map(t=>new Set(t)),this.rawMidiName=A.rawMidiName?new Uint8Array(A.rawMidiName):void 0,this.loop={...A.loop},this.keyRange={...A.keyRange},this.RMIDInfo={...A.RMIDInfo}}};function uA(e){let A=0;for(;e;){let t=e[e.currentIndex++];if(A=A<<7|t&127,t>>7!==1)break}return A}function vn(e){let A=[e&127];for(e>>=7;e>0;)A.unshift(e&127|128),e>>=7;return A}function _r(){let e=this;if(!e.tracks)throw new Error("MIDI has no tracks!");let A=[];for(let s of e.tracks){let r=[],i=0,a;for(let o of s){let I=o.ticks-i,B;o.messageStatusByte<=w.sequenceSpecific?(B=[255,o.messageStatusByte,...vn(o.messageData.length),...o.messageData],a=void 0):o.messageStatusByte===w.systemExclusive?(B=[240,...vn(o.messageData.length),...o.messageData],a=void 0):(B=[],a!==o.messageStatusByte&&(a=o.messageStatusByte,B.push(o.messageStatusByte)),B.push(...o.messageData)),r.push(...vn(I)),r.push(...B),i+=I}A.push(new Uint8Array(r))}function t(s,r){for(let i=0;i<s.length;i++)r.push(s.charCodeAt(i))}let n=[];t("MThd",n),n.push(...Wt(6,4)),n.push(0,e.format),n.push(...Wt(e.tracksAmount,2)),n.push(...Wt(e.timeDivision,2));for(let s of A)t("MTrk",n),n.push(...Wt(s.length,4)),n.push(...s);return new Uint8Array(n)}function kt(e){return e.messageData[0]===67&&e.messageData[2]===76&&e.messageData[5]===126&&e.messageData[6]===0}function Hn(e){return e.messageData[0]===65&&e.messageData[2]===66&&e.messageData[3]===18&&e.messageData[4]===64&&(e.messageData[5]&16)!==0&&e.messageData[6]===21}function On(e){return e.messageData[0]===65&&e.messageData[2]===66&&e.messageData[6]===127}function Yn(e){return e.messageData[0]===126&&e.messageData[2]===9&&e.messageData[3]===1}function Jn(e){return e.messageData[0]===126&&e.messageData[2]===9&&e.messageData[3]===3}function Ns(e){return new PA(e,w.systemExclusive,new N([65,16,66,18,64,0,127,0,65,247]))}function Ft(e,A,t,n){return new PA(n,w.controllerChange|e%16,new N([A,t]))}function zi(e,A){let t=16|[1,2,3,4,5,6,7,8,0,9,10,11,12,13,14,15][e%16],n=[65,16,66,18,64,t,21,1],r=128-(64+t+21+1)%128;return new PA(A,w.systemExclusive,new N([...n,r,247]))}function zr(e=[],A=[],t=[],n=[]){let s=this;fA("%cApplying changes to the MIDI file...",c.info),y("Desired program changes:",e),y("Desired CC changes:",A),y("Desired channels to clear:",t),y("Desired channels to transpose:",n);let r=new Set;e.forEach(x=>{r.add(x.channel)});let i="gs",a=!1,o=Array(s.tracks.length).fill(0),I=s.tracks.length;function B(){let x=0,J=1/0;return s.tracks.forEach((H,E)=>{o[E]>=H.length||H[o[E]].ticks<J&&(x=E,J=H[o[E]].ticks)}),x}let C=s.midiPorts.slice(),h={},l=0;function u(x,J){s.usedChannelsOnTrack[x].size!==0&&(l===0&&(l+=16,h[J]=0),h[J]===void 0&&(h[J]=l,l+=16),C[x]=J)}s.midiPorts.forEach((x,J)=>{u(J,x)});let f=l,S=Array(f).fill(!0),R=Array(f).fill(0),D=Array(f).fill(0);for(n.forEach(x=>{let J=Math.trunc(x.keyShift),H=x.keyShift-J;R[x.channel]=J,D[x.channel]=H});I>0;){let x=B(),J=s.tracks[x];if(o[x]>=J.length){I--;continue}let H=o[x]++,E=J[H],L=()=>{J.splice(H,1),o[x]--},b=(QA,MA=0)=>{J.splice(H+MA,0,QA),o[x]++},$=h[C[x]]||0;if(E.messageStatusByte===w.midiPort){u(x,E.messageData[0]);continue}if(E.messageStatusByte<=w.sequenceSpecific&&E.messageStatusByte>=w.sequenceNumber)continue;let AA=E.messageStatusByte&240,K=E.messageStatusByte&15,oA=K+$;if(t.indexOf(oA)!==-1){L();continue}switch(AA){case w.noteOn:if(S[oA]){S[oA]=!1,A.filter(q=>q.channel===oA).forEach(q=>{let T=Ft(K,q.controllerNumber,q.controllerValue,E.ticks);b(T)});let nA=D[oA];if(nA!==0){let q=nA*64+64,T=Ft(K,p.RPNMsb,0,E.ticks),k=Ft(K,p.RPNLsb,1,E.ticks),M=Ft(oA,p.dataEntryMsb,q,E.ticks),O=Ft(K,p.lsbForControl6DataEntry,0,E.ticks);b(O),b(M),b(k),b(T)}if(r.has(oA)){let q=e.find(iA=>iA.channel===oA),T=Math.max(0,Math.min(q.bank,127)),k=q.program;y(`%cSetting %c${q.channel}%c to %c${T}:${k}%c. Track num: %c${x}`,c.info,c.recognized,c.info,c.recognized,c.info,c.recognized);let M=new PA(E.ticks,w.programChange|K,new N([k]));b(M);let O=(iA,VA)=>{let he=Ft(K,iA?p.lsbForControl0BankSelect:p.bankSelect,VA,E.ticks);b(he)};xA(i)?q.isDrum?(y(`%cAdding XG Drum change on track %c${x}`,c.recognized,c.value),O(!1,ne(T)?T:127),O(!0,0)):T===hn?(O(!1,hn),O(!0,0)):(O(!1,0),O(!0,T)):(O(!1,T),q.isDrum&&K!==9&&(y(`%cAdding GS Drum change on track %c${x}`,c.recognized,c.value),b(zi(K,E.ticks))))}}E.messageData[0]+=R[oA];break;case w.noteOff:E.messageData[0]+=R[oA];break;case w.programChange:if(r.has(oA)){L();continue}break;case w.controllerChange:let QA=E.messageData[0];if(A.find(nA=>nA.channel===oA&&QA===nA.controllerNumber)!==void 0){L();continue}if((QA===p.bankSelect||QA===p.lsbForControl0BankSelect)&&r.has(oA)){L();continue}break;case w.systemExclusive:if(kt(E))y("%cXG system on detected",c.info),i="xg",a=!0;else if(E.messageData[0]===67&&E.messageData[2]===76&&E.messageData[3]===8&&E.messageData[5]===3)r.has(E.messageData[4]+$)&&L();else if(On(E)){a=!0,y("%cGS on detected!",c.recognized);break}else(Yn(E)||Jn(E))&&(y("%cGM/2 on detected, removing!",c.info),L(),a=!1)}}if(!a&&e.length>0){let x=0;s.tracks[0][0].messageStatusByte===w.trackName&&x++,s.tracks[0].splice(x,0,Ns(0)),y("%cGS on not detected. Adding it.",c.info)}this.flush(),Z()}function jr(e){let A=[],t=[],n=[],s=[];e.channelSnapshots.forEach((r,i)=>{if(r.isMuted){t.push(i);return}let a=r.channelTransposeKeyShift+r.customControllers[rA.channelTransposeFine]/100;a!==0&&A.push({channel:i,keyShift:a}),r.lockPreset&&n.push({channel:i,program:r.program,bank:r.bank,isDrum:r.drumChannel}),r.lockedControllers.forEach((o,I)=>{if(!o||I>127||I===p.bankSelect)return;let B=r.midiControllers[I]>>7;s.push({channel:i,controllerNumber:I,controllerValue:B})})}),this.modifyMIDI(n,s,t,A)}var mA={name:"INAM",album:"IPRD",album2:"IALB",artist:"IART",genre:"IGNR",picture:"IPIC",copyright:"ICOP",creationDate:"ICRD",comment:"ICMT",engineer:"IENG",software:"ISFT",encoding:"IENC",midiEncoding:"MENC",bankOffset:"DBNK"},We="utf-8",ji="Created using SpessaSynth";function $r(e,A,t=0,n="Shift_JIS",s={},r=!0){let i=this;if(ce("%cWriting the RMIDI File...",c.info),y(`%cConfiguration: Bank offset: %c${t}%c, encoding: %c${n}`,c.info,c.value,c.info,c.value),y("metadata",s),y("Initial bank offset",i.bankOffset),r){let R=function(){let H=0,E=1/0;return i.tracks.forEach((L,b)=>{f[b]>=L.length||L[f[b]].ticks<E&&(H=b,E=L[f[b]].ticks)}),H},l="gm",u=[],f=Array(i.tracks.length).fill(0),S=i.tracks.length,D=Array(i.tracks.length).fill(0),x=16+i.midiPortChannelOffsets.reduce((H,E)=>E>H?E:H),J=[];for(let H=0;H<x;H++)J.push({program:0,drums:H%16===9,lastBank:void 0,lastBankLSB:void 0,hasBankSelect:!1});for(;S>0;){let H=R(),E=i.tracks[H];if(f[H]>=E.length){S--;continue}let L=E[f[H]];f[H]++;let b=i.midiPortChannelOffsets[D[H]];if(L.messageStatusByte===w.midiPort){D[H]=L.messageData[0];continue}let $=L.messageStatusByte&240;if($!==w.controllerChange&&$!==w.programChange&&$!==w.systemExclusive)continue;if($===w.systemExclusive){if(!Hn(L)){kt(L)?l="xg":On(L)?l="gs":Yn(L)?(l="gm",u.push({tNum:H,e:L})):Jn(L)&&(l="gm2");continue}let nA=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][L.messageData[5]&15]+b;J[nA].drums=!!(L.messageData[7]>0&&L.messageData[5]>>4);continue}let AA=(L.messageStatusByte&15)+b,K=J[AA];if($===w.programChange){let nA=xA(l),q=L.messageData[0];K.drums?A.presets.findIndex(O=>O.program===q&&O.isDrumPreset(nA,!0))===-1&&(L.messageData[0]=A.presets.find(O=>O.isDrumPreset(nA))?.program||0,y(`%cNo drum preset %c${q}%c. Channel %c${AA}%c. Changing program to ${L.messageData[0]}.`,c.info,c.unrecognized,c.info,c.recognized,c.info)):A.presets.findIndex(O=>O.program===q&&!O.isDrumPreset(nA))===-1&&(L.messageData[0]=A.presets.find(O=>!O.isDrumPreset(nA))?.program||0,y(`%cNo preset %c${q}%c. Channel %c${AA}%c. Changing program to ${L.messageData[0]}.`,c.info,c.unrecognized,c.info,c.recognized,c.info)),K.program=L.messageData[0];let T=Math.max(0,K.lastBank?.messageData[1]-i.bankOffset),k=K?.lastBankLSB?.messageData[1]-i.bankOffset||0;if(K.lastBank===void 0)continue;let M=mt(T,k,K.drums,nA);if(A.presets.findIndex(O=>O.bank===M&&O.program===L.messageData[0])===-1){let O=A.presets.find(iA=>iA.program===L.messageData[0])?.bank+t||t;K.lastBank.messageData[1]=O,K?.lastBankLSB?.messageData&&(K.lastBankLSB.messageData[1]=O),y(`%cNo preset %c${M}:${L.messageData[0]}%c. Channel %c${AA}%c. Changing bank to ${O}.`,c.info,c.unrecognized,c.info,c.recognized,c.info)}else{let O=M;xA(l)&&M===128&&(M=127);let iA=(M===128?128:O)+t;K.lastBank.messageData[1]=iA,K?.lastBankLSB?.messageData&&!K.drums&&(K.lastBankLSB.messageData[1]=K.lastBankLSB.messageData[1]-i.bankOffset+t),y(`%cPreset %c${M}:${L.messageData[0]}%c exists. Channel %c${AA}%c. Changing bank to ${iA}.`,c.info,c.recognized,c.info,c.recognized,c.info)}continue}let oA=L.messageData[0]===p.lsbForControl0BankSelect;if(L.messageData[0]!==p.bankSelect&&!oA)continue;K.hasBankSelect=!0;let QA=L.messageData[1],MA=ut(K?.lastBank?.messageData[1]||0,QA,l,oA,K.drums,AA);MA.drumsStatus===2?K.drums=!0:MA.drumsStatus===1&&(K.drums=!1),oA?K.lastBankLSB=L:K.lastBank=L}if(J.forEach((H,E)=>{if(H.hasBankSelect===!0)return;let L=E%16,b=w.programChange|L,$=Math.floor(E/16)*16,AA=i.midiPortChannelOffsets.indexOf($),K=i.tracks.find((nA,q)=>i.midiPorts[q]===AA&&i.usedChannelsOnTrack[q].has(L));if(K===void 0)return;let oA=K.findIndex(nA=>nA.messageStatusByte===b);if(oA===-1){let nA=K.findIndex(k=>k.messageStatusByte>128&&k.messageStatusByte<240&&(k.messageStatusByte&15)===L);if(nA===-1)return;let q=K[nA].ticks,T=A.getPreset(0,0).program;K.splice(nA,0,new PA(q,w.programChange|L,new N([T]))),oA=nA}y(`%cAdding bank select for %c${E}`,c.info,c.recognized);let QA=K[oA].ticks,MA=A.getPreset(0,H.program,xA(l))?.bank+t||t;K.splice(oA,0,new PA(QA,w.controllerChange|L,new N([p.bankSelect,MA])))}),l!=="gs"&&!xA(l)){for(let E of u)i.tracks[E.tNum].splice(i.tracks[E.tNum].indexOf(E.e),1);let H=0;i.tracks[0][0].messageStatusByte===w.trackName&&H++,i.tracks[0].splice(H,0,Ns(0))}}let a=new N(i.writeMIDI().buffer),o=[XA("INFO")],I=new TextEncoder;if(o.push(j(mA.software,I.encode("SpessaSynth"),!0)),s.name!==void 0?(o.push(j(mA.name,I.encode(s.name),!0)),n=We):o.push(j(mA.name,i.rawMidiName,!0)),s.creationDate!==void 0)n=We,o.push(j(mA.creationDate,I.encode(s.creationDate),!0));else{let l=new Date().toLocaleString(void 0,{weekday:"long",year:"numeric",month:"long",day:"numeric",hour:"numeric",minute:"numeric"});o.push(j(mA.creationDate,XA(l,!0),!0))}if(s.comment!==void 0&&(n=We,o.push(j(mA.comment,I.encode(s.comment)))),s.engineer!==void 0&&o.push(j(mA.engineer,I.encode(s.engineer),!0)),s.album!==void 0&&(n=We,o.push(j(mA.album,I.encode(s.album),!0)),o.push(j(mA.album2,I.encode(s.album),!0))),s.artist!==void 0&&(n=We,o.push(j(mA.artist,I.encode(s.artist),!0))),s.genre!==void 0&&(n=We,o.push(j(mA.genre,I.encode(s.genre),!0))),s.picture!==void 0&&o.push(j(mA.picture,new Uint8Array(s.picture))),s.copyright!==void 0)n=We,o.push(j(mA.copyright,I.encode(s.copyright),!0));else{let l=i.copyright.length>0?i.copyright:ji;o.push(j(mA.copyright,XA(l,!0)))}let B=new N(2);Ce(B,t,2),o.push(j(mA.bankOffset,B)),s.midiEncoding!==void 0&&(o.push(j(mA.midiEncoding,I.encode(s.midiEncoding))),n=We),o.push(j(mA.encoding,XA(n,!0)));let C=kA(o),h=kA([XA("RMID"),j("data",a),j("LIST",C),e]);return y("%cFinished!",c.info),Z(),j("RIFF",h)}function Ai(e){let A=this;fA("%cSearching for all used programs and keys...",c.info);let t=16+A.midiPortChannelOffsets.reduce((C,h)=>h>C?h:C),n=[];for(let C=0;C<t;C++){let h=C%16===9?128:0;n.push({program:0,bank:h,bankLSB:0,actualBank:h,drums:C%16===9,string:`${h}:0`})}let s="gs";function r(C){let h=mt(C.bank,C.bankLSB,C.drums,xA(s)),l,u;if(e instanceof pt){let f=e.getPreset(h,C.program,xA(s));l=f.preset.bank+f.bankOffset,u=f.preset.program}else{let f=e.getPreset(h,C.program,xA(s));l=f.bank,u=f.program}C.actualBank=l,C.program=u,C.string=C.actualBank+":"+C.program,i[C.string]||(y(`%cDetected a new preset: %c${C.string}`,c.info,c.recognized),i[C.string]=new Set)}let i={},a=Array(A.tracks.length).fill(0),o=A.tracks.length;function I(){let C=0,h=1/0;return A.tracks.forEach((l,u)=>{a[u]>=l.length||l[a[u]].ticks<h&&(C=u,h=l[a[u]].ticks)}),C}let B=A.midiPorts.slice();for(n.forEach(C=>{r(C)});o>0;){let C=I(),h=A.tracks[C];if(a[C]>=h.length){o--;continue}let l=h[a[C]];if(a[C]++,l.messageStatusByte===w.midiPort){B[C]=l.messageData[0];continue}let u=l.messageStatusByte&240;if(u!==w.noteOn&&u!==w.controllerChange&&u!==w.programChange&&u!==w.systemExclusive)continue;let f=(l.messageStatusByte&15)+A.midiPortChannelOffsets[B[C]]||0,S=n[f];switch(u){case w.programChange:S.program=l.messageData[0],r(S);break;case w.controllerChange:let R=l.messageData[0]===p.lsbForControl0BankSelect;if(l.messageData[0]!==p.bankSelect&&!R||s==="gs"&&S.drums)continue;let D=l.messageData[1];switch(R?S.bankLSB=D:S.bank=D,ut(S.bank,D,s,R,S.drums,f).drumsStatus){case 0:break;case 1:S.drums=!1,r(S);break;case 2:S.drums=!0,r(S);break}break;case w.noteOn:if(l.messageData[1]===0)continue;i[S.string].add(`${l.messageData[0]}-${l.messageData[1]}`);break;case w.systemExclusive:if(!Hn(l)){kt(l)&&(s="xg",y("%cXG on detected!",c.recognized));continue}let J=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][l.messageData[5]&15]+A.midiPortChannelOffsets[B[C]],H=!!(l.messageData[7]>0&&l.messageData[5]>>4);S=n[J],S.drums=H,r(S);break}}for(let C of Object.keys(i))i[C].size===0&&(y(`%cDetected change but no keys for %c${C}`,c.info,c.value),delete i[C]);return Z(),i}function ei(e=0){function A(C){return C.messageData=new N(C.messageData.buffer),C.messageData.currentIndex=0,6e7/qA(C.messageData,3)}let t=[],s=this.tracks.flat();s.sort((C,h)=>C.ticks-h.ticks);for(let C=0;C<16;C++)t.push([]);let r=0,i=60/(120*this.timeDivision),a=0,o=0,I=[];for(let C=0;C<16;C++)I.push([]);let B=(C,h)=>{let l=I[h].findIndex(f=>f.midiNote===C),u=I[h][l];if(u){let f=r-u.start;u.length=f,h===9&&(u.length=f<e?e:f),I[h].splice(l,1)}o--};for(;a<s.length;){let C=s[a],h=C.messageStatusByte>>4,l=C.messageStatusByte&15;if(h===8)B(C.messageData[0],l);else if(h===9)if(C.messageData[1]===0)B(C.messageData[0],l);else{B(C.messageData[0],l);let u={midiNote:C.messageData[0],start:r,length:-1,velocity:C.messageData[1]/127};t[l].push(u),I[l].push(u),o++}else C.messageStatusByte===81&&(i=60/(A(C)*this.timeDivision));if(++a>=s.length)break;r+=i*(s[a].ticks-C.ticks)}return o>0&&I.forEach((C,h)=>{C.forEach(l=>{let u=r-l.start;l.length=u,h===9&&(l.length=u<e?e:u)})}),t}var jA=class e extends at{embeddedSoundFont=void 0;tracks=[];isDLSRMIDI=!1;static copyFrom(A){let t=new e;return t._copyFromSequence(A),t.isDLSRMIDI=A.isDLSRMIDI,t.embeddedSoundFont=A.embeddedSoundFont?A.embeddedSoundFont.slice(0):void 0,t.tracks=A.tracks.map(n=>[...n]),t}_parseInternal(){ce("%cInterpreting MIDI events...",c.info);let A=!1;this.keyRange={max:0,min:127};let t=[],n=!1;typeof this.RMIDInfo.ICOP<"u"&&(n=!0);let s=!1;typeof this.RMIDInfo.INAM<"u"&&(s=!0);let r=null,i=null;for(let B=0;B<this.tracks.length;B++){let C=this.tracks[B],h=new Set,l=!1;for(let f of C){if(f.messageStatusByte>=128&&f.messageStatusByte<240){l=!0;for(let R=0;R<f.messageData.length;R++)f.messageData[R]=Math.min(127,f.messageData[R]);switch(f.ticks>this.lastVoiceEventTick&&(this.lastVoiceEventTick=f.ticks),f.messageStatusByte&240){case w.controllerChange:switch(f.messageData[0]){case 2:case 116:r=f.ticks;break;case 4:case 117:i===null?i=f.ticks:i=0;break;case 0:this.isDLSRMIDI&&f.messageData[1]!==0&&f.messageData[1]!==127&&(y("%cDLS RMIDI with offset 1 detected!",c.recognized),this.bankOffset=1)}break;case w.noteOn:h.add(f.messageStatusByte&15);let R=f.messageData[0];this.keyRange.min=Math.min(this.keyRange.min,R),this.keyRange.max=Math.max(this.keyRange.max,R);break}}f.messageData.currentIndex=0;let S=eA(f.messageData,f.messageData.length);switch(f.messageData.currentIndex=0,f.messageStatusByte){case w.setTempo:f.messageData.currentIndex=0,this.tempoChanges.push({ticks:f.ticks,tempo:6e7/qA(f.messageData,3)}),f.messageData.currentIndex=0;break;case w.marker:switch(S.trim().toLowerCase()){default:break;case"start":case"loopstart":r=f.ticks;break;case"loopend":i=f.ticks}f.messageData.currentIndex=0;break;case w.copyright:n||(f.messageData.currentIndex=0,t.push(eA(f.messageData,f.messageData.length,void 0,!1)),f.messageData.currentIndex=0);break;case w.lyric:if(S.trim().startsWith("@KMIDI KARAOKE FILE")&&(this.isKaraokeFile=!0,y("%cKaraoke MIDI detected!",c.recognized)),this.isKaraokeFile)f.messageStatusByte=w.text;else{this.lyrics.push(f.messageData),this.lyricsTicks.push(f.ticks);break}case w.text:let D=S.trim();D.startsWith("@KMIDI KARAOKE FILE")?(this.isKaraokeFile=!0,y("%cKaraoke MIDI detected!",c.recognized)):this.isKaraokeFile&&(D.startsWith("@T")||D.startsWith("@A")?A?t.push(D.substring(2).trim()):(this.midiName=D.substring(2).trim(),A=!0,s=!0,this.rawMidiName=XA(this.midiName)):D[0]!=="@"&&(this.lyrics.push($s(f.messageData)),this.lyricsTicks.push(f.ticks)));break;case w.trackName:break}}this.usedChannelsOnTrack.push(h),this.trackNames[B]="";let u=C.find(f=>f.messageStatusByte===w.trackName);if(u){u.messageData.currentIndex=0;let f=eA(u.messageData,u.messageData.length);this.trackNames[B]=f,l||t.push(f)}}this.tempoChanges.reverse(),y("%cCorrecting loops, ports and detecting notes...",c.info);let a=[];for(let B of this.tracks){let C=B.find(h=>(h.messageStatusByte&240)===w.noteOn);C&&a.push(C.ticks)}this.firstNoteOn=Math.min(...a),y(`%cFirst note-on detected at: %c${this.firstNoteOn}%c ticks!`,c.info,c.recognized,c.info),r!==null&&i===null?(r=this.firstNoteOn,i=this.lastVoiceEventTick):(r===null&&(r=this.firstNoteOn),(i===null||i===0)&&(i=this.lastVoiceEventTick)),this.loop={start:r,end:i},y(`%cLoop points: start: %c${this.loop.start}%c end: %c${this.loop.end}`,c.info,c.recognized,c.info,c.recognized);let o=0;this.midiPorts=[],this.midiPortChannelOffsets=[];for(let B=0;B<this.tracks.length;B++)if(this.midiPorts.push(-1),this.usedChannelsOnTrack[B].size!==0)for(let C of this.tracks[B]){if(C.messageStatusByte!==w.midiPort)continue;let h=C.messageData[0];this.midiPorts[B]=h,this.midiPortChannelOffsets[h]===void 0&&(this.midiPortChannelOffsets[h]=o,o+=16)}this.midiPortChannelOffsets=[...this.midiPortChannelOffsets].map(B=>B??0);let I=1/0;for(let B of this.midiPorts)B!==-1&&I>B&&(I=B);if(I===1/0&&(I=0),this.midiPorts=this.midiPorts.map(B=>B===-1||B===void 0?I:B),this.midiPortChannelOffsets.length===0&&(this.midiPortChannelOffsets=[0]),this.midiPortChannelOffsets.length<2?y("%cNo additional MIDI Ports detected.",c.info):(this.isMultiPort=!0,y("%cMIDI Ports detected!",c.recognized)),!s)if(this.tracks.length>1){if(this.tracks[0].find(B=>B.messageStatusByte>=w.noteOn&&B.messageStatusByte<w.polyPressure)===void 0){let B=this.tracks[0].find(C=>C.messageStatusByte===w.trackName);B&&(this.rawMidiName=B.messageData,B.messageData.currentIndex=0,this.midiName=eA(B.messageData,B.messageData.length,void 0,!1))}}else{let B=this.tracks[0].find(C=>C.messageStatusByte===w.trackName);B&&(this.rawMidiName=B.messageData,B.messageData.currentIndex=0,this.midiName=eA(B.messageData,B.messageData.length,void 0,!1))}if(n||(this.copyright=t.map(B=>B.trim().replace(/(\r?\n)+/g,`
|
|
18
|
-
`)).filter(
|
|
19
|
-
`)||""),this.midiName=this.midiName.trim(),this.midiNameUsesFileName=!1,this.midiName.length===0){y("%cNo name detected. Using the alt name!",c.info),this.midiName=js(this.fileName),this.midiNameUsesFileName=!0,this.rawMidiName=new Uint8Array(this.midiName.length);for(let B=0;B<this.midiName.length;B++)this.rawMidiName[B]=this.midiName.charCodeAt(B)}else y(`%cMIDI Name detected! %c"${this.midiName}"`,c.info,c.recognized);this.tracks.some(B=>B[0].ticks===0)||this.tracks[0].unshift(new PA(0,w.trackName,new N(this.rawMidiName.buffer))),this.duration=this.MIDIticksToSeconds(this.lastVoiceEventTick),y("%cSuccess!",c.recognized),Z()}flush(){for(let A of this.tracks)A.sort((t,n)=>t.ticks-n.ticks);this._parseInternal()}};jA.prototype.writeMIDI=_r;jA.prototype.modifyMIDI=zr;jA.prototype.applySnapshotToMIDI=jr;jA.prototype.writeRMIDI=$r;jA.prototype.getUsedProgramsAndKeys=Ai;jA.prototype.getNoteTimes=ei;function ti(e,A){this.midiData.usedChannelsOnTrack[e].size!==0&&(this.midiPortChannelOffset===0&&(this.midiPortChannelOffset+=16,this.midiPortChannelOffsets[A]=0),this.midiPortChannelOffsets[A]===void 0&&(this.synth.midiAudioChannels.length<this.midiPortChannelOffset+15&&this._addNewMidiPort(),this.midiPortChannelOffsets[A]=this.midiPortChannelOffset,this.midiPortChannelOffset+=16),this.midiPorts[e]=A)}function ni(e,A=!0){if(this.stop(),!e.tracks)throw new Error("This MIDI has no tracks!");this.oneTickToSeconds=60/(120*e.timeDivision),this.midiData=e,this.synth.clearEmbeddedBank(),this.midiData.embeddedSoundFont!==void 0&&(y("%cEmbedded soundfont detected! Using it.",c.recognized),this.synth.setEmbeddedSoundFont(this.midiData.embeddedSoundFont,this.midiData.bankOffset)),fA("%cPreloading samples...",c.info);let t=this.midiData.getUsedProgramsAndKeys(this.synth.soundfontManager);for(let[n,s]of Object.entries(t)){let[r,i]=n.split(":").map(Number),a=this.synth.getPreset(r,i);y(`%cPreloading used samples on %c${a.presetName}%c...`,c.info,c.recognized,c.info);for(let o of s){let[I,B]=o.split("-").map(Number);this.synth.getVoicesForPreset(a,r,i,I,B,I)}}if(Z(),this.tracks=this.midiData.tracks,this.midiPorts=this.midiData.midiPorts.slice(),this.midiPortChannelOffset=0,this.midiPortChannelOffsets={},this.midiData.midiPorts.forEach((n,s)=>{this.assignMIDIPort(s,n)}),this.duration=this.midiData.duration,this.firstNoteTime=this.midiData.MIDIticksToSeconds(this.midiData.firstNoteOn),y(`%cTotal song time: ${os(Math.ceil(this.duration)).time}`,c.recognized),this?.onSongChange?.(this.songIndex,A),this.duration<=1&&(P(`%cVery short song: (${os(Math.round(this.duration)).time}). Disabling loop!`,c.warn),this.loop=!1),A)this.play(!0);else{let n=this.skipToFirstNoteOn?this.midiData.firstNoteOn-1:0;this.setTimeTicks(n),this.pause()}}function si(e,A=!0){this.songs=e.map(t=>jA.copyFrom(t)),!(this.songs.length<1)&&(this.songIndex=0,this.songs.length>1&&(this.loop=!1),this.shuffleSongIndexes(),this?.onSongListChange?.(this.songs),this.loadCurrentSong(A))}function oi(){if(this.songs.length===1){this.currentTime=0;return}this.songIndex++,this.songIndex%=this.songs.length,this.loadCurrentSong()}function ri(){if(this.songs.length===1){this.currentTime=0;return}this.songIndex--,this.songIndex<0&&(this.songIndex=this.songs.length-1),this.loadCurrentSong()}var gt=Pe.slice(0,128);function ii(e,A=void 0){this.oneTickToSeconds=60/(120*this.midiData.timeDivision),this.synth.resetAllControllers(),this.sendMIDIReset(),this._resetTimers();let t=this.synth.midiAudioChannels.length,n=Array(t).fill(8192),s=[];for(let o=0;o<t;o++)s.push({program:-1,bank:0,actualBank:0});let r=o=>o===p.dataDecrement||o===p.dataIncrement||o===p.dataEntryMsb||o===p.dataDecrement||o===p.lsbForControl6DataEntry||o===p.RPNLsb||o===p.RPNMsb||o===p.NRPNLsb||o===p.NRPNMsb||o===p.bankSelect||o===p.lsbForControl0BankSelect||o===p.resetAllControllers,i=[];for(let o=0;o<t;o++)i.push(Array.from(gt));function a(o){if(n[o]=8192,i?.[o]!==void 0)for(let I=0;I<gt.length;I++)ds.has(I)||(i[o][I]=gt[I])}for(;;){let o=this._findFirstEventIndex(),I=this.tracks[o][this.eventIndex[o]];if(A!==void 0){if(I.ticks>=A)break}else if(this.playedTime>=e)break;let B=ft(I.messageStatusByte),C=B.channel+(this.midiPortChannelOffsets[this.midiPorts[o]]||0);switch(B.status){case w.noteOn:i[C]===void 0&&(i[C]=Array.from(gt)),i[C][p.portamentoControl]=I.messageData[0];break;case w.noteOff:break;case w.pitchBend:n[C]=I.messageData[1]<<7|I.messageData[0];break;case w.programChange:if(this.midiData.isMultiPort&&this.midiData.usedChannelsOnTrack[o].size===0)break;let l=s[C];l.program=I.messageData[0],l.actualBank=l.bank;break;case w.controllerChange:if(this.midiData.isMultiPort&&this.midiData.usedChannelsOnTrack[o].size===0)break;let u=I.messageData[0];if(r(u)){let f=I.messageData[1];if(u===p.bankSelect){s[C].bank=f;break}else u===p.resetAllControllers&&a(C);this.sendMIDIMessages?this.sendMIDICC(C,u,f):this.synth.controllerChange(C,u,f)}else i[C]===void 0&&(i[C]=Array.from(gt)),i[C][u]=I.messageData[1];break;default:this._processEvent(I,o);break}this.eventIndex[o]++,o=this._findFirstEventIndex();let h=this.tracks[o][this.eventIndex[o]];if(h===void 0)return this.stop(),!1;this.playedTime+=this.oneTickToSeconds*(h.ticks-I.ticks)}if(this.sendMIDIMessages){for(let o=0;o<t;o++)if(n[o]!==void 0&&this.sendMIDIPitchWheel(o,n[o]>>7,n[o]&127),i[o]!==void 0&&i[o].forEach((I,B)=>{I!==gt[B]&&!r(B)&&this.sendMIDICC(o,B,I)}),s[o].program>=0&&s[o].actualBank>=0){let I=s[o].actualBank;this.sendMIDICC(o,p.bankSelect,I),this.sendMIDIProgramChange(o,s[o].program)}}else for(let o=0;o<t;o++)if(n[o]!==void 0&&this.synth.pitchWheel(o,n[o]>>7,n[o]&127),i[o]!==void 0&&i[o].forEach((I,B)=>{I!==gt[B]&&!r(B)&&this.synth.controllerChange(o,B,I)}),s[o].actualBank>=0){let I=s[o];I.program!==-1?(this.synth.controllerChange(o,p.bankSelect,I.actualBank),this.synth.programChange(o,I.program)):this.synth.controllerChange(o,p.bankSelect,I.bank)}return!0}function ai(e=!1){if(this.midiData!==void 0){if(e){this.pausedTime=void 0,this.currentTime=0;return}if(this.currentTime>=this.duration){this.pausedTime=void 0,this.currentTime=0;return}this.paused&&(this._recalculateStartTime(this.pausedTime),this.pausedTime=void 0),this.sendMIDIMessages||this.playingNotes.forEach(A=>{this.synth.noteOn(A.channel,A.midiNote,A.velocity)}),this.setProcessHandler()}}function gi(e){if(!this.midiData)return;this.stop(),this.playingNotes=[],this.pausedTime=void 0,this?.onTimeChange?.(this.midiData.MIDIticksToSeconds(e));let A=this._playTo(0,e);this._recalculateStartTime(this.playedTime),A&&this.play()}function Ii(e){this.absoluteStartTime=this.synth.currentSynthTime-e/this._playbackRate}function ci(e){this.sendMIDIMessages&&this?.onMIDIMessage?.(e)}function Ei(e,A,t){e%=16,this.sendMIDIMessages&&this.sendMIDIMessage([w.controllerChange|e,A,t])}function Ci(e,A){e%=16,this.sendMIDIMessages&&this.sendMIDIMessage([w.programChange|e,A])}function hi(e,A,t){e%=16,this.sendMIDIMessages&&this.sendMIDIMessage([w.pitchBend|e,t,A])}function li(){if(this.sendMIDIMessages){this.sendMIDIMessage([w.reset]);for(let e=0;e<16;e++)this.sendMIDIMessage([w.controllerChange|e,p.allSoundOff,0]),this.sendMIDIMessage([w.controllerChange|e,p.resetAllControllers,0])}}var RA=class{songs=[];songIndex=0;shuffledSongIndexes=[];synth;isActive=!1;sendMIDIMessages=!1;loopCount=1/0;eventIndex=[];playedTime=0;pausedTime=void 0;absoluteStartTime=0;playingNotes=[];loop=!0;shuffleMode=!1;midiData=void 0;midiPorts=[];midiPortChannelOffset=0;midiPortChannelOffsets={};skipToFirstNoteOn=!0;preservePlaybackState=!1;onMIDIMessage;onTimeChange;onPlaybackStop;onSongListChange;onSongChange;onMetaEvent;onLoopCountChange;constructor(A){this.synth=A,this.absoluteStartTime=this.synth.currentSynthTime}_playbackRate=1;set playbackRate(A){let t=this.currentTime;this._playbackRate=A,this.currentTime=t}get currentTime(){return this.pausedTime!==void 0?this.pausedTime:(this.synth.currentSynthTime-this.absoluteStartTime)*this._playbackRate}set currentTime(A){if(!this.midiData)return;if(A>this.duration||A<0){this.skipToFirstNoteOn?this.setTimeTicks(this.midiData.firstNoteOn-1):this.setTimeTicks(0);return}if(this.skipToFirstNoteOn&&A<this.firstNoteTime){this.setTimeTicks(this.midiData.firstNoteOn-1);return}this.stop(),this.playingNotes=[];let t=this.paused&&this.preservePlaybackState;if(this.pausedTime=void 0,this?.onTimeChange?.(A),this.midiData.duration===0){P("No duration!"),this?.onPlaybackStop?.(!0);return}this._playTo(A),this._recalculateStartTime(A),t?this.pause():this.play()}get paused(){return this.pausedTime!==void 0}pause(A=!1){if(this.paused){P("Already paused");return}this.pausedTime=this.currentTime,this.stop(),this?.onPlaybackStop?.(A)}stop(){this.clearProcessHandler();for(let A=0;A<16;A++)this.synth.controllerChange(A,p.sustainPedal,0);if(this.synth.stopAllChannels(),this.sendMIDIMessages){for(let A of this.playingNotes)this.sendMIDIMessage([w.noteOff|A.channel%16,A.midiNote]);for(let A=0;A<16;A++)this.sendMIDICC(A,p.allNotesOff,0)}}loadCurrentSong(A=!0){let t=this.songIndex;this.shuffleMode&&(t=this.shuffledSongIndexes[this.songIndex]),this.loadNewSequence(this.songs[t],A)}_resetTimers(){this.playedTime=0,this.eventIndex=Array(this.tracks.length).fill(0)}setProcessHandler(){this.isActive=!0}clearProcessHandler(){this.isActive=!1}shuffleSongIndexes(){let A=this.songs.map((t,n)=>n);for(this.shuffledSongIndexes=[];A.length>0;){let t=A[Math.floor(Math.random()*A.length)];this.shuffledSongIndexes.push(t),A.splice(A.indexOf(t),1)}}};RA.prototype.sendMIDIMessage=ci;RA.prototype.sendMIDIReset=li;RA.prototype.sendMIDICC=Ei;RA.prototype.sendMIDIProgramChange=Ci;RA.prototype.sendMIDIPitchWheel=hi;RA.prototype.assignMIDIPort=ti;RA.prototype._processEvent=Vr;RA.prototype._addNewMidiPort=Zr;RA.prototype.processTick=Xr;RA.prototype._findFirstEventIndex=Wr;RA.prototype.loadNewSequence=ni;RA.prototype.loadNewSongList=si;RA.prototype.nextSong=oi;RA.prototype.previousSong=ri;RA.prototype.play=ai;RA.prototype._playTo=ii;RA.prototype.setTimeTicks=gi;RA.prototype._recalculateStartTime=Ii;var _t;(()=>{var e=Uint8Array,A=Uint16Array,t=Int32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),r=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),i=function(T,k){for(var M=new A(31),O=0;O<31;++O)M[O]=k+=1<<T[O-1];for(var iA=new t(M[30]),O=1;O<30;++O)for(var VA=M[O];VA<M[O+1];++VA)iA[VA]=VA-M[O]<<5|O;return{b:M,r:iA}},a=i(n,2),o=a.b,I=a.r;o[28]=258,I[258]=28;var B=i(s,0),C=B.b,h=B.r,l=new A(32768);for(D=0;D<32768;++D)u=(D&43690)>>1|(D&21845)<<1,u=(u&52428)>>2|(u&13107)<<2,u=(u&61680)>>4|(u&3855)<<4,l[D]=((u&65280)>>8|(u&255)<<8)>>1;var u,D,f=function(T,k,M){for(var O=T.length,iA=0,VA=new A(k);iA<O;++iA)T[iA]&&++VA[T[iA]-1];var he=new A(k);for(iA=1;iA<k;++iA)he[iA]=he[iA-1]+VA[iA-1]<<1;var ue;if(M){ue=new A(1<<k);var me=15-k;for(iA=0;iA<O;++iA)if(T[iA])for(var ct=iA<<4|T[iA],Fe=k-T[iA],IA=he[T[iA]-1]++<<Fe,BA=IA|(1<<Fe)-1;IA<=BA;++IA)ue[l[IA]>>me]=ct}else for(ue=new A(O),iA=0;iA<O;++iA)T[iA]&&(ue[iA]=l[he[T[iA]-1]++]>>15-T[iA]);return ue},S=new e(288);for(D=0;D<144;++D)S[D]=8;var D;for(D=144;D<256;++D)S[D]=9;var D;for(D=256;D<280;++D)S[D]=7;var D;for(D=280;D<288;++D)S[D]=8;var D,R=new e(32);for(D=0;D<32;++D)R[D]=5;var D,x=f(S,9,1),J=f(R,5,1),H=function(T){for(var k=T[0],M=1;M<T.length;++M)T[M]>k&&(k=T[M]);return k},E=function(T,k,M){var O=k/8|0;return(T[O]|T[O+1]<<8)>>(k&7)&M},L=function(T,k){var M=k/8|0;return(T[M]|T[M+1]<<8|T[M+2]<<16)>>(k&7)},b=function(T){return(T+7)/8|0},$=function(T,k,M){return(k==null||k<0)&&(k=0),(M==null||M>T.length)&&(M=T.length),new e(T.subarray(k,M))},AA=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],K=function(T,k,M){var O=new Error(k||AA[T]);if(O.code=T,Error.captureStackTrace&&Error.captureStackTrace(O,K),!M)throw O;return O},oA=function(T,k,M,O){var iA=T.length,VA=O?O.length:0;if(!iA||k.f&&!k.l)return M||new e(0);var he=!M,ue=he||k.i!=2,me=k.i;he&&(M=new e(iA*3));var ct=function(sn){var Je=M.length;if(sn>Je){var Tt=new e(Math.max(Je*2,sn));Tt.set(M),M=Tt}},Fe=k.f||0,IA=k.p||0,BA=k.b||0,pe=k.l,$A=k.d,He=k.m,Oe=k.n,Mt=iA*8;do{if(!pe){Fe=E(T,IA,1);var Et=E(T,IA+1,3);if(IA+=3,Et)if(Et==1)pe=x,$A=J,He=9,Oe=5;else if(Et==2){var xt=E(T,IA,31)+257,qn=E(T,IA+10,15)+4,Vn=xt+E(T,IA+5,31)+1;IA+=14;for(var Ct=new e(Vn),Ye=new e(19),Ae=0;Ae<qn;++Ae)Ye[r[Ae]]=E(T,IA+Ae*3,7);IA+=qn*3;for(var Zn=H(Ye),An=(1<<Zn)-1,ht=f(Ye,Zn,1),Ae=0;Ae<Vn;){var Nt=ht[E(T,IA,An)];IA+=Nt&15;var ZA=Nt>>4;if(ZA<16)Ct[Ae++]=ZA;else{var we=0,bt=0;for(ZA==16?(bt=3+E(T,IA,3),IA+=2,we=Ct[Ae-1]):ZA==17?(bt=3+E(T,IA,7),IA+=3):ZA==18&&(bt=11+E(T,IA,127),IA+=7);bt--;)Ct[Ae++]=we}}var Xn=Ct.subarray(0,xt),Re=Ct.subarray(xt);He=H(Xn),Oe=H(Re),pe=f(Xn,He,1),$A=f(Re,Oe,1)}else K(1);else{var ZA=b(IA)+4,en=T[ZA-4]|T[ZA-3]<<8,tn=ZA+en;if(tn>iA){me&&K(0);break}ue&&ct(BA+en),M.set(T.subarray(ZA,tn),BA),k.b=BA+=en,k.p=IA=tn*8,k.f=Fe;continue}if(IA>Mt){me&&K(0);break}}ue&&ct(BA+131072);for(var Hs=(1<<He)-1,Os=(1<<Oe)-1,nn=IA;;nn=IA){var we=pe[L(T,IA)&Hs],_e=we>>4;if(IA+=we&15,IA>Mt){me&&K(0);break}if(we||K(2),_e<256)M[BA++]=_e;else if(_e==256){nn=IA,pe=null;break}else{var Wn=_e-254;if(_e>264){var Ae=_e-257,Ge=n[Ae];Wn=E(T,IA,(1<<Ge)-1)+o[Ae],IA+=Ge}var lt=$A[L(T,IA)&Os],ze=lt>>4;lt||K(3),IA+=lt&15;var Re=C[ze];if(ze>3){var Ge=s[ze];Re+=L(T,IA)&(1<<Ge)-1,IA+=Ge}if(IA>Mt){me&&K(0);break}ue&&ct(BA+131072);var Lt=BA+Wn;if(BA<Re){var Bt=VA-Re,bA=Math.min(Re,Lt);for(Bt+BA<0&&K(3);BA<bA;++BA)M[BA]=O[Bt+BA]}for(;BA<Lt;++BA)M[BA]=M[BA-Re]}}k.l=pe,k.p=nn,k.b=BA,k.f=Fe,pe&&(Fe=1,k.m=He,k.d=$A,k.n=Oe)}while(!Fe);return BA!=M.length&&he?$(M,0,BA):M.subarray(0,BA)},QA=new e(0);function MA(T,k){return oA(T,{i:2},k&&k.out,k&&k.dictionary)}var nA=typeof TextDecoder<"u"&&new TextDecoder,q=0;try{nA.decode(QA,{stream:!0}),q=1}catch{}_t=MA})();var bs={XMFFileType:0,nodeName:1,nodeIDNumber:2,resourceFormat:3,filenameOnDisk:4,filenameExtensionOnDisk:5,macOSFileTypeAndCreator:6,mimeType:7,title:8,copyrightNotice:9,comment:10,autoStart:11,preload:12,contentDescription:13,ID3Metadata:14},Rt={inLineResource:1,inFileResource:2,inFileNode:3,externalFile:4,externalXMF:5,XMFFileURIandNodeID:6},Ls={StandardMIDIFile:0,StandardMIDIFileType1:1,DLS1:2,DLS2:3,DLS22:4,mobileDLS:5},$i={standard:0,MMA:1,registered:2,nonRegistered:3},Pn={none:0,MMAUnpacker:1,registered:2,nonRegistered:3},Ts=class e{length;itemCount;metadataLength;metadata={};nodeData;innerNodes=[];packedContent=!1;nodeUnpackers=[];resourceFormat="unknown";constructor(A){let t=A.currentIndex;this.length=uA(A),this.itemCount=uA(A);let n=uA(A),s=A.currentIndex-t,r=n-s,i=A.slice(A.currentIndex,A.currentIndex+r);A.currentIndex+=r,this.metadataLength=uA(i);let a=i.slice(i.currentIndex,i.currentIndex+this.metadataLength);i.currentIndex+=this.metadataLength;let o,I;for(;a.currentIndex<a.length;){if(a[a.currentIndex]===0)a.currentIndex++,o=uA(a),Object.values(bs).indexOf(o)===-1?(P(`Unknown field specifier: ${o}`),I=`unknown_${o}`):I=Object.keys(bs).find(f=>bs[f]===o);else{let f=uA(a);o=eA(a,f),I=o}let u=uA(a);if(u===0){let f=uA(a),S=a.slice(a.currentIndex,a.currentIndex+f);a.currentIndex+=f,uA(S)<4?this.metadata[I]=eA(S,f-1):this.metadata[I]=S.slice(S.currentIndex)}else P(`International content: ${u}`),a.currentIndex+=uA(a)}let B=i.currentIndex,C=uA(i),h=i.slice(i.currentIndex,B+C);if(i.currentIndex=B+C,C>0)for(this.packedContent=!0;h.currentIndex<C;){let l={};switch(l.id=uA(h),l.id){case Pn.nonRegistered:case Pn.registered:throw Z(),new Error(`Unsupported unpacker ID: ${l.id}`);default:throw Z(),new Error(`Unknown unpacker ID: ${l.id}`);case Pn.none:l.standardID=uA(h);break;case Pn.MMAUnpacker:let u=h[h.currentIndex++];u===0&&(u<<=8,u|=h[h.currentIndex++],u<<=8,u|=h[h.currentIndex++]);let f=uA(h);l.manufacturerID=u,l.manufacturerInternalID=f;break}l.decodedSize=uA(h),this.nodeUnpackers.push(l)}switch(A.currentIndex=t+n,this.referenceTypeID=uA(A),this.nodeData=A.slice(A.currentIndex,t+this.length),A.currentIndex=t+this.length,this.referenceTypeID){case Rt.inLineResource:break;case Rt.externalXMF:case Rt.inFileNode:case Rt.XMFFileURIandNodeID:case Rt.externalFile:case Rt.inFileResource:throw Z(),new Error(`Unsupported reference type: ${this.referenceTypeID}`);default:throw Z(),new Error(`Unknown reference type: ${this.referenceTypeID}`)}if(this.isFile){if(this.packedContent){let u=this.nodeData.slice(2,this.nodeData.length);y(`%cPacked content. Attemting to deflate. Target size: %c${this.nodeUnpackers[0].decodedSize}`,c.warn,c.value);try{this.nodeData=new N(_t(u).buffer)}catch(f){throw Z(),new Error(`Error unpacking XMF file contents: ${f.message}.`)}}let l=this.metadata.resourceFormat;if(l===void 0)P("No resource format for this file node!");else{l[0]!==$i.standard&&(P(`Non-standard formatTypeID: ${l}`),this.resourceFormat=l.toString());let f=l[1];Object.values(Ls).indexOf(f)===-1?P(`Unrecognized resource format: ${f}`):this.resourceFormat=Object.keys(Ls).find(S=>Ls[S]===f)}}else for(this.resourceFormat="folder";this.nodeData.currentIndex<this.nodeData.length;){let l=this.nodeData.currentIndex,u=uA(this.nodeData),f=this.nodeData.slice(l,l+u);this.nodeData.currentIndex=l+u,this.innerNodes.push(new e(f))}}get isFile(){return this.itemCount===0}};function Bi(e,A){e.bankOffset=0;let t=eA(A,4);if(t!=="XMF_")throw Z(),new SyntaxError(`Invalid XMF Header! Expected "_XMF", got "${t}"`);ce("%cParsing XMF file...",c.info);let n=eA(A,4);if(y(`%cXMF version: %c${n}`,c.info,c.recognized),n==="2.00"){let o=qA(A,4),I=qA(A,4);y(`%cFile Type ID: %c${o}%c, File Type Revision ID: %c${I}`,c.info,c.recognized,c.info,c.recognized)}uA(A);let s=uA(A);A.currentIndex+=s,A.currentIndex=uA(A);let r=new Ts(A),i,a=o=>{let I=(B,C)=>{o.metadata[B]!==void 0&&typeof o.metadata[B]=="string"&&(e.RMIDInfo[C]=o.metadata[B])};if(I("nodeName",mA.name),I("title",mA.name),I("copyrightNotice",mA.copyright),I("comment",mA.comment),o.isFile)switch(o.resourceFormat){default:return;case"DLS1":case"DLS2":case"DLS22":case"mobileDLS":y("%cFound embedded DLS!",c.recognized),e.embeddedSoundFont=o.nodeData.buffer;break;case"StandardMIDIFile":case"StandardMIDIFileType1":y("%cFound embedded MIDI!",c.recognized),i=o.nodeData;break}else for(let B of o.innerNodes)a(B)};return a(r),Z(),i}var zt=class extends jA{constructor(A,t=""){super(),fA("%cParsing MIDI File...",c.info),this.fileName=t;let n=new N(A),s,r=eA(n,4);if(n.currentIndex-=4,r==="RIFF"){n.currentIndex+=8;let a=eA(n,4,void 0,!1);if(a!=="RMID")throw Z(),new SyntaxError(`Invalid RMIDI Header! Expected "RMID", got "${a}"`);let o=tA(n);if(o.header!=="data")throw Z(),new SyntaxError(`Invalid RMIDI Chunk header! Expected "data", got "${a}"`);for(s=o.chunkData;n.currentIndex<=n.length;){let I=n.currentIndex,B=tA(n,!0);if(B.header==="RIFF"){let C=eA(B.chunkData,4).toLowerCase();C==="sfbk"||C==="sfpk"||C==="dls "?(y("%cFound embedded soundfont!",c.recognized),this.embeddedSoundFont=n.slice(I,I+B.size).buffer):P(`Unknown RIFF chunk: "${C}"`),C==="dls "&&(this.isDLSRMIDI=!0)}else if(B.header==="LIST"&&eA(B.chunkData,4)==="INFO"){for(y("%cFound RMIDI INFO chunk!",c.recognized),this.RMIDInfo={};B.chunkData.currentIndex<=B.size;){let h=tA(B.chunkData,!0);this.RMIDInfo[h.header]=h.chunkData}this.RMIDInfo.ICOP&&(this.copyright=eA(this.RMIDInfo.ICOP,this.RMIDInfo.ICOP.length,void 0,!1).replaceAll(`
|
|
20
|
-
`," ")),this.RMIDInfo.INAM&&(this.rawMidiName=this.RMIDInfo[
|
|
21
|
-
`," ")),this.RMIDInfo.IALB&&!this.RMIDInfo.IPRD&&(this.RMIDInfo.IPRD=this.RMIDInfo.IALB),this.RMIDInfo.IPRD&&!this.RMIDInfo.IALB&&(this.RMIDInfo.IALB=this.RMIDInfo.IPRD),this.bankOffset=1,this.RMIDInfo[mA.bankOffset]&&(this.bankOffset=U(this.RMIDInfo[mA.bankOffset],2))}}this.isDLSRMIDI&&(this.bankOffset=0),this.embeddedSoundFont===void 0&&(this.bankOffset=0)}else r==="XMF_"?s=Bi(this,n):s=n;let i=this._readMIDIChunk(s);if(i.type!=="MThd")throw Z(),new SyntaxError(`Invalid MIDI Header! Expected "MThd", got "${i.type}"`);if(i.size!==6)throw Z(),new RangeError(`Invalid MIDI header chunk size! Expected 6, got ${i.size}`);this.format=qA(i.data,2),this.tracksAmount=qA(i.data,2),this.timeDivision=qA(i.data,2);for(let a=0;a<this.tracksAmount;a++){let o=[],I=this._readMIDIChunk(s);if(I.type!=="MTrk")throw Z(),new SyntaxError(`Invalid track header! Expected "MTrk" got "${I.type}"`);let B,C=0;for(this.format===2&&a>0&&(C+=this.tracks[a-1][this.tracks[a-1].length-1].ticks);I.data.currentIndex<I.size;){C+=uA(I.data);let h=I.data[I.data.currentIndex],l;if(B!==void 0&&h<128)l=B;else{if(B===void 0&&h<128)throw Z(),new SyntaxError(`Unexpected byte with no running byte. (${h})`);l=I.data[I.data.currentIndex++]}let u=ro(l),f;switch(u){case-1:f=0;break;case-2:l=I.data[I.data.currentIndex++],f=uA(I.data);break;case-3:f=uA(I.data);break;default:f=io[l>>4],B=l;break}let S=new N(f);S.set(I.data.slice(I.data.currentIndex,I.data.currentIndex+f),0);let R=new PA(C,l,S);o.push(R),I.data.currentIndex+=f}this.tracks.push(o),y(`%cParsed %c${this.tracks.length}%c / %c${this.tracksAmount}`,c.info,c.value,c.info,c.value)}y("%cAll tracks parsed correctly!",c.recognized),this._parseInternal(),Z(),y(`%cMIDI file parsed. Total tick time: %c${this.lastVoiceEventTick}%c, total seconds time: %c${this.duration}`,c.info,c.recognized,c.info,c.recognized)}_readMIDIChunk(A){let t={};t.type=eA(A,4),t.size=qA(A,4),t.data=new N(t.size);let n=A.slice(A.currentIndex,A.currentIndex+t.size);return t.data.set(n,0),A.currentIndex+=t.size,t}};var It={consoleColors:c,SpessaSynthInfo:y,SpessaSynthWarn:P,SpessaSynthGroupCollapsed:fA,SpessaSynthGroupEnd:Z,readBytesAsUintBigEndian:qA,readLittleEndian:U,readBytesAsString:eA,readVariableLengthQuantity:uA,inflateSync:_t};var Us=It.consoleColors;var GA={midiMessage:0,ccReset:7,setChannelVibrato:8,soundFontManager:9,stopAll:10,killNotes:11,muteChannel:12,addNewChannel:13,customCcChange:14,debugMessage:15,setMasterParameter:17,setDrums:18,transpose:19,highPerformanceMode:20,lockController:21,sequencerSpecific:22,requestSynthesizerSnapshot:23,setLogLevel:24,keyModifierManager:25,setEffectsGain:26,destroyWorklet:27},oe={channelPropertyChange:0,eventCall:1,masterParameterChange:2,sequencerSpecific:3,synthesizerSnapshot:4,isFullyInitialized:5,soundfontError:6};var di="spessasynth-worklet-processor";var Kn={addMapping:0,deleteMapping:1,clearMappings:2};var jt={reloadSoundFont:0,addNewSoundFont:2,deleteSoundFont:3,rearrangeSoundFonts:4};var Gt={backwards:0,forwards:1,shuffleOn:2,shuffleOff:3,index:4},re={loadNewSongList:0,pause:1,stop:2,play:3,setTime:4,changeMIDIMessageSending:5,setPlaybackRate:6,setLoop:7,changeSong:8,getMIDI:9,setSkipToFirstNote:10,setPreservePlaybackState:11},fe={midiEvent:0,songChange:1,timeChange:2,pause:3,getMIDI:4,midiError:5,metaEvent:6,loopCountChange:7,songListChange:8};function Qi(e,A){e===void 0&&(e={});for(let t in A)A.hasOwnProperty(t)&&!(t in e)&&(e[t]=A[t]);return e}var fi={skipToFirstNoteOn:!0,autoPlay:!0,preservePlaybackState:!1,initialPlaybackRate:1};var $t=class extends at{isEmbedded=!1;constructor(A){super(),this._copyFromSequence(A),this.isEmbedded=A.embeddedSoundFont!==void 0}},gp=Object.assign({duration:99999,firstNoteOn:0,loop:{start:0,end:123456},lastVoiceEventTick:123456,lyrics:[],lyricsTicks:[],copyright:"",midiPorts:[],midiPortChannelOffsets:[],tracksAmount:0,tempoChanges:[{ticks:0,tempo:120}],trackNames:[],fileName:"NOT_LOADED.mid",midiName:"Loading...",rawMidiName:new Uint8Array([76,111,97,100,105,110,103,46,46,46]),usedChannelsOnTrack:[],timeDivision:0,keyRange:{min:0,max:127},isEmbedded:!1,isKaraokeFile:!1,isMultiPort:!1,RMIDInfo:{},bankOffset:0,midiNameUsesFileName:!1,format:0},$t.prototype);var vs=class extends AudioWorkletProcessor{alive=!0;oneOutputMode=!1;constructor(A){super();let t=A.processorOptions;this.oneOutputMode=t.midiChannels===1;let n=(a,o)=>{this.postMessageToMainThread({messageType:a,messageData:o})},s=t?.startRenderingData,r=s?.snapshot;this.synthesizer=new TA(sampleRate,{effectsEnabled:!this.oneOutputMode,enableEventSystem:t?.enableEventSystem,midiChannels:16,initialTime:currentTime}),this.synthesizer.onEventCall=(a,o)=>{n(oe.eventCall,{eventName:a,eventData:o})},this.synthesizer.onChannelPropertyChange=(a,o)=>n(oe.channelPropertyChange,[o,a]),this.synthesizer.onMasterParameterChange=(a,o)=>n(oe.masterParameterChange,[a,o]);let i=ot(t.soundfont);this.synthesizer.soundfontManager.reloadManager(i),this.synthesizer.processorInitialized.then(()=>{this.sequencer=new RA(this.synthesizer);let a=(o,I)=>{this.postMessageToMainThread({messageType:oe.sequencerSpecific,messageData:{messageType:o,messageData:I}})};if(this.port.onmessage=o=>this.handleMessage(o.data),this.sequencer.onMIDIMessage=o=>{a(fe.midiEvent,o)},this.sequencer.onTimeChange=o=>{a(fe.timeChange,o)},this.sequencer.onPlaybackStop=o=>{a(fe.pause,o)},this.sequencer.onSongChange=(o,I)=>{a(fe.songChange,[o,I])},this.sequencer.onMetaEvent=(o,I)=>{a(fe.metaEvent,[o,I])},this.sequencer.onLoopCountChange=o=>{a(fe.loopCountChange,o)},this.sequencer.onSongListChange=o=>{let I=o.map(B=>new $t(B));this.postMessageToMainThread({messageType:oe.sequencerSpecific,messageData:{messageType:fe.songListChange,messageData:I}})},r!==void 0&&this.synthesizer.applySynthesizerSnapshot(r),s&&(It.SpessaSynthInfo("%cRendering enabled! Starting render.",Us.info),s.parsedMIDI)){s?.loopCount!==void 0?(this.sequencer.loopCount=s?.loopCount,this.sequencer.loop=!0):this.sequencer.loop=!1,this.synthesizer.voiceCap=1/0;let o=Qi(s.sequencerOptions,fi);this.sequencer.skipToFirstNoteOn=o.skipToFirstNoteOn,this.sequencer.preservePlaybackState=o.preservePlaybackState,this.sequencer.playbackRate=o.initialPlaybackRate;try{this.sequencer.loadNewSongList([s.parsedMIDI])}catch(I){console.error(I),a(fe.midiError,I)}}this.postReady()})}postReady(){this.postMessageToMainThread({messageType:oe.isFullyInitialized,messageData:void 0})}postMessageToMainThread(A){this.port.postMessage(A)}handleMessage(A){let t=A.messageData,n=A.channelNumber,s;if(n>=0&&(s=this.synthesizer.midiAudioChannels[n],s===void 0)){It.SpessaSynthWarn(`Trying to access channel ${n} which does not exist... ignoring!`);return}switch(A.messageType){case GA.midiMessage:this.synthesizer.processMessage(...t);break;case GA.customCcChange:s.setCustomController(t[0],t[1]);break;case GA.ccReset:n===-1?this.synthesizer.resetAllControllers():s.resetControllers();break;case GA.setChannelVibrato:if(n===-1)for(let u=0;u<this.synthesizer.midiAudioChannels.length;u++){let f=this.synthesizer.midiAudioChannels[u];t.rate===-1?f.disableAndLockGSNRPN():f.setVibrato(t.depth,t.rate,t.delay)}else t.rate===-1?s.disableAndLockGSNRPN():s.setVibrato(t.depth,t.rate,t.delay);break;case GA.stopAll:n===-1?this.synthesizer.stopAllChannels(t===1):s.stopAllNotes(t===1);break;case GA.killNotes:this.synthesizer.voiceKilling(t);break;case GA.muteChannel:s.muteChannel(t);break;case GA.addNewChannel:this.synthesizer.createMidiChannel(!0);break;case GA.debugMessage:console.debug(this.synthesizer);break;case GA.setMasterParameter:let r=t[0],i=t[1];this.synthesizer.setMasterParameter(r,i);break;case GA.setDrums:s.setDrums(t);break;case GA.transpose:n===-1?this.synthesizer.transposeAllChannels(t[0],t[1]):s.transposeChannel(t[0],t[1]);break;case GA.highPerformanceMode:this.synthesizer.highPerformanceMode=t;break;case GA.lockController:t[0]===-1?s.setPresetLock(t[1]):s.lockedControllers[t[0]]=t[1];break;case GA.sequencerSpecific:let a=this.sequencer,o=t.messageData;switch(t.messageType){default:break;case re.loadNewSongList:try{let R=o[0].map(D=>D.duration?D:new zt(D.binary,D.altName));a.loadNewSongList(R,o[1])}catch(S){console.error(S),this.postMessageToMainThread({messageType:oe.sequencerSpecific,messageData:{messageType:fe.midiError,messageData:S}})}break;case re.pause:a.pause();break;case re.play:a.play(o);break;case re.stop:a.stop();break;case re.setTime:a.currentTime=o;break;case re.changeMIDIMessageSending:a.sendMIDIMessages=o;break;case re.setPlaybackRate:a.playbackRate=o;break;case re.setLoop:let[u,f]=o;a.loop=u,f===-1?a.loopCount=1/0:a.loopCount=f;break;case re.changeSong:switch(o[0]){case Gt.forwards:a.nextSong();break;case Gt.backwards:a.previousSong();break;case Gt.shuffleOff:a.shuffleMode=!1,a.songIndex=a.shuffledSongIndexes[a.songIndex];break;case Gt.shuffleOn:a.shuffleMode=!0,a.shuffleSongIndexes(),a.songIndex=0,a.loadCurrentSong();break;case Gt.index:a.songIndex=o[1],a.loadCurrentSong();break}break;case re.getMIDI:this.postMessageToMainThread({messageType:oe.sequencerSpecific,messageData:{messageType:fe.getMIDI,messageData:a.midiData}});break;case re.setSkipToFirstNote:a.skipToFirstNoteOn=o;break;case re.setPreservePlaybackState:a.preservePlaybackState=o}break;case GA.soundFontManager:try{let u=this.synthesizer.soundfontManager,f=t[0],S=t[1],R;switch(f){case jt.addNewSoundFont:R=ot(S[0]),u.addNewSoundFont(R,S[1],S[2]),this.postMessageToMainThread({messageType:oe.isFullyInitialized,messageData:void 0});break;case jt.reloadSoundFont:R=ot(S),u.reloadManager(R),this.postMessageToMainThread({messageType:oe.isFullyInitialized,messageData:void 0});break;case jt.deleteSoundFont:u.deleteSoundFont(S);break;case jt.rearrangeSoundFonts:u.rearrangeSoundFonts(S)}}catch(u){this.postMessageToMainThread({messageType:oe.soundfontError,messageData:u})}break;case GA.keyModifierManager:let B=t[0],C=this.synthesizer.keyModifierManager,h=t[1];switch(B){default:return;case Kn.addMapping:C.addMapping(...h);break;case Kn.clearMappings:C.clearMappings();break;case Kn.deleteMapping:C.deleteMapping(...h)}break;case GA.requestSynthesizerSnapshot:let l=rt.createSynthesizerSnapshot(this.synthesizer);this.postMessageToMainThread({messageType:oe.synthesizerSnapshot,messageData:l});break;case GA.setLogLevel:ss(t[0],t[1],t[2],t[3]);break;case GA.setEffectsGain:this.synthesizer.reverbGain=t[0],this.synthesizer.chorusGain=t[1];break;case GA.destroyWorklet:this.alive=!1,this.synthesizer.destroySynthProcessor(),delete this.synthesizer,delete this.sequencer.midiData,delete this.sequencer;break;default:It.SpessaSynthWarn("Unrecognized event:",t);break}}process(A,t){if(!this.alive)return!1;if(this.sequencer.processTick(),this.oneOutputMode){let n=t[0],s=[];for(let r=0;r<32;r+=2)s.push([n[r],n[r+1]]);this.synthesizer.renderAudioSplit([],[],s)}else this.synthesizer.renderAudioSplit(t[0],t[1],t.slice(2));return!0}};registerProcessor(di,vs);It.SpessaSynthInfo("%cProcessor successfully registered!",Us.recognized);
|
|
15
|
+
Converted from DLS to SF2 with SpessaSynth`;for(let[o,I]of Object.entries(this.soundFontInfo))y(`%c"${o}": %c"${I}"`,E.info,E.recognized);let r=n.find(o=>o.header==="colh");r||(q(),this.parsingError("No colh chunk!")),this.instrumentAmount=v(r.chunkData,4),y(`%cInstruments amount: %c${this.instrumentAmount}`,E.info,E.recognized);let i=_A(n,"wvpl");i||(q(),this.parsingError("No wvpl chunk!")),this.readDLSSamples(i);let a=_A(n,"lins");a||(q(),this.parsingError("No lins chunk!")),this.readDLSInstrumentList(a),this.flush(),y(`%cParsing finished! %c"${this.soundFontInfo.INAM||"UNNAMED"}"%c has %c${this.presets.length} %cpresets,
|
|
16
|
+
%c${this.instruments.length}%c instruments and %c${this.samples.length}%c samples.`,E.info,E.recognized,E.info,E.recognized,E.info,E.recognized,E.info,E.recognized,E.info),q()}verifyHeader(A,...t){for(let n of t)if(A.header.toLowerCase()===n.toLowerCase())return;q(),this.parsingError(`Invalid DLS chunk header! Expected "${t.toString()}" got "${A.header.toLowerCase()}"`)}verifyText(A,t){A.toLowerCase()!==t.toLowerCase()&&(q(),this.parsingError(`FourCC error: Expected "${t.toLowerCase()}" got "${A.toLowerCase()}"`))}parsingError(A){throw new Error(`DLS parse error: ${A} The file may be corrupted.`)}destroySoundBank(){super.destroySoundBank(),delete this.dataArray}};Le.prototype.readDLSInstrumentList=ar;Le.prototype.readDLSInstrument=gr;Le.prototype.readRegion=Cr;Le.prototype.readLart=cr;Le.prototype.readDLSSamples=hr;var ks=class extends O{constructor(A){super();let t=A.currentIndex;this.generatorType=A[t+1]<<8|A[t],this.generatorValue=Pe(A[t+2],A[t+3]),A.currentIndex+=4}};function Fs(e){let A=[];for(;e.chunkData.length>e.chunkData.currentIndex;)A.push(new ks(e.chunkData));return A.pop(),A}var Gn=class extends tt{constructor(A){super(A)}getInstrument(A){let t=this.generators.find(n=>n.generatorType===g.instrument);t&&this.setInstrument(A[t.generatorValue])}};function lr(e,A,t,n,s){let r=e.gen,i=e.mod,a=0,o=0;for(let I of s)for(let l=0;l<I.zonesCount;l++){let c=r[o++],h=r[o],B=A.slice(c,h),u=i[a++],f=i[a],S=t.slice(u,f);if(B.find(G=>G.generatorType===g.instrument)!==void 0){let G=I.createZone();G.addGenerators(...B),G.addModulators(...S),G.getInstrument(n)}else I.globalZone.addGenerators(...B),I.globalZone.addModulators(...S)}}var ws=class extends Ne{zoneStartIndex;zonesCount=0;constructor(A,t){super(t),this.presetName=$(A.chunkData,20).replace(/\d{3}:\d{3}/,""),this.program=v(A.chunkData,2),this.bank=v(A.chunkData,2),this.zoneStartIndex=v(A.chunkData,2),this.library=v(A.chunkData,4),this.genre=v(A.chunkData,4),this.morphology=v(A.chunkData,4)}createZone(){let A=new Gn(this);return this.presetZones.push(A),A}};function Rs(e,A){let t=[];for(;e.chunkData.length>e.chunkData.currentIndex;){let n=new ws(e,A);if(t.length>0){let s=t[t.length-1];s.zonesCount=n.zoneStartIndex-s.zoneStartIndex}t.push(n)}return t.pop(),t}var Mn=class extends xe{constructor(A){super(A)}getSample(A){let t=this.generators.find(n=>n.generatorType===g.sampleID);t&&this.setSample(A[t.generatorValue])}};function Br(e,A,t,n,s){let r=e.gen,i=e.mod,a=0,o=0;for(let I of s)for(let l=0;l<I.zonesCount;l++){let c=r[o++],h=r[o],B=A.slice(c,h),u=i[a++],f=i[a],S=t.slice(u,f);if(B.find(G=>G.generatorType===g.sampleID)){let G=I.createZone();G.addGenerators(...B),G.addModulators(...S),G.getSample(n)}else I.globalZone.addGenerators(...B),I.globalZone.addModulators(...S)}}var Gs=class extends de{zoneStartIndex;zonesCount=0;constructor(A){super(),this.instrumentName=$(A.chunkData,20),this.zoneStartIndex=v(A.chunkData,2)}createZone(){let A=new Mn(this);return this.instrumentZones.push(A),A}};function Ms(e){let A=[];for(;e.chunkData.length>e.chunkData.currentIndex;){let t=new Gs(e);if(A.length>0){let n=A[A.length-1];n.zonesCount=t.zoneStartIndex-n.zoneStartIndex}A.push(t)}return A.pop(),A}function xn(e){let A=[];for(;e.chunkData.length>e.chunkData.currentIndex;){let t=e.chunkData,n=v(t,2),s=v(t,2),r=Pe(t[t.currentIndex++],t[t.currentIndex++]),i=v(t,2),a=v(t,2);A.push(new pA(n,i,s,r,a))}return A.pop(),A}function qt(e){let A=[],t=[];for(;e.chunkData.length>e.chunkData.currentIndex;)t.push(v(e.chunkData,2)),A.push(v(e.chunkData,2));return{mod:A,gen:t}}var Nn=class extends be{instruments=[];presets=[];constructor(A,t=!0){super(),t&&console.warn("Using the constructor directly is deprecated. Use loadSoundFont instead.");let n=new U(A);Ie("%cParsing SoundFont...",E.info),n||(q(),this.parsingError("No data provided!"));let s=AA(n,!1);this.verifyHeader(s,"riff");let r=$(n,4).toLowerCase();if(r!=="sfbk"&&r!=="sfpk")throw q(),new SyntaxError(`Invalid soundFont! Expected "sfbk" or "sfpk" got "${r}"`);let i=r==="sfpk",a=AA(n);this.verifyHeader(a,"list");let o=$(a.chunkData,4);if(o!=="INFO")throw q(),new SyntaxError(`Invalid soundFont! Expected "INFO" or "${o}"`);let I;for(;a.chunkData.length>a.chunkData.currentIndex;){let D=AA(a.chunkData),b;switch(D.header.toLowerCase()){case"ifil":case"iver":b=`${v(D.chunkData,2)}.${v(D.chunkData,2)}`,this.soundFontInfo[D.header]=b;break;case"icmt":b=$(D.chunkData,D.chunkData.length,void 0,!1),this.soundFontInfo[D.header]=b;break;case"dmod":let _=xn(D);b=`Modulators: ${_.length}`,this.defaultModulators=_,this.customDefaultModulators=!0,this.soundFontInfo[D.header]=b;break;case"list":$(D.chunkData,4)==="xdta"&&(y("%cExtended SF2 found!",E.recognized),I=D);break;default:b=$(D.chunkData,D.chunkData.length),this.soundFontInfo[D.header]=b}y(`%c"${D.header}": %c"${b}"`,E.info,E.recognized)}let l=I!==void 0,c={};l&&(c.phdr=AA(I.chunkData),c.pbag=AA(I.chunkData),c.pmod=AA(I.chunkData),c.pgen=AA(I.chunkData),c.inst=AA(I.chunkData),c.ibag=AA(I.chunkData),c.imod=AA(I.chunkData),c.igen=AA(I.chunkData),c.shdr=AA(I.chunkData));let h=AA(n,!1);this.verifyHeader(h,"list"),this.verifyText($(n,4),"sdta"),y("%cVerifying smpl chunk...",E.warn);let B=AA(n,!1);this.verifyHeader(B,"smpl");let u;if(i){y("%cSF2Pack detected, attempting to decode the smpl chunk...",E.info);try{u=Ee.decode(n.buffer.slice(n.currentIndex,n.currentIndex+h.size-12)).data[0]}catch(D){throw q(),new Error(`SF2Pack Ogg Vorbis decode error: ${D}`)}y(`%cDecoded the smpl chunk! Length: %c${u.length}`,E.info,E.value)}else u=n,this.sampleDataStartIndex=n.currentIndex;y(`%cSkipping sample chunk, length: %c${h.size-12}`,E.info,E.value),n.currentIndex+=h.size-12,y("%cLoading preset data chunk...",E.warn);let f=AA(n);this.verifyHeader(f,"list"),$(f.chunkData,4);let S=AA(f.chunkData);this.verifyHeader(S,"phdr");let G=AA(f.chunkData);this.verifyHeader(G,"pbag");let k=AA(f.chunkData);this.verifyHeader(k,"pmod");let F=AA(f.chunkData);this.verifyHeader(F,"pgen");let M=AA(f.chunkData);this.verifyHeader(M,"inst");let N=AA(f.chunkData);this.verifyHeader(N,"ibag");let C=AA(f.chunkData);this.verifyHeader(C,"imod");let j=AA(f.chunkData);this.verifyHeader(j,"igen");let T=AA(f.chunkData);this.verifyHeader(T,"shdr"),n.currentIndex=this.sampleDataStartIndex;let Y=ys(T,u,!l);if(l){let D=ys(c.shdr,new Float32Array(1),!1);D.length===Y.length&&Y.forEach((b,_)=>{b.sampleName+=D[_].sampleName,b.linkedSampleIndex|=D[_].linkedSampleIndex<<16})}Y.forEach(D=>D.sampleName=D.sampleName.trim()),this.samples.push(...Y);let iA=Fs(j),IA=xn(C),oA=Ms(M);if(l){let D=Ms(c.inst);D.length===oA.length&&(oA.forEach((b,_)=>{b.instrumentName+=D[_].instrumentName,b.zoneStartIndex|=D[_].zoneStartIndex}),oA.forEach((b,_)=>{_<oA.length-1&&(b.zonesCount=oA[_+1].zoneStartIndex-b.zoneStartIndex)}))}oA.forEach(D=>D.instrumentName=D.instrumentName.trim()),this.instruments.push(...oA);let gA=qt(N);if(l){let D=qt(c.ibag);for(let b=0;b<gA.mod.length;b++)gA.mod[b]|=D.mod[b]<<16;for(let b=0;b<gA.gen.length;b++)gA.gen[b]|=D.gen[b]<<16}Br(gA,iA,IA,this.samples,this.instruments);let uA=Fs(F),cA=xn(k),W=Rs(S,this);if(l){let D=Rs(c.phdr,this);D.length===W.length&&(W.forEach((b,_)=>{b.presetName+=D[_].presetName,b.zoneStartIndex|=D[_].zoneStartIndex}),W.forEach((b,_)=>{_<oA.length-1&&(b.zonesCount=W[_+1].zoneStartIndex-b.zoneStartIndex)}))}W.forEach(D=>D.presetName===D.presetName.trim()),this.addPresets(...W);let L=qt(G);if(l){let D=qt(c.pbag);for(let b=0;b<L.mod.length;b++)L.mod[b]|=D.mod[b]<<16;for(let b=0;b<L.gen.length;b++)L.gen[b]|=D.gen[b]<<16}lr(L,uA,cA,this.instruments,this.presets),this.flush(),y(`%cParsing finished! %c"${this.soundFontInfo.INAM}"%c has %c${this.presets.length} %cpresets,
|
|
17
|
+
%c${this.instruments.length}%c instruments and %c${this.samples.length}%c samples.`,E.info,E.recognized,E.info,E.recognized,E.info,E.recognized,E.info,E.recognized,E.info),q()}verifyHeader(A,t){A.header.toLowerCase()!==t.toLowerCase()&&(q(),this.parsingError(`Invalid chunk header! Expected "${t.toLowerCase()}" got "${A.header.toLowerCase()}"`))}verifyText(A,t){A.toLowerCase()!==t.toLowerCase()&&(q(),this.parsingError(`Invalid FourCC: Expected "${t.toLowerCase()}" got "${A.toLowerCase()}"\``))}};function nt(e){let A=e.slice(8,12),t=new U(A);return $(t,4,void 0,!1).toLowerCase()==="dls "?new Le(e):new Nn(e,!1)}function dr(){this.soundfontManager.soundfontList.some(e=>e.id===je)&&this.soundfontManager.deleteSoundFont(je)}function Qr(e,A){this.soundfontBankOffset=A;let t=nt(e);this.soundfontManager.addNewSoundFont(t,je,A);let n=this.soundfontManager.getCurrentSoundFontOrder();n.pop(),n.unshift(je),this.soundfontManager.rearrangeSoundFonts(n),this._snapshot!==void 0&&this.applySynthesizerSnapshot(this._snapshot),y(`%cEmbedded sound bank set at offset %c${A}`,E.recognized,E.value)}function fr(){let e=this.soundfontManager.getPresetList();this.clearCache(),this.callEvent("presetlistchange",e),this.getDefaultPresets(),this.midiAudioChannels.forEach(A=>{A.setPresetLock(!1)}),this.resetAllControllers(!1)}function ur(e,A=!1){this.transposition=0;for(let t=0;t<this.midiAudioChannels.length;t++)this.midiAudioChannels[t].transposeChannel(e,A);this.transposition=e}function mr(e){e=Math.round(e);for(let A=0;A<this.midiAudioChannels.length;A++)this.midiAudioChannels[A].setCustomController(tA.masterTuning,e)}var mt=class e{program;bank;isBankLSB;patchName;lockPreset;lockedSystem;midiControllers;lockedControllers;customControllers;lockVibrato;channelVibrato;channelTransposeKeyShift;channelOctaveTuning;isMuted;velocityOverride;drumChannel;static getChannelSnapshot(A,t){let n=A.midiAudioChannels[t],s=new e;return s.program=n.preset.program,s.bank=n.getBankSelect(),s.isBankLSB=s.bank!==n.bank,s.lockPreset=n.lockPreset,s.lockedSystem=n.lockedSystem,s.patchName=n.preset.presetName,s.midiControllers=n.midiControllers,s.lockedControllers=n.lockedControllers,s.customControllers=n.customControllers,s.channelVibrato=n.channelVibrato,s.lockVibrato=n.lockGSNRPNParams,s.channelTransposeKeyShift=n.channelTransposeKeyShift,s.channelOctaveTuning=n.channelOctaveTuning,s.isMuted=n.isMuted,s.velocityOverride=n.velocityOverride,s.drumChannel=n.drumChannel,s}static applyChannelSnapshot(A,t,n){let s=A.midiAudioChannels[t];s.muteChannel(n.isMuted),s.setDrums(n.drumChannel),s.midiControllers=n.midiControllers,s.lockedControllers=n.lockedControllers,s.customControllers=n.customControllers,s.updateChannelTuning(),s.channelVibrato=n.channelVibrato,s.lockGSNRPNParams=n.lockVibrato,s.channelTransposeKeyShift=n.channelTransposeKeyShift,s.channelOctaveTuning=n.channelOctaveTuning,s.velocityOverride=n.velocityOverride,s.setPresetLock(!1),s.setBankSelect(n.bank,n.isBankLSB),s.programChange(n.program),s.setPresetLock(n.lockPreset),s.lockedSystem=n.lockedSystem}};var st=class e{channelSnapshots;keyMappings;mainVolume;pan;interpolation;system;transposition;static createSynthesizerSnapshot(A){let t=new e;return t.channelSnapshots=A.midiAudioChannels.map((n,s)=>mt.getChannelSnapshot(A,s)),t.keyMappings=A.keyModifierManager.getMappings(),t.mainVolume=A.midiVolume,t.pan=A.pan,t.system=A.system,t.interpolation=A.interpolationType,t.transposition=A.transposition,t.effectsConfig={},t}static applySnapshot(A,t){for(A.setSystem(t.system),A.setMasterParameter(PA.mainVolume,t.mainVolume),A.setMasterParameter(PA.masterPan,t.pan),A.transposeAllChannels(t.transposition),A.interpolationType=t.interpolation,A.keyModifierManager.setMappings(t.keyMappings);A.midiAudioChannels.length<t.channelSnapshots.length;)A.createMidiChannel();t.channelSnapshots.forEach((n,s)=>{mt.applyChannelSnapshot(A,s,n)}),y("%cFinished restoring controllers!",E.info)}};function pr(e){this._snapshot=e,st.applySnapshot(this,e),y("%cFinished applying snapshot!",E.info),this.resetAllControllers()}function bn(e,A,t){if(t<e)return 0;let n=(t-e)/(1/A)+.25;return Math.abs(n-~~(n+.5))*4-1}var pt=class{static getSampleLinear(A,t){let n=A.sample,s=n.cursor,r=n.sampleData;if(n.isLooping){let i=n.loopEnd-n.loopStart;for(let a=0;a<t.length;a++){for(;s>=n.loopEnd;)s-=i;let o=~~s,I=o+1;for(;I>=n.loopEnd;)I-=i;let l=s-o,c=r[I],h=r[o];t[a]=h+(c-h)*l,s+=n.playbackStep*A.currentTuningCalculated}}else{if(n.loopingMode===2&&!A.isInRelease)return;for(let i=0;i<t.length;i++){let a=~~s,o=a+1;if(o>=n.end){A.finished=!0;return}let I=s-a,l=r[o],c=r[a];t[i]=c+(l-c)*I,s+=n.playbackStep*A.currentTuningCalculated}}A.sample.cursor=s}static getSampleNearest(A,t){let n=A.sample,s=n.cursor,r=n.loopEnd-n.loopStart,i=n.sampleData;if(A.sample.isLooping)for(let a=0;a<t.length;a++){for(;s>=n.loopEnd;)s-=r;let o=~~s+1;for(;o>=n.loopEnd;)o-=r;t[a]=i[o],s+=n.playbackStep*A.currentTuningCalculated}else{if(n.loopingMode===2&&!A.isInRelease)return;for(let a=0;a<t.length;a++){let o=~~s+1;if(o>=n.end){A.finished=!0;return}t[a]=i[o],s+=n.playbackStep*A.currentTuningCalculated}}n.cursor=s}static getSampleCubic(A,t){let n=A.sample,s=n.cursor,r=n.sampleData;if(n.isLooping){let i=n.loopEnd-n.loopStart;for(let a=0;a<t.length;a++){for(;s>=n.loopEnd;)s-=i;let o=~~s,I=o+1,l=I+1,c=l+1,h=s-o;I>=n.loopEnd&&(I-=i),l>=n.loopEnd&&(l-=i),c>=n.loopEnd&&(c-=i);let B=r[o],u=r[I],f=r[l],S=r[c],G=.5*(f-B),k=B-2.5*u+2*f-.5*S,F=.5*(S-B)+1.5*(u-f);t[a]=((F*h+k)*h+G)*h+u,s+=n.playbackStep*A.currentTuningCalculated}}else{if(n.loopingMode===2&&!A.isInRelease)return;for(let i=0;i<t.length;i++){let a=~~s,o=a+1,I=o+1,l=I+1,c=s-a;if(o>=n.end||I>=n.end||l>=n.end){A.finished=!0;return}let h=r[a],B=r[o],u=r[I],f=r[l],S=.5*(u-h),G=h-2.5*B+2*u-.5*f,k=.5*(f-h)+1.5*(B-u);t[i]=((k*c+G)*c+S)*c+B,s+=n.playbackStep*A.currentTuningCalculated}}A.sample.cursor=s}};function yr(e,A,t,n,s,r,i,a){if(e.isInRelease||A>=e.releaseStartTime&&(e.isInRelease=!0,le.startRelease(e),Be.startRelease(e),e.sample.loopingMode===3&&(e.sample.isLooping=!1)),e.modulatedGenerators[g.initialAttenuation]>2500)return e.isInRelease&&(e.finished=!0),e.finished;let o=e.targetKey,I=e.modulatedGenerators[g.fineTune]+this.channelOctaveTuning[e.midiNote]+this.channelTuningCents,l=e.modulatedGenerators[g.coarseTune],c=this.synth.tunings[this.preset.program]?.[e.realKey];if(c!==void 0&&c?.midiNote>=0&&(o=c.midiNote,I+=c.centTuning),e.portamentoFromKey>-1){let T=Math.min((A-e.startTime)/e.portamentoDuration,1),Y=o-e.portamentoFromKey;l-=Y*(1-T)}I+=(o-e.sample.rootKey)*e.modulatedGenerators[g.scaleTuning];let h=0,B=0,u=e.modulatedGenerators[g.vibLfoToPitch],f=e.modulatedGenerators[g.vibLfoToVolume],S=e.modulatedGenerators[g.vibLfoToFilterFc];if(u!==0||f!==0||S!==0){let T=e.startTime+he(e.modulatedGenerators[g.delayVibLFO]),Y=Yt(e.modulatedGenerators[g.freqVibLFO]),iA=bn(T,Y,A);I+=iA*(u*this.customControllers[tA.modulationMultiplier]),B+=-iA*f,h+=iA*S}let G=e.modulatedGenerators[g.modLfoToPitch],k=e.modulatedGenerators[g.modLfoToVolume],F=e.modulatedGenerators[g.modLfoToFilterFc];if(G!==0||F!==0||k!==0){let T=e.startTime+he(e.modulatedGenerators[g.delayModLFO]),Y=Yt(e.modulatedGenerators[g.freqModLFO]),iA=bn(T,Y,A);I+=iA*(G*this.customControllers[tA.modulationMultiplier]),B+=-iA*k,h+=iA*F}if(this.channelVibrato.depth>0){let T=bn(e.startTime+this.channelVibrato.delay,this.channelVibrato.rate,A);T&&(I+=T*this.channelVibrato.depth)}let M=e.modulatedGenerators[g.modEnvToPitch],N=e.modulatedGenerators[g.modEnvToFilterFc];if(N!==0||M!==0){let T=Be.getValue(e,A);h+=T*N,I+=T*M}let C=~~(I+l*100);C!==e.currentTuningCents&&(e.currentTuningCents=C,e.currentTuningCalculated=Math.pow(2,C/1200));let j=new Float32Array(t.length);switch(this.synth.interpolationType){case $e.fourthOrder:pt.getSampleCubic(e,j);break;case $e.linear:default:pt.getSampleLinear(e,j);break;case $e.nearestNeighbor:pt.getSampleNearest(e,j);break}return Je.apply(e,j,h,this.synth.filterSmoothingFactor),le.apply(e,j,B,this.synth.volumeEnvelopeSmoothingFactor),this.panVoice(e,j,t,n,s,r,i,a),e.finished}function Sr(e,A=-12e3){e+=this.customControllers[tA.channelKeyShift],this.voices.forEach(t=>{t.realKey===e&&(t.modulatedGenerators[g.releaseVolEnv]=A,t.release(this.synth.currentSynthTime))})}function Dr(e,A=!0){e=Math.round(e),this.setCustomController(tA.channelTuning,e),A&&y(`%cFine tuning for %c${this.channelNumber}%c is now set to %c${e}%c cents.`,E.info,E.recognized,E.info,E.value,E.info)}function kr(e){e=Math.round(e),y(`%cChannel ${this.channelNumber} modulation depth. Cents: %c${e}`,E.info,E.value),this.setCustomController(tA.modulationMultiplier,e/50)}var Te={pitchBendRange:0,fineTuning:1,coarseTuning:2,modulationDepth:5,resetParameters:16383},Ve={partParameter:1,awe32:127,SF2:120},yt={vibratoRate:8,vibratoDepth:9,vibratoDelay:10,TVFFilterCutoff:32,TVFFilterResonance:33,EGAttackTime:99,EGReleaseTime:102};function Fr(e){this.midiControllers[p.dataEntryMsb]=e<<7;let A=()=>{this.channelVibrato.delay===0&&this.channelVibrato.rate===0&&this.channelVibrato.depth===0&&(this.channelVibrato.depth=50,this.channelVibrato.rate=8,this.channelVibrato.delay=.6)},t=(n,s,r)=>{r.length>0&&(r=" "+r),y(`%c${n} for %c${this.channelNumber}%c is now set to %c${s}%c${r}.`,E.info,E.recognized,E.info,E.value,E.info)};switch(this.dataEntryState){default:case UA.Idle:break;case UA.NRPFine:if(this.lockGSNRPNParams)return;let n=this.midiControllers[p.NRPNMsb]>>7,s=this.midiControllers[p.NRPNLsb]>>7,r=this.midiControllers[p.lsbForControl6DataEntry]>>7;switch(n){default:if(e===64)return;J(`%cUnrecognized NRPN for %c${this.channelNumber}%c: %c(0x${s.toString(16).toUpperCase()} 0x${s.toString(16).toUpperCase()})%c data value: %c${e}`,E.warn,E.recognized,E.warn,E.unrecognized,E.warn,E.value);break;case Ve.partParameter:switch(s){default:if(e===64)return;J(`%cUnrecognized NRPN for %c${this.channelNumber}%c: %c(0x${n.toString(16)} 0x${s.toString(16)})%c data value: %c${e}`,E.warn,E.recognized,E.warn,E.unrecognized,E.warn,E.value);break;case yt.vibratoRate:if(e===64)return;A(),this.channelVibrato.rate=e/64*8,t("Vibrato rate",`${e} = ${this.channelVibrato.rate}`,"Hz");break;case yt.vibratoDepth:if(e===64)return;A(),this.channelVibrato.depth=e/2,t("Vibrato depth",`${e} = ${this.channelVibrato.depth}`,"cents of detune");break;case yt.vibratoDelay:if(e===64)return;A(),this.channelVibrato.delay=e/64/3,t("Vibrato delay",`${e} = ${this.channelVibrato.delay}`,"seconds");break;case yt.TVFFilterCutoff:this.controllerChange(p.brightness,e),t("Filter cutoff",e.toString(),"");break;case yt.EGAttackTime:this.controllerChange(p.attackTime,e),t("EG attack time",e.toString(),"");break;case yt.EGReleaseTime:this.controllerChange(p.releaseTime,e),t("EG release time",e.toString(),"");break}break;case Ve.awe32:break;case Ve.SF2:if(s>100)break;let a=this.customControllers[tA.sf2NPRNGeneratorLSB],o=(e<<7|r)-8192;this.setGeneratorOffset(a,o);break}break;case UA.RPCoarse:case UA.RPFine:let i=this.midiControllers[p.RPNMsb]|this.midiControllers[p.RPNLsb]>>7;switch(i){default:J(`%cUnrecognized RPN for %c${this.channelNumber}%c: %c(0x${i.toString(16)})%c data value: %c${e}`,E.warn,E.recognized,E.warn,E.unrecognized,E.warn,E.value);break;case Te.pitchBendRange:this.midiControllers[hA+X.pitchWheelRange]=e<<7,t("Pitch bend range",e.toString(),"semitones");break;case Te.coarseTuning:let a=e-64;this.setCustomController(tA.channelTuningSemitones,a),t("Coarse tuning",a.toString(),"semitones");break;case Te.fineTuning:this.setTuning(e-64,!1);break;case Te.modulationDepth:this.setModulationDepth(e*100);break;case Te.resetParameters:this.resetParameters();break}}}var Zi=[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];function wr(e,A,t){let n=(h,B,u)=>Math.max(B,Math.min(u,h)),s=h=>Math.max(-32768,1200*Math.log2(h/1e3)),r=h=>6900+1200*Math.log2(h/440),i=t<<7|A;i-=8192;let a=Zi[e];a||J(`Invalid AWE32 LSB: %c${e}`,E.unrecognized);let o,I,l,c;switch(a){default:break;case g.delayModLFO:case g.delayVibLFO:case g.delayVolEnv:case g.delayModEnv:o=4*n(i,0,5900),this.setGeneratorOverride(a,s(o));break;case g.attackVolEnv:case g.attackModEnv:o=n(i,0,5940),this.setGeneratorOverride(a,s(o));break;case g.holdVolEnv:case g.holdModEnv:o=n(i,0,8191),this.setGeneratorOverride(a,s(o));break;case g.decayModEnv:case g.decayVolEnv:case g.releaseVolEnv:case g.releaseModEnv:o=4*n(i,0,5940),this.setGeneratorOverride(a,s(o));break;case g.freqVibLFO:case g.freqModLFO:I=.084*A,this.setGeneratorOverride(a,r(I),!0);break;case g.sustainVolEnv:case g.sustainModEnv:l=A*7.5,this.setGeneratorOverride(a,l);break;case g.fineTune:this.setGeneratorOverride(a,i,!0);break;case g.modLfoToPitch:case g.vibLfoToPitch:c=n(i,-127,127)*9.375,this.setGeneratorOverride(a,c,!0);break;case g.modEnvToPitch:c=n(i,-127,127)*9.375,this.setGeneratorOverride(a,c);break;case g.modLfoToVolume:l=1.875*A,this.setGeneratorOverride(a,l,!0);break;case g.initialFilterFc:let h=4335+59*A;this.setGeneratorOverride(a,h,!0);break;case g.initialFilterQ:l=215*(A/127),this.setGeneratorOverride(a,l,!0);break;case g.modLfoToFilterFc:c=n(i,-64,63)*56.25,this.setGeneratorOverride(a,c,!0);break;case g.modEnvToFilterFc:c=n(i,-64,63)*56.25,this.setGeneratorOverride(a,c);break;case g.chorusEffectsSend:case g.reverbEffectsSend:this.setGeneratorOverride(a,n(i,0,255)*(1e3/255));break}}function Rr(e){switch(this.midiControllers[p.lsbForControl6DataEntry]=e<<7,this.dataEntryState){default:break;case UA.RPCoarse:case UA.RPFine:switch(this.midiControllers[p.RPNMsb]|this.midiControllers[p.RPNLsb]>>7){default:break;case Te.pitchBendRange:if(e===0)break;this.midiControllers[hA+X.pitchWheelRange]|=e;let s=(this.midiControllers[hA+X.pitchWheelRange]>>7)+e/128;y(`%cChannel ${this.channelNumber} bend range. Semitones: %c${s}`,E.info,E.value);break;case Te.fineTuning:let i=this.customControllers[tA.channelTuning]<<7|e;this.setTuning(i*.01220703125);break;case Te.modulationDepth:let o=this.customControllers[tA.modulationMultiplier]*50+e/128*100;this.setModulationDepth(o);break;case 16383:this.resetParameters();break}break;case UA.NRPFine:let t=this.midiControllers[p.NRPNMsb]>>7,n=this.midiControllers[p.NRPNLsb]>>7;if(t===Ve.SF2)return;switch(t){default:J(`%cUnrecognized NRPN LSB for %c${this.channelNumber}%c: %c(0x${n.toString(16).toUpperCase()} 0x${n.toString(16).toUpperCase()})%c data value: %c${e}`,E.warn,E.recognized,E.warn,E.unrecognized,E.warn,E.value);break;case Ve.awe32:wr.call(this,n,e,this.midiControllers[p.dataEntryMsb]>>7);break}}}function Gr(e,A,t=!1){if(e>127){if(!t)return;switch(e){default:return;case hs.velocityOverride:this.velocityOverride=A}}if(e>=p.lsbForControl1ModulationWheel&&e<=p.lsbForControl13EffectControl2&&e!==p.lsbForControl6DataEntry){let n=e-32;if(this.lockedControllers[n])return;this.midiControllers[n]=this.midiControllers[n]&16256|A&127,this.voices.forEach(s=>this.computeModulators(s,1,n))}if(!this.lockedControllers[e]){switch(this.midiControllers[e]=A<<7,e){case p.allNotesOff:this.stopAllNotes();break;case p.allSoundOff:this.stopAllNotes(!0);break;case p.bankSelect:this.setBankSelect(A);break;case p.lsbForControl0BankSelect:this.setBankSelect(A,!0);break;case p.RPNLsb:this.dataEntryState=UA.RPFine;break;case p.RPNMsb:this.dataEntryState=UA.RPCoarse;break;case p.NRPNMsb:this.customControllers[tA.sf2NPRNGeneratorLSB]=0,this.dataEntryState=UA.NRPCoarse;break;case p.NRPNLsb:this.midiControllers[p.NRPNMsb]>>7===Ve.SF2&&(this.customControllers[tA.sf2NPRNGeneratorLSB]%100!==0&&(this.customControllers[tA.sf2NPRNGeneratorLSB]=0),A===100?this.customControllers[tA.sf2NPRNGeneratorLSB]+=100:A===101?this.customControllers[tA.sf2NPRNGeneratorLSB]+=1e3:A===102?this.customControllers[tA.sf2NPRNGeneratorLSB]+=1e4:A<100&&(this.customControllers[tA.sf2NPRNGeneratorLSB]+=A)),this.dataEntryState=UA.NRPFine;break;case p.dataEntryMsb:this.dataEntryCoarse(A);break;case p.lsbForControl6DataEntry:this.dataEntryFine(A);break;case p.resetAllControllers:this.resetControllersRP15Compliant();break;case p.sustainPedal:A>=64?this.holdPedal=!0:(this.holdPedal=!1,this.sustainedVoices.forEach(n=>{n.release(this.synth.currentSynthTime)}),this.sustainedVoices=[]);break;default:this.voices.forEach(n=>this.computeModulators(n,1,e));break}this.synth.callEvent("controllerchange",{channel:this.channelNumber,controllerNumber:e,controllerValue:A})}}function Mr(e=!1){e?(this.voices.length=0,this.sustainedVoices.length=0,this.sendChannelProperty()):(this.voices.forEach(A=>{A.isInRelease||A.release(this.synth.currentSynthTime)}),this.sustainedVoices.forEach(A=>{A.release(this.synth.currentSynthTime)}))}function xr(e){e&&this.stopAllNotes(!0),this.isMuted=e,this.sendChannelProperty(),this.synth.callEvent("mutechannel",{channel:this.channelNumber,isMuted:e})}function Nr(e,A=!1){this.drumChannel||(e+=this.synth.transposition);let t=Math.trunc(e),n=this.channelTransposeKeyShift+this.customControllers[tA.channelTransposeFine]/100;this.drumChannel&&!A||e===n||(t!==this.channelTransposeKeyShift&&this.controllerChange(p.allNotesOff,127),this.channelTransposeKeyShift=t,this.setCustomController(tA.channelTransposeFine,(e-t)*100),this.sendChannelProperty())}var Vt={0:0,1:.006,2:.023,4:.05,8:.11,16:.25,32:.5,64:2.06,80:4.2,96:8.4,112:19.5,116:26.7,120:40,124:80,127:480};function Xi(e){if(Vt[e]!==void 0)return Vt[e];let A=null,t=null;for(let n of Object.keys(Vt))n=parseInt(n),n<e&&(A===null||n>A)&&(A=n),n>e&&(t===null||n<t)&&(t=n);if(A!==null&&t!==null){let n=Vt[A],s=Vt[t];return n+(e-A)*(s-n)/(t-A)}return 0}function br(e,A){return Xi(e)*(A/30)}function Lr(e,A){if(A<1){this.noteOff(e);return}if(A=Math.min(127,A),this.synth.highPerformanceMode&&this.synth.totalVoicesAmount>200&&A<40||this.synth.highPerformanceMode&&A<10||this.isMuted)return;let t=e+this.channelTransposeKeyShift+this.customControllers[tA.channelKeyShift],n=t;if(t>127||t<0)return;let s=this.preset.program,r=this.synth.tunings[s]?.[t]?.midiNote;r>=0&&(n=r),this.velocityOverride>0&&(A=this.velocityOverride);let i=this.synth.keyModifierManager.getVelocity(this.channelNumber,t);i>-1&&(A=i);let a=this.synth.keyModifierManager.getGain(this.channelNumber,t),o=-1,I=0,l=this.midiControllers[p.portamentoTime]>>7,c=this.midiControllers[p.portamentoControl],h=c>>7;if(!this.drumChannel&&h!==n&&this.midiControllers[p.portamentoOnOff]>=8192&&l>0){if(c!==1){let S=Math.abs(n-h);I=br(l,S),o=h}this.controllerChange(p.portamentoControl,n)}let B=this.synth.getVoices(this.channelNumber,n,A,t),u=0;this.randomPan&&(u=Math.round(Math.random()*1e3-500));let f=this.voices;B.forEach(S=>{S.portamentoFromKey=o,S.portamentoDuration=I,S.overridePan=u,S.gain=a,this.sysExModulators.modulatorList.forEach(T=>{let Y=T.mod,iA=S.modulators.findIndex(IA=>CA.isIdentical(IA,Y));iA!==-1?S.modulators[iA]=CA.copy(Y):S.modulators.push(CA.copy(Y))}),this.generatorOverridesEnabled&&this.generatorOverrides.forEach((T,Y)=>{T!==gn&&(S.generators[Y]=T)});let G=S.exclusiveClass;G!==0&&f.forEach(T=>{T.exclusiveClass===G&&T.exclusiveRelease(this.synth.currentSynthTime)}),this.computeModulators(S);let k=S.modulatedGenerators[g.startAddrsOffset]+S.modulatedGenerators[g.startAddrsCoarseOffset]*32768,F=S.modulatedGenerators[g.endAddrOffset]+S.modulatedGenerators[g.endAddrsCoarseOffset]*32768,M=S.modulatedGenerators[g.startloopAddrsOffset]+S.modulatedGenerators[g.startloopAddrsCoarseOffset]*32768,N=S.modulatedGenerators[g.endloopAddrsOffset]+S.modulatedGenerators[g.endloopAddrsCoarseOffset]*32768,C=S.sample,j=T=>Math.max(0,Math.min(C.sampleData.length-1,T));if(C.cursor=j(C.cursor+k),C.end=j(C.end+F),C.loopStart=j(C.loopStart+M),C.loopEnd=j(C.loopEnd+N),C.loopEnd<C.loopStart){let T=C.loopStart;C.loopStart=C.loopEnd,C.loopEnd=T}C.loopEnd-C.loopStart<1&&(C.loopingMode=0,C.isLooping=!1),S.volumeEnvelope.attenuation=S.volumeEnvelope.attenuationTargetGain,S.currentPan=Math.max(-500,Math.min(500,S.modulatedGenerators[g.pan]))}),this.synth.totalVoicesAmount+=B.length,this.synth.totalVoicesAmount>this.synth.voiceCap&&this.synth.voiceKilling(B.length),f.push(...B),this.sendChannelProperty(),this.synth.callEvent("noteon",{midiNote:e,channel:this.channelNumber,velocity:A})}function Tr(e){if(e>127||e<0){J("Received a noteOn for note",e,"Ignoring.");return}let A=e+this.channelTransposeKeyShift+this.customControllers[tA.channelKeyShift];if(this.synth.highPerformanceMode&&!this.drumChannel){this.killNote(A,-6950),this.synth.callEvent("noteoff",{midiNote:e,channel:this.channelNumber});return}this.voices.forEach(n=>{n.realKey!==A||n.isInRelease===!0||(this.holdPedal?this.sustainedVoices.push(n):n.release(this.synth.currentSynthTime))}),this.synth.callEvent("noteoff",{midiNote:e,channel:this.channelNumber})}function Ur(e,A){this.voices.forEach(t=>{t.midiNote===e&&(t.pressure=A,this.computeModulators(t,0,X.polyPressure))}),this.synth.callEvent("polypressure",{channel:this.channelNumber,midiNote:e,pressure:A})}function vr(e){this.midiControllers[hA+X.channelPressure]=e<<7,this.updateChannelTuning(),this.voices.forEach(A=>this.computeModulators(A,0,X.channelPressure)),this.synth.callEvent("channelpressure",{channel:this.channelNumber,pressure:e})}function Hr(e,A){if(this.lockedControllers[hA+X.pitchWheel])return;let t=A|e<<7;this.synth.callEvent("pitchwheel",{channel:this.channelNumber,MSB:e,LSB:A}),this.midiControllers[hA+X.pitchWheel]=t,this.voices.forEach(n=>this.computeModulators(n,0,X.pitchWheel)),this.sendChannelProperty()}function Yr(e){if(e.length!==12)throw new Error("Tuning is not the length of 12.");this.channelOctaveTuning=new Int8Array(128);for(let A=0;A<128;A++)this.channelOctaveTuning[A]=e[A%12]}function Or(e){if(this.lockPreset)return;let A=this.getBankSelect(),t=this.isXGChannel,n=this.synth.soundfontManager.getPreset(A,e,t),s=n.preset;this.setPreset(s),this.sentBank=Math.min(128,s.bank+n.bankOffset),this.synth.callEvent("programchange",{channel:this.channelNumber,program:s.program,bank:this.sentBank}),this.sendChannelProperty()}var Ln=class{modulatorList=[];resetModulators(){this.modulatorList=[]}_getModulatorId(A,t,n,s){return`${A}-${t}-${n}-${s}`}_deleteModulator(A){this.modulatorList=this.modulatorList.filter(t=>t.id!==A)}setModulator(A,t,n,s=!1,r=!1){let i=this._getModulatorId(A,t,s,r);n===0&&this._deleteModulator(i);let a=this.modulatorList.find(o=>o.id===i);if(a)a.mod.transformAmount=n;else{let o,I;A>=hA?(o=A-hA,I=!1):(o=A,I=!0);let l=new CA(o,kA.linear,I?1:0,s?1:0,0,X.noController,kA.linear,0,0,0,t,n,0);this.modulatorList.push({mod:l,id:i})}}};var Wi=1e3/200;function Jr(e,A,t){if(A.transformAmount===0)return A.currentValue=0,0;let n;if(A.sourceUsesCC)n=e[A.sourceIndex];else{let I=A.sourceIndex+hA;switch(A.sourceIndex){case X.noController:n=16383;break;case X.noteOnKeyNum:n=t.midiNote<<7;break;case X.noteOnVelocity:n=t.velocity<<7;break;case X.polyPressure:n=t.pressure<<7;break;default:n=e[I];break}}let s=ot[A.sourceCurveType][A.sourcePolarity][A.sourceDirection][n],r;if(A.secSrcUsesCC)r=e[A.secSrcIndex];else{let I=A.secSrcIndex+hA;switch(A.secSrcIndex){case X.noController:r=16383;break;case X.noteOnKeyNum:r=t.midiNote<<7;break;case X.noteOnVelocity:r=t.velocity<<7;break;case X.polyPressure:r=t.pressure<<7;break;default:r=e[I]}}let i=ot[A.secSrcCurveType][A.secSrcPolarity][A.secSrcDirection][r],a=A.transformAmount;A.isEffectModulator&&a<=1e3&&(a*=Wi,a=Math.min(a,1e3));let o=s*i*a;return A.transformType===2&&(o=Math.abs(o)),A.currentValue=o,o}function Pr(e,A=-1,t=0){let n=e.modulators,s=e.generators;if(this.generatorOffsetsEnabled){s=new Int16Array(s);for(let o=0;o<s.length;o++)s[o]+=this.generatorOffsets[o]}let r=e.modulatedGenerators;if(A===-1){r.set(s),n.forEach(o=>{r[o.modulatorDestination]+=Jr(this.midiControllers,o,e)});for(let o=0;o<r.length;o++){let I=V[o];I&&(r[o]=Math.min(I.max,Math.max(I.min,r[o])))}le.recalculate(e),Be.recalculate(e);return}let i=new Set([g.initialAttenuation,g.delayVolEnv,g.attackVolEnv,g.holdVolEnv,g.decayVolEnv,g.sustainVolEnv,g.releaseVolEnv,g.keyNumToVolEnvHold,g.keyNumToVolEnvDecay]),a=new Set;n.forEach(o=>{if(o.sourceUsesCC===A&&o.sourceIndex===t||o.secSrcUsesCC===A&&o.secSrcIndex===t){let I=o.modulatorDestination;if(!a.has(I)){r[I]=s[I],Jr(this.midiControllers,o,e),n.forEach(c=>{c.modulatorDestination===I&&(r[I]+=c.currentValue)});let l=V[I];r[I]=Math.max(l.min,Math.min(r[I],l.max)),a.add(I)}}}),[...a].some(o=>i.has(o))&&le.recalculate(e),Be.recalculate(e)}var ot=[];for(let e=0;e<4;e++){ot[e]=[[new Float32Array(NA),new Float32Array(NA)],[new Float32Array(NA),new Float32Array(NA)]];for(let A=0;A<NA;A++)ot[e][0][0][A]=et(0,e,A/NA,0),ot[e][1][0][A]=et(0,e,A/NA,1),ot[e][0][1][A]=et(1,e,A/NA,0),ot[e][1][1][A]=et(1,e,A/NA,1)}var yA=class{midiControllers=new Int16Array(Cn);lockedControllers=Array(Cn).fill(!1);customControllers=new Float32Array(cs);channelTransposeKeyShift=0;channelOctaveTuning=new Int8Array(128);channelTuningCents=0;sysExModulators=new Ln;generatorOffsets=new Int16Array(Ot);generatorOffsetsEnabled=!1;generatorOverrides=new Int16Array(Ot);generatorOverridesEnabled=!1;holdPedal=!1;drumChannel=!1;velocityOverride=0;randomPan=!1;dataEntryState=UA.Idle;bank=0;sentBank=0;bankLSB=0;preset=void 0;lockPreset=!1;lockedSystem="gs";lockGSNRPNParams=!1;channelVibrato={delay:0,depth:0,rate:0};isMuted=!1;voices=[];sustainedVoices=[];channelNumber;synth;constructor(A,t,n){this.synth=A,this.preset=t,this.channelNumber=n,this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}get isXGChannel(){return GA(this.synth.system)||this.lockPreset&&GA(this.lockedSystem)}setCustomController(A,t){this.customControllers[A]=t,this.updateChannelTuning()}updateChannelTuning(){this.channelTuningCents=this.customControllers[tA.channelTuning]+this.customControllers[tA.channelTransposeFine]+this.customControllers[tA.masterTuning]+this.customControllers[tA.channelTuningSemitones]*100}renderAudio(A,t,n,s,r,i){this.voices=this.voices.filter(a=>!this.renderVoice(a,this.synth.currentSynthTime,A,t,n,s,r,i))}setPresetLock(A){this.lockPreset=A,A&&(this.lockedSystem=this.synth.system)}setBankSelect(A,t=!1){if(!this.lockPreset)if(t)this.bankLSB=A;else switch(this.bank=A,Qt(this.getBankSelect(),A,this.synth.system,!1,this.drumChannel,this.channelNumber).drumsStatus){default:case 0:break;case 1:this.channelNumber%16===9&&(this.bank=127);break;case 2:this.setDrums(!0);break}}getBankSelect(){return ft(this.bank,this.bankLSB,this.drumChannel,this.isXGChannel)}setPreset(A){this.lockPreset||(delete this.preset,this.preset=A)}setDrums(A){this.lockPreset||this.drumChannel!==A&&(A?(this.channelTransposeKeyShift=0,this.drumChannel=!0):this.drumChannel=!1,this.synth.callEvent("drumchange",{channel:this.channelNumber,isDrumChannel:this.drumChannel}),this.programChange(this.preset.program),this.sendChannelProperty())}setVibrato(A,t,n){this.lockGSNRPNParams||(this.channelVibrato.rate=t,this.channelVibrato.delay=n,this.channelVibrato.depth=A)}disableAndLockGSNRPN(){this.lockGSNRPNParams=!0,this.channelVibrato.rate=0,this.channelVibrato.delay=0,this.channelVibrato.depth=0}sendChannelProperty(){if(!this.synth.enableEventSystem)return;let A={voicesAmount:this.voices.length,pitchBend:this.midiControllers[hA+X.pitchWheel],pitchBendRangeSemitones:this.midiControllers[hA+X.pitchWheelRange]/128,isMuted:this.isMuted,isDrum:this.drumChannel,transposition:this.channelTransposeKeyShift+this.customControllers[tA.channelTransposeFine]/100,bank:this.sentBank,program:this.preset.program};this.synth?.onChannelPropertyChange?.(A,this.channelNumber)}resetGeneratorOverrides(){this.generatorOverrides.fill(gn),this.generatorOverridesEnabled=!1}setGeneratorOverride(A,t,n=!1){this.generatorOverrides[A]=t,this.generatorOverridesEnabled=!0,n&&this.voices.forEach(s=>{s.generators[A]=t,this.computeModulators(s)})}resetGeneratorOffsets(){this.generatorOffsets.fill(0),this.generatorOffsetsEnabled=!1}setGeneratorOffset(A,t){this.generatorOffsets[A]=t*V[A].nrpn,this.generatorOffsetsEnabled=!0,this.voices.forEach(n=>{this.computeModulators(n)})}};yA.prototype.renderVoice=yr;yA.prototype.panVoice=Go;yA.prototype.killNote=Sr;yA.prototype.stopAllNotes=Mr;yA.prototype.muteChannel=xr;yA.prototype.computeModulators=Pr;yA.prototype.noteOn=Lr;yA.prototype.noteOff=Tr;yA.prototype.polyPressure=Ur;yA.prototype.channelPressure=vr;yA.prototype.pitchWheel=Hr;yA.prototype.programChange=Or;yA.prototype.setTuning=Dr;yA.prototype.setOctaveTuning=Yr;yA.prototype.setModulationDepth=kr;yA.prototype.transposeChannel=Nr;yA.prototype.controllerChange=Gr;yA.prototype.resetControllers=lo;yA.prototype.resetControllersRP15Compliant=Bo;yA.prototype.resetParameters=Qo;yA.prototype.dataEntryFine=Rr;yA.prototype.dataEntryCoarse=Fr;function Kr(e=!1){let A=new yA(this,this.defaultPreset,this.midiAudioChannels.length);this.midiAudioChannels.push(A),e&&(this.callEvent("newchannel",void 0),A.sendChannelProperty(),this.midiAudioChannels[this.midiAudioChannels.length-1].setDrums(!0))}var xs={enableEventSystem:!0,initialTime:0,effectsEnabled:!0,midiChannels:16};var _i={time:0},yo=.03,So=.07,gs=1,bA=class{cachedVoices=[];deviceID=-1;eventQueue=[];interpolationType=$e.fourthOrder;transposition=0;tunings=[];soundfontBankOffset=0;masterGain=gs;midiVolume=1;reverbGain=1;chorusGain=1;reverbSend=1;chorusSend=1;voiceCap=350;pan=0;panLeft=.5;panRight=.5;highPerformanceMode=!1;keyModifierManager=new ln;midiAudioChannels=[];system=Ht;totalVoicesAmount=0;defaultPreset;drumPreset;processorInitialized=Ee.isInitialized;currentSynthTime=0;sampleRate;sampleTime;effectsEnabled;_snapshot;onEventCall;onChannelPropertyChange;onMasterParameterChange;constructor(A,t=xs){t=fn(t,xs),this.midiOutputsCount=t.midiChannels,this.effectsEnabled=t.effectsEnabled,this.enableEventSystem=t.enableEventSystem,this.currentSynthTime=t.initialTime,this.sampleTime=1/A,this.sampleRate=A,this.volumeEnvelopeSmoothingFactor=oo*(44100/A),this.panSmoothingFactor=ko*(44100/A),this.filterSmoothingFactor=fo*(44100/A);for(let n=0;n<128;n++)this.tunings.push([]);this.soundfontManager=new ut(this.updatePresetList.bind(this));for(let n=0;n<this.midiOutputsCount;n++)this.createMidiChannel(!1);this.processorInitialized.then(()=>{y("%cSpessaSynth is ready!",E.recognized)})}get currentGain(){return this.masterGain*this.midiVolume}getDefaultPresets(){let A=this.system;this.system="xg",this.defaultPreset=this.getPreset(0,0),this.system=A,this.drumPreset=this.getPreset(128,0)}setSystem(A){this.system=A,this?.onMasterParameterChange?.(PA.midiSystem,this.system)}getCachedVoice(A,t,n,s){return this.cachedVoices?.[A]?.[t]?.[n]?.[s]}setCachedVoice(A,t,n,s,r){this.cachedVoices[A]||(this.cachedVoices[A]=[]),this.cachedVoices[A][t]||(this.cachedVoices[A][t]=[]),this.cachedVoices[A][t][n]||(this.cachedVoices[A][t][n]=[]),this.cachedVoices[A][t][n][s]=r}renderAudio(A,t,n){this.renderAudioSplit(t,n,Array(16).fill(A))}renderAudioSplit(A,t,n){let s=this.currentSynthTime;for(;this.eventQueue[0]?.time<=s;)this.eventQueue.shift().callback();let r=A[0],i=A[1],a=t[0],o=t[1];this.totalVoicesAmount=0,this.midiAudioChannels.forEach((I,l)=>{if(I.voices.length<1||I.isMuted)return;let c=I.voices.length,h=l%16;I.renderAudio(n[h][0],n[h][1],r,i,a,o),this.totalVoicesAmount+=I.voices.length,I.voices.length!==c&&I.sendChannelProperty()}),this.currentSynthTime+=n[0][0].length*this.sampleTime}destroySynthProcessor(){this.midiAudioChannels.forEach(A=>{delete A.midiControllers,delete A.voices,delete A.sustainedVoices,delete A.lockedControllers,delete A.preset,delete A.customControllers}),delete this.cachedVoices,delete this.midiAudioChannels,this.soundfontManager.destroyManager(),delete this.soundfontManager}controllerChange(A,t,n,s=!1){this.midiAudioChannels[A].controllerChange(t,n,s)}noteOn(A,t,n){this.midiAudioChannels[A].noteOn(t,n)}noteOff(A,t){this.midiAudioChannels[A].noteOff(t)}polyPressure(A,t,n){this.midiAudioChannels[A].polyPressure(t,n)}channelPressure(A,t){this.midiAudioChannels[A].channelPressure(t)}pitchWheel(A,t,n){this.midiAudioChannels[A].pitchWheel(t,n)}programChange(A,t){this.midiAudioChannels[A].programChange(t)}processMessage(A,t=0,n=!1,s=_i){let r=()=>{let a=dt(A[0]),o=a.channel+t;switch(a.status){case R.noteOn:let I=A[2];I>0?this.noteOn(o,A[1],I):this.noteOff(o,A[1]);break;case R.noteOff:n?this.midiAudioChannels[o].killNote(A[1]):this.noteOff(o,A[1]);break;case R.pitchBend:this.pitchWheel(o,A[2],A[1]);break;case R.controllerChange:this.controllerChange(o,A[1],A[2],n);break;case R.programChange:this.programChange(o,A[1]);break;case R.polyPressure:this.polyPressure(o,A[0],A[1]);break;case R.channelPressure:this.channelPressure(o,A[1]);break;case R.systemExclusive:this.systemExclusive(new U(A.slice(1)),t);break;case R.reset:this.stopAllChannels(!0),this.resetAllControllers();break;default:break}},i=s.time;i>this.currentSynthTime?(this.eventQueue.push({callback:r.bind(this),time:i}),this.eventQueue.sort((a,o)=>a.time-o.time)):r()}setMIDIVolume(A){this.midiVolume=Math.pow(A,Math.E),this.setMasterParameter(PA.masterPan,this.pan)}callEvent(A,t){this?.onEventCall?.(A,t)}clearCache(){this.cachedVoices=[]}getPreset(A,t){return this.soundfontManager.getPreset(A,t,GA(this.system)).preset}};bA.prototype.voiceKilling=Ao;bA.prototype.getVoicesForPreset=mo;bA.prototype.getVoices=po;bA.prototype.systemExclusive=Co;bA.prototype.stopAllChannels=Mo;bA.prototype.createMidiChannel=Kr;bA.prototype.resetAllControllers=ho;bA.prototype.setMasterParameter=Io;bA.prototype.transposeAllChannels=ur;bA.prototype.setMasterTuning=mr;bA.prototype.clearEmbeddedBank=dr;bA.prototype.setEmbeddedSoundFont=Qr;bA.prototype.updatePresetList=fr;bA.prototype.applySynthesizerSnapshot=pr;function KA(e,A){let t=0;for(let n=8*(A-1);n>=0;n-=8)t|=e[e.currentIndex++]<<n;return t>>>0}function Zt(e,A){let t=new Array(A).fill(0);for(let n=A-1;n>=0;n--)t[n]=e&255,e>>=8;return t}function Vr(e,A){if(this.sendMIDIMessages&&e.messageStatusByte>=128){this.sendMIDIMessage([e.messageStatusByte,...e.messageData]);return}let t=dt(e.messageStatusByte),n=this.midiPortChannelOffsets[this.midiPorts[A]]||0;switch(t.channel+=n,t.status){case R.noteOn:let s=e.messageData[1];if(s>0)this.synth.noteOn(t.channel,e.messageData[0],s),this.playingNotes.push({midiNote:e.messageData[0],channel:t.channel,velocity:s});else{this.synth.noteOff(t.channel,e.messageData[0]);let a=this.playingNotes.findIndex(o=>o.midiNote===e.messageData[0]&&o.channel===t.channel);a!==-1&&this.playingNotes.splice(a,1)}break;case R.noteOff:this.synth.noteOff(t.channel,e.messageData[0]);let r=this.playingNotes.findIndex(a=>a.midiNote===e.messageData[0]&&a.channel===t.channel);r!==-1&&this.playingNotes.splice(r,1);break;case R.pitchBend:this.synth.pitchWheel(t.channel,e.messageData[1],e.messageData[0]);break;case R.controllerChange:if(this.midiData.isMultiPort&&this.midiData.usedChannelsOnTrack[A].size===0)return;this.synth.controllerChange(t.channel,e.messageData[0],e.messageData[1]);break;case R.programChange:if(this.midiData.isMultiPort&&this.midiData.usedChannelsOnTrack[A].size===0)return;this.synth.programChange(t.channel,e.messageData[0]);break;case R.polyPressure:this.synth.polyPressure(t.channel,e.messageData[0],e.messageData[1]);break;case R.channelPressure:this.synth.channelPressure(t.channel,e.messageData[0]);break;case R.systemExclusive:this.synth.systemExclusive(e.messageData,n);break;case R.setTempo:e.messageData.currentIndex=0;let i=6e7/KA(e.messageData,3);this.oneTickToSeconds=60/(i*this.midiData.timeDivision),this.oneTickToSeconds===0&&(this.oneTickToSeconds=60/(120*this.midiData.timeDivision),J("invalid tempo! falling back to 120 BPM"),i=120);break;case R.timeSignature:case R.endOfTrack:case R.midiChannelPrefix:case R.songPosition:case R.activeSensing:case R.keySignature:case R.sequenceNumber:case R.sequenceSpecific:case R.text:case R.lyric:case R.copyright:case R.trackName:case R.marker:case R.cuePoint:case R.instrumentName:case R.programName:break;case R.midiPort:this.assignMIDIPort(A,e.messageData[0]);break;case R.reset:this.synth.stopAllChannels(),this.synth.resetAllControllers();break;default:J(`%cUnrecognized Event: %c${e.messageStatusByte}%c status byte: %c${Object.keys(R).find(a=>R[a]===t.status)}`,E.warn,E.unrecognized,E.warn,E.value);break}t.status>=0&&t.status<128&&this?.onMetaEvent?.(e,A)}function Zr(){for(let e=0;e<16;e++)this.synth.createMidiChannel(!0)}function Xr(){if(!this.isActive)return;let e=this.currentTime;for(;this.playedTime<e;){let A=this._findFirstEventIndex(),t=this.tracks[A][this.eventIndex[A]];if(this._processEvent(t,A),this.eventIndex[A]++,A=this._findFirstEventIndex(),this.tracks[A].length<=this.eventIndex[A]){if(this.loop){this.setTimeTicks(this.midiData.loop.start);return}this.eventIndex[A]--,this.pause(!0),this.songs.length>1&&this.nextSong();return}let n=this.tracks[A][this.eventIndex[A]];this.playedTime+=this.oneTickToSeconds*(n.ticks-t.ticks);let s=this.loop&&(this.loopCount>0||this.loopCount===-1);if(this.midiData.loop.end<=t.ticks&&s){this.loopCount!==1/0&&(this.loopCount--,this?.onLoopCountChange?.(this.loopCount)),this.setTimeTicks(this.midiData.loop.start);return}else if(e>=this.duration){if(s){this.loopCount!==1/0&&(this.loopCount--,this?.onLoopCountChange?.(this.loopCount)),this.setTimeTicks(this.midiData.loop.start);return}this.eventIndex[A]--,this.pause(!0),this.songs.length>1&&this.nextSong();return}}}function Wr(){let e=0,A=1/0;return this.tracks.forEach((t,n)=>{this.eventIndex[n]>=t.length||t[this.eventIndex[n]].ticks<A&&(e=n,A=t[this.eventIndex[n]].ticks)}),e}var rt=class{timeDivision=0;duration=0;tempoChanges=[{ticks:0,tempo:120}];copyright="";tracksAmount=0;trackNames=[];lyrics=[];lyricsTicks=[];firstNoteOn=0;keyRange={min:0,max:127};lastVoiceEventTick=0;midiPorts=[0];midiPortChannelOffsets=[0];usedChannelsOnTrack=[];loop={start:0,end:0};midiName="";midiNameUsesFileName=!1;fileName="";rawMidiName;format=0;RMIDInfo={};bankOffset=0;isKaraokeFile=!1;isMultiPort=!1;MIDIticksToSeconds(A){let t=0;for(;A>0;){let n=this.tempoChanges.find(r=>r.ticks<A),s=A-n.ticks;t+=s*60/(n.tempo*this.timeDivision),A-=s}return t}_copyFromSequence(A){this.midiName=A.midiName,this.midiNameUsesFileName=A.midiNameUsesFileName,this.fileName=A.fileName,this.timeDivision=A.timeDivision,this.duration=A.duration,this.copyright=A.copyright,this.tracksAmount=A.tracksAmount,this.firstNoteOn=A.firstNoteOn,this.lastVoiceEventTick=A.lastVoiceEventTick,this.format=A.format,this.bankOffset=A.bankOffset,this.isKaraokeFile=A.isKaraokeFile,this.isMultiPort=A.isMultiPort,this.tempoChanges=[...A.tempoChanges],this.lyrics=A.lyrics.map(t=>new Uint8Array(t)),this.lyricsTicks=[...A.lyricsTicks],this.midiPorts=[...A.midiPorts],this.trackNames=[...A.trackNames],this.midiPortChannelOffsets=[...A.midiPortChannelOffsets],this.usedChannelsOnTrack=A.usedChannelsOnTrack.map(t=>new Set(t)),this.rawMidiName=A.rawMidiName?new Uint8Array(A.rawMidiName):void 0,this.loop={...A.loop},this.keyRange={...A.keyRange},this.RMIDInfo={...A.RMIDInfo}}};function QA(e){let A=0;for(;e;){let t=e[e.currentIndex++];if(A=A<<7|t&127,t>>7!==1)break}return A}function Tn(e){let A=[e&127];for(e>>=7;e>0;)A.unshift(e&127|128),e>>=7;return A}function _r(){let e=this;if(!e.tracks)throw new Error("MIDI has no tracks!");let A=[];for(let s of e.tracks){let r=[],i=0,a;for(let o of s){let I=o.ticks-i,l;o.messageStatusByte<=R.sequenceSpecific?(l=[255,o.messageStatusByte,...Tn(o.messageData.length),...o.messageData],a=void 0):o.messageStatusByte===R.systemExclusive?(l=[240,...Tn(o.messageData.length),...o.messageData],a=void 0):(l=[],a!==o.messageStatusByte&&(a=o.messageStatusByte,l.push(o.messageStatusByte)),l.push(...o.messageData)),r.push(...Tn(I)),r.push(...l),i+=I}A.push(new Uint8Array(r))}function t(s,r){for(let i=0;i<s.length;i++)r.push(s.charCodeAt(i))}let n=[];t("MThd",n),n.push(...Zt(6,4)),n.push(0,e.format),n.push(...Zt(e.tracksAmount,2)),n.push(...Zt(e.timeDivision,2));for(let s of A)t("MTrk",n),n.push(...Zt(s.length,4)),n.push(...s);return new Uint8Array(n)}function St(e){return e.messageData[0]===67&&e.messageData[2]===76&&e.messageData[5]===126&&e.messageData[6]===0}function Un(e){return e.messageData[0]===65&&e.messageData[2]===66&&e.messageData[3]===18&&e.messageData[4]===64&&(e.messageData[5]&16)!==0&&e.messageData[6]===21}function vn(e){return e.messageData[0]===65&&e.messageData[2]===66&&e.messageData[6]===127}function Hn(e){return e.messageData[0]===126&&e.messageData[2]===9&&e.messageData[3]===1}function Yn(e){return e.messageData[0]===126&&e.messageData[2]===9&&e.messageData[3]===3}function Ns(e){return new JA(e,R.systemExclusive,new U([65,16,66,18,64,0,127,0,65,247]))}function Dt(e,A,t,n){return new JA(n,R.controllerChange|e%16,new U([A,t]))}function zi(e,A){let t=16|[1,2,3,4,5,6,7,8,0,9,10,11,12,13,14,15][e%16],n=[65,16,66,18,64,t,21,1],r=128-(64+t+21+1)%128;return new JA(A,R.systemExclusive,new U([...n,r,247]))}function zr(e=[],A=[],t=[],n=[]){let s=this;dA("%cApplying changes to the MIDI file...",E.info),y("Desired program changes:",e),y("Desired CC changes:",A),y("Desired channels to clear:",t),y("Desired channels to transpose:",n);let r=new Set;e.forEach(F=>{r.add(F.channel)});let i="gs",a=!1,o=Array(s.tracks.length).fill(0),I=s.tracks.length;function l(){let F=0,M=1/0;return s.tracks.forEach((N,C)=>{o[C]>=N.length||N[o[C]].ticks<M&&(F=C,M=N[o[C]].ticks)}),F}let c=s.midiPorts.slice(),h={},B=0;function u(F,M){s.usedChannelsOnTrack[F].size!==0&&(B===0&&(B+=16,h[M]=0),h[M]===void 0&&(h[M]=B,B+=16),c[F]=M)}s.midiPorts.forEach((F,M)=>{u(M,F)});let f=B,S=Array(f).fill(!0),G=Array(f).fill(0),k=Array(f).fill(0);for(n.forEach(F=>{let M=Math.trunc(F.keyShift),N=F.keyShift-M;G[F.channel]=M,k[F.channel]=N});I>0;){let F=l(),M=s.tracks[F];if(o[F]>=M.length){I--;continue}let N=o[F]++,C=M[N],j=()=>{M.splice(N,1),o[F]--},T=(gA,uA=0)=>{M.splice(N+uA,0,gA),o[F]++},Y=h[c[F]]||0;if(C.messageStatusByte===R.midiPort){u(F,C.messageData[0]);continue}if(C.messageStatusByte<=R.sequenceSpecific&&C.messageStatusByte>=R.sequenceNumber)continue;let iA=C.messageStatusByte&240,IA=C.messageStatusByte&15,oA=IA+Y;if(t.indexOf(oA)!==-1){j();continue}switch(iA){case R.noteOn:if(S[oA]){S[oA]=!1,A.filter(W=>W.channel===oA).forEach(W=>{let L=Dt(IA,W.controllerNumber,W.controllerValue,C.ticks);T(L)});let cA=k[oA];if(cA!==0){let W=cA*64+64,L=Dt(IA,p.RPNMsb,0,C.ticks),D=Dt(IA,p.RPNLsb,1,C.ticks),b=Dt(oA,p.dataEntryMsb,W,C.ticks),_=Dt(IA,p.lsbForControl6DataEntry,0,C.ticks);T(_),T(b),T(D),T(L)}if(r.has(oA)){let W=e.find(aA=>aA.channel===oA),L=Math.max(0,Math.min(W.bank,127)),D=W.program;y(`%cSetting %c${W.channel}%c to %c${L}:${D}%c. Track num: %c${F}`,E.info,E.recognized,E.info,E.recognized,E.info,E.recognized);let b=new JA(C.ticks,R.programChange|IA,new U([D]));T(b);let _=(aA,qA)=>{let Ce=Dt(IA,aA?p.lsbForControl0BankSelect:p.bankSelect,qA,C.ticks);T(Ce)};GA(i)?W.isDrum?(y(`%cAdding XG Drum change on track %c${F}`,E.recognized,E.value),_(!1,te(L)?L:127),_(!0,0)):L===cn?(_(!1,cn),_(!0,0)):(_(!1,0),_(!0,L)):(_(!1,L),W.isDrum&&IA!==9&&(y(`%cAdding GS Drum change on track %c${F}`,E.recognized,E.value),T(zi(IA,C.ticks))))}}C.messageData[0]+=G[oA];break;case R.noteOff:C.messageData[0]+=G[oA];break;case R.programChange:if(r.has(oA)){j();continue}break;case R.controllerChange:let gA=C.messageData[0];if(A.find(cA=>cA.channel===oA&&gA===cA.controllerNumber)!==void 0){j();continue}if((gA===p.bankSelect||gA===p.lsbForControl0BankSelect)&&r.has(oA)){j();continue}break;case R.systemExclusive:if(St(C))y("%cXG system on detected",E.info),i="xg",a=!0;else if(C.messageData[0]===67&&C.messageData[2]===76&&C.messageData[3]===8&&C.messageData[5]===3)r.has(C.messageData[4]+Y)&&j();else if(vn(C)){a=!0,y("%cGS on detected!",E.recognized);break}else(Hn(C)||Yn(C))&&(y("%cGM/2 on detected, removing!",E.info),j(),a=!1)}}if(!a&&e.length>0){let F=0;s.tracks[0][0].messageStatusByte===R.trackName&&F++,s.tracks[0].splice(F,0,Ns(0)),y("%cGS on not detected. Adding it.",E.info)}this.flush(),q()}function jr(e){let A=[],t=[],n=[],s=[];e.channelSnapshots.forEach((r,i)=>{if(r.isMuted){t.push(i);return}let a=r.channelTransposeKeyShift+r.customControllers[tA.channelTransposeFine]/100;a!==0&&A.push({channel:i,keyShift:a}),r.lockPreset&&n.push({channel:i,program:r.program,bank:r.bank,isDrum:r.drumChannel}),r.lockedControllers.forEach((o,I)=>{if(!o||I>127||I===p.bankSelect)return;let l=r.midiControllers[I]>>7;s.push({channel:i,controllerNumber:I,controllerValue:l})})}),this.modifyMIDI(n,s,t,A)}var fA={name:"INAM",album:"IPRD",album2:"IALB",artist:"IART",genre:"IGNR",picture:"IPIC",copyright:"ICOP",creationDate:"ICRD",comment:"ICMT",engineer:"IENG",software:"ISFT",encoding:"IENC",midiEncoding:"MENC",bankOffset:"DBNK"},Ze="utf-8",ji="Created using SpessaSynth";function $r(e,A,t=0,n="Shift_JIS",s={},r=!0){let i=this;if(Ie("%cWriting the RMIDI File...",E.info),y(`%cConfiguration: Bank offset: %c${t}%c, encoding: %c${n}`,E.info,E.value,E.info,E.value),y("metadata",s),y("Initial bank offset",i.bankOffset),r){let f=function(){let F=0,M=1/0;return i.tracks.forEach((N,C)=>{B[C]>=N.length||N[B[C]].ticks<M&&(F=C,M=N[B[C]].ticks)}),F},c="gm",h=[],B=Array(i.tracks.length).fill(0),u=i.tracks.length,S=Array(i.tracks.length).fill(0),G=16+i.midiPortChannelOffsets.reduce((F,M)=>M>F?M:F),k=[];for(let F=0;F<G;F++)k.push({program:0,drums:F%16===9,lastBank:void 0,lastBankLSB:void 0,hasBankSelect:!1});for(;u>0;){let F=f(),M=i.tracks[F];if(B[F]>=M.length){u--;continue}let N=M[B[F]];B[F]++;let C=i.midiPortChannelOffsets[S[F]];if(N.messageStatusByte===R.midiPort){S[F]=N.messageData[0];continue}let j=N.messageStatusByte&240;if(j!==R.controllerChange&&j!==R.programChange&&j!==R.systemExclusive)continue;if(j===R.systemExclusive){if(!Un(N)){St(N)?c="xg":vn(N)?c="gs":Hn(N)?(c="gm",h.push({tNum:F,e:N})):Yn(N)&&(c="gm2");continue}let gA=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][N.messageData[5]&15]+C;k[gA].drums=!!(N.messageData[7]>0&&N.messageData[5]>>4);continue}let T=(N.messageStatusByte&15)+C,Y=k[T];if(j===R.programChange){let gA=GA(c),uA=N.messageData[0];Y.drums?A.presets.findIndex(D=>D.program===uA&&D.isDrumPreset(gA,!0))===-1&&(N.messageData[0]=A.presets.find(D=>D.isDrumPreset(gA))?.program||0,y(`%cNo drum preset %c${uA}%c. Channel %c${T}%c. Changing program to ${N.messageData[0]}.`,E.info,E.unrecognized,E.info,E.recognized,E.info)):A.presets.findIndex(D=>D.program===uA&&!D.isDrumPreset(gA))===-1&&(N.messageData[0]=A.presets.find(D=>!D.isDrumPreset(gA))?.program||0,y(`%cNo preset %c${uA}%c. Channel %c${T}%c. Changing program to ${N.messageData[0]}.`,E.info,E.unrecognized,E.info,E.recognized,E.info)),Y.program=N.messageData[0];let cA=Math.max(0,Y.lastBank?.messageData[1]-i.bankOffset),W=Y?.lastBankLSB?.messageData[1]-i.bankOffset||0;if(Y.lastBank===void 0)continue;let L=ft(cA,W,Y.drums,gA);if(A.presets.findIndex(D=>D.bank===L&&D.program===N.messageData[0])===-1){let D=A.presets.find(b=>b.program===N.messageData[0])?.bank+t||t;Y.lastBank.messageData[1]=D,Y?.lastBankLSB?.messageData&&(Y.lastBankLSB.messageData[1]=D),y(`%cNo preset %c${L}:${N.messageData[0]}%c. Channel %c${T}%c. Changing bank to ${D}.`,E.info,E.unrecognized,E.info,E.recognized,E.info)}else{let D=L;GA(c)&&L===128&&(L=127);let b=(L===128?128:D)+t;Y.lastBank.messageData[1]=b,Y?.lastBankLSB?.messageData&&!Y.drums&&(Y.lastBankLSB.messageData[1]=Y.lastBankLSB.messageData[1]-i.bankOffset+t),y(`%cPreset %c${L}:${N.messageData[0]}%c exists. Channel %c${T}%c. Changing bank to ${b}.`,E.info,E.recognized,E.info,E.recognized,E.info)}continue}let iA=N.messageData[0]===p.lsbForControl0BankSelect;if(N.messageData[0]!==p.bankSelect&&!iA)continue;Y.hasBankSelect=!0;let IA=N.messageData[1],oA=Qt(Y?.lastBank?.messageData[1]||0,IA,c,iA,Y.drums,T);oA.drumsStatus===2?Y.drums=!0:oA.drumsStatus===1&&(Y.drums=!1),iA?Y.lastBankLSB=N:Y.lastBank=N}if(k.forEach((F,M)=>{if(F.hasBankSelect===!0)return;let N=M%16,C=R.programChange|N,j=Math.floor(M/16)*16,T=i.midiPortChannelOffsets.indexOf(j),Y=i.tracks.find((gA,uA)=>i.midiPorts[uA]===T&&i.usedChannelsOnTrack[uA].has(N));if(Y===void 0)return;let iA=Y.findIndex(gA=>gA.messageStatusByte===C);if(iA===-1){let gA=Y.findIndex(W=>W.messageStatusByte>128&&W.messageStatusByte<240&&(W.messageStatusByte&15)===N);if(gA===-1)return;let uA=Y[gA].ticks,cA=A.getPreset(0,0).program;Y.splice(gA,0,new JA(uA,R.programChange|N,new U([cA]))),iA=gA}y(`%cAdding bank select for %c${M}`,E.info,E.recognized);let IA=Y[iA].ticks,oA=A.getPreset(0,F.program,GA(c))?.bank+t||t;Y.splice(iA,0,new JA(IA,R.controllerChange|N,new U([p.bankSelect,oA])))}),c!=="gs"&&!GA(c)){for(let M of h)i.tracks[M.tNum].splice(i.tracks[M.tNum].indexOf(M.e),1);let F=0;i.tracks[0][0].messageStatusByte===R.trackName&&F++,i.tracks[0].splice(F,0,Ns(0))}}let a=new U(i.writeMIDI().buffer),o=[],I=new TextEncoder;if(o.push(P(fA.software,I.encode("SpessaSynth"),!0)),s.name!==void 0?(o.push(P(fA.name,I.encode(s.name),!0)),n=Ze):o.push(P(fA.name,i.rawMidiName,!0)),s.creationDate!==void 0)n=Ze,o.push(P(fA.creationDate,I.encode(s.creationDate),!0));else{let c=new Date().toLocaleString(void 0,{weekday:"long",year:"numeric",month:"long",day:"numeric",hour:"numeric",minute:"numeric"});o.push(P(fA.creationDate,YA(c,!0),!0))}if(s.comment!==void 0&&(n=Ze,o.push(P(fA.comment,I.encode(s.comment)))),s.engineer!==void 0&&o.push(P(fA.engineer,I.encode(s.engineer),!0)),s.album!==void 0&&(n=Ze,o.push(P(fA.album,I.encode(s.album),!0)),o.push(P(fA.album2,I.encode(s.album),!0))),s.artist!==void 0&&(n=Ze,o.push(P(fA.artist,I.encode(s.artist),!0))),s.genre!==void 0&&(n=Ze,o.push(P(fA.genre,I.encode(s.genre),!0))),s.picture!==void 0&&o.push(P(fA.picture,new Uint8Array(s.picture))),s.copyright!==void 0)n=Ze,o.push(P(fA.copyright,I.encode(s.copyright),!0));else{let c=i.copyright.length>0?i.copyright:ji;o.push(P(fA.copyright,YA(c,!0)))}let l=new U(2);return ZA(l,t,2),o.push(P(fA.bankOffset,l)),s.midiEncoding!==void 0&&(o.push(P(fA.midiEncoding,I.encode(s.midiEncoding))),n=Ze),o.push(P(fA.encoding,YA(n,!0))),y("%cFinished!",E.info),q(),FA("RIFF",[YA("RMID"),P("data",a),FA("INFO",o,!0),e])}function Ai(e){let A=this;dA("%cSearching for all used programs and keys...",E.info);let t=16+A.midiPortChannelOffsets.reduce((c,h)=>h>c?h:c),n=[];for(let c=0;c<t;c++){let h=c%16===9?128:0;n.push({program:0,bank:h,bankLSB:0,actualBank:h,drums:c%16===9,string:`${h}:0`})}let s="gs";function r(c){let h=ft(c.bank,c.bankLSB,c.drums,GA(s)),B,u;if(e instanceof ut){let f=e.getPreset(h,c.program,GA(s));B=f.preset.bank+f.bankOffset,u=f.preset.program}else{let f=e.getPreset(h,c.program,GA(s));B=f.bank,u=f.program}c.actualBank=B,c.program=u,c.string=c.actualBank+":"+c.program,i[c.string]||(y(`%cDetected a new preset: %c${c.string}`,E.info,E.recognized),i[c.string]=new Set)}let i={},a=Array(A.tracks.length).fill(0),o=A.tracks.length;function I(){let c=0,h=1/0;return A.tracks.forEach((B,u)=>{a[u]>=B.length||B[a[u]].ticks<h&&(c=u,h=B[a[u]].ticks)}),c}let l=A.midiPorts.slice();for(n.forEach(c=>{r(c)});o>0;){let c=I(),h=A.tracks[c];if(a[c]>=h.length){o--;continue}let B=h[a[c]];if(a[c]++,B.messageStatusByte===R.midiPort){l[c]=B.messageData[0];continue}let u=B.messageStatusByte&240;if(u!==R.noteOn&&u!==R.controllerChange&&u!==R.programChange&&u!==R.systemExclusive)continue;let f=(B.messageStatusByte&15)+A.midiPortChannelOffsets[l[c]]||0,S=n[f];switch(u){case R.programChange:S.program=B.messageData[0],r(S);break;case R.controllerChange:let G=B.messageData[0]===p.lsbForControl0BankSelect;if(B.messageData[0]!==p.bankSelect&&!G||s==="gs"&&S.drums)continue;let k=B.messageData[1];switch(G?S.bankLSB=k:S.bank=k,Qt(S.bank,k,s,G,S.drums,f).drumsStatus){case 0:break;case 1:S.drums=!1,r(S);break;case 2:S.drums=!0,r(S);break}break;case R.noteOn:if(B.messageData[1]===0)continue;i[S.string].add(`${B.messageData[0]}-${B.messageData[1]}`);break;case R.systemExclusive:if(!Un(B)){St(B)&&(s="xg",y("%cXG on detected!",E.recognized));continue}let M=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][B.messageData[5]&15]+A.midiPortChannelOffsets[l[c]],N=!!(B.messageData[7]>0&&B.messageData[5]>>4);S=n[M],S.drums=N,r(S);break}}for(let c of Object.keys(i))i[c].size===0&&(y(`%cDetected change but no keys for %c${c}`,E.info,E.value),delete i[c]);return q(),i}function ei(e=0){function A(c){return c.messageData=new U(c.messageData.buffer),c.messageData.currentIndex=0,6e7/KA(c.messageData,3)}let t=[],s=this.tracks.flat();s.sort((c,h)=>c.ticks-h.ticks);for(let c=0;c<16;c++)t.push([]);let r=0,i=60/(120*this.timeDivision),a=0,o=0,I=[];for(let c=0;c<16;c++)I.push([]);let l=(c,h)=>{let B=I[h].findIndex(f=>f.midiNote===c),u=I[h][B];if(u){let f=r-u.start;u.length=f,h===9&&(u.length=f<e?e:f),I[h].splice(B,1)}o--};for(;a<s.length;){let c=s[a],h=c.messageStatusByte>>4,B=c.messageStatusByte&15;if(h===8)l(c.messageData[0],B);else if(h===9)if(c.messageData[1]===0)l(c.messageData[0],B);else{l(c.messageData[0],B);let u={midiNote:c.messageData[0],start:r,length:-1,velocity:c.messageData[1]/127};t[B].push(u),I[B].push(u),o++}else c.messageStatusByte===81&&(i=60/(A(c)*this.timeDivision));if(++a>=s.length)break;r+=i*(s[a].ticks-c.ticks)}return o>0&&I.forEach((c,h)=>{c.forEach(B=>{let u=r-B.start;B.length=u,h===9&&(B.length=u<e?e:u)})}),t}var zA=class e extends rt{embeddedSoundFont=void 0;tracks=[];isDLSRMIDI=!1;static copyFrom(A){let t=new e;return t._copyFromSequence(A),t.isDLSRMIDI=A.isDLSRMIDI,t.embeddedSoundFont=A.embeddedSoundFont?A.embeddedSoundFont.slice(0):void 0,t.tracks=A.tracks.map(n=>[...n]),t}_parseInternal(){Ie("%cInterpreting MIDI events...",E.info);let A=!1;this.keyRange={max:0,min:127};let t=[],n=!1;typeof this.RMIDInfo.ICOP<"u"&&(n=!0);let s=!1;typeof this.RMIDInfo.INAM<"u"&&(s=!0);let r=null,i=null;for(let l=0;l<this.tracks.length;l++){let c=this.tracks[l],h=new Set,B=!1;for(let f of c){if(f.messageStatusByte>=128&&f.messageStatusByte<240){B=!0;for(let G=0;G<f.messageData.length;G++)f.messageData[G]=Math.min(127,f.messageData[G]);switch(f.ticks>this.lastVoiceEventTick&&(this.lastVoiceEventTick=f.ticks),f.messageStatusByte&240){case R.controllerChange:switch(f.messageData[0]){case 2:case 116:r=f.ticks;break;case 4:case 117:i===null?i=f.ticks:i=0;break;case 0:this.isDLSRMIDI&&f.messageData[1]!==0&&f.messageData[1]!==127&&(y("%cDLS RMIDI with offset 1 detected!",E.recognized),this.bankOffset=1)}break;case R.noteOn:h.add(f.messageStatusByte&15);let G=f.messageData[0];this.keyRange.min=Math.min(this.keyRange.min,G),this.keyRange.max=Math.max(this.keyRange.max,G);break}}f.messageData.currentIndex=0;let S=$(f.messageData,f.messageData.length);switch(f.messageData.currentIndex=0,f.messageStatusByte){case R.setTempo:f.messageData.currentIndex=0,this.tempoChanges.push({ticks:f.ticks,tempo:6e7/KA(f.messageData,3)}),f.messageData.currentIndex=0;break;case R.marker:switch(S.trim().toLowerCase()){default:break;case"start":case"loopstart":r=f.ticks;break;case"loopend":i=f.ticks}f.messageData.currentIndex=0;break;case R.copyright:n||(f.messageData.currentIndex=0,t.push($(f.messageData,f.messageData.length,void 0,!1)),f.messageData.currentIndex=0);break;case R.lyric:if(S.trim().startsWith("@KMIDI KARAOKE FILE")&&(this.isKaraokeFile=!0,y("%cKaraoke MIDI detected!",E.recognized)),this.isKaraokeFile)f.messageStatusByte=R.text;else{this.lyrics.push(f.messageData),this.lyricsTicks.push(f.ticks);break}case R.text:let k=S.trim();k.startsWith("@KMIDI KARAOKE FILE")?(this.isKaraokeFile=!0,y("%cKaraoke MIDI detected!",E.recognized)):this.isKaraokeFile&&(k.startsWith("@T")||k.startsWith("@A")?A?t.push(k.substring(2).trim()):(this.midiName=k.substring(2).trim(),A=!0,s=!0,this.rawMidiName=YA(this.midiName)):k[0]!=="@"&&(this.lyrics.push($s(f.messageData)),this.lyricsTicks.push(f.ticks)));break;case R.trackName:break}}this.usedChannelsOnTrack.push(h),this.trackNames[l]="";let u=c.find(f=>f.messageStatusByte===R.trackName);if(u){u.messageData.currentIndex=0;let f=$(u.messageData,u.messageData.length);this.trackNames[l]=f,B||t.push(f)}}this.tempoChanges.reverse(),y("%cCorrecting loops, ports and detecting notes...",E.info);let a=[];for(let l of this.tracks){let c=l.find(h=>(h.messageStatusByte&240)===R.noteOn);c&&a.push(c.ticks)}this.firstNoteOn=Math.min(...a),y(`%cFirst note-on detected at: %c${this.firstNoteOn}%c ticks!`,E.info,E.recognized,E.info),r!==null&&i===null?(r=this.firstNoteOn,i=this.lastVoiceEventTick):(r===null&&(r=this.firstNoteOn),(i===null||i===0)&&(i=this.lastVoiceEventTick)),this.loop={start:r,end:i},y(`%cLoop points: start: %c${this.loop.start}%c end: %c${this.loop.end}`,E.info,E.recognized,E.info,E.recognized);let o=0;this.midiPorts=[],this.midiPortChannelOffsets=[];for(let l=0;l<this.tracks.length;l++)if(this.midiPorts.push(-1),this.usedChannelsOnTrack[l].size!==0)for(let c of this.tracks[l]){if(c.messageStatusByte!==R.midiPort)continue;let h=c.messageData[0];this.midiPorts[l]=h,this.midiPortChannelOffsets[h]===void 0&&(this.midiPortChannelOffsets[h]=o,o+=16)}this.midiPortChannelOffsets=[...this.midiPortChannelOffsets].map(l=>l??0);let I=1/0;for(let l of this.midiPorts)l!==-1&&I>l&&(I=l);if(I===1/0&&(I=0),this.midiPorts=this.midiPorts.map(l=>l===-1||l===void 0?I:l),this.midiPortChannelOffsets.length===0&&(this.midiPortChannelOffsets=[0]),this.midiPortChannelOffsets.length<2?y("%cNo additional MIDI Ports detected.",E.info):(this.isMultiPort=!0,y("%cMIDI Ports detected!",E.recognized)),!s)if(this.tracks.length>1){if(this.tracks[0].find(l=>l.messageStatusByte>=R.noteOn&&l.messageStatusByte<R.polyPressure)===void 0){let l=this.tracks[0].find(c=>c.messageStatusByte===R.trackName);l&&(this.rawMidiName=l.messageData,l.messageData.currentIndex=0,this.midiName=$(l.messageData,l.messageData.length,void 0,!1))}}else{let l=this.tracks[0].find(c=>c.messageStatusByte===R.trackName);l&&(this.rawMidiName=l.messageData,l.messageData.currentIndex=0,this.midiName=$(l.messageData,l.messageData.length,void 0,!1))}if(n||(this.copyright=t.map(l=>l.trim().replace(/(\r?\n)+/g,`
|
|
18
|
+
`)).filter(l=>l.length>0).join(`
|
|
19
|
+
`)||""),this.midiName=this.midiName.trim(),this.midiNameUsesFileName=!1,this.midiName.length===0){y("%cNo name detected. Using the alt name!",E.info),this.midiName=js(this.fileName),this.midiNameUsesFileName=!0,this.rawMidiName=new Uint8Array(this.midiName.length);for(let l=0;l<this.midiName.length;l++)this.rawMidiName[l]=this.midiName.charCodeAt(l)}else y(`%cMIDI Name detected! %c"${this.midiName}"`,E.info,E.recognized);this.tracks.some(l=>l[0].ticks===0)||this.tracks[0].unshift(new JA(0,R.trackName,new U(this.rawMidiName.buffer))),this.duration=this.MIDIticksToSeconds(this.lastVoiceEventTick),y("%cSuccess!",E.recognized),q()}flush(){for(let A of this.tracks)A.sort((t,n)=>t.ticks-n.ticks);this._parseInternal()}};zA.prototype.writeMIDI=_r;zA.prototype.modifyMIDI=zr;zA.prototype.applySnapshotToMIDI=jr;zA.prototype.writeRMIDI=$r;zA.prototype.getUsedProgramsAndKeys=Ai;zA.prototype.getNoteTimes=ei;function ti(e,A){this.midiData.usedChannelsOnTrack[e].size!==0&&(this.midiPortChannelOffset===0&&(this.midiPortChannelOffset+=16,this.midiPortChannelOffsets[A]=0),this.midiPortChannelOffsets[A]===void 0&&(this.synth.midiAudioChannels.length<this.midiPortChannelOffset+15&&this._addNewMidiPort(),this.midiPortChannelOffsets[A]=this.midiPortChannelOffset,this.midiPortChannelOffset+=16),this.midiPorts[e]=A)}function ni(e,A=!0){if(this.stop(),!e.tracks)throw new Error("This MIDI has no tracks!");this.oneTickToSeconds=60/(120*e.timeDivision),this.midiData=e,this.synth.clearEmbeddedBank(),this.midiData.embeddedSoundFont!==void 0&&(y("%cEmbedded soundfont detected! Using it.",E.recognized),this.synth.setEmbeddedSoundFont(this.midiData.embeddedSoundFont,this.midiData.bankOffset)),dA("%cPreloading samples...",E.info);let t=this.midiData.getUsedProgramsAndKeys(this.synth.soundfontManager);for(let[n,s]of Object.entries(t)){let[r,i]=n.split(":").map(Number),a=this.synth.getPreset(r,i);y(`%cPreloading used samples on %c${a.presetName}%c...`,E.info,E.recognized,E.info);for(let o of s){let[I,l]=o.split("-").map(Number);this.synth.getVoicesForPreset(a,r,i,I,l,I)}}if(q(),this.tracks=this.midiData.tracks,this.midiPorts=this.midiData.midiPorts.slice(),this.midiPortChannelOffset=0,this.midiPortChannelOffsets={},this.midiData.midiPorts.forEach((n,s)=>{this.assignMIDIPort(s,n)}),this.duration=this.midiData.duration,this.firstNoteTime=this.midiData.MIDIticksToSeconds(this.midiData.firstNoteOn),y(`%cTotal song time: ${ns(Math.ceil(this.duration)).time}`,E.recognized),this?.onSongChange?.(this.songIndex,A),this.duration<=1&&(J(`%cVery short song: (${ns(Math.round(this.duration)).time}). Disabling loop!`,E.warn),this.loop=!1),A)this.play(!0);else{let n=this.skipToFirstNoteOn?this.midiData.firstNoteOn-1:0;this.setTimeTicks(n),this.pause()}}function si(e,A=!0){this.songs=e.map(t=>zA.copyFrom(t)),!(this.songs.length<1)&&(this.songIndex=0,this.songs.length>1&&(this.loop=!1),this.shuffleSongIndexes(),this?.onSongListChange?.(this.songs),this.loadCurrentSong(A))}function oi(){if(this.songs.length===1){this.currentTime=0;return}this.songIndex++,this.songIndex%=this.songs.length,this.loadCurrentSong()}function ri(){if(this.songs.length===1){this.currentTime=0;return}this.songIndex--,this.songIndex<0&&(this.songIndex=this.songs.length-1),this.loadCurrentSong()}var it=Oe.slice(0,128);function ii(e,A=void 0){this.oneTickToSeconds=60/(120*this.midiData.timeDivision),this.synth.resetAllControllers(),this.sendMIDIReset(),this._resetTimers();let t=this.synth.midiAudioChannels.length,n=Array(t).fill(8192),s=[];for(let o=0;o<t;o++)s.push({program:-1,bank:0,actualBank:0});let r=o=>o===p.dataDecrement||o===p.dataIncrement||o===p.dataEntryMsb||o===p.dataDecrement||o===p.lsbForControl6DataEntry||o===p.RPNLsb||o===p.RPNMsb||o===p.NRPNLsb||o===p.NRPNMsb||o===p.bankSelect||o===p.lsbForControl0BankSelect||o===p.resetAllControllers,i=[];for(let o=0;o<t;o++)i.push(Array.from(it));function a(o){if(n[o]=8192,i?.[o]!==void 0)for(let I=0;I<it.length;I++)ls.has(I)||(i[o][I]=it[I])}for(;;){let o=this._findFirstEventIndex(),I=this.tracks[o][this.eventIndex[o]];if(A!==void 0){if(I.ticks>=A)break}else if(this.playedTime>=e)break;let l=dt(I.messageStatusByte),c=l.channel+(this.midiPortChannelOffsets[this.midiPorts[o]]||0);switch(l.status){case R.noteOn:i[c]===void 0&&(i[c]=Array.from(it)),i[c][p.portamentoControl]=I.messageData[0];break;case R.noteOff:break;case R.pitchBend:n[c]=I.messageData[1]<<7|I.messageData[0];break;case R.programChange:if(this.midiData.isMultiPort&&this.midiData.usedChannelsOnTrack[o].size===0)break;let B=s[c];B.program=I.messageData[0],B.actualBank=B.bank;break;case R.controllerChange:if(this.midiData.isMultiPort&&this.midiData.usedChannelsOnTrack[o].size===0)break;let u=I.messageData[0];if(r(u)){let f=I.messageData[1];if(u===p.bankSelect){s[c].bank=f;break}else u===p.resetAllControllers&&a(c);this.sendMIDIMessages?this.sendMIDICC(c,u,f):this.synth.controllerChange(c,u,f)}else i[c]===void 0&&(i[c]=Array.from(it)),i[c][u]=I.messageData[1];break;default:this._processEvent(I,o);break}this.eventIndex[o]++,o=this._findFirstEventIndex();let h=this.tracks[o][this.eventIndex[o]];if(h===void 0)return this.stop(),!1;this.playedTime+=this.oneTickToSeconds*(h.ticks-I.ticks)}if(this.sendMIDIMessages){for(let o=0;o<t;o++)if(n[o]!==void 0&&this.sendMIDIPitchWheel(o,n[o]>>7,n[o]&127),i[o]!==void 0&&i[o].forEach((I,l)=>{I!==it[l]&&!r(l)&&this.sendMIDICC(o,l,I)}),s[o].program>=0&&s[o].actualBank>=0){let I=s[o].actualBank;this.sendMIDICC(o,p.bankSelect,I),this.sendMIDIProgramChange(o,s[o].program)}}else for(let o=0;o<t;o++)if(n[o]!==void 0&&this.synth.pitchWheel(o,n[o]>>7,n[o]&127),i[o]!==void 0&&i[o].forEach((I,l)=>{I!==it[l]&&!r(l)&&this.synth.controllerChange(o,l,I)}),s[o].actualBank>=0){let I=s[o];I.program!==-1?(this.synth.controllerChange(o,p.bankSelect,I.actualBank),this.synth.programChange(o,I.program)):this.synth.controllerChange(o,p.bankSelect,I.bank)}return!0}function ai(e=!1){if(this.midiData!==void 0){if(e){this.pausedTime=void 0,this.currentTime=0;return}if(this.currentTime>=this.duration){this.pausedTime=void 0,this.currentTime=0;return}this.paused&&(this._recalculateStartTime(this.pausedTime),this.pausedTime=void 0),this.sendMIDIMessages||this.playingNotes.forEach(A=>{this.synth.noteOn(A.channel,A.midiNote,A.velocity)}),this.setProcessHandler()}}function gi(e){if(!this.midiData)return;this.stop(),this.playingNotes=[],this.pausedTime=void 0,this?.onTimeChange?.(this.midiData.MIDIticksToSeconds(e));let A=this._playTo(0,e);this._recalculateStartTime(this.playedTime),A&&this.play()}function Ii(e){this.absoluteStartTime=this.synth.currentSynthTime-e/this._playbackRate}function Ei(e){this.sendMIDIMessages&&this?.onMIDIMessage?.(e)}function ci(e,A,t){e%=16,this.sendMIDIMessages&&this.sendMIDIMessage([R.controllerChange|e,A,t])}function Ci(e,A){e%=16,this.sendMIDIMessages&&this.sendMIDIMessage([R.programChange|e,A])}function hi(e,A,t){e%=16,this.sendMIDIMessages&&this.sendMIDIMessage([R.pitchBend|e,t,A])}function li(){if(this.sendMIDIMessages){this.sendMIDIMessage([R.reset]);for(let e=0;e<16;e++)this.sendMIDIMessage([R.controllerChange|e,p.allSoundOff,0]),this.sendMIDIMessage([R.controllerChange|e,p.resetAllControllers,0])}}var wA=class{songs=[];songIndex=0;shuffledSongIndexes=[];synth;isActive=!1;sendMIDIMessages=!1;loopCount=1/0;eventIndex=[];playedTime=0;pausedTime=void 0;absoluteStartTime=0;playingNotes=[];loop=!0;shuffleMode=!1;midiData=void 0;midiPorts=[];midiPortChannelOffset=0;midiPortChannelOffsets={};skipToFirstNoteOn=!0;preservePlaybackState=!1;onMIDIMessage;onTimeChange;onPlaybackStop;onSongListChange;onSongChange;onMetaEvent;onLoopCountChange;constructor(A){this.synth=A,this.absoluteStartTime=this.synth.currentSynthTime}_playbackRate=1;set playbackRate(A){let t=this.currentTime;this._playbackRate=A,this.currentTime=t}get currentTime(){return this.pausedTime!==void 0?this.pausedTime:(this.synth.currentSynthTime-this.absoluteStartTime)*this._playbackRate}set currentTime(A){if(!this.midiData)return;if(A>this.duration||A<0){this.skipToFirstNoteOn?this.setTimeTicks(this.midiData.firstNoteOn-1):this.setTimeTicks(0);return}if(this.skipToFirstNoteOn&&A<this.firstNoteTime){this.setTimeTicks(this.midiData.firstNoteOn-1);return}this.stop(),this.playingNotes=[];let t=this.paused&&this.preservePlaybackState;if(this.pausedTime=void 0,this?.onTimeChange?.(A),this.midiData.duration===0){J("No duration!"),this?.onPlaybackStop?.(!0);return}this._playTo(A),this._recalculateStartTime(A),t?this.pause():this.play()}get paused(){return this.pausedTime!==void 0}pause(A=!1){if(this.paused){J("Already paused");return}this.pausedTime=this.currentTime,this.stop(),this?.onPlaybackStop?.(A)}stop(){this.clearProcessHandler();for(let A=0;A<16;A++)this.synth.controllerChange(A,p.sustainPedal,0);if(this.synth.stopAllChannels(),this.sendMIDIMessages){for(let A of this.playingNotes)this.sendMIDIMessage([R.noteOff|A.channel%16,A.midiNote]);for(let A=0;A<16;A++)this.sendMIDICC(A,p.allNotesOff,0)}}loadCurrentSong(A=!0){let t=this.songIndex;this.shuffleMode&&(t=this.shuffledSongIndexes[this.songIndex]),this.loadNewSequence(this.songs[t],A)}_resetTimers(){this.playedTime=0,this.eventIndex=Array(this.tracks.length).fill(0)}setProcessHandler(){this.isActive=!0}clearProcessHandler(){this.isActive=!1}shuffleSongIndexes(){let A=this.songs.map((t,n)=>n);for(this.shuffledSongIndexes=[];A.length>0;){let t=A[Math.floor(Math.random()*A.length)];this.shuffledSongIndexes.push(t),A.splice(A.indexOf(t),1)}}};wA.prototype.sendMIDIMessage=Ei;wA.prototype.sendMIDIReset=li;wA.prototype.sendMIDICC=ci;wA.prototype.sendMIDIProgramChange=Ci;wA.prototype.sendMIDIPitchWheel=hi;wA.prototype.assignMIDIPort=ti;wA.prototype._processEvent=Vr;wA.prototype._addNewMidiPort=Zr;wA.prototype.processTick=Xr;wA.prototype._findFirstEventIndex=Wr;wA.prototype.loadNewSequence=ni;wA.prototype.loadNewSongList=si;wA.prototype.nextSong=oi;wA.prototype.previousSong=ri;wA.prototype.play=ai;wA.prototype._playTo=ii;wA.prototype.setTimeTicks=gi;wA.prototype._recalculateStartTime=Ii;var Xt;(()=>{var e=Uint8Array,A=Uint16Array,t=Int32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),r=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),i=function(L,D){for(var b=new A(31),_=0;_<31;++_)b[_]=D+=1<<L[_-1];for(var aA=new t(b[30]),_=1;_<30;++_)for(var qA=b[_];qA<b[_+1];++qA)aA[qA]=qA-b[_]<<5|_;return{b,r:aA}},a=i(n,2),o=a.b,I=a.r;o[28]=258,I[258]=28;var l=i(s,0),c=l.b,h=l.r,B=new A(32768);for(k=0;k<32768;++k)u=(k&43690)>>1|(k&21845)<<1,u=(u&52428)>>2|(u&13107)<<2,u=(u&61680)>>4|(u&3855)<<4,B[k]=((u&65280)>>8|(u&255)<<8)>>1;var u,k,f=function(L,D,b){for(var _=L.length,aA=0,qA=new A(D);aA<_;++aA)L[aA]&&++qA[L[aA]-1];var Ce=new A(D);for(aA=1;aA<D;++aA)Ce[aA]=Ce[aA-1]+qA[aA-1]<<1;var fe;if(b){fe=new A(1<<D);var ue=15-D;for(aA=0;aA<_;++aA)if(L[aA])for(var gt=aA<<4|L[aA],De=D-L[aA],rA=Ce[L[aA]-1]++<<De,lA=rA|(1<<De)-1;rA<=lA;++rA)fe[B[rA]>>ue]=gt}else for(fe=new A(_),aA=0;aA<_;++aA)L[aA]&&(fe[aA]=B[Ce[L[aA]-1]++]>>15-L[aA]);return fe},S=new e(288);for(k=0;k<144;++k)S[k]=8;var k;for(k=144;k<256;++k)S[k]=9;var k;for(k=256;k<280;++k)S[k]=7;var k;for(k=280;k<288;++k)S[k]=8;var k,G=new e(32);for(k=0;k<32;++k)G[k]=5;var k,F=f(S,9,1),M=f(G,5,1),N=function(L){for(var D=L[0],b=1;b<L.length;++b)L[b]>D&&(D=L[b]);return D},C=function(L,D,b){var _=D/8|0;return(L[_]|L[_+1]<<8)>>(D&7)&b},j=function(L,D){var b=D/8|0;return(L[b]|L[b+1]<<8|L[b+2]<<16)>>(D&7)},T=function(L){return(L+7)/8|0},Y=function(L,D,b){return(D==null||D<0)&&(D=0),(b==null||b>L.length)&&(b=L.length),new e(L.subarray(D,b))},iA=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],IA=function(L,D,b){var _=new Error(D||iA[L]);if(_.code=L,Error.captureStackTrace&&Error.captureStackTrace(_,IA),!b)throw _;return _},oA=function(L,D,b,_){var aA=L.length,qA=_?_.length:0;if(!aA||D.f&&!D.l)return b||new e(0);var Ce=!b,fe=Ce||D.i!=2,ue=D.i;Ce&&(b=new e(aA*3));var gt=function(tn){var Ye=b.length;if(tn>Ye){var bt=new e(Math.max(Ye*2,tn));bt.set(b),b=bt}},De=D.f||0,rA=D.p||0,lA=D.b||0,me=D.l,jA=D.d,Ue=D.m,ve=D.n,Rt=aA*8;do{if(!me){De=C(L,rA,1);var It=C(L,rA+1,3);if(rA+=3,It)if(It==1)me=F,jA=M,Ue=9,ve=5;else if(It==2){var Gt=C(L,rA,31)+257,Pn=C(L,rA+10,15)+4,Kn=Gt+C(L,rA+5,31)+1;rA+=14;for(var Et=new e(Kn),He=new e(19),$A=0;$A<Pn;++$A)He[r[$A]]=C(L,rA+$A*3,7);rA+=Pn*3;for(var qn=N(He),jt=(1<<qn)-1,ct=f(He,qn,1),$A=0;$A<Kn;){var Mt=ct[C(L,rA,jt)];rA+=Mt&15;var VA=Mt>>4;if(VA<16)Et[$A++]=VA;else{var ke=0,xt=0;for(VA==16?(xt=3+C(L,rA,3),rA+=2,ke=Et[$A-1]):VA==17?(xt=3+C(L,rA,7),rA+=3):VA==18&&(xt=11+C(L,rA,127),rA+=7);xt--;)Et[$A++]=ke}}var Vn=Et.subarray(0,Gt),Fe=Et.subarray(Gt);Ue=N(Vn),ve=N(Fe),me=f(Vn,Ue,1),jA=f(Fe,ve,1)}else IA(1);else{var VA=T(rA)+4,$t=L[VA-4]|L[VA-3]<<8,An=VA+$t;if(An>aA){ue&&IA(0);break}fe&>(lA+$t),b.set(L.subarray(VA,An),lA),D.b=lA+=$t,D.p=rA=An*8,D.f=De;continue}if(rA>Rt){ue&&IA(0);break}}fe&>(lA+131072);for(var Hs=(1<<Ue)-1,Ys=(1<<ve)-1,en=rA;;en=rA){var ke=me[j(L,rA)&Hs],Xe=ke>>4;if(rA+=ke&15,rA>Rt){ue&&IA(0);break}if(ke||IA(2),Xe<256)b[lA++]=Xe;else if(Xe==256){en=rA,me=null;break}else{var Zn=Xe-254;if(Xe>264){var $A=Xe-257,we=n[$A];Zn=C(L,rA,(1<<we)-1)+o[$A],rA+=we}var Ct=jA[j(L,rA)&Ys],We=Ct>>4;Ct||IA(3),rA+=Ct&15;var Fe=c[We];if(We>3){var we=s[We];Fe+=j(L,rA)&(1<<we)-1,rA+=we}if(rA>Rt){ue&&IA(0);break}fe&>(lA+131072);var Nt=lA+Zn;if(lA<Fe){var ht=qA-Fe,xA=Math.min(Fe,Nt);for(ht+lA<0&&IA(3);lA<xA;++lA)b[lA]=_[ht+lA]}for(;lA<Nt;++lA)b[lA]=b[lA-Fe]}}D.l=me,D.p=en,D.b=lA,D.f=De,me&&(De=1,D.m=Ue,D.d=jA,D.n=ve)}while(!De);return lA!=b.length&&Ce?Y(b,0,lA):b.subarray(0,lA)},gA=new e(0);function uA(L,D){return oA(L,{i:2},D&&D.out,D&&D.dictionary)}var cA=typeof TextDecoder<"u"&&new TextDecoder,W=0;try{cA.decode(gA,{stream:!0}),W=1}catch{}Xt=uA})();var bs={XMFFileType:0,nodeName:1,nodeIDNumber:2,resourceFormat:3,filenameOnDisk:4,filenameExtensionOnDisk:5,macOSFileTypeAndCreator:6,mimeType:7,title:8,copyrightNotice:9,comment:10,autoStart:11,preload:12,contentDescription:13,ID3Metadata:14},Ft={inLineResource:1,inFileResource:2,inFileNode:3,externalFile:4,externalXMF:5,XMFFileURIandNodeID:6},Ls={StandardMIDIFile:0,StandardMIDIFileType1:1,DLS1:2,DLS2:3,DLS22:4,mobileDLS:5},$i={standard:0,MMA:1,registered:2,nonRegistered:3},On={none:0,MMAUnpacker:1,registered:2,nonRegistered:3},Ts=class e{length;itemCount;metadataLength;metadata={};nodeData;innerNodes=[];packedContent=!1;nodeUnpackers=[];resourceFormat="unknown";constructor(A){let t=A.currentIndex;this.length=QA(A),this.itemCount=QA(A);let n=QA(A),s=A.currentIndex-t,r=n-s,i=A.slice(A.currentIndex,A.currentIndex+r);A.currentIndex+=r,this.metadataLength=QA(i);let a=i.slice(i.currentIndex,i.currentIndex+this.metadataLength);i.currentIndex+=this.metadataLength;let o,I;for(;a.currentIndex<a.length;){if(a[a.currentIndex]===0)a.currentIndex++,o=QA(a),Object.values(bs).indexOf(o)===-1?(J(`Unknown field specifier: ${o}`),I=`unknown_${o}`):I=Object.keys(bs).find(f=>bs[f]===o);else{let f=QA(a);o=$(a,f),I=o}let u=QA(a);if(u===0){let f=QA(a),S=a.slice(a.currentIndex,a.currentIndex+f);a.currentIndex+=f,QA(S)<4?this.metadata[I]=$(S,f-1):this.metadata[I]=S.slice(S.currentIndex)}else J(`International content: ${u}`),a.currentIndex+=QA(a)}let l=i.currentIndex,c=QA(i),h=i.slice(i.currentIndex,l+c);if(i.currentIndex=l+c,c>0)for(this.packedContent=!0;h.currentIndex<c;){let B={};switch(B.id=QA(h),B.id){case On.nonRegistered:case On.registered:throw q(),new Error(`Unsupported unpacker ID: ${B.id}`);default:throw q(),new Error(`Unknown unpacker ID: ${B.id}`);case On.none:B.standardID=QA(h);break;case On.MMAUnpacker:let u=h[h.currentIndex++];u===0&&(u<<=8,u|=h[h.currentIndex++],u<<=8,u|=h[h.currentIndex++]);let f=QA(h);B.manufacturerID=u,B.manufacturerInternalID=f;break}B.decodedSize=QA(h),this.nodeUnpackers.push(B)}switch(A.currentIndex=t+n,this.referenceTypeID=QA(A),this.nodeData=A.slice(A.currentIndex,t+this.length),A.currentIndex=t+this.length,this.referenceTypeID){case Ft.inLineResource:break;case Ft.externalXMF:case Ft.inFileNode:case Ft.XMFFileURIandNodeID:case Ft.externalFile:case Ft.inFileResource:throw q(),new Error(`Unsupported reference type: ${this.referenceTypeID}`);default:throw q(),new Error(`Unknown reference type: ${this.referenceTypeID}`)}if(this.isFile){if(this.packedContent){let u=this.nodeData.slice(2,this.nodeData.length);y(`%cPacked content. Attemting to deflate. Target size: %c${this.nodeUnpackers[0].decodedSize}`,E.warn,E.value);try{this.nodeData=new U(Xt(u).buffer)}catch(f){throw q(),new Error(`Error unpacking XMF file contents: ${f.message}.`)}}let B=this.metadata.resourceFormat;if(B===void 0)J("No resource format for this file node!");else{B[0]!==$i.standard&&(J(`Non-standard formatTypeID: ${B}`),this.resourceFormat=B.toString());let f=B[1];Object.values(Ls).indexOf(f)===-1?J(`Unrecognized resource format: ${f}`):this.resourceFormat=Object.keys(Ls).find(S=>Ls[S]===f)}}else for(this.resourceFormat="folder";this.nodeData.currentIndex<this.nodeData.length;){let B=this.nodeData.currentIndex,u=QA(this.nodeData),f=this.nodeData.slice(B,B+u);this.nodeData.currentIndex=B+u,this.innerNodes.push(new e(f))}}get isFile(){return this.itemCount===0}};function Bi(e,A){e.bankOffset=0;let t=$(A,4);if(t!=="XMF_")throw q(),new SyntaxError(`Invalid XMF Header! Expected "_XMF", got "${t}"`);Ie("%cParsing XMF file...",E.info);let n=$(A,4);if(y(`%cXMF version: %c${n}`,E.info,E.recognized),n==="2.00"){let o=KA(A,4),I=KA(A,4);y(`%cFile Type ID: %c${o}%c, File Type Revision ID: %c${I}`,E.info,E.recognized,E.info,E.recognized)}QA(A);let s=QA(A);A.currentIndex+=s,A.currentIndex=QA(A);let r=new Ts(A),i,a=o=>{let I=(l,c)=>{o.metadata[l]!==void 0&&typeof o.metadata[l]=="string"&&(e.RMIDInfo[c]=o.metadata[l])};if(I("nodeName",fA.name),I("title",fA.name),I("copyrightNotice",fA.copyright),I("comment",fA.comment),o.isFile)switch(o.resourceFormat){default:return;case"DLS1":case"DLS2":case"DLS22":case"mobileDLS":y("%cFound embedded DLS!",E.recognized),e.embeddedSoundFont=o.nodeData.buffer;break;case"StandardMIDIFile":case"StandardMIDIFileType1":y("%cFound embedded MIDI!",E.recognized),i=o.nodeData;break}else for(let l of o.innerNodes)a(l)};return a(r),q(),i}var Wt=class extends zA{constructor(A,t=""){super(),dA("%cParsing MIDI File...",E.info),this.fileName=t;let n=new U(A),s,r=$(n,4);if(n.currentIndex-=4,r==="RIFF"){n.currentIndex+=8;let a=$(n,4,void 0,!1);if(a!=="RMID")throw q(),new SyntaxError(`Invalid RMIDI Header! Expected "RMID", got "${a}"`);let o=AA(n);if(o.header!=="data")throw q(),new SyntaxError(`Invalid RMIDI Chunk header! Expected "data", got "${a}"`);for(s=o.chunkData;n.currentIndex<=n.length;){let I=n.currentIndex,l=AA(n,!0);if(l.header==="RIFF"){let c=$(l.chunkData,4).toLowerCase();c==="sfbk"||c==="sfpk"||c==="dls "?(y("%cFound embedded soundfont!",E.recognized),this.embeddedSoundFont=n.slice(I,I+l.size).buffer):J(`Unknown RIFF chunk: "${c}"`),c==="dls "&&(this.isDLSRMIDI=!0)}else if(l.header==="LIST"&&$(l.chunkData,4)==="INFO"){for(y("%cFound RMIDI INFO chunk!",E.recognized),this.RMIDInfo={};l.chunkData.currentIndex<=l.size;){let h=AA(l.chunkData,!0);this.RMIDInfo[h.header]=h.chunkData}this.RMIDInfo.ICOP&&(this.copyright=$(this.RMIDInfo.ICOP,this.RMIDInfo.ICOP.length,void 0,!1).replaceAll(`
|
|
20
|
+
`," ")),this.RMIDInfo.INAM&&(this.rawMidiName=this.RMIDInfo[fA.name],this.midiName=$(this.rawMidiName,this.rawMidiName.length,void 0,!1).replaceAll(`
|
|
21
|
+
`," ")),this.RMIDInfo.IALB&&!this.RMIDInfo.IPRD&&(this.RMIDInfo.IPRD=this.RMIDInfo.IALB),this.RMIDInfo.IPRD&&!this.RMIDInfo.IALB&&(this.RMIDInfo.IALB=this.RMIDInfo.IPRD),this.bankOffset=1,this.RMIDInfo[fA.bankOffset]&&(this.bankOffset=v(this.RMIDInfo[fA.bankOffset],2))}}this.isDLSRMIDI&&(this.bankOffset=0),this.embeddedSoundFont===void 0&&(this.bankOffset=0)}else r==="XMF_"?s=Bi(this,n):s=n;let i=this._readMIDIChunk(s);if(i.type!=="MThd")throw q(),new SyntaxError(`Invalid MIDI Header! Expected "MThd", got "${i.type}"`);if(i.size!==6)throw q(),new RangeError(`Invalid MIDI header chunk size! Expected 6, got ${i.size}`);this.format=KA(i.data,2),this.tracksAmount=KA(i.data,2),this.timeDivision=KA(i.data,2);for(let a=0;a<this.tracksAmount;a++){let o=[],I=this._readMIDIChunk(s);if(I.type!=="MTrk")throw q(),new SyntaxError(`Invalid track header! Expected "MTrk" got "${I.type}"`);let l,c=0;for(this.format===2&&a>0&&(c+=this.tracks[a-1][this.tracks[a-1].length-1].ticks);I.data.currentIndex<I.size;){c+=QA(I.data);let h=I.data[I.data.currentIndex],B;if(l!==void 0&&h<128)B=l;else{if(l===void 0&&h<128)throw q(),new SyntaxError(`Unexpected byte with no running byte. (${h})`);B=I.data[I.data.currentIndex++]}let u=ro(B),f;switch(u){case-1:f=0;break;case-2:B=I.data[I.data.currentIndex++],f=QA(I.data);break;case-3:f=QA(I.data);break;default:f=io[B>>4],l=B;break}let S=new U(f);S.set(I.data.slice(I.data.currentIndex,I.data.currentIndex+f),0);let G=new JA(c,B,S);o.push(G),I.data.currentIndex+=f}this.tracks.push(o),y(`%cParsed %c${this.tracks.length}%c / %c${this.tracksAmount}`,E.info,E.value,E.info,E.value)}y("%cAll tracks parsed correctly!",E.recognized),this._parseInternal(),q(),y(`%cMIDI file parsed. Total tick time: %c${this.lastVoiceEventTick}%c, total seconds time: %c${this.duration}`,E.info,E.recognized,E.info,E.recognized)}_readMIDIChunk(A){let t={};t.type=$(A,4),t.size=KA(A,4),t.data=new U(t.size);let n=A.slice(A.currentIndex,A.currentIndex+t.size);return t.data.set(n,0),A.currentIndex+=t.size,t}};var at={consoleColors:E,SpessaSynthInfo:y,SpessaSynthWarn:J,SpessaSynthGroupCollapsed:dA,SpessaSynthGroupEnd:q,readBytesAsUintBigEndian:KA,readLittleEndian:v,readBytesAsString:$,readVariableLengthQuantity:QA,inflateSync:Xt};var Us=at.consoleColors;var RA={midiMessage:0,ccReset:7,setChannelVibrato:8,soundFontManager:9,stopAll:10,killNotes:11,muteChannel:12,addNewChannel:13,customCcChange:14,debugMessage:15,setMasterParameter:17,setDrums:18,transpose:19,highPerformanceMode:20,lockController:21,sequencerSpecific:22,requestSynthesizerSnapshot:23,setLogLevel:24,keyModifierManager:25,setEffectsGain:26,destroyWorklet:27},se={channelPropertyChange:0,eventCall:1,masterParameterChange:2,sequencerSpecific:3,synthesizerSnapshot:4,isFullyInitialized:5,soundfontError:6};var di="spessasynth-worklet-processor";var Jn={addMapping:0,deleteMapping:1,clearMappings:2};var _t={reloadSoundFont:0,addNewSoundFont:2,deleteSoundFont:3,rearrangeSoundFonts:4};var wt={backwards:0,forwards:1,shuffleOn:2,shuffleOff:3,index:4},oe={loadNewSongList:0,pause:1,stop:2,play:3,setTime:4,changeMIDIMessageSending:5,setPlaybackRate:6,setLoop:7,changeSong:8,getMIDI:9,setSkipToFirstNote:10,setPreservePlaybackState:11},Qe={midiEvent:0,songChange:1,timeChange:2,pause:3,getMIDI:4,midiError:5,metaEvent:6,loopCountChange:7,songListChange:8};function Qi(e,A){e===void 0&&(e={});for(let t in A)A.hasOwnProperty(t)&&!(t in e)&&(e[t]=A[t]);return e}var fi={skipToFirstNoteOn:!0,autoPlay:!0,preservePlaybackState:!1,initialPlaybackRate:1};var zt=class extends rt{isEmbedded=!1;constructor(A){super(),this._copyFromSequence(A),this.isEmbedded=A.embeddedSoundFont!==void 0}},Ip=Object.assign({duration:99999,firstNoteOn:0,loop:{start:0,end:123456},lastVoiceEventTick:123456,lyrics:[],lyricsTicks:[],copyright:"",midiPorts:[],midiPortChannelOffsets:[],tracksAmount:0,tempoChanges:[{ticks:0,tempo:120}],trackNames:[],fileName:"NOT_LOADED.mid",midiName:"Loading...",rawMidiName:new Uint8Array([76,111,97,100,105,110,103,46,46,46]),usedChannelsOnTrack:[],timeDivision:0,keyRange:{min:0,max:127},isEmbedded:!1,isKaraokeFile:!1,isMultiPort:!1,RMIDInfo:{},bankOffset:0,midiNameUsesFileName:!1,format:0},zt.prototype);var vs=class extends AudioWorkletProcessor{alive=!0;oneOutputMode=!1;constructor(A){super();let t=A.processorOptions;this.oneOutputMode=t.midiChannels===1;let n=(a,o)=>{this.postMessageToMainThread({messageType:a,messageData:o})},s=t?.startRenderingData,r=s?.snapshot;this.synthesizer=new bA(sampleRate,{effectsEnabled:!this.oneOutputMode,enableEventSystem:t?.enableEventSystem,midiChannels:16,initialTime:currentTime}),this.synthesizer.onEventCall=(a,o)=>{n(se.eventCall,{eventName:a,eventData:o})},this.synthesizer.onChannelPropertyChange=(a,o)=>n(se.channelPropertyChange,[o,a]),this.synthesizer.onMasterParameterChange=(a,o)=>n(se.masterParameterChange,[a,o]);let i=nt(t.soundfont);this.synthesizer.soundfontManager.reloadManager(i),this.synthesizer.processorInitialized.then(()=>{this.sequencer=new wA(this.synthesizer);let a=(o,I)=>{this.postMessageToMainThread({messageType:se.sequencerSpecific,messageData:{messageType:o,messageData:I}})};if(this.port.onmessage=o=>this.handleMessage(o.data),this.sequencer.onMIDIMessage=o=>{a(Qe.midiEvent,o)},this.sequencer.onTimeChange=o=>{a(Qe.timeChange,o)},this.sequencer.onPlaybackStop=o=>{a(Qe.pause,o)},this.sequencer.onSongChange=(o,I)=>{a(Qe.songChange,[o,I])},this.sequencer.onMetaEvent=(o,I)=>{a(Qe.metaEvent,[o,I])},this.sequencer.onLoopCountChange=o=>{a(Qe.loopCountChange,o)},this.sequencer.onSongListChange=o=>{let I=o.map(l=>new zt(l));this.postMessageToMainThread({messageType:se.sequencerSpecific,messageData:{messageType:Qe.songListChange,messageData:I}})},r!==void 0&&this.synthesizer.applySynthesizerSnapshot(r),s&&(at.SpessaSynthInfo("%cRendering enabled! Starting render.",Us.info),s.parsedMIDI)){s?.loopCount!==void 0?(this.sequencer.loopCount=s?.loopCount,this.sequencer.loop=!0):this.sequencer.loop=!1,this.synthesizer.voiceCap=1/0;let o=Qi(s.sequencerOptions,fi);this.sequencer.skipToFirstNoteOn=o.skipToFirstNoteOn,this.sequencer.preservePlaybackState=o.preservePlaybackState,this.sequencer.playbackRate=o.initialPlaybackRate;try{this.sequencer.loadNewSongList([s.parsedMIDI])}catch(I){console.error(I),a(Qe.midiError,I)}}this.postReady()})}postReady(){this.postMessageToMainThread({messageType:se.isFullyInitialized,messageData:void 0})}postMessageToMainThread(A){this.port.postMessage(A)}handleMessage(A){let t=A.messageData,n=A.channelNumber,s;if(n>=0&&(s=this.synthesizer.midiAudioChannels[n],s===void 0)){at.SpessaSynthWarn(`Trying to access channel ${n} which does not exist... ignoring!`);return}switch(A.messageType){case RA.midiMessage:this.synthesizer.processMessage(...t);break;case RA.customCcChange:s.setCustomController(t[0],t[1]);break;case RA.ccReset:n===-1?this.synthesizer.resetAllControllers():s.resetControllers();break;case RA.setChannelVibrato:if(n===-1)for(let u=0;u<this.synthesizer.midiAudioChannels.length;u++){let f=this.synthesizer.midiAudioChannels[u];t.rate===-1?f.disableAndLockGSNRPN():f.setVibrato(t.depth,t.rate,t.delay)}else t.rate===-1?s.disableAndLockGSNRPN():s.setVibrato(t.depth,t.rate,t.delay);break;case RA.stopAll:n===-1?this.synthesizer.stopAllChannels(t===1):s.stopAllNotes(t===1);break;case RA.killNotes:this.synthesizer.voiceKilling(t);break;case RA.muteChannel:s.muteChannel(t);break;case RA.addNewChannel:this.synthesizer.createMidiChannel(!0);break;case RA.debugMessage:console.debug(this.synthesizer);break;case RA.setMasterParameter:let r=t[0],i=t[1];this.synthesizer.setMasterParameter(r,i);break;case RA.setDrums:s.setDrums(t);break;case RA.transpose:n===-1?this.synthesizer.transposeAllChannels(t[0],t[1]):s.transposeChannel(t[0],t[1]);break;case RA.highPerformanceMode:this.synthesizer.highPerformanceMode=t;break;case RA.lockController:t[0]===-1?s.setPresetLock(t[1]):s.lockedControllers[t[0]]=t[1];break;case RA.sequencerSpecific:let a=this.sequencer,o=t.messageData;switch(t.messageType){default:break;case oe.loadNewSongList:try{let G=o[0].map(k=>k.duration?k:new Wt(k.binary,k.altName));a.loadNewSongList(G,o[1])}catch(S){console.error(S),this.postMessageToMainThread({messageType:se.sequencerSpecific,messageData:{messageType:Qe.midiError,messageData:S}})}break;case oe.pause:a.pause();break;case oe.play:a.play(o);break;case oe.stop:a.stop();break;case oe.setTime:a.currentTime=o;break;case oe.changeMIDIMessageSending:a.sendMIDIMessages=o;break;case oe.setPlaybackRate:a.playbackRate=o;break;case oe.setLoop:let[u,f]=o;a.loop=u,f===-1?a.loopCount=1/0:a.loopCount=f;break;case oe.changeSong:switch(o[0]){case wt.forwards:a.nextSong();break;case wt.backwards:a.previousSong();break;case wt.shuffleOff:a.shuffleMode=!1,a.songIndex=a.shuffledSongIndexes[a.songIndex];break;case wt.shuffleOn:a.shuffleMode=!0,a.shuffleSongIndexes(),a.songIndex=0,a.loadCurrentSong();break;case wt.index:a.songIndex=o[1],a.loadCurrentSong();break}break;case oe.getMIDI:this.postMessageToMainThread({messageType:se.sequencerSpecific,messageData:{messageType:Qe.getMIDI,messageData:a.midiData}});break;case oe.setSkipToFirstNote:a.skipToFirstNoteOn=o;break;case oe.setPreservePlaybackState:a.preservePlaybackState=o}break;case RA.soundFontManager:try{let u=this.synthesizer.soundfontManager,f=t[0],S=t[1],G;switch(f){case _t.addNewSoundFont:G=nt(S[0]),u.addNewSoundFont(G,S[1],S[2]),this.postMessageToMainThread({messageType:se.isFullyInitialized,messageData:void 0});break;case _t.reloadSoundFont:G=nt(S),u.reloadManager(G),this.postMessageToMainThread({messageType:se.isFullyInitialized,messageData:void 0});break;case _t.deleteSoundFont:u.deleteSoundFont(S);break;case _t.rearrangeSoundFonts:u.rearrangeSoundFonts(S)}}catch(u){this.postMessageToMainThread({messageType:se.soundfontError,messageData:u})}break;case RA.keyModifierManager:let l=t[0],c=this.synthesizer.keyModifierManager,h=t[1];switch(l){default:return;case Jn.addMapping:c.addMapping(...h);break;case Jn.clearMappings:c.clearMappings();break;case Jn.deleteMapping:c.deleteMapping(...h)}break;case RA.requestSynthesizerSnapshot:let B=st.createSynthesizerSnapshot(this.synthesizer);this.postMessageToMainThread({messageType:se.synthesizerSnapshot,messageData:B});break;case RA.setLogLevel:ts(t[0],t[1],t[2],t[3]);break;case RA.setEffectsGain:this.synthesizer.reverbGain=t[0],this.synthesizer.chorusGain=t[1];break;case RA.destroyWorklet:this.alive=!1,this.synthesizer.destroySynthProcessor(),delete this.synthesizer,delete this.sequencer.midiData,delete this.sequencer;break;default:at.SpessaSynthWarn("Unrecognized event:",t);break}}process(A,t){if(!this.alive)return!1;if(this.sequencer.processTick(),this.oneOutputMode){let n=t[0],s=[];for(let r=0;r<32;r+=2)s.push([n[r],n[r+1]]);this.synthesizer.renderAudioSplit([],[],s)}else this.synthesizer.renderAudioSplit(t[0],t[1],t.slice(2));return!0}};registerProcessor(di,vs);at.SpessaSynthInfo("%cProcessor successfully registered!",Us.recognized);
|
|
22
22
|
//# sourceMappingURL=worklet_processor.min.js.map
|