spessasynth_lib 3.25.21 → 3.25.23

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.
Files changed (80) hide show
  1. package/index.js +7 -7
  2. package/{midi_parser → midi}/basic_midi.js +6 -4
  3. package/{midi_parser → midi}/midi_loader.js +1 -1
  4. package/midi/midi_tools/get_note_times.js +154 -0
  5. package/{midi_parser → midi/midi_tools}/midi_editor.js +8 -8
  6. package/{midi_parser → midi/midi_tools}/midi_writer.js +3 -3
  7. package/{midi_parser → midi/midi_tools}/rmidi_writer.js +10 -10
  8. package/{midi_parser → midi/midi_tools}/used_keys_loaded.js +7 -7
  9. package/{midi_parser → midi}/xmf_loader.js +1 -1
  10. package/package.json +1 -1
  11. package/sequencer/sequencer_engine/events.js +3 -106
  12. package/sequencer/sequencer_engine/play.js +3 -5
  13. package/sequencer/sequencer_engine/process_event.js +1 -1
  14. package/sequencer/sequencer_engine/sequencer_engine.js +1 -3
  15. package/sequencer/sequencer_engine/song_control.js +3 -3
  16. package/sequencer/worklet_wrapper/sequencer.js +3 -3
  17. package/soundfont/basic_soundfont/modulator.js +1 -1
  18. package/soundfont/basic_soundfont/write_dls/modulator_converter.js +1 -1
  19. package/soundfont/dls/articulator_converter.js +1 -1
  20. package/synthetizer/audio_engine/README.md +5 -5
  21. package/synthetizer/audio_engine/{worklet_utilities/worklet_modulator.js → engine_components/compute_modulator.js} +12 -12
  22. package/synthetizer/audio_engine/{worklet_utilities → engine_components}/controller_tables.js +1 -1
  23. package/synthetizer/audio_engine/{worklet_methods/worklet_key_modifier.js → engine_components/key_modifier_manager.js} +24 -32
  24. package/synthetizer/audio_engine/{worklet_utilities → engine_components}/lowpass_filter.js +1 -1
  25. package/synthetizer/audio_engine/{worklet_utilities/worklet_processor_channel.js → engine_components/midi_audio_channel.js} +43 -43
  26. package/synthetizer/audio_engine/{worklet_utilities → engine_components}/modulation_envelope.js +6 -6
  27. package/synthetizer/audio_engine/{worklet_methods/worklet_soundfont_manager/worklet_soundfont_manager.js → engine_components/soundfont_manager.js} +3 -29
  28. package/synthetizer/audio_engine/{worklet_utilities → engine_components}/stereo_panner.js +3 -3
  29. package/synthetizer/audio_engine/{worklet_utilities/worklet_voice.js → engine_components/voice.js} +46 -40
  30. package/synthetizer/audio_engine/{worklet_utilities → engine_components}/volume_envelope.js +17 -17
  31. package/synthetizer/audio_engine/{worklet_utilities → engine_components}/wavetable_oscillator.js +3 -3
  32. package/synthetizer/audio_engine/{worklet_methods → engine_methods}/controller_control/controller_change.js +4 -4
  33. package/synthetizer/audio_engine/engine_methods/controller_control/master_parameters.js +48 -0
  34. package/synthetizer/audio_engine/{worklet_methods → engine_methods}/controller_control/reset_controllers.js +7 -7
  35. package/synthetizer/audio_engine/{worklet_methods/create_worklet_channel.js → engine_methods/create_midi_channel.js} +4 -4
  36. package/synthetizer/audio_engine/{worklet_methods → engine_methods}/data_entry/data_entry_coarse.js +3 -3
  37. package/synthetizer/audio_engine/{worklet_methods → engine_methods}/data_entry/data_entry_fine.js +3 -3
  38. package/synthetizer/audio_engine/{worklet_methods → engine_methods}/mute_channel.js +1 -1
  39. package/synthetizer/audio_engine/{worklet_methods → engine_methods}/note_on.js +13 -6
  40. package/synthetizer/audio_engine/{worklet_methods → engine_methods}/program_change.js +1 -1
  41. package/synthetizer/audio_engine/{worklet_methods → engine_methods}/render_voice.js +13 -13
  42. package/synthetizer/audio_engine/{worklet_methods → engine_methods}/stopping_notes/kill_note.js +1 -1
  43. package/synthetizer/audio_engine/{worklet_methods → engine_methods}/stopping_notes/note_off.js +1 -1
  44. package/synthetizer/audio_engine/{worklet_methods → engine_methods}/stopping_notes/stop_all_notes.js +1 -1
  45. package/synthetizer/audio_engine/{worklet_methods → engine_methods}/stopping_notes/voice_killing.js +2 -2
  46. package/synthetizer/audio_engine/{worklet_methods → engine_methods}/system_exclusive.js +37 -4
  47. package/synthetizer/audio_engine/{worklet_methods → engine_methods}/tuning_control/channel_pressure.js +3 -3
  48. package/synthetizer/audio_engine/{worklet_methods → engine_methods}/tuning_control/pitch_wheel.js +3 -3
  49. package/synthetizer/audio_engine/{worklet_methods → engine_methods}/tuning_control/poly_pressure.js +2 -2
  50. package/synthetizer/audio_engine/{worklet_methods → engine_methods}/tuning_control/set_master_tuning.js +1 -1
  51. package/synthetizer/audio_engine/{worklet_methods → engine_methods}/tuning_control/set_modulation_depth.js +2 -2
  52. package/synthetizer/audio_engine/{worklet_methods → engine_methods}/tuning_control/set_octave_tuning.js +1 -1
  53. package/synthetizer/audio_engine/{worklet_methods → engine_methods}/tuning_control/set_tuning.js +2 -2
  54. package/synthetizer/audio_engine/{worklet_methods → engine_methods}/tuning_control/transpose_channel.js +3 -3
  55. package/synthetizer/audio_engine/main_processor.js +50 -45
  56. package/synthetizer/audio_engine/message_protocol/worklet_message.js +1 -12
  57. package/synthetizer/audio_engine/snapshot/synthesizer_snapshot.js +3 -2
  58. package/synthetizer/worklet_processor.min.js +12 -12
  59. package/synthetizer/worklet_wrapper/key_modifier_manager.js +6 -4
  60. package/synthetizer/{audio_engine/worklet_methods/worklet_soundfont_manager → worklet_wrapper}/sfman_message.js +1 -1
  61. package/synthetizer/worklet_wrapper/synth_soundfont_manager.js +1 -3
  62. package/synthetizer/worklet_wrapper/synthetizer.js +6 -6
  63. package/synthetizer/worklet_wrapper/worklet_processor.js +142 -26
  64. package/synthetizer/audio_engine/worklet_methods/controller_control/master_parameters.js +0 -36
  65. /package/{midi_parser → midi}/README.md +0 -0
  66. /package/{midi_parser → midi}/midi_builder.js +0 -0
  67. /package/{midi_parser → midi}/midi_data.js +0 -0
  68. /package/{midi_parser → midi}/midi_message.js +0 -0
  69. /package/{midi_parser → midi}/midi_sequence.js +0 -0
  70. /package/synthetizer/audio_engine/{worklet_utilities → engine_components}/lfo.js +0 -0
  71. /package/synthetizer/audio_engine/{worklet_utilities → engine_components}/modulator_curves.js +0 -0
  72. /package/synthetizer/audio_engine/{worklet_utilities → engine_components}/unit_converter.js +0 -0
  73. /package/synthetizer/audio_engine/{worklet_methods → engine_methods}/portamento_time.js +0 -0
  74. /package/synthetizer/audio_engine/{worklet_methods → engine_methods}/soundfont_management/clear_sound_font.js +0 -0
  75. /package/synthetizer/audio_engine/{worklet_methods → engine_methods}/soundfont_management/get_preset.js +0 -0
  76. /package/synthetizer/audio_engine/{worklet_methods → engine_methods}/soundfont_management/reload_sound_font.js +0 -0
  77. /package/synthetizer/audio_engine/{worklet_methods → engine_methods}/soundfont_management/send_preset_list.js +0 -0
  78. /package/synthetizer/audio_engine/{worklet_methods → engine_methods}/soundfont_management/set_embedded_sound_font.js +0 -0
  79. /package/synthetizer/audio_engine/{worklet_methods → engine_methods}/stopping_notes/stop_all_channels.js +0 -0
  80. /package/synthetizer/audio_engine/{worklet_methods → engine_methods}/tuning_control/transpose_all_channels.js +0 -0
@@ -1,4 +1,4 @@
1
- var Rs=(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')});function Yn(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 Gs(e){return e.trim().replaceAll(".mid","").replaceAll(".kar","").replaceAll(".rmi","").replaceAll(".xmf","").replaceAll(".mxmf","").replaceAll("_"," ").trim()}function HA(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 Ms(e){let A=[];for(let t of e)(t===47||t===92)&&(t=10),A.push(t);return new Uint8Array(A)}var I={warn:"color: orange;",unrecognized:"color: red;",info:"color: aqua;",recognized:"color: lime",value:"color: yellow; background-color: black;"};var xs=!1,Ns=!0,Wt=!1,Ii=!0;function bs(e,A,t,n){xs=e,Ns=A,Wt=t,Ii=n}function p(...e){xs&&console.info(...e)}function Y(...e){Ns&&console.warn(...e)}function oe(...e){Wt&&console.group(...e)}function pA(...e){Wt&&console.groupCollapsed(...e)}function V(){Wt&&console.groupEnd()}var it={backwards:0,forwards:1,shuffleOn:2,shuffleOff:3,index:4},jA={loadNewSongList:0,pause:1,stop:2,play:3,setTime:4,changeMIDIMessageSending:5,setPlaybackRate:6,setLoop:7,changeSong:8,getMIDI:9,setSkipToFirstNote:10,setPreservePlaybackState:11},UA={midiEvent:0,songChange:1,timeChange:2,pause:3,getMIDI:4,midiError:5,metaEvent:6,loopCountChange:7,songListChange:8};var b=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,o)=>s+o.length,0),t=new b(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 Ls(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 F={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 at(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 y={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},Us={8:2,9:2,10:2,11:2,12:1,13:1,14:2};function re(e,A){let t=0;for(let n=8*(A-1);n>=0;n-=8)t|=e[e.currentIndex++]<<n;return t>>>0}function Rt(e,A){let t=new Array(A).fill(0);for(let n=A-1;n>=0;n--)t[n]=e&255,e>>=8;return t}function Ts(e,A){if(this.sendMIDIMessages&&e.messageStatusByte>=128){this.sendMIDIMessage([e.messageStatusByte,...e.messageData]);return}let t=at(e.messageStatusByte),n=this.midiPortChannelOffsets[this.midiPorts[A]]||0;switch(t.channel+=n,t.status){case F.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 E=this.playingNotes.findIndex(i=>i.midiNote===e.messageData[0]&&i.channel===t.channel);E!==-1&&this.playingNotes.splice(E,1)}break;case F.noteOff:this.synth.noteOff(t.channel,e.messageData[0]);let o=this.playingNotes.findIndex(E=>E.midiNote===e.messageData[0]&&E.channel===t.channel);o!==-1&&this.playingNotes.splice(o,1);break;case F.pitchBend:this.synth.pitchWheel(t.channel,e.messageData[1],e.messageData[0]);break;case F.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 F.programChange:if(this.midiData.isMultiPort&&this.midiData.usedChannelsOnTrack[A].size===0)return;this.synth.programChange(t.channel,e.messageData[0]);break;case F.polyPressure:this.synth.polyPressure(t.channel,e.messageData[0],e.messageData[1]);break;case F.channelPressure:this.synth.channelPressure(t.channel,e.messageData[0]);break;case F.systemExclusive:this.synth.systemExclusive(e.messageData,n);break;case F.setTempo:e.messageData.currentIndex=0;let r=6e7/re(e.messageData,3);this.oneTickToSeconds=60/(r*this.midiData.timeDivision),this.oneTickToSeconds===0&&(this.oneTickToSeconds=60/(120*this.midiData.timeDivision),Y("invalid tempo! falling back to 120 BPM"),r=120);break;case F.timeSignature:case F.endOfTrack:case F.midiChannelPrefix:case F.songPosition:case F.activeSensing:case F.keySignature:case F.sequenceNumber:case F.sequenceSpecific:case F.text:case F.lyric:case F.copyright:case F.trackName:case F.marker:case F.cuePoint:case F.instrumentName:case F.programName:break;case F.midiPort:this.assignMIDIPort(A,e.messageData[0]);break;case F.reset:this.synth.stopAllChannels(),this.synth.resetAllControllers();break;default:Y(`%cUnrecognized Event: %c${e.messageStatusByte}%c status byte: %c${Object.keys(F).find(E=>F[E]===t.status)}`,I.warn,I.unrecognized,I.warn,I.value);break}t.status>=0&&t.status<128&&this.post(UA.metaEvent,[e,A])}function vs(){for(let e=0;e<16;e++)this.synth.createWorkletChannel(!0)}function Hs(){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.post(UA.loopCountChange,this.loopCount)),this.setTimeTicks(this.midiData.loop.start);return}else if(e>=this.duration){if(s){this.loopCount!==1/0&&(this.loopCount--,this.post(UA.loopCountChange,this.loopCount)),this.setTimeTicks(this.midiData.loop.start);return}this.eventIndex[A]--,this.pause(!0),this.songs.length>1&&this.nextSong();return}}}function Ys(){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 It=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(o=>o.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}}};var zt=class extends It{isEmbedded=!1;constructor(A){super(),this._copyFromSequence(A),this.isEmbedded=A.embeddedSoundFont!==void 0}},ca={duration:99999,firstNoteOn:0,loop:{start:0,end:123456},lastVoiceEventTick:123456,lyrics:[],copyright:"",midiPorts:[],midiPortChannelOffsets:[],tracksAmount:0,tempoChanges:[{ticks:0,tempo:120}],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,RMIDInfo:{},bankOffset:0,midiNameUsesFileName:!1,format:0};function N(e,A){let t=0;for(let n=0;n<A;n++)t|=e[e.currentIndex++]<<n*8;return t>>>0}function Xe(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 AA(e,A){Xe(e,A,4)}function Ne(e,A){let t=A<<8|e;return t>32767?t-65536:t}function Js(e){return e>127?e-256:e}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,o="";for(let r=0;r<A;r++){let E=e[e.currentIndex++];if(!s){if((E<32||E>127)&&E!==10){if(n){s=!0;continue}else if(E===0){s=!0;continue}}o+=String.fromCharCode(E)}}return o}}function gt(e,A=0){let t=e.length;A>0&&(t=A);let n=new b(t);return TA(n,e,A),n}function fe(e){return gt(e,e.length+1)}function TA(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 BA=class{constructor(A,t,n){this.header=A,this.size=t,this.chunkData=n}};function IA(e,A=!0,t=!1){let n=eA(e,4),s=N(e,4),o;return A&&(o=new b(e.buffer.slice(e.currentIndex,e.currentIndex+s))),(A||t)&&(e.currentIndex+=s),s%2!==0&&e[e.currentIndex]===0&&e.currentIndex++,new BA(n,s,o)}function dA(e,A=void 0){let t=8+e.size;e.size%2!==0&&t++,A&&(t+=A.length);let n=new b(t);return A&&(n.set(A,n.currentIndex),n.currentIndex+=A.length),TA(n,e.header),AA(n,t-8-(A?.length||0)),n.set(e.chunkData,n.currentIndex),n}function z(e,A,t=!1,n=!1){if(t){let g=new Uint8Array(A.length+1);g.set(A),A=g}let s=8,o=s+A.length,r=A.length;o%2!==0&&o++;let E=e;n&&(o+=4,r+=4,s+=4,E="LIST");let i=new b(o);return TA(i,E),AA(i,r),n&&TA(i,e),i.set(A,s),i}function ZA(e,A){return e.find(t=>t.header!=="LIST"?!1:(t.chunkData.currentIndex=0,eA(t.chunkData,4)===A))}function yA(e){let A=0;for(;e;){let t=e[e.currentIndex++];if(A=A<<7|t&127,t>>7!==1)break}return A}function _t(e){let A=[e&127];for(e>>=7;e>0;)A.unshift(e&127|128),e>>=7;return A}var a={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},X=[];X[a.startAddrsOffset]={min:0,max:32768,def:0};X[a.endAddrOffset]={min:-32768,max:32768,def:0};X[a.startloopAddrsOffset]={min:-32768,max:32768,def:0};X[a.endloopAddrsOffset]={min:-32768,max:32768,def:0};X[a.startAddrsCoarseOffset]={min:0,max:32768,def:0};X[a.modLfoToPitch]={min:-12e3,max:12e3,def:0};X[a.vibLfoToPitch]={min:-12e3,max:12e3,def:0};X[a.modEnvToPitch]={min:-12e3,max:12e3,def:0};X[a.initialFilterFc]={min:1500,max:13500,def:13500};X[a.initialFilterQ]={min:0,max:960,def:0};X[a.modLfoToFilterFc]={min:-12e3,max:12e3,def:0};X[a.modEnvToFilterFc]={min:-12e3,max:12e3,def:0};X[a.endAddrsCoarseOffset]={min:-32768,max:32768,def:0};X[a.modLfoToVolume]={min:-960,max:960,def:0};X[a.chorusEffectsSend]={min:0,max:1e3,def:0};X[a.reverbEffectsSend]={min:0,max:1e3,def:0};X[a.pan]={min:-500,max:500,def:0};X[a.delayModLFO]={min:-12e3,max:5e3,def:-12e3};X[a.freqModLFO]={min:-16e3,max:4500,def:0};X[a.delayVibLFO]={min:-12e3,max:5e3,def:-12e3};X[a.freqVibLFO]={min:-16e3,max:4500,def:0};X[a.delayModEnv]={min:-32768,max:5e3,def:-32768};X[a.attackModEnv]={min:-32768,max:8e3,def:-32768};X[a.holdModEnv]={min:-12e3,max:5e3,def:-12e3};X[a.decayModEnv]={min:-12e3,max:8e3,def:-12e3};X[a.sustainModEnv]={min:0,max:1e3,def:0};X[a.releaseModEnv]={min:-7200,max:8e3,def:-12e3};X[a.keyNumToModEnvHold]={min:-1200,max:1200,def:0};X[a.keyNumToModEnvDecay]={min:-1200,max:1200,def:0};X[a.delayVolEnv]={min:-12e3,max:5e3,def:-12e3};X[a.attackVolEnv]={min:-12e3,max:8e3,def:-12e3};X[a.holdVolEnv]={min:-12e3,max:5e3,def:-12e3};X[a.decayVolEnv]={min:-12e3,max:8e3,def:-12e3};X[a.sustainVolEnv]={min:0,max:1440,def:0};X[a.releaseVolEnv]={min:-7200,max:8e3,def:-12e3};X[a.keyNumToVolEnvHold]={min:-1200,max:1200,def:0};X[a.keyNumToVolEnvDecay]={min:-1200,max:1200,def:0};X[a.startloopAddrsCoarseOffset]={min:-32768,max:32768,def:0};X[a.keyNum]={min:-1,max:127,def:-1};X[a.velocity]={min:-1,max:127,def:-1};X[a.initialAttenuation]={min:0,max:1440,def:0};X[a.endloopAddrsCoarseOffset]={min:-32768,max:32768,def:0};X[a.coarseTune]={min:-120,max:120,def:0};X[a.fineTune]={min:-12700,max:12700,def:0};X[a.scaleTuning]={min:0,max:1200,def:100};X[a.exclusiveClass]={min:0,max:99999,def:0};X[a.overridingRootKey]={min:-1,max:127,def:-1};X[a.sampleModes]={min:0,max:3,def:0};var U=class{generatorType=a.INVALID;generatorValue=0;constructor(A=a.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 Ks(e,A,t){let n=X[e]||{min:0,max:32768,def:0},s=A.find(g=>g.generatorType===e),o=0;s&&(o=s.generatorValue);let r=t.find(g=>g.generatorType===e),E=n.def;r&&(E=r.generatorValue);let i=E+o;return e===a.initialAttenuation?i:Math.max(n.min,Math.min(n.max,i))}var j={noController:0,noteOnVelocity:2,noteOnKeyNum:3,polyPressure:10,channelPressure:13,pitchWheel:14,pitchWheelRange:16,link:127},GA={linear:0,concave:1,convex:2,switch:3},_=class e{currentValue=0;sourceEnum;secondarySourceEnum;modulatorDestination;transformAmount;transformType;constructor(A,t,n,s,o){this.sourceEnum=A,this.modulatorDestination=n,this.secondarySourceEnum=t,this.transformAmount=s,this.transformType=o,this.modulatorDestination>58&&(this.modulatorDestination=a.INVALID),this.sourcePolarity=this.sourceEnum>>9&1,this.sourceDirection=this.sourceEnum>>8&1,this.sourceUsesCC=this.sourceEnum>>7&1,this.sourceIndex=this.sourceEnum&127,this.sourceCurveType=this.sourceEnum>>10&3,this.secSrcPolarity=this.secondarySourceEnum>>9&1,this.secSrcDirection=this.secondarySourceEnum>>8&1,this.secSrcUsesCC=this.secondarySourceEnum>>7&1,this.secSrcIndex=this.secondarySourceEnum&127,this.secSrcCurveType=this.secondarySourceEnum>>10&3,this.isEffectModulator=(this.sourceEnum===219||this.sourceEnum===221)&&this.secondarySourceEnum===0&&(this.modulatorDestination===a.reverbEffectsSend||this.modulatorDestination===a.chorusEffectsSend)}static copy(A){return new e(A.sourceEnum,A.secondarySourceEnum,A.modulatorDestination,A.transformAmount,A.transformType)}static isIdentical(A,t,n=!1){return A.sourceEnum===t.sourceEnum&&A.modulatorDestination===t.modulatorDestination&&A.secondarySourceEnum===t.secondarySourceEnum&&A.transformType===t.transformType&&(!n||A.transformAmount===t.transformAmount)}static debugString(A){function t(o,r){return Object.keys(o).find(E=>o[E]===r)}let n=t(GA,A.sourceCurveType);n+=A.sourcePolarity===0?" unipolar ":" bipolar ",n+=A.sourceDirection===0?"forwards ":"backwards ",A.sourceUsesCC?n+=t(y,A.sourceIndex):n+=t(j,A.sourceIndex);let s=t(GA,A.secSrcCurveType);return s+=A.secSrcPolarity===0?" unipolar ":" bipolar ",s+=A.secSrcCurveType===0?"forwards ":"backwards ",A.secSrcUsesCC?s+=t(y,A.secSrcIndex):s+=t(j,A.secSrcIndex),`Modulator:
1
+ var Rs=(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')});function Jn(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 Gs(e){return e.trim().replaceAll(".mid","").replaceAll(".kar","").replaceAll(".rmi","").replaceAll(".xmf","").replaceAll(".mxmf","").replaceAll("_"," ").trim()}function HA(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 xs(e){let A=[];for(let t of e)(t===47||t===92)&&(t=10),A.push(t);return new Uint8Array(A)}var I={warn:"color: orange;",unrecognized:"color: red;",info:"color: aqua;",recognized:"color: lime",value:"color: yellow; background-color: black;"};var Ms=!1,Ns=!0,Wt=!1,ai=!0;function bs(e,A,t,n){Ms=e,Ns=A,Wt=t,ai=n}function p(...e){Ms&&console.info(...e)}function H(...e){Ns&&console.warn(...e)}function ie(...e){Wt&&console.group(...e)}function pA(...e){Wt&&console.groupCollapsed(...e)}function P(){Wt&&console.groupEnd()}var it={backwards:0,forwards:1,shuffleOn:2,shuffleOff:3,index:4},$A={loadNewSongList:0,pause:1,stop:2,play:3,setTime:4,changeMIDIMessageSending:5,setPlaybackRate:6,setLoop:7,changeSong:8,getMIDI:9,setSkipToFirstNote:10,setPreservePlaybackState:11},LA={midiEvent:0,songChange:1,timeChange:2,pause:3,getMIDI:4,midiError:5,metaEvent:6,loopCountChange:7,songListChange:8};var b=class extends Uint8Array{currentIndex=0;constructor(A){super(A)}slice(A,t){let n=super.slice(A,t);return n.currentIndex=0,n}};function DA(e){let A=e.reduce((s,o)=>s+o.length,0),t=new b(A),n=0;for(let s of e)t.set(s,n),n+=s.length;return t}var ZA=class{ticks;messageStatusByte;messageData;constructor(A,t,n){this.ticks=A,this.messageStatusByte=t,this.messageData=n}};function Ls(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 F={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 at(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 y={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},Us={8:2,9:2,10:2,11:2,12:1,13:1,14:2};function XA(e,A){let t=0;for(let n=8*(A-1);n>=0;n-=8)t|=e[e.currentIndex++]<<n;return t>>>0}function Rt(e,A){let t=new Array(A).fill(0);for(let n=A-1;n>=0;n--)t[n]=e&255,e>>=8;return t}function Ts(e,A){if(this.sendMIDIMessages&&e.messageStatusByte>=128){this.sendMIDIMessage([e.messageStatusByte,...e.messageData]);return}let t=at(e.messageStatusByte),n=this.midiPortChannelOffsets[this.midiPorts[A]]||0;switch(t.channel+=n,t.status){case F.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 g=this.playingNotes.findIndex(i=>i.midiNote===e.messageData[0]&&i.channel===t.channel);g!==-1&&this.playingNotes.splice(g,1)}break;case F.noteOff:this.synth.noteOff(t.channel,e.messageData[0]);let o=this.playingNotes.findIndex(g=>g.midiNote===e.messageData[0]&&g.channel===t.channel);o!==-1&&this.playingNotes.splice(o,1);break;case F.pitchBend:this.synth.pitchWheel(t.channel,e.messageData[1],e.messageData[0]);break;case F.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 F.programChange:if(this.midiData.isMultiPort&&this.midiData.usedChannelsOnTrack[A].size===0)return;this.synth.programChange(t.channel,e.messageData[0]);break;case F.polyPressure:this.synth.polyPressure(t.channel,e.messageData[0],e.messageData[1]);break;case F.channelPressure:this.synth.channelPressure(t.channel,e.messageData[0]);break;case F.systemExclusive:this.synth.systemExclusive(e.messageData,n);break;case F.setTempo:e.messageData.currentIndex=0;let r=6e7/XA(e.messageData,3);this.oneTickToSeconds=60/(r*this.midiData.timeDivision),this.oneTickToSeconds===0&&(this.oneTickToSeconds=60/(120*this.midiData.timeDivision),H("invalid tempo! falling back to 120 BPM"),r=120);break;case F.timeSignature:case F.endOfTrack:case F.midiChannelPrefix:case F.songPosition:case F.activeSensing:case F.keySignature:case F.sequenceNumber:case F.sequenceSpecific:case F.text:case F.lyric:case F.copyright:case F.trackName:case F.marker:case F.cuePoint:case F.instrumentName:case F.programName:break;case F.midiPort:this.assignMIDIPort(A,e.messageData[0]);break;case F.reset:this.synth.stopAllChannels(),this.synth.resetAllControllers();break;default:H(`%cUnrecognized Event: %c${e.messageStatusByte}%c status byte: %c${Object.keys(F).find(g=>F[g]===t.status)}`,I.warn,I.unrecognized,I.warn,I.value);break}t.status>=0&&t.status<128&&this.post(LA.metaEvent,[e,A])}function vs(){for(let e=0;e<16;e++)this.synth.createWorkletChannel(!0)}function Hs(){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.post(LA.loopCountChange,this.loopCount)),this.setTimeTicks(this.midiData.loop.start);return}else if(e>=this.duration){if(s){this.loopCount!==1/0&&(this.loopCount--,this.post(LA.loopCountChange,this.loopCount)),this.setTimeTicks(this.midiData.loop.start);return}this.eventIndex[A]--,this.pause(!0),this.songs.length>1&&this.nextSong();return}}}function Ys(){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 It=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(o=>o.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}}};var zt=class extends It{isEmbedded=!1;constructor(A){super(),this._copyFromSequence(A),this.isEmbedded=A.embeddedSoundFont!==void 0}},Ba={duration:99999,firstNoteOn:0,loop:{start:0,end:123456},lastVoiceEventTick:123456,lyrics:[],copyright:"",midiPorts:[],midiPortChannelOffsets:[],tracksAmount:0,tempoChanges:[{ticks:0,tempo:120}],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,RMIDInfo:{},bankOffset:0,midiNameUsesFileName:!1,format:0};function N(e,A){let t=0;for(let n=0;n<A;n++)t|=e[e.currentIndex++]<<n*8;return t>>>0}function Xe(e,A,t){for(let n=0;n<t;n++)e[e.currentIndex++]=A>>n*8&255}function Y(e,A){e[e.currentIndex++]=A&255,e[e.currentIndex++]=A>>8}function eA(e,A){Xe(e,A,4)}function be(e,A){let t=A<<8|e;return t>32767?t-65536:t}function Js(e){return e>127?e-256:e}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,o="";for(let r=0;r<A;r++){let g=e[e.currentIndex++];if(!s){if((g<32||g>127)&&g!==10){if(n){s=!0;continue}else if(g===0){s=!0;continue}}o+=String.fromCharCode(g)}}return o}}function gt(e,A=0){let t=e.length;A>0&&(t=A);let n=new b(t);return vA(n,e,A),n}function me(e){return gt(e,e.length+1)}function vA(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 hA=class{constructor(A,t,n){this.header=A,this.size=t,this.chunkData=n}};function IA(e,A=!0,t=!1){let n=$(e,4),s=N(e,4),o;return A&&(o=new b(e.buffer.slice(e.currentIndex,e.currentIndex+s))),(A||t)&&(e.currentIndex+=s),s%2!==0&&e[e.currentIndex]===0&&e.currentIndex++,new hA(n,s,o)}function dA(e,A=void 0){let t=8+e.size;e.size%2!==0&&t++,A&&(t+=A.length);let n=new b(t);return A&&(n.set(A,n.currentIndex),n.currentIndex+=A.length),vA(n,e.header),eA(n,t-8-(A?.length||0)),n.set(e.chunkData,n.currentIndex),n}function z(e,A,t=!1,n=!1){if(t){let E=new Uint8Array(A.length+1);E.set(A),A=E}let s=8,o=s+A.length,r=A.length;o%2!==0&&o++;let g=e;n&&(o+=4,r+=4,s+=4,g="LIST");let i=new b(o);return vA(i,g),eA(i,r),n&&vA(i,e),i.set(A,s),i}function WA(e,A){return e.find(t=>t.header!=="LIST"?!1:(t.chunkData.currentIndex=0,$(t.chunkData,4)===A))}function yA(e){let A=0;for(;e;){let t=e[e.currentIndex++];if(A=A<<7|t&127,t>>7!==1)break}return A}function _t(e){let A=[e&127];for(e>>=7;e>0;)A.unshift(e&127|128),e>>=7;return A}var a={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},X=[];X[a.startAddrsOffset]={min:0,max:32768,def:0};X[a.endAddrOffset]={min:-32768,max:32768,def:0};X[a.startloopAddrsOffset]={min:-32768,max:32768,def:0};X[a.endloopAddrsOffset]={min:-32768,max:32768,def:0};X[a.startAddrsCoarseOffset]={min:0,max:32768,def:0};X[a.modLfoToPitch]={min:-12e3,max:12e3,def:0};X[a.vibLfoToPitch]={min:-12e3,max:12e3,def:0};X[a.modEnvToPitch]={min:-12e3,max:12e3,def:0};X[a.initialFilterFc]={min:1500,max:13500,def:13500};X[a.initialFilterQ]={min:0,max:960,def:0};X[a.modLfoToFilterFc]={min:-12e3,max:12e3,def:0};X[a.modEnvToFilterFc]={min:-12e3,max:12e3,def:0};X[a.endAddrsCoarseOffset]={min:-32768,max:32768,def:0};X[a.modLfoToVolume]={min:-960,max:960,def:0};X[a.chorusEffectsSend]={min:0,max:1e3,def:0};X[a.reverbEffectsSend]={min:0,max:1e3,def:0};X[a.pan]={min:-500,max:500,def:0};X[a.delayModLFO]={min:-12e3,max:5e3,def:-12e3};X[a.freqModLFO]={min:-16e3,max:4500,def:0};X[a.delayVibLFO]={min:-12e3,max:5e3,def:-12e3};X[a.freqVibLFO]={min:-16e3,max:4500,def:0};X[a.delayModEnv]={min:-32768,max:5e3,def:-32768};X[a.attackModEnv]={min:-32768,max:8e3,def:-32768};X[a.holdModEnv]={min:-12e3,max:5e3,def:-12e3};X[a.decayModEnv]={min:-12e3,max:8e3,def:-12e3};X[a.sustainModEnv]={min:0,max:1e3,def:0};X[a.releaseModEnv]={min:-7200,max:8e3,def:-12e3};X[a.keyNumToModEnvHold]={min:-1200,max:1200,def:0};X[a.keyNumToModEnvDecay]={min:-1200,max:1200,def:0};X[a.delayVolEnv]={min:-12e3,max:5e3,def:-12e3};X[a.attackVolEnv]={min:-12e3,max:8e3,def:-12e3};X[a.holdVolEnv]={min:-12e3,max:5e3,def:-12e3};X[a.decayVolEnv]={min:-12e3,max:8e3,def:-12e3};X[a.sustainVolEnv]={min:0,max:1440,def:0};X[a.releaseVolEnv]={min:-7200,max:8e3,def:-12e3};X[a.keyNumToVolEnvHold]={min:-1200,max:1200,def:0};X[a.keyNumToVolEnvDecay]={min:-1200,max:1200,def:0};X[a.startloopAddrsCoarseOffset]={min:-32768,max:32768,def:0};X[a.keyNum]={min:-1,max:127,def:-1};X[a.velocity]={min:-1,max:127,def:-1};X[a.initialAttenuation]={min:0,max:1440,def:0};X[a.endloopAddrsCoarseOffset]={min:-32768,max:32768,def:0};X[a.coarseTune]={min:-120,max:120,def:0};X[a.fineTune]={min:-12700,max:12700,def:0};X[a.scaleTuning]={min:0,max:1200,def:100};X[a.exclusiveClass]={min:0,max:99999,def:0};X[a.overridingRootKey]={min:-1,max:127,def:-1};X[a.sampleModes]={min:0,max:3,def:0};var U=class{generatorType=a.INVALID;generatorValue=0;constructor(A=a.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 Ks(e,A,t){let n=X[e]||{min:0,max:32768,def:0},s=A.find(E=>E.generatorType===e),o=0;s&&(o=s.generatorValue);let r=t.find(E=>E.generatorType===e),g=n.def;r&&(g=r.generatorValue);let i=g+o;return e===a.initialAttenuation?i:Math.max(n.min,Math.min(n.max,i))}var j={noController:0,noteOnVelocity:2,noteOnKeyNum:3,polyPressure:10,channelPressure:13,pitchWheel:14,pitchWheelRange:16,link:127},RA={linear:0,concave:1,convex:2,switch:3},_=class e{currentValue=0;sourceEnum;secondarySourceEnum;modulatorDestination;transformAmount;transformType;constructor(A,t,n,s,o){this.sourceEnum=A,this.modulatorDestination=n,this.secondarySourceEnum=t,this.transformAmount=s,this.transformType=o,this.modulatorDestination>58&&(this.modulatorDestination=a.INVALID),this.sourcePolarity=this.sourceEnum>>9&1,this.sourceDirection=this.sourceEnum>>8&1,this.sourceUsesCC=this.sourceEnum>>7&1,this.sourceIndex=this.sourceEnum&127,this.sourceCurveType=this.sourceEnum>>10&3,this.secSrcPolarity=this.secondarySourceEnum>>9&1,this.secSrcDirection=this.secondarySourceEnum>>8&1,this.secSrcUsesCC=this.secondarySourceEnum>>7&1,this.secSrcIndex=this.secondarySourceEnum&127,this.secSrcCurveType=this.secondarySourceEnum>>10&3,this.isEffectModulator=(this.sourceEnum===219||this.sourceEnum===221)&&this.secondarySourceEnum===0&&(this.modulatorDestination===a.reverbEffectsSend||this.modulatorDestination===a.chorusEffectsSend)}static copy(A){return new e(A.sourceEnum,A.secondarySourceEnum,A.modulatorDestination,A.transformAmount,A.transformType)}static isIdentical(A,t,n=!1){return A.sourceEnum===t.sourceEnum&&A.modulatorDestination===t.modulatorDestination&&A.secondarySourceEnum===t.secondarySourceEnum&&A.transformType===t.transformType&&(!n||A.transformAmount===t.transformAmount)}static debugString(A){function t(o,r){return Object.keys(o).find(g=>o[g]===r)}let n=t(RA,A.sourceCurveType);n+=A.sourcePolarity===0?" unipolar ":" bipolar ",n+=A.sourceDirection===0?"forwards ":"backwards ",A.sourceUsesCC?n+=t(y,A.sourceIndex):n+=t(j,A.sourceIndex);let s=t(RA,A.secSrcCurveType);return s+=A.secSrcPolarity===0?" unipolar ":" bipolar ",s+=A.secSrcCurveType===0?"forwards ":"backwards ",A.secSrcUsesCC?s+=t(y,A.secSrcIndex):s+=t(j,A.secSrcIndex),`Modulator:
2
2
  Source: ${n}
3
3
  Secondary source: ${s}
4
4
  Destination: ${t(a,A.modulatorDestination)}
@@ -6,16 +6,16 @@ var Rs=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(A,t)=>(
6
6
  Transform type: ${A.transformType}
7
7
 
8
8
 
9
- `}sumTransform(A){return new e(this.sourceEnum,this.secondarySourceEnum,this.modulatorDestination,this.transformAmount+A.transformAmount,this.transformType)}},Jn=960,Kn=GA.concave;function ie(e,A,t,n,s){return e<<10|A<<9|t<<8|n<<7|s}var gi=[new _(ie(Kn,0,1,0,j.noteOnVelocity),0,a.initialAttenuation,Jn,0),new _(129,0,a.vibLfoToPitch,50,0),new _(ie(Kn,0,1,1,y.mainVolume),0,a.initialAttenuation,Jn,0),new _(13,0,a.vibLfoToPitch,50,0),new _(526,16,a.fineTune,12700,0),new _(650,0,a.pan,500,0),new _(ie(Kn,0,1,1,y.expressionController),0,a.initialAttenuation,Jn,0),new _(219,0,a.reverbEffectsSend,200,0),new _(221,0,a.chorusEffectsSend,200,0)],Ci=[new _(ie(GA.linear,0,0,0,j.polyPressure),0,a.vibLfoToPitch,50,0),new _(ie(GA.linear,0,0,1,y.tremoloDepth),0,a.modLfoToVolume,24,0),new _(ie(GA.convex,1,0,1,y.attackTime),0,a.attackVolEnv,6e3,0),new _(ie(GA.linear,1,0,1,y.releaseTime),0,a.releaseVolEnv,3600,0),new _(ie(GA.linear,1,0,1,y.brightness),0,a.initialFilterFc,6e3,0),new _(ie(GA.linear,1,0,1,y.filterResonance),0,a.initialFilterQ,250,0)],qs=gi.concat(Ci);var MA=128,jt=147,be=new Int16Array(jt).fill(0),xA=(e,A)=>be[e]=A<<7;xA(y.mainVolume,100);xA(y.balance,64);xA(y.expressionController,127);xA(y.pan,64);xA(y.portamentoOnOff,127);xA(y.filterResonance,64);xA(y.releaseTime,64);xA(y.attackTime,64);xA(y.brightness,64);xA(y.decayTime,64);xA(y.vibratoRate,64);xA(y.vibratoDepth,64);xA(y.vibratoDelay,64);xA(y.generalPurposeController6,64);xA(y.generalPurposeController8,64);xA(y.RPNLsb,127);xA(y.RPNMsb,127);xA(y.NRPNLsb,127);xA(y.NRPNMsb,127);var $t=1;be[y.portamentoControl]=$t;xA(MA+j.pitchWheel,64);xA(MA+j.pitchWheelRange,2);var cA={channelTuning:0,channelTransposeFine:1,modulationMultiplier:2,masterTuning:3,channelTuningSemitones:4},qn=Object.keys(cA).length,On=new Float32Array(qn);On[cA.modulationMultiplier]=1;var YA={Idle:0,RPCoarse:1,RPFine:2,NRPCoarse:3,NRPFine:4,DataCoarse:5,DataFine:6},Os={velocityOverride:128};var An="gs";function Ct(e){return e.messageData[0]===67&&e.messageData[2]===76&&e.messageData[5]===126&&e.messageData[6]===0}function en(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 tn(e){return e.messageData[0]===65&&e.messageData[2]===66&&e.messageData[6]===127}function nn(e){return e.messageData[0]===126&&e.messageData[2]===9&&e.messageData[3]===1}function sn(e){return e.messageData[0]===126&&e.messageData[2]===9&&e.messageData[3]===3}var rn=64,Vs=121;function Ps(e){return e==="gm2"?Vs:0}function $A(e){return e===120||e===126||e===127}function on(e){return $A(e)||e===rn||e===Vs}function Et(e,A,t,n,s,o){let r=e,E=0;if(n)FA(t)?on(A)||(r=A):t==="gm2"&&(r=A);else{let i=!0;switch(t){case"gm":p(`%cIgnoring the Bank Select (${A}), as the synth is in GM mode.`,I.info),i=!1;break;case"xg":i=on(A),$A(A)?E=2:o%16!==9&&(E=1);break;case"gm2":A===120?E=2:o%16!==9&&(E=1)}s&&(A=128),A===128&&!s&&(A=e),i&&(r=A)}return{newBank:r,drumsStatus:E}}function ht(e,A,t,n){return n?t?$A(e)?e:128:on(e)||A===0&&e!==0?e:on(A)?0:A:t?128:e}function FA(e){return e==="gm2"||e==="xg"}function Vn(e){return new PA(e,F.systemExclusive,new b([65,16,66,18,64,0,127,0,65,247]))}function Bt(e,A,t,n){return new PA(n,F.controllerChange|e%16,new b([A,t]))}function Ei(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],o=128-(64+t+21+1)%128;return new PA(A,F.systemExclusive,new b([...n,o,247]))}function Zs(e=[],A=[],t=[],n=[]){let s=this;pA("%cApplying changes to the MIDI file...",I.info),p("Desired program changes:",e),p("Desired CC changes:",A),p("Desired channels to clear:",t),p("Desired channels to transpose:",n);let o=new Set;e.forEach(M=>{o.add(M.channel)});let r="gs",E=!1,i=Array(s.tracks.length).fill(0),g=s.tracks.length;function B(){let M=0,w=1/0;return s.tracks.forEach((G,C)=>{i[C]>=G.length||G[i[C]].ticks<w&&(M=C,w=G[i[C]].ticks)}),M}let c=s.midiPorts.slice(),Q={},h=0;function m(M,w){s.usedChannelsOnTrack[M].size!==0&&(h===0&&(h+=16,Q[w]=0),Q[w]===void 0&&(Q[w]=h,h+=16),c[M]=w)}s.midiPorts.forEach((M,w)=>{m(w,M)});let f=h,S=Array(f).fill(!0),x=Array(f).fill(0),D=Array(f).fill(0);for(n.forEach(M=>{let w=Math.trunc(M.keyShift),G=M.keyShift-w;x[M.channel]=w,D[M.channel]=G});g>0;){let M=B(),w=s.tracks[M];if(i[M]>=w.length){g--;continue}let G=i[M]++,C=w[G],L=()=>{w.splice(G,1),i[M]--},Z=(hA,sA=0)=>{w.splice(G+sA,0,hA),i[M]++},EA=Q[c[M]]||0;if(C.messageStatusByte===F.midiPort){m(M,C.messageData[0]);continue}if(C.messageStatusByte<=F.sequenceSpecific&&C.messageStatusByte>=F.sequenceNumber)continue;let tA=C.messageStatusByte&240,T=C.messageStatusByte&15,$=T+EA;if(t.indexOf($)!==-1){L();continue}switch(tA){case F.noteOn:if(S[$]){S[$]=!1,A.filter(CA=>CA.channel===$).forEach(CA=>{let v=Bt(T,CA.controllerNumber,CA.controllerValue,C.ticks);Z(v)});let oA=D[$];if(oA!==0){let CA=oA*64+64,v=Bt(T,y.RPNMsb,0,C.ticks),J=Bt(T,y.RPNLsb,1,C.ticks),W=Bt($,y.dataEntryMsb,CA,C.ticks),q=Bt(T,y.lsbForControl6DataEntry,0,C.ticks);Z(q),Z(W),Z(J),Z(v)}if(o.has($)){let CA=e.find(rA=>rA.channel===$),v=Math.max(0,Math.min(CA.bank,127)),J=CA.program;p(`%cSetting %c${CA.channel}%c to %c${v}:${J}%c. Track num: %c${M}`,I.info,I.recognized,I.info,I.recognized,I.info,I.recognized);let W=new PA(C.ticks,F.programChange|T,new b([J]));Z(W);let q=(rA,JA)=>{let Ie=Bt(T,rA?y.lsbForControl0BankSelect:y.bankSelect,JA,C.ticks);Z(Ie)};FA(r)?CA.isDrum?(p(`%cAdding XG Drum change on track %c${M}`,I.recognized,I.value),q(!1,$A(v)?v:127),q(!0,0)):v===rn?(q(!1,rn),q(!0,0)):(q(!1,0),q(!0,v)):(q(!1,v),CA.isDrum&&T!==9&&(p(`%cAdding GS Drum change on track %c${M}`,I.recognized,I.value),Z(Ei(T,C.ticks))))}}C.messageData[0]+=x[$];break;case F.noteOff:C.messageData[0]+=x[$];break;case F.programChange:if(o.has($)){L();continue}break;case F.controllerChange:let hA=C.messageData[0];if(A.find(oA=>oA.channel===$&&hA===oA.controllerNumber)!==void 0){L();continue}if((hA===y.bankSelect||hA===y.lsbForControl0BankSelect)&&o.has($)){L();continue}break;case F.systemExclusive:if(Ct(C))p("%cXG system on detected",I.info),r="xg",E=!0;else if(C.messageData[0]===67&&C.messageData[2]===76&&C.messageData[3]===8&&C.messageData[5]===3)o.has(C.messageData[4]+EA)&&L();else if(tn(C)){E=!0,p("%cGS on detected!",I.recognized);break}else(nn(C)||sn(C))&&(p("%cGM/2 on detected, removing!",I.info),L(),E=!1)}}if(!E&&e.length>0){let M=0;s.tracks[0][0].messageStatusByte===F.trackName&&M++,s.tracks[0].splice(M,0,Vn(0)),p("%cGS on not detected. Adding it.",I.info)}this.flush(),V()}function Xs(e){let A=[],t=[],n=[],s=[];e.channelSnapshots.forEach((o,r)=>{if(o.isMuted){t.push(r);return}let E=o.channelTransposeKeyShift+o.customControllers[cA.channelTransposeFine]/100;E!==0&&A.push({channel:r,keyShift:E}),o.lockPreset&&n.push({channel:r,program:o.program,bank:o.bank,isDrum:o.drumChannel}),o.lockedControllers.forEach((i,g)=>{if(!i||g>127||g===y.bankSelect)return;let B=o.midiControllers[g]>>7;s.push({channel:r,controllerNumber:g,controllerValue:B})})}),this.modifyMIDI(n,s,t,A)}var uA={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"},Le="utf-8",hi="Created using SpessaSynth";function Ws(e,A,t=0,n="Shift_JIS",s={},o=!0){let r=this;if(oe("%cWriting the RMIDI File...",I.info),p(`%cConfiguration: Bank offset: %c${t}%c, encoding: %c${n}`,I.info,I.value,I.info,I.value),p("metadata",s),p("Initial bank offset",r.bankOffset),o){let x=function(){let G=0,C=1/0;return r.tracks.forEach((L,Z)=>{f[Z]>=L.length||L[f[Z]].ticks<C&&(G=Z,C=L[f[Z]].ticks)}),G},h="gm",m=[],f=Array(r.tracks.length).fill(0),S=r.tracks.length,D=Array(r.tracks.length).fill(0),M=16+r.midiPortChannelOffsets.reduce((G,C)=>C>G?C:G),w=[];for(let G=0;G<M;G++)w.push({program:0,drums:G%16===9,lastBank:void 0,lastBankLSB:void 0,hasBankSelect:!1});for(;S>0;){let G=x(),C=r.tracks[G];if(f[G]>=C.length){S--;continue}let L=C[f[G]];f[G]++;let Z=r.midiPortChannelOffsets[D[G]];if(L.messageStatusByte===F.midiPort){D[G]=L.messageData[0];continue}let EA=L.messageStatusByte&240;if(EA!==F.controllerChange&&EA!==F.programChange&&EA!==F.systemExclusive)continue;if(EA===F.systemExclusive){if(!en(L)){Ct(L)?h="xg":tn(L)?h="gs":nn(L)?(h="gm",m.push({tNum:G,e:L})):sn(L)&&(h="gm2");continue}let oA=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][L.messageData[5]&15]+Z;w[oA].drums=!!(L.messageData[7]>0&&L.messageData[5]>>4);continue}let tA=(L.messageStatusByte&15)+Z,T=w[tA];if(EA===F.programChange){let oA=FA(h),CA=L.messageData[0];T.drums?A.presets.findIndex(q=>q.program===CA&&q.isDrumPreset(oA,!0))===-1&&(L.messageData[0]=A.presets.find(q=>q.isDrumPreset(oA))?.program||0,p(`%cNo drum preset %c${CA}%c. Channel %c${tA}%c. Changing program to ${L.messageData[0]}.`,I.info,I.unrecognized,I.info,I.recognized,I.info)):A.presets.findIndex(q=>q.program===CA&&!q.isDrumPreset(oA))===-1&&(L.messageData[0]=A.presets.find(q=>!q.isDrumPreset(oA))?.program||0,p(`%cNo preset %c${CA}%c. Channel %c${tA}%c. Changing program to ${L.messageData[0]}.`,I.info,I.unrecognized,I.info,I.recognized,I.info)),T.program=L.messageData[0];let v=Math.max(0,T.lastBank?.messageData[1]-r.bankOffset),J=T?.lastBankLSB?.messageData[1]-r.bankOffset||0;if(T.lastBank===void 0)continue;let W=ht(v,J,T.drums,oA);if(A.presets.findIndex(q=>q.bank===W&&q.program===L.messageData[0])===-1){let q=A.presets.find(rA=>rA.program===L.messageData[0])?.bank+t||t;T.lastBank.messageData[1]=q,T?.lastBankLSB?.messageData&&(T.lastBankLSB.messageData[1]=q),p(`%cNo preset %c${W}:${L.messageData[0]}%c. Channel %c${tA}%c. Changing bank to ${q}.`,I.info,I.unrecognized,I.info,I.recognized,I.info)}else{let q=W;FA(h)&&W===128&&(W=127);let rA=(W===128?128:q)+t;T.lastBank.messageData[1]=rA,T?.lastBankLSB?.messageData&&!T.drums&&(T.lastBankLSB.messageData[1]=T.lastBankLSB.messageData[1]-r.bankOffset+t),p(`%cPreset %c${W}:${L.messageData[0]}%c exists. Channel %c${tA}%c. Changing bank to ${rA}.`,I.info,I.recognized,I.info,I.recognized,I.info)}continue}let $=L.messageData[0]===y.lsbForControl0BankSelect;if(L.messageData[0]!==y.bankSelect&&!$)continue;T.hasBankSelect=!0;let hA=L.messageData[1],sA=Et(T?.lastBank?.messageData[1]||0,hA,h,$,T.drums,tA);sA.drumsStatus===2?T.drums=!0:sA.drumsStatus===1&&(T.drums=!1),$?T.lastBankLSB=L:T.lastBank=L}if(w.forEach((G,C)=>{if(G.hasBankSelect===!0)return;let L=C%16,Z=F.programChange|L,EA=Math.floor(C/16)*16,tA=r.midiPortChannelOffsets.indexOf(EA),T=r.tracks.find((oA,CA)=>r.midiPorts[CA]===tA&&r.usedChannelsOnTrack[CA].has(L));if(T===void 0)return;let $=T.findIndex(oA=>oA.messageStatusByte===Z);if($===-1){let oA=T.findIndex(J=>J.messageStatusByte>128&&J.messageStatusByte<240&&(J.messageStatusByte&15)===L);if(oA===-1)return;let CA=T[oA].ticks,v=A.getPreset(0,0).program;T.splice(oA,0,new PA(CA,F.programChange|L,new b([v]))),$=oA}p(`%cAdding bank select for %c${C}`,I.info,I.recognized);let hA=T[$].ticks,sA=A.getPreset(0,G.program,FA(h))?.bank+t||t;T.splice($,0,new PA(hA,F.controllerChange|L,new b([y.bankSelect,sA])))}),h!=="gs"&&!FA(h)){for(let C of m)r.tracks[C.tNum].splice(r.tracks[C.tNum].indexOf(C.e),1);let G=0;r.tracks[0][0].messageStatusByte===F.trackName&&G++,r.tracks[0].splice(G,0,Vn(0))}}let E=new b(r.writeMIDI().buffer),i=[gt("INFO")],g=new TextEncoder;if(i.push(z(uA.software,g.encode("SpessaSynth"),!0)),s.name!==void 0?(i.push(z(uA.name,g.encode(s.name),!0)),n=Le):i.push(z(uA.name,r.rawMidiName,!0)),s.creationDate!==void 0)n=Le,i.push(z(uA.creationDate,g.encode(s.creationDate),!0));else{let h=new Date().toLocaleString(void 0,{weekday:"long",year:"numeric",month:"long",day:"numeric",hour:"numeric",minute:"numeric"});i.push(z(uA.creationDate,fe(h),!0))}if(s.comment!==void 0&&(n=Le,i.push(z(uA.comment,g.encode(s.comment)))),s.engineer!==void 0&&i.push(z(uA.engineer,g.encode(s.engineer),!0)),s.album!==void 0&&(n=Le,i.push(z(uA.album,g.encode(s.album),!0)),i.push(z(uA.album2,g.encode(s.album),!0))),s.artist!==void 0&&(n=Le,i.push(z(uA.artist,g.encode(s.artist),!0))),s.genre!==void 0&&(n=Le,i.push(z(uA.genre,g.encode(s.genre),!0))),s.picture!==void 0&&i.push(z(uA.picture,new Uint8Array(s.picture))),s.copyright!==void 0)n=Le,i.push(z(uA.copyright,g.encode(s.copyright),!0));else{let h=r.copyright.length>0?r.copyright:hi;i.push(z(uA.copyright,fe(h)))}let B=new b(2);Xe(B,t,2),i.push(z(uA.bankOffset,B)),s.midiEncoding!==void 0&&(i.push(z(uA.midiEncoding,g.encode(s.midiEncoding))),n=Le),i.push(z(uA.encoding,fe(n)));let c=kA(i),Q=kA([gt("RMID"),z("data",E),z("LIST",c),e]);return p("%cFinished!",I.info),V(),z("RIFF",Q)}function zs(){let e=this;if(!e.tracks)throw new Error("MIDI has no tracks!");let A=[];for(let s of e.tracks){let o=[],r=0,E;for(let i of s){let g=i.ticks-r,B;i.messageStatusByte<=F.sequenceSpecific?B=[255,i.messageStatusByte,..._t(i.messageData.length),...i.messageData]:i.messageStatusByte===F.systemExclusive?B=[240,..._t(i.messageData.length),...i.messageData]:(B=[],E!==i.messageStatusByte&&(E=i.messageStatusByte,B.push(i.messageStatusByte)),B.push(...i.messageData)),o.push(..._t(g)),o.push(...B),r+=g}A.push(new Uint8Array(o))}function t(s,o){for(let r=0;r<s.length;r++)o.push(s.charCodeAt(r))}let n=[];t("MThd",n),n.push(...Rt(6,4)),n.push(0,e.format),n.push(...Rt(e.tracksAmount,2)),n.push(...Rt(e.timeDivision,2));for(let s of A)t("MTrk",n),n.push(...Rt(s.length,4)),n.push(...s);return new Uint8Array(n)}function _s(e){let A=this;pA("%cSearching for all used programs and keys...",I.info);let t=16+A.midiPortChannelOffsets.reduce((c,Q)=>Q>c?Q:c),n=[];for(let c=0;c<t;c++){let Q=c%16===9?128:0;n.push({program:0,bank:Q,bankLSB:0,actualBank:Q,drums:c%16===9,string:`${Q}:0`})}let s="gs";function o(c){let Q=ht(c.bank,c.bankLSB,c.drums,FA(s)),h=e.getPreset(Q,c.program,FA(s));c.actualBank=h.bank,c.program=h.program,c.string=c.actualBank+":"+c.program,r[c.string]||(p(`%cDetected a new preset: %c${c.string}`,I.info,I.recognized),r[c.string]=new Set)}let r={},E=Array(A.tracks.length).fill(0),i=A.tracks.length;function g(){let c=0,Q=1/0;return A.tracks.forEach((h,m)=>{E[m]>=h.length||h[E[m]].ticks<Q&&(c=m,Q=h[E[m]].ticks)}),c}let B=A.midiPorts.slice();for(n.forEach(c=>{o(c)});i>0;){let c=g(),Q=A.tracks[c];if(E[c]>=Q.length){i--;continue}let h=Q[E[c]];if(E[c]++,h.messageStatusByte===F.midiPort){B[c]=h.messageData[0];continue}let m=h.messageStatusByte&240;if(m!==F.noteOn&&m!==F.controllerChange&&m!==F.programChange&&m!==F.systemExclusive)continue;let f=(h.messageStatusByte&15)+A.midiPortChannelOffsets[B[c]]||0,S=n[f];switch(m){case F.programChange:S.program=h.messageData[0],o(S);break;case F.controllerChange:let x=h.messageData[0]===y.lsbForControl0BankSelect;if(h.messageData[0]!==y.bankSelect&&!x||s==="gs"&&S.drums)continue;let D=h.messageData[1],M=Math.max(0,D-A.bankOffset);switch(x?S.bankLSB=M:S.bank=M,Et(S.bank,M,s,x,S.drums,f).drumsStatus){case 0:break;case 1:S.drums=!1,o(S);break;case 2:S.drums=!0,o(S);break}break;case F.noteOn:if(h.messageData[1]===0)continue;r[S.string].add(`${h.messageData[0]}-${h.messageData[1]}`);break;case F.systemExclusive:if(!en(h)){Ct(h)&&(s="xg",p("%cXG on detected!",I.recognized));continue}let G=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][h.messageData[5]&15]+A.midiPortChannelOffsets[B[c]],C=!!(h.messageData[7]>0&&h.messageData[5]>>4);S=n[G],S.drums=C,o(S);break}}for(let c of Object.keys(r))r[c].size===0&&(p(`%cDetected change but no keys for %c${c}`,I.info,I.value),delete r[c]);return V(),r}var ge=class e extends It{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(){oe("%cInterpreting MIDI events...",I.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 o=null,r=null;for(let B=0;B<this.tracks.length;B++){let c=this.tracks[B],Q=new Set,h=!1;for(let f of c){if(f.messageStatusByte>=128&&f.messageStatusByte<240){h=!0;for(let x=0;x<f.messageData.length;x++)f.messageData[x]=Math.min(127,f.messageData[x]);switch(f.ticks>this.lastVoiceEventTick&&(this.lastVoiceEventTick=f.ticks),f.messageStatusByte&240){case F.controllerChange:switch(f.messageData[0]){case 2:case 116:o=f.ticks;break;case 4:case 117:r===null?r=f.ticks:r=0;break;case 0:this.isDLSRMIDI&&f.messageData[1]!==0&&f.messageData[1]!==127&&(p("%cDLS RMIDI with offset 1 detected!",I.recognized),this.bankOffset=1)}break;case F.noteOn:Q.add(f.messageStatusByte&15);let x=f.messageData[0];this.keyRange.min=Math.min(this.keyRange.min,x),this.keyRange.max=Math.max(this.keyRange.max,x);break}}f.messageData.currentIndex=0;let S=eA(f.messageData,f.messageData.length);switch(f.messageData.currentIndex=0,f.messageStatusByte){case F.setTempo:f.messageData.currentIndex=0,this.tempoChanges.push({ticks:f.ticks,tempo:6e7/re(f.messageData,3)}),f.messageData.currentIndex=0;break;case F.marker:switch(S.trim().toLowerCase()){default:break;case"start":case"loopstart":o=f.ticks;break;case"loopend":r=f.ticks}f.messageData.currentIndex=0;break;case F.copyright:n||(f.messageData.currentIndex=0,t.push(eA(f.messageData,f.messageData.length,void 0,!1)),f.messageData.currentIndex=0);break;case F.lyric:if(S.trim().startsWith("@KMIDI KARAOKE FILE")&&(this.isKaraokeFile=!0,p("%cKaraoke MIDI detected!",I.recognized)),this.isKaraokeFile)f.messageStatusByte=F.text;else{this.lyrics.push(f.messageData),this.lyricsTicks.push(f.ticks);break}case F.text:let D=S.trim();D.startsWith("@KMIDI KARAOKE FILE")?(this.isKaraokeFile=!0,p("%cKaraoke MIDI detected!",I.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=gt(this.midiName)):D[0]!=="@"&&(this.lyrics.push(Ms(f.messageData)),this.lyricsTicks.push(f.ticks)));break;case F.trackName:break}}this.usedChannelsOnTrack.push(Q),this.trackNames[B]="";let m=c.find(f=>f.messageStatusByte===F.trackName);if(m){m.messageData.currentIndex=0;let f=eA(m.messageData,m.messageData.length);this.trackNames[B]=f,h||t.push(f)}}this.tempoChanges.reverse(),p("%cCorrecting loops, ports and detecting notes...",I.info);let E=[];for(let B of this.tracks){let c=B.find(Q=>(Q.messageStatusByte&240)===F.noteOn);c&&E.push(c.ticks)}this.firstNoteOn=Math.min(...E),p(`%cFirst note-on detected at: %c${this.firstNoteOn}%c ticks!`,I.info,I.recognized,I.info),o!==null&&r===null?(o=this.firstNoteOn,r=this.lastVoiceEventTick):(o===null&&(o=this.firstNoteOn),(r===null||r===0)&&(r=this.lastVoiceEventTick)),this.loop={start:o,end:r},p(`%cLoop points: start: %c${this.loop.start}%c end: %c${this.loop.end}`,I.info,I.recognized,I.info,I.recognized);let i=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!==F.midiPort)continue;let Q=c.messageData[0];this.midiPorts[B]=Q,this.midiPortChannelOffsets[Q]===void 0&&(this.midiPortChannelOffsets[Q]=i,i+=16)}let g=1/0;for(let B of this.midiPorts)B!==-1&&g>B&&(g=B);if(g===1/0&&(g=0),this.midiPorts=this.midiPorts.map(B=>B===-1?g:B),this.midiPortChannelOffsets.length===0&&(this.midiPortChannelOffsets=[0]),this.midiPortChannelOffsets.length<2?p("%cNo additional MIDI Ports detected.",I.info):(this.isMultiPort=!0,p("%cMIDI Ports detected!",I.recognized)),!s)if(this.tracks.length>1){if(this.tracks[0].find(B=>B.messageStatusByte>=F.noteOn&&B.messageStatusByte<F.polyPressure)===void 0){let B=this.tracks[0].find(c=>c.messageStatusByte===F.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===F.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,`
10
- `)).filter(B=>B.length>0).join(`
11
- `)||""),this.midiName=this.midiName.trim(),this.midiNameUsesFileName=!1,this.midiName.length===0){p("%cNo name detected. Using the alt name!",I.info),this.midiName=Gs(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 p(`%cMIDI Name detected! %c"${this.midiName}"`,I.info,I.recognized);this.tracks.some(B=>B[0].ticks===0)||this.tracks[0].unshift(new PA(0,F.trackName,new b(this.rawMidiName.buffer))),this.duration=this.MIDIticksToSeconds(this.lastVoiceEventTick),p("%cSuccess!",I.recognized),V()}flush(){for(let A of this.tracks)A.sort((t,n)=>t.ticks-n.ticks);this._parseInternal()}};ge.prototype.writeMIDI=zs;ge.prototype.modifyMIDI=Zs;ge.prototype.applySnapshotToMIDI=Xs;ge.prototype.writeRMIDI=Ws;ge.prototype.getUsedProgramsAndKeys=_s;var Pn;(()=>{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]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),r=function(v,J){for(var W=new A(31),q=0;q<31;++q)W[q]=J+=1<<v[q-1];for(var rA=new t(W[30]),q=1;q<30;++q)for(var JA=W[q];JA<W[q+1];++JA)rA[JA]=JA-W[q]<<5|q;return{b:W,r:rA}},E=r(n,2),i=E.b,g=E.r;i[28]=258,g[258]=28;var B=r(s,0),c=B.b,Q=B.r,h=new A(32768);for(D=0;D<32768;++D)m=(D&43690)>>1|(D&21845)<<1,m=(m&52428)>>2|(m&13107)<<2,m=(m&61680)>>4|(m&3855)<<4,h[D]=((m&65280)>>8|(m&255)<<8)>>1;var m,D,f=function(v,J,W){for(var q=v.length,rA=0,JA=new A(J);rA<q;++rA)v[rA]&&++JA[v[rA]-1];var Ie=new A(J);for(rA=1;rA<J;++rA)Ie[rA]=Ie[rA-1]+JA[rA-1]<<1;var ce;if(W){ce=new A(1<<J);var le=15-J;for(rA=0;rA<q;++rA)if(v[rA])for(var $e=rA<<4|v[rA],pe=J-v[rA],aA=Ie[v[rA]-1]++<<pe,lA=aA|(1<<pe)-1;aA<=lA;++aA)ce[h[aA]>>le]=$e}else for(ce=new A(q),rA=0;rA<q;++rA)v[rA]&&(ce[rA]=h[Ie[v[rA]-1]++]>>15-v[rA]);return ce},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,x=new e(32);for(D=0;D<32;++D)x[D]=5;var D,M=f(S,9,1),w=f(x,5,1),G=function(v){for(var J=v[0],W=1;W<v.length;++W)v[W]>J&&(J=v[W]);return J},C=function(v,J,W){var q=J/8|0;return(v[q]|v[q+1]<<8)>>(J&7)&W},L=function(v,J){var W=J/8|0;return(v[W]|v[W+1]<<8|v[W+2]<<16)>>(J&7)},Z=function(v){return(v+7)/8|0},EA=function(v,J,W){return(J==null||J<0)&&(J=0),(W==null||W>v.length)&&(W=v.length),new e(v.subarray(J,W))},tA=["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"],T=function(v,J,W){var q=new Error(J||tA[v]);if(q.code=v,Error.captureStackTrace&&Error.captureStackTrace(q,T),!W)throw q;return q},$=function(v,J,W,q){var rA=v.length,JA=q?q.length:0;if(!rA||J.f&&!J.l)return W||new e(0);var Ie=!W,ce=Ie||J.i!=2,le=J.i;Ie&&(W=new e(rA*3));var $e=function(Ot){var xe=W.length;if(Ot>xe){var St=new e(Math.max(xe*2,Ot));St.set(W),W=St}},pe=J.f||0,aA=J.p||0,lA=J.b||0,Qe=J.l,WA=J.d,Re=J.m,Ge=J.n,ut=rA*8;do{if(!Qe){pe=C(v,aA,1);var At=C(v,aA+1,3);if(aA+=3,At)if(At==1)Qe=M,WA=w,Re=9,Ge=5;else if(At==2){var ft=C(v,aA,31)+257,Fn=C(v,aA+10,15)+4,wn=ft+C(v,aA+5,31)+1;aA+=14;for(var et=new e(wn),Me=new e(19),zA=0;zA<Fn;++zA)Me[o[zA]]=C(v,aA+zA*3,7);aA+=Fn*3;for(var Rn=G(Me),Yt=(1<<Rn)-1,tt=f(Me,Rn,1),zA=0;zA<wn;){var mt=tt[C(v,aA,Yt)];aA+=mt&15;var KA=mt>>4;if(KA<16)et[zA++]=KA;else{var ye=0,pt=0;for(KA==16?(pt=3+C(v,aA,3),aA+=2,ye=et[zA-1]):KA==17?(pt=3+C(v,aA,7),aA+=3):KA==18&&(pt=11+C(v,aA,127),aA+=7);pt--;)et[zA++]=ye}}var Gn=et.subarray(0,ft),Se=et.subarray(ft);Re=G(Gn),Ge=G(Se),Qe=f(Gn,Re,1),WA=f(Se,Ge,1)}else T(1);else{var KA=Z(aA)+4,Jt=v[KA-4]|v[KA-3]<<8,Kt=KA+Jt;if(Kt>rA){le&&T(0);break}ce&&$e(lA+Jt),W.set(v.subarray(KA,Kt),lA),J.b=lA+=Jt,J.p=aA=Kt*8,J.f=pe;continue}if(aA>ut){le&&T(0);break}}ce&&$e(lA+131072);for(var us=(1<<Re)-1,fs=(1<<Ge)-1,qt=aA;;qt=aA){var ye=Qe[L(v,aA)&us],Oe=ye>>4;if(aA+=ye&15,aA>ut){le&&T(0);break}if(ye||T(2),Oe<256)W[lA++]=Oe;else if(Oe==256){qt=aA,Qe=null;break}else{var Mn=Oe-254;if(Oe>264){var zA=Oe-257,De=n[zA];Mn=C(v,aA,(1<<De)-1)+i[zA],aA+=De}var nt=WA[L(v,aA)&fs],Ve=nt>>4;nt||T(3),aA+=nt&15;var Se=c[Ve];if(Ve>3){var De=s[Ve];Se+=L(v,aA)&(1<<De)-1,aA+=De}if(aA>ut){le&&T(0);break}ce&&$e(lA+131072);var yt=lA+Mn;if(lA<Se){var st=JA-Se,NA=Math.min(Se,yt);for(st+lA<0&&T(3);lA<NA;++lA)W[lA]=q[st+lA]}for(;lA<yt;++lA)W[lA]=W[lA-Se]}}J.l=Qe,J.p=qt,J.b=lA,J.f=pe,Qe&&(pe=1,J.m=Re,J.d=WA,J.n=Ge)}while(!pe);return lA!=W.length&&Ie?EA(W,0,lA):W.subarray(0,lA)},hA=new e(0);function sA(v,J){return $(v,{i:2},J&&J.out,J&&J.dictionary)}var oA=typeof TextDecoder<"u"&&new TextDecoder,CA=0;try{oA.decode(hA,{stream:!0}),CA=1}catch{}Pn=sA})();var Zn={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},ct={inLineResource:1,inFileResource:2,inFileNode:3,externalFile:4,externalXMF:5,XMFFileURIandNodeID:6},Xn={StandardMIDIFile:0,StandardMIDIFileType1:1,DLS1:2,DLS2:3,DLS22:4,mobileDLS:5},Bi={standard:0,MMA:1,registered:2,nonRegistered:3},an={none:0,MMAUnpacker:1,registered:2,nonRegistered:3},Wn=class e{length;itemCount;metadataLength;metadata={};nodeData;innerNodes=[];packedContent=!1;nodeUnpackers=[];resourceFormat="unknown";constructor(A){let t=A.currentIndex;this.length=yA(A),this.itemCount=yA(A);let n=yA(A),s=A.currentIndex-t,o=n-s,r=A.slice(A.currentIndex,A.currentIndex+o);A.currentIndex+=o,this.metadataLength=yA(r);let E=r.slice(r.currentIndex,r.currentIndex+this.metadataLength);r.currentIndex+=this.metadataLength;let i,g;for(;E.currentIndex<E.length;){if(E[E.currentIndex]===0)E.currentIndex++,i=yA(E),Object.values(Zn).indexOf(i)===-1?(Y(`Unknown field specifier: ${i}`),g=`unknown_${i}`):g=Object.keys(Zn).find(f=>Zn[f]===i);else{let f=yA(E);i=eA(E,f),g=i}let m=yA(E);if(m===0){let f=yA(E),S=E.slice(E.currentIndex,E.currentIndex+f);E.currentIndex+=f,yA(S)<4?this.metadata[g]=eA(S,f-1):this.metadata[g]=S.slice(S.currentIndex)}else Y(`International content: ${m}`),E.currentIndex+=yA(E)}let B=r.currentIndex,c=yA(r),Q=r.slice(r.currentIndex,B+c);if(r.currentIndex=B+c,c>0)for(this.packedContent=!0;Q.currentIndex<c;){let h={};switch(h.id=yA(Q),h.id){case an.nonRegistered:case an.registered:throw V(),new Error(`Unsupported unpacker ID: ${h.id}`);default:throw V(),new Error(`Unknown unpacker ID: ${h.id}`);case an.none:h.standardID=yA(Q);break;case an.MMAUnpacker:let m=Q[Q.currentIndex++];m===0&&(m<<=8,m|=Q[Q.currentIndex++],m<<=8,m|=Q[Q.currentIndex++]);let f=yA(Q);h.manufacturerID=m,h.manufacturerInternalID=f;break}h.decodedSize=yA(Q),this.nodeUnpackers.push(h)}switch(A.currentIndex=t+n,this.referenceTypeID=yA(A),this.nodeData=A.slice(A.currentIndex,t+this.length),A.currentIndex=t+this.length,this.referenceTypeID){case ct.inLineResource:break;case ct.externalXMF:case ct.inFileNode:case ct.XMFFileURIandNodeID:case ct.externalFile:case ct.inFileResource:throw V(),new Error(`Unsupported reference type: ${this.referenceTypeID}`);default:throw V(),new Error(`Unknown reference type: ${this.referenceTypeID}`)}if(this.isFile){if(this.packedContent){let m=this.nodeData.slice(2,this.nodeData.length);p(`%cPacked content. Attemting to deflate. Target size: %c${this.nodeUnpackers[0].decodedSize}`,I.warn,I.value);try{this.nodeData=new b(Pn(m).buffer)}catch(f){throw V(),new Error(`Error unpacking XMF file contents: ${f.message}.`)}}let h=this.metadata.resourceFormat;if(h===void 0)Y("No resource format for this file node!");else{h[0]!==Bi.standard&&(Y(`Non-standard formatTypeID: ${h}`),this.resourceFormat=h.toString());let f=h[1];Object.values(Xn).indexOf(f)===-1?Y(`Unrecognized resource format: ${f}`):this.resourceFormat=Object.keys(Xn).find(S=>Xn[S]===f)}}else for(this.resourceFormat="folder";this.nodeData.currentIndex<this.nodeData.length;){let h=this.nodeData.currentIndex,m=yA(this.nodeData),f=this.nodeData.slice(h,h+m);this.nodeData.currentIndex=h+m,this.innerNodes.push(new e(f))}}get isFile(){return this.itemCount===0}};function js(e,A){e.bankOffset=0;let t=eA(A,4);if(t!=="XMF_")throw V(),new SyntaxError(`Invalid XMF Header! Expected "_XMF", got "${t}"`);oe("%cParsing XMF file...",I.info);let n=eA(A,4);if(p(`%cXMF version: %c${n}`,I.info,I.recognized),n==="2.00"){let i=re(A,4),g=re(A,4);p(`%cFile Type ID: %c${i}%c, File Type Revision ID: %c${g}`,I.info,I.recognized,I.info,I.recognized)}yA(A);let s=yA(A);A.currentIndex+=s,A.currentIndex=yA(A);let o=new Wn(A),r,E=i=>{let g=(B,c)=>{i.metadata[B]!==void 0&&typeof i.metadata[B]=="string"&&(e.RMIDInfo[c]=i.metadata[B])};if(g("nodeName",uA.name),g("title",uA.name),g("copyrightNotice",uA.copyright),g("comment",uA.comment),i.isFile)switch(i.resourceFormat){default:return;case"DLS1":case"DLS2":case"DLS22":case"mobileDLS":p("%cFound embedded DLS!",I.recognized),e.embeddedSoundFont=i.nodeData.buffer;break;case"StandardMIDIFile":case"StandardMIDIFileType1":p("%cFound embedded MIDI!",I.recognized),r=i.nodeData;break}else for(let B of i.innerNodes)E(B)};return E(o),V(),r}var In=class extends ge{constructor(A,t=""){super(),pA("%cParsing MIDI File...",I.info),this.fileName=t;let n=new b(A),s,o=eA(n,4);if(n.currentIndex-=4,o==="RIFF"){n.currentIndex+=8;let E=eA(n,4,void 0,!1);if(E!=="RMID")throw V(),new SyntaxError(`Invalid RMIDI Header! Expected "RMID", got "${E}"`);let i=IA(n);if(i.header!=="data")throw V(),new SyntaxError(`Invalid RMIDI Chunk header! Expected "data", got "${E}"`);for(s=i.chunkData;n.currentIndex<=n.length;){let g=n.currentIndex,B=IA(n,!0);if(B.header==="RIFF"){let c=eA(B.chunkData,4).toLowerCase();c==="sfbk"||c==="sfpk"||c==="dls "?(p("%cFound embedded soundfont!",I.recognized),this.embeddedSoundFont=n.slice(g,g+B.size).buffer):Y(`Unknown RIFF chunk: "${c}"`),c==="dls "&&(this.isDLSRMIDI=!0)}else if(B.header==="LIST"&&eA(B.chunkData,4)==="INFO"){for(p("%cFound RMIDI INFO chunk!",I.recognized),this.RMIDInfo={};B.chunkData.currentIndex<=B.size;){let Q=IA(B.chunkData,!0);this.RMIDInfo[Q.header]=Q.chunkData}this.RMIDInfo.ICOP&&(this.copyright=eA(this.RMIDInfo.ICOP,this.RMIDInfo.ICOP.length,void 0,!1).replaceAll(`
12
- `," ")),this.RMIDInfo.INAM&&(this.rawMidiName=this.RMIDInfo[uA.name],this.midiName=eA(this.rawMidiName,this.rawMidiName.length,void 0,!1).replaceAll(`
13
- `," ")),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[uA.bankOffset]&&(this.bankOffset=N(this.RMIDInfo[uA.bankOffset],2))}}this.isDLSRMIDI&&(this.bankOffset=0),this.embeddedSoundFont===void 0&&(this.bankOffset=0)}else o==="XMF_"?s=js(this,n):s=n;let r=this._readMIDIChunk(s);if(r.type!=="MThd")throw V(),new SyntaxError(`Invalid MIDI Header! Expected "MThd", got "${r.type}"`);if(r.size!==6)throw V(),new RangeError(`Invalid MIDI header chunk size! Expected 6, got ${r.size}`);this.format=re(r.data,2),this.tracksAmount=re(r.data,2),this.timeDivision=re(r.data,2);for(let E=0;E<this.tracksAmount;E++){let i=[],g=this._readMIDIChunk(s);if(g.type!=="MTrk")throw V(),new SyntaxError(`Invalid track header! Expected "MTrk" got "${g.type}"`);let B,c=0;for(this.format===2&&E>0&&(c+=this.tracks[E-1][this.tracks[E-1].length-1].ticks);g.data.currentIndex<g.size;){c+=yA(g.data);let Q=g.data[g.data.currentIndex],h;if(B!==void 0&&Q<128)h=B;else{if(B===void 0&&Q<128)throw V(),new SyntaxError(`Unexpected byte with no running byte. (${Q})`);h=g.data[g.data.currentIndex++]}let m=Ls(h),f;switch(m){case-1:f=0;break;case-2:h=g.data[g.data.currentIndex++],f=yA(g.data);break;case-3:f=yA(g.data);break;default:f=Us[h>>4],B=h;break}let S=new b(f);S.set(g.data.slice(g.data.currentIndex,g.data.currentIndex+f),0);let x=new PA(c,h,S);i.push(x),g.data.currentIndex+=f}this.tracks.push(i),p(`%cParsed %c${this.tracks.length}%c / %c${this.tracksAmount}`,I.info,I.value,I.info,I.value)}p("%cAll tracks parsed correctly!",I.recognized),this._parseInternal(),V(),p(`%cMIDI file parsed. Total tick time: %c${this.lastVoiceEventTick}%c, total seconds time: %c${this.duration}`,I.info,I.recognized,I.info,I.recognized)}_readMIDIChunk(A){let t={};t.type=eA(A,4),t.size=re(A,4),t.data=new b(t.size);let n=A.slice(A.currentIndex,A.currentIndex+t.size);return t.data.set(n,0),A.currentIndex+=t.size,t}};function $s(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 Ao(e,A=!0){if(this.stop(),!e.tracks)throw new Error("This MIDI has no tracks!");if(this.oneTickToSeconds=60/(120*e.timeDivision),this.midiData=e,this.midiData.embeddedSoundFont!==void 0)p("%cEmbedded soundfont detected! Using it.",I.recognized),this.synth.setEmbeddedSoundFont(this.midiData.embeddedSoundFont,this.midiData.bankOffset);else{this.synth.overrideSoundfont&&this.synth.clearSoundFont(!0,!0),pA("%cPreloading samples...",I.info);let t=this.midiData.getUsedProgramsAndKeys(this.synth.soundfontManager);for(let[n,s]of Object.entries(t)){let o=parseInt(n.split(":")[0]),r=parseInt(n.split(":")[1]),E=this.synth.getPreset(o,r);p(`%cPreloading used samples on %c${E.presetName}%c...`,I.info,I.recognized,I.info);for(let i of s){let g=i.split("-");E.preloadSpecific(parseInt(g[0]),parseInt(g[1]))}}V()}if(this.tracks=this.midiData.tracks,this.midiPorts=this.midiData.midiPorts.slice(),this.midiPortChannelOffset=0,this.midiPortChannelOffsets={},this.midiData.midiPorts.forEach((t,n)=>{this.assignMIDIPort(n,t)}),this.duration=this.midiData.duration,this.firstNoteTime=this.midiData.MIDIticksToSeconds(this.midiData.firstNoteOn),p(`%cTotal song time: ${Yn(Math.ceil(this.duration)).time}`,I.recognized),this.post(UA.songChange,[this.songIndex,A]),this.duration<=1&&(Y(`%cVery short song: (${Yn(Math.round(this.duration)).time}). Disabling loop!`,I.warn),this.loop=!1),A)this.play(!0);else{let t=this.skipToFirstNoteOn?this.midiData.firstNoteOn-1:0;this.setTimeTicks(t),this.pause()}}function eo(e,A=!0){if(this.songs=e.reduce((n,s)=>{if(s.duration)return n.push(ge.copyFrom(s)),n;try{n.push(new In(s.binary,s.altName||""))}catch(o){return console.error(o),this.post(UA.midiError,o),n}return n},[]),this.songs.length<1)return;this.songIndex=0,this.songs.length>1&&(this.loop=!1),this.shuffleSongIndexes();let t=this.songs.map(n=>new zt(n));this.post(UA.songListChange,t),this.loadCurrentSong(A)}function to(){if(this.songs.length===1){this.currentTime=0;return}this.songIndex++,this.songIndex%=this.songs.length,this.loadCurrentSong()}function no(){if(this.songs.length===1){this.currentTime=0;return}this.songIndex--,this.songIndex<0&&(this.songIndex=this.songs.length-1),this.loadCurrentSong()}function so(e=!0){e&&p("%cResetting all controllers!",I.info),this.callEvent("allcontrollerreset",void 0),this.setSystem(An);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(Ps(this.system)),A%16===9?(t.setPreset(this.drumPreset),t.presetUsesOverride=this.defaultDrumsUsesOverride,t.drumChannel=!0,this.callEvent("drumchange",{channel:A,isDrumChannel:!0})):(t.drumChannel=!1,t.presetUsesOverride=this.defaultDrumsUsesOverride,t.setPreset(this.defaultPreset),this.callEvent("drumchange",{channel:A,isDrumChannel:!1})));let n=t.preset.bank,s=n===128?128:t.presetUsesOverride?n+this.soundfontBankOffset:n;this.callEvent("programchange",{channel:A,program:t.preset.program,bank:s});for(let o=0;o<128;o++)this.midiAudioChannels[A].lockedControllers[o]&&this.callEvent("controllerchange",{channel:A,controllerNumber:o,controllerValue:this.midiAudioChannels[A].midiControllers[o]>>7});if(this.midiAudioChannels[A].lockedControllers[MA+j.pitchWheel]===!1){let o=this.midiAudioChannels[A].midiControllers[MA+j.pitchWheel],r=o>>7,E=o&127;this.callEvent("pitchwheel",{channel:A,MSB:r,LSB:E})}}this.tunings=[],this.tunings=[];for(let A=0;127>A;A++)this.tunings.push([]);this.setMIDIVolume(1)}function oo(){this.channelOctaveTuning.fill(0);for(let A=0;A<be.length;A++){if(this.lockedControllers[A])continue;let t=be[A];this.midiControllers[A]!==t&&A<127?A===y.portamentoControl?this.midiControllers[A]=$t:this.controllerChange(A,t>>7):this.midiControllers[A]=t}this.channelVibrato={rate:0,depth:0,delay:0},this.holdPedal=!1,this.randomPan=!1;let e=this.customControllers[cA.channelTransposeFine];this.customControllers.set(On),this.setCustomController(cA.channelTransposeFine,e),this.resetParameters()}var zn=new Set([y.bankSelect,y.lsbForControl0BankSelect,y.mainVolume,y.lsbForControl7MainVolume,y.pan,y.lsbForControl10Pan,y.reverbDepth,y.tremoloDepth,y.chorusDepth,y.detuneDepth,y.phaserDepth,y.soundVariation,y.filterResonance,y.releaseTime,y.attackTime,y.brightness,y.decayTime,y.vibratoRate,y.vibratoDepth,y.vibratoDelay,y.soundController10]);function ro(){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=be[e];!zn.has(e)&&A!==this.midiControllers[e]&&(e===y.portamentoControl?this.midiControllers[e]=$t:this.controllerChange(e,A>>7))}}function io(){this.dataEntryState=YA.Idle,p("%cResetting Registered and Non-Registered Parameters!",I.info)}var We=be.slice(0,128);function ao(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 i=0;i<t;i++)s.push({program:-1,bank:0,actualBank:0});let o=i=>i===y.dataDecrement||i===y.dataIncrement||i===y.dataEntryMsb||i===y.dataDecrement||i===y.lsbForControl6DataEntry||i===y.RPNLsb||i===y.RPNMsb||i===y.NRPNLsb||i===y.NRPNMsb||i===y.bankSelect||i===y.lsbForControl0BankSelect||i===y.resetAllControllers,r=[];for(let i=0;i<t;i++)r.push(Array.from(We));function E(i){if(n[i]=8192,r?.[i]!==void 0)for(let g=0;g<We.length;g++)zn.has(g)||(r[i][g]=We[g])}for(;;){let i=this._findFirstEventIndex(),g=this.tracks[i][this.eventIndex[i]];if(A!==void 0){if(g.ticks>=A)break}else if(this.playedTime>=e)break;let B=at(g.messageStatusByte),c=B.channel+(this.midiPortChannelOffsets[this.midiPorts[i]]||0);switch(B.status){case F.noteOn:r[c]===void 0&&(r[c]=Array.from(We)),r[c][y.portamentoControl]=g.messageData[0];break;case F.noteOff:break;case F.pitchBend:n[c]=g.messageData[1]<<7|g.messageData[0];break;case F.programChange:if(this.midiData.isMultiPort&&this.midiData.usedChannelsOnTrack[i].size===0)break;let h=s[c];h.program=g.messageData[0],h.actualBank=h.bank;break;case F.controllerChange:if(this.midiData.isMultiPort&&this.midiData.usedChannelsOnTrack[i].size===0)break;let m=g.messageData[0];if(o(m)){let f=g.messageData[1];if(m===y.bankSelect){s[c].bank=f;break}else m===y.resetAllControllers&&E(c);this.sendMIDIMessages?this.sendMIDICC(c,m,f):this.synth.controllerChange(c,m,f)}else r[c]===void 0&&(r[c]=Array.from(We)),r[c][m]=g.messageData[1];break;default:this._processEvent(g,i);break}this.eventIndex[i]++,i=this._findFirstEventIndex();let Q=this.tracks[i][this.eventIndex[i]];if(Q===void 0)return this.stop(),!1;this.playedTime+=this.oneTickToSeconds*(Q.ticks-g.ticks)}if(this.sendMIDIMessages){for(let i=0;i<t;i++)if(n[i]!==void 0&&this.sendMIDIPitchWheel(i,n[i]>>7,n[i]&127),r[i]!==void 0&&r[i].forEach((g,B)=>{g!==We[B]&&!o(B)&&this.sendMIDICC(i,B,g)}),s[i].program>=0&&s[i].actualBank>=0){let g=s[i].actualBank;this.sendMIDICC(i,y.bankSelect,g),this.sendMIDIProgramChange(i,s[i].program)}}else for(let i=0;i<t;i++)if(n[i]!==void 0&&this.synth.pitchWheel(i,n[i]>>7,n[i]&127),r[i]!==void 0&&r[i].forEach((g,B)=>{g!==We[B]&&!o(B)&&this.synth.controllerChange(i,B,g)}),s[i].program>=0&&s[i].actualBank>=0){let g=s[i].actualBank;this.synth.controllerChange(i,y.bankSelect,g),this.synth.programChange(i,s[i].program)}return!0}function Io(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 go(e){this.stop(),this.playingNotes=[],this.pausedTime=void 0,this.post(UA.timeChange,this.synth.currentSynthTime-this.midiData.MIDIticksToSeconds(e));let A=this._playTo(0,e);this._recalculateStartTime(this.playedTime),A&&this.play()}function Co(e){this.absoluteStartTime=this.synth.currentSynthTime-e/this._playbackRate}var wA={midiMessage:0,ccReset:7,setChannelVibrato:8,soundFontManager:9,stopAll:10,killNotes:11,muteChannel:12,addNewChannel:13,customcCcChange: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},Ue={mainVolume:0,masterPan:1,voicesCap:2,interpolationType:3,midiSystem:4},XA=-1,qA={channelPropertyChange:0,eventCall:1,masterParameterChange:2,sequencerSpecific:3,synthesizerSnapshot:4,isFullyInitialized:5,soundfontError:6};function Eo(e,A){switch(e){default:break;case jA.loadNewSongList:this.loadNewSongList(A[0],A[1]);break;case jA.pause:this.pause();break;case jA.play:this.play(A);break;case jA.stop:this.stop();break;case jA.setTime:this.currentTime=A;break;case jA.changeMIDIMessageSending:this.sendMIDIMessages=A;break;case jA.setPlaybackRate:this.playbackRate=A;break;case jA.setLoop:let[t,n]=A;this.loop=t,n===XA?this.loopCount=1/0:this.loopCount=n;break;case jA.changeSong:switch(A[0]){case it.forwards:this.nextSong();break;case it.backwards:this.previousSong();break;case it.shuffleOff:this.shuffleMode=!1,this.songIndex=this.shuffledSongIndexes[this.songIndex];break;case it.shuffleOn:this.shuffleMode=!0,this.shuffleSongIndexes(),this.songIndex=0,this.loadCurrentSong();break;case it.index:this.songIndex=A[1],this.loadCurrentSong();break}break;case jA.getMIDI:this.post(UA.getMIDI,this.midiData);break;case jA.setSkipToFirstNote:this.skipToFirstNoteOn=A;break;case jA.setPreservePlaybackState:this.preservePlaybackState=A}}function ho(e,A=void 0){this.synth.enableEventSystem&&this.synth.post({messageType:qA.sequencerSpecific,messageData:{messageType:e,messageData:A}})}function Bo(e){this.sendMIDIMessages&&this.post(UA.midiEvent,e)}function co(e,A,t){e%=16,this.sendMIDIMessages&&this.sendMIDIMessage([F.controllerChange|e,A,t])}function lo(e,A){e%=16,this.sendMIDIMessages&&this.sendMIDIMessage([F.programChange|e,A])}function Qo(e,A,t){e%=16,this.sendMIDIMessages&&this.sendMIDIMessage([F.pitchBend|e,t,A])}function uo(){if(this.sendMIDIMessages){this.sendMIDIMessage([F.reset]);for(let e=0;e<16;e++)this.sendMIDIMessage([F.controllerChange|e,y.allSoundOff,0]),this.sendMIDIMessage([F.controllerChange|e,y.resetAllControllers,0])}}var DA=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;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(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.post(UA.timeChange,this.synth.currentSynthTime-A),this.midiData.duration===0){Y("No duration!"),this.post(UA.pause,!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){Y("Already paused");return}this.pausedTime=this.currentTime,this.stop(),this.post(UA.pause,A)}stop(){this.clearProcessHandler();for(let A=0;A<16;A++)this.synth.controllerChange(A,y.sustainPedal,0);if(this.synth.stopAllChannels(),this.sendMIDIMessages){for(let A of this.playingNotes)this.sendMIDIMessage([F.noteOff|A.channel%16,A.midiNote]);for(let A=0;A<16;A++)this.sendMIDICC(A,y.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)}}};DA.prototype.sendMIDIMessage=Bo;DA.prototype.sendMIDIReset=uo;DA.prototype.sendMIDICC=co;DA.prototype.sendMIDIProgramChange=lo;DA.prototype.sendMIDIPitchWheel=Qo;DA.prototype.assignMIDIPort=$s;DA.prototype.post=ho;DA.prototype.processMessage=Eo;DA.prototype._processEvent=Ts;DA.prototype._addNewMidiPort=vs;DA.prototype.processTick=Hs;DA.prototype._findFirstEventIndex=Ys;DA.prototype.loadNewSequence=Ao;DA.prototype.loadNewSongList=eo;DA.prototype.nextSong=to;DA.prototype.previousSong=no;DA.prototype.play=Io;DA.prototype._playTo=ao;DA.prototype.setTimeTicks=go;DA.prototype._recalculateStartTime=Co;function ci(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 fo(e){let A=[];for(let n of this.midiAudioChannels)for(let s of n.voices)if(!s.finished){let o=ci(n,s);A.push({channel:n,voice:s,priority:o})}A.sort((n,s)=>n.priority-s.priority);let t=A.slice(0,e);for(let{channel:n,voice:s}of t){let o=n.voices.indexOf(s);o>-1&&n.voices.splice(o,1)}}var me=me!==void 0?me:{},mo=!1,po;me.isInitialized=new Promise(e=>po=e);var li=function(e){var A,t,n,s,o,r,E,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",g="",B=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");do s=i.indexOf(e.charAt(B++)),o=i.indexOf(e.charAt(B++)),r=i.indexOf(e.charAt(B++)),E=i.indexOf(e.charAt(B++)),A=s<<2|o>>4,t=(15&o)<<4|r>>2,n=(3&r)<<6|E,g+=String.fromCharCode(A),r!==64&&(g+=String.fromCharCode(t)),E!==64&&(g+=String.fromCharCode(n));while(B<e.length);return g};(function(){var e,A,t,n,s,o,r,E,i,g,B,c,Q,h,m,f,S,x,D,M,w,G,C=C!==void 0?C:{};C.wasmBinary=Uint8Array.from(li("AGFzbQEAAAABpQEYYAJ/fwF/YAF/AGAAAX9gBH9/f38AYAAAYAN/f38Bf2ABfwF/YAJ/fwBgBn9/f39/fwF/YAR/f39/AX9gBX9/f39/AX9gB39/f39/f38Bf2AGf39/f39/AGAIf39/f39/f38Bf2AFf39/f38AYAd/f39/f39/AGADf39/AGABfwF9YAF9AX1gAnx/AXxgAnx/AX9gA3x8fwF8YAJ8fAF8YAF8AXwCngIPA2VudgZtZW1vcnkCAIACA2VudgV0YWJsZQFwAQQEA2Vudgl0YWJsZUJhc2UDfwADZW52DkRZTkFNSUNUT1BfUFRSA38AA2VudghTVEFDS1RPUAN/AANlbnYJU1RBQ0tfTUFYA38ABmdsb2JhbAhJbmZpbml0eQN8AANlbnYFYWJvcnQAAQNlbnYNZW5sYXJnZU1lbW9yeQACA2Vudg5nZXRUb3RhbE1lbW9yeQACA2VudhdhYm9ydE9uQ2Fubm90R3Jvd01lbW9yeQACA2Vudg5fX19hc3NlcnRfZmFpbAADA2VudgtfX19zZXRFcnJObwABA2VudgZfYWJvcnQABANlbnYWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwAFA3d2BgYCAQcHAQIBAQcBCAcFAAkGCQoHBgYGBgEFBgIBBgYKAAgLAAYGBgYGBgYBAAoMDAMGBQANCAoJAAwODA8OAQAGBgcEABAJEAERAAADBQwAAAMHBxIGAQAABwIFEwMOBw8HBgYQFAoVExYXFxcXFgQFBQYFAAYkB38BIwELfwEjAgt/ASMDC38BQQALfwFBAAt8ASMEC38BQQALB9MCFRBfX2dyb3dXYXNtTWVtb3J5AAgRX19fZXJybm9fbG9jYXRpb24AYwVfZnJlZQBfB19tYWxsb2MAXgdfbWVtY3B5AHkHX21lbXNldAB6BV9zYnJrAHsXX3N0Yl92b3JiaXNfanNfY2hhbm5lbHMAJhRfc3RiX3ZvcmJpc19qc19jbG9zZQAlFV9zdGJfdm9yYmlzX2pzX2RlY29kZQAoE19zdGJfdm9yYmlzX2pzX29wZW4AJBpfc3RiX3ZvcmJpc19qc19zYW1wbGVfcmF0ZQAnC2R5bkNhbGxfaWlpAHwTZXN0YWJsaXNoU3RhY2tTcGFjZQAMC2dldFRlbXBSZXQwAA8LcnVuUG9zdFNldHMAeAtzZXRUZW1wUmV0MAAOCHNldFRocmV3AA0Kc3RhY2tBbGxvYwAJDHN0YWNrUmVzdG9yZQALCXN0YWNrU2F2ZQAKCQoBACMACwR9VFl9Csb2A3YGACAAQAALGwEBfyMGIQEjBiAAaiQGIwZBD2pBcHEkBiABCwQAIwYLBgAgACQGCwoAIAAkBiABJAcLEAAjCEUEQCAAJAggASQJCwsGACAAJAsLBAAjCwsRACAABEAgABARIAAgABASCwvvBwEKfyAAQYADaiEHIAcoAgAhBQJAIAUEQCAAQfwBaiEEIAQoAgAhASABQQBKBEAgAEHwAGohCANAIAUgAkEYbGpBEGohCSAJKAIAIQEgAQRAIAgoAgAhAyAFIAJBGGxqQQ1qIQogCi0AACEGIAZB/wFxIQYgAyAGQbAQbGpBBGohAyADKAIAIQMgA0EASgRAQQAhAwNAIAEgA0ECdGohASABKAIAIQEgACABEBIgA0EBaiEDIAgoAgAhASAKLQAAIQYgBkH/AXEhBiABIAZBsBBsakEEaiEBIAEoAgAhBiAJKAIAIQEgAyAGSA0ACwsgACABEBILIAUgAkEYbGpBFGohASABKAIAIQEgACABEBIgAkEBaiECIAQoAgAhASACIAFODQMgBygCACEFDAAACwALCwsgAEHwAGohAyADKAIAIQEgAQRAIABB7ABqIQUgBSgCACECIAJBAEoEQEEAIQIDQAJAIAEgAkGwEGxqQQhqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQRxqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQSBqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQaQQaiEEIAQoAgAhBCAAIAQQEiABIAJBsBBsakGoEGohASABKAIAIQEgAUUhBCABQXxqIQFBACABIAQbIQEgACABEBIgAkEBaiECIAUoAgAhASACIAFODQAgAygCACEBDAELCyADKAIAIQELIAAgARASCyAAQfgBaiEBIAEoAgAhASAAIAEQEiAHKAIAIQEgACABEBIgAEGIA2ohAyADKAIAIQEgAQRAIABBhANqIQUgBSgCACECIAJBAEoEQEEAIQIDQCABIAJBKGxqQQRqIQEgASgCACEBIAAgARASIAJBAWohAiAFKAIAIQcgAygCACEBIAIgB0gNAAsLIAAgARASCyAAQQRqIQIgAigCACEBIAFBAEoEQEEAIQEDQCAAQZQGaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQZQHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQdgHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiABQQFqIQEgAigCACEDIAEgA0ghAyABQRBJIQUgBSADcQ0ACwtBACEBA0AgAEGgCGogAUECdGohAiACKAIAIQIgACACEBIgAEGoCGogAUECdGohAiACKAIAIQIgACACEBIgAEGwCGogAUECdGohAiACKAIAIQIgACACEBIgAEG4CGogAUECdGohAiACKAIAIQIgACACEBIgAEHACGogAUECdGohAiACKAIAIQIgACACEBIgAUEBaiEBIAFBAkcNAAsLGwAgAEHEAGohACAAKAIAIQAgAEUEQCABEF8LC3wBAX8gAEHUB2ohASABQQA2AgAgAEGAC2ohASABQQA2AgAgAEH4CmohASABQQA2AgAgAEGcCGohASABQQA2AgAgAEHVCmohASABQQA6AAAgAEH8CmohASABQQA2AgAgAEHUC2ohASABQQA2AgAgAEHYC2ohACAAQQA2AgAL8AQBB38jBiELIwZBEGokBiALQQhqIQcgC0EEaiEKIAshCCAAQSRqIQYgBiwAACEGAn8gBgR/IABBgAtqIQYgBigCACEGIAZBf0oEQCAFQQA2AgAgACABIAIQFgwCCyAAQRRqIQYgBiABNgIAIAEgAmohAiAAQRxqIQkgCSACNgIAIABB2ABqIQIgAkEANgIAIABBABAXIQkgCUUEQCAFQQA2AgBBAAwCCyAAIAcgCCAKEBghCSAJBEAgBygCACECIAgoAgAhCSAKKAIAIQggACACIAkgCBAaIQogByAKNgIAIABBBGohAiACKAIAIQggCEEASgRAQQAhAgNAIABBlAZqIAJBAnRqIQcgBygCACEHIAcgCUECdGohByAAQdQGaiACQQJ0aiEMIAwgBzYCACACQQFqIQIgAiAISA0ACwsgAwRAIAMgCDYCAAsgBSAKNgIAIABB1AZqIQAgBCAANgIAIAYoAgAhACAAIAFrDAILAkACQAJAAkACQCACKAIAIgNBIGsOBAECAgACCyACQQA2AgAgAEHUAGohAiAAEBkhAwJAIANBf0cEQANAIAIoAgAhAyADDQIgABAZIQMgA0F/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ACECIABBmAhqIQYgBigCACEHIAUgA2shCSAJIAdqIQkgAiAJSSEJIAIgB0khDSACIAdrIQJBACACIA0bIQIgAiADaiECIAIgBUohByAFIAIgBxshAiAJBEAgASACNgIAIAYoAgAhACAAIAJqIQAgBiAANgIAQQEMBgsLCyAAQfQKaiECIAIoAgAhAiADIB9rIQYgBiACaiEGIABBmAhqIQIgAiAGNgIAIAhBATYCAAwBBSAAQZgIaiECIAYNAQsMAQsgBCADayEDIAIoAgAhBCADIARqIQMgAiADNgIACyATKAIAIQIgAgRAIABByABqIQIgAigCACECIABB0ABqIQAgACgCACEAIAIgAEcEQEHTE0HEE0HkGkHnFBAECwsgASAFNgIAQQELIQAgHCQGIAALqAIBBX8gAEHoCmohBSAFKAIAIQICQCACQQBIBEBBACEABSACIAFIBEAgAUEYSgRAIABBGBAsIQIgAUFoaiEBIAAgARAsIQAgAEEYdCEAIAAgAmohACAADwsgAkUEQCAAQeQKaiECIAJBADYCAAsgAEHkCmohAwJAAkACQANAIAAQLiECIAJBf0YNASAFKAIAIQQgAiAEdCECIAMoAgAhBiAGIAJqIQIgAyACNgIAIAUgBEEIaiICNgIAIAIgAUgNAAwCAAsACyAFQX82AgBBACEADAQLIARBeEgEQEEAIQAMBAsLCyAAQeQKaiEEIAQoAgAhA0EBIAF0IQAgAEF/aiEAIAMgAHEhACADIAF2IQMgBCADNgIAIAIgAWshASAFIAE2AgALCyAAC40CAAJAIABBAEgEf0EABSAAQYCAAUgEQCAAQRBIBEAgAEGACGohACAALAAAIQAMAwsgAEGABEgEQCAAQQV2IQAgAEGACGohACAALAAAIQAgAEEFaiEABSAAQQp2IQAgAEGACGohACAALAAAIQAgAEEKaiEACwwCCyAAQYCAgAhIBH8gAEGAgCBIBH8gAEEPdiEAIABBgAhqIQAgACwAACEAIABBD2oFIABBFHYhACAAQYAIaiEAIAAsAAAhACAAQRRqCwUgAEGAgICAAkgEfyAAQRl2IQAgAEGACGohACAALAAAIQAgAEEZagUgAEEediEAIABBgAhqIQAgACwAACEAIABBHmoLCwshAAsgAAuiAQEDfyAAQdQKaiECIAIsAAAhAQJAAkAgAQ0AIABB3ApqIQEgASgCACEBIAEEQEF/IQMFIAAQLyEBIAEEQCACLAAAIQEgAQ0CQaEUQcQTQfYLQbUUEAQFQX8hAwsLDAELIAFBf2pBGHRBGHUhASACIAE6AAAgAEHsCmohASABKAIAIQIgAkEBaiECIAEgAjYCACAAEDAhACAAQf8BcSEDCyADC6wCAQd/IABB3ApqIQIgAigCACEBAkAgAUUEQCAAQdgKaiEEIAQoAgAhASABQX9GBEAgAEHQCGohASABKAIAIQEgAUF/aiEBIABB4ApqIQMgAyABNgIAIAAQMSEBIAFFBEAgAkEBNgIADAMLIABB0wpqIQEgASwAACEBIAFBAXEhASABBH8gBCgCAAUgAEEgEBUMAwshAQsgAUEBaiEHIAQgBzYCACAAQdQIaiABaiEDIAMsAAAhBiAGQf8BcSEDIAZBf0cEQCACQQE2AgAgAEHgCmohAiACIAE2AgALIABB0AhqIQEgASgCACEBIAcgAU4EQCAEQX82AgALIABB1ApqIQAgACwAACEBIAEEQEHFFEHEE0HoC0HaFBAEBSAAIAY6AAAgAyEFCwsLIAULUQEDfyAAQRRqIQMgAygCACEBIABBHGohAiACKAIAIQIgASACSQR/IAFBAWohACADIAA2AgAgASwAAAUgAEHUAGohACAAQQE2AgBBAAshACAACyABAX8gABAyIQEgAQR/IAAQMwUgAEEeEBVBAAshACAAC2ABAX8gABAwIQEgAUH/AXFBzwBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQAgAEH/AXFB0wBGIQAFQQAhAAsFQQAhAAsFQQAhAAsgAAvZAwEGfyAAEDAhAQJ/IAFB/wFxBH8gAEEfEBVBAAUgABAwIQEgAEHTCmohAiACIAE6AAAgABAjIQUgABAjIQIgABAjGiAAECMhASAAQcwIaiEDIAMgATYCACAAECMaIAAQMCEBIAFB/wFxIQEgAEHQCGohAyADIAE2AgAgAEHUCGohBCAAIAQgARAiIQEgAUUEQCAAQQoQFUEADAILIABB8ApqIQQgBEF+NgIAIAIgBXEhAQJAIAFBf0cEQCADKAIAIQEgAUEASgRAA0ACQCABQX9qIQIgAEHUCGogAmohBiAGLAAAIQYgBkF/Rw0AIAFBAUwNBCACIQEMAQsLIAQgAjYCACAAQfQKaiEBIAEgBTYCAAsLCyAAQdUKaiEBIAEsAAAhASABBEAgAygCACEDIANBAEoEf0EAIQJBACEBA0AgAEHUCGogAWohBCAELQAAIQQgBEH/AXEhBCACIARqIQIgAUEBaiEBIAEgA0gNAAsgAkEbagVBGwshASAAQShqIQIgAigCACECIAEgA2ohASABIAJqIQEgAEEsaiEDIAMgAjYCACAAQTBqIQIgAiABNgIAIABBNGohASABIAU2AgALIABB2ApqIQAgAEEANgIAQQELCyEAIAALowEBB38gAEHoCmohAyADKAIAIQECQCABQRlIBEAgAEHkCmohBCABRQRAIARBADYCAAsgAEHUCmohBSAAQdwKaiEGA0AgBigCACEBIAEEQCAFLAAAIQEgAUUNAwsgABAuIQIgAkF/Rg0CIAMoAgAhASACIAF0IQIgBCgCACEHIAcgAmohAiAEIAI2AgAgAUEIaiECIAMgAjYCACABQRFIDQALCwsLrQUBCX8gABA0IAFBIGohAiACKAIAIQUCQAJAIAVFIgNFDQAgAUGkEGohAiACKAIAIQIgAg0AQX8hAQwBCyABQQRqIQIgAigCACECAkACQCACQQhKBEAgAUGkEGohAyADKAIAIQMgAw0BBSADDQELDAELIABB5ApqIQggCCgCACEJIAkQOiEHIAFBrBBqIQIgAigCACECIAJBAUoEQCABQaQQaigCACEKQQAhAwNAIAJBAXYhBSAFIANqIQQgCiAEQQJ0aiEGIAYoAgAhBiAGIAdLIQYgAiAFayECIAMgBCAGGyEDIAUgAiAGGyECIAJBAUoNAAsFQQAhAwsgAUEXaiECIAIsAAAhAiACRQRAIAFBqBBqIQIgAigCACECIAIgA0ECdGohAiACKAIAIQMLIAFBCGohASABKAIAIQEgASADaiEBIAEtAAAhASABQf8BcSEBIABB6ApqIQIgAigCACEAIAAgAUgEf0EAIQBBfwUgACABayEAIAkgAXYhASAIIAE2AgAgAwshASACIAA2AgAMAQsgAUEXaiEDIAMsAAAhAyADBEBBgRVBxBNB6gxBjBUQBAsCQCACQQBKBEAgASgCCCEIIABB5ApqIQlBACEBA0ACQCAIIAFqIQMgAywAACEEIARB/wFxIQMgBEF/RwRAIAUgAUECdGoh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IwZBEGokBiACIQECfCAAvUIgiKdB/////wdxIgNB/MOk/wNJBHwgA0GewZryA0kEfEQAAAAAAADwPwUgAEQAAAAAAAAAABByCwUgACAAoSADQf//v/8HSw0BGgJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwgQcgwECyABKwMAIAErAwhBARBwmgwDCyABKwMAIAErAwgQcpoMAgsgASsDACABKwMIQQEQcAsLIQAgAiQGIAALywEBA38jBiECIwZBEGokBiACIQECQCAAvUIgiKdB/////wdxIgNB/MOk/wNJBEAgA0GAgMDyA08EQCAARAAAAAAAAAAAQQAQcCEACwUgA0H//7//B0sEQCAAIAChIQAMAgsCQAJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwhBARBwIQAMBQsgASsDACABKwMIEHIhAAwECyABKwMAIAErAwhBARBwmiEADAMLIAErAwAgASsDCBBymiEACwsLIAIkBiAAC5sDAwJ/AX4CfCAAvSIDQj+IpyEBAnwCfwJAIANCIIinQf////8HcSICQarGmIQESwR8IANC////////////AINCgICAgICAgPj/AFYEQCAADwsgAETvOfr+Qi6GQGQEQCAARAAAAAAAAOB/og8FIABE0rx63SsjhsBjIABEUTAt1RBJh8BjcUUNAkQAAAAAAAAAACIADwsABSACQcLc2P4DSwRAIAJBscXC/wNLDQIgAUEBcyABawwDCyACQYCAwPEDSwR8QQAhASAABSAARAAAAAAAAPA/oA8LCwwCCyAARP6CK2VHFfc/oiABQQN0QYATaisDAKCqCyEBIAAgAbciBEQAAOD+Qi7mP6KhIgAgBER2PHk17znqPaIiBaELIQQgACAEIAQgBCAEoiIAIAAgACAAIABE0KS+cmk3Zj6iRPFr0sVBvbu+oKJELN4lr2pWET+gokSTvb4WbMFmv6CiRD5VVVVVVcU/oKKhIgCiRAAAAAAAAABAIAChoyAFoaBEAAAAAAAA8D+gIQAgAUUEQCAADwsgACABEGULnwMDAn8BfgV8IAC9IgNCIIinIQECfyADQgBTIgIgAUGAgMAASXIEfyADQv///////////wCDQgBRBEBEAAAAAAAA8L8gACAAoqMPCyACRQRAIABEAAAAAAAAUEOi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mgDjqR0AXmGRAAgb5gCFmWUAoBRfAI1AaACA2P8AJ3NNAAYGMQDKVhUAyahzAHviYABrjMAAQcMSC11A+yH5PwAAAAAtRHQ+AAAAgJhG+DwAAABgUcx4OwAAAICDG/A5AAAAQCAlejgAAACAIoLjNgAAAAAd82k1AAAAAAAA4D8AAAAAAADgvwAAAAAAAPA/AAAAAAAA+D8AQagTCwgG0M9D6/1MPgBBuxMLigZAA7jiP09nZ1MuL3N0Yl92b3JiaXMuYwBmLT5hbGxvYy5hbGxvY19idWZmZXJfbGVuZ3RoX2luX2J5dGVzID09IGYtPnRlbXBfb2Zmc2V0AHZvcmJpc19kZWNvZGVfaW5pdGlhbABmLT5ieXRlc19pbl9zZWcgPiAwAGdldDhfcGFja2V0X3JhdwBmLT5ieXRlc19pbl9zZWcgPT0gMABuZXh0X3NlZ21lbnQAdm9yYmlzX2RlY29kZV9wYWNrZXRfcmVzdAAhYy0+c3BhcnNlAGNvZGVib29rX2RlY29kZV9zY2FsYXJfcmF3ACFjLT5zcGFyc2UgfHwgeiA8IGMtPnNvcnRlZF9lbnRyaWVzAGNvZGVib29rX2RlY29kZV9kZWludGVybGVhdmVfcmVwZWF0AHogPCBjLT5zb3J0ZWRfZW50cmllcwBjb2RlYm9va19kZWNvZGVfc3RhcnQAKG4gJiAzKSA9PSAwAGltZGN0X3N0ZXAzX2l0ZXIwX2xvb3AAMABnZXRfd2luZG93AGYtPnRlbXBfb2Zmc2V0ID09IGYtPmFsbG9jLmFsbG9jX2J1ZmZlcl9sZW5ndGhfaW5fYnl0ZXMAc3RhcnRfZGVjb2RlcgB2b3JiaXNjLT5zb3J0ZWRfZW50cmllcyA9PSAwAGNvbXB1dGVfY29kZXdvcmRzAHogPj0gMCAmJiB6IDwgMzIAbGVuW2ldID49IDAgJiYgbGVuW2ldIDwgMzIAYXZhaWxhYmxlW3ldID09IDAAayA9PSBjLT5zb3J0ZWRfZW50cmllcwBjb21wdXRlX3NvcnRlZF9odWZmbWFuAGMtPnNvcnRlZF9jb2Rld29yZHNbeF0gPT0gY29kZQBsZW4gIT0gTk9fQ09ERQBpbmNsdWRlX2luX3NvcnQAcG93KChmbG9hdCkgcisxLCBkaW0pID4gZW50cmllcwBsb29rdXAxX3ZhbHVlcwAoaW50KSBmbG9vcihwb3coKGZsb2F0KSByLCBkaW0pKSA8PSBlbnRyaWVzAOoPBG5hbWUB4g9+AAVhYm9ydAENZW5sYXJnZU1lbW9yeQIOZ2V0VG90YWxNZW1vcnkDF2Fib3J0T25DYW5ub3RHcm93TWVtb3J5BA5fX19hc3NlcnRfZmFpbAULX19fc2V0RXJyTm8GBl9hYm9ydAcWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwgQX19ncm93V2FzbU1lbW9yeQkKc3RhY2tBbGxvYwoJc3RhY2tTYXZlCwxzdGFja1Jlc3RvcmUME2VzdGFibGlzaFN0YWNrU3BhY2UNCHNldFRocmV3DgtzZXRUZW1wUmV0MA8LZ2V0VGVtcFJldDAQEV9zdGJfdm9yYmlzX2Nsb3NlEQ5fdm9yYmlzX2RlaW5pdBILX3NldHVwX2ZyZWUTGl9zdGJfdm9yYmlzX2ZsdXNoX3B1c2hkYXRhFCFfc3RiX3ZvcmJpc19kZWNvZGVfZnJhbWVfcHVzaGRhdGEVBl9lcnJvchYgX3ZvcmJpc19zZWFyY2hfZm9yX3BhZ2VfcHVzaGRhdGEXGF9pc193aG9sZV9wYWNrZXRfcHJlc2VudBgVX3ZvcmJpc19kZWNvZGVfcGFja2V0GQxfZ2V0OF9wYWNrZXQaFF92b3JiaXNfZmluaXNoX2ZyYW1lGxlfc3RiX3ZvcmJpc19vcGVuX3B1c2hkYXRhHAxfdm9yYmlzX2luaXQdDl9zdGFydF9kZWNvZGVyHg1fdm9yYmlzX2FsbG9jHxtfc3RiX3ZvcmJpc19nZXRfZmlsZV9vZmZzZXQgE19tYXliZV9zdGFydF9wYWNrZXQhDV9mbHVzaF9wYWNrZXQiBV9nZXRuIwZfZ2V0MzIkE19zdGJfdm9yYmlzX2pzX29wZW4lFF9zdGJfdm9yYmlzX2pzX2Nsb3NlJhdfc3RiX3ZvcmJpc19qc19jaGFubmVscycaX3N0Yl92b3JiaXNfanNfc2FtcGxlX3JhdGUoFV9zdGJfdm9yYmlzX2pzX2RlY29kZSkNX2NyYzMyX3VwZGF0ZSoWX3ZvcmJpc19kZWNvZGVfaW5pdGlhbCsaX3ZvcmJpc19kZWNvZGVfcGFja2V0X3Jlc3QsCV9nZXRfYml0cy0FX2lsb2cuEF9nZXQ4X3BhY2tldF9yYXcvDV9uZXh0X3NlZ21lbnQwBV9nZXQ4MQtfc3RhcnRfcGFnZTIQX2NhcHR1cmVfcGF0dGVybjMdX3N0YXJ0X3BhZ2Vfbm9fY2FwdHVyZXBhdHRlcm40DV9wcmVwX2h1ZmZtYW41G19jb2RlYm9va19kZWNvZGVfc2NhbGFyX3JhdzYOX3ByZWRpY3RfcG9pbnQ3D19kZWNvZGVfcmVzaWR1ZTgJX2RvX2Zsb29yOQ1faW52ZXJzZV9tZGN0OgxfYml0X3JldmVyc2U7EV9tYWtlX2Jsb2NrX2FycmF5PBJfc2V0dXBfdGVtcF9tYWxsb2M9JF9jb2RlYm9va19kZWNvZGVfZGVpbnRlcmxlYXZlX3JlcGVhdD4PX3Jlc2lkdWVfZGVjb2RlPxVfY29kZWJvb2tfZGVjb2RlX3N0ZXBAEF9jb2RlYm9va19kZWNvZGVBFl9jb2RlYm9va19kZWNvZGVfc3RhcnRCCl9kcmF3X2xpbmVDF19pbWRjdF9zdGVwM19pdGVyMF9sb29wRBlfaW1kY3Rfc3RlcDNfaW5uZXJfcl9sb29wRRlfaW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wRh9faW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wX2xkNjU0RwhfaXRlcl81NEgLX2dldF93aW5kb3dJEF92b3JiaXNfdmFsaWRhdGVKDV9zdGFydF9wYWNrZXRLBV9za2lwTAtfY3JjMzJfaW5pdE0NX3NldHVwX21hbGxvY04QX3NldHVwX3RlbXBfZnJlZU8SX2NvbXB1dGVfY29kZXdvcmRzUBdfY29tcHV0ZV9zb3J0ZWRfaHVmZm1hblEcX2NvbXB1dGVfYWNjZWxlcmF0ZWRfaHVmZm1hblIPX2Zsb2F0MzJfdW5wYWNrUw9fbG9va3VwMV92YWx1ZXNUDl9wb2ludF9jb21wYXJlVQpfbmVpZ2hib3JzVg9faW5pdF9ibG9ja3NpemVXCl9hZGRfZW50cnlYEF9pbmNsdWRlX2luX3NvcnRZD191aW50MzJfY29tcGFyZVoYX2NvbXB1dGVfdHdpZGRsZV9mYWN0b3JzWw9fY29tcHV0ZV93aW5kb3dcE19jb21wdXRlX2JpdHJldmVyc2VdB19zcXVhcmVeB19tYWxsb2NfBV9mcmVlYAhfcmVhbGxvY2ESX3RyeV9yZWFsbG9jX2NodW5rYg5fZGlzcG9zZV9jaHVua2MRX19fZXJybm9fbG9jYXRpb25kB19tZW1jbXBlB19zY2FsYm5mBl9xc29ydGcFX3NpZnRoBF9zaHJpCF90cmlua2xlagRfc2hsawVfcG50emwIX2FfY3R6X2xtBl9jeWNsZW4LX19fcmVtX3BpbzJvEV9fX3JlbV9waW8yX2xhcmdlcAZfX19zaW5xBl9sZGV4cHIGX19fY29zcwRfY29zdARfc2ludQRfZXhwdgRfbG9ndwRfcG93eAtydW5Qb3N0U2V0c3kHX21lbWNweXoHX21lbXNldHsFX3Nicmt8C2R5bkNhbGxfaWlpfQJiMA=="),function(l){return l.charCodeAt(0)});var C=C!==void 0?C:{},L={};for(e in C)C.hasOwnProperty(e)&&(L[e]=C[e]);C.arguments=[],C.thisProgram="./this.program",C.quit=function(l,d){throw d},C.preRun=[],C.postRun=[];var Z=!1,EA=!1,tA=!1,T=!1;Z=typeof window=="object",EA=typeof importScripts=="function",tA=typeof process=="object"&&typeof Rs=="function"&&!Z&&!EA,T=!Z&&!tA&&!EA;var $="";function hA(l){return C.locateFile?C.locateFile(l,$):$+l}tA?($=__dirname+"/",C.read=function(d,u){var k;return A||(A=void 0),t||(t=void 0),d=t.normalize(d),k=A.readFileSync(d),u?k:k.toString()},C.readBinary=function(d){var u=C.read(d,!0);return u.buffer||(u=new Uint8Array(u)),WA(u.buffer),u},process.argv.length>1&&(C.thisProgram=process.argv[1].replace(/\\/g,"/")),C.arguments=process.argv.slice(2),typeof module<"u",process.on("uncaughtException",function(l){if(!(l instanceof kt))throw l}),process.on("unhandledRejection",function(l,d){process.exit(1)}),C.quit=function(l){process.exit(l)},C.inspect=function(){return"[Emscripten Module object]"}):T?(typeof read<"u"&&(C.read=function(d){return read(d)}),C.readBinary=function(d){var u;return typeof readbuffer=="function"?new Uint8Array(readbuffer(d)):(WA(typeof(u=read(d,"binary"))=="object"),u)},typeof scriptArgs<"u"?C.arguments=scriptArgs:typeof arguments<"u"&&(C.arguments=arguments),typeof quit=="function"&&(C.quit=function(l){quit(l)})):(Z||EA)&&(Z?document.currentScript&&($=document.currentScript.src):$=self.location.href,$=$.indexOf("blob:")!==0?$.split("/").slice(0,-1).join("/")+"/":"",C.read=function(d){var u=new XMLHttpRequest;return u.open("GET",d,!1),u.send(null),u.responseText},EA&&(C.readBinary=function(d){var u=new XMLHttpRequest;return u.open("GET",d,!1),u.responseType="arraybuffer",u.send(null),new Uint8Array(u.response)}),C.readAsync=function(d,u,k){var K=new XMLHttpRequest;K.open("GET",d,!0),K.responseType="arraybuffer",K.onload=function(){if(K.status==200||K.status==0&&K.response){u(K.response);return}k()},K.onerror=k,K.send(null)},C.setWindowTitle=function(l){document.title=l});var sA=C.print||(typeof console<"u"?console.log.bind(console):typeof print<"u"?print:null),oA=C.printErr||(typeof printErr<"u"?printErr:typeof console<"u"&&console.warn.bind(console)||sA);for(e in L)L.hasOwnProperty(e)&&(C[e]=L[e]);function CA(l){var d=h;return h=h+l+15&-16,d}function v(l){var d=i[M>>2],u=d+l+15&-16;return i[M>>2]=u,u>=NA&&!yt()?(i[M>>2]=d,0):d}function J(l,d){return d||(d=16),l=Math.ceil(l/d)*d}function W(l){switch(l){case"i1":case"i8":return 1;case"i16":return 2;case"i32":case"float":return 4;case"i64":case"double":return 8;default:if(l[l.length-1]==="*")return 4;if(l[0]!=="i")return 0;var d=parseInt(l.substr(1));return WA(d%8==0),d/8}}function q(l){q.shown||(q.shown={}),q.shown[l]||(q.shown[l]=1,oA(l))}L=void 0;var rA={"f64-rem":function(l,d){return l%d},debugger:function(){}},JA=[];function Ie(l,d){for(var u=0,k=u;k<u+0;k++)if(!JA[k])return JA[k]=l,1+k;throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS."}function ce(l){JA[l-1]=null}var le={};function $e(l,d){if(l){WA(d),le[d]||(le[d]={});var u=le[d];return u[l]||(d.length===1?u[l]=function(){return aA(d,l)}:d.length===2?u[l]=function(K){return aA(d,l,[K])}:u[l]=function(){return aA(d,l,Array.prototype.slice.call(arguments))}),u[l]}}function pe(l,d,u){return u?+(l>>>0)+4294967296*+(d>>>0):+(l>>>0)+4294967296*+(0|d)}function aA(l,d,u){return u&&u.length?C["dynCall_"+l].apply(null,[d].concat(u)):C["dynCall_"+l].call(null,d)}var lA=0,Qe=0;function WA(l,d){l||ke("Assertion failed: "+d)}function Re(l){var d=C["_"+l];return WA(d,"Cannot call unknown function "+l+", make sure it is exported"),d}var Ge={stackSave:function(){Un()},stackRestore:function(){Ln()},arrayToC:function(l){var d,u,k=Zt(l.length);return d=l,u=k,s.set(d,u),k},stringToC:function(l){var d=0;if(l!=null&&l!==0){var u=(l.length<<2)+1;d=Zt(u),mt(l,d,u)}return d}},ut={string:Ge.stringToC,array:Ge.arrayToC};function At(l,d,u,k,K){var iA=Re(l),gA=[],P=0;if(k)for(var LA=0;LA<k.length;LA++){var fA=ut[u[LA]];fA?(P===0&&(P=Un()),gA[LA]=fA(k[LA])):gA[LA]=k[LA]}var mA,QA=iA.apply(null,gA);return QA=(mA=QA,d==="string"?Me(mA):d==="boolean"?!!mA:mA),P!==0&&Ln(P),QA}function ft(l,d,u,k){switch((u=u||"i8").charAt(u.length-1)==="*"&&(u="i32"),u){case"i1":case"i8":s[l>>0]=d;break;case"i16":r[l>>1]=d;break;case"i32":i[l>>2]=d;break;case"i64":tempI64=[d>>>0,+si(tempDouble=d)>=1?tempDouble>0?(0|ri(+Ss(tempDouble/4294967296),4294967295))>>>0:~~+oi((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0],i[l>>2]=tempI64[0],i[l+4>>2]=tempI64[1];break;case"float":B[l>>2]=d;break;case"double":c[l>>3]=d;break;default:ke("invalid type for setValue: "+u)}}function Fn(l,d,u){switch((d=d||"i8").charAt(d.length-1)==="*"&&(d="i32"),d){case"i1":case"i8":return s[l>>0];case"i16":return r[l>>1];case"i32":case"i64":return i[l>>2];case"float":return B[l>>2];case"double":return c[l>>3];default:ke("invalid type for getValue: "+d)}return null}function wn(l,d,u,k){typeof l=="number"?(iA=!0,gA=l):(iA=!1,gA=l.length);var K=typeof d=="string"?d:null;if(P=u==4?k:[typeof Pt=="function"?Pt:CA,Zt,CA,v][u===void 0?2:u](Math.max(gA,K?1:d.length)),iA){for(k=P,WA((3&P)==0),LA=P+(-4&gA);k<LA;k+=4)i[k>>2]=0;for(LA=P+gA;k<LA;)s[k++>>0]=0;return P}if(K==="i8")return l.subarray||l.slice?o.set(l,P):o.set(new Uint8Array(l),P),P;for(var iA,gA,P,LA,fA,mA,QA,nA=0;nA<gA;){var VA=l[nA];if((fA=K||d[nA])===0){nA++;continue}fA=="i64"&&(fA="i32"),ft(P+nA,VA,fA),QA!==fA&&(mA=W(fA),QA=fA),nA+=mA}return P}function et(l){return m?Nn?Pt(l):v(l):CA(l)}function Me(l,d){if(d===0||!l)return"";for(var u,k,K,iA=0,gA=0;iA|=k=o[l+gA>>0],(k!=0||d)&&(gA++,!d||gA!=d););d||(d=gA);var P="";if(iA<128){for(;d>0;)K=String.fromCharCode.apply(String,o.subarray(l,l+Math.min(d,1024))),P=P?P+K:K,l+=1024,d-=1024;return P}return u=l,function(fA,mA){for(var QA=mA;fA[QA];)++QA;if(QA-mA>16&&fA.subarray&&Yt)return Yt.decode(fA.subarray(mA,QA));for(var nA,VA,ee,te,ne,Ze,se="";;){if(!(nA=fA[mA++]))return se;if(!(128&nA)){se+=String.fromCharCode(nA);continue}if(VA=63&fA[mA++],(224&nA)==192){se+=String.fromCharCode((31&nA)<<6|VA);continue}if(ee=63&fA[mA++],(240&nA)==224?nA=(15&nA)<<12|VA<<6|ee:(te=63&fA[mA++],(248&nA)==240?nA=(7&nA)<<18|VA<<12|ee<<6|te:(ne=63&fA[mA++],nA=(252&nA)==248?(3&nA)<<24|VA<<18|ee<<12|te<<6|ne:(1&nA)<<30|VA<<24|ee<<18|te<<12|ne<<6|(Ze=63&fA[mA++]))),nA<65536)se+=String.fromCharCode(nA);else{var Ft=nA-65536;se+=String.fromCharCode(55296|Ft>>10,56320|1023&Ft)}}}(o,u)}function zA(l){for(var d="";;){var u=s[l++>>0];if(!u)return d;d+=String.fromCharCode(u)}}function Rn(l,d){return function(k,K,iA){for(var gA=0;gA<k.length;++gA)s[K++>>0]=k.charCodeAt(gA);iA||(s[K>>0]=0)}(l,d,!1)}var Yt=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function tt(l,d,u,k){if(!(k>0))return 0;for(var K=u,iA=u+k-1,gA=0;gA<l.length;++gA){var P=l.charCodeAt(gA);if(P>=55296&&P<=57343&&(P=65536+((1023&P)<<10)|1023&l.charCodeAt(++gA)),P<=127){if(u>=iA)break;d[u++]=P}else if(P<=2047){if(u+1>=iA)break;d[u++]=192|P>>6,d[u++]=128|63&P}else if(P<=65535){if(u+2>=iA)break;d[u++]=224|P>>12,d[u++]=128|P>>6&63,d[u++]=128|63&P}else if(P<=2097151){if(u+3>=iA)break;d[u++]=240|P>>18,d[u++]=128|P>>12&63,d[u++]=128|P>>6&63,d[u++]=128|63&P}else if(P<=67108863){if(u+4>=iA)break;d[u++]=248|P>>24,d[u++]=128|P>>18&63,d[u++]=128|P>>12&63,d[u++]=128|P>>6&63,d[u++]=128|63&P}else{if(u+5>=iA)break;d[u++]=252|P>>30,d[u++]=128|P>>24&63,d[u++]=128|P>>18&63,d[u++]=128|P>>12&63,d[u++]=128|P>>6&63,d[u++]=128|63&P}}return d[u]=0,u-K}function mt(l,d,u){return tt(l,o,d,u)}function KA(l){for(var d=0,u=0;u<l.length;++u){var k=l.charCodeAt(u);k>=55296&&k<=57343&&(k=65536+((1023&k)<<10)|1023&l.charCodeAt(++u)),k<=127?++d:k<=2047?d+=2:k<=65535?d+=3:k<=2097151?d+=4:k<=67108863?d+=5:d+=6}return d}var ye=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function pt(l){for(var d=l,u=d>>1;r[u];)++u;if((d=u<<1)-l>32&&ye)return ye.decode(o.subarray(l,d));for(var k=0,K="";;){var iA=r[l+2*k>>1];if(iA==0)return K;++k,K+=String.fromCharCode(iA)}}function Gn(l,d,u){if(u===void 0&&(u=2147483647),u<2)return 0;for(var k=d,K=(u-=2)<2*l.length?u/2:l.length,iA=0;iA<K;++iA){var gA=l.charCodeAt(iA);r[d>>1]=gA,d+=2}return r[d>>1]=0,d-k}function Se(l){return 2*l.length}function Jt(l){for(var d=0,u="";;){var k=i[l+4*d>>2];if(k==0)return u;if(++d,k>=65536){var K=k-65536;u+=String.fromCharCode(55296|K>>10,56320|1023&K)}else u+=String.fromCharCode(k)}}function Kt(l,d,u){if(u===void 0&&(u=2147483647),u<4)return 0;for(var k=d,K=k+u-4,iA=0;iA<l.length;++iA){var gA=l.charCodeAt(iA);if(gA>=55296&&gA<=57343&&(gA=65536+((1023&gA)<<10)|1023&l.charCodeAt(++iA)),i[d>>2]=gA,(d+=4)+4>K)break}return i[d>>2]=0,d-k}function us(l){for(var d=0,u=0;u<l.length;++u){var k=l.charCodeAt(u);k>=55296&&k<=57343&&++u,d+=4}return d}function fs(l){var d=KA(l)+1,u=Pt(d);return u&&tt(l,s,u,d),u}function qt(l){var d=KA(l)+1,u=Zt(d);return tt(l,s,u,d),u}function Oe(l){return l}function Mn(){var l,d=function(){var k=Error();if(!k.stack){try{throw Error(0)}catch(K){k=K}if(!k.stack)return"(no stack trace available)"}return k.stack.toString()}();return C.extraStackTrace&&(d+=`
14
- `+C.extraStackTrace()),(l=d).replace(/__Z[\w\d_]+/g,function(u){var k,K=k=u;return u===K?u:u+" ["+K+"]"})}function De(l,d){return l%d>0&&(l+=d-l%d),l}function nt(l){C.buffer=n=l}function Ve(){C.HEAP8=s=new Int8Array(n),C.HEAP16=r=new Int16Array(n),C.HEAP32=i=new Int32Array(n),C.HEAPU8=o=new Uint8Array(n),C.HEAPU16=E=new Uint16Array(n),C.HEAPU32=g=new Uint32Array(n),C.HEAPF32=B=new Float32Array(n),C.HEAPF64=c=new Float64Array(n)}function yt(){var l=C.usingWasm?65536:16777216,d=2147483648-l;if(i[M>>2]>d)return!1;var u=NA;for(NA=Math.max(NA,16777216);NA<i[M>>2];)NA=NA<=536870912?De(2*NA,l):Math.min(De((3*NA+2147483648)/4,l),d);var k=C.reallocBuffer(NA);return k&&k.byteLength==NA?(nt(k),Ve(),!0):(NA=u,!1)}Q=h=f=S=x=D=M=0,m=!1,C.reallocBuffer||(C.reallocBuffer=function(l){try{if(ArrayBuffer.transfer)d=ArrayBuffer.transfer(n,l);else{var d,u=s;d=new ArrayBuffer(l),new Int8Array(d).set(u)}}catch{return!1}return!!ii(d)&&d});try{(w=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get))(new ArrayBuffer(4))}catch{w=function(d){return d.byteLength}}var st=C.TOTAL_STACK||5242880,NA=C.TOTAL_MEMORY||16777216;function Ot(){return NA}function xe(l){for(;l.length>0;){var d=l.shift();if(typeof d=="function"){d();continue}var u=d.func;typeof u=="number"?d.arg===void 0?C.dynCall_v(u):C.dynCall_vi(u,d.arg):u(d.arg===void 0?null:d.arg)}}NA<st&&oA("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+NA+"! (TOTAL_STACK="+st+")"),C.buffer?n=C.buffer:(typeof WebAssembly=="object"&&typeof WebAssembly.Memory=="function"?(C.wasmMemory=new WebAssembly.Memory({initial:NA/65536}),n=C.wasmMemory.buffer):n=new ArrayBuffer(NA),C.buffer=n),Ve();var St=[],xn=[],ms=[],ps=[],ys=[],Nn=!1,ei=!1;function ti(l){St.unshift(l)}function Ui(l){xn.unshift(l)}function Ti(l){ms.unshift(l)}function vi(l){ps.unshift(l)}function ni(l){ys.unshift(l)}function Hi(l,d,u){var k,K;q("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!"),u&&(k=s[K=d+KA(l)]),mt(l,d,1/0),u&&(s[K]=k)}function Yi(l,d,u){return l>=0?l:d<=32?2*Math.abs(1<<d-1)+l:Math.pow(2,d)+l}function Ji(l,d,u){if(l<=0)return l;var k=d<=32?Math.abs(1<<d-1):Math.pow(2,d-1);return l>=k&&(d<=32||l>k)&&(l=-2*k+l),l}var si=Math.abs,oi=Math.ceil,Ss=Math.floor,ri=Math.min,Pe=0,bn=null,Dt=null;function Ki(l){return l}C.preloadedImages={},C.preloadedAudios={};var Ds="data:application/octet-stream;base64,";function Vt(l){return String.prototype.startsWith?l.startsWith(Ds):l.indexOf(Ds)===0}(function(){var d="main.wast",u="main.wasm",k="main.temp.asm.js";Vt(d)||(d=hA(d)),Vt(u)||(u=hA(u)),Vt(k)||(k=hA(k));var K={global:null,env:null,asm2wasm:rA,parent:C},iA=null;function gA(QA){return QA}function P(){try{if(C.wasmBinary)return new Uint8Array(C.wasmBinary);if(C.readBinary)return C.readBinary(u);throw"both async and sync fetching of the wasm failed"}catch(QA){ke(QA)}}C.asmPreload=C.asm;var LA=C.reallocBuffer,fA=function(QA){QA=De(QA,C.usingWasm?65536:16777216);var nA=C.buffer.byteLength;if(C.usingWasm)try{var VA=C.wasmMemory.grow((QA-nA)/65536);return VA!==-1?C.buffer=C.wasmMemory.buffer:null}catch{return null}};C.reallocBuffer=function(QA){return mA==="asmjs"?LA(QA):fA(QA)};var mA="";C.asm=function(QA,nA,VA){var ee;if(!(nA=ee=nA).table){var te,ne=C.wasmTableSize;ne===void 0&&(ne=1024);var Ze=C.wasmMaxTableSize;typeof WebAssembly=="object"&&typeof WebAssembly.Table=="function"?Ze!==void 0?nA.table=new WebAssembly.Table({initial:ne,maximum:Ze,element:"anyfunc"}):nA.table=new WebAssembly.Table({initial:ne,element:"anyfunc"}):nA.table=Array(ne),C.wasmTable=nA.table}return nA.memoryBase||(nA.memoryBase=C.STATIC_BASE),nA.tableBase||(nA.tableBase=0),te=function(Ft,ot,vn){if(typeof WebAssembly!="object")return oA("no native wasm support detected"),!1;if(!(C.wasmMemory instanceof WebAssembly.Memory))return oA("no native wasm Memory in use"),!1;function Xt(de,ue){if((iA=de.exports).memory){var wt,Hn,ws;wt=iA.memory,Hn=C.buffer,wt.byteLength<Hn.byteLength&&oA("the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here"),ws=new Int8Array(Hn),new Int8Array(wt).set(ws),nt(wt),Ve()}C.asm=iA,C.usingWasm=!0,function(Wi){if(Pe--,C.monitorRunDependencies&&C.monitorRunDependencies(Pe),Pe==0&&(bn!==null&&(clearInterval(bn),bn=null),Dt)){var ai=Dt;Dt=null,ai()}}("wasm-instantiate")}if(ot.memory=C.wasmMemory,K.global={NaN:NaN,Infinity:1/0},K["global.Math"]=Math,K.env=ot,Pe++,C.monitorRunDependencies&&C.monitorRunDependencies(Pe),C.instantiateWasm)try{return C.instantiateWasm(K,Xt)}catch(de){return oA("Module.instantiateWasm callback failed with error: "+de),!1}function rt(de){Xt(de.instance,de.module)}function Fs(de){(!C.wasmBinary&&(Z||EA)&&typeof fetch=="function"?fetch(u,{credentials:"same-origin"}).then(function(ue){if(!ue.ok)throw"failed to load wasm binary file at '"+u+"'";return ue.arrayBuffer()}).catch(function(){return P()}):new Promise(function(ue,wt){ue(P())})).then(function(ue){return WebAssembly.instantiate(ue,K)}).then(de).catch(function(ue){oA("failed to asynchronously prepare wasm: "+ue),ke(ue)})}return C.wasmBinary||typeof WebAssembly.instantiateStreaming!="function"||Vt(u)||typeof fetch!="function"?Fs(rt):WebAssembly.instantiateStreaming(fetch(u,{credentials:"same-origin"}),K).then(rt).catch(function(de){oA("wasm streaming compile failed: "+de),oA("falling back to ArrayBuffer instantiation"),Fs(rt)}),{}}(QA,nA,VA),WA(te,"no binaryen method succeeded."),te},C.asm})(),h=(Q=1024)+4816,xn.push(),C.STATIC_BASE=Q,C.STATIC_BUMP=4816;var _A=h;function qi(l){s[_A]=s[l],s[_A+1]=s[l+1],s[_A+2]=s[l+2],s[_A+3]=s[l+3]}function Oi(l){s[_A]=s[l],s[_A+1]=s[l+1],s[_A+2]=s[l+2],s[_A+3]=s[l+3],s[_A+4]=s[l+4],s[_A+5]=s[l+5],s[_A+6]=s[l+6],s[_A+7]=s[l+7]}function Vi(l,d,u){var k=u>0?u:KA(l)+1,K=Array(k),iA=tt(l,K,0,K.length);return d&&(K.length=iA),K}function Pi(l){for(var d=[],u=0;u<l.length;u++){var k=l[u];k>255&&(k&=255),d.push(String.fromCharCode(k))}return d.join("")}h+=16,M=CA(4),x=(f=S=J(h))+st,D=J(x),i[M>>2]=D,m=!0,C.wasmTableSize=4,C.wasmMaxTableSize=4,C.asmGlobalArg={},C.asmLibraryArg={abort:ke,assert:WA,enlargeMemory:yt,getTotalMemory:Ot,abortOnCannotGrowMemory:function(){ke("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+NA+", (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(d,u,k){var K=Un();try{return C.dynCall_iii(d,u,k)}catch(iA){if(Ln(K),typeof iA!="number"&&iA!=="longjmp")throw iA;C.setThrew(1,0)}},___assert_fail:function(d,u,k,K){ke("Assertion failed: "+Me(d)+", at: "+[u?Me(u):"unknown filename",k,K?Me(K):"unknown function"])},___setErrNo:function(d){return C.___errno_location&&(i[C.___errno_location()>>2]=d),d},_abort:function(){C.abort()},_emscripten_memcpy_big:function(d,u,k){return o.set(o.subarray(u,u+k),d),d},_llvm_floor_f64:Ss,DYNAMICTOP_PTR:M,tempDoublePtr:_A,ABORT:lA,STACKTOP:S,STACK_MAX:x};var ks=C.asm(C.asmGlobalArg,C.asmLibraryArg,n);C.asm=ks,C.___errno_location=function(){return C.asm.___errno_location.apply(null,arguments)};var ii=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 Pt=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 Zt=C.stackAlloc=function(){return C.asm.stackAlloc.apply(null,arguments)},Ln=C.stackRestore=function(){return C.asm.stackRestore.apply(null,arguments)},Un=C.stackSave=function(){return C.asm.stackSave.apply(null,arguments)};function kt(l){this.name="ExitStatus",this.message="Program terminated with exit("+l+")",this.status=l}function Tn(l){l=l||C.arguments,!(Pe>0)&&(function(){if(C.preRun)for(typeof C.preRun=="function"&&(C.preRun=[C.preRun]);C.preRun.length;)ti(C.preRun.shift());xe(St)}(),!(Pe>0)&&(C.calledRun||(C.setStatus?(C.setStatus("Running..."),setTimeout(function(){setTimeout(function(){C.setStatus("")},1),d()},1)):d())));function d(){!C.calledRun&&(C.calledRun=!0,lA||(Nn||(Nn=!0,xe(xn)),xe(ms),C.onRuntimeInitialized&&C.onRuntimeInitialized(),function(){if(C.postRun)for(typeof C.postRun=="function"&&(C.postRun=[C.postRun]);C.postRun.length;)ni(C.postRun.shift());xe(ys)}()))}}function Zi(l,d){(!d||!C.noExitRuntime||l!==0)&&(C.noExitRuntime||(lA=!0,Qe=l,S=G,xe(ps),ei=!0,C.onExit&&C.onExit(l)),C.quit(l,new kt(l)))}function ke(l){throw C.onAbort&&C.onAbort(l),l!==void 0?(sA(l),oA(l),l=JSON.stringify(l)):l="",lA=!0,Qe=1,"abort("+l+"). Build with -s ASSERTIONS=1 for more info."}if(C.dynCall_iii=function(){return C.asm.dynCall_iii.apply(null,arguments)},C.asm=ks,C.ccall=At,C.cwrap=function(d,u,k,K){var iA=(k=k||[]).every(function(gA){return gA==="number"});return u!=="string"&&iA&&!K?Re(d):function(){return At(d,u,k,arguments,K)}},kt.prototype=Error(),kt.prototype.constructor=kt,Dt=function l(){C.calledRun||Tn(),C.calledRun||(Dt=l)},C.run=Tn,C.abort=ke,C.preInit)for(typeof C.preInit=="function"&&(C.preInit=[C.preInit]);C.preInit.length>0;)C.preInit.pop()();C.noExitRuntime=!0,Tn(),C.onRuntimeInitialized=()=>{mo=!0,po()},me.decode=function(l){return function(u){if(!mo)throw Error("SF3 decoder has not been initialized yet. Did you await synth.isReady?");var k={};function K(ot){return new Int32Array(C.HEAPU8.buffer,ot,1)[0]}function iA(ot,vn){var Xt=new ArrayBuffer(vn*Float32Array.BYTES_PER_ELEMENT),rt=new Float32Array(Xt);return rt.set(new Float32Array(C.HEAPU8.buffer,ot,vn)),rt}k.open=C.cwrap("stb_vorbis_js_open","number",[]),k.close=C.cwrap("stb_vorbis_js_close","void",["number"]),k.channels=C.cwrap("stb_vorbis_js_channels","number",["number"]),k.sampleRate=C.cwrap("stb_vorbis_js_sample_rate","number",["number"]),k.decode=C.cwrap("stb_vorbis_js_decode","number",["number","number","number","number","number"]);var gA,P,LA,fA,mA=k.open(),QA=(gA=u,P=u.byteLength,LA=C._malloc(P),(fA=new Uint8Array(C.HEAPU8.buffer,LA,P)).set(new Uint8Array(gA,0,P)),fA),nA=C._malloc(4),VA=C._malloc(4),ee=k.decode(mA,QA.byteOffset,QA.byteLength,nA,VA);if(C._free(QA.byteOffset),ee<0)throw k.close(mA),C._free(nA),Error("stbvorbis decode failed: "+ee);for(var te=k.channels(mA),ne=Array(te),Ze=new Int32Array(C.HEAPU32.buffer,K(nA),te),se=0;se<te;se++)ne[se]=iA(Ze[se],ee),C._free(Ze[se]);var Ft=k.sampleRate(mA);return k.close(mA),C._free(K(nA)),C._free(nA),{data:ne,sampleRate:Ft,eof:!0,error:null}}(l)}})();var _n=new Float32Array(30001);for(let e=0;e<_n.length;e++){let A=-15e3+e;_n[e]=Math.pow(2,A/1200)}function Ce(e){return e<=-32767?0:_n[e- -15e3]}var gn=-2e4,yo=16500,jn=new Float32Array(yo-gn+1);for(let e=0;e<jn.length;e++){let A=gn+e;jn[e]=440*Math.pow(2,(A-6900)/1200)}function Mt(e){return e<gn||e>yo?440*Math.pow(2,(e-6900)/1200):jn[~~e-gn]}var As=-1660,Qi=1600,$n=new Float32Array((Qi-As)*100+1);for(let e=0;e<$n.length;e++){let A=(As*100+e)/100;$n[e]=Math.pow(10,-A/20)}function ae(e){return $n[Math.floor((e-As)*100)]}var So=.01,Ae=100,es=90,di=15e-6,Ee=class e{currentSampleTime=0;sampleRate;currentAttenuationDb=Ae;state=0;releaseStartDb=Ae;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>=es}static startRelease(A){A.volumeEnvelope.releaseStartTimeSamples=A.volumeEnvelope.currentSampleTime,A.volumeEnvelope.currentReleaseGain=ae(A.volumeEnvelope.currentAttenuationDb),e.recalculate(A)}static recalculate(A){let t=A.volumeEnvelope,n=g=>Math.max(0,Math.floor(Ce(g)*t.sampleRate));t.attenuationTarget=Math.max(0,Math.min(A.modulatedGenerators[a.initialAttenuation],1440))/10,t.attenuationTargetGain=ae(t.attenuationTarget),t.sustainDbRelative=Math.min(Ae,A.modulatedGenerators[a.sustainVolEnv]/10);let s=Math.min(Ae,t.sustainDbRelative);t.attackDuration=n(A.modulatedGenerators[a.attackVolEnv]);let o=A.modulatedGenerators[a.decayVolEnv],r=(60-A.targetKey)*A.modulatedGenerators[a.keyNumToVolEnvDecay],E=s/Ae;t.decayDuration=n(o+r)*E,t.releaseDuration=n(A.modulatedGenerators[a.releaseVolEnv]),t.delayEnd=n(A.modulatedGenerators[a.delayVolEnv]),t.attackEnd=t.attackDuration+t.delayEnd;let i=(60-A.targetKey)*A.modulatedGenerators[a.keyNumToVolEnvHold];if(t.holdEnd=n(A.modulatedGenerators[a.holdVolEnv]+i)+t.attackEnd,t.decayEnd=t.decayDuration+t.holdEnd,t.state===0&&t.attackEnd===0&&(t.state=2),A.isInRelease){let g=Math.max(0,Math.min(Ae,t.sustainDbRelative)),B=g/Ae;switch(t.decayDuration=n(o+r)*B,t.state){case 0:t.releaseStartDb=Ae;break;case 1:let Q=1-(t.attackEnd-t.releaseStartTimeSamples)/t.attackDuration;t.releaseStartDb=20*Math.log10(Q)*-1;break;case 2:t.releaseStartDb=0;break;case 3:t.releaseStartDb=(1-(t.decayEnd-t.releaseStartTimeSamples)/t.decayDuration)*g;break;case 4:t.releaseStartDb=g;break}t.releaseStartDb=Math.max(0,Math.min(t.releaseStartDb,Ae)),t.releaseStartDb>=es&&(A.finished=!0),t.currentReleaseGain=ae(t.releaseStartDb);let c=(Ae-t.releaseStartDb)/Ae;t.releaseDuration*=c}}static apply(A,t,n,s){let o=A.volumeEnvelope,r=n/10,E=s;if(A.isInRelease){let g=o.currentSampleTime-o.releaseStartTimeSamples;if(g>=o.releaseDuration){for(let c=0;c<t.length;c++)t[c]=0;A.finished=!0;return}let B=Ae-o.releaseStartDb;for(let c=0;c<t.length;c++){o.attenuation+=(o.attenuationTargetGain-o.attenuation)*E;let Q=g/o.releaseDuration*B+o.releaseStartDb;o.currentReleaseGain=o.attenuation*ae(Q+r),t[c]*=o.currentReleaseGain,o.currentSampleTime++,g++}o.currentReleaseGain<=di&&(A.finished=!0);return}let i=0;switch(o.state){case 0:for(;o.currentSampleTime<o.delayEnd;)if(o.currentAttenuationDb=Ae,t[i]=0,o.currentSampleTime++,++i>=t.length)return;o.state++;case 1:for(;o.currentSampleTime<o.attackEnd;){o.attenuation+=(o.attenuationTargetGain-o.attenuation)*E;let g=1-(o.attackEnd-o.currentSampleTime)/o.attackDuration;if(t[i]*=g*o.attenuation*ae(r),o.currentAttenuationDb=0,o.currentSampleTime++,++i>=t.length)return}o.state++;case 2:for(;o.currentSampleTime<o.holdEnd;)if(o.attenuation+=(o.attenuationTargetGain-o.attenuation)*E,t[i]*=o.attenuation*ae(r),o.currentAttenuationDb=0,o.currentSampleTime++,++i>=t.length)return;o.state++;case 3:for(;o.currentSampleTime<o.decayEnd;)if(o.attenuation+=(o.attenuationTargetGain-o.attenuation)*E,o.currentAttenuationDb=(1-(o.decayEnd-o.currentSampleTime)/o.decayDuration)*o.sustainDbRelative,t[i]*=o.attenuation*ae(o.currentAttenuationDb+r),o.currentSampleTime++,++i>=t.length)return;o.state++;case 4:for(o.canEndOnSilentSustain&&o.sustainDbRelative>=es&&(A.finished=!0);;)if(o.attenuation+=(o.attenuationTargetGain-o.attenuation)*E,t[i]*=o.attenuation*ae(o.sustainDbRelative+r),o.currentAttenuationDb=o.sustainDbRelative,o.currentSampleTime++,++i>=t.length)return}}};function Do(e,A){this.enableEventSystem&&this.post({messageType:qA.eventCall,messageData:{eventName:e,eventData:A}})}function ui(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}}var ts={SoundCanvasText:0,XGText:1,SoundCanvasDotDisplay:2};function ko(e,A=0){let t=e[0];if(!(this.deviceID!==XA&&e[1]!==127&&this.deviceID!==e[1]))switch(t){default:Y(`%cUnrecognized SysEx: %c${HA(e)}`,I.warn,I.unrecognized);break;case 126:case 127:switch(e[2]){case 4:let s;switch(e[3]){case 1:let o=e[5]<<7|e[4];this.setMIDIVolume(o/16384),p(`%cMaster Volume. Volume: %c${o}`,I.info,I.value);break;case 2:let E=((e[5]<<7|e[4])-8192)/8192;this.setMasterPan(E),p(`%cMaster Pan. Pan: %c${E}`,I.info,I.value);break;case 3:let i=(e[5]<<7|e[6])-8192;s=Math.floor(i/81.92),this.setMasterTuning(s),p(`%cMaster Fine Tuning. Cents: %c${s}`,I.info,I.value);break;case 4:s=(e[5]-64)*100,this.setMasterTuning(s),p(`%cMaster Coarse Tuning. Cents: %c${s}`,I.info,I.value);break;default:Y(`%cUnrecognized MIDI Device Control Real-time message: %c${HA(e)}`,I.warn,I.unrecognized)}break;case 9:e[3]===1?(p("%cGM1 system on",I.info),this.setSystem("gm")):e[3]===3?(p("%cGM2 system on",I.info),this.setSystem("gm2")):(p("%cGM system off, defaulting to GS",I.info),this.setSystem("gs"));break;case 8:switch(e[3]){case 2:case 7:let o=4;e[3]===7&&o++;let r=e[o++],E=e[o++];for(let g=0;g<E;g++)this.tunings[r][e[o++]]=ui(e[o++],e[o++],e[o++]);p(`%cSingle Note Tuning. Program: %c${r}%c Keys affected: %c${E}`,I.info,I.recognized,I.info,I.recognized);break;case 9:case 8:let i=new Int8Array(12);if(e[3]===8)for(let g=0;g<12;g++)i[g]=e[7+g]-64;else for(let g=0;g<24;g+=2){let B=(e[7+g]<<7|e[8+g])-8192;i[g/2]=Math.floor(B/81.92)}(e[4]&1)===1&&this.midiAudioChannels[14+A].setOctaveTuning(i),(e[4]>>1&1)===1&&this.midiAudioChannels[15+A].setOctaveTuning(i);for(let g=0;g<7;g++)(e[5]>>g&1)===1&&this.midiAudioChannels[7+g+A].setOctaveTuning(i);for(let g=0;g<7;g++)(e[6]>>g&1)===1&&this.midiAudioChannels[g+A].setOctaveTuning(i);p(`%cMIDI Octave Scale ${e[3]===8?"(1 byte)":"(2 bytes)"} tuning via Tuning: %c${i.join(" ")}`,I.info,I.value);break;default:Y(`%cUnrecognized MIDI Tuning standard message: %c${HA(e)}`,I.warn,I.unrecognized);break}break;default:Y(`%cUnrecognized MIDI Realtime/non realtime message: %c${HA(e)}`,I.warn,I.unrecognized)}break;case 65:let n=function(){Y(`%cUnrecognized Roland %cGS %cSysEx: %c${HA(e)}`,I.warn,I.recognized,I.warn,I.unrecognized)};if(e[2]===66&&e[3]===18){let s=e[7];if(e[6]===127){s===0?(p("%cGS Reset received!",I.info),this.resetAllControllers(!1),this.setSystem("gs")):s===127&&(p("%cGS system off, switching to GM2",I.info),this.resetAllControllers(!1),this.setSystem("gm2"));return}else if(e[4]===64){if((e[5]&16)>0){let o=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][e[5]&15]+A,r=this.midiAudioChannels[o];switch(e[6]){default:n();break;case 21:let E=s>0&&e[5]>>4;r.setDrums(E),p(`%cChannel %c${o}%c ${E?"is now a drum channel":"now isn't a drum channel"}%c via: %c${HA(e)}`,I.info,I.value,I.recognized,I.info,I.value);return;case 22:let i=s-64;r.transposeChannel(i),p(`%cChannel %c${o}%c pitch shift. Semitones %c${i}%c, with %c${HA(e)}`,I.info,I.recognized,I.info,I.value,I.info,I.value);return;case 28:let g=s;g===0?(r.randomPan=!0,p(`%cRandom pan is set to %cON%c for %c${o}`,I.info,I.recognized,I.info,I.value)):(r.randomPan=!1,r.controllerChange(y.pan,g));break;case 33:r.controllerChange(y.chorusDepth,s);break;case 34:r.controllerChange(y.reverbDepth,s);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 B=e.length-9,c=new Int8Array(12);for(let h=0;h<B;h++)c[h]=e[h+7]-64;r.setOctaveTuning(c);let Q=s-64;p(`%cChannel %c${o}%c octave scale tuning. Cents %c${c.join(" ")}%c, with %c${HA(e)}`,I.info,I.recognized,I.info,I.value,I.info,I.value),r.setTuning(Q);break}return}else if(e[5]===0&&e[6]===6){p(`%cRoland GS Master Pan set to: %c${s}%c with: %c${HA(e)}`,I.info,I.value,I.info,I.value),this.setMasterPan((s-64)/64);return}else if(e[5]===0&&e[6]===5){let o=s-64;p(`%cRoland GS Master Key-Shift set to: %c${o}%c with: %c${HA(e)}`,I.info,I.value,I.info,I.value),this.setMasterTuning(o*100);return}else if(e[5]===0&&e[6]===4){p(`%cRoland GS Master Volume set to: %c${s}%c with: %c${HA(e)}`,I.info,I.value,I.info,I.value),this.setMIDIVolume(s/127);return}}n();return}else if(e[2]===69&&e[3]===18){if(e[4]===16&&e[6]===0)if(e[5]===0){let s=new Uint8Array(e.slice(7,e.length-2));this.callEvent("synthdisplay",{displayData:s,displayType:ts.SoundCanvasText})}else if(e[5]===1){let s=new Uint8Array(e.slice(7,e.length-3));this.callEvent("synthdisplay",{displayData:s,displayType:ts.SoundCanvasDotDisplay}),p(`%cRoland SC Display Dot Matrix via: %c${HA(e)}`,I.info,I.value)}else n()}else if(e[2]===22&&e[3]===18&&e[4]===16){this.setMIDIVolume(e[7]/100),p(`%cRoland Master Volume control set to: %c${e[7]}%c via: %c${HA(e)}`,I.info,I.value,I.info,I.value);return}else{Y(`%cUnrecognized Roland SysEx: %c${HA(e)}`,I.warn,I.unrecognized);return}break;case 67:if(e[2]===76)if(e[3]===0&&e[4]===0)switch(e[5]){case 4:let s=e[6];this.setMIDIVolume(s/127),p(`%cXG master volume. Volume: %c${s}`,I.info,I.recognized);break;case 6:let o=e[6]-64;this.transposeAllChannels(o),p(`%cXG master transpose. Volume: %c${o}`,I.info,I.recognized);break;case 126:p("%cXG system on",I.info),this.resetAllControllers(!1),this.setSystem("xg");break}else if(e[3]===8){if(!FA(this.system))return;let s=e[4]+A;if(s>=this.midiAudioChannels.length)return;let o=this.midiAudioChannels[s],r=e[6];switch(e[5]){case 1:o.controllerChange(y.bankSelect,r);break;case 2:o.controllerChange(y.lsbForControl0BankSelect,r);break;case 3:o.programChange(r);break;case 8:if(o.drumChannel)return;let E=r-64;o.channelTransposeKeyShift=E;break;case 11:o.controllerChange(y.mainVolume,r);break;case 14:let i=r;i===0?(o.randomPan=!0,p(`%cRandom pan is set to %cON%c for %c${s}`,I.info,I.recognized,I.info,I.value)):o.controllerChange(y.pan,i);break;case 19:o.controllerChange(y.reverbDepth,r);break;case 18:o.controllerChange(y.chorusDepth,r);break;default:Y(`%cUnrecognized Yamaha XG Part Setup: %c${e[5].toString(16).toUpperCase()}`,I.warn,I.unrecognized)}}else if(e[3]===6&&e[4]===0){let s=new Uint8Array(e.slice(5,e.length-1));this.callEvent("synthdisplay",{displayData:s,displayType:ts.XGText})}else FA(this.system)&&Y(`%cUnrecognized Yamaha XG SysEx: %c${HA(e)}`,I.warn,I.unrecognized);else FA(this.system)&&Y(`%cUnrecognized Yamaha SysEx: %c${HA(e)}`,I.warn,I.unrecognized);break}}function Fo(e){this.midiVolume=Math.pow(e,Math.E),this.setMasterPan(this.pan)}function wo(e){this.masterGain=e*ns,this.setMasterPan(this.pan)}function Ro(e){this.pan=e,e=e/2+.5,this.panLeft=1-e,this.panRight=e}var xt={reloadSoundFont:0,addNewSoundFont:2,deleteSoundFont:3,rearrangeSoundFonts:4};function Go(){let e=4;for(let n of this.instruments)e+=n.instrumentZones.reduce((s,o)=>(o.generators=o.generators.filter(r=>r.generatorType!==a.sampleID&&r.generatorType!==a.keyRange&&r.generatorType!==a.velRange),(o.velRange.max!==127||o.velRange.min!==0)&&o.generators.unshift(new U(a.velRange,o.velRange.max<<8|Math.max(o.velRange.min,0),!1)),(o.keyRange.max!==127||o.keyRange.min!==0)&&o.generators.unshift(new U(a.keyRange,o.keyRange.max<<8|Math.max(o.keyRange.min,0),!1)),o.isGlobal||o.generators.push(new U(a.sampleID,this.samples.indexOf(o.sample),!1)),o.generators.length*4+s),0);let A=new b(e),t=0;for(let n of this.instruments)for(let s of n.instrumentZones){s.generatorZoneStartIndex=t;for(let o of s.generators)H(A,o.generatorType),H(A,o.generatorValue),t++}return AA(A,0),dA(new BA("igen",A.length,A))}function Mo(e,A,t,n,s){let o=this.samples.map((g,B)=>{t&&g.compressSample(n,s);let c=g.getRawData();return p(`%cEncoded sample %c${B}. ${g.sampleName}%c of %c${this.samples.length}%c. Compressed: %c${g.isCompressed}%c.`,I.info,I.recognized,I.info,I.recognized,I.info,g.isCompressed?I.recognized:I.unrecognized,I.info),c}),r=this.samples.reduce((g,B,c)=>g+o[c].length+46,0),E=new b(r);this.samples.forEach((g,B)=>{let c=o[B],Q,h,m=c.length;g.isCompressed?(Q=E.currentIndex,h=Q+c.length):(Q=E.currentIndex/2,h=Q+c.length/2,m+=46),e.push(Q),E.set(c,E.currentIndex),E.currentIndex+=m,A.push(h)});let i=dA(new BA("smpl",E.length,E),new b([115,100,116,97]));return dA(new BA("LIST",i.length,i))}function xo(e,A){let n=new b(46*(this.samples.length+1));return this.samples.forEach((s,o)=>{TA(n,s.sampleName,20);let r=e[o];AA(n,r);let E=A[o];AA(n,E);let i=s.sampleLoopStartIndex+r,g=s.sampleLoopEndIndex+r;s.isCompressed&&(i-=r,g-=r),AA(n,i),AA(n,g),AA(n,s.sampleRate),n[n.currentIndex++]=s.samplePitch,n[n.currentIndex++]=s.samplePitchCorrection,H(n,s.sampleLink),H(n,s.sampleType)}),TA(n,"EOS",46),dA(new BA("shdr",n.length,n))}function No(){let e=10;for(let n of this.instruments)e+=n.instrumentZones.reduce((s,o)=>o.modulators.length*10+s,0);let A=new b(e),t=0;for(let n of this.instruments)for(let s of n.instrumentZones){s.modulatorZoneStartIndex=t;for(let o of s.modulators)H(A,o.sourceEnum),H(A,o.modulatorDestination),H(A,o.transformAmount),H(A,o.secondarySourceEnum),H(A,o.transformType),t++}return Xe(A,0,10),dA(new BA("imod",A.length,A))}function bo(){let e=this.instruments.reduce((o,r)=>r.instrumentZones.length*4+o,4),A=new b(e),t=0,n=0,s=0;for(let o of this.instruments){o.instrumentZoneIndex=t;for(let r of o.instrumentZones)r.zoneID=t,H(A,n),H(A,s),n+=r.generators.length,s+=r.modulators.length,t++}return H(A,n),H(A,s),dA(new BA("ibag",A.length,A))}function Lo(){let e=this.instruments.length*22+22,A=new b(e),t=0,n=0;for(let s of this.instruments)TA(A,s.instrumentName,20),H(A,t),t+=s.instrumentZones.length,s.instrumentID=n,n++;return TA(A,"EOI",20),H(A,t),dA(new BA("inst",A.length,A))}function Uo(){let e=4;for(let n of this.presets)e+=n.presetZones.reduce((s,o)=>(o.generators=o.generators.filter(r=>r.generatorType!==a.instrument&&r.generatorType!==a.keyRange&&r.generatorType!==a.velRange),(o.velRange.max!==127||o.velRange.min!==0)&&o.generators.unshift(new U(a.velRange,o.velRange.max<<8|Math.max(o.velRange.min,0),!1)),(o.keyRange.max!==127||o.keyRange.min!==0)&&o.generators.unshift(new U(a.keyRange,o.keyRange.max<<8|Math.max(o.keyRange.min,0),!1)),o.isGlobal||o.generators.push(new U(a.instrument,this.instruments.indexOf(o.instrument),!1)),o.generators.length*4+s),0);let A=new b(e),t=0;for(let n of this.presets)for(let s of n.presetZones){s.generatorZoneStartIndex=t;for(let o of s.generators)H(A,o.generatorType),H(A,o.generatorValue);t+=s.generators.length}return H(A,0),H(A,0),dA(new BA("pgen",A.length,A))}function To(){let e=10;for(let n of this.presets)e+=n.presetZones.reduce((s,o)=>o.modulators.length*10+s,0);let A=new b(e),t=0;for(let n of this.presets)for(let s of n.presetZones){s.modulatorZoneStartIndex=t;for(let o of s.modulators)H(A,o.sourceEnum),H(A,o.modulatorDestination),H(A,o.transformAmount),H(A,o.secondarySourceEnum),H(A,o.transformType),t++}return Xe(A,0,10),dA(new BA("pmod",A.length,A))}function vo(){let e=this.presets.reduce((o,r)=>r.presetZones.length*4+o,4),A=new b(e),t=0,n=0,s=0;for(let o of this.presets){o.presetZoneStartIndex=t;for(let r of o.presetZones)r.zoneID=t,H(A,n),H(A,s),n+=r.generators.length,s+=r.modulators.length,t++}return H(A,n),H(A,s),dA(new BA("pbag",A.length,A))}function Ho(){let e=this.presets.length*38+38,A=new b(e),t=0;for(let n of this.presets)TA(A,n.presetName,20),H(A,n.program),H(A,n.bank),H(A,t),AA(A,n.library),AA(A,n.genre),AA(A,n.morphology),t+=n.presetZones.length;return TA(A,"EOP",20),H(A,0),H(A,0),H(A,t),AA(A,0),AA(A,0),AA(A,0),dA(new BA("phdr",A.length,A))}var fi={compress:!1,compressionQuality:.5,compressionFunction:void 0};function Yo(e=fi){if(e.compress&&typeof e.compressionFunction!="function")throw new TypeError("No compression function supplied but compression enabled.");pA("%cSaving soundfont...",I.info),p(`%cCompression: %c${e?.compress||"false"}%c quality: %c${e?.compressionQuality||"none"}`,I.info,I.recognized,I.info,I.recognized),p("%cWriting INFO...",I.info);let A=[];this.soundFontInfo.ISFT="SpessaSynth",e?.compress&&(this.soundFontInfo.ifil="3.0");for(let[w,G]of Object.entries(this.soundFontInfo))if(w==="ifil"||w==="iver"){let C=parseInt(G.split(".")[0]),L=parseInt(G.split(".")[1]),Z=new b(4);H(Z,C),H(Z,L),A.push(dA(new BA(w,4,Z)))}else if(w==="DMOD")A.push(dA(new BA(w,G.length,G)));else{let C=new b(G.length);TA(C,G),A.push(dA(new BA(w,G.length,C)))}let t=kA([new b([73,78,70,79]),...A]),n=dA(new BA("LIST",t.length,t));p("%cWriting SDTA...",I.info);let s=[],o=[],r=Mo.call(this,s,o,e?.compress,e?.compressionQuality??.5,e.compressionFunction);p("%cWriting PDTA...",I.info),p("%cWriting SHDR...",I.info);let E=xo.call(this,s,o);p("%cWriting IGEN...",I.info);let i=Go.call(this);p("%cWriting IMOD...",I.info);let g=No.call(this);p("%cWriting IBAG...",I.info);let B=bo.call(this);p("%cWriting INST...",I.info);let c=Lo.call(this),Q=Uo.call(this);p("%cWriting PMOD...",I.info);let h=To.call(this);p("%cWriting PBAG...",I.info);let m=vo.call(this);p("%cWriting PHDR...",I.info);let f=Ho.call(this),S=kA([new b([112,100,116,97]),f,m,h,Q,c,B,g,i,E]),x=dA(new BA("LIST",S.length,S));p("%cWriting the output file...",I.info);let D=kA([new b([115,102,98,107]),n,r,x]),M=dA(new BA("RIFF",D.length,D));return p(`%cSaved succesfully! Final file size: %c${M.length}`,I.info,I.recognized),V(),M}var Nt=class{velRange={min:-1,max:127};keyRange={min:-1,max:127};isGlobal=!1;generators=[];modulators=[];get hasKeyRange(){return this.keyRange.min!==-1}get hasVelRange(){return this.velRange.min!==-1}getGeneratorValue(A,t){return this.generators.find(n=>n.generatorType===A)?.generatorValue??t}};var OA=class extends Nt{sample=void 0;useCount=0;deleteZone(){this.useCount--,!this.isGlobal&&this.sample.useCount--}},Te=class extends Nt{instrument=void 0;deleteZone(){this.isGlobal||this.instrument.removeUseCount()}};var mi=new Set([a.velRange,a.keyRange,a.instrument,a.exclusiveClass,a.endOper,a.sampleModes,a.startloopAddrsOffset,a.startloopAddrsCoarseOffset,a.endloopAddrsOffset,a.endloopAddrsCoarseOffset,a.startAddrsOffset,a.startAddrsCoarseOffset,a.endAddrOffset,a.endAddrsCoarseOffset,a.initialAttenuation,a.fineTune,a.coarseTune,a.keyNumToVolEnvHold,a.keyNumToVolEnvDecay,a.keyNumToModEnvHold,a.keyNumToModEnvDecay]);function Jo(e,A=!0){function t(c,Q){c.push(...Q.filter(h=>!c.find(m=>m.generatorType===h.generatorType)))}function n(c,Q){return{min:Math.max(c.min,Q.min),max:Math.min(c.max,Q.max)}}function s(c,Q){c.push(...Q.filter(h=>!c.find(m=>_.isIdentical(h,m))))}let o=[],r=[],E=[],i={min:0,max:127},g={min:0,max:127},B=e.presetZones.find(c=>c.isGlobal);B&&(r.push(...B.generators),E.push(...B.modulators),i=B.keyRange,g=B.velRange);for(let c of e.presetZones){if(c.isGlobal)continue;let Q=c.keyRange;c.hasKeyRange||(Q=i);let h=c.velRange;c.hasVelRange||(h=g);let m=c.generators.map(C=>new U(C.generatorType,C.generatorValue));t(m,r);let f=[...c.modulators];s(f,E);let S=c.instrument.instrumentZones,x=[],D=[],M={min:0,max:127},w={min:0,max:127},G=S.find(C=>C.isGlobal);G&&(x.push(...G.generators),D.push(...G.modulators),M=G.keyRange,w=G.velRange);for(let C of S){if(C.isGlobal)continue;let L=C.keyRange;C.hasKeyRange||(L=M);let Z=C.velRange;if(C.hasVelRange||(Z=w),L=n(L,Q),Z=n(Z,h),L.max<L.min||Z.max<Z.min)continue;let EA=C.generators.map(sA=>new U(sA.generatorType,sA.generatorValue));t(EA,x);let tA=[...C.modulators];s(tA,D);let T=[...tA];for(let sA of f){let oA=T.findIndex(CA=>_.isIdentical(sA,CA));oA!==-1?T[oA]=T[oA].sumTransform(sA):T.push(sA)}let $=EA.map(sA=>new U(sA.generatorType,sA.generatorValue));for(let sA of m){if(sA.generatorType===a.velRange||sA.generatorType===a.keyRange||sA.generatorType===a.instrument||sA.generatorType===a.endOper||sA.generatorType===a.sampleModes)continue;let oA=EA.findIndex(CA=>CA.generatorType===sA.generatorType);if(oA!==-1){let CA=$[oA].generatorValue+sA.generatorValue;$[oA]=new U(sA.generatorType,CA)}else{let CA=X[sA.generatorType].def+sA.generatorValue;$.push(new U(sA.generatorType,CA))}}$=$.filter(sA=>sA.generatorType!==a.sampleID&&sA.generatorType!==a.keyRange&&sA.generatorType!==a.velRange&&sA.generatorType!==a.endOper&&sA.generatorType!==a.instrument&&sA.generatorValue!==X[sA.generatorType].def);let hA=new OA;hA.keyRange=L,hA.velRange=Z,hA.keyRange.min===0&&hA.keyRange.max===127&&(hA.keyRange.min=-1),hA.velRange.min===0&&hA.velRange.max===127&&(hA.velRange.min=-1),hA.isGlobal=!1,hA.sample=C.sample,hA.generators=$,hA.modulators=T,o.push(hA)}}if(A){let c=new OA;c.isGlobal=!0;for(let m=0;m<58;m++){if(mi.has(m))continue;let f={},S=X[m]?.def||0;f[S]=0;for(let x of o){let D=x.generators.find(G=>G.generatorType===m);if(D){let G=D.generatorValue;f[G]===void 0?f[G]=1:f[G]++}else f[S]++;let M;switch(m){default:continue;case a.decayVolEnv:M=a.keyNumToVolEnvDecay;break;case a.holdVolEnv:M=a.keyNumToVolEnvHold;break;case a.decayModEnv:M=a.keyNumToModEnvDecay;break;case a.holdModEnv:M=a.keyNumToModEnvHold}if(x.generators.find(G=>G.generatorType===M)!==void 0){f={};break}}if(Object.keys(f).length>0){let x=Object.entries(f).reduce((M,w)=>M[1]<w[1]?w:M,[0,0]),D=parseInt(x[0]);D!==S&&c.generators.push(new U(m,D)),o.forEach(M=>{let w=M.generators.findIndex(G=>G.generatorType===m);w!==-1?M.generators[w].generatorValue===D&&M.generators.splice(w,1):D!==S&&M.generators.push(new U(m,S))})}}let h=o.find(m=>!m.isGlobal).modulators.map(m=>_.copy(m));for(let m of h){let f=!0;for(let S of o){if(S.isGlobal||!f)continue;S.modulators.find(D=>_.isIdentical(D,m))||(f=!1)}if(f===!0){c.modulators.push(_.copy(m));for(let S of o){let x=S.modulators.find(D=>_.isIdentical(D,m));x.transformAmount===m.transformAmount&&S.modulators.splice(S.modulators.indexOf(x),1)}}}o.splice(0,0,c)}return o}var Ko=20;function Cn(e,A,t,n,s,o,r){let E=r===0?0:1,i=new b(Ko+E*16);AA(i,Ko),H(i,A),H(i,t);let g=n*.4,B=Math.floor(g*-65536);AA(i,B),AA(i,2);let c=o-s,Q=0;switch(r){default:case 0:E=0;break;case 1:Q=0,E=1;break;case 3:Q=1,E=1}return AA(i,E),E===1&&(AA(i,16),AA(i,Q),AA(i,s),AA(i,c)),z("wsmp",i)}var O={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},En=new _(219,0,a.reverbEffectsSend,1e3,0),hn=new _(221,0,a.chorusEffectsSend,1e3,0),Bn=new _(129,0,a.vibLfoToPitch,0,0),cn=new _(13,0,a.vibLfoToPitch,0,0);var R={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 bt=class{source;control;destination;scale;transform;constructor(A,t,n,s,o){this.source=A,this.control=t,this.destination=n,this.scale=s,this.transform=o}writeArticulator(){let A=new b(12);return H(A,this.source),H(A,this.control),H(A,this.destination),H(A,this.transform),AA(A,this.scale<<16),A}};function qo(e,A){if(e)switch(A){default:return;case y.modulationWheel:return O.modulationWheel;case y.mainVolume:return O.volume;case y.pan:return O.pan;case y.expressionController:return O.expression;case y.chorusDepth:return O.chorus;case y.reverbDepth:return O.reverb}else switch(A){default:return;case j.noteOnKeyNum:return O.keyNum;case j.noteOnVelocity:return O.velocity;case j.noController:return O.none;case j.polyPressure:return O.polyPressure;case j.channelPressure:return O.channelPressure;case j.pitchWheel:return O.pitchWheel;case j.pitchWheelRange:return O.pitchWheelRange}}function Oo(e,A){switch(e){default:return;case a.initialAttenuation:return{dest:R.gain,amount:-A};case a.fineTune:return R.pitch;case a.pan:return R.pan;case a.keyNum:return R.keyNum;case a.reverbEffectsSend:return R.reverbSend;case a.chorusEffectsSend:return R.chorusSend;case a.freqModLFO:return R.modLfoFreq;case a.delayModLFO:return R.modLfoDelay;case a.delayVibLFO:return R.vibLfoDelay;case a.freqVibLFO:return R.vibLfoFreq;case a.delayVolEnv:return R.volEnvDelay;case a.attackVolEnv:return R.volEnvAttack;case a.holdVolEnv:return R.volEnvHold;case a.decayVolEnv:return R.volEnvDecay;case a.sustainVolEnv:return{dest:R.volEnvSustain,amount:1e3-A};case a.releaseVolEnv:return R.volEnvRelease;case a.delayModEnv:return R.modEnvDelay;case a.attackModEnv:return R.modEnvAttack;case a.holdModEnv:return R.modEnvHold;case a.decayModEnv:return R.modEnvDecay;case a.sustainModEnv:return{dest:R.modEnvSustain,amount:1e3-A};case a.releaseModEnv:return R.modEnvRelease;case a.initialFilterFc:return R.filterCutoff;case a.initialFilterQ:return R.filterQ}}function Vo(e,A){switch(e){default:return;case a.modEnvToFilterFc:return{source:O.modEnv,dest:R.filterCutoff,amt:A,isBipolar:!1};case a.modEnvToPitch:return{source:O.modEnv,dest:R.pitch,amt:A,isBipolar:!1};case a.modLfoToFilterFc:return{source:O.modLfo,dest:R.filterCutoff,amt:A,isBipolar:!0};case a.modLfoToVolume:return{source:O.modLfo,dest:R.gain,amt:A,isBipolar:!0};case a.modLfoToPitch:return{source:O.modLfo,dest:R.pitch,amt:A,isBipolar:!0};case a.vibLfoToPitch:return{source:O.vibratoLfo,dest:R.pitch,amt:A,isBipolar:!0};case a.keyNumToVolEnvHold:return{source:O.keyNum,dest:R.volEnvHold,amt:A,isBipolar:!0};case a.keyNumToVolEnvDecay:return{source:O.keyNum,dest:R.volEnvDecay,amt:A,isBipolar:!0};case a.keyNumToModEnvHold:return{source:O.keyNum,dest:R.modEnvHold,amt:A,isBipolar:!0};case a.keyNumToModEnvDecay:return{source:O.keyNum,dest:R.modEnvDecay,amt:A,isBipolar:!0};case a.scaleTuning:return{source:O.keyNum,dest:R.pitch,amt:A*128,isBipolar:!1}}}function Po(e){let A=Oo(e.generatorType,e.generatorValue),t=A,n=0,s=e.generatorValue;A?.amount!==void 0&&(s=A.amount,t=A.dest);let o=Vo(e.generatorType,e.generatorValue);if(o!==void 0)s=o.amt,t=o.dest,n=o.source;else if(t===void 0){Y(`Invalid generator type: ${e.generatorType}`);return}return new bt(n,0,t,s,0)}function Zo(e){if(e.transformType!==0){Y("Other transform types are not supported.");return}let A=qo(e.sourceUsesCC,e.sourceIndex),t=e.sourceCurveType,n=e.sourcePolarity,s=e.sourceDirection;if(A===void 0){Y(`Invalid source: ${e.sourceIndex}, CC: ${e.sourceUsesCC}`);return}e.modulatorDestination===a.initialAttenuation&&(s=s===1?0:1);let o=qo(e.secSrcUsesCC,e.secSrcIndex),r=e.secSrcCurveType,E=e.secSrcPolarity,i=e.secSrcDirection;if(o===void 0){Y(`Invalid secondary source: ${e.secSrcIndex}, CC: ${e.secSrcUsesCC}`);return}let g=Oo(e.modulatorDestination,e.transformAmount),B=g,c=e.transformAmount;g?.dest!==void 0&&(B=g.dest,c=g.amount);let Q=Vo(e.modulatorDestination,e.transformAmount);if(Q!==void 0)c=Q.amt,o=A,r=t,E=n,i=s,t=GA.linear,n=Q.isBipolar?1:0,s=0,A=Q.source,B=Q.dest;else if(B===void 0){Y(`Invalid destination: ${e.modulatorDestination}`);return}let h=0;return h|=r<<4,h|=E<<8,h|=i<<9,h|=t,h|=n<<14,h|=s<<15,new bt(A,o,B,c,h)}var pi=new Set([a.sampleModes,a.initialAttenuation,a.keyRange,a.velRange,a.sampleID,a.fineTune,a.coarseTune,a.startAddrsOffset,a.startAddrsCoarseOffset,a.endAddrOffset,a.endAddrsCoarseOffset,a.startloopAddrsOffset,a.startloopAddrsCoarseOffset,a.endloopAddrsOffset,a.endloopAddrsCoarseOffset,a.overridingRootKey,a.exclusiveClass]);function ln(e){for(let o=0;o<e.generators.length;o++){let r=e.generators[o];(r.generatorType===a.delayVolEnv||r.generatorType===a.attackVolEnv||r.generatorType===a.holdVolEnv||r.generatorType===a.decayVolEnv||r.generatorType===a.releaseVolEnv||r.generatorType===a.delayModEnv||r.generatorType===a.attackModEnv||r.generatorType===a.holdModEnv||r.generatorType===a.decayModEnv)&&(e.generators[o]=new U(r.generatorType,Math.min(r.generatorValue,6386),!1))}for(let o=0;o<e.generators.length;o++){let r=e.generators[o],E;switch(r.generatorType){default:continue;case a.keyNumToVolEnvDecay:E=a.decayVolEnv;break;case a.keyNumToVolEnvHold:E=a.holdVolEnv;break;case a.keyNumToModEnvDecay:E=a.decayModEnv;break;case a.keyNumToModEnvHold:E=a.holdModEnv}let i=e.generators.find(m=>m.generatorType===E);if(i===void 0)continue;let g=r.generatorValue*-128,B=60/128*g,c=i.generatorValue-B,Q=e.generators.indexOf(r),h=e.generators.indexOf(i);e.generators[h]=new U(E,c,!1),e.generators[Q]=new U(r.generatorType,g,!1)}let A=e.generators.reduce((o,r)=>{if(pi.has(r.generatorType))return o;let E=Po(r);return E!==void 0?(o.push(E),p("%cSucceeded converting to DLS Articulator!",I.recognized)):Y("Failed converting to DLS Articulator!"),o},[]),t=e.modulators.reduce((o,r)=>{if(_.isIdentical(r,hn,!0)||_.isIdentical(r,En,!0)||_.isIdentical(r,Bn,!0)||_.isIdentical(r,cn,!0))return o;let E=Zo(r);return E!==void 0?(o.push(E),p("%cSucceeded converting to DLS Articulator!",I.recognized)):Y("Failed converting to DLS Articulator!"),o},[]);A.push(...t);let n=new b(8);AA(n,8),AA(n,A.length);let s=A.map(o=>o.writeArticulator());return z("art2",kA([n,...s]))}function Xo(e,A){let t=new b(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(a.exclusiveClass,0);H(t,n),H(t,0);let s=z("rgnh",t),o=e.getGeneratorValue(a.overridingRootKey,e.sample.samplePitch);e.getGeneratorValue(a.scaleTuning,A.getGeneratorValue(a.scaleTuning,100))===0&&e.keyRange.max-e.keyRange.min===0&&(o=e.keyRange.min);let E=Cn(e.sample,o,e.getGeneratorValue(a.fineTune,0)+e.getGeneratorValue(a.coarseTune,0)*100+e.sample.samplePitchCorrection,e.getGeneratorValue(a.initialAttenuation,0),e.sample.sampleLoopStartIndex+e.getGeneratorValue(a.startloopAddrsOffset,0)+e.getGeneratorValue(a.startloopAddrsCoarseOffset,0)*32768,e.sample.sampleLoopEndIndex+e.getGeneratorValue(a.endloopAddrsOffset,0)+e.getGeneratorValue(a.endloopAddrsCoarseOffset,0)*32768,e.getGeneratorValue(a.sampleModes,0)),i=new b(12);H(i,0),H(i,0),AA(i,1),AA(i,this.samples.indexOf(e.sample));let g=z("wlnk",i),B=new b(0);if(e.modulators.length+e.generators.length>0){let c=ln(e);B=z("lar2",c,!1,!0)}return z("rgn2",kA([s,E,g,B]),!1,!0)}function Wo(e){pA(`%cWriting %c${e.presetName}%c...`,I.info,I.recognized,I.info);let A=Jo(e),t=A.reduce((Q,h)=>h.isGlobal?Q:Q+1,0),n=new b(12);AA(n,t);let s=(e.bank&127)<<8;e.bank===128&&(s|=1<<31),AA(n,s),AA(n,e.program&127);let o=z("insh",n),r=new b(0),E=A.find(Q=>Q.isGlobal===!0);if(E){let Q=ln(E);r=z("lar2",Q,!1,!0)}let i=kA(A.reduce((Q,h)=>(h.isGlobal||Q.push(Xo.apply(this,[h,E])),Q),[])),g=z("lrgn",i,!1,!0),B=z("INAM",fe(e.presetName)),c=z("INFO",B,!1,!0);return V(),z("ins ",kA([o,g,r,c]),!1,!0)}function zo(){let e=kA(this.presets.map(A=>Wo.apply(this,[A])));return z("lins",e,!1,!0)}function _o(e){let A=new b(18);H(A,1),H(A,1),AA(A,e.sampleRate),AA(A,e.sampleRate*2),H(A,2),H(A,16);let t=z("fmt ",A),n=1;e.sampleLoopStartIndex+Math.abs(e.getAudioData().length-e.sampleLoopEndIndex)<2&&(n=0);let s=Cn(e,e.samplePitch,e.samplePitchCorrection,0,e.sampleLoopStartIndex,e.sampleLoopEndIndex,n),o=e.getAudioData(),r;if(e.isCompressed){let g=new Int16Array(o.length);for(let B=0;B<o.length;B++)g[B]=o[B]*32767;r=z("data",new b(g.buffer))}else r=z("data",e.getRawData());let E=z("INAM",fe(e.sampleName)),i=z("INFO",E,!1,!0);return p(`%cSaved %c${e.sampleName}%c succesfully!`,I.recognized,I.value,I.recognized),z("wave",kA([t,s,r,i]),!1,!0)}function jo(){let e=0,A=[],t=this.samples.map(n=>{let s=_o(n);return A.push(e),e+=s.length,s});return{data:z("wvpl",kA(t),!1,!0),indexes:A}}function $o(){pA("%cSaving DLS...",I.info);let e=new b(4);AA(e,this.presets.length);let A=z("colh",e);pA("%cWriting instruments...",I.info);let t=zo.apply(this);p("%cSuccess!",I.recognized),V(),pA("%cWriting WAVE samples...",I.info);let n=jo.apply(this),s=n.data,o=n.indexes;p("%cSucceeded!",I.recognized),V();let r=new b(8+4*o.length);AA(r,8),AA(r,o.length);for(let c of o)AA(r,c);let E=z("ptbl",r);this.soundFontInfo.ICMT=(this.soundFontInfo.ICMT||"Soundfont")+`
15
- Converted from SF2 to DLS using SpessaSynth`,this.soundFontInfo.ISFT="SpessaSynth";let i=[];for(let[c,Q]of Object.entries(this.soundFontInfo))c!=="ICMT"&&c!=="INAM"&&c!=="ICRD"&&c!=="IENG"&&c!=="ICOP"&&c!=="ISFT"&&c!=="ISBJ"||i.push(z(c,fe(Q),!0));let g=z("INFO",kA(i),!1,!0),B=new b(A.length+t.length+E.length+s.length+g.length+4);return TA(B,"DLS "),B.set(kA([A,t,E,s,g]),4),p("%cSaved succesfully!",I.recognized),V(),z("RIFF",B)}var yi=48e3,ve=class{sampleName;sampleRate;samplePitch;samplePitchCorrection;sampleLink;sampleType;sampleLoopStartIndex;sampleLoopEndIndex;isCompressed;compressedData=void 0;useCount=0;sampleData=void 0;constructor(A,t,n,s,o,r,E,i){this.sampleName=A,this.sampleRate=t,this.samplePitch=n,this.samplePitchCorrection=s,this.sampleLink=o,this.sampleType=r,this.sampleLoopStartIndex=E,this.sampleLoopEndIndex=i,this.isCompressed=(r&16)>0}getRawData(){let A=new Uint8Array(this.sampleData.length*2);for(let t=0;t<this.sampleData.length;t++){let n=Math.floor(this.sampleData[t]*32768);A[t*2]=n&255,A[t*2+1]=n>>8&255}return A}resampleData(A){let t=this.getAudioData(),n=A/this.sampleRate,s=new Float32Array(Math.floor(t.length*n));for(let o=0;o<s.length;o++)s[o]=t[Math.floor(o*(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(yi),n=this.getAudioData()),this.compressedData=t([n],1,this.sampleRate,A),this.sampleType|=16,this.isCompressed=!0}catch{Y(`Failed to compress ${this.sampleName}. Leaving as uncompressed!`),this.isCompressed=!1,this.compressedData=void 0,this.sampleType&=239}}getAudioData(){return this.sampleData}};var He=class{instrumentName="";instrumentZones=[];_useCount=0;get useCount(){return this._useCount}addUseCount(){this._useCount++,this.instrumentZones.forEach(A=>A.useCount++)}removeUseCount(){this._useCount--;for(let A=0;A<this.instrumentZones.length;A++)this.safeDeleteZone(A)&&A--}deleteInstrument(){this.instrumentZones.forEach(A=>A.deleteZone()),this.instrumentZones.length=0}safeDeleteZone(A){return this.instrumentZones[A].useCount--,this.instrumentZones[A].useCount<1?(this.deleteZone(A),!0):!1}deleteZone(A){this.instrumentZones[A].deleteZone(),this.instrumentZones.splice(A,1)}};var Ye=class{parentSoundBank;presetName="";program=0;bank=0;presetZones=[];foundSamplesAndGenerators=[];library=0;genre=0;morphology=0;constructor(A){this.parentSoundBank=A;for(let t=0;t<128;t++)this.foundSamplesAndGenerators[t]=[]}isDrumPreset(A,t=!1){let n=A&&this.parentSoundBank.isXGBank;return this.bank===128||n&&$A(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)}preload(A,t){for(let n=A;n<t+1;n++)for(let s=0;s<128;s++)this.getSamplesAndGenerators(n,s).forEach(o=>{o.sample.isSampleLoaded||o.sample.getAudioData()})}preloadSpecific(A,t){this.getSamplesAndGenerators(A,t).forEach(n=>{n.sample.isSampleLoaded||n.sample.getAudioData()})}getSamplesAndGenerators(A,t){let n=this.foundSamplesAndGenerators[A][t];if(n)return n;if(this.presetZones.length<1)return[];function s(h,m){return m>=h.min&&m<=h.max}function o(h,m){h.push(...m.filter(f=>!h.find(S=>S.generatorType===f.generatorType)))}function r(h,m){h.push(...m.filter(f=>!h.find(S=>_.isIdentical(f,S))))}let E=[],i=this.presetZones[0].isGlobal?[...this.presetZones[0].generators]:[],g=this.presetZones[0].isGlobal?[...this.presetZones[0].modulators]:[],B=this.presetZones[0].isGlobal?this.presetZones[0].keyRange:{min:0,max:127},c=this.presetZones[0].isGlobal?this.presetZones[0].velRange:{min:0,max:127};return this.presetZones.filter(h=>s(h.hasKeyRange?h.keyRange:B,A)&&s(h.hasVelRange?h.velRange:c,t)&&!h.isGlobal).forEach(h=>{if(h.instrument.instrumentZones.length<1)return;let m=h.generators,f=h.modulators,S=h.instrument.instrumentZones[0],x=S.isGlobal?[...S.generators]:[],D=S.isGlobal?[...S.modulators]:[],M=S.isGlobal?S.keyRange:{min:0,max:127},w=S.isGlobal?S.velRange:{min:0,max:127};h.instrument.instrumentZones.filter(C=>s(C.hasKeyRange?C.keyRange:M,A)&&s(C.hasVelRange?C.velRange:w,t)&&!C.isGlobal).forEach(C=>{let L=[...C.generators],Z=[...C.modulators];o(m,i),o(L,x),r(f,g),r(Z,D),r(Z,this.parentSoundBank.defaultModulators);let EA=[...Z];for(let tA=0;tA<f.length;tA++){let T=f[tA],$=EA.findIndex(hA=>_.isIdentical(T,hA));$!==-1?EA[$]=EA[$].sumTransform(T):EA.push(T)}E.push({instrumentGenerators:L,presetGenerators:m,modulators:EA,sample:C.sample,sampleID:C.generators.find(tA=>tA.generatorType===a.sampleID).generatorValue})})}),this.foundSamplesAndGenerators[A][t]=E,E}};var Je=class e{soundFontInfo={};presets=[];samples=[];instruments=[];defaultModulators=qs.map(A=>_.copy(A));isXGBank=!1;constructor(A=void 0){A?.presets&&(this.presets.push(...A.presets),this.soundFontInfo=A.info)}static mergeSoundBanks(...A){let t=A.shift(),n=t.presets;for(;A.length;)A.shift().presets.forEach(o=>{n.find(r=>r.bank===o.bank&&r.program===o.program)===void 0&&n.push(o)});return new e({presets:n,info:t.soundFontInfo})}static getDummySoundfontFile(){let A=new e,t=new ve("Saw",44100,65,20,0,0,0,127);t.sampleData=new Float32Array(128);for(let g=0;g<128;g++)t.sampleData[g]=g/128*2-1;A.samples.push(t);let n=new OA;n.isGlobal=!0,n.generators.push(new U(a.initialAttenuation,375)),n.generators.push(new U(a.releaseVolEnv,-1e3)),n.generators.push(new U(a.sampleModes,1));let s=new OA;s.sample=t;let o=new OA;o.sample=t,o.generators.push(new U(a.fineTune,-9));let r=new He;r.instrumentName="Saw Wave",r.instrumentZones.push(n),r.instrumentZones.push(s),r.instrumentZones.push(o),A.instruments.push(r);let E=new Te;E.instrument=r;let i=new Ye(A);return i.presetName="Saw Wave",i.presetZones.push(E),A.presets.push(i),A.soundFontInfo.ifil="2.1",A.soundFontInfo.isng="EMU8000",A.soundFontInfo.INAM="Dummy",A._parseInternal(),A.write().buffer}_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($A(t.bank)&&(this.isXGBank=!0,!A.has(t.program))){this.isXGBank=!1,p(`%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.`,I.info,I.value,I.info);break}}trimSoundBank(A){let t=this;function n(o,r){let E=0;for(let i=0;i<o.instrumentZones.length;i++){let g=o.instrumentZones[i];if(g.isGlobal)continue;let B=g.keyRange,c=g.velRange,Q=!1;for(let h of r)if(h.key>=B.min&&h.key<=B.max&&h.velocity>=c.min&&h.velocity<=c.max){Q=!0;break}Q||(p(`%c${g.sample.sampleName} %cremoved from %c${o.instrumentName}%c. Use count: %c${g.useCount-1}`,I.recognized,I.info,I.recognized,I.info,I.recognized),o.safeDeleteZone(i)&&(E++,i--,p(`%c${g.sample.sampleName} %cdeleted`,I.recognized,I.info)),g.sample.useCount<1&&t.deleteSample(g.sample))}return E}oe("%cTrimming soundfont...",I.info);let s=A.getUsedProgramsAndKeys(t);pA("%cModifying soundfont...",I.info),p("Detected keys for midi:",s);for(let o=0;o<t.presets.length;o++){let r=t.presets[o],E=r.bank+":"+r.program,i=s[E];if(i===void 0)p(`%cDeleting preset %c${r.presetName}%c and its zones`,I.info,I.recognized,I.info),t.deletePreset(r),o--;else{let g=[...i].map(c=>{let Q=c.split("-");return{key:parseInt(Q[0]),velocity:parseInt(Q[1])}});pA(`%cTrimming %c${r.presetName}`,I.info,I.recognized),p(`Keys for ${r.presetName}:`,g);let B=0;for(let c=0;c<r.presetZones.length;c++){let Q=r.presetZones[c];if(Q.isGlobal)continue;let h=Q.keyRange,m=Q.velRange,f=!1;for(let S of g)if(S.key>=h.min&&S.key<=h.max&&S.velocity>=m.min&&S.velocity<=m.max){f=!0;let x=n(Q.instrument,g);p(`%cTrimmed off %c${x}%c zones from %c${Q.instrument.instrumentName}`,I.info,I.recognized,I.info,I.recognized);break}f||(B++,r.deleteZone(c),Q.instrument.useCount<1&&t.deleteInstrument(Q.instrument),c--)}p(`%cTrimmed off %c${B}%c zones from %c${r.presetName}`,I.info,I.recognized,I.info,I.recognized),V()}}t.removeUnusedElements(),t.soundFontInfo.ICMT=`NOTE: This soundfont was trimmed by SpessaSynth to only contain presets used in "${A.midiName}"
9
+ `}sumTransform(A){return new e(this.sourceEnum,this.secondarySourceEnum,this.modulatorDestination,this.transformAmount+A.transformAmount,this.transformType)}},Kn=960,qn=RA.concave;function ae(e,A,t,n,s){return e<<10|A<<9|t<<8|n<<7|s}var Ii=[new _(ae(qn,0,1,0,j.noteOnVelocity),0,a.initialAttenuation,Kn,0),new _(129,0,a.vibLfoToPitch,50,0),new _(ae(qn,0,1,1,y.mainVolume),0,a.initialAttenuation,Kn,0),new _(13,0,a.vibLfoToPitch,50,0),new _(526,16,a.fineTune,12700,0),new _(650,0,a.pan,500,0),new _(ae(qn,0,1,1,y.expressionController),0,a.initialAttenuation,Kn,0),new _(219,0,a.reverbEffectsSend,200,0),new _(221,0,a.chorusEffectsSend,200,0)],gi=[new _(ae(RA.linear,0,0,0,j.polyPressure),0,a.vibLfoToPitch,50,0),new _(ae(RA.linear,0,0,1,y.tremoloDepth),0,a.modLfoToVolume,24,0),new _(ae(RA.convex,1,0,1,y.attackTime),0,a.attackVolEnv,6e3,0),new _(ae(RA.linear,1,0,1,y.releaseTime),0,a.releaseVolEnv,3600,0),new _(ae(RA.linear,1,0,1,y.brightness),0,a.initialFilterFc,6e3,0),new _(ae(RA.linear,1,0,1,y.filterResonance),0,a.initialFilterQ,250,0)],qs=Ii.concat(gi);var GA=128,jt=147,Le=new Int16Array(jt).fill(0),xA=(e,A)=>Le[e]=A<<7;xA(y.mainVolume,100);xA(y.balance,64);xA(y.expressionController,127);xA(y.pan,64);xA(y.portamentoOnOff,127);xA(y.filterResonance,64);xA(y.releaseTime,64);xA(y.attackTime,64);xA(y.brightness,64);xA(y.decayTime,64);xA(y.vibratoRate,64);xA(y.vibratoDepth,64);xA(y.vibratoDelay,64);xA(y.generalPurposeController6,64);xA(y.generalPurposeController8,64);xA(y.RPNLsb,127);xA(y.RPNMsb,127);xA(y.NRPNLsb,127);xA(y.NRPNMsb,127);var $t=1;Le[y.portamentoControl]=$t;xA(GA+j.pitchWheel,64);xA(GA+j.pitchWheelRange,2);var cA={channelTuning:0,channelTransposeFine:1,modulationMultiplier:2,masterTuning:3,channelTuningSemitones:4},On=Object.keys(cA).length,Vn=new Float32Array(On);Vn[cA.modulationMultiplier]=1;var YA={Idle:0,RPCoarse:1,RPFine:2,NRPCoarse:3,NRPFine:4,DataCoarse:5,DataFine:6},Os={velocityOverride:128};var An="gs";function Ct(e){return e.messageData[0]===67&&e.messageData[2]===76&&e.messageData[5]===126&&e.messageData[6]===0}function en(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 tn(e){return e.messageData[0]===65&&e.messageData[2]===66&&e.messageData[6]===127}function nn(e){return e.messageData[0]===126&&e.messageData[2]===9&&e.messageData[3]===1}function sn(e){return e.messageData[0]===126&&e.messageData[2]===9&&e.messageData[3]===3}var rn=64,Vs=121;function Ps(e){return e==="gm2"?Vs:0}function Ae(e){return e===120||e===126||e===127}function on(e){return Ae(e)||e===rn||e===Vs}function Et(e,A,t,n,s,o){let r=e,g=0;if(n)kA(t)?on(A)||(r=A):t==="gm2"&&(r=A);else{let i=!0;switch(t){case"gm":p(`%cIgnoring the Bank Select (${A}), as the synth is in GM mode.`,I.info),i=!1;break;case"xg":i=on(A),Ae(A)?g=2:o%16!==9&&(g=1);break;case"gm2":A===120?g=2:o%16!==9&&(g=1)}s&&(A=128),A===128&&!s&&(A=e),i&&(r=A)}return{newBank:r,drumsStatus:g}}function Bt(e,A,t,n){return n?t?Ae(e)?e:128:on(e)||A===0&&e!==0?e:on(A)?0:A:t?128:e}function kA(e){return e==="gm2"||e==="xg"}function Pn(e){return new ZA(e,F.systemExclusive,new b([65,16,66,18,64,0,127,0,65,247]))}function ht(e,A,t,n){return new ZA(n,F.controllerChange|e%16,new b([A,t]))}function Ci(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],o=128-(64+t+21+1)%128;return new ZA(A,F.systemExclusive,new b([...n,o,247]))}function Zs(e=[],A=[],t=[],n=[]){let s=this;pA("%cApplying changes to the MIDI file...",I.info),p("Desired program changes:",e),p("Desired CC changes:",A),p("Desired channels to clear:",t),p("Desired channels to transpose:",n);let o=new Set;e.forEach(G=>{o.add(G.channel)});let r="gs",g=!1,i=Array(s.tracks.length).fill(0),E=s.tracks.length;function c(){let G=0,M=1/0;return s.tracks.forEach((R,C)=>{i[C]>=R.length||R[i[C]].ticks<M&&(G=C,M=R[i[C]].ticks)}),G}let B=s.midiPorts.slice(),Q={},h=0;function m(G,M){s.usedChannelsOnTrack[G].size!==0&&(h===0&&(h+=16,Q[M]=0),Q[M]===void 0&&(Q[M]=h,h+=16),B[G]=M)}s.midiPorts.forEach((G,M)=>{m(M,G)});let f=h,S=Array(f).fill(!0),x=Array(f).fill(0),D=Array(f).fill(0);for(n.forEach(G=>{let M=Math.trunc(G.keyShift),R=G.keyShift-M;x[G.channel]=M,D[G.channel]=R});E>0;){let G=c(),M=s.tracks[G];if(i[G]>=M.length){E--;continue}let R=i[G]++,C=M[R],L=()=>{M.splice(R,1),i[G]--},J=(BA,sA=0)=>{M.splice(R+sA,0,BA),i[G]++},EA=Q[B[G]]||0;if(C.messageStatusByte===F.midiPort){m(G,C.messageData[0]);continue}if(C.messageStatusByte<=F.sequenceSpecific&&C.messageStatusByte>=F.sequenceNumber)continue;let tA=C.messageStatusByte&240,T=C.messageStatusByte&15,AA=T+EA;if(t.indexOf(AA)!==-1){L();continue}switch(tA){case F.noteOn:if(S[AA]){S[AA]=!1,A.filter(CA=>CA.channel===AA).forEach(CA=>{let v=ht(T,CA.controllerNumber,CA.controllerValue,C.ticks);J(v)});let oA=D[AA];if(oA!==0){let CA=oA*64+64,v=ht(T,y.RPNMsb,0,C.ticks),K=ht(T,y.RPNLsb,1,C.ticks),W=ht(AA,y.dataEntryMsb,CA,C.ticks),O=ht(T,y.lsbForControl6DataEntry,0,C.ticks);J(O),J(W),J(K),J(v)}if(o.has(AA)){let CA=e.find(rA=>rA.channel===AA),v=Math.max(0,Math.min(CA.bank,127)),K=CA.program;p(`%cSetting %c${CA.channel}%c to %c${v}:${K}%c. Track num: %c${G}`,I.info,I.recognized,I.info,I.recognized,I.info,I.recognized);let W=new ZA(C.ticks,F.programChange|T,new b([K]));J(W);let O=(rA,JA)=>{let Ce=ht(T,rA?y.lsbForControl0BankSelect:y.bankSelect,JA,C.ticks);J(Ce)};kA(r)?CA.isDrum?(p(`%cAdding XG Drum change on track %c${G}`,I.recognized,I.value),O(!1,Ae(v)?v:127),O(!0,0)):v===rn?(O(!1,rn),O(!0,0)):(O(!1,0),O(!0,v)):(O(!1,v),CA.isDrum&&T!==9&&(p(`%cAdding GS Drum change on track %c${G}`,I.recognized,I.value),J(Ci(T,C.ticks))))}}C.messageData[0]+=x[AA];break;case F.noteOff:C.messageData[0]+=x[AA];break;case F.programChange:if(o.has(AA)){L();continue}break;case F.controllerChange:let BA=C.messageData[0];if(A.find(oA=>oA.channel===AA&&BA===oA.controllerNumber)!==void 0){L();continue}if((BA===y.bankSelect||BA===y.lsbForControl0BankSelect)&&o.has(AA)){L();continue}break;case F.systemExclusive:if(Ct(C))p("%cXG system on detected",I.info),r="xg",g=!0;else if(C.messageData[0]===67&&C.messageData[2]===76&&C.messageData[3]===8&&C.messageData[5]===3)o.has(C.messageData[4]+EA)&&L();else if(tn(C)){g=!0,p("%cGS on detected!",I.recognized);break}else(nn(C)||sn(C))&&(p("%cGM/2 on detected, removing!",I.info),L(),g=!1)}}if(!g&&e.length>0){let G=0;s.tracks[0][0].messageStatusByte===F.trackName&&G++,s.tracks[0].splice(G,0,Pn(0)),p("%cGS on not detected. Adding it.",I.info)}this.flush(),P()}function Xs(e){let A=[],t=[],n=[],s=[];e.channelSnapshots.forEach((o,r)=>{if(o.isMuted){t.push(r);return}let g=o.channelTransposeKeyShift+o.customControllers[cA.channelTransposeFine]/100;g!==0&&A.push({channel:r,keyShift:g}),o.lockPreset&&n.push({channel:r,program:o.program,bank:o.bank,isDrum:o.drumChannel}),o.lockedControllers.forEach((i,E)=>{if(!i||E>127||E===y.bankSelect)return;let c=o.midiControllers[E]>>7;s.push({channel:r,controllerNumber:E,controllerValue:c})})}),this.modifyMIDI(n,s,t,A)}var uA={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"},Ue="utf-8",Ei="Created using SpessaSynth";function Ws(e,A,t=0,n="Shift_JIS",s={},o=!0){let r=this;if(ie("%cWriting the RMIDI File...",I.info),p(`%cConfiguration: Bank offset: %c${t}%c, encoding: %c${n}`,I.info,I.value,I.info,I.value),p("metadata",s),p("Initial bank offset",r.bankOffset),o){let x=function(){let R=0,C=1/0;return r.tracks.forEach((L,J)=>{f[J]>=L.length||L[f[J]].ticks<C&&(R=J,C=L[f[J]].ticks)}),R},h="gm",m=[],f=Array(r.tracks.length).fill(0),S=r.tracks.length,D=Array(r.tracks.length).fill(0),G=16+r.midiPortChannelOffsets.reduce((R,C)=>C>R?C:R),M=[];for(let R=0;R<G;R++)M.push({program:0,drums:R%16===9,lastBank:void 0,lastBankLSB:void 0,hasBankSelect:!1});for(;S>0;){let R=x(),C=r.tracks[R];if(f[R]>=C.length){S--;continue}let L=C[f[R]];f[R]++;let J=r.midiPortChannelOffsets[D[R]];if(L.messageStatusByte===F.midiPort){D[R]=L.messageData[0];continue}let EA=L.messageStatusByte&240;if(EA!==F.controllerChange&&EA!==F.programChange&&EA!==F.systemExclusive)continue;if(EA===F.systemExclusive){if(!en(L)){Ct(L)?h="xg":tn(L)?h="gs":nn(L)?(h="gm",m.push({tNum:R,e:L})):sn(L)&&(h="gm2");continue}let oA=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][L.messageData[5]&15]+J;M[oA].drums=!!(L.messageData[7]>0&&L.messageData[5]>>4);continue}let tA=(L.messageStatusByte&15)+J,T=M[tA];if(EA===F.programChange){let oA=kA(h),CA=L.messageData[0];T.drums?A.presets.findIndex(O=>O.program===CA&&O.isDrumPreset(oA,!0))===-1&&(L.messageData[0]=A.presets.find(O=>O.isDrumPreset(oA))?.program||0,p(`%cNo drum preset %c${CA}%c. Channel %c${tA}%c. Changing program to ${L.messageData[0]}.`,I.info,I.unrecognized,I.info,I.recognized,I.info)):A.presets.findIndex(O=>O.program===CA&&!O.isDrumPreset(oA))===-1&&(L.messageData[0]=A.presets.find(O=>!O.isDrumPreset(oA))?.program||0,p(`%cNo preset %c${CA}%c. Channel %c${tA}%c. Changing program to ${L.messageData[0]}.`,I.info,I.unrecognized,I.info,I.recognized,I.info)),T.program=L.messageData[0];let v=Math.max(0,T.lastBank?.messageData[1]-r.bankOffset),K=T?.lastBankLSB?.messageData[1]-r.bankOffset||0;if(T.lastBank===void 0)continue;let W=Bt(v,K,T.drums,oA);if(A.presets.findIndex(O=>O.bank===W&&O.program===L.messageData[0])===-1){let O=A.presets.find(rA=>rA.program===L.messageData[0])?.bank+t||t;T.lastBank.messageData[1]=O,T?.lastBankLSB?.messageData&&(T.lastBankLSB.messageData[1]=O),p(`%cNo preset %c${W}:${L.messageData[0]}%c. Channel %c${tA}%c. Changing bank to ${O}.`,I.info,I.unrecognized,I.info,I.recognized,I.info)}else{let O=W;kA(h)&&W===128&&(W=127);let rA=(W===128?128:O)+t;T.lastBank.messageData[1]=rA,T?.lastBankLSB?.messageData&&!T.drums&&(T.lastBankLSB.messageData[1]=T.lastBankLSB.messageData[1]-r.bankOffset+t),p(`%cPreset %c${W}:${L.messageData[0]}%c exists. Channel %c${tA}%c. Changing bank to ${rA}.`,I.info,I.recognized,I.info,I.recognized,I.info)}continue}let AA=L.messageData[0]===y.lsbForControl0BankSelect;if(L.messageData[0]!==y.bankSelect&&!AA)continue;T.hasBankSelect=!0;let BA=L.messageData[1],sA=Et(T?.lastBank?.messageData[1]||0,BA,h,AA,T.drums,tA);sA.drumsStatus===2?T.drums=!0:sA.drumsStatus===1&&(T.drums=!1),AA?T.lastBankLSB=L:T.lastBank=L}if(M.forEach((R,C)=>{if(R.hasBankSelect===!0)return;let L=C%16,J=F.programChange|L,EA=Math.floor(C/16)*16,tA=r.midiPortChannelOffsets.indexOf(EA),T=r.tracks.find((oA,CA)=>r.midiPorts[CA]===tA&&r.usedChannelsOnTrack[CA].has(L));if(T===void 0)return;let AA=T.findIndex(oA=>oA.messageStatusByte===J);if(AA===-1){let oA=T.findIndex(K=>K.messageStatusByte>128&&K.messageStatusByte<240&&(K.messageStatusByte&15)===L);if(oA===-1)return;let CA=T[oA].ticks,v=A.getPreset(0,0).program;T.splice(oA,0,new ZA(CA,F.programChange|L,new b([v]))),AA=oA}p(`%cAdding bank select for %c${C}`,I.info,I.recognized);let BA=T[AA].ticks,sA=A.getPreset(0,R.program,kA(h))?.bank+t||t;T.splice(AA,0,new ZA(BA,F.controllerChange|L,new b([y.bankSelect,sA])))}),h!=="gs"&&!kA(h)){for(let C of m)r.tracks[C.tNum].splice(r.tracks[C.tNum].indexOf(C.e),1);let R=0;r.tracks[0][0].messageStatusByte===F.trackName&&R++,r.tracks[0].splice(R,0,Pn(0))}}let g=new b(r.writeMIDI().buffer),i=[gt("INFO")],E=new TextEncoder;if(i.push(z(uA.software,E.encode("SpessaSynth"),!0)),s.name!==void 0?(i.push(z(uA.name,E.encode(s.name),!0)),n=Ue):i.push(z(uA.name,r.rawMidiName,!0)),s.creationDate!==void 0)n=Ue,i.push(z(uA.creationDate,E.encode(s.creationDate),!0));else{let h=new Date().toLocaleString(void 0,{weekday:"long",year:"numeric",month:"long",day:"numeric",hour:"numeric",minute:"numeric"});i.push(z(uA.creationDate,me(h),!0))}if(s.comment!==void 0&&(n=Ue,i.push(z(uA.comment,E.encode(s.comment)))),s.engineer!==void 0&&i.push(z(uA.engineer,E.encode(s.engineer),!0)),s.album!==void 0&&(n=Ue,i.push(z(uA.album,E.encode(s.album),!0)),i.push(z(uA.album2,E.encode(s.album),!0))),s.artist!==void 0&&(n=Ue,i.push(z(uA.artist,E.encode(s.artist),!0))),s.genre!==void 0&&(n=Ue,i.push(z(uA.genre,E.encode(s.genre),!0))),s.picture!==void 0&&i.push(z(uA.picture,new Uint8Array(s.picture))),s.copyright!==void 0)n=Ue,i.push(z(uA.copyright,E.encode(s.copyright),!0));else{let h=r.copyright.length>0?r.copyright:Ei;i.push(z(uA.copyright,me(h)))}let c=new b(2);Xe(c,t,2),i.push(z(uA.bankOffset,c)),s.midiEncoding!==void 0&&(i.push(z(uA.midiEncoding,E.encode(s.midiEncoding))),n=Ue),i.push(z(uA.encoding,me(n)));let B=DA(i),Q=DA([gt("RMID"),z("data",g),z("LIST",B),e]);return p("%cFinished!",I.info),P(),z("RIFF",Q)}function zs(){let e=this;if(!e.tracks)throw new Error("MIDI has no tracks!");let A=[];for(let s of e.tracks){let o=[],r=0,g;for(let i of s){let E=i.ticks-r,c;i.messageStatusByte<=F.sequenceSpecific?c=[255,i.messageStatusByte,..._t(i.messageData.length),...i.messageData]:i.messageStatusByte===F.systemExclusive?c=[240,..._t(i.messageData.length),...i.messageData]:(c=[],g!==i.messageStatusByte&&(g=i.messageStatusByte,c.push(i.messageStatusByte)),c.push(...i.messageData)),o.push(..._t(E)),o.push(...c),r+=E}A.push(new Uint8Array(o))}function t(s,o){for(let r=0;r<s.length;r++)o.push(s.charCodeAt(r))}let n=[];t("MThd",n),n.push(...Rt(6,4)),n.push(0,e.format),n.push(...Rt(e.tracksAmount,2)),n.push(...Rt(e.timeDivision,2));for(let s of A)t("MTrk",n),n.push(...Rt(s.length,4)),n.push(...s);return new Uint8Array(n)}function _s(e){let A=this;pA("%cSearching for all used programs and keys...",I.info);let t=16+A.midiPortChannelOffsets.reduce((B,Q)=>Q>B?Q:B),n=[];for(let B=0;B<t;B++){let Q=B%16===9?128:0;n.push({program:0,bank:Q,bankLSB:0,actualBank:Q,drums:B%16===9,string:`${Q}:0`})}let s="gs";function o(B){let Q=Bt(B.bank,B.bankLSB,B.drums,kA(s)),h=e.getPreset(Q,B.program,kA(s));B.actualBank=h.bank,B.program=h.program,B.string=B.actualBank+":"+B.program,r[B.string]||(p(`%cDetected a new preset: %c${B.string}`,I.info,I.recognized),r[B.string]=new Set)}let r={},g=Array(A.tracks.length).fill(0),i=A.tracks.length;function E(){let B=0,Q=1/0;return A.tracks.forEach((h,m)=>{g[m]>=h.length||h[g[m]].ticks<Q&&(B=m,Q=h[g[m]].ticks)}),B}let c=A.midiPorts.slice();for(n.forEach(B=>{o(B)});i>0;){let B=E(),Q=A.tracks[B];if(g[B]>=Q.length){i--;continue}let h=Q[g[B]];if(g[B]++,h.messageStatusByte===F.midiPort){c[B]=h.messageData[0];continue}let m=h.messageStatusByte&240;if(m!==F.noteOn&&m!==F.controllerChange&&m!==F.programChange&&m!==F.systemExclusive)continue;let f=(h.messageStatusByte&15)+A.midiPortChannelOffsets[c[B]]||0,S=n[f];switch(m){case F.programChange:S.program=h.messageData[0],o(S);break;case F.controllerChange:let x=h.messageData[0]===y.lsbForControl0BankSelect;if(h.messageData[0]!==y.bankSelect&&!x||s==="gs"&&S.drums)continue;let D=h.messageData[1],G=Math.max(0,D-A.bankOffset);switch(x?S.bankLSB=G:S.bank=G,Et(S.bank,G,s,x,S.drums,f).drumsStatus){case 0:break;case 1:S.drums=!1,o(S);break;case 2:S.drums=!0,o(S);break}break;case F.noteOn:if(h.messageData[1]===0)continue;r[S.string].add(`${h.messageData[0]}-${h.messageData[1]}`);break;case F.systemExclusive:if(!en(h)){Ct(h)&&(s="xg",p("%cXG on detected!",I.recognized));continue}let R=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][h.messageData[5]&15]+A.midiPortChannelOffsets[c[B]],C=!!(h.messageData[7]>0&&h.messageData[5]>>4);S=n[R],S.drums=C,o(S);break}}for(let B of Object.keys(r))r[B].size===0&&(p(`%cDetected change but no keys for %c${B}`,I.info,I.value),delete r[B]);return P(),r}function js(e=0){function A(B){return B.messageData=new b(B.messageData.buffer),B.messageData.currentIndex=0,6e7/XA(B.messageData,3)}let t=[],s=this.tracks.flat();s.sort((B,Q)=>B.ticks-Q.ticks);for(let B=0;B<16;B++)t.push([]);let o=0,r=60/(120*this.timeDivision),g=0,i=0,E=[];for(let B=0;B<16;B++)E.push([]);let c=(B,Q)=>{let h=E[Q].findIndex(f=>f.midiNote===B),m=E[Q][h];if(m){let f=o-m.start;m.length=f,Q===9&&(m.length=f<e?e:f),E[Q].splice(h,1)}i--};for(;g<s.length;){let B=s[g],Q=B.messageStatusByte>>4,h=B.messageStatusByte&15;if(Q===8)c(B.messageData[0],h);else if(Q===9)if(B.messageData[1]===0)c(B.messageData[0],h);else{c(B.messageData[0],h);let m={midiNote:B.messageData[0],start:o,length:-1,velocity:B.messageData[1]/127};t[h].push(m),E[h].push(m),i++}else B.messageStatusByte===81&&(r=60/(A(B)*this.timeDivision));if(++g>=s.length)break;o+=r*(s[g].ticks-B.ticks)}return i>0&&E.forEach((B,Q)=>{B.forEach(h=>{let m=o-h.start;h.length=m,Q===9&&(h.length=m<e?e:m)})}),t}var Ie=class e extends It{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...",I.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 o=null,r=null;for(let c=0;c<this.tracks.length;c++){let B=this.tracks[c],Q=new Set,h=!1;for(let f of B){if(f.messageStatusByte>=128&&f.messageStatusByte<240){h=!0;for(let x=0;x<f.messageData.length;x++)f.messageData[x]=Math.min(127,f.messageData[x]);switch(f.ticks>this.lastVoiceEventTick&&(this.lastVoiceEventTick=f.ticks),f.messageStatusByte&240){case F.controllerChange:switch(f.messageData[0]){case 2:case 116:o=f.ticks;break;case 4:case 117:r===null?r=f.ticks:r=0;break;case 0:this.isDLSRMIDI&&f.messageData[1]!==0&&f.messageData[1]!==127&&(p("%cDLS RMIDI with offset 1 detected!",I.recognized),this.bankOffset=1)}break;case F.noteOn:Q.add(f.messageStatusByte&15);let x=f.messageData[0];this.keyRange.min=Math.min(this.keyRange.min,x),this.keyRange.max=Math.max(this.keyRange.max,x);break}}f.messageData.currentIndex=0;let S=$(f.messageData,f.messageData.length);switch(f.messageData.currentIndex=0,f.messageStatusByte){case F.setTempo:f.messageData.currentIndex=0,this.tempoChanges.push({ticks:f.ticks,tempo:6e7/XA(f.messageData,3)}),f.messageData.currentIndex=0;break;case F.marker:switch(S.trim().toLowerCase()){default:break;case"start":case"loopstart":o=f.ticks;break;case"loopend":r=f.ticks}f.messageData.currentIndex=0;break;case F.copyright:n||(f.messageData.currentIndex=0,t.push($(f.messageData,f.messageData.length,void 0,!1)),f.messageData.currentIndex=0);break;case F.lyric:if(S.trim().startsWith("@KMIDI KARAOKE FILE")&&(this.isKaraokeFile=!0,p("%cKaraoke MIDI detected!",I.recognized)),this.isKaraokeFile)f.messageStatusByte=F.text;else{this.lyrics.push(f.messageData),this.lyricsTicks.push(f.ticks);break}case F.text:let D=S.trim();D.startsWith("@KMIDI KARAOKE FILE")?(this.isKaraokeFile=!0,p("%cKaraoke MIDI detected!",I.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=gt(this.midiName)):D[0]!=="@"&&(this.lyrics.push(xs(f.messageData)),this.lyricsTicks.push(f.ticks)));break;case F.trackName:break}}this.usedChannelsOnTrack.push(Q),this.trackNames[c]="";let m=B.find(f=>f.messageStatusByte===F.trackName);if(m){m.messageData.currentIndex=0;let f=$(m.messageData,m.messageData.length);this.trackNames[c]=f,h||t.push(f)}}this.tempoChanges.reverse(),p("%cCorrecting loops, ports and detecting notes...",I.info);let g=[];for(let c of this.tracks){let B=c.find(Q=>(Q.messageStatusByte&240)===F.noteOn);B&&g.push(B.ticks)}this.firstNoteOn=Math.min(...g),p(`%cFirst note-on detected at: %c${this.firstNoteOn}%c ticks!`,I.info,I.recognized,I.info),o!==null&&r===null?(o=this.firstNoteOn,r=this.lastVoiceEventTick):(o===null&&(o=this.firstNoteOn),(r===null||r===0)&&(r=this.lastVoiceEventTick)),this.loop={start:o,end:r},p(`%cLoop points: start: %c${this.loop.start}%c end: %c${this.loop.end}`,I.info,I.recognized,I.info,I.recognized);let i=0;this.midiPorts=[],this.midiPortChannelOffsets=[];for(let c=0;c<this.tracks.length;c++)if(this.midiPorts.push(-1),this.usedChannelsOnTrack[c].size!==0)for(let B of this.tracks[c]){if(B.messageStatusByte!==F.midiPort)continue;let Q=B.messageData[0];this.midiPorts[c]=Q,this.midiPortChannelOffsets[Q]===void 0&&(this.midiPortChannelOffsets[Q]=i,i+=16)}let E=1/0;for(let c of this.midiPorts)c!==-1&&E>c&&(E=c);if(E===1/0&&(E=0),this.midiPorts=this.midiPorts.map(c=>c===-1?E:c),this.midiPortChannelOffsets.length===0&&(this.midiPortChannelOffsets=[0]),this.midiPortChannelOffsets.length<2?p("%cNo additional MIDI Ports detected.",I.info):(this.isMultiPort=!0,p("%cMIDI Ports detected!",I.recognized)),!s)if(this.tracks.length>1){if(this.tracks[0].find(c=>c.messageStatusByte>=F.noteOn&&c.messageStatusByte<F.polyPressure)===void 0){let c=this.tracks[0].find(B=>B.messageStatusByte===F.trackName);c&&(this.rawMidiName=c.messageData,c.messageData.currentIndex=0,this.midiName=$(c.messageData,c.messageData.length,void 0,!1))}}else{let c=this.tracks[0].find(B=>B.messageStatusByte===F.trackName);c&&(this.rawMidiName=c.messageData,c.messageData.currentIndex=0,this.midiName=$(c.messageData,c.messageData.length,void 0,!1))}if(n||(this.copyright=t.map(c=>c.trim().replace(/(\r?\n)+/g,`
10
+ `)).filter(c=>c.length>0).join(`
11
+ `)||""),this.midiName=this.midiName.trim(),this.midiNameUsesFileName=!1,this.midiName.length===0){p("%cNo name detected. Using the alt name!",I.info),this.midiName=Gs(this.fileName),this.midiNameUsesFileName=!0,this.rawMidiName=new Uint8Array(this.midiName.length);for(let c=0;c<this.midiName.length;c++)this.rawMidiName[c]=this.midiName.charCodeAt(c)}else p(`%cMIDI Name detected! %c"${this.midiName}"`,I.info,I.recognized);this.tracks.some(c=>c[0].ticks===0)||this.tracks[0].unshift(new ZA(0,F.trackName,new b(this.rawMidiName.buffer))),this.duration=this.MIDIticksToSeconds(this.lastVoiceEventTick),p("%cSuccess!",I.recognized),P()}flush(){for(let A of this.tracks)A.sort((t,n)=>t.ticks-n.ticks);this._parseInternal()}};Ie.prototype.writeMIDI=zs;Ie.prototype.modifyMIDI=Zs;Ie.prototype.applySnapshotToMIDI=Xs;Ie.prototype.writeRMIDI=Ws;Ie.prototype.getUsedProgramsAndKeys=_s;Ie.prototype.getNoteTimes=js;var Zn;(()=>{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]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),r=function(v,K){for(var W=new A(31),O=0;O<31;++O)W[O]=K+=1<<v[O-1];for(var rA=new t(W[30]),O=1;O<30;++O)for(var JA=W[O];JA<W[O+1];++JA)rA[JA]=JA-W[O]<<5|O;return{b:W,r:rA}},g=r(n,2),i=g.b,E=g.r;i[28]=258,E[258]=28;var c=r(s,0),B=c.b,Q=c.r,h=new A(32768);for(D=0;D<32768;++D)m=(D&43690)>>1|(D&21845)<<1,m=(m&52428)>>2|(m&13107)<<2,m=(m&61680)>>4|(m&3855)<<4,h[D]=((m&65280)>>8|(m&255)<<8)>>1;var m,D,f=function(v,K,W){for(var O=v.length,rA=0,JA=new A(K);rA<O;++rA)v[rA]&&++JA[v[rA]-1];var Ce=new A(K);for(rA=1;rA<K;++rA)Ce[rA]=Ce[rA-1]+JA[rA-1]<<1;var le;if(W){le=new A(1<<K);var Qe=15-K;for(rA=0;rA<O;++rA)if(v[rA])for(var $e=rA<<4|v[rA],ye=K-v[rA],aA=Ce[v[rA]-1]++<<ye,lA=aA|(1<<ye)-1;aA<=lA;++aA)le[h[aA]>>Qe]=$e}else for(le=new A(O),rA=0;rA<O;++rA)v[rA]&&(le[rA]=h[Ce[v[rA]-1]++]>>15-v[rA]);return le},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,x=new e(32);for(D=0;D<32;++D)x[D]=5;var D,G=f(S,9,1),M=f(x,5,1),R=function(v){for(var K=v[0],W=1;W<v.length;++W)v[W]>K&&(K=v[W]);return K},C=function(v,K,W){var O=K/8|0;return(v[O]|v[O+1]<<8)>>(K&7)&W},L=function(v,K){var W=K/8|0;return(v[W]|v[W+1]<<8|v[W+2]<<16)>>(K&7)},J=function(v){return(v+7)/8|0},EA=function(v,K,W){return(K==null||K<0)&&(K=0),(W==null||W>v.length)&&(W=v.length),new e(v.subarray(K,W))},tA=["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"],T=function(v,K,W){var O=new Error(K||tA[v]);if(O.code=v,Error.captureStackTrace&&Error.captureStackTrace(O,T),!W)throw O;return O},AA=function(v,K,W,O){var rA=v.length,JA=O?O.length:0;if(!rA||K.f&&!K.l)return W||new e(0);var Ce=!W,le=Ce||K.i!=2,Qe=K.i;Ce&&(W=new e(rA*3));var $e=function(Ot){var Ne=W.length;if(Ot>Ne){var St=new e(Math.max(Ne*2,Ot));St.set(W),W=St}},ye=K.f||0,aA=K.p||0,lA=K.b||0,de=K.l,zA=K.d,Ge=K.m,xe=K.n,ut=rA*8;do{if(!de){ye=C(v,aA,1);var At=C(v,aA+1,3);if(aA+=3,At)if(At==1)de=G,zA=M,Ge=9,xe=5;else if(At==2){var ft=C(v,aA,31)+257,wn=C(v,aA+10,15)+4,Rn=ft+C(v,aA+5,31)+1;aA+=14;for(var et=new e(Rn),Me=new e(19),_A=0;_A<wn;++_A)Me[o[_A]]=C(v,aA+_A*3,7);aA+=wn*3;for(var Gn=R(Me),Yt=(1<<Gn)-1,tt=f(Me,Gn,1),_A=0;_A<Rn;){var mt=tt[C(v,aA,Yt)];aA+=mt&15;var KA=mt>>4;if(KA<16)et[_A++]=KA;else{var Se=0,pt=0;for(KA==16?(pt=3+C(v,aA,3),aA+=2,Se=et[_A-1]):KA==17?(pt=3+C(v,aA,7),aA+=3):KA==18&&(pt=11+C(v,aA,127),aA+=7);pt--;)et[_A++]=Se}}var xn=et.subarray(0,ft),De=et.subarray(ft);Ge=R(xn),xe=R(De),de=f(xn,Ge,1),zA=f(De,xe,1)}else T(1);else{var KA=J(aA)+4,Jt=v[KA-4]|v[KA-3]<<8,Kt=KA+Jt;if(Kt>rA){Qe&&T(0);break}le&&$e(lA+Jt),W.set(v.subarray(KA,Kt),lA),K.b=lA+=Jt,K.p=aA=Kt*8,K.f=ye;continue}if(aA>ut){Qe&&T(0);break}}le&&$e(lA+131072);for(var us=(1<<Ge)-1,fs=(1<<xe)-1,qt=aA;;qt=aA){var Se=de[L(v,aA)&us],Oe=Se>>4;if(aA+=Se&15,aA>ut){Qe&&T(0);break}if(Se||T(2),Oe<256)W[lA++]=Oe;else if(Oe==256){qt=aA,de=null;break}else{var Mn=Oe-254;if(Oe>264){var _A=Oe-257,ke=n[_A];Mn=C(v,aA,(1<<ke)-1)+i[_A],aA+=ke}var nt=zA[L(v,aA)&fs],Ve=nt>>4;nt||T(3),aA+=nt&15;var De=B[Ve];if(Ve>3){var ke=s[Ve];De+=L(v,aA)&(1<<ke)-1,aA+=ke}if(aA>ut){Qe&&T(0);break}le&&$e(lA+131072);var yt=lA+Mn;if(lA<De){var st=JA-De,NA=Math.min(De,yt);for(st+lA<0&&T(3);lA<NA;++lA)W[lA]=O[st+lA]}for(;lA<yt;++lA)W[lA]=W[lA-De]}}K.l=de,K.p=qt,K.b=lA,K.f=ye,de&&(ye=1,K.m=Ge,K.d=zA,K.n=xe)}while(!ye);return lA!=W.length&&Ce?EA(W,0,lA):W.subarray(0,lA)},BA=new e(0);function sA(v,K){return AA(v,{i:2},K&&K.out,K&&K.dictionary)}var oA=typeof TextDecoder<"u"&&new TextDecoder,CA=0;try{oA.decode(BA,{stream:!0}),CA=1}catch{}Zn=sA})();var Xn={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},ct={inLineResource:1,inFileResource:2,inFileNode:3,externalFile:4,externalXMF:5,XMFFileURIandNodeID:6},Wn={StandardMIDIFile:0,StandardMIDIFileType1:1,DLS1:2,DLS2:3,DLS22:4,mobileDLS:5},Bi={standard:0,MMA:1,registered:2,nonRegistered:3},an={none:0,MMAUnpacker:1,registered:2,nonRegistered:3},zn=class e{length;itemCount;metadataLength;metadata={};nodeData;innerNodes=[];packedContent=!1;nodeUnpackers=[];resourceFormat="unknown";constructor(A){let t=A.currentIndex;this.length=yA(A),this.itemCount=yA(A);let n=yA(A),s=A.currentIndex-t,o=n-s,r=A.slice(A.currentIndex,A.currentIndex+o);A.currentIndex+=o,this.metadataLength=yA(r);let g=r.slice(r.currentIndex,r.currentIndex+this.metadataLength);r.currentIndex+=this.metadataLength;let i,E;for(;g.currentIndex<g.length;){if(g[g.currentIndex]===0)g.currentIndex++,i=yA(g),Object.values(Xn).indexOf(i)===-1?(H(`Unknown field specifier: ${i}`),E=`unknown_${i}`):E=Object.keys(Xn).find(f=>Xn[f]===i);else{let f=yA(g);i=$(g,f),E=i}let m=yA(g);if(m===0){let f=yA(g),S=g.slice(g.currentIndex,g.currentIndex+f);g.currentIndex+=f,yA(S)<4?this.metadata[E]=$(S,f-1):this.metadata[E]=S.slice(S.currentIndex)}else H(`International content: ${m}`),g.currentIndex+=yA(g)}let c=r.currentIndex,B=yA(r),Q=r.slice(r.currentIndex,c+B);if(r.currentIndex=c+B,B>0)for(this.packedContent=!0;Q.currentIndex<B;){let h={};switch(h.id=yA(Q),h.id){case an.nonRegistered:case an.registered:throw P(),new Error(`Unsupported unpacker ID: ${h.id}`);default:throw P(),new Error(`Unknown unpacker ID: ${h.id}`);case an.none:h.standardID=yA(Q);break;case an.MMAUnpacker:let m=Q[Q.currentIndex++];m===0&&(m<<=8,m|=Q[Q.currentIndex++],m<<=8,m|=Q[Q.currentIndex++]);let f=yA(Q);h.manufacturerID=m,h.manufacturerInternalID=f;break}h.decodedSize=yA(Q),this.nodeUnpackers.push(h)}switch(A.currentIndex=t+n,this.referenceTypeID=yA(A),this.nodeData=A.slice(A.currentIndex,t+this.length),A.currentIndex=t+this.length,this.referenceTypeID){case ct.inLineResource:break;case ct.externalXMF:case ct.inFileNode:case ct.XMFFileURIandNodeID:case ct.externalFile:case ct.inFileResource:throw P(),new Error(`Unsupported reference type: ${this.referenceTypeID}`);default:throw P(),new Error(`Unknown reference type: ${this.referenceTypeID}`)}if(this.isFile){if(this.packedContent){let m=this.nodeData.slice(2,this.nodeData.length);p(`%cPacked content. Attemting to deflate. Target size: %c${this.nodeUnpackers[0].decodedSize}`,I.warn,I.value);try{this.nodeData=new b(Zn(m).buffer)}catch(f){throw P(),new Error(`Error unpacking XMF file contents: ${f.message}.`)}}let h=this.metadata.resourceFormat;if(h===void 0)H("No resource format for this file node!");else{h[0]!==Bi.standard&&(H(`Non-standard formatTypeID: ${h}`),this.resourceFormat=h.toString());let f=h[1];Object.values(Wn).indexOf(f)===-1?H(`Unrecognized resource format: ${f}`):this.resourceFormat=Object.keys(Wn).find(S=>Wn[S]===f)}}else for(this.resourceFormat="folder";this.nodeData.currentIndex<this.nodeData.length;){let h=this.nodeData.currentIndex,m=yA(this.nodeData),f=this.nodeData.slice(h,h+m);this.nodeData.currentIndex=h+m,this.innerNodes.push(new e(f))}}get isFile(){return this.itemCount===0}};function $s(e,A){e.bankOffset=0;let t=$(A,4);if(t!=="XMF_")throw P(),new SyntaxError(`Invalid XMF Header! Expected "_XMF", got "${t}"`);ie("%cParsing XMF file...",I.info);let n=$(A,4);if(p(`%cXMF version: %c${n}`,I.info,I.recognized),n==="2.00"){let i=XA(A,4),E=XA(A,4);p(`%cFile Type ID: %c${i}%c, File Type Revision ID: %c${E}`,I.info,I.recognized,I.info,I.recognized)}yA(A);let s=yA(A);A.currentIndex+=s,A.currentIndex=yA(A);let o=new zn(A),r,g=i=>{let E=(c,B)=>{i.metadata[c]!==void 0&&typeof i.metadata[c]=="string"&&(e.RMIDInfo[B]=i.metadata[c])};if(E("nodeName",uA.name),E("title",uA.name),E("copyrightNotice",uA.copyright),E("comment",uA.comment),i.isFile)switch(i.resourceFormat){default:return;case"DLS1":case"DLS2":case"DLS22":case"mobileDLS":p("%cFound embedded DLS!",I.recognized),e.embeddedSoundFont=i.nodeData.buffer;break;case"StandardMIDIFile":case"StandardMIDIFileType1":p("%cFound embedded MIDI!",I.recognized),r=i.nodeData;break}else for(let c of i.innerNodes)g(c)};return g(o),P(),r}var In=class extends Ie{constructor(A,t=""){super(),pA("%cParsing MIDI File...",I.info),this.fileName=t;let n=new b(A),s,o=$(n,4);if(n.currentIndex-=4,o==="RIFF"){n.currentIndex+=8;let g=$(n,4,void 0,!1);if(g!=="RMID")throw P(),new SyntaxError(`Invalid RMIDI Header! Expected "RMID", got "${g}"`);let i=IA(n);if(i.header!=="data")throw P(),new SyntaxError(`Invalid RMIDI Chunk header! Expected "data", got "${g}"`);for(s=i.chunkData;n.currentIndex<=n.length;){let E=n.currentIndex,c=IA(n,!0);if(c.header==="RIFF"){let B=$(c.chunkData,4).toLowerCase();B==="sfbk"||B==="sfpk"||B==="dls "?(p("%cFound embedded soundfont!",I.recognized),this.embeddedSoundFont=n.slice(E,E+c.size).buffer):H(`Unknown RIFF chunk: "${B}"`),B==="dls "&&(this.isDLSRMIDI=!0)}else if(c.header==="LIST"&&$(c.chunkData,4)==="INFO"){for(p("%cFound RMIDI INFO chunk!",I.recognized),this.RMIDInfo={};c.chunkData.currentIndex<=c.size;){let Q=IA(c.chunkData,!0);this.RMIDInfo[Q.header]=Q.chunkData}this.RMIDInfo.ICOP&&(this.copyright=$(this.RMIDInfo.ICOP,this.RMIDInfo.ICOP.length,void 0,!1).replaceAll(`
12
+ `," ")),this.RMIDInfo.INAM&&(this.rawMidiName=this.RMIDInfo[uA.name],this.midiName=$(this.rawMidiName,this.rawMidiName.length,void 0,!1).replaceAll(`
13
+ `," ")),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[uA.bankOffset]&&(this.bankOffset=N(this.RMIDInfo[uA.bankOffset],2))}}this.isDLSRMIDI&&(this.bankOffset=0),this.embeddedSoundFont===void 0&&(this.bankOffset=0)}else o==="XMF_"?s=$s(this,n):s=n;let r=this._readMIDIChunk(s);if(r.type!=="MThd")throw P(),new SyntaxError(`Invalid MIDI Header! Expected "MThd", got "${r.type}"`);if(r.size!==6)throw P(),new RangeError(`Invalid MIDI header chunk size! Expected 6, got ${r.size}`);this.format=XA(r.data,2),this.tracksAmount=XA(r.data,2),this.timeDivision=XA(r.data,2);for(let g=0;g<this.tracksAmount;g++){let i=[],E=this._readMIDIChunk(s);if(E.type!=="MTrk")throw P(),new SyntaxError(`Invalid track header! Expected "MTrk" got "${E.type}"`);let c,B=0;for(this.format===2&&g>0&&(B+=this.tracks[g-1][this.tracks[g-1].length-1].ticks);E.data.currentIndex<E.size;){B+=yA(E.data);let Q=E.data[E.data.currentIndex],h;if(c!==void 0&&Q<128)h=c;else{if(c===void 0&&Q<128)throw P(),new SyntaxError(`Unexpected byte with no running byte. (${Q})`);h=E.data[E.data.currentIndex++]}let m=Ls(h),f;switch(m){case-1:f=0;break;case-2:h=E.data[E.data.currentIndex++],f=yA(E.data);break;case-3:f=yA(E.data);break;default:f=Us[h>>4],c=h;break}let S=new b(f);S.set(E.data.slice(E.data.currentIndex,E.data.currentIndex+f),0);let x=new ZA(B,h,S);i.push(x),E.data.currentIndex+=f}this.tracks.push(i),p(`%cParsed %c${this.tracks.length}%c / %c${this.tracksAmount}`,I.info,I.value,I.info,I.value)}p("%cAll tracks parsed correctly!",I.recognized),this._parseInternal(),P(),p(`%cMIDI file parsed. Total tick time: %c${this.lastVoiceEventTick}%c, total seconds time: %c${this.duration}`,I.info,I.recognized,I.info,I.recognized)}_readMIDIChunk(A){let t={};t.type=$(A,4),t.size=XA(A,4),t.data=new b(t.size);let n=A.slice(A.currentIndex,A.currentIndex+t.size);return t.data.set(n,0),A.currentIndex+=t.size,t}};function Ao(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 eo(e,A=!0){if(this.stop(),!e.tracks)throw new Error("This MIDI has no tracks!");if(this.oneTickToSeconds=60/(120*e.timeDivision),this.midiData=e,this.midiData.embeddedSoundFont!==void 0)p("%cEmbedded soundfont detected! Using it.",I.recognized),this.synth.setEmbeddedSoundFont(this.midiData.embeddedSoundFont,this.midiData.bankOffset);else{this.synth.overrideSoundfont&&this.synth.clearSoundFont(!0,!0),pA("%cPreloading samples...",I.info);let t=this.midiData.getUsedProgramsAndKeys(this.synth.soundfontManager);for(let[n,s]of Object.entries(t)){let o=parseInt(n.split(":")[0]),r=parseInt(n.split(":")[1]),g=this.synth.getPreset(o,r);p(`%cPreloading used samples on %c${g.presetName}%c...`,I.info,I.recognized,I.info);for(let i of s){let E=i.split("-");g.preloadSpecific(parseInt(E[0]),parseInt(E[1]))}}P()}if(this.tracks=this.midiData.tracks,this.midiPorts=this.midiData.midiPorts.slice(),this.midiPortChannelOffset=0,this.midiPortChannelOffsets={},this.midiData.midiPorts.forEach((t,n)=>{this.assignMIDIPort(n,t)}),this.duration=this.midiData.duration,this.firstNoteTime=this.midiData.MIDIticksToSeconds(this.midiData.firstNoteOn),p(`%cTotal song time: ${Jn(Math.ceil(this.duration)).time}`,I.recognized),this.post(LA.songChange,[this.songIndex,A]),this.duration<=1&&(H(`%cVery short song: (${Jn(Math.round(this.duration)).time}). Disabling loop!`,I.warn),this.loop=!1),A)this.play(!0);else{let t=this.skipToFirstNoteOn?this.midiData.firstNoteOn-1:0;this.setTimeTicks(t),this.pause()}}function to(e,A=!0){if(this.songs=e.reduce((n,s)=>{if(s.duration)return n.push(Ie.copyFrom(s)),n;try{n.push(new In(s.binary,s.altName||""))}catch(o){return console.error(o),this.post(LA.midiError,o),n}return n},[]),this.songs.length<1)return;this.songIndex=0,this.songs.length>1&&(this.loop=!1),this.shuffleSongIndexes();let t=this.songs.map(n=>new zt(n));this.post(LA.songListChange,t),this.loadCurrentSong(A)}function no(){if(this.songs.length===1){this.currentTime=0;return}this.songIndex++,this.songIndex%=this.songs.length,this.loadCurrentSong()}function so(){if(this.songs.length===1){this.currentTime=0;return}this.songIndex--,this.songIndex<0&&(this.songIndex=this.songs.length-1),this.loadCurrentSong()}function oo(e=!0){e&&p("%cResetting all controllers!",I.info),this.callEvent("allcontrollerreset",void 0),this.setSystem(An);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(Ps(this.system)),A%16===9?(t.setPreset(this.drumPreset),t.presetUsesOverride=this.defaultDrumsUsesOverride,t.drumChannel=!0,this.callEvent("drumchange",{channel:A,isDrumChannel:!0})):(t.drumChannel=!1,t.presetUsesOverride=this.defaultDrumsUsesOverride,t.setPreset(this.defaultPreset),this.callEvent("drumchange",{channel:A,isDrumChannel:!1})));let n=t.preset.bank,s=n===128?128:t.presetUsesOverride?n+this.soundfontBankOffset:n;this.callEvent("programchange",{channel:A,program:t.preset.program,bank:s});for(let o=0;o<128;o++)this.midiAudioChannels[A].lockedControllers[o]&&this.callEvent("controllerchange",{channel:A,controllerNumber:o,controllerValue:this.midiAudioChannels[A].midiControllers[o]>>7});if(this.midiAudioChannels[A].lockedControllers[GA+j.pitchWheel]===!1){let o=this.midiAudioChannels[A].midiControllers[GA+j.pitchWheel],r=o>>7,g=o&127;this.callEvent("pitchwheel",{channel:A,MSB:r,LSB:g})}}this.tunings=[],this.tunings=[];for(let A=0;A<128;A++)this.tunings.push([]);this.setMIDIVolume(1)}function ro(){this.channelOctaveTuning.fill(0);for(let A=0;A<Le.length;A++){if(this.lockedControllers[A])continue;let t=Le[A];this.midiControllers[A]!==t&&A<127?A===y.portamentoControl?this.midiControllers[A]=$t:this.controllerChange(A,t>>7):this.midiControllers[A]=t}this.channelVibrato={rate:0,depth:0,delay:0},this.holdPedal=!1,this.randomPan=!1;let e=this.customControllers[cA.channelTransposeFine];this.customControllers.set(Vn),this.setCustomController(cA.channelTransposeFine,e),this.resetParameters()}var _n=new Set([y.bankSelect,y.lsbForControl0BankSelect,y.mainVolume,y.lsbForControl7MainVolume,y.pan,y.lsbForControl10Pan,y.reverbDepth,y.tremoloDepth,y.chorusDepth,y.detuneDepth,y.phaserDepth,y.soundVariation,y.filterResonance,y.releaseTime,y.attackTime,y.brightness,y.decayTime,y.vibratoRate,y.vibratoDepth,y.vibratoDelay,y.soundController10]);function io(){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=Le[e];!_n.has(e)&&A!==this.midiControllers[e]&&(e===y.portamentoControl?this.midiControllers[e]=$t:this.controllerChange(e,A>>7))}}function ao(){this.dataEntryState=YA.Idle,p("%cResetting Registered and Non-Registered Parameters!",I.info)}var We=Le.slice(0,128);function Io(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 i=0;i<t;i++)s.push({program:-1,bank:0,actualBank:0});let o=i=>i===y.dataDecrement||i===y.dataIncrement||i===y.dataEntryMsb||i===y.dataDecrement||i===y.lsbForControl6DataEntry||i===y.RPNLsb||i===y.RPNMsb||i===y.NRPNLsb||i===y.NRPNMsb||i===y.bankSelect||i===y.lsbForControl0BankSelect||i===y.resetAllControllers,r=[];for(let i=0;i<t;i++)r.push(Array.from(We));function g(i){if(n[i]=8192,r?.[i]!==void 0)for(let E=0;E<We.length;E++)_n.has(E)||(r[i][E]=We[E])}for(;;){let i=this._findFirstEventIndex(),E=this.tracks[i][this.eventIndex[i]];if(A!==void 0){if(E.ticks>=A)break}else if(this.playedTime>=e)break;let c=at(E.messageStatusByte),B=c.channel+(this.midiPortChannelOffsets[this.midiPorts[i]]||0);switch(c.status){case F.noteOn:r[B]===void 0&&(r[B]=Array.from(We)),r[B][y.portamentoControl]=E.messageData[0];break;case F.noteOff:break;case F.pitchBend:n[B]=E.messageData[1]<<7|E.messageData[0];break;case F.programChange:if(this.midiData.isMultiPort&&this.midiData.usedChannelsOnTrack[i].size===0)break;let h=s[B];h.program=E.messageData[0],h.actualBank=h.bank;break;case F.controllerChange:if(this.midiData.isMultiPort&&this.midiData.usedChannelsOnTrack[i].size===0)break;let m=E.messageData[0];if(o(m)){let f=E.messageData[1];if(m===y.bankSelect){s[B].bank=f;break}else m===y.resetAllControllers&&g(B);this.sendMIDIMessages?this.sendMIDICC(B,m,f):this.synth.controllerChange(B,m,f)}else r[B]===void 0&&(r[B]=Array.from(We)),r[B][m]=E.messageData[1];break;default:this._processEvent(E,i);break}this.eventIndex[i]++,i=this._findFirstEventIndex();let Q=this.tracks[i][this.eventIndex[i]];if(Q===void 0)return this.stop(),!1;this.playedTime+=this.oneTickToSeconds*(Q.ticks-E.ticks)}if(this.sendMIDIMessages){for(let i=0;i<t;i++)if(n[i]!==void 0&&this.sendMIDIPitchWheel(i,n[i]>>7,n[i]&127),r[i]!==void 0&&r[i].forEach((E,c)=>{E!==We[c]&&!o(c)&&this.sendMIDICC(i,c,E)}),s[i].program>=0&&s[i].actualBank>=0){let E=s[i].actualBank;this.sendMIDICC(i,y.bankSelect,E),this.sendMIDIProgramChange(i,s[i].program)}}else for(let i=0;i<t;i++)if(n[i]!==void 0&&this.synth.pitchWheel(i,n[i]>>7,n[i]&127),r[i]!==void 0&&r[i].forEach((E,c)=>{E!==We[c]&&!o(c)&&this.synth.controllerChange(i,c,E)}),s[i].program>=0&&s[i].actualBank>=0){let E=s[i].actualBank;this.synth.controllerChange(i,y.bankSelect,E),this.synth.programChange(i,s[i].program)}return!0}function go(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 Co(e){this.stop(),this.playingNotes=[],this.pausedTime=void 0,this.post(LA.timeChange,this.synth.currentSynthTime-this.midiData.MIDIticksToSeconds(e));let A=this._playTo(0,e);this._recalculateStartTime(this.playedTime),A&&this.play()}function Eo(e){this.absoluteStartTime=this.synth.currentSynthTime-e/this._playbackRate}var wA={midiMessage:0,ccReset:7,setChannelVibrato:8,soundFontManager:9,stopAll:10,killNotes:11,muteChannel:12,addNewChannel:13,customcCcChange: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},ee=-1,qA={channelPropertyChange:0,eventCall:1,masterParameterChange:2,sequencerSpecific:3,synthesizerSnapshot:4,isFullyInitialized:5,soundfontError:6};function Bo(e,A=void 0){this.synth.enableEventSystem&&this.synth.post({messageType:qA.sequencerSpecific,messageData:{messageType:e,messageData:A}})}function ho(e){this.sendMIDIMessages&&this.post(LA.midiEvent,e)}function co(e,A,t){e%=16,this.sendMIDIMessages&&this.sendMIDIMessage([F.controllerChange|e,A,t])}function lo(e,A){e%=16,this.sendMIDIMessages&&this.sendMIDIMessage([F.programChange|e,A])}function Qo(e,A,t){e%=16,this.sendMIDIMessages&&this.sendMIDIMessage([F.pitchBend|e,t,A])}function uo(){if(this.sendMIDIMessages){this.sendMIDIMessage([F.reset]);for(let e=0;e<16;e++)this.sendMIDIMessage([F.controllerChange|e,y.allSoundOff,0]),this.sendMIDIMessage([F.controllerChange|e,y.resetAllControllers,0])}}var FA=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;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(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.post(LA.timeChange,this.synth.currentSynthTime-A),this.midiData.duration===0){H("No duration!"),this.post(LA.pause,!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){H("Already paused");return}this.pausedTime=this.currentTime,this.stop(),this.post(LA.pause,A)}stop(){this.clearProcessHandler();for(let A=0;A<16;A++)this.synth.controllerChange(A,y.sustainPedal,0);if(this.synth.stopAllChannels(),this.sendMIDIMessages){for(let A of this.playingNotes)this.sendMIDIMessage([F.noteOff|A.channel%16,A.midiNote]);for(let A=0;A<16;A++)this.sendMIDICC(A,y.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)}}};FA.prototype.sendMIDIMessage=ho;FA.prototype.sendMIDIReset=uo;FA.prototype.sendMIDICC=co;FA.prototype.sendMIDIProgramChange=lo;FA.prototype.sendMIDIPitchWheel=Qo;FA.prototype.assignMIDIPort=Ao;FA.prototype.post=Bo;FA.prototype._processEvent=Ts;FA.prototype._addNewMidiPort=vs;FA.prototype.processTick=Hs;FA.prototype._findFirstEventIndex=Ys;FA.prototype.loadNewSequence=eo;FA.prototype.loadNewSongList=to;FA.prototype.nextSong=no;FA.prototype.previousSong=so;FA.prototype.play=go;FA.prototype._playTo=Io;FA.prototype.setTimeTicks=Co;FA.prototype._recalculateStartTime=Eo;function hi(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 fo(e){let A=[];for(let n of this.midiAudioChannels)for(let s of n.voices)if(!s.finished){let o=hi(n,s);A.push({channel:n,voice:s,priority:o})}A.sort((n,s)=>n.priority-s.priority);let t=A.slice(0,e);for(let{channel:n,voice:s}of t){let o=n.voices.indexOf(s);o>-1&&n.voices.splice(o,1)}}var pe=pe!==void 0?pe:{},mo=!1,po;pe.isInitialized=new Promise(e=>po=e);var ci=function(e){var A,t,n,s,o,r,g,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",E="",c=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");do s=i.indexOf(e.charAt(c++)),o=i.indexOf(e.charAt(c++)),r=i.indexOf(e.charAt(c++)),g=i.indexOf(e.charAt(c++)),A=s<<2|o>>4,t=(15&o)<<4|r>>2,n=(3&r)<<6|g,E+=String.fromCharCode(A),r!==64&&(E+=String.fromCharCode(t)),g!==64&&(E+=String.fromCharCode(n));while(c<e.length);return E};(function(){var e,A,t,n,s,o,r,g,i,E,c,B,Q,h,m,f,S,x,D,G,M,R,C=C!==void 0?C:{};C.wasmBinary=Uint8Array.from(ci("AGFzbQEAAAABpQEYYAJ/fwF/YAF/AGAAAX9gBH9/f38AYAAAYAN/f38Bf2ABfwF/YAJ/fwBgBn9/f39/fwF/YAR/f39/AX9gBX9/f39/AX9gB39/f39/f38Bf2AGf39/f39/AGAIf39/f39/f38Bf2AFf39/f38AYAd/f39/f39/AGADf39/AGABfwF9YAF9AX1gAnx/AXxgAnx/AX9gA3x8fwF8YAJ8fAF8YAF8AXwCngIPA2VudgZtZW1vcnkCAIACA2VudgV0YWJsZQFwAQQEA2Vudgl0YWJsZUJhc2UDfwADZW52DkRZTkFNSUNUT1BfUFRSA38AA2VudghTVEFDS1RPUAN/AANlbnYJU1RBQ0tfTUFYA38ABmdsb2JhbAhJbmZpbml0eQN8AANlbnYFYWJvcnQAAQNlbnYNZW5sYXJnZU1lbW9yeQACA2Vudg5nZXRUb3RhbE1lbW9yeQACA2VudhdhYm9ydE9uQ2Fubm90R3Jvd01lbW9yeQACA2Vudg5fX19hc3NlcnRfZmFpbAADA2VudgtfX19zZXRFcnJObwABA2VudgZfYWJvcnQABANlbnYWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwAFA3d2BgYCAQcHAQIBAQcBCAcFAAkGCQoHBgYGBgEFBgIBBgYKAAgLAAYGBgYGBgYBAAoMDAMGBQANCAoJAAwODA8OAQAGBgcEABAJEAERAAADBQwAAAMHBxIGAQAABwIFEwMOBw8HBgYQFAoVExYXFxcXFgQFBQYFAAYkB38BIwELfwEjAgt/ASMDC38BQQALfwFBAAt8ASMEC38BQQALB9MCFRBfX2dyb3dXYXNtTWVtb3J5AAgRX19fZXJybm9fbG9jYXRpb24AYwVfZnJlZQBfB19tYWxsb2MAXgdfbWVtY3B5AHkHX21lbXNldAB6BV9zYnJrAHsXX3N0Yl92b3JiaXNfanNfY2hhbm5lbHMAJhRfc3RiX3ZvcmJpc19qc19jbG9zZQAlFV9zdGJfdm9yYmlzX2pzX2RlY29kZQAoE19zdGJfdm9yYmlzX2pzX29wZW4AJBpfc3RiX3ZvcmJpc19qc19zYW1wbGVfcmF0ZQAnC2R5bkNhbGxfaWlpAHwTZXN0YWJsaXNoU3RhY2tTcGFjZQAMC2dldFRlbXBSZXQwAA8LcnVuUG9zdFNldHMAeAtzZXRUZW1wUmV0MAAOCHNldFRocmV3AA0Kc3RhY2tBbGxvYwAJDHN0YWNrUmVzdG9yZQALCXN0YWNrU2F2ZQAKCQoBACMACwR9VFl9Csb2A3YGACAAQAALGwEBfyMGIQEjBiAAaiQGIwZBD2pBcHEkBiABCwQAIwYLBgAgACQGCwoAIAAkBiABJAcLEAAjCEUEQCAAJAggASQJCwsGACAAJAsLBAAjCwsRACAABEAgABARIAAgABASCwvvBwEKfyAAQYADaiEHIAcoAgAhBQJAIAUEQCAAQfwBaiEEIAQoAgAhASABQQBKBEAgAEHwAGohCANAIAUgAkEYbGpBEGohCSAJKAIAIQEgAQRAIAgoAgAhAyAFIAJBGGxqQQ1qIQogCi0AACEGIAZB/wFxIQYgAyAGQbAQbGpBBGohAyADKAIAIQMgA0EASgRAQQAhAwNAIAEgA0ECdGohASABKAIAIQEgACABEBIgA0EBaiEDIAgoAgAhASAKLQAAIQYgBkH/AXEhBiABIAZBsBBsakEEaiEBIAEoAgAhBiAJKAIAIQEgAyAGSA0ACwsgACABEBILIAUgAkEYbGpBFGohASABKAIAIQEgACABEBIgAkEBaiECIAQoAgAhASACIAFODQMgBygCACEFDAAACwALCwsgAEHwAGohAyADKAIAIQEgAQRAIABB7ABqIQUgBSgCACECIAJBAEoEQEEAIQIDQAJAIAEgAkGwEGxqQQhqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQRxqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQSBqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQaQQaiEEIAQoAgAhBCAAIAQQEiABIAJBsBBsakGoEGohASABKAIAIQEgAUUhBCABQXxqIQFBACABIAQbIQEgACABEBIgAkEBaiECIAUoAgAhASACIAFODQAgAygCACEBDAELCyADKAIAIQELIAAgARASCyAAQfgBaiEBIAEoAgAhASAAIAEQEiAHKAIAIQEgACABEBIgAEGIA2ohAyADKAIAIQEgAQRAIABBhANqIQUgBSgCACECIAJBAEoEQEEAIQIDQCABIAJBKGxqQQRqIQEgASgCACEBIAAgARASIAJBAWohAiAFKAIAIQcgAygCACEBIAIgB0gNAAsLIAAgARASCyAAQQRqIQIgAigCACEBIAFBAEoEQEEAIQEDQCAAQZQGaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQZQHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQdgHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiABQQFqIQEgAigCACEDIAEgA0ghAyABQRBJIQUgBSADcQ0ACwtBACEBA0AgAEGgCGogAUECdGohAiACKAIAIQIgACACEBIgAEGoCGogAUECdGohAiACKAIAIQIgACACEBIgAEGwCGogAUECdGohAiACKAIAIQIgACACEBIgAEG4CGogAUECdGohAiACKAIAIQIgACACEBIgAEHACGogAUECdGohAiACKAIAIQIgACACEBIgAUEBaiEBIAFBAkcNAAsLGwAgAEHEAGohACAAKAIAIQAgAEUEQCABEF8LC3wBAX8gAEHUB2ohASABQQA2AgAgAEGAC2ohASABQQA2AgAgAEH4CmohASABQQA2AgAgAEGcCGohASABQQA2AgAgAEHVCmohASABQQA6AAAgAEH8CmohASABQQA2AgAgAEHUC2ohASABQQA2AgAgAEHYC2ohACAAQQA2AgAL8AQBB38jBiELIwZBEGokBiALQQhqIQcgC0EEaiEKIAshCCAAQSRqIQYgBiwAACEGAn8gBgR/IABBgAtqIQYgBigCACEGIAZBf0oEQCAFQQA2AgAgACABIAIQFgwCCyAAQRRqIQYgBiABNgIAIAEgAmohAiAAQRxqIQkgCSACNgIAIABB2ABqIQIgAkEANgIAIABBABAXIQkgCUUEQCAFQQA2AgBBAAwCCyAAIAcgCCAKEBghCSAJBEAgBygCACECIAgoAgAhCSAKKAIAIQggACACIAkgCBAaIQogByAKNgIAIABBBGohAiACKAIAIQggCEEASgRAQQAhAgNAIABBlAZqIAJBAnRqIQcgBygCACEHIAcgCUECdGohByAAQdQGaiACQQJ0aiEMIAwgBzYCACACQQFqIQIgAiAISA0ACwsgAwRAIAMgCDYCAAsgBSAKNgIAIABB1AZqIQAgBCAANgIAIAYoAgAhACAAIAFrDAILAkACQAJAAkACQCACKAIAIgNBIGsOBAECAgACCyACQQA2AgAgAEHUAGohAiAAEBkhAwJAIANBf0cEQANAIAIoAgAhAyADDQIgABAZIQMgA0F/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ACECIABBmAhqIQYgBigCACEHIAUgA2shCSAJIAdqIQkgAiAJSSEJIAIgB0khDSACIAdrIQJBACACIA0bIQIgAiADaiECIAIgBUohByAFIAIgBxshAiAJBEAgASACNgIAIAYoAgAhACAAIAJqIQAgBiAANgIAQQEMBgsLCyAAQfQKaiECIAIoAgAhAiADIB9rIQYgBiACaiEGIABBmAhqIQIgAiAGNgIAIAhBATYCAAwBBSAAQZgIaiECIAYNAQsMAQsgBCADayEDIAIoAgAhBCADIARqIQMgAiADNgIACyATKAIAIQIgAgRAIABByABqIQIgAigCACECIABB0ABqIQAgACgCACEAIAIgAEcEQEHTE0HEE0HkGkHnFBAECwsgASAFNgIAQQELIQAgHCQGIAALqAIBBX8gAEHoCmohBSAFKAIAIQICQCACQQBIBEBBACEABSACIAFIBEAgAUEYSgRAIABBGBAsIQIgAUFoaiEBIAAgARAsIQAgAEEYdCEAIAAgAmohACAADwsgAkUEQCAAQeQKaiECIAJBADYCAAsgAEHkCmohAwJAAkACQANAIAAQLiECIAJBf0YNASAFKAIAIQQgAiAEdCECIAMoAgAhBiAGIAJqIQIgAyACNgIAIAUgBEEIaiICNgIAIAIgAUgNAAwCAAsACyAFQX82AgBBACEADAQLIARBeEgEQEEAIQAMBAsLCyAAQeQKaiEEIAQoAgAhA0EBIAF0IQAgAEF/aiEAIAMgAHEhACADIAF2IQMgBCADNgIAIAIgAWshASAFIAE2AgALCyAAC40CAAJAIABBAEgEf0EABSAAQYCAAUgEQCAAQRBIBEAgAEGACGohACAALAAAIQAMAwsgAEGABEgEQCAAQQV2IQAgAEGACGohACAALAAAIQAgAEEFaiEABSAAQQp2IQAgAEGACGohACAALAAAIQAgAEEKaiEACwwCCyAAQYCAgAhIBH8gAEGAgCBIBH8gAEEPdiEAIABBgAhqIQAgACwAACEAIABBD2oFIABBFHYhACAAQYAIaiEAIAAsAAAhACAAQRRqCwUgAEGAgICAAkgEfyAAQRl2IQAgAEGACGohACAALAAAIQAgAEEZagUgAEEediEAIABBgAhqIQAgACwAACEAIABBHmoLCwshAAsgAAuiAQEDfyAAQdQKaiECIAIsAAAhAQJAAkAgAQ0AIABB3ApqIQEgASgCACEBIAEEQEF/IQMFIAAQLyEBIAEEQCACLAAAIQEgAQ0CQaEUQcQTQfYLQbUUEAQFQX8hAwsLDAELIAFBf2pBGHRBGHUhASACIAE6AAAgAEHsCmohASABKAIAIQIgAkEBaiECIAEgAjYCACAAEDAhACAAQf8BcSEDCyADC6wCAQd/IABB3ApqIQIgAigCACEBAkAgAUUEQCAAQdgKaiEEIAQoAgAhASABQX9GBEAgAEHQCGohASABKAIAIQEgAUF/aiEBIABB4ApqIQMgAyABNgIAIAAQMSEBIAFFBEAgAkEBNgIADAMLIABB0wpqIQEgASwAACEBIAFBAXEhASABBH8gBCgCAAUgAEEgEBUMAwshAQsgAUEBaiEHIAQgBzYCACAAQdQIaiABaiEDIAMsAAAhBiAGQf8BcSEDIAZBf0cEQCACQQE2AgAgAEHgCmohAiACIAE2AgALIABB0AhqIQEgASgCACEBIAcgAU4EQCAEQX82AgALIABB1ApqIQAgACwAACEBIAEEQEHFFEHEE0HoC0HaFBAEBSAAIAY6AAAgAyEFCwsLIAULUQEDfyAAQRRqIQMgAygCACEBIABBHGohAiACKAIAIQIgASACSQR/IAFBAWohACADIAA2AgAgASwAAAUgAEHUAGohACAAQQE2AgBBAAshACAACyABAX8gABAyIQEgAQR/IAAQMwUgAEEeEBVBAAshACAAC2ABAX8gABAwIQEgAUH/AXFBzwBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQAgAEH/AXFB0wBGIQAFQQAhAAsFQQAhAAsFQQAhAAsgAAvZAwEGfyAAEDAhAQJ/IAFB/wFxBH8gAEEfEBVBAAUgABAwIQEgAEHTCmohAiACIAE6AAAgABAjIQUgABAjIQIgABAjGiAAECMhASAAQcwIaiEDIAMgATYCACAAECMaIAAQMCEBIAFB/wFxIQEgAEHQCGohAyADIAE2AgAgAEHUCGohBCAAIAQgARAiIQEgAUUEQCAAQQoQFUEADAILIABB8ApqIQQgBEF+NgIAIAIgBXEhAQJAIAFBf0cEQCADKAIAIQEgAUEASgRAA0ACQCABQX9qIQIgAEHUCGogAmohBiAGLAAAIQYgBkF/Rw0AIAFBAUwNBCACIQEMAQsLIAQgAjYCACAAQfQKaiEBIAEgBTYCAAsLCyAAQdUKaiEBIAEsAAAhASABBEAgAygCACEDIANBAEoEf0EAIQJBACEBA0AgAEHUCGogAWohBCAELQAAIQQgBEH/AXEhBCACIARqIQIgAUEBaiEBIAEgA0gNAAsgAkEbagVBGwshASAAQShqIQIgAigCACECIAEgA2ohASABIAJqIQEgAEEsaiEDIAMgAjYCACAAQTBqIQIgAiABNgIAIABBNGohASABIAU2AgALIABB2ApqIQAgAEEANgIAQQELCyEAIAALowEBB38gAEHoCmohAyADKAIAIQECQCABQRlIBEAgAEHkCmohBCABRQRAIARBADYCAAsgAEHUCmohBSAAQdwKaiEGA0AgBigCACEBIAEEQCAFLAAAIQEgAUUNAwsgABAuIQIgAkF/Rg0CIAMoAgAhASACIAF0IQIgBCgCACEHIAcgAmohAiAEIAI2AgAgAUEIaiECIAMgAjYCACABQRFIDQALCwsLrQUBCX8gABA0IAFBIGohAiACKAIAIQUCQAJAIAVFIgNFDQAgAUGkEGohAiACKAIAIQIgAg0AQX8hAQwBCyABQQRqIQIgAigCACECAkACQCACQQhKBEAgAUGkEGohAyADKAIAIQMgAw0BBSADDQELDAELIABB5ApqIQggCCgCACEJIAkQOiEHIAFBrBBqIQIgAigCACECIAJBAUoEQCABQaQQaigCACEKQQAhAwNAIAJBAXYhBSAFIANqIQQgCiAEQQJ0aiEGIAYoAgAhBiAGIAdLIQYgAiAFayECIAMgBCAGGyEDIAUgAiAGGyECIAJBAUoNAAsFQQAhAwsgAUEXaiECIAIsAAAhAiACRQRAIAFBqBBqIQIgAigCACECIAIgA0ECdGohAiACKAIAIQMLIAFBCGohASABKAIAIQEgASADaiEBIAEtAAAhASABQf8BcSEBIABB6ApqIQIgAigCACEAIAAgAUgEf0EAIQBBfwUgACABayEAIAkgAXYhASAIIAE2AgAgAwshASACIAA2AgAMAQsgAUEXaiEDIAMsAAAhAyADBEBBgRVBxBNB6gxBjBUQBAsCQCACQQBKBEAgASgCCCEIIABB5ApqIQlBACEBA0ACQCAIIAFqIQMgAywAACEEIARB/wFxIQMgBEF/RwRAIAUgAUECdGoh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IwZBEGokBiACIQECfCAAvUIgiKdB/////wdxIgNB/MOk/wNJBHwgA0GewZryA0kEfEQAAAAAAADwPwUgAEQAAAAAAAAAABByCwUgACAAoSADQf//v/8HSw0BGgJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwgQcgwECyABKwMAIAErAwhBARBwmgwDCyABKwMAIAErAwgQcpoMAgsgASsDACABKwMIQQEQcAsLIQAgAiQGIAALywEBA38jBiECIwZBEGokBiACIQECQCAAvUIgiKdB/////wdxIgNB/MOk/wNJBEAgA0GAgMDyA08EQCAARAAAAAAAAAAAQQAQcCEACwUgA0H//7//B0sEQCAAIAChIQAMAgsCQAJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwhBARBwIQAMBQsgASsDACABKwMIEHIhAAwECyABKwMAIAErAwhBARBwmiEADAMLIAErAwAgASsDCBBymiEACwsLIAIkBiAAC5sDAwJ/AX4CfCAAvSIDQj+IpyEBAnwCfwJAIANCIIinQf////8HcSICQarGmIQESwR8IANC////////////AINCgICAgICAgPj/AFYEQCAADwsgAETvOfr+Qi6GQGQEQCAARAAAAAAAAOB/og8FIABE0rx63SsjhsBjIABEUTAt1RBJh8BjcUUNAkQAAAAAAAAAACIADwsABSACQcLc2P4DSwRAIAJBscXC/wNLDQIgAUEBcyABawwDCyACQYCAwPEDSwR8QQAhASAABSAARAAAAAAAAPA/oA8LCwwCCyAARP6CK2VHFfc/oiABQQN0QYATaisDAKCqCyEBIAAgAbciBEQAAOD+Qi7mP6KhIgAgBER2PHk17znqPaIiBaELIQQgACAEIAQgBCAEoiIAIAAgACAAIABE0KS+cmk3Zj6iRPFr0sVBvbu+oKJELN4lr2pWET+gokSTvb4WbMFmv6CiRD5VVVVVVcU/oKKhIgCiRAAAAAAAAABAIAChoyAFoaBEAAAAAAAA8D+gIQAgAUUEQCAADwsgACABEGULnwMDAn8BfgV8IAC9IgNCIIinIQECfyADQgBTIgIgAUGAgMAASXIEfyADQv///////////wCDQgBRBEBEAAAAAAAA8L8gACAAoqMPCyACRQRAIABEAAAAAAAAUEOi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mgDjqR0AXmGRAAgb5gCFmWUAoBRfAI1AaACA2P8AJ3NNAAYGMQDKVhUAyahzAHviYABrjMAAQcMSC11A+yH5PwAAAAAtRHQ+AAAAgJhG+DwAAABgUcx4OwAAAICDG/A5AAAAQCAlejgAAACAIoLjNgAAAAAd82k1AAAAAAAA4D8AAAAAAADgvwAAAAAAAPA/AAAAAAAA+D8AQagTCwgG0M9D6/1MPgBBuxMLigZAA7jiP09nZ1MuL3N0Yl92b3JiaXMuYwBmLT5hbGxvYy5hbGxvY19idWZmZXJfbGVuZ3RoX2luX2J5dGVzID09IGYtPnRlbXBfb2Zmc2V0AHZvcmJpc19kZWNvZGVfaW5pdGlhbABmLT5ieXRlc19pbl9zZWcgPiAwAGdldDhfcGFja2V0X3JhdwBmLT5ieXRlc19pbl9zZWcgPT0gMABuZXh0X3NlZ21lbnQAdm9yYmlzX2RlY29kZV9wYWNrZXRfcmVzdAAhYy0+c3BhcnNlAGNvZGVib29rX2RlY29kZV9zY2FsYXJfcmF3ACFjLT5zcGFyc2UgfHwgeiA8IGMtPnNvcnRlZF9lbnRyaWVzAGNvZGVib29rX2RlY29kZV9kZWludGVybGVhdmVfcmVwZWF0AHogPCBjLT5zb3J0ZWRfZW50cmllcwBjb2RlYm9va19kZWNvZGVfc3RhcnQAKG4gJiAzKSA9PSAwAGltZGN0X3N0ZXAzX2l0ZXIwX2xvb3AAMABnZXRfd2luZG93AGYtPnRlbXBfb2Zmc2V0ID09IGYtPmFsbG9jLmFsbG9jX2J1ZmZlcl9sZW5ndGhfaW5fYnl0ZXMAc3RhcnRfZGVjb2RlcgB2b3JiaXNjLT5zb3J0ZWRfZW50cmllcyA9PSAwAGNvbXB1dGVfY29kZXdvcmRzAHogPj0gMCAmJiB6IDwgMzIAbGVuW2ldID49IDAgJiYgbGVuW2ldIDwgMzIAYXZhaWxhYmxlW3ldID09IDAAayA9PSBjLT5zb3J0ZWRfZW50cmllcwBjb21wdXRlX3NvcnRlZF9odWZmbWFuAGMtPnNvcnRlZF9jb2Rld29yZHNbeF0gPT0gY29kZQBsZW4gIT0gTk9fQ09ERQBpbmNsdWRlX2luX3NvcnQAcG93KChmbG9hdCkgcisxLCBkaW0pID4gZW50cmllcwBsb29rdXAxX3ZhbHVlcwAoaW50KSBmbG9vcihwb3coKGZsb2F0KSByLCBkaW0pKSA8PSBlbnRyaWVzAOoPBG5hbWUB4g9+AAVhYm9ydAENZW5sYXJnZU1lbW9yeQIOZ2V0VG90YWxNZW1vcnkDF2Fib3J0T25DYW5ub3RHcm93TWVtb3J5BA5fX19hc3NlcnRfZmFpbAULX19fc2V0RXJyTm8GBl9hYm9ydAcWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwgQX19ncm93V2FzbU1lbW9yeQkKc3RhY2tBbGxvYwoJc3RhY2tTYXZlCwxzdGFja1Jlc3RvcmUME2VzdGFibGlzaFN0YWNrU3BhY2UNCHNldFRocmV3DgtzZXRUZW1wUmV0MA8LZ2V0VGVtcFJldDAQEV9zdGJfdm9yYmlzX2Nsb3NlEQ5fdm9yYmlzX2RlaW5pdBILX3NldHVwX2ZyZWUTGl9zdGJfdm9yYmlzX2ZsdXNoX3B1c2hkYXRhFCFfc3RiX3ZvcmJpc19kZWNvZGVfZnJhbWVfcHVzaGRhdGEVBl9lcnJvchYgX3ZvcmJpc19zZWFyY2hfZm9yX3BhZ2VfcHVzaGRhdGEXGF9pc193aG9sZV9wYWNrZXRfcHJlc2VudBgVX3ZvcmJpc19kZWNvZGVfcGFja2V0GQxfZ2V0OF9wYWNrZXQaFF92b3JiaXNfZmluaXNoX2ZyYW1lGxlfc3RiX3ZvcmJpc19vcGVuX3B1c2hkYXRhHAxfdm9yYmlzX2luaXQdDl9zdGFydF9kZWNvZGVyHg1fdm9yYmlzX2FsbG9jHxtfc3RiX3ZvcmJpc19nZXRfZmlsZV9vZmZzZXQgE19tYXliZV9zdGFydF9wYWNrZXQhDV9mbHVzaF9wYWNrZXQiBV9nZXRuIwZfZ2V0MzIkE19zdGJfdm9yYmlzX2pzX29wZW4lFF9zdGJfdm9yYmlzX2pzX2Nsb3NlJhdfc3RiX3ZvcmJpc19qc19jaGFubmVscycaX3N0Yl92b3JiaXNfanNfc2FtcGxlX3JhdGUoFV9zdGJfdm9yYmlzX2pzX2RlY29kZSkNX2NyYzMyX3VwZGF0ZSoWX3ZvcmJpc19kZWNvZGVfaW5pdGlhbCsaX3ZvcmJpc19kZWNvZGVfcGFja2V0X3Jlc3QsCV9nZXRfYml0cy0FX2lsb2cuEF9nZXQ4X3BhY2tldF9yYXcvDV9uZXh0X3NlZ21lbnQwBV9nZXQ4MQtfc3RhcnRfcGFnZTIQX2NhcHR1cmVfcGF0dGVybjMdX3N0YXJ0X3BhZ2Vfbm9fY2FwdHVyZXBhdHRlcm40DV9wcmVwX2h1ZmZtYW41G19jb2RlYm9va19kZWNvZGVfc2NhbGFyX3JhdzYOX3ByZWRpY3RfcG9pbnQ3D19kZWNvZGVfcmVzaWR1ZTgJX2RvX2Zsb29yOQ1faW52ZXJzZV9tZGN0OgxfYml0X3JldmVyc2U7EV9tYWtlX2Jsb2NrX2FycmF5PBJfc2V0dXBfdGVtcF9tYWxsb2M9JF9jb2RlYm9va19kZWNvZGVfZGVpbnRlcmxlYXZlX3JlcGVhdD4PX3Jlc2lkdWVfZGVjb2RlPxVfY29kZWJvb2tfZGVjb2RlX3N0ZXBAEF9jb2RlYm9va19kZWNvZGVBFl9jb2RlYm9va19kZWNvZGVfc3RhcnRCCl9kcmF3X2xpbmVDF19pbWRjdF9zdGVwM19pdGVyMF9sb29wRBlfaW1kY3Rfc3RlcDNfaW5uZXJfcl9sb29wRRlfaW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wRh9faW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wX2xkNjU0RwhfaXRlcl81NEgLX2dldF93aW5kb3dJEF92b3JiaXNfdmFsaWRhdGVKDV9zdGFydF9wYWNrZXRLBV9za2lwTAtfY3JjMzJfaW5pdE0NX3NldHVwX21hbGxvY04QX3NldHVwX3RlbXBfZnJlZU8SX2NvbXB1dGVfY29kZXdvcmRzUBdfY29tcHV0ZV9zb3J0ZWRfaHVmZm1hblEcX2NvbXB1dGVfYWNjZWxlcmF0ZWRfaHVmZm1hblIPX2Zsb2F0MzJfdW5wYWNrUw9fbG9va3VwMV92YWx1ZXNUDl9wb2ludF9jb21wYXJlVQpfbmVpZ2hib3JzVg9faW5pdF9ibG9ja3NpemVXCl9hZGRfZW50cnlYEF9pbmNsdWRlX2luX3NvcnRZD191aW50MzJfY29tcGFyZVoYX2NvbXB1dGVfdHdpZGRsZV9mYWN0b3JzWw9fY29tcHV0ZV93aW5kb3dcE19jb21wdXRlX2JpdHJldmVyc2VdB19zcXVhcmVeB19tYWxsb2NfBV9mcmVlYAhfcmVhbGxvY2ESX3RyeV9yZWFsbG9jX2NodW5rYg5fZGlzcG9zZV9jaHVua2MRX19fZXJybm9fbG9jYXRpb25kB19tZW1jbXBlB19zY2FsYm5mBl9xc29ydGcFX3NpZnRoBF9zaHJpCF90cmlua2xlagRfc2hsawVfcG50emwIX2FfY3R6X2xtBl9jeWNsZW4LX19fcmVtX3BpbzJvEV9fX3JlbV9waW8yX2xhcmdlcAZfX19zaW5xBl9sZGV4cHIGX19fY29zcwRfY29zdARfc2ludQRfZXhwdgRfbG9ndwRfcG93eAtydW5Qb3N0U2V0c3kHX21lbWNweXoHX21lbXNldHsFX3Nicmt8C2R5bkNhbGxfaWlpfQJiMA=="),function(l){return l.charCodeAt(0)});var C=C!==void 0?C:{},L={};for(e in C)C.hasOwnProperty(e)&&(L[e]=C[e]);C.arguments=[],C.thisProgram="./this.program",C.quit=function(l,d){throw d},C.preRun=[],C.postRun=[];var J=!1,EA=!1,tA=!1,T=!1;J=typeof window=="object",EA=typeof importScripts=="function",tA=typeof process=="object"&&typeof Rs=="function"&&!J&&!EA,T=!J&&!tA&&!EA;var AA="";function BA(l){return C.locateFile?C.locateFile(l,AA):AA+l}tA?(AA=__dirname+"/",C.read=function(d,u){var k;return A||(A=void 0),t||(t=void 0),d=t.normalize(d),k=A.readFileSync(d),u?k:k.toString()},C.readBinary=function(d){var u=C.read(d,!0);return u.buffer||(u=new Uint8Array(u)),zA(u.buffer),u},process.argv.length>1&&(C.thisProgram=process.argv[1].replace(/\\/g,"/")),C.arguments=process.argv.slice(2),typeof module<"u",process.on("uncaughtException",function(l){if(!(l instanceof kt))throw l}),process.on("unhandledRejection",function(l,d){process.exit(1)}),C.quit=function(l){process.exit(l)},C.inspect=function(){return"[Emscripten Module object]"}):T?(typeof read<"u"&&(C.read=function(d){return read(d)}),C.readBinary=function(d){var u;return typeof readbuffer=="function"?new Uint8Array(readbuffer(d)):(zA(typeof(u=read(d,"binary"))=="object"),u)},typeof scriptArgs<"u"?C.arguments=scriptArgs:typeof arguments<"u"&&(C.arguments=arguments),typeof quit=="function"&&(C.quit=function(l){quit(l)})):(J||EA)&&(J?document.currentScript&&(AA=document.currentScript.src):AA=self.location.href,AA=AA.indexOf("blob:")!==0?AA.split("/").slice(0,-1).join("/")+"/":"",C.read=function(d){var u=new XMLHttpRequest;return u.open("GET",d,!1),u.send(null),u.responseText},EA&&(C.readBinary=function(d){var u=new XMLHttpRequest;return u.open("GET",d,!1),u.responseType="arraybuffer",u.send(null),new Uint8Array(u.response)}),C.readAsync=function(d,u,k){var q=new XMLHttpRequest;q.open("GET",d,!0),q.responseType="arraybuffer",q.onload=function(){if(q.status==200||q.status==0&&q.response){u(q.response);return}k()},q.onerror=k,q.send(null)},C.setWindowTitle=function(l){document.title=l});var sA=C.print||(typeof console<"u"?console.log.bind(console):typeof print<"u"?print:null),oA=C.printErr||(typeof printErr<"u"?printErr:typeof console<"u"&&console.warn.bind(console)||sA);for(e in L)L.hasOwnProperty(e)&&(C[e]=L[e]);function CA(l){var d=h;return h=h+l+15&-16,d}function v(l){var d=i[G>>2],u=d+l+15&-16;return i[G>>2]=u,u>=NA&&!yt()?(i[G>>2]=d,0):d}function K(l,d){return d||(d=16),l=Math.ceil(l/d)*d}function W(l){switch(l){case"i1":case"i8":return 1;case"i16":return 2;case"i32":case"float":return 4;case"i64":case"double":return 8;default:if(l[l.length-1]==="*")return 4;if(l[0]!=="i")return 0;var d=parseInt(l.substr(1));return zA(d%8==0),d/8}}function O(l){O.shown||(O.shown={}),O.shown[l]||(O.shown[l]=1,oA(l))}L=void 0;var rA={"f64-rem":function(l,d){return l%d},debugger:function(){}},JA=[];function Ce(l,d){for(var u=0,k=u;k<u+0;k++)if(!JA[k])return JA[k]=l,1+k;throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS."}function le(l){JA[l-1]=null}var Qe={};function $e(l,d){if(l){zA(d),Qe[d]||(Qe[d]={});var u=Qe[d];return u[l]||(d.length===1?u[l]=function(){return aA(d,l)}:d.length===2?u[l]=function(q){return aA(d,l,[q])}:u[l]=function(){return aA(d,l,Array.prototype.slice.call(arguments))}),u[l]}}function ye(l,d,u){return u?+(l>>>0)+4294967296*+(d>>>0):+(l>>>0)+4294967296*+(0|d)}function aA(l,d,u){return u&&u.length?C["dynCall_"+l].apply(null,[d].concat(u)):C["dynCall_"+l].call(null,d)}var lA=0,de=0;function zA(l,d){l||Fe("Assertion failed: "+d)}function Ge(l){var d=C["_"+l];return zA(d,"Cannot call unknown function "+l+", make sure it is exported"),d}var xe={stackSave:function(){Tn()},stackRestore:function(){Un()},arrayToC:function(l){var d,u,k=Zt(l.length);return d=l,u=k,s.set(d,u),k},stringToC:function(l){var d=0;if(l!=null&&l!==0){var u=(l.length<<2)+1;d=Zt(u),mt(l,d,u)}return d}},ut={string:xe.stringToC,array:xe.arrayToC};function At(l,d,u,k,q){var iA=Ge(l),gA=[],Z=0;if(k)for(var TA=0;TA<k.length;TA++){var fA=ut[u[TA]];fA?(Z===0&&(Z=Tn()),gA[TA]=fA(k[TA])):gA[TA]=k[TA]}var mA,QA=iA.apply(null,gA);return QA=(mA=QA,d==="string"?Me(mA):d==="boolean"?!!mA:mA),Z!==0&&Un(Z),QA}function ft(l,d,u,k){switch((u=u||"i8").charAt(u.length-1)==="*"&&(u="i32"),u){case"i1":case"i8":s[l>>0]=d;break;case"i16":r[l>>1]=d;break;case"i32":i[l>>2]=d;break;case"i64":tempI64=[d>>>0,+ni(tempDouble=d)>=1?tempDouble>0?(0|oi(+Ss(tempDouble/4294967296),4294967295))>>>0:~~+si((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0],i[l>>2]=tempI64[0],i[l+4>>2]=tempI64[1];break;case"float":c[l>>2]=d;break;case"double":B[l>>3]=d;break;default:Fe("invalid type for setValue: "+u)}}function wn(l,d,u){switch((d=d||"i8").charAt(d.length-1)==="*"&&(d="i32"),d){case"i1":case"i8":return s[l>>0];case"i16":return r[l>>1];case"i32":case"i64":return i[l>>2];case"float":return c[l>>2];case"double":return B[l>>3];default:Fe("invalid type for getValue: "+d)}return null}function Rn(l,d,u,k){typeof l=="number"?(iA=!0,gA=l):(iA=!1,gA=l.length);var q=typeof d=="string"?d:null;if(Z=u==4?k:[typeof Pt=="function"?Pt:CA,Zt,CA,v][u===void 0?2:u](Math.max(gA,q?1:d.length)),iA){for(k=Z,zA((3&Z)==0),TA=Z+(-4&gA);k<TA;k+=4)i[k>>2]=0;for(TA=Z+gA;k<TA;)s[k++>>0]=0;return Z}if(q==="i8")return l.subarray||l.slice?o.set(l,Z):o.set(new Uint8Array(l),Z),Z;for(var iA,gA,Z,TA,fA,mA,QA,nA=0;nA<gA;){var PA=l[nA];if((fA=q||d[nA])===0){nA++;continue}fA=="i64"&&(fA="i32"),ft(Z+nA,PA,fA),QA!==fA&&(mA=W(fA),QA=fA),nA+=mA}return Z}function et(l){return m?bn?Pt(l):v(l):CA(l)}function Me(l,d){if(d===0||!l)return"";for(var u,k,q,iA=0,gA=0;iA|=k=o[l+gA>>0],(k!=0||d)&&(gA++,!d||gA!=d););d||(d=gA);var Z="";if(iA<128){for(;d>0;)q=String.fromCharCode.apply(String,o.subarray(l,l+Math.min(d,1024))),Z=Z?Z+q:q,l+=1024,d-=1024;return Z}return u=l,function(fA,mA){for(var QA=mA;fA[QA];)++QA;if(QA-mA>16&&fA.subarray&&Yt)return Yt.decode(fA.subarray(mA,QA));for(var nA,PA,ne,se,oe,Ze,re="";;){if(!(nA=fA[mA++]))return re;if(!(128&nA)){re+=String.fromCharCode(nA);continue}if(PA=63&fA[mA++],(224&nA)==192){re+=String.fromCharCode((31&nA)<<6|PA);continue}if(ne=63&fA[mA++],(240&nA)==224?nA=(15&nA)<<12|PA<<6|ne:(se=63&fA[mA++],(248&nA)==240?nA=(7&nA)<<18|PA<<12|ne<<6|se:(oe=63&fA[mA++],nA=(252&nA)==248?(3&nA)<<24|PA<<18|ne<<12|se<<6|oe:(1&nA)<<30|PA<<24|ne<<18|se<<12|oe<<6|(Ze=63&fA[mA++]))),nA<65536)re+=String.fromCharCode(nA);else{var Ft=nA-65536;re+=String.fromCharCode(55296|Ft>>10,56320|1023&Ft)}}}(o,u)}function _A(l){for(var d="";;){var u=s[l++>>0];if(!u)return d;d+=String.fromCharCode(u)}}function Gn(l,d){return function(k,q,iA){for(var gA=0;gA<k.length;++gA)s[q++>>0]=k.charCodeAt(gA);iA||(s[q>>0]=0)}(l,d,!1)}var Yt=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function tt(l,d,u,k){if(!(k>0))return 0;for(var q=u,iA=u+k-1,gA=0;gA<l.length;++gA){var Z=l.charCodeAt(gA);if(Z>=55296&&Z<=57343&&(Z=65536+((1023&Z)<<10)|1023&l.charCodeAt(++gA)),Z<=127){if(u>=iA)break;d[u++]=Z}else if(Z<=2047){if(u+1>=iA)break;d[u++]=192|Z>>6,d[u++]=128|63&Z}else if(Z<=65535){if(u+2>=iA)break;d[u++]=224|Z>>12,d[u++]=128|Z>>6&63,d[u++]=128|63&Z}else if(Z<=2097151){if(u+3>=iA)break;d[u++]=240|Z>>18,d[u++]=128|Z>>12&63,d[u++]=128|Z>>6&63,d[u++]=128|63&Z}else if(Z<=67108863){if(u+4>=iA)break;d[u++]=248|Z>>24,d[u++]=128|Z>>18&63,d[u++]=128|Z>>12&63,d[u++]=128|Z>>6&63,d[u++]=128|63&Z}else{if(u+5>=iA)break;d[u++]=252|Z>>30,d[u++]=128|Z>>24&63,d[u++]=128|Z>>18&63,d[u++]=128|Z>>12&63,d[u++]=128|Z>>6&63,d[u++]=128|63&Z}}return d[u]=0,u-q}function mt(l,d,u){return tt(l,o,d,u)}function KA(l){for(var d=0,u=0;u<l.length;++u){var k=l.charCodeAt(u);k>=55296&&k<=57343&&(k=65536+((1023&k)<<10)|1023&l.charCodeAt(++u)),k<=127?++d:k<=2047?d+=2:k<=65535?d+=3:k<=2097151?d+=4:k<=67108863?d+=5:d+=6}return d}var Se=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function pt(l){for(var d=l,u=d>>1;r[u];)++u;if((d=u<<1)-l>32&&Se)return Se.decode(o.subarray(l,d));for(var k=0,q="";;){var iA=r[l+2*k>>1];if(iA==0)return q;++k,q+=String.fromCharCode(iA)}}function xn(l,d,u){if(u===void 0&&(u=2147483647),u<2)return 0;for(var k=d,q=(u-=2)<2*l.length?u/2:l.length,iA=0;iA<q;++iA){var gA=l.charCodeAt(iA);r[d>>1]=gA,d+=2}return r[d>>1]=0,d-k}function De(l){return 2*l.length}function Jt(l){for(var d=0,u="";;){var k=i[l+4*d>>2];if(k==0)return u;if(++d,k>=65536){var q=k-65536;u+=String.fromCharCode(55296|q>>10,56320|1023&q)}else u+=String.fromCharCode(k)}}function Kt(l,d,u){if(u===void 0&&(u=2147483647),u<4)return 0;for(var k=d,q=k+u-4,iA=0;iA<l.length;++iA){var gA=l.charCodeAt(iA);if(gA>=55296&&gA<=57343&&(gA=65536+((1023&gA)<<10)|1023&l.charCodeAt(++iA)),i[d>>2]=gA,(d+=4)+4>q)break}return i[d>>2]=0,d-k}function us(l){for(var d=0,u=0;u<l.length;++u){var k=l.charCodeAt(u);k>=55296&&k<=57343&&++u,d+=4}return d}function fs(l){var d=KA(l)+1,u=Pt(d);return u&&tt(l,s,u,d),u}function qt(l){var d=KA(l)+1,u=Zt(d);return tt(l,s,u,d),u}function Oe(l){return l}function Mn(){var l,d=function(){var k=Error();if(!k.stack){try{throw Error(0)}catch(q){k=q}if(!k.stack)return"(no stack trace available)"}return k.stack.toString()}();return C.extraStackTrace&&(d+=`
14
+ `+C.extraStackTrace()),(l=d).replace(/__Z[\w\d_]+/g,function(u){var k,q=k=u;return u===q?u:u+" ["+q+"]"})}function ke(l,d){return l%d>0&&(l+=d-l%d),l}function nt(l){C.buffer=n=l}function Ve(){C.HEAP8=s=new Int8Array(n),C.HEAP16=r=new Int16Array(n),C.HEAP32=i=new Int32Array(n),C.HEAPU8=o=new Uint8Array(n),C.HEAPU16=g=new Uint16Array(n),C.HEAPU32=E=new Uint32Array(n),C.HEAPF32=c=new Float32Array(n),C.HEAPF64=B=new Float64Array(n)}function yt(){var l=C.usingWasm?65536:16777216,d=2147483648-l;if(i[G>>2]>d)return!1;var u=NA;for(NA=Math.max(NA,16777216);NA<i[G>>2];)NA=NA<=536870912?ke(2*NA,l):Math.min(ke((3*NA+2147483648)/4,l),d);var k=C.reallocBuffer(NA);return k&&k.byteLength==NA?(nt(k),Ve(),!0):(NA=u,!1)}Q=h=f=S=x=D=G=0,m=!1,C.reallocBuffer||(C.reallocBuffer=function(l){try{if(ArrayBuffer.transfer)d=ArrayBuffer.transfer(n,l);else{var d,u=s;d=new ArrayBuffer(l),new Int8Array(d).set(u)}}catch{return!1}return!!ri(d)&&d});try{(M=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get))(new ArrayBuffer(4))}catch{M=function(d){return d.byteLength}}var st=C.TOTAL_STACK||5242880,NA=C.TOTAL_MEMORY||16777216;function Ot(){return NA}function Ne(l){for(;l.length>0;){var d=l.shift();if(typeof d=="function"){d();continue}var u=d.func;typeof u=="number"?d.arg===void 0?C.dynCall_v(u):C.dynCall_vi(u,d.arg):u(d.arg===void 0?null:d.arg)}}NA<st&&oA("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+NA+"! (TOTAL_STACK="+st+")"),C.buffer?n=C.buffer:(typeof WebAssembly=="object"&&typeof WebAssembly.Memory=="function"?(C.wasmMemory=new WebAssembly.Memory({initial:NA/65536}),n=C.wasmMemory.buffer):n=new ArrayBuffer(NA),C.buffer=n),Ve();var St=[],Nn=[],ms=[],ps=[],ys=[],bn=!1,Ai=!1;function ei(l){St.unshift(l)}function bi(l){Nn.unshift(l)}function Li(l){ms.unshift(l)}function Ui(l){ps.unshift(l)}function ti(l){ys.unshift(l)}function Ti(l,d,u){var k,q;O("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!"),u&&(k=s[q=d+KA(l)]),mt(l,d,1/0),u&&(s[q]=k)}function vi(l,d,u){return l>=0?l:d<=32?2*Math.abs(1<<d-1)+l:Math.pow(2,d)+l}function Hi(l,d,u){if(l<=0)return l;var k=d<=32?Math.abs(1<<d-1):Math.pow(2,d-1);return l>=k&&(d<=32||l>k)&&(l=-2*k+l),l}var ni=Math.abs,si=Math.ceil,Ss=Math.floor,oi=Math.min,Pe=0,Ln=null,Dt=null;function Yi(l){return l}C.preloadedImages={},C.preloadedAudios={};var Ds="data:application/octet-stream;base64,";function Vt(l){return String.prototype.startsWith?l.startsWith(Ds):l.indexOf(Ds)===0}(function(){var d="main.wast",u="main.wasm",k="main.temp.asm.js";Vt(d)||(d=BA(d)),Vt(u)||(u=BA(u)),Vt(k)||(k=BA(k));var q={global:null,env:null,asm2wasm:rA,parent:C},iA=null;function gA(QA){return QA}function Z(){try{if(C.wasmBinary)return new Uint8Array(C.wasmBinary);if(C.readBinary)return C.readBinary(u);throw"both async and sync fetching of the wasm failed"}catch(QA){Fe(QA)}}C.asmPreload=C.asm;var TA=C.reallocBuffer,fA=function(QA){QA=ke(QA,C.usingWasm?65536:16777216);var nA=C.buffer.byteLength;if(C.usingWasm)try{var PA=C.wasmMemory.grow((QA-nA)/65536);return PA!==-1?C.buffer=C.wasmMemory.buffer:null}catch{return null}};C.reallocBuffer=function(QA){return mA==="asmjs"?TA(QA):fA(QA)};var mA="";C.asm=function(QA,nA,PA){var ne;if(!(nA=ne=nA).table){var se,oe=C.wasmTableSize;oe===void 0&&(oe=1024);var Ze=C.wasmMaxTableSize;typeof WebAssembly=="object"&&typeof WebAssembly.Table=="function"?Ze!==void 0?nA.table=new WebAssembly.Table({initial:oe,maximum:Ze,element:"anyfunc"}):nA.table=new WebAssembly.Table({initial:oe,element:"anyfunc"}):nA.table=Array(oe),C.wasmTable=nA.table}return nA.memoryBase||(nA.memoryBase=C.STATIC_BASE),nA.tableBase||(nA.tableBase=0),se=function(Ft,ot,Hn){if(typeof WebAssembly!="object")return oA("no native wasm support detected"),!1;if(!(C.wasmMemory instanceof WebAssembly.Memory))return oA("no native wasm Memory in use"),!1;function Xt(ue,fe){if((iA=ue.exports).memory){var wt,Yn,ws;wt=iA.memory,Yn=C.buffer,wt.byteLength<Yn.byteLength&&oA("the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here"),ws=new Int8Array(Yn),new Int8Array(wt).set(ws),nt(wt),Ve()}C.asm=iA,C.usingWasm=!0,function(Zi){if(Pe--,C.monitorRunDependencies&&C.monitorRunDependencies(Pe),Pe==0&&(Ln!==null&&(clearInterval(Ln),Ln=null),Dt)){var ii=Dt;Dt=null,ii()}}("wasm-instantiate")}if(ot.memory=C.wasmMemory,q.global={NaN:NaN,Infinity:1/0},q["global.Math"]=Math,q.env=ot,Pe++,C.monitorRunDependencies&&C.monitorRunDependencies(Pe),C.instantiateWasm)try{return C.instantiateWasm(q,Xt)}catch(ue){return oA("Module.instantiateWasm callback failed with error: "+ue),!1}function rt(ue){Xt(ue.instance,ue.module)}function Fs(ue){(!C.wasmBinary&&(J||EA)&&typeof fetch=="function"?fetch(u,{credentials:"same-origin"}).then(function(fe){if(!fe.ok)throw"failed to load wasm binary file at '"+u+"'";return fe.arrayBuffer()}).catch(function(){return Z()}):new Promise(function(fe,wt){fe(Z())})).then(function(fe){return WebAssembly.instantiate(fe,q)}).then(ue).catch(function(fe){oA("failed to asynchronously prepare wasm: "+fe),Fe(fe)})}return C.wasmBinary||typeof WebAssembly.instantiateStreaming!="function"||Vt(u)||typeof fetch!="function"?Fs(rt):WebAssembly.instantiateStreaming(fetch(u,{credentials:"same-origin"}),q).then(rt).catch(function(ue){oA("wasm streaming compile failed: "+ue),oA("falling back to ArrayBuffer instantiation"),Fs(rt)}),{}}(QA,nA,PA),zA(se,"no binaryen method succeeded."),se},C.asm})(),h=(Q=1024)+4816,Nn.push(),C.STATIC_BASE=Q,C.STATIC_BUMP=4816;var jA=h;function Ji(l){s[jA]=s[l],s[jA+1]=s[l+1],s[jA+2]=s[l+2],s[jA+3]=s[l+3]}function Ki(l){s[jA]=s[l],s[jA+1]=s[l+1],s[jA+2]=s[l+2],s[jA+3]=s[l+3],s[jA+4]=s[l+4],s[jA+5]=s[l+5],s[jA+6]=s[l+6],s[jA+7]=s[l+7]}function qi(l,d,u){var k=u>0?u:KA(l)+1,q=Array(k),iA=tt(l,q,0,q.length);return d&&(q.length=iA),q}function Oi(l){for(var d=[],u=0;u<l.length;u++){var k=l[u];k>255&&(k&=255),d.push(String.fromCharCode(k))}return d.join("")}h+=16,G=CA(4),x=(f=S=K(h))+st,D=K(x),i[G>>2]=D,m=!0,C.wasmTableSize=4,C.wasmMaxTableSize=4,C.asmGlobalArg={},C.asmLibraryArg={abort:Fe,assert:zA,enlargeMemory:yt,getTotalMemory:Ot,abortOnCannotGrowMemory:function(){Fe("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+NA+", (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(d,u,k){var q=Tn();try{return C.dynCall_iii(d,u,k)}catch(iA){if(Un(q),typeof iA!="number"&&iA!=="longjmp")throw iA;C.setThrew(1,0)}},___assert_fail:function(d,u,k,q){Fe("Assertion failed: "+Me(d)+", at: "+[u?Me(u):"unknown filename",k,q?Me(q):"unknown function"])},___setErrNo:function(d){return C.___errno_location&&(i[C.___errno_location()>>2]=d),d},_abort:function(){C.abort()},_emscripten_memcpy_big:function(d,u,k){return o.set(o.subarray(u,u+k),d),d},_llvm_floor_f64:Ss,DYNAMICTOP_PTR:G,tempDoublePtr:jA,ABORT:lA,STACKTOP:S,STACK_MAX:x};var ks=C.asm(C.asmGlobalArg,C.asmLibraryArg,n);C.asm=ks,C.___errno_location=function(){return C.asm.___errno_location.apply(null,arguments)};var ri=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 Pt=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 Zt=C.stackAlloc=function(){return C.asm.stackAlloc.apply(null,arguments)},Un=C.stackRestore=function(){return C.asm.stackRestore.apply(null,arguments)},Tn=C.stackSave=function(){return C.asm.stackSave.apply(null,arguments)};function kt(l){this.name="ExitStatus",this.message="Program terminated with exit("+l+")",this.status=l}function vn(l){l=l||C.arguments,!(Pe>0)&&(function(){if(C.preRun)for(typeof C.preRun=="function"&&(C.preRun=[C.preRun]);C.preRun.length;)ei(C.preRun.shift());Ne(St)}(),!(Pe>0)&&(C.calledRun||(C.setStatus?(C.setStatus("Running..."),setTimeout(function(){setTimeout(function(){C.setStatus("")},1),d()},1)):d())));function d(){!C.calledRun&&(C.calledRun=!0,lA||(bn||(bn=!0,Ne(Nn)),Ne(ms),C.onRuntimeInitialized&&C.onRuntimeInitialized(),function(){if(C.postRun)for(typeof C.postRun=="function"&&(C.postRun=[C.postRun]);C.postRun.length;)ti(C.postRun.shift());Ne(ys)}()))}}function Vi(l,d){(!d||!C.noExitRuntime||l!==0)&&(C.noExitRuntime||(lA=!0,de=l,S=R,Ne(ps),Ai=!0,C.onExit&&C.onExit(l)),C.quit(l,new kt(l)))}function Fe(l){throw C.onAbort&&C.onAbort(l),l!==void 0?(sA(l),oA(l),l=JSON.stringify(l)):l="",lA=!0,de=1,"abort("+l+"). Build with -s ASSERTIONS=1 for more info."}if(C.dynCall_iii=function(){return C.asm.dynCall_iii.apply(null,arguments)},C.asm=ks,C.ccall=At,C.cwrap=function(d,u,k,q){var iA=(k=k||[]).every(function(gA){return gA==="number"});return u!=="string"&&iA&&!q?Ge(d):function(){return At(d,u,k,arguments,q)}},kt.prototype=Error(),kt.prototype.constructor=kt,Dt=function l(){C.calledRun||vn(),C.calledRun||(Dt=l)},C.run=vn,C.abort=Fe,C.preInit)for(typeof C.preInit=="function"&&(C.preInit=[C.preInit]);C.preInit.length>0;)C.preInit.pop()();C.noExitRuntime=!0,vn(),C.onRuntimeInitialized=()=>{mo=!0,po()},pe.decode=function(l){return function(u){if(!mo)throw Error("SF3 decoder has not been initialized yet. Did you await synth.isReady?");var k={};function q(ot){return new Int32Array(C.HEAPU8.buffer,ot,1)[0]}function iA(ot,Hn){var Xt=new ArrayBuffer(Hn*Float32Array.BYTES_PER_ELEMENT),rt=new Float32Array(Xt);return rt.set(new Float32Array(C.HEAPU8.buffer,ot,Hn)),rt}k.open=C.cwrap("stb_vorbis_js_open","number",[]),k.close=C.cwrap("stb_vorbis_js_close","void",["number"]),k.channels=C.cwrap("stb_vorbis_js_channels","number",["number"]),k.sampleRate=C.cwrap("stb_vorbis_js_sample_rate","number",["number"]),k.decode=C.cwrap("stb_vorbis_js_decode","number",["number","number","number","number","number"]);var gA,Z,TA,fA,mA=k.open(),QA=(gA=u,Z=u.byteLength,TA=C._malloc(Z),(fA=new Uint8Array(C.HEAPU8.buffer,TA,Z)).set(new Uint8Array(gA,0,Z)),fA),nA=C._malloc(4),PA=C._malloc(4),ne=k.decode(mA,QA.byteOffset,QA.byteLength,nA,PA);if(C._free(QA.byteOffset),ne<0)throw k.close(mA),C._free(nA),Error("stbvorbis decode failed: "+ne);for(var se=k.channels(mA),oe=Array(se),Ze=new Int32Array(C.HEAPU32.buffer,q(nA),se),re=0;re<se;re++)oe[re]=iA(Ze[re],ne),C._free(Ze[re]);var Ft=k.sampleRate(mA);return k.close(mA),C._free(q(nA)),C._free(nA),{data:oe,sampleRate:Ft,eof:!0,error:null}}(l)}})();var jn=new Float32Array(30001);for(let e=0;e<jn.length;e++){let A=-15e3+e;jn[e]=Math.pow(2,A/1200)}function Ee(e){return e<=-32767?0:jn[e- -15e3]}var gn=-2e4,yo=16500,$n=new Float32Array(yo-gn+1);for(let e=0;e<$n.length;e++){let A=gn+e;$n[e]=440*Math.pow(2,(A-6900)/1200)}function xt(e){return e<gn||e>yo?440*Math.pow(2,(e-6900)/1200):$n[~~e-gn]}var es=-1660,li=1600,As=new Float32Array((li-es)*100+1);for(let e=0;e<As.length;e++){let A=(es*100+e)/100;As[e]=Math.pow(10,-A/20)}function ge(e){return As[Math.floor((e-es)*100)]}var So=.01,te=100,ts=90,Qi=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>=ts}static startRelease(A){A.volumeEnvelope.releaseStartTimeSamples=A.volumeEnvelope.currentSampleTime,A.volumeEnvelope.currentReleaseGain=ge(A.volumeEnvelope.currentAttenuationDb),e.recalculate(A)}static recalculate(A){let t=A.volumeEnvelope,n=E=>Math.max(0,Math.floor(Ee(E)*t.sampleRate));t.attenuationTarget=Math.max(0,Math.min(A.modulatedGenerators[a.initialAttenuation],1440))/10,t.attenuationTargetGain=ge(t.attenuationTarget),t.sustainDbRelative=Math.min(te,A.modulatedGenerators[a.sustainVolEnv]/10);let s=Math.min(te,t.sustainDbRelative);t.attackDuration=n(A.modulatedGenerators[a.attackVolEnv]);let o=A.modulatedGenerators[a.decayVolEnv],r=(60-A.targetKey)*A.modulatedGenerators[a.keyNumToVolEnvDecay],g=s/te;t.decayDuration=n(o+r)*g,t.releaseDuration=n(A.modulatedGenerators[a.releaseVolEnv]),t.delayEnd=n(A.modulatedGenerators[a.delayVolEnv]),t.attackEnd=t.attackDuration+t.delayEnd;let i=(60-A.targetKey)*A.modulatedGenerators[a.keyNumToVolEnvHold];if(t.holdEnd=n(A.modulatedGenerators[a.holdVolEnv]+i)+t.attackEnd,t.decayEnd=t.decayDuration+t.holdEnd,t.state===0&&t.attackEnd===0&&(t.state=2),A.isInRelease){let E=Math.max(0,Math.min(te,t.sustainDbRelative)),c=E/te;switch(t.decayDuration=n(o+r)*c,t.state){case 0:t.releaseStartDb=te;break;case 1:let Q=1-(t.attackEnd-t.releaseStartTimeSamples)/t.attackDuration;t.releaseStartDb=20*Math.log10(Q)*-1;break;case 2:t.releaseStartDb=0;break;case 3:t.releaseStartDb=(1-(t.decayEnd-t.releaseStartTimeSamples)/t.decayDuration)*E;break;case 4:t.releaseStartDb=E;break}t.releaseStartDb=Math.max(0,Math.min(t.releaseStartDb,te)),t.releaseStartDb>=ts&&(A.finished=!0),t.currentReleaseGain=ge(t.releaseStartDb);let B=(te-t.releaseStartDb)/te;t.releaseDuration*=B}}static apply(A,t,n,s){let o=A.volumeEnvelope,r=n/10,g=s;if(A.isInRelease){let E=o.currentSampleTime-o.releaseStartTimeSamples;if(E>=o.releaseDuration){for(let B=0;B<t.length;B++)t[B]=0;A.finished=!0;return}let c=te-o.releaseStartDb;for(let B=0;B<t.length;B++){o.attenuation+=(o.attenuationTargetGain-o.attenuation)*g;let Q=E/o.releaseDuration*c+o.releaseStartDb;o.currentReleaseGain=o.attenuation*ge(Q+r),t[B]*=o.currentReleaseGain,o.currentSampleTime++,E++}o.currentReleaseGain<=Qi&&(A.finished=!0);return}let i=0;switch(o.state){case 0:for(;o.currentSampleTime<o.delayEnd;)if(o.currentAttenuationDb=te,t[i]=0,o.currentSampleTime++,++i>=t.length)return;o.state++;case 1:for(;o.currentSampleTime<o.attackEnd;){o.attenuation+=(o.attenuationTargetGain-o.attenuation)*g;let E=1-(o.attackEnd-o.currentSampleTime)/o.attackDuration;if(t[i]*=E*o.attenuation*ge(r),o.currentAttenuationDb=0,o.currentSampleTime++,++i>=t.length)return}o.state++;case 2:for(;o.currentSampleTime<o.holdEnd;)if(o.attenuation+=(o.attenuationTargetGain-o.attenuation)*g,t[i]*=o.attenuation*ge(r),o.currentAttenuationDb=0,o.currentSampleTime++,++i>=t.length)return;o.state++;case 3:for(;o.currentSampleTime<o.decayEnd;)if(o.attenuation+=(o.attenuationTargetGain-o.attenuation)*g,o.currentAttenuationDb=(1-(o.decayEnd-o.currentSampleTime)/o.decayDuration)*o.sustainDbRelative,t[i]*=o.attenuation*ge(o.currentAttenuationDb+r),o.currentSampleTime++,++i>=t.length)return;o.state++;case 4:for(o.canEndOnSilentSustain&&o.sustainDbRelative>=ts&&(A.finished=!0);;)if(o.attenuation+=(o.attenuationTargetGain-o.attenuation)*g,t[i]*=o.attenuation*ge(o.sustainDbRelative+r),o.currentAttenuationDb=o.sustainDbRelative,o.currentSampleTime++,++i>=t.length)return}}};function Do(e,A){this.enableEventSystem&&this.post({messageType:qA.eventCall,messageData:{eventName:e,eventData:A}})}var OA={mainVolume:0,masterPan:1,voicesCap:2,interpolationType:3,midiSystem:4};function ko(e,A){switch(e){case OA.masterPan:let t=A;this.pan=t,t=t/2+.5,this.panLeft=1-t,this.panRight=t;break;case OA.mainVolume:this.masterGain=A*ns,this.setMasterParameter(OA.masterPan,this.pan);break;case OA.voicesCap:this.voiceCap=A;break;case OA.interpolationType:this.interpolationType=A;break;case OA.midiSystem:this.setSystem(A)}}function Fo(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}}var ss={SoundCanvasText:0,XGText:1,SoundCanvasDotDisplay:2};function wo(e,A=0){let t=e[0];if(!(this.deviceID!==ee&&e[1]!==127&&this.deviceID!==e[1]))switch(t){default:H(`%cUnrecognized SysEx: %c${HA(e)}`,I.warn,I.unrecognized);break;case 126:case 127:switch(e[2]){case 4:let s;switch(e[3]){case 1:let r=e[5]<<7|e[4];this.setMIDIVolume(r/16384),p(`%cMaster Volume. Volume: %c${r}`,I.info,I.value);break;case 2:let i=((e[5]<<7|e[4])-8192)/8192;this.setMasterParameter(OA.masterPan,i),p(`%cMaster Pan. Pan: %c${i}`,I.info,I.value);break;case 3:let E=(e[5]<<7|e[6])-8192;s=Math.floor(E/81.92),this.setMasterTuning(s),p(`%cMaster Fine Tuning. Cents: %c${s}`,I.info,I.value);break;case 4:s=(e[5]-64)*100,this.setMasterTuning(s),p(`%cMaster Coarse Tuning. Cents: %c${s}`,I.info,I.value);break;default:H(`%cUnrecognized MIDI Device Control Real-time message: %c${HA(e)}`,I.warn,I.unrecognized)}break;case 9:e[3]===1?(p("%cGM1 system on",I.info),this.setSystem("gm")):e[3]===3?(p("%cGM2 system on",I.info),this.setSystem("gm2")):(p("%cGM system off, defaulting to GS",I.info),this.setSystem("gs"));break;case 8:let o=4;switch(e[3]){case 1:let r=e[o++];e.currentIndex=o;let g=$(e,16);if(o+=16,e.length<384){H(`The Bulk Tuning Dump is too short! (${e.length} bytes, at least 384 are expected)`);return}for(let B=0;B<128;B++)this.tunings[r][B]=Fo(e[o++],e[o++],e[o++]);p(`%cBulk Tuning Dump %c${g}%c Program: %c${r}`,I.info,I.value,I.info,I.recognized);break;case 2:case 7:e[3]===7&&o++;let i=e[o++],E=e[o++];for(let B=0;B<E;B++)this.tunings[i][e[o++]]=Fo(e[o++],e[o++],e[o++]);p(`%cSingle Note Tuning. Program: %c${i}%c Keys affected: %c${E}`,I.info,I.recognized,I.info,I.recognized);break;case 9:case 8:let c=new Int8Array(12);if(e[3]===8)for(let B=0;B<12;B++)c[B]=e[7+B]-64;else for(let B=0;B<24;B+=2){let Q=(e[7+B]<<7|e[8+B])-8192;c[B/2]=Math.floor(Q/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 B=0;B<7;B++)(e[5]>>B&1)===1&&this.midiAudioChannels[7+B+A].setOctaveTuning(c);for(let B=0;B<7;B++)(e[6]>>B&1)===1&&this.midiAudioChannels[B+A].setOctaveTuning(c);p(`%cMIDI Octave Scale ${e[3]===8?"(1 byte)":"(2 bytes)"} tuning via Tuning: %c${c.join(" ")}`,I.info,I.value);break;default:H(`%cUnrecognized MIDI Tuning standard message: %c${HA(e)}`,I.warn,I.unrecognized);break}break;default:H(`%cUnrecognized MIDI Realtime/non realtime message: %c${HA(e)}`,I.warn,I.unrecognized)}break;case 65:let n=function(){H(`%cUnrecognized Roland %cGS %cSysEx: %c${HA(e)}`,I.warn,I.recognized,I.warn,I.unrecognized)};if(e[2]===66&&e[3]===18){let s=e[7];if(e[6]===127){s===0?(p("%cGS Reset received!",I.info),this.resetAllControllers(!1),this.setSystem("gs")):s===127&&(p("%cGS system off, switching to GM2",I.info),this.resetAllControllers(!1),this.setSystem("gm2"));return}else if(e[4]===64){if((e[5]&16)>0){let o=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][e[5]&15]+A,r=this.midiAudioChannels[o];switch(e[6]){default:n();break;case 21:let g=s>0&&e[5]>>4;r.setDrums(g),p(`%cChannel %c${o}%c ${g?"is now a drum channel":"now isn't a drum channel"}%c via: %c${HA(e)}`,I.info,I.value,I.recognized,I.info,I.value);return;case 22:let i=s-64;r.transposeChannel(i),p(`%cChannel %c${o}%c pitch shift. Semitones %c${i}%c, with %c${HA(e)}`,I.info,I.recognized,I.info,I.value,I.info,I.value);return;case 28:let E=s;E===0?(r.randomPan=!0,p(`%cRandom pan is set to %cON%c for %c${o}`,I.info,I.recognized,I.info,I.value)):(r.randomPan=!1,r.controllerChange(y.pan,E));break;case 33:r.controllerChange(y.chorusDepth,s);break;case 34:r.controllerChange(y.reverbDepth,s);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,B=new Int8Array(12);for(let h=0;h<c;h++)B[h]=e[h+7]-64;r.setOctaveTuning(B);let Q=s-64;p(`%cChannel %c${o}%c octave scale tuning. Cents %c${B.join(" ")}%c, with %c${HA(e)}`,I.info,I.recognized,I.info,I.value,I.info,I.value),r.setTuning(Q);break}return}else if(e[5]===0&&e[6]===6){p(`%cRoland GS Master Pan set to: %c${s}%c with: %c${HA(e)}`,I.info,I.value,I.info,I.value),this.setMasterParameter(OA.masterPan,(s-64)/64);return}else if(e[5]===0&&e[6]===5){let o=s-64;p(`%cRoland GS Master Key-Shift set to: %c${o}%c with: %c${HA(e)}`,I.info,I.value,I.info,I.value),this.setMasterTuning(o*100);return}else if(e[5]===0&&e[6]===4){p(`%cRoland GS Master Volume set to: %c${s}%c with: %c${HA(e)}`,I.info,I.value,I.info,I.value),this.setMIDIVolume(s/127);return}}n();return}else if(e[2]===69&&e[3]===18){if(e[4]===16&&e[6]===0)if(e[5]===0){let s=new Uint8Array(e.slice(7,e.length-2));this.callEvent("synthdisplay",{displayData:s,displayType:ss.SoundCanvasText})}else if(e[5]===1){let s=new Uint8Array(e.slice(7,e.length-3));this.callEvent("synthdisplay",{displayData:s,displayType:ss.SoundCanvasDotDisplay}),p(`%cRoland SC Display Dot Matrix via: %c${HA(e)}`,I.info,I.value)}else n()}else if(e[2]===22&&e[3]===18&&e[4]===16){this.setMIDIVolume(e[7]/100),p(`%cRoland Master Volume control set to: %c${e[7]}%c via: %c${HA(e)}`,I.info,I.value,I.info,I.value);return}else{H(`%cUnrecognized Roland SysEx: %c${HA(e)}`,I.warn,I.unrecognized);return}break;case 67:if(e[2]===76)if(e[3]===0&&e[4]===0)switch(e[5]){case 4:let s=e[6];this.setMIDIVolume(s/127),p(`%cXG master volume. Volume: %c${s}`,I.info,I.recognized);break;case 6:let o=e[6]-64;this.transposeAllChannels(o),p(`%cXG master transpose. Volume: %c${o}`,I.info,I.recognized);break;case 126:p("%cXG system on",I.info),this.resetAllControllers(!1),this.setSystem("xg");break}else if(e[3]===8){if(!kA(this.system))return;let s=e[4]+A;if(s>=this.midiAudioChannels.length)return;let o=this.midiAudioChannels[s],r=e[6];switch(e[5]){case 1:o.controllerChange(y.bankSelect,r);break;case 2:o.controllerChange(y.lsbForControl0BankSelect,r);break;case 3:o.programChange(r);break;case 8:if(o.drumChannel)return;let g=r-64;o.channelTransposeKeyShift=g;break;case 11:o.controllerChange(y.mainVolume,r);break;case 14:let i=r;i===0?(o.randomPan=!0,p(`%cRandom pan is set to %cON%c for %c${s}`,I.info,I.recognized,I.info,I.value)):o.controllerChange(y.pan,i);break;case 19:o.controllerChange(y.reverbDepth,r);break;case 18:o.controllerChange(y.chorusDepth,r);break;default:H(`%cUnrecognized Yamaha XG Part Setup: %c${e[5].toString(16).toUpperCase()}`,I.warn,I.unrecognized)}}else if(e[3]===6&&e[4]===0){let s=new Uint8Array(e.slice(5,e.length-1));this.callEvent("synthdisplay",{displayData:s,displayType:ss.XGText})}else kA(this.system)&&H(`%cUnrecognized Yamaha XG SysEx: %c${HA(e)}`,I.warn,I.unrecognized);else kA(this.system)&&H(`%cUnrecognized Yamaha SysEx: %c${HA(e)}`,I.warn,I.unrecognized);break}}function Ro(){let e=4;for(let n of this.instruments)e+=n.instrumentZones.reduce((s,o)=>(o.generators=o.generators.filter(r=>r.generatorType!==a.sampleID&&r.generatorType!==a.keyRange&&r.generatorType!==a.velRange),(o.velRange.max!==127||o.velRange.min!==0)&&o.generators.unshift(new U(a.velRange,o.velRange.max<<8|Math.max(o.velRange.min,0),!1)),(o.keyRange.max!==127||o.keyRange.min!==0)&&o.generators.unshift(new U(a.keyRange,o.keyRange.max<<8|Math.max(o.keyRange.min,0),!1)),o.isGlobal||o.generators.push(new U(a.sampleID,this.samples.indexOf(o.sample),!1)),o.generators.length*4+s),0);let A=new b(e),t=0;for(let n of this.instruments)for(let s of n.instrumentZones){s.generatorZoneStartIndex=t;for(let o of s.generators)Y(A,o.generatorType),Y(A,o.generatorValue),t++}return eA(A,0),dA(new hA("igen",A.length,A))}function Go(e,A,t,n,s){let o=this.samples.map((E,c)=>{t&&E.compressSample(n,s);let B=E.getRawData();return p(`%cEncoded sample %c${c}. ${E.sampleName}%c of %c${this.samples.length}%c. Compressed: %c${E.isCompressed}%c.`,I.info,I.recognized,I.info,I.recognized,I.info,E.isCompressed?I.recognized:I.unrecognized,I.info),B}),r=this.samples.reduce((E,c,B)=>E+o[B].length+46,0),g=new b(r);this.samples.forEach((E,c)=>{let B=o[c],Q,h,m=B.length;E.isCompressed?(Q=g.currentIndex,h=Q+B.length):(Q=g.currentIndex/2,h=Q+B.length/2,m+=46),e.push(Q),g.set(B,g.currentIndex),g.currentIndex+=m,A.push(h)});let i=dA(new hA("smpl",g.length,g),new b([115,100,116,97]));return dA(new hA("LIST",i.length,i))}function xo(e,A){let n=new b(46*(this.samples.length+1));return this.samples.forEach((s,o)=>{vA(n,s.sampleName,20);let r=e[o];eA(n,r);let g=A[o];eA(n,g);let i=s.sampleLoopStartIndex+r,E=s.sampleLoopEndIndex+r;s.isCompressed&&(i-=r,E-=r),eA(n,i),eA(n,E),eA(n,s.sampleRate),n[n.currentIndex++]=s.samplePitch,n[n.currentIndex++]=s.samplePitchCorrection,Y(n,s.sampleLink),Y(n,s.sampleType)}),vA(n,"EOS",46),dA(new hA("shdr",n.length,n))}function Mo(){let e=10;for(let n of this.instruments)e+=n.instrumentZones.reduce((s,o)=>o.modulators.length*10+s,0);let A=new b(e),t=0;for(let n of this.instruments)for(let s of n.instrumentZones){s.modulatorZoneStartIndex=t;for(let o of s.modulators)Y(A,o.sourceEnum),Y(A,o.modulatorDestination),Y(A,o.transformAmount),Y(A,o.secondarySourceEnum),Y(A,o.transformType),t++}return Xe(A,0,10),dA(new hA("imod",A.length,A))}function No(){let e=this.instruments.reduce((o,r)=>r.instrumentZones.length*4+o,4),A=new b(e),t=0,n=0,s=0;for(let o of this.instruments){o.instrumentZoneIndex=t;for(let r of o.instrumentZones)r.zoneID=t,Y(A,n),Y(A,s),n+=r.generators.length,s+=r.modulators.length,t++}return Y(A,n),Y(A,s),dA(new hA("ibag",A.length,A))}function bo(){let e=this.instruments.length*22+22,A=new b(e),t=0,n=0;for(let s of this.instruments)vA(A,s.instrumentName,20),Y(A,t),t+=s.instrumentZones.length,s.instrumentID=n,n++;return vA(A,"EOI",20),Y(A,t),dA(new hA("inst",A.length,A))}function Lo(){let e=4;for(let n of this.presets)e+=n.presetZones.reduce((s,o)=>(o.generators=o.generators.filter(r=>r.generatorType!==a.instrument&&r.generatorType!==a.keyRange&&r.generatorType!==a.velRange),(o.velRange.max!==127||o.velRange.min!==0)&&o.generators.unshift(new U(a.velRange,o.velRange.max<<8|Math.max(o.velRange.min,0),!1)),(o.keyRange.max!==127||o.keyRange.min!==0)&&o.generators.unshift(new U(a.keyRange,o.keyRange.max<<8|Math.max(o.keyRange.min,0),!1)),o.isGlobal||o.generators.push(new U(a.instrument,this.instruments.indexOf(o.instrument),!1)),o.generators.length*4+s),0);let A=new b(e),t=0;for(let n of this.presets)for(let s of n.presetZones){s.generatorZoneStartIndex=t;for(let o of s.generators)Y(A,o.generatorType),Y(A,o.generatorValue);t+=s.generators.length}return Y(A,0),Y(A,0),dA(new hA("pgen",A.length,A))}function Uo(){let e=10;for(let n of this.presets)e+=n.presetZones.reduce((s,o)=>o.modulators.length*10+s,0);let A=new b(e),t=0;for(let n of this.presets)for(let s of n.presetZones){s.modulatorZoneStartIndex=t;for(let o of s.modulators)Y(A,o.sourceEnum),Y(A,o.modulatorDestination),Y(A,o.transformAmount),Y(A,o.secondarySourceEnum),Y(A,o.transformType),t++}return Xe(A,0,10),dA(new hA("pmod",A.length,A))}function To(){let e=this.presets.reduce((o,r)=>r.presetZones.length*4+o,4),A=new b(e),t=0,n=0,s=0;for(let o of this.presets){o.presetZoneStartIndex=t;for(let r of o.presetZones)r.zoneID=t,Y(A,n),Y(A,s),n+=r.generators.length,s+=r.modulators.length,t++}return Y(A,n),Y(A,s),dA(new hA("pbag",A.length,A))}function vo(){let e=this.presets.length*38+38,A=new b(e),t=0;for(let n of this.presets)vA(A,n.presetName,20),Y(A,n.program),Y(A,n.bank),Y(A,t),eA(A,n.library),eA(A,n.genre),eA(A,n.morphology),t+=n.presetZones.length;return vA(A,"EOP",20),Y(A,0),Y(A,0),Y(A,t),eA(A,0),eA(A,0),eA(A,0),dA(new hA("phdr",A.length,A))}var di={compress:!1,compressionQuality:.5,compressionFunction:void 0};function Ho(e=di){if(e.compress&&typeof e.compressionFunction!="function")throw new TypeError("No compression function supplied but compression enabled.");pA("%cSaving soundfont...",I.info),p(`%cCompression: %c${e?.compress||"false"}%c quality: %c${e?.compressionQuality||"none"}`,I.info,I.recognized,I.info,I.recognized),p("%cWriting INFO...",I.info);let A=[];this.soundFontInfo.ISFT="SpessaSynth",e?.compress&&(this.soundFontInfo.ifil="3.0");for(let[M,R]of Object.entries(this.soundFontInfo))if(M==="ifil"||M==="iver"){let C=parseInt(R.split(".")[0]),L=parseInt(R.split(".")[1]),J=new b(4);Y(J,C),Y(J,L),A.push(dA(new hA(M,4,J)))}else if(M==="DMOD")A.push(dA(new hA(M,R.length,R)));else{let C=new b(R.length);vA(C,R),A.push(dA(new hA(M,R.length,C)))}let t=DA([new b([73,78,70,79]),...A]),n=dA(new hA("LIST",t.length,t));p("%cWriting SDTA...",I.info);let s=[],o=[],r=Go.call(this,s,o,e?.compress,e?.compressionQuality??.5,e.compressionFunction);p("%cWriting PDTA...",I.info),p("%cWriting SHDR...",I.info);let g=xo.call(this,s,o);p("%cWriting IGEN...",I.info);let i=Ro.call(this);p("%cWriting IMOD...",I.info);let E=Mo.call(this);p("%cWriting IBAG...",I.info);let c=No.call(this);p("%cWriting INST...",I.info);let B=bo.call(this),Q=Lo.call(this);p("%cWriting PMOD...",I.info);let h=Uo.call(this);p("%cWriting PBAG...",I.info);let m=To.call(this);p("%cWriting PHDR...",I.info);let f=vo.call(this),S=DA([new b([112,100,116,97]),f,m,h,Q,B,c,E,i,g]),x=dA(new hA("LIST",S.length,S));p("%cWriting the output file...",I.info);let D=DA([new b([115,102,98,107]),n,r,x]),G=dA(new hA("RIFF",D.length,D));return p(`%cSaved succesfully! Final file size: %c${G.length}`,I.info,I.recognized),P(),G}var Mt=class{velRange={min:-1,max:127};keyRange={min:-1,max:127};isGlobal=!1;generators=[];modulators=[];get hasKeyRange(){return this.keyRange.min!==-1}get hasVelRange(){return this.velRange.min!==-1}getGeneratorValue(A,t){return this.generators.find(n=>n.generatorType===A)?.generatorValue??t}};var VA=class extends Mt{sample=void 0;useCount=0;deleteZone(){this.useCount--,!this.isGlobal&&this.sample.useCount--}},Te=class extends Mt{instrument=void 0;deleteZone(){this.isGlobal||this.instrument.removeUseCount()}};var ui=new Set([a.velRange,a.keyRange,a.instrument,a.exclusiveClass,a.endOper,a.sampleModes,a.startloopAddrsOffset,a.startloopAddrsCoarseOffset,a.endloopAddrsOffset,a.endloopAddrsCoarseOffset,a.startAddrsOffset,a.startAddrsCoarseOffset,a.endAddrOffset,a.endAddrsCoarseOffset,a.initialAttenuation,a.fineTune,a.coarseTune,a.keyNumToVolEnvHold,a.keyNumToVolEnvDecay,a.keyNumToModEnvHold,a.keyNumToModEnvDecay]);function Yo(e,A=!0){function t(B,Q){B.push(...Q.filter(h=>!B.find(m=>m.generatorType===h.generatorType)))}function n(B,Q){return{min:Math.max(B.min,Q.min),max:Math.min(B.max,Q.max)}}function s(B,Q){B.push(...Q.filter(h=>!B.find(m=>_.isIdentical(h,m))))}let o=[],r=[],g=[],i={min:0,max:127},E={min:0,max:127},c=e.presetZones.find(B=>B.isGlobal);c&&(r.push(...c.generators),g.push(...c.modulators),i=c.keyRange,E=c.velRange);for(let B of e.presetZones){if(B.isGlobal)continue;let Q=B.keyRange;B.hasKeyRange||(Q=i);let h=B.velRange;B.hasVelRange||(h=E);let m=B.generators.map(C=>new U(C.generatorType,C.generatorValue));t(m,r);let f=[...B.modulators];s(f,g);let S=B.instrument.instrumentZones,x=[],D=[],G={min:0,max:127},M={min:0,max:127},R=S.find(C=>C.isGlobal);R&&(x.push(...R.generators),D.push(...R.modulators),G=R.keyRange,M=R.velRange);for(let C of S){if(C.isGlobal)continue;let L=C.keyRange;C.hasKeyRange||(L=G);let J=C.velRange;if(C.hasVelRange||(J=M),L=n(L,Q),J=n(J,h),L.max<L.min||J.max<J.min)continue;let EA=C.generators.map(sA=>new U(sA.generatorType,sA.generatorValue));t(EA,x);let tA=[...C.modulators];s(tA,D);let T=[...tA];for(let sA of f){let oA=T.findIndex(CA=>_.isIdentical(sA,CA));oA!==-1?T[oA]=T[oA].sumTransform(sA):T.push(sA)}let AA=EA.map(sA=>new U(sA.generatorType,sA.generatorValue));for(let sA of m){if(sA.generatorType===a.velRange||sA.generatorType===a.keyRange||sA.generatorType===a.instrument||sA.generatorType===a.endOper||sA.generatorType===a.sampleModes)continue;let oA=EA.findIndex(CA=>CA.generatorType===sA.generatorType);if(oA!==-1){let CA=AA[oA].generatorValue+sA.generatorValue;AA[oA]=new U(sA.generatorType,CA)}else{let CA=X[sA.generatorType].def+sA.generatorValue;AA.push(new U(sA.generatorType,CA))}}AA=AA.filter(sA=>sA.generatorType!==a.sampleID&&sA.generatorType!==a.keyRange&&sA.generatorType!==a.velRange&&sA.generatorType!==a.endOper&&sA.generatorType!==a.instrument&&sA.generatorValue!==X[sA.generatorType].def);let BA=new VA;BA.keyRange=L,BA.velRange=J,BA.keyRange.min===0&&BA.keyRange.max===127&&(BA.keyRange.min=-1),BA.velRange.min===0&&BA.velRange.max===127&&(BA.velRange.min=-1),BA.isGlobal=!1,BA.sample=C.sample,BA.generators=AA,BA.modulators=T,o.push(BA)}}if(A){let B=new VA;B.isGlobal=!0;for(let m=0;m<58;m++){if(ui.has(m))continue;let f={},S=X[m]?.def||0;f[S]=0;for(let x of o){let D=x.generators.find(R=>R.generatorType===m);if(D){let R=D.generatorValue;f[R]===void 0?f[R]=1:f[R]++}else f[S]++;let G;switch(m){default:continue;case a.decayVolEnv:G=a.keyNumToVolEnvDecay;break;case a.holdVolEnv:G=a.keyNumToVolEnvHold;break;case a.decayModEnv:G=a.keyNumToModEnvDecay;break;case a.holdModEnv:G=a.keyNumToModEnvHold}if(x.generators.find(R=>R.generatorType===G)!==void 0){f={};break}}if(Object.keys(f).length>0){let x=Object.entries(f).reduce((G,M)=>G[1]<M[1]?M:G,[0,0]),D=parseInt(x[0]);D!==S&&B.generators.push(new U(m,D)),o.forEach(G=>{let M=G.generators.findIndex(R=>R.generatorType===m);M!==-1?G.generators[M].generatorValue===D&&G.generators.splice(M,1):D!==S&&G.generators.push(new U(m,S))})}}let h=o.find(m=>!m.isGlobal).modulators.map(m=>_.copy(m));for(let m of h){let f=!0;for(let S of o){if(S.isGlobal||!f)continue;S.modulators.find(D=>_.isIdentical(D,m))||(f=!1)}if(f===!0){B.modulators.push(_.copy(m));for(let S of o){let x=S.modulators.find(D=>_.isIdentical(D,m));x.transformAmount===m.transformAmount&&S.modulators.splice(S.modulators.indexOf(x),1)}}}o.splice(0,0,B)}return o}var Jo=20;function Cn(e,A,t,n,s,o,r){let g=r===0?0:1,i=new b(Jo+g*16);eA(i,Jo),Y(i,A),Y(i,t);let E=n*.4,c=Math.floor(E*-65536);eA(i,c),eA(i,2);let B=o-s,Q=0;switch(r){default:case 0:g=0;break;case 1:Q=0,g=1;break;case 3:Q=1,g=1}return eA(i,g),g===1&&(eA(i,16),eA(i,Q),eA(i,s),eA(i,B)),z("wsmp",i)}var V={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},En=new _(219,0,a.reverbEffectsSend,1e3,0),Bn=new _(221,0,a.chorusEffectsSend,1e3,0),hn=new _(129,0,a.vibLfoToPitch,0,0),cn=new _(13,0,a.vibLfoToPitch,0,0);var w={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 Nt=class{source;control;destination;scale;transform;constructor(A,t,n,s,o){this.source=A,this.control=t,this.destination=n,this.scale=s,this.transform=o}writeArticulator(){let A=new b(12);return Y(A,this.source),Y(A,this.control),Y(A,this.destination),Y(A,this.transform),eA(A,this.scale<<16),A}};function Ko(e,A){if(e)switch(A){default:return;case y.modulationWheel:return V.modulationWheel;case y.mainVolume:return V.volume;case y.pan:return V.pan;case y.expressionController:return V.expression;case y.chorusDepth:return V.chorus;case y.reverbDepth:return V.reverb}else switch(A){default:return;case j.noteOnKeyNum:return V.keyNum;case j.noteOnVelocity:return V.velocity;case j.noController:return V.none;case j.polyPressure:return V.polyPressure;case j.channelPressure:return V.channelPressure;case j.pitchWheel:return V.pitchWheel;case j.pitchWheelRange:return V.pitchWheelRange}}function qo(e,A){switch(e){default:return;case a.initialAttenuation:return{dest:w.gain,amount:-A};case a.fineTune:return w.pitch;case a.pan:return w.pan;case a.keyNum:return w.keyNum;case a.reverbEffectsSend:return w.reverbSend;case a.chorusEffectsSend:return w.chorusSend;case a.freqModLFO:return w.modLfoFreq;case a.delayModLFO:return w.modLfoDelay;case a.delayVibLFO:return w.vibLfoDelay;case a.freqVibLFO:return w.vibLfoFreq;case a.delayVolEnv:return w.volEnvDelay;case a.attackVolEnv:return w.volEnvAttack;case a.holdVolEnv:return w.volEnvHold;case a.decayVolEnv:return w.volEnvDecay;case a.sustainVolEnv:return{dest:w.volEnvSustain,amount:1e3-A};case a.releaseVolEnv:return w.volEnvRelease;case a.delayModEnv:return w.modEnvDelay;case a.attackModEnv:return w.modEnvAttack;case a.holdModEnv:return w.modEnvHold;case a.decayModEnv:return w.modEnvDecay;case a.sustainModEnv:return{dest:w.modEnvSustain,amount:1e3-A};case a.releaseModEnv:return w.modEnvRelease;case a.initialFilterFc:return w.filterCutoff;case a.initialFilterQ:return w.filterQ}}function Oo(e,A){switch(e){default:return;case a.modEnvToFilterFc:return{source:V.modEnv,dest:w.filterCutoff,amt:A,isBipolar:!1};case a.modEnvToPitch:return{source:V.modEnv,dest:w.pitch,amt:A,isBipolar:!1};case a.modLfoToFilterFc:return{source:V.modLfo,dest:w.filterCutoff,amt:A,isBipolar:!0};case a.modLfoToVolume:return{source:V.modLfo,dest:w.gain,amt:A,isBipolar:!0};case a.modLfoToPitch:return{source:V.modLfo,dest:w.pitch,amt:A,isBipolar:!0};case a.vibLfoToPitch:return{source:V.vibratoLfo,dest:w.pitch,amt:A,isBipolar:!0};case a.keyNumToVolEnvHold:return{source:V.keyNum,dest:w.volEnvHold,amt:A,isBipolar:!0};case a.keyNumToVolEnvDecay:return{source:V.keyNum,dest:w.volEnvDecay,amt:A,isBipolar:!0};case a.keyNumToModEnvHold:return{source:V.keyNum,dest:w.modEnvHold,amt:A,isBipolar:!0};case a.keyNumToModEnvDecay:return{source:V.keyNum,dest:w.modEnvDecay,amt:A,isBipolar:!0};case a.scaleTuning:return{source:V.keyNum,dest:w.pitch,amt:A*128,isBipolar:!1}}}function Vo(e){let A=qo(e.generatorType,e.generatorValue),t=A,n=0,s=e.generatorValue;A?.amount!==void 0&&(s=A.amount,t=A.dest);let o=Oo(e.generatorType,e.generatorValue);if(o!==void 0)s=o.amt,t=o.dest,n=o.source;else if(t===void 0){H(`Invalid generator type: ${e.generatorType}`);return}return new Nt(n,0,t,s,0)}function Po(e){if(e.transformType!==0){H("Other transform types are not supported.");return}let A=Ko(e.sourceUsesCC,e.sourceIndex),t=e.sourceCurveType,n=e.sourcePolarity,s=e.sourceDirection;if(A===void 0){H(`Invalid source: ${e.sourceIndex}, CC: ${e.sourceUsesCC}`);return}e.modulatorDestination===a.initialAttenuation&&(s=s===1?0:1);let o=Ko(e.secSrcUsesCC,e.secSrcIndex),r=e.secSrcCurveType,g=e.secSrcPolarity,i=e.secSrcDirection;if(o===void 0){H(`Invalid secondary source: ${e.secSrcIndex}, CC: ${e.secSrcUsesCC}`);return}let E=qo(e.modulatorDestination,e.transformAmount),c=E,B=e.transformAmount;E?.dest!==void 0&&(c=E.dest,B=E.amount);let Q=Oo(e.modulatorDestination,e.transformAmount);if(Q!==void 0)B=Q.amt,o=A,r=t,g=n,i=s,t=RA.linear,n=Q.isBipolar?1:0,s=0,A=Q.source,c=Q.dest;else if(c===void 0){H(`Invalid destination: ${e.modulatorDestination}`);return}let h=0;return h|=r<<4,h|=g<<8,h|=i<<9,h|=t,h|=n<<14,h|=s<<15,new Nt(A,o,c,B,h)}var fi=new Set([a.sampleModes,a.initialAttenuation,a.keyRange,a.velRange,a.sampleID,a.fineTune,a.coarseTune,a.startAddrsOffset,a.startAddrsCoarseOffset,a.endAddrOffset,a.endAddrsCoarseOffset,a.startloopAddrsOffset,a.startloopAddrsCoarseOffset,a.endloopAddrsOffset,a.endloopAddrsCoarseOffset,a.overridingRootKey,a.exclusiveClass]);function ln(e){for(let o=0;o<e.generators.length;o++){let r=e.generators[o];(r.generatorType===a.delayVolEnv||r.generatorType===a.attackVolEnv||r.generatorType===a.holdVolEnv||r.generatorType===a.decayVolEnv||r.generatorType===a.releaseVolEnv||r.generatorType===a.delayModEnv||r.generatorType===a.attackModEnv||r.generatorType===a.holdModEnv||r.generatorType===a.decayModEnv)&&(e.generators[o]=new U(r.generatorType,Math.min(r.generatorValue,6386),!1))}for(let o=0;o<e.generators.length;o++){let r=e.generators[o],g;switch(r.generatorType){default:continue;case a.keyNumToVolEnvDecay:g=a.decayVolEnv;break;case a.keyNumToVolEnvHold:g=a.holdVolEnv;break;case a.keyNumToModEnvDecay:g=a.decayModEnv;break;case a.keyNumToModEnvHold:g=a.holdModEnv}let i=e.generators.find(m=>m.generatorType===g);if(i===void 0)continue;let E=r.generatorValue*-128,c=60/128*E,B=i.generatorValue-c,Q=e.generators.indexOf(r),h=e.generators.indexOf(i);e.generators[h]=new U(g,B,!1),e.generators[Q]=new U(r.generatorType,E,!1)}let A=e.generators.reduce((o,r)=>{if(fi.has(r.generatorType))return o;let g=Vo(r);return g!==void 0?(o.push(g),p("%cSucceeded converting to DLS Articulator!",I.recognized)):H("Failed converting to DLS Articulator!"),o},[]),t=e.modulators.reduce((o,r)=>{if(_.isIdentical(r,Bn,!0)||_.isIdentical(r,En,!0)||_.isIdentical(r,hn,!0)||_.isIdentical(r,cn,!0))return o;let g=Po(r);return g!==void 0?(o.push(g),p("%cSucceeded converting to DLS Articulator!",I.recognized)):H("Failed converting to DLS Articulator!"),o},[]);A.push(...t);let n=new b(8);eA(n,8),eA(n,A.length);let s=A.map(o=>o.writeArticulator());return z("art2",DA([n,...s]))}function Zo(e,A){let t=new b(12);Y(t,Math.max(e.keyRange.min,0)),Y(t,e.keyRange.max),Y(t,Math.max(e.velRange.min,0)),Y(t,e.velRange.max),Y(t,0);let n=e.getGeneratorValue(a.exclusiveClass,0);Y(t,n),Y(t,0);let s=z("rgnh",t),o=e.getGeneratorValue(a.overridingRootKey,e.sample.samplePitch);e.getGeneratorValue(a.scaleTuning,A.getGeneratorValue(a.scaleTuning,100))===0&&e.keyRange.max-e.keyRange.min===0&&(o=e.keyRange.min);let g=Cn(e.sample,o,e.getGeneratorValue(a.fineTune,0)+e.getGeneratorValue(a.coarseTune,0)*100+e.sample.samplePitchCorrection,e.getGeneratorValue(a.initialAttenuation,0),e.sample.sampleLoopStartIndex+e.getGeneratorValue(a.startloopAddrsOffset,0)+e.getGeneratorValue(a.startloopAddrsCoarseOffset,0)*32768,e.sample.sampleLoopEndIndex+e.getGeneratorValue(a.endloopAddrsOffset,0)+e.getGeneratorValue(a.endloopAddrsCoarseOffset,0)*32768,e.getGeneratorValue(a.sampleModes,0)),i=new b(12);Y(i,0),Y(i,0),eA(i,1),eA(i,this.samples.indexOf(e.sample));let E=z("wlnk",i),c=new b(0);if(e.modulators.length+e.generators.length>0){let B=ln(e);c=z("lar2",B,!1,!0)}return z("rgn2",DA([s,g,E,c]),!1,!0)}function Xo(e){pA(`%cWriting %c${e.presetName}%c...`,I.info,I.recognized,I.info);let A=Yo(e),t=A.reduce((Q,h)=>h.isGlobal?Q:Q+1,0),n=new b(12);eA(n,t);let s=(e.bank&127)<<8;e.bank===128&&(s|=1<<31),eA(n,s),eA(n,e.program&127);let o=z("insh",n),r=new b(0),g=A.find(Q=>Q.isGlobal===!0);if(g){let Q=ln(g);r=z("lar2",Q,!1,!0)}let i=DA(A.reduce((Q,h)=>(h.isGlobal||Q.push(Zo.apply(this,[h,g])),Q),[])),E=z("lrgn",i,!1,!0),c=z("INAM",me(e.presetName)),B=z("INFO",c,!1,!0);return P(),z("ins ",DA([o,E,r,B]),!1,!0)}function Wo(){let e=DA(this.presets.map(A=>Xo.apply(this,[A])));return z("lins",e,!1,!0)}function zo(e){let A=new b(18);Y(A,1),Y(A,1),eA(A,e.sampleRate),eA(A,e.sampleRate*2),Y(A,2),Y(A,16);let t=z("fmt ",A),n=1;e.sampleLoopStartIndex+Math.abs(e.getAudioData().length-e.sampleLoopEndIndex)<2&&(n=0);let s=Cn(e,e.samplePitch,e.samplePitchCorrection,0,e.sampleLoopStartIndex,e.sampleLoopEndIndex,n),o=e.getAudioData(),r;if(e.isCompressed){let E=new Int16Array(o.length);for(let c=0;c<o.length;c++)E[c]=o[c]*32767;r=z("data",new b(E.buffer))}else r=z("data",e.getRawData());let g=z("INAM",me(e.sampleName)),i=z("INFO",g,!1,!0);return p(`%cSaved %c${e.sampleName}%c succesfully!`,I.recognized,I.value,I.recognized),z("wave",DA([t,s,r,i]),!1,!0)}function _o(){let e=0,A=[],t=this.samples.map(n=>{let s=zo(n);return A.push(e),e+=s.length,s});return{data:z("wvpl",DA(t),!1,!0),indexes:A}}function jo(){pA("%cSaving DLS...",I.info);let e=new b(4);eA(e,this.presets.length);let A=z("colh",e);pA("%cWriting instruments...",I.info);let t=Wo.apply(this);p("%cSuccess!",I.recognized),P(),pA("%cWriting WAVE samples...",I.info);let n=_o.apply(this),s=n.data,o=n.indexes;p("%cSucceeded!",I.recognized),P();let r=new b(8+4*o.length);eA(r,8),eA(r,o.length);for(let B of o)eA(r,B);let g=z("ptbl",r);this.soundFontInfo.ICMT=(this.soundFontInfo.ICMT||"Soundfont")+`
15
+ Converted from SF2 to DLS using SpessaSynth`,this.soundFontInfo.ISFT="SpessaSynth";let i=[];for(let[B,Q]of Object.entries(this.soundFontInfo))B!=="ICMT"&&B!=="INAM"&&B!=="ICRD"&&B!=="IENG"&&B!=="ICOP"&&B!=="ISFT"&&B!=="ISBJ"||i.push(z(B,me(Q),!0));let E=z("INFO",DA(i),!1,!0),c=new b(A.length+t.length+g.length+s.length+E.length+4);return vA(c,"DLS "),c.set(DA([A,t,g,s,E]),4),p("%cSaved succesfully!",I.recognized),P(),z("RIFF",c)}var mi=48e3,ve=class{sampleName;sampleRate;samplePitch;samplePitchCorrection;sampleLink;sampleType;sampleLoopStartIndex;sampleLoopEndIndex;isCompressed;compressedData=void 0;useCount=0;sampleData=void 0;constructor(A,t,n,s,o,r,g,i){this.sampleName=A,this.sampleRate=t,this.samplePitch=n,this.samplePitchCorrection=s,this.sampleLink=o,this.sampleType=r,this.sampleLoopStartIndex=g,this.sampleLoopEndIndex=i,this.isCompressed=(r&16)>0}getRawData(){let A=new Uint8Array(this.sampleData.length*2);for(let t=0;t<this.sampleData.length;t++){let n=Math.floor(this.sampleData[t]*32768);A[t*2]=n&255,A[t*2+1]=n>>8&255}return A}resampleData(A){let t=this.getAudioData(),n=A/this.sampleRate,s=new Float32Array(Math.floor(t.length*n));for(let o=0;o<s.length;o++)s[o]=t[Math.floor(o*(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(mi),n=this.getAudioData()),this.compressedData=t([n],1,this.sampleRate,A),this.sampleType|=16,this.isCompressed=!0}catch{H(`Failed to compress ${this.sampleName}. Leaving as uncompressed!`),this.isCompressed=!1,this.compressedData=void 0,this.sampleType&=239}}getAudioData(){return this.sampleData}};var He=class{instrumentName="";instrumentZones=[];_useCount=0;get useCount(){return this._useCount}addUseCount(){this._useCount++,this.instrumentZones.forEach(A=>A.useCount++)}removeUseCount(){this._useCount--;for(let A=0;A<this.instrumentZones.length;A++)this.safeDeleteZone(A)&&A--}deleteInstrument(){this.instrumentZones.forEach(A=>A.deleteZone()),this.instrumentZones.length=0}safeDeleteZone(A){return this.instrumentZones[A].useCount--,this.instrumentZones[A].useCount<1?(this.deleteZone(A),!0):!1}deleteZone(A){this.instrumentZones[A].deleteZone(),this.instrumentZones.splice(A,1)}};var Ye=class{parentSoundBank;presetName="";program=0;bank=0;presetZones=[];foundSamplesAndGenerators=[];library=0;genre=0;morphology=0;constructor(A){this.parentSoundBank=A;for(let t=0;t<128;t++)this.foundSamplesAndGenerators[t]=[]}isDrumPreset(A,t=!1){let n=A&&this.parentSoundBank.isXGBank;return this.bank===128||n&&Ae(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)}preload(A,t){for(let n=A;n<t+1;n++)for(let s=0;s<128;s++)this.getSamplesAndGenerators(n,s).forEach(o=>{o.sample.isSampleLoaded||o.sample.getAudioData()})}preloadSpecific(A,t){this.getSamplesAndGenerators(A,t).forEach(n=>{n.sample.isSampleLoaded||n.sample.getAudioData()})}getSamplesAndGenerators(A,t){let n=this.foundSamplesAndGenerators[A][t];if(n)return n;if(this.presetZones.length<1)return[];function s(h,m){return m>=h.min&&m<=h.max}function o(h,m){h.push(...m.filter(f=>!h.find(S=>S.generatorType===f.generatorType)))}function r(h,m){h.push(...m.filter(f=>!h.find(S=>_.isIdentical(f,S))))}let g=[],i=this.presetZones[0].isGlobal?[...this.presetZones[0].generators]:[],E=this.presetZones[0].isGlobal?[...this.presetZones[0].modulators]:[],c=this.presetZones[0].isGlobal?this.presetZones[0].keyRange:{min:0,max:127},B=this.presetZones[0].isGlobal?this.presetZones[0].velRange:{min:0,max:127};return this.presetZones.filter(h=>s(h.hasKeyRange?h.keyRange:c,A)&&s(h.hasVelRange?h.velRange:B,t)&&!h.isGlobal).forEach(h=>{if(h.instrument.instrumentZones.length<1)return;let m=h.generators,f=h.modulators,S=h.instrument.instrumentZones[0],x=S.isGlobal?[...S.generators]:[],D=S.isGlobal?[...S.modulators]:[],G=S.isGlobal?S.keyRange:{min:0,max:127},M=S.isGlobal?S.velRange:{min:0,max:127};h.instrument.instrumentZones.filter(C=>s(C.hasKeyRange?C.keyRange:G,A)&&s(C.hasVelRange?C.velRange:M,t)&&!C.isGlobal).forEach(C=>{let L=[...C.generators],J=[...C.modulators];o(m,i),o(L,x),r(f,E),r(J,D),r(J,this.parentSoundBank.defaultModulators);let EA=[...J];for(let tA=0;tA<f.length;tA++){let T=f[tA],AA=EA.findIndex(BA=>_.isIdentical(T,BA));AA!==-1?EA[AA]=EA[AA].sumTransform(T):EA.push(T)}g.push({instrumentGenerators:L,presetGenerators:m,modulators:EA,sample:C.sample,sampleID:C.generators.find(tA=>tA.generatorType===a.sampleID).generatorValue})})}),this.foundSamplesAndGenerators[A][t]=g,g}};var Je=class e{soundFontInfo={};presets=[];samples=[];instruments=[];defaultModulators=qs.map(A=>_.copy(A));isXGBank=!1;constructor(A=void 0){A?.presets&&(this.presets.push(...A.presets),this.soundFontInfo=A.info)}static mergeSoundBanks(...A){let t=A.shift(),n=t.presets;for(;A.length;)A.shift().presets.forEach(o=>{n.find(r=>r.bank===o.bank&&r.program===o.program)===void 0&&n.push(o)});return new e({presets:n,info:t.soundFontInfo})}static getDummySoundfontFile(){let A=new e,t=new ve("Saw",44100,65,20,0,0,0,127);t.sampleData=new Float32Array(128);for(let E=0;E<128;E++)t.sampleData[E]=E/128*2-1;A.samples.push(t);let n=new VA;n.isGlobal=!0,n.generators.push(new U(a.initialAttenuation,375)),n.generators.push(new U(a.releaseVolEnv,-1e3)),n.generators.push(new U(a.sampleModes,1));let s=new VA;s.sample=t;let o=new VA;o.sample=t,o.generators.push(new U(a.fineTune,-9));let r=new He;r.instrumentName="Saw Wave",r.instrumentZones.push(n),r.instrumentZones.push(s),r.instrumentZones.push(o),A.instruments.push(r);let g=new Te;g.instrument=r;let i=new Ye(A);return i.presetName="Saw Wave",i.presetZones.push(g),A.presets.push(i),A.soundFontInfo.ifil="2.1",A.soundFontInfo.isng="EMU8000",A.soundFontInfo.INAM="Dummy",A._parseInternal(),A.write().buffer}_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(Ae(t.bank)&&(this.isXGBank=!0,!A.has(t.program))){this.isXGBank=!1,p(`%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.`,I.info,I.value,I.info);break}}trimSoundBank(A){let t=this;function n(o,r){let g=0;for(let i=0;i<o.instrumentZones.length;i++){let E=o.instrumentZones[i];if(E.isGlobal)continue;let c=E.keyRange,B=E.velRange,Q=!1;for(let h of r)if(h.key>=c.min&&h.key<=c.max&&h.velocity>=B.min&&h.velocity<=B.max){Q=!0;break}Q||(p(`%c${E.sample.sampleName} %cremoved from %c${o.instrumentName}%c. Use count: %c${E.useCount-1}`,I.recognized,I.info,I.recognized,I.info,I.recognized),o.safeDeleteZone(i)&&(g++,i--,p(`%c${E.sample.sampleName} %cdeleted`,I.recognized,I.info)),E.sample.useCount<1&&t.deleteSample(E.sample))}return g}ie("%cTrimming soundfont...",I.info);let s=A.getUsedProgramsAndKeys(t);pA("%cModifying soundfont...",I.info),p("Detected keys for midi:",s);for(let o=0;o<t.presets.length;o++){let r=t.presets[o],g=r.bank+":"+r.program,i=s[g];if(i===void 0)p(`%cDeleting preset %c${r.presetName}%c and its zones`,I.info,I.recognized,I.info),t.deletePreset(r),o--;else{let E=[...i].map(B=>{let Q=B.split("-");return{key:parseInt(Q[0]),velocity:parseInt(Q[1])}});pA(`%cTrimming %c${r.presetName}`,I.info,I.recognized),p(`Keys for ${r.presetName}:`,E);let c=0;for(let B=0;B<r.presetZones.length;B++){let Q=r.presetZones[B];if(Q.isGlobal)continue;let h=Q.keyRange,m=Q.velRange,f=!1;for(let S of E)if(S.key>=h.min&&S.key<=h.max&&S.velocity>=m.min&&S.velocity<=m.max){f=!0;let x=n(Q.instrument,E);p(`%cTrimmed off %c${x}%c zones from %c${Q.instrument.instrumentName}`,I.info,I.recognized,I.info,I.recognized);break}f||(c++,r.deleteZone(B),Q.instrument.useCount<1&&t.deleteInstrument(Q.instrument),B--)}p(`%cTrimmed off %c${c}%c zones from %c${r.presetName}`,I.info,I.recognized,I.info,I.recognized),P()}}t.removeUnusedElements(),t.soundFontInfo.ICMT=`NOTE: This soundfont was trimmed by SpessaSynth to only contain presets used in "${A.midiName}"
16
16
 
17
- `+t.soundFontInfo.ICMT,p("%cSoundfont modified!",I.recognized),V(),V()}removeUnusedElements(){this.instruments.forEach(A=>{A.useCount<1&&A.instrumentZones.forEach(t=>{t.isGlobal||t.sample.useCount--})}),this.instruments=this.instruments.filter(A=>A.useCount>0),this.samples=this.samples.filter(A=>A.useCount>0)}deleteInstrument(A){if(A.useCount>0)throw new Error(`Cannot delete an instrument that has ${A.useCount} usages.`);this.instruments.splice(this.instruments.indexOf(A),1),A.deleteInstrument(),this.removeUnusedElements()}deletePreset(A){A.deletePreset(),this.presets.splice(this.presets.indexOf(A),1),this.removeUnusedElements()}deleteSample(A){if(A.useCount>0)throw new Error(`Cannot delete sample that has ${A.useCount} usages.`);this.samples.splice(this.samples.indexOf(A),1),this.removeUnusedElements()}getPresetNoFallback(A,t,n=!1){let s=A===128||n&&$A(A),o;if(s?o=this.presets.find(r=>r.bank===A&&r.isDrumPreset(n)&&r.program===t):o=this.presets.find(r=>r.bank===A&&r.program===t),o)return o;if(s&&n){let r=this.presets.find(E=>E.isDrumPreset(n)&&E.program===t);if(r)return r}}getPreset(A,t,n=!1){let s=A===128||n&&$A(A),o;return s?o=this.presets.find(r=>r.bank===A&&r.isDrumPreset(n)&&r.program===t):o=this.presets.find(r=>r.bank===A&&r.program===t),o||(s?(o=this.presets.find(r=>r.isDrumPreset(n)&&r.program===t),o||(o=this.presets.find(r=>r.isDrumPreset(n)))):o=this.presets.find(r=>r.program===t&&!r.isDrumPreset(n)),o&&Y(`%cPreset ${A}.${t} not found. Replaced with %c${o.presetName} (${o.bank}.${o.program})`,I.warn,I.recognized),o||(Y(`Preset ${t} not found. Defaulting to`,this.presets[0].presetName),o=this.presets[0]),o)}getPresetByName(A){let t=this.presets.find(n=>n.presetName===A);return t||(Y("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}};Je.prototype.write=Yo;Je.prototype.writeDLS=$o;function Ar(e){pA("%cLoading instruments...",I.info);for(let A=0;A<this.instrumentAmount;A++)this.readDLSInstrument(IA(e.chunkData));V()}var Qn=class extends Ye{constructor(A,t,n){super(A),this.program=n&127;let s=t>>8&127,o=t&127;s>0?this.bank=s:this.bank=o,t>>31&&(this.bank=128),this.DLSInstrument=new He,this.DLSInstrument.addUseCount();let E=new Te;E.instrument=this.DLSInstrument,this.presetZones=[E]}};function er(e){this.verifyHeader(e,"LIST"),this.verifyText(eA(e.chunkData,4),"ins ");let A=[];for(;e.chunkData.length>e.chunkData.currentIndex;)A.push(IA(e.chunkData));let t=A.find(h=>h.header==="insh");if(!t)throw V(),new Error("No instrument header!");let n=N(t.chunkData,4),s=N(t.chunkData,4),o=N(t.chunkData,4),r=new Qn(this,s,o),E="unnamedPreset",i=ZA(A,"INFO");if(i){let h=IA(i.chunkData);for(;h.header!=="INAM";)h=IA(i.chunkData);E=eA(h.chunkData,h.chunkData.length).trim()}r.presetName=E,r.DLSInstrument.instrumentName=E,pA(`%cParsing %c"${E}"%c...`,I.info,I.recognized,I.info);let g=ZA(A,"lrgn");if(!g)throw V(),new Error("No region list!");let B=new OA;B.isGlobal=!0;let c=ZA(A,"lart"),Q=ZA(A,"lar2");(Q!==void 0||c!==void 0)&&this.readLart(c,Q,B),B.generators=B.generators.filter(h=>h.generatorValue!==X[h.generatorType].def),B.modulators.find(h=>h.modulatorDestination===a.reverbEffectsSend)===void 0&&B.modulators.push(_.copy(En)),B.modulators.find(h=>h.modulatorDestination===a.chorusEffectsSend)===void 0&&B.modulators.push(_.copy(hn)),r.DLSInstrument.instrumentZones.push(B);for(let h=0;h<n;h++){let m=IA(g.chunkData);this.verifyHeader(m,"LIST");let f=eA(m.chunkData,4);f!=="rgn "&&f!=="rgn2"&&(V(),this.parsingError(`Invalid DLS region! Expected "rgn " or "rgn2" got "${f}"`));let S=this.readRegion(m);S&&r.DLSInstrument.instrumentZones.push(S)}this.presets.push(r),this.instruments.push(r.DLSInstrument),V()}function tr(e){let A,t=!1;switch(e){default:case O.modLfo:case O.vibratoLfo:case O.coarseTune:case O.fineTune:case O.modEnv:return;case O.keyNum:A=j.noteOnKeyNum;break;case O.none:A=j.noController;break;case O.modulationWheel:A=y.modulationWheel,t=!0;break;case O.pan:A=y.pan,t=!0;break;case O.reverb:A=y.reverbDepth,t=!0;break;case O.chorus:A=y.chorusDepth,t=!0;break;case O.expression:A=y.expressionController,t=!0;break;case O.volume:A=y.mainVolume,t=!0;break;case O.velocity:A=j.noteOnVelocity;break;case O.polyPressure:A=j.polyPressure;break;case O.channelPressure:A=j.channelPressure;break;case O.pitchWheel:A=j.pitchWheel;break;case O.pitchWheelRange:A=j.pitchWheelRange;break}if(A===void 0)throw new Error(`Unknown DLS Source: ${e}`);return{enum:A,isCC:t}}function Si(e,A){switch(e){default:case R.none:return;case R.pan:return a.pan;case R.gain:return{gen:a.initialAttenuation,newAmount:A*-1};case R.pitch:return a.fineTune;case R.keyNum:return a.overridingRootKey;case R.volEnvDelay:return a.delayVolEnv;case R.volEnvAttack:return a.attackVolEnv;case R.volEnvHold:return a.holdVolEnv;case R.volEnvDecay:return a.decayVolEnv;case R.volEnvSustain:return{gen:a.sustainVolEnv,newAmount:1e3-A};case R.volEnvRelease:return a.releaseVolEnv;case R.modEnvDelay:return a.delayModEnv;case R.modEnvAttack:return a.attackModEnv;case R.modEnvHold:return a.holdModEnv;case R.modEnvDecay:return a.decayModEnv;case R.modEnvSustain:return{gen:a.sustainModEnv,newAmount:(1e3-A)/10};case R.modEnvRelease:return a.releaseModEnv;case R.filterCutoff:return a.initialFilterFc;case R.filterQ:return a.initialFilterQ;case R.chorusSend:return a.chorusEffectsSend;case R.reverbSend:return a.reverbEffectsSend;case R.modLfoFreq:return a.freqModLFO;case R.modLfoDelay:return a.delayModLFO;case R.vibLfoFreq:return a.freqVibLFO;case R.vibLfoDelay:return a.delayVibLFO}}function Di(e,A){return e===O.vibratoLfo&&A===R.pitch?a.vibLfoToPitch:e===O.modLfo&&A===R.pitch?a.modLfoToPitch:e===O.modLfo&&A===R.filterCutoff?a.modLfoToFilterFc:e===O.modLfo&&A===R.gain?a.modLfoToVolume:e===O.modEnv&&A===R.filterCutoff?a.modEnvToFilterFc:e===O.modEnv&&A===R.pitch?a.modEnvToPitch:void 0}function nr(e,A,t,n,s){let o=Di(e,t),r,E,i=!1,g=!1,B=s;if(o===void 0){let x=Si(t,s);if(x===void 0){Y(`Invalid destination: ${t}`);return}if(r=x,x.newAmount!==void 0&&(B=x.newAmount,r=x.gen),E=tr(e),E===void 0){Y(`Invalid source: ${e}`);return}}else r=o,i=!0,E={enum:j.noController,isCC:!1},g=!0;let c=tr(A);if(c===void 0){Y(`Invalid control: ${A}`);return}let Q;if(g)Q=0;else{let x=n&15,D=n>>10&15;D===GA.linear&&x!==GA.linear&&(D=x);let M=n>>14&1,w=n>>15&1;r===a.initialAttenuation&&s<0&&(w=1),Q=ie(D,M,w,E.isCC,E.enum)}r===a.initialAttenuation&&(B=Math.max(960,Math.min(0,B)));let h=n>>4&15,m=n>>8&1,f=n>>9&1,S=ie(h,m,f,c.isCC,c.enum);if(i){let x=S;S=Q,Q=x}return new _(Q,S,r,B,0)}function ss(e,A){let t=e.chunkData,n=[],s=[];N(t,4);let o=N(t,4);for(let r=0;r<o;r++){let E=N(t,2),i=N(t,2),g=N(t,2),B=N(t,2),Q=(N(t,4)|0)>>16;if(E===0&&i===0&&B===0){let h;switch(g){case R.pan:h=new U(a.pan,Q);break;case R.gain:h=new U(a.initialAttenuation,-Q*10/.4);break;case R.filterCutoff:h=new U(a.initialFilterFc,Q);break;case R.filterQ:h=new U(a.initialFilterQ,Q);break;case R.modLfoFreq:h=new U(a.freqModLFO,Q);break;case R.modLfoDelay:h=new U(a.delayModLFO,Q);break;case R.vibLfoFreq:h=new U(a.freqVibLFO,Q);break;case R.vibLfoDelay:h=new U(a.delayVibLFO,Q);break;case R.volEnvDelay:h=new U(a.delayVolEnv,Q);break;case R.volEnvAttack:h=new U(a.attackVolEnv,Q);break;case R.volEnvHold:h=new U(a.holdVolEnv,Q,!1);break;case R.volEnvDecay:h=new U(a.decayVolEnv,Q,!1);break;case R.volEnvRelease:h=new U(a.releaseVolEnv,Q);break;case R.volEnvSustain:let m=1e3-Q;h=new U(a.sustainVolEnv,m);break;case R.modEnvDelay:h=new U(a.delayModEnv,Q);break;case R.modEnvAttack:h=new U(a.attackModEnv,Q);break;case R.modEnvHold:h=new U(a.holdModEnv,Q,!1);break;case R.modEnvDecay:h=new U(a.decayModEnv,Q,!1);break;case R.modEnvRelease:h=new U(a.releaseModEnv,Q);break;case R.modEnvSustain:let f=1e3-Q;h=new U(a.sustainModEnv,f);break;case R.reverbSend:h=new U(a.reverbEffectsSend,Q);break;case R.chorusSend:h=new U(a.chorusEffectsSend,Q);break;case R.pitch:let S=Math.floor(Q/100),x=Math.floor(Q-S*100);h=new U(a.fineTune,x),n.push(new U(a.coarseTune,S));break}h&&n.push(h)}else{let h=!0,m=(f,S,x)=>{let D=f/-128;if(n.push(new U(S,D)),D<=120){let M=Math.round(.46875*f);n.forEach(w=>{w.generatorType===x&&(w.generatorValue+=M)})}};if(i===O.none?E===O.modLfo&&g===R.pitch?n.push(new U(a.modLfoToPitch,Q)):E===O.modLfo&&g===R.gain?n.push(new U(a.modLfoToVolume,Q)):E===O.modLfo&&g===R.filterCutoff?n.push(new U(a.modLfoToFilterFc,Q)):E===O.vibratoLfo&&g===R.pitch?n.push(new U(a.vibLfoToPitch,Q)):E===O.modEnv&&g===R.pitch?n.push(new U(a.modEnvToPitch,Q)):E===O.modEnv&&g===R.filterCutoff?n.push(new U(a.modEnvToFilterFc,Q)):E===O.keyNum&&g===R.pitch?n.push(new U(a.scaleTuning,Q/128)):E===O.keyNum&&g===R.volEnvHold?m(Q,a.keyNumToVolEnvHold,a.holdVolEnv):E===O.keyNum&&g===R.volEnvDecay?m(Q,a.keyNumToVolEnvDecay,a.decayVolEnv):E===O.keyNum&&g===R.modEnvHold?m(Q,a.keyNumToModEnvHold,a.holdModEnv):E===O.keyNum&&g===R.modEnvDecay?m(Q,a.keyNumToModEnvDecay,a.decayModEnv):h=!1:h=!1,h===!1){let f=nr(E,i,g,B,Q);f?(s.push(f),p("%cSucceeded converting to SF2 Modulator!",I.recognized)):Y("Failed converting to SF2 Modulator!")}}}return A&&s.push(_.copy(Bn),_.copy(cn)),{modulators:s,generators:n}}function sr(e,A,t){if(e)for(;e.chunkData.currentIndex<e.chunkData.length;){let n=IA(e.chunkData);this.verifyHeader(n,"art1","art2");let s=ss(n,!0);t.generators.push(...s.generators),t.modulators.push(...s.modulators)}if(A)for(;A.chunkData.currentIndex<A.chunkData.length;){let n=IA(A.chunkData);this.verifyHeader(n,"art2","art1");let s=ss(n,!1);t.generators.push(...s.generators),t.modulators.push(...s.modulators)}}var dn=class extends OA{constructor(A,t){super(),this.keyRange=A,this.velRange=t,this.isGlobal=!0}setWavesample(A,t,n,s,o,r,E){t!==0&&this.generators.push(new U(a.sampleModes,t)),this.generators.push(new U(a.initialAttenuation,A)),this.isGlobal=!1,E-=o.samplePitchCorrection;let i=Math.trunc(E/100);i!==0&&this.generators.push(new U(a.coarseTune,i));let g=E-i*100;if(g!==0&&this.generators.push(new U(a.fineTune,g)),t!==0){let B=n.start-o.sampleLoopStartIndex,c=n.end-o.sampleLoopEndIndex;if(B!==0){let Q=B%32768;this.generators.push(new U(a.startloopAddrsOffset,Q));let h=Math.trunc(B/32768);h!==0&&this.generators.push(new U(a.startloopAddrsCoarseOffset,h))}if(c!==0){let Q=c%32768;this.generators.push(new U(a.endloopAddrsOffset,Q));let h=Math.trunc(c/32768);h!==0&&this.generators.push(new U(a.endloopAddrsCoarseOffset,h))}}s!==o.samplePitch&&this.generators.push(new U(a.overridingRootKey,s)),this.generators.push(new U(a.sampleID,r)),this.sample=o,o.useCount++}};function or(e){let A=[];for(;e.chunkData.length>e.chunkData.currentIndex;)A.push(IA(e.chunkData));let t=A.find(Z=>Z.header==="rgnh"),n=N(t.chunkData,2),s=N(t.chunkData,2),o=N(t.chunkData,2),r=N(t.chunkData,2);o===0&&r===0&&(r=127,o=0);let E=new dn({min:n,max:s},{min:o,max:r});N(t.chunkData,2);let i=N(t.chunkData,2);i!==0&&E.generators.push(new U(a.exclusiveClass,i));let g=ZA(A,"lart"),B=ZA(A,"lar2");this.readLart(g,B,E),E.isGlobal=!1;let c=A.find(Z=>Z.header==="wsmp");N(c.chunkData,4);let Q=N(c.chunkData,2),h=Ne(c.chunkData[c.chunkData.currentIndex++],c.chunkData[c.chunkData.currentIndex++]),f=(N(c.chunkData,4)|0)/-655360;N(c.chunkData,4);let S=N(c.chunkData,4),x,D={start:0,end:0};if(S===0)x=0;else{N(c.chunkData,4),N(c.chunkData,4)===0?x=1:x=3,D.start=N(c.chunkData,4);let EA=N(c.chunkData,4);D.end=D.start+EA}let M=A.find(Z=>Z.header==="wlnk");if(M===void 0)return;N(M.chunkData,2),N(M.chunkData,2),N(M.chunkData,4);let w=N(M.chunkData,4),G=this.samples[w];if(G===void 0)throw new Error("Invalid sample ID!");let L=(f||G.sampleDbAttenuation)*10/.4;return E.setWavesample(L,x,D,Q,G,w,h),E}var un=class extends ve{sampleDbAttenuation;sampleData;constructor(A,t,n,s,o,r,E,i){super(A,t,n,s,0,1,o,r),this.sampleData=E,this.sampleDbAttenuation=i}getAudioData(){return this.sampleData}getRawData(){if(this.isCompressed){if(!this.compressedData)throw new Error("Compressed but no data?? This shouldn't happen!!");return this.compressedData}return super.getRawData()}};var rr={PCM:1,ALAW:6};function ki(e,A){let t=Math.pow(2,A*8-1),n=Math.pow(2,A*8),s,o=!1;A===1?(s=255,o=!0):s=t;let r=e.size/A,E=new Float32Array(r);for(let i=0;i<E.length;i++){let g=N(e.chunkData,A);o?E[i]=g/s-.5:(g>=t&&(g-=n),E[i]=g/s)}return E}function Fi(e,A){let t=e.size/A,n=new Float32Array(t);for(let s=0;s<n.length;s++){let o=N(e.chunkData,A),r=o^85;r&=127;let E=r>>4,i=r&15;E>0&&(i+=16),i=(i<<4)+8,E>1&&(i=i<<E-1);let g=o>127?i:-i;n[s]=g/32678}return n}function ir(e){pA("%cLoading Wave samples...",I.recognized);let A=0;for(;e.chunkData.currentIndex<e.chunkData.length;){let t=IA(e.chunkData);this.verifyHeader(t,"LIST"),this.verifyText(eA(t.chunkData,4),"wave");let n=[];for(;t.chunkData.currentIndex<t.chunkData.length;)n.push(IA(t.chunkData));let s=n.find(G=>G.header==="fmt ");if(!s)throw new Error("No fmt chunk in the wave file!");let o=N(s.chunkData,2),r=N(s.chunkData,2);if(r!==1)throw new Error(`Only mono samples are supported. Fmt reports ${r} channels`);let E=N(s.chunkData,4);N(s.chunkData,4),N(s.chunkData,2);let g=N(s.chunkData,2)/8,B=!1,c=n.find(G=>G.header==="data");c||this.parsingError("No data chunk in the WAVE chunk!");let Q;switch(o){default:B=!0,Q=new Float32Array(c.size/g);break;case rr.PCM:Q=ki(c,g);break;case rr.ALAW:Q=Fi(c,g);break}let h=ZA(n,"INFO"),m=`Unnamed ${A}`;if(h){let G=IA(h.chunkData);for(;G.header!=="INAM"&&h.chunkData.currentIndex<h.chunkData.length;)G=IA(h.chunkData);G.header==="INAM"&&(m=eA(G.chunkData,G.size).trim())}let f=60,S=0,x=0,D=Q.length-1,M=0,w=n.find(G=>G.header==="wsmp");if(w){N(w.chunkData,4),f=N(w.chunkData,2),S=Ne(w.chunkData[w.chunkData.currentIndex++],w.chunkData[w.chunkData.currentIndex++]);let G=Math.trunc(S/100);if(f+=G,S-=G*100,M=(N(w.chunkData,4)|0)/-655360,N(w.chunkData,4),N(w.chunkData,4)===1){N(w.chunkData,8),x=N(w.chunkData,4);let Z=N(w.chunkData,4);D=x+Z}}else Y("No wsmp chunk in wave... using sane defaults.");B&&console.error(`Failed to load '${m}': Unsupported format: (${o})`),this.samples.push(new un(m,E,f,S,x,D,Q,M)),A++,p(`%cLoaded sample %c${m}`,I.info,I.recognized)}V()}var Fe=class extends Je{constructor(A){super(),this.dataArray=new b(A),oe("%cParsing DLS...",I.info),this.dataArray||(V(),this.parsingError("No data provided!"));let t=IA(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(IA(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 i=IA(s.chunkData);this.soundFontInfo[i.header]=eA(i.chunkData,i.size)}this.soundFontInfo.ICMT=this.soundFontInfo.ICMT||"(No description)",this.soundFontInfo.ISBJ&&(this.soundFontInfo.ICMT+=`
17
+ `+t.soundFontInfo.ICMT,p("%cSoundfont modified!",I.recognized),P(),P()}removeUnusedElements(){this.instruments.forEach(A=>{A.useCount<1&&A.instrumentZones.forEach(t=>{t.isGlobal||t.sample.useCount--})}),this.instruments=this.instruments.filter(A=>A.useCount>0),this.samples=this.samples.filter(A=>A.useCount>0)}deleteInstrument(A){if(A.useCount>0)throw new Error(`Cannot delete an instrument that has ${A.useCount} usages.`);this.instruments.splice(this.instruments.indexOf(A),1),A.deleteInstrument(),this.removeUnusedElements()}deletePreset(A){A.deletePreset(),this.presets.splice(this.presets.indexOf(A),1),this.removeUnusedElements()}deleteSample(A){if(A.useCount>0)throw new Error(`Cannot delete sample that has ${A.useCount} usages.`);this.samples.splice(this.samples.indexOf(A),1),this.removeUnusedElements()}getPresetNoFallback(A,t,n=!1){let s=A===128||n&&Ae(A),o;if(s?o=this.presets.find(r=>r.bank===A&&r.isDrumPreset(n)&&r.program===t):o=this.presets.find(r=>r.bank===A&&r.program===t),o)return o;if(s&&n){let r=this.presets.find(g=>g.isDrumPreset(n)&&g.program===t);if(r)return r}}getPreset(A,t,n=!1){let s=A===128||n&&Ae(A),o;return s?o=this.presets.find(r=>r.bank===A&&r.isDrumPreset(n)&&r.program===t):o=this.presets.find(r=>r.bank===A&&r.program===t),o||(s?(o=this.presets.find(r=>r.isDrumPreset(n)&&r.program===t),o||(o=this.presets.find(r=>r.isDrumPreset(n)))):o=this.presets.find(r=>r.program===t&&!r.isDrumPreset(n)),o&&H(`%cPreset ${A}.${t} not found. Replaced with %c${o.presetName} (${o.bank}.${o.program})`,I.warn,I.recognized),o||(H(`Preset ${t} not found. Defaulting to`,this.presets[0].presetName),o=this.presets[0]),o)}getPresetByName(A){let t=this.presets.find(n=>n.presetName===A);return t||(H("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}};Je.prototype.write=Ho;Je.prototype.writeDLS=jo;function $o(e){pA("%cLoading instruments...",I.info);for(let A=0;A<this.instrumentAmount;A++)this.readDLSInstrument(IA(e.chunkData));P()}var Qn=class extends Ye{constructor(A,t,n){super(A),this.program=n&127;let s=t>>8&127,o=t&127;s>0?this.bank=s:this.bank=o,t>>31&&(this.bank=128),this.DLSInstrument=new He,this.DLSInstrument.addUseCount();let g=new Te;g.instrument=this.DLSInstrument,this.presetZones=[g]}};function Ar(e){this.verifyHeader(e,"LIST"),this.verifyText($(e.chunkData,4),"ins ");let A=[];for(;e.chunkData.length>e.chunkData.currentIndex;)A.push(IA(e.chunkData));let t=A.find(h=>h.header==="insh");if(!t)throw P(),new Error("No instrument header!");let n=N(t.chunkData,4),s=N(t.chunkData,4),o=N(t.chunkData,4),r=new Qn(this,s,o),g="unnamedPreset",i=WA(A,"INFO");if(i){let h=IA(i.chunkData);for(;h.header!=="INAM";)h=IA(i.chunkData);g=$(h.chunkData,h.chunkData.length).trim()}r.presetName=g,r.DLSInstrument.instrumentName=g,pA(`%cParsing %c"${g}"%c...`,I.info,I.recognized,I.info);let E=WA(A,"lrgn");if(!E)throw P(),new Error("No region list!");let c=new VA;c.isGlobal=!0;let B=WA(A,"lart"),Q=WA(A,"lar2");(Q!==void 0||B!==void 0)&&this.readLart(B,Q,c),c.generators=c.generators.filter(h=>h.generatorValue!==X[h.generatorType].def),c.modulators.find(h=>h.modulatorDestination===a.reverbEffectsSend)===void 0&&c.modulators.push(_.copy(En)),c.modulators.find(h=>h.modulatorDestination===a.chorusEffectsSend)===void 0&&c.modulators.push(_.copy(Bn)),r.DLSInstrument.instrumentZones.push(c);for(let h=0;h<n;h++){let m=IA(E.chunkData);this.verifyHeader(m,"LIST");let f=$(m.chunkData,4);f!=="rgn "&&f!=="rgn2"&&(P(),this.parsingError(`Invalid DLS region! Expected "rgn " or "rgn2" got "${f}"`));let S=this.readRegion(m);S&&r.DLSInstrument.instrumentZones.push(S)}this.presets.push(r),this.instruments.push(r.DLSInstrument),P()}function er(e){let A,t=!1;switch(e){default:case V.modLfo:case V.vibratoLfo:case V.coarseTune:case V.fineTune:case V.modEnv:return;case V.keyNum:A=j.noteOnKeyNum;break;case V.none:A=j.noController;break;case V.modulationWheel:A=y.modulationWheel,t=!0;break;case V.pan:A=y.pan,t=!0;break;case V.reverb:A=y.reverbDepth,t=!0;break;case V.chorus:A=y.chorusDepth,t=!0;break;case V.expression:A=y.expressionController,t=!0;break;case V.volume:A=y.mainVolume,t=!0;break;case V.velocity:A=j.noteOnVelocity;break;case V.polyPressure:A=j.polyPressure;break;case V.channelPressure:A=j.channelPressure;break;case V.pitchWheel:A=j.pitchWheel;break;case V.pitchWheelRange:A=j.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 w.none:return;case w.pan:return a.pan;case w.gain:return{gen:a.initialAttenuation,newAmount:A*-1};case w.pitch:return a.fineTune;case w.keyNum:return a.overridingRootKey;case w.volEnvDelay:return a.delayVolEnv;case w.volEnvAttack:return a.attackVolEnv;case w.volEnvHold:return a.holdVolEnv;case w.volEnvDecay:return a.decayVolEnv;case w.volEnvSustain:return{gen:a.sustainVolEnv,newAmount:1e3-A};case w.volEnvRelease:return a.releaseVolEnv;case w.modEnvDelay:return a.delayModEnv;case w.modEnvAttack:return a.attackModEnv;case w.modEnvHold:return a.holdModEnv;case w.modEnvDecay:return a.decayModEnv;case w.modEnvSustain:return{gen:a.sustainModEnv,newAmount:(1e3-A)/10};case w.modEnvRelease:return a.releaseModEnv;case w.filterCutoff:return a.initialFilterFc;case w.filterQ:return a.initialFilterQ;case w.chorusSend:return a.chorusEffectsSend;case w.reverbSend:return a.reverbEffectsSend;case w.modLfoFreq:return a.freqModLFO;case w.modLfoDelay:return a.delayModLFO;case w.vibLfoFreq:return a.freqVibLFO;case w.vibLfoDelay:return a.delayVibLFO}}function yi(e,A){return e===V.vibratoLfo&&A===w.pitch?a.vibLfoToPitch:e===V.modLfo&&A===w.pitch?a.modLfoToPitch:e===V.modLfo&&A===w.filterCutoff?a.modLfoToFilterFc:e===V.modLfo&&A===w.gain?a.modLfoToVolume:e===V.modEnv&&A===w.filterCutoff?a.modEnvToFilterFc:e===V.modEnv&&A===w.pitch?a.modEnvToPitch:void 0}function tr(e,A,t,n,s){let o=yi(e,t),r,g,i=!1,E=!1,c=s;if(o===void 0){let x=pi(t,s);if(x===void 0){H(`Invalid destination: ${t}`);return}if(r=x,x.newAmount!==void 0&&(c=x.newAmount,r=x.gen),g=er(e),g===void 0){H(`Invalid source: ${e}`);return}}else r=o,i=!0,g={enum:j.noController,isCC:!1},E=!0;let B=er(A);if(B===void 0){H(`Invalid control: ${A}`);return}let Q;if(E)Q=0;else{let x=n&15,D=n>>10&15;D===RA.linear&&x!==RA.linear&&(D=x);let G=n>>14&1,M=n>>15&1;r===a.initialAttenuation&&s<0&&(M=1),Q=ae(D,G,M,g.isCC,g.enum)}r===a.initialAttenuation&&(c=Math.max(960,Math.min(0,c)));let h=n>>4&15,m=n>>8&1,f=n>>9&1,S=ae(h,m,f,B.isCC,B.enum);if(i){let x=S;S=Q,Q=x}return new _(Q,S,r,c,0)}function os(e,A){let t=e.chunkData,n=[],s=[];N(t,4);let o=N(t,4);for(let r=0;r<o;r++){let g=N(t,2),i=N(t,2),E=N(t,2),c=N(t,2),Q=(N(t,4)|0)>>16;if(g===0&&i===0&&c===0){let h;switch(E){case w.pan:h=new U(a.pan,Q);break;case w.gain:h=new U(a.initialAttenuation,-Q*10/.4);break;case w.filterCutoff:h=new U(a.initialFilterFc,Q);break;case w.filterQ:h=new U(a.initialFilterQ,Q);break;case w.modLfoFreq:h=new U(a.freqModLFO,Q);break;case w.modLfoDelay:h=new U(a.delayModLFO,Q);break;case w.vibLfoFreq:h=new U(a.freqVibLFO,Q);break;case w.vibLfoDelay:h=new U(a.delayVibLFO,Q);break;case w.volEnvDelay:h=new U(a.delayVolEnv,Q);break;case w.volEnvAttack:h=new U(a.attackVolEnv,Q);break;case w.volEnvHold:h=new U(a.holdVolEnv,Q,!1);break;case w.volEnvDecay:h=new U(a.decayVolEnv,Q,!1);break;case w.volEnvRelease:h=new U(a.releaseVolEnv,Q);break;case w.volEnvSustain:let m=1e3-Q;h=new U(a.sustainVolEnv,m);break;case w.modEnvDelay:h=new U(a.delayModEnv,Q);break;case w.modEnvAttack:h=new U(a.attackModEnv,Q);break;case w.modEnvHold:h=new U(a.holdModEnv,Q,!1);break;case w.modEnvDecay:h=new U(a.decayModEnv,Q,!1);break;case w.modEnvRelease:h=new U(a.releaseModEnv,Q);break;case w.modEnvSustain:let f=1e3-Q;h=new U(a.sustainModEnv,f);break;case w.reverbSend:h=new U(a.reverbEffectsSend,Q);break;case w.chorusSend:h=new U(a.chorusEffectsSend,Q);break;case w.pitch:let S=Math.floor(Q/100),x=Math.floor(Q-S*100);h=new U(a.fineTune,x),n.push(new U(a.coarseTune,S));break}h&&n.push(h)}else{let h=!0,m=(f,S,x)=>{let D=f/-128;if(n.push(new U(S,D)),D<=120){let G=Math.round(.46875*f);n.forEach(M=>{M.generatorType===x&&(M.generatorValue+=G)})}};if(i===V.none?g===V.modLfo&&E===w.pitch?n.push(new U(a.modLfoToPitch,Q)):g===V.modLfo&&E===w.gain?n.push(new U(a.modLfoToVolume,Q)):g===V.modLfo&&E===w.filterCutoff?n.push(new U(a.modLfoToFilterFc,Q)):g===V.vibratoLfo&&E===w.pitch?n.push(new U(a.vibLfoToPitch,Q)):g===V.modEnv&&E===w.pitch?n.push(new U(a.modEnvToPitch,Q)):g===V.modEnv&&E===w.filterCutoff?n.push(new U(a.modEnvToFilterFc,Q)):g===V.keyNum&&E===w.pitch?n.push(new U(a.scaleTuning,Q/128)):g===V.keyNum&&E===w.volEnvHold?m(Q,a.keyNumToVolEnvHold,a.holdVolEnv):g===V.keyNum&&E===w.volEnvDecay?m(Q,a.keyNumToVolEnvDecay,a.decayVolEnv):g===V.keyNum&&E===w.modEnvHold?m(Q,a.keyNumToModEnvHold,a.holdModEnv):g===V.keyNum&&E===w.modEnvDecay?m(Q,a.keyNumToModEnvDecay,a.decayModEnv):h=!1:h=!1,h===!1){let f=tr(g,i,E,c,Q);f?(s.push(f),p("%cSucceeded converting to SF2 Modulator!",I.recognized)):H("Failed converting to SF2 Modulator!")}}}return A&&s.push(_.copy(hn),_.copy(cn)),{modulators:s,generators:n}}function nr(e,A,t){if(e)for(;e.chunkData.currentIndex<e.chunkData.length;){let n=IA(e.chunkData);this.verifyHeader(n,"art1","art2");let s=os(n,!0);t.generators.push(...s.generators),t.modulators.push(...s.modulators)}if(A)for(;A.chunkData.currentIndex<A.chunkData.length;){let n=IA(A.chunkData);this.verifyHeader(n,"art2","art1");let s=os(n,!1);t.generators.push(...s.generators),t.modulators.push(...s.modulators)}}var dn=class extends VA{constructor(A,t){super(),this.keyRange=A,this.velRange=t,this.isGlobal=!0}setWavesample(A,t,n,s,o,r,g){t!==0&&this.generators.push(new U(a.sampleModes,t)),this.generators.push(new U(a.initialAttenuation,A)),this.isGlobal=!1,g-=o.samplePitchCorrection;let i=Math.trunc(g/100);i!==0&&this.generators.push(new U(a.coarseTune,i));let E=g-i*100;if(E!==0&&this.generators.push(new U(a.fineTune,E)),t!==0){let c=n.start-o.sampleLoopStartIndex,B=n.end-o.sampleLoopEndIndex;if(c!==0){let Q=c%32768;this.generators.push(new U(a.startloopAddrsOffset,Q));let h=Math.trunc(c/32768);h!==0&&this.generators.push(new U(a.startloopAddrsCoarseOffset,h))}if(B!==0){let Q=B%32768;this.generators.push(new U(a.endloopAddrsOffset,Q));let h=Math.trunc(B/32768);h!==0&&this.generators.push(new U(a.endloopAddrsCoarseOffset,h))}}s!==o.samplePitch&&this.generators.push(new U(a.overridingRootKey,s)),this.generators.push(new U(a.sampleID,r)),this.sample=o,o.useCount++}};function sr(e){let A=[];for(;e.chunkData.length>e.chunkData.currentIndex;)A.push(IA(e.chunkData));let t=A.find(J=>J.header==="rgnh"),n=N(t.chunkData,2),s=N(t.chunkData,2),o=N(t.chunkData,2),r=N(t.chunkData,2);o===0&&r===0&&(r=127,o=0);let g=new dn({min:n,max:s},{min:o,max:r});N(t.chunkData,2);let i=N(t.chunkData,2);i!==0&&g.generators.push(new U(a.exclusiveClass,i));let E=WA(A,"lart"),c=WA(A,"lar2");this.readLart(E,c,g),g.isGlobal=!1;let B=A.find(J=>J.header==="wsmp");N(B.chunkData,4);let Q=N(B.chunkData,2),h=be(B.chunkData[B.chunkData.currentIndex++],B.chunkData[B.chunkData.currentIndex++]),f=(N(B.chunkData,4)|0)/-655360;N(B.chunkData,4);let S=N(B.chunkData,4),x,D={start:0,end:0};if(S===0)x=0;else{N(B.chunkData,4),N(B.chunkData,4)===0?x=1:x=3,D.start=N(B.chunkData,4);let EA=N(B.chunkData,4);D.end=D.start+EA}let G=A.find(J=>J.header==="wlnk");if(G===void 0)return;N(G.chunkData,2),N(G.chunkData,2),N(G.chunkData,4);let M=N(G.chunkData,4),R=this.samples[M];if(R===void 0)throw new Error("Invalid sample ID!");let L=(f||R.sampleDbAttenuation)*10/.4;return g.setWavesample(L,x,D,Q,R,M,h),g}var un=class extends ve{sampleDbAttenuation;sampleData;constructor(A,t,n,s,o,r,g,i){super(A,t,n,s,0,1,o,r),this.sampleData=g,this.sampleDbAttenuation=i}getAudioData(){return this.sampleData}getRawData(){if(this.isCompressed){if(!this.compressedData)throw new Error("Compressed but no data?? This shouldn't happen!!");return this.compressedData}return super.getRawData()}};var or={PCM:1,ALAW:6};function Si(e,A){let t=Math.pow(2,A*8-1),n=Math.pow(2,A*8),s,o=!1;A===1?(s=255,o=!0):s=t;let r=e.size/A,g=new Float32Array(r);for(let i=0;i<g.length;i++){let E=N(e.chunkData,A);o?g[i]=E/s-.5:(E>=t&&(E-=n),g[i]=E/s)}return g}function Di(e,A){let t=e.size/A,n=new Float32Array(t);for(let s=0;s<n.length;s++){let o=N(e.chunkData,A),r=o^85;r&=127;let g=r>>4,i=r&15;g>0&&(i+=16),i=(i<<4)+8,g>1&&(i=i<<g-1);let E=o>127?i:-i;n[s]=E/32678}return n}function rr(e){pA("%cLoading Wave samples...",I.recognized);let A=0;for(;e.chunkData.currentIndex<e.chunkData.length;){let t=IA(e.chunkData);this.verifyHeader(t,"LIST"),this.verifyText($(t.chunkData,4),"wave");let n=[];for(;t.chunkData.currentIndex<t.chunkData.length;)n.push(IA(t.chunkData));let s=n.find(R=>R.header==="fmt ");if(!s)throw new Error("No fmt chunk in the wave file!");let o=N(s.chunkData,2),r=N(s.chunkData,2);if(r!==1)throw new Error(`Only mono samples are supported. Fmt reports ${r} channels`);let g=N(s.chunkData,4);N(s.chunkData,4),N(s.chunkData,2);let E=N(s.chunkData,2)/8,c=!1,B=n.find(R=>R.header==="data");B||this.parsingError("No data chunk in the WAVE chunk!");let Q;switch(o){default:c=!0,Q=new Float32Array(B.size/E);break;case or.PCM:Q=Si(B,E);break;case or.ALAW:Q=Di(B,E);break}let h=WA(n,"INFO"),m=`Unnamed ${A}`;if(h){let R=IA(h.chunkData);for(;R.header!=="INAM"&&h.chunkData.currentIndex<h.chunkData.length;)R=IA(h.chunkData);R.header==="INAM"&&(m=$(R.chunkData,R.size).trim())}let f=60,S=0,x=0,D=Q.length-1,G=0,M=n.find(R=>R.header==="wsmp");if(M){N(M.chunkData,4),f=N(M.chunkData,2),S=be(M.chunkData[M.chunkData.currentIndex++],M.chunkData[M.chunkData.currentIndex++]);let R=Math.trunc(S/100);if(f+=R,S-=R*100,G=(N(M.chunkData,4)|0)/-655360,N(M.chunkData,4),N(M.chunkData,4)===1){N(M.chunkData,8),x=N(M.chunkData,4);let J=N(M.chunkData,4);D=x+J}}else H("No wsmp chunk in wave... using sane defaults.");c&&console.error(`Failed to load '${m}': Unsupported format: (${o})`),this.samples.push(new un(m,g,f,S,x,D,Q,G)),A++,p(`%cLoaded sample %c${m}`,I.info,I.recognized)}P()}var we=class extends Je{constructor(A){super(),this.dataArray=new b(A),ie("%cParsing DLS...",I.info),this.dataArray||(P(),this.parsingError("No data provided!"));let t=IA(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(IA(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=WA(n,"INFO");if(s)for(;s.chunkData.currentIndex<s.chunkData.length;){let i=IA(s.chunkData);this.soundFontInfo[i.header]=$(i.chunkData,i.size)}this.soundFontInfo.ICMT=this.soundFontInfo.ICMT||"(No description)",this.soundFontInfo.ISBJ&&(this.soundFontInfo.ICMT+=`
18
18
  `+this.soundFontInfo.ISBJ,delete this.soundFontInfo.ISBJ),this.soundFontInfo.ICMT+=`
19
- Converted from DLS to SF2 with SpessaSynth`;for(let[i,g]of Object.entries(this.soundFontInfo))p(`%c"${i}": %c"${g}"`,I.info,I.recognized);let o=n.find(i=>i.header==="colh");o||(V(),this.parsingError("No colh chunk!")),this.instrumentAmount=N(o.chunkData,4),p(`%cInstruments amount: %c${this.instrumentAmount}`,I.info,I.recognized);let r=ZA(n,"wvpl");r||(V(),this.parsingError("No wvpl chunk!")),this.readDLSSamples(r);let E=ZA(n,"lins");E||(V(),this.parsingError("No lins chunk!")),this.readDLSInstrumentList(E),this.presets.sort((i,g)=>i.program-g.program+(i.bank-g.bank)),this._parseInternal(),p(`%cParsing finished! %c"${this.soundFontInfo.INAM||"UNNAMED"}"%c has %c${this.presets.length} %cpresets,
20
- %c${this.instruments.length}%c instruments and %c${this.samples.length}%c samples.`,I.info,I.recognized,I.info,I.recognized,I.info,I.recognized,I.info,I.recognized,I.info),V()}verifyHeader(A,...t){for(let n of t)if(A.header.toLowerCase()===n.toLowerCase())return;V(),this.parsingError(`Invalid DLS chunk header! Expected "${t.toString()}" got "${A.header.toLowerCase()}"`)}verifyText(A,t){A.toLowerCase()!==t.toLowerCase()&&(V(),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}};Fe.prototype.readDLSInstrumentList=Ar;Fe.prototype.readDLSInstrument=er;Fe.prototype.readRegion=or;Fe.prototype.readLart=sr;Fe.prototype.readDLSSamples=ir;var os=class extends ve{constructor(A,t,n,s,o,r,E,i,g,B,c,Q,h){super(A,r,E,i,g,B,s-t/2,o-t/2),this.sampleName=A,this.sampleStartIndex=t,this.sampleEndIndex=n,this.isSampleLoaded=!1,this.sampleID=Q,this.sampleLength=this.sampleEndIndex-this.sampleStartIndex,this.sampleDataArray=c,this.sampleData=new Float32Array(0),this.isCompressed&&(this.sampleLoopStartIndex+=this.sampleStartIndex/2,this.sampleLoopEndIndex+=this.sampleStartIndex/2,this.sampleLength=99999999),this.isDataRaw=h}getRawData(){let A=this.sampleDataArray;if(this.isCompressed){if(this.compressedData)return this.compressedData;let t=A.currentIndex;return A.slice(this.sampleStartIndex/2+t,this.sampleEndIndex/2+t)}else{this.isDataRaw||super.getRawData();let t=A.currentIndex;return A.slice(t+this.sampleStartIndex,t+this.sampleEndIndex)}}decodeVorbis(){if(this.sampleLength<1)return;let A=this.sampleDataArray,t=A.currentIndex,n=A.slice(this.sampleStartIndex/2+t,this.sampleEndIndex/2+t);this.sampleData=new Float32Array(0);try{let s=me.decode(n.buffer);this.sampleData=s.data[0],this.sampleData===void 0&&Y(`Error decoding sample ${this.sampleName}: Vorbis decode returned undefined.`)}catch(s){Y(`Error decoding sample ${this.sampleName}: ${s}`),this.sampleData=new Float32Array(this.sampleLoopEndIndex+1)}}getAudioData(){return this.isSampleLoaded?this.sampleData:this.sampleLength<1?(Y(`Invalid sample ${this.sampleName}! Invalid length: ${this.sampleLength}`),new Float32Array(1)):this.isCompressed?(this.decodeVorbis(),this.isSampleLoaded=!0,this.sampleData):this.isDataRaw?this.loadUncompressedData():this.getUncompressedReadyData()}loadUncompressedData(){if(this.isCompressed)return Y("Trying to load a compressed sample via loadUncompressedData()... aborting!"),new Float32Array(0);let A=new Float32Array(this.sampleLength/2),t=this.sampleDataArray.currentIndex,n=new Int16Array(this.sampleDataArray.slice(t+this.sampleStartIndex,t+this.sampleEndIndex).buffer);for(let s=0;s<n.length;s++)A[s]=n[s]/32768;return this.sampleData=A,this.isSampleLoaded=!0,A}getUncompressedReadyData(){let A=this.sampleDataArray.slice(this.sampleStartIndex/2,this.sampleEndIndex/2);return this.sampleData=A,this.isSampleLoaded=!0,A}};function ar(e,A,t=!0){let n=[],s=0;for(;e.chunkData.length>e.chunkData.currentIndex;){let o=wi(s,e.chunkData,A,t);n.push(o),s++}return n.length>1&&n.pop(),n}function wi(e,A,t,n){let s=eA(A,20),o=N(A,4)*2,r=N(A,4)*2,E=N(A,4),i=N(A,4),g=N(A,4),B=A[A.currentIndex++];B===255&&(B=60);let c=Js(A[A.currentIndex++]),Q=N(A,2),h=N(A,2);return new os(s,o,r,E,i,g,B,c,Q,h,t,e,n)}var rs=class extends U{constructor(A){super();let t=A.currentIndex;this.generatorType=A[t+1]<<8|A[t],this.generatorValue=Ne(A[t+2],A[t+3]),A.currentIndex+=4}};function is(e){let A=[];for(;e.chunkData.length>e.chunkData.currentIndex;)A.push(new rs(e.chunkData));return A.length>1&&A.pop(),A}var as=class extends OA{constructor(A){super(),this.generatorZoneStartIndex=N(A,2),this.modulatorZoneStartIndex=N(A,2),this.modulatorZoneSize=0,this.generatorZoneSize=0,this.isGlobal=!0}setZoneSize(A,t){this.modulatorZoneSize=A,this.generatorZoneSize=t}getGenerators(A){for(let t=this.generatorZoneStartIndex;t<this.generatorZoneStartIndex+this.generatorZoneSize;t++)this.generators.push(A[t])}getModulators(A){for(let t=this.modulatorZoneStartIndex;t<this.modulatorZoneStartIndex+this.modulatorZoneSize;t++)this.modulators.push(A[t])}getSample(A){let t=this.generators.find(n=>n.generatorType===a.sampleID);t&&(this.sample=A[t.generatorValue],this.isGlobal=!1,this.sample.useCount++)}getKeyRange(){let A=this.generators.find(t=>t.generatorType===a.keyRange);A&&(this.keyRange.min=A.generatorValue&127,this.keyRange.max=A.generatorValue>>8&127)}getVelRange(){let A=this.generators.find(t=>t.generatorType===a.velRange);A&&(this.velRange.min=A.generatorValue&127,this.velRange.max=A.generatorValue>>8&127)}};function Ir(e,A,t,n){let s=[];for(;e.chunkData.length>e.chunkData.currentIndex;){let o=new as(e.chunkData);if(s.length>0){let r=o.modulatorZoneStartIndex-s[s.length-1].modulatorZoneStartIndex,E=o.generatorZoneStartIndex-s[s.length-1].generatorZoneStartIndex;s[s.length-1].setZoneSize(r,E),s[s.length-1].getGenerators(A),s[s.length-1].getModulators(t),s[s.length-1].getSample(n),s[s.length-1].getKeyRange(),s[s.length-1].getVelRange()}s.push(o)}return s.length>1&&s.pop(),s}var Is=class extends Te{constructor(A){super(),this.generatorZoneStartIndex=N(A,2),this.modulatorZoneStartIndex=N(A,2),this.modulatorZoneSize=0,this.generatorZoneSize=0,this.isGlobal=!0}setZoneSize(A,t){this.modulatorZoneSize=A,this.generatorZoneSize=t}getGenerators(A){for(let t=this.generatorZoneStartIndex;t<this.generatorZoneStartIndex+this.generatorZoneSize;t++)this.generators.push(A[t])}getModulators(A){for(let t=this.modulatorZoneStartIndex;t<this.modulatorZoneStartIndex+this.modulatorZoneSize;t++)this.modulators.push(A[t])}getInstrument(A){let t=this.generators.find(n=>n.generatorType===a.instrument);t&&(this.instrument=A[t.generatorValue],this.instrument.addUseCount(),this.isGlobal=!1)}getKeyRange(){let A=this.generators.find(t=>t.generatorType===a.keyRange);A&&(this.keyRange.min=A.generatorValue&127,this.keyRange.max=A.generatorValue>>8&127)}getVelRange(){let A=this.generators.find(t=>t.generatorType===a.velRange);A&&(this.velRange.min=A.generatorValue&127,this.velRange.max=A.generatorValue>>8&127)}};function gr(e,A,t,n){let s=[];for(;e.chunkData.length>e.chunkData.currentIndex;){let o=new Is(e.chunkData);if(s.length>0){let r=o.modulatorZoneStartIndex-s[s.length-1].modulatorZoneStartIndex,E=o.generatorZoneStartIndex-s[s.length-1].generatorZoneStartIndex;s[s.length-1].setZoneSize(r,E),s[s.length-1].getGenerators(A),s[s.length-1].getModulators(t),s[s.length-1].getInstrument(n),s[s.length-1].getKeyRange(),s[s.length-1].getVelRange()}s.push(o)}return s.length>1&&s.pop(),s}var gs=class extends Ye{constructor(A,t){super(t),this.presetName=eA(A.chunkData,20).trim().replace(/\d{3}:\d{3}/,""),this.program=N(A.chunkData,2),this.bank=N(A.chunkData,2),this.presetZoneStartIndex=N(A.chunkData,2),this.library=N(A.chunkData,4),this.genre=N(A.chunkData,4),this.morphology=N(A.chunkData,4),this.presetZonesAmount=0}getPresetZones(A,t){this.presetZonesAmount=A;for(let n=this.presetZoneStartIndex;n<this.presetZonesAmount+this.presetZoneStartIndex;n++)this.presetZones.push(t[n])}};function Cr(e,A,t){let n=[];for(;e.chunkData.length>e.chunkData.currentIndex;){let s=new gs(e,t);if(n.length>0){let o=s.presetZoneStartIndex-n[n.length-1].presetZoneStartIndex;n[n.length-1].getPresetZones(o,A)}n.push(s)}return n.length>1&&n.pop(),n}var Cs=class extends He{constructor(A){super(),this.instrumentName=eA(A.chunkData,20).trim(),this.instrumentZoneIndex=N(A.chunkData,2),this.instrumentZonesAmount=0}getInstrumentZones(A,t){this.instrumentZonesAmount=A;for(let n=this.instrumentZoneIndex;n<this.instrumentZonesAmount+this.instrumentZoneIndex;n++)this.instrumentZones.push(t[n])}};function Er(e,A){let t=[];for(;e.chunkData.length>e.chunkData.currentIndex;){let n=new Cs(e);if(t.length>0){let s=n.instrumentZoneIndex-t[t.length-1].instrumentZoneIndex;t[t.length-1].getInstrumentZones(s,A)}t.push(n)}return t.length>1&&t.pop(),t}var Es=class extends _{constructor(A){let t=N(A,2),n=N(A,2),s=Ne(A[A.currentIndex++],A[A.currentIndex++]),o=N(A,2),r=N(A,2);super(t,o,n,s,r)}};function fn(e){let A=[];for(;e.chunkData.length>e.chunkData.currentIndex;)A.push(new Es(e.chunkData));return A}var mn=class extends Je{constructor(A,t=!0){super(),t&&console.warn("Using the constructor directly is deprecated. Use loadSoundFont instead."),this.dataArray=new b(A),oe("%cParsing SoundFont...",I.info),this.dataArray||(V(),this.parsingError("No data provided!"));let n=IA(this.dataArray,!1);this.verifyHeader(n,"riff");let s=eA(this.dataArray,4).toLowerCase();if(s!=="sfbk"&&s!=="sfpk")throw V(),new SyntaxError(`Invalid soundFont! Expected "sfbk" or "sfpk" got "${s}"`);let o=s==="sfpk",r=IA(this.dataArray);for(this.verifyHeader(r,"list"),eA(r.chunkData,4);r.chunkData.length>r.chunkData.currentIndex;){let tA=IA(r.chunkData),T;switch(tA.header.toLowerCase()){case"ifil":case"iver":T=`${N(tA.chunkData,2)}.${N(tA.chunkData,2)}`,this.soundFontInfo[tA.header]=T;break;case"icmt":T=eA(tA.chunkData,tA.chunkData.length,void 0,!1),this.soundFontInfo[tA.header]=T;break;case"dmod":let $=fn(tA);$.pop(),T=`Modulators: ${$.length}`;let hA=this.defaultModulators;this.defaultModulators=$,this.defaultModulators.push(...hA.filter(sA=>!this.defaultModulators.find(oA=>_.isIdentical(sA,oA)))),this.soundFontInfo[tA.header]=tA.chunkData;break;default:T=eA(tA.chunkData,tA.chunkData.length),this.soundFontInfo[tA.header]=T}p(`%c"${tA.header}": %c"${T}"`,I.info,I.recognized)}let E=IA(this.dataArray,!1);this.verifyHeader(E,"list"),this.verifyText(eA(this.dataArray,4),"sdta"),p("%cVerifying smpl chunk...",I.warn);let i=IA(this.dataArray,!1);this.verifyHeader(i,"smpl");let g;if(o){p("%cSF2Pack detected, attempting to decode the smpl chunk...",I.info);try{g=me.decode(this.dataArray.buffer.slice(this.dataArray.currentIndex,this.dataArray.currentIndex+E.size-12)).data[0]}catch(tA){throw V(),new Error(`SF2Pack Ogg Vorbis decode error: ${tA}`)}p(`%cDecoded the smpl chunk! Length: %c${g.length}`,I.info,I.value)}else g=this.dataArray,this.sampleDataStartIndex=this.dataArray.currentIndex;p(`%cSkipping sample chunk, length: %c${E.size-12}`,I.info,I.value),this.dataArray.currentIndex+=E.size-12,p("%cLoading preset data chunk...",I.warn);let B=IA(this.dataArray);this.verifyHeader(B,"list"),eA(B.chunkData,4);let c=IA(B.chunkData);this.verifyHeader(c,"phdr");let Q=IA(B.chunkData);this.verifyHeader(Q,"pbag");let h=IA(B.chunkData);this.verifyHeader(h,"pmod");let m=IA(B.chunkData);this.verifyHeader(m,"pgen");let f=IA(B.chunkData);this.verifyHeader(f,"inst");let S=IA(B.chunkData);this.verifyHeader(S,"ibag");let x=IA(B.chunkData);this.verifyHeader(x,"imod");let D=IA(B.chunkData);this.verifyHeader(D,"igen");let M=IA(B.chunkData);this.verifyHeader(M,"shdr"),this.dataArray.currentIndex=this.sampleDataStartIndex,this.samples.push(...ar(M,g,!o));let w=is(D),G=fn(x),C=Ir(S,w,G,this.samples);this.instruments=Er(f,C);let L=is(m),Z=fn(h),EA=gr(Q,L,Z,this.instruments);this.presets.push(...Cr(c,EA,this)),this.presets.sort((tA,T)=>tA.program-T.program+(tA.bank-T.bank)),this._parseInternal(),p(`%cParsing finished! %c"${this.soundFontInfo.INAM}"%c has %c${this.presets.length} %cpresets,
21
- %c${this.instruments.length}%c instruments and %c${this.samples.length}%c samples.`,I.info,I.recognized,I.info,I.recognized,I.info,I.recognized,I.info,I.recognized,I.info),V(),o&&delete this.dataArray}verifyHeader(A,t){A.header.toLowerCase()!==t.toLowerCase()&&(V(),this.parsingError(`Invalid chunk header! Expected "${t.toLowerCase()}" got "${A.header.toLowerCase()}"`))}verifyText(A,t){A.toLowerCase()!==t.toLowerCase()&&(V(),this.parsingError(`Invalid FourCC: Expected "${t.toLowerCase()}" got "${A.toLowerCase()}"\``))}destroySoundBank(){super.destroySoundBank(),delete this.dataArray}};function Lt(e){let A=e.slice(8,12),t=new b(A);return eA(t,4,void 0,!1).toLowerCase()==="dls "?new Fe(e):new mn(e,!1)}var pn=class{constructor(A,t){this.ready=t,this.reloadManager(A)}generatePresetList(){let A={};for(let t=this.soundfontList.length-1;t>=0;t--){let n=this.soundfontList[t],s=new Set;for(let o of n.soundfont.presets){let r=`${o.bank+n.bankOffset}-${o.program}`;s.has(r)||(s.add(r),A[r]=o.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])})}}handleMessage(A,t){switch(A){case xt.addNewSoundFont:this.addNewSoundFont(t[0],t[1],t[2]);break;case xt.reloadSoundFont:this.reloadManager(t);break;case xt.deleteSoundFont:this.deleteSoundFont(t);break;case xt.rearrangeSoundFonts:this.rearrangeSoundFonts(t)}}getPresetList(){return this.presetList.slice()}reloadManager(A){let t=Lt(A);this.soundfontList=[],this.soundfontList.push({id:"main",bankOffset:0,soundfont:t}),this.generatePresetList(),this.ready()}deleteSoundFont(A){if(this.soundfontList.length===0){Y("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)throw new Error("Cannot overwrite the existing soundfont. Use soundfontManager.delete(id) instead.");this.soundfontList.push({id:t,soundfont:Lt(A),bankOffset:n}),this.generatePresetList(),this.ready()}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! This should never happen.");for(let o of this.soundfontList){let r=o.soundfont.getPresetNoFallback(A-o.bankOffset,t,n);if(r!==void 0)return r}if(A===128||n&&$A(A)){for(let o of this.soundfontList){let r=o.soundfont.presets.find(i=>i.isDrumPreset(n)&&i.program===t);if(r)return r;let E=o.soundfont.presets.find(i=>i.isDrumPreset(n));if(E)return E}return this.soundfontList[0].soundfont.presets[0]}else{for(let o of this.soundfontList){let r=o.soundfont.presets.find(E=>E.program===t&&!E.isDrumPreset(n));if(r)return r}return this.soundfontList[0].soundfont.presets[0]}}destroyManager(){this.soundfontList.forEach(A=>{A.soundfont.destroySoundBank()}),delete this.soundfontList}};var Qt={linear:0,nearestNeighbor:1,fourthOrder:2},lt=class{static getSampleLinear(A,t){let n=A.sample,s=n.cursor,o=n.sampleData;if(n.isLooping){let r=n.loopEnd-n.loopStart;for(let E=0;E<t.length;E++){for(;s>=n.loopEnd;)s-=r;let i=~~s,g=i+1;for(;g>=n.loopEnd;)g-=r;let B=s-i,c=o[g],Q=o[i];t[E]=Q+(c-Q)*B,s+=n.playbackStep*A.currentTuningCalculated}}else{if(n.loopingMode===2&&!A.isInRelease)return;for(let r=0;r<t.length;r++){let E=~~s,i=E+1;if(i>=n.end){A.finished=!0;return}let g=s-E,B=o[i],c=o[E];t[r]=c+(B-c)*g,s+=n.playbackStep*A.currentTuningCalculated}}A.sample.cursor=s}static getSampleNearest(A,t){let n=A.sample,s=n.cursor,o=n.loopEnd-n.loopStart,r=n.sampleData;if(A.sample.isLooping)for(let E=0;E<t.length;E++){for(;s>=n.loopEnd;)s-=o;let i=~~s+1;for(;i>=n.loopEnd;)i-=o;t[E]=r[i],s+=n.playbackStep*A.currentTuningCalculated}else{if(n.loopingMode===2&&!A.isInRelease)return;for(let E=0;E<t.length;E++){let i=~~s+1;if(i>=n.end){A.finished=!0;return}t[E]=r[i],s+=n.playbackStep*A.currentTuningCalculated}}n.cursor=s}static getSampleCubic(A,t){let n=A.sample,s=n.cursor,o=n.sampleData;if(n.isLooping){let r=n.loopEnd-n.loopStart;for(let E=0;E<t.length;E++){for(;s>=n.loopEnd;)s-=r;let i=~~s,g=i+1,B=g+1,c=B+1,Q=s-i;g>=n.loopEnd&&(g-=r),B>=n.loopEnd&&(B-=r),c>=n.loopEnd&&(c-=r);let h=o[i],m=o[g],f=o[B],S=o[c],x=.5*(f-h),D=h-2.5*m+2*f-.5*S,M=.5*(S-h)+1.5*(m-f);t[E]=((M*Q+D)*Q+x)*Q+m,s+=n.playbackStep*A.currentTuningCalculated}}else{if(n.loopingMode===2&&!A.isInRelease)return;for(let r=0;r<t.length;r++){let E=~~s,i=E+1,g=i+1,B=g+1,c=s-E;if(i>=n.end||g>=n.end||B>=n.end){A.finished=!0;return}let Q=o[E],h=o[i],m=o[g],f=o[B],S=.5*(m-Q),x=Q-2.5*h+2*m-.5*f,D=.5*(f-Q)+1.5*(h-m);t[r]=((D*c+x)*c+S)*c+h,s+=n.playbackStep*A.currentTuningCalculated}}A.sample.cursor=s}};var hs={addMapping:0,deleteMapping:1,clearMappings:2},yn=class{_keyMappings=[];handleMessage(A,t){switch(A){default:return;case hs.addMapping:this.addMapping(...t);break;case hs.clearMappings:this.clearMappings();break;case hs.deleteMapping:this.deleteMapping(...t)}}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){let n=this._keyMappings[A]?.[t];return n?n.velocity:-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 hr=.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 o=A.modulatedGenerators[a.initialFilterFc],r=A.filter;r.initialized?r.currentInitialFc+=(o-r.currentInitialFc)*s:(r.initialized=!0,r.currentInitialFc=o);let E=r.currentInitialFc+n,i=A.modulatedGenerators[a.initialFilterQ];if(r.currentInitialFc>13499&&E>13499&&i===0){r.currentInitialFc=13500;return}(Math.abs(r.lastTargetCutoff-E)>1||r.resonanceCb!==i)&&(r.lastTargetCutoff=E,r.resonanceCb=i,e.calculateCoefficients(r,E));for(let g=0;g<t.length;g++){let B=t[g],c=r.a0*B+r.a1*r.x1+r.a2*r.x2-r.a3*r.y1-r.a4*r.y2;r.x2=r.x1,r.x1=B,r.y2=r.y1,r.y1=c,t[g]=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 o=Mt(t);o=Math.min(o,A.maxCutoff);let r=n/10,E=ae(-(r-3.01)),i=1/Math.sqrt(ae(-r)),g=2*Math.PI*o/A.sampleRate,B=Math.cos(g),c=Math.sin(g)/(2*E),Q=(1-B)*i,h=Q/2,m=h,f=1+c,S=-2*B,x=1-c,D={};D.a0=h/f,D.a1=Q/f,D.a2=m/f,D.a3=S/f,D.a4=x/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}},Bs=new Ke(44100);Bs.resonanceCb=0;for(let e=1500;e<13500;e++)Bs.currentInitialFc=e,Ke.calculateCoefficients(Bs,e);var bA=16384,we=new Float32Array(bA+1),ze=new Float32Array(bA+1);we[0]=0;we[we.length-1]=1;ze[0]=0;ze[ze.length-1]=1;for(let e=1;e<bA-1;e++){let A=-.4166666666666667*Math.log(e/(we.length-1))/Math.LN10;ze[e]=1-A,we[we.length-1-e]=A}function _e(e,A,t,n){switch(e&&(t=1-t),A){case GA.linear:return n?t*2-1:t;case GA.switch:return t=t>.5?1:0,n?t*2-1:t;case GA.concave:return n?(t=t*2-1,t<0?-we[~~(t*-bA)]:we[~~(t*bA)]):we[~~(t*bA)];case GA.convex:return n?(t=t*2-1,t<0?-ze[~~(t*-bA)]:ze[~~(t*bA)]):ze[~~(t*bA)]}}var cs=1,ls=new Float32Array(1e3);for(let e=0;e<ls.length;e++)ls[e]=_e(0,GA.convex,e/1e3,0);var he=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[a.sustainModEnv]/1e3,t.attackDuration=Ce(A.modulatedGenerators[a.attackModEnv]);let n=(60-A.midiNote)*A.modulatedGenerators[a.keyNumToModEnvDecay],s=Ce(A.modulatedGenerators[a.decayModEnv]+n);t.decayDuration=s*(1-t.sustainLevel);let o=(60-A.midiNote)*A.modulatedGenerators[a.keyNumToModEnvHold];t.holdDuration=Ce(o+A.modulatedGenerators[a.holdModEnv]);let r=Ce(A.modulatedGenerators[a.releaseModEnv]);t.releaseDuration=r*t.releaseStartLevel,t.delayEnd=A.startTime+Ce(A.modulatedGenerators[a.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=ls[~~((1-(s.attackEnd-t)/s.attackDuration)*1e3)]:t<s.holdEnd?s.currentValue=cs:t<s.decayEnd?s.currentValue=(1-(s.decayEnd-t)/s.decayDuration)*(s.sustainLevel-cs)+cs:s.currentValue=s.sustainLevel,s.currentValue)}};var Ri=-2320,Gi=-1130,Sn=class{sampleData;playbackStep=0;cursor=0;rootKey=0;loopStart=0;loopEnd=0;end=0;loopingMode=0;isLooping=!1;constructor(A,t,n,s,o,r,E,i){this.sampleData=A,this.playbackStep=t,this.cursor=n,this.rootKey=s,this.loopStart=o,this.loopEnd=r,this.end=E,this.loopingMode=i,this.isLooping=this.loopingMode===1||this.loopingMode===3}},Ut=class e{sample;filter;generators;modulators=[];modulatedGenerators;finished=!1;isInRelease=!1;channelNumber=0;velocity=0;midiNote=0;pressure=0;targetKey=0;modulationEnvelope=new he;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,o,r,E,i,g,B){this.sample=t,this.generators=g,this.exclusiveClass=this.generators[a.exclusiveClass],this.modulatedGenerators=new Int16Array(g),this.modulators=B,this.filter=new Ke(A),this.velocity=s,this.midiNote=n,this.channelNumber=o,this.startTime=r,this.targetKey=E,this.realKey=i,this.volumeEnvelope=new Ee(A,g[a.sustainVolEnv])}static copy(A,t){let n=A.sample,s=new Sn(n.sampleData,n.playbackStep,n.cursor,n.rootKey,n.loopStart,n.loopEnd,n.end,n.loopingMode);return new e(A.volumeEnvelope.sampleRate,s,A.midiNote,A.velocity,A.channelNumber,t,A.targetKey,A.realKey,A.generators,A.modulators.map(o=>_.copy(o)))}exclusiveRelease(A){this.release(A,lr),this.modulatedGenerators[a.releaseVolEnv]=Ri,this.modulatedGenerators[a.releaseModEnv]=Gi,Ee.recalculate(this),he.recalculate(this)}release(A,t=cr){this.releaseStartTime=A,this.releaseStartTime-this.startTime<t&&(this.releaseStartTime=this.startTime+t)}};function Br(e,A,t,n){let s,o=this.midiAudioChannels[e],r=this.keyModifierManager.hasOverridePatch(e,A),E=o.getBankSelect(),i=o.preset.program;if(r){let c=this.keyModifierManager.getPatch(e,A);E=c.bank,i=c.program}let g=this.getCachedVoice(E,i,A,t);if(g!==void 0)return g.map(c=>Ut.copy(c,this.currentSynthTime));let B=o.preset;return r&&(B=this.soundfontManager.getPreset(E,i,FA(this.system))),s=B.getSamplesAndGenerators(A,t).reduce((c,Q)=>{if(Q.sample.getAudioData()===void 0)return Y(`Discarding invalid sample: ${Q.sample.sampleName}`),c;let h=new Int16Array(60);for(let w=0;w<60;w++)h[w]=Ks(w,Q.presetGenerators,Q.instrumentGenerators);h[a.initialAttenuation]=Math.floor(h[a.initialAttenuation]*.4);let m=Q.sample.samplePitch;h[a.overridingRootKey]>-1&&(m=h[a.overridingRootKey]);let f=A;h[a.keyNum]>-1&&(f=h[a.keyNum]);let S=Q.sample.sampleLoopStartIndex,x=Q.sample.sampleLoopEndIndex,D=h[a.sampleModes],M=new Sn(Q.sample.sampleData,Q.sample.sampleRate/this.sampleRate*Math.pow(2,Q.sample.samplePitchCorrection/1200),0,m,S,x,Math.floor(Q.sample.sampleData.length)-1,D);return h[a.velocity]>-1&&(t=h[a.velocity]),c.push(new Ut(this.sampleRate,M,A,t,e,this.currentSynthTime,f,n,h,Q.modulators.map(w=>_.copy(w)))),c},[]),this.setCachedVoice(E,i,A,t,s.map(c=>Ut.copy(c,this.currentSynthTime))),s}var dr=.05,Mi=4600,xi=2e3,Qr=Math.PI/2,Dn=-500,ur=500,Qs=ur-Dn,fr=new Float32Array(Qs+1),mr=new Float32Array(Qs+1);for(let e=Dn;e<=ur;e++){let A=(e-Dn)/Qs,t=e-Dn;fr[t]=Math.cos(Qr*A),mr[t]=Math.sin(Qr*A)}function pr(e,A,t,n,s,o,r,E){if(isNaN(A[0]))return;let i;e.overridePan?i=e.overridePan:(e.currentPan+=(e.modulatedGenerators[a.pan]-e.currentPan)*this.synth.panSmoothingFactor,i=e.currentPan);let g=this.synth.currentGain,B=~~(i+500),c=fr[B]*g*this.synth.panLeft,Q=mr[B]*g*this.synth.panRight;if(this.synth.effectsEnabled){let h=e.modulatedGenerators[a.reverbEffectsSend];if(h>0){let f=this.synth.reverbGain*g*(h/Mi);for(let S=0;S<A.length;S++)s[S]+=f*A[S];o.set(s)}let m=e.modulatedGenerators[a.chorusEffectsSend];if(m>0){let f=this.synth.chorusGain*m/xi,S=c*f,x=Q*f;for(let D=0;D<A.length;D++)r[D]+=S*A[D],E[D]+=x*A[D]}}if(c>0)for(let h=0;h<A.length;h++)t[h]+=c*A[h];if(Q>0)for(let h=0;h<A.length;h++)n[h]+=Q*A[h]}function yr(e=!1){p("%cStop all received!",I.info);for(let A=0;A<this.midiAudioChannels.length;A++)this.midiAudioChannels[A].stopAllNotes(e);this.callEvent("stopall",void 0)}function Sr(e,A){this.soundfontBankOffset=A,this.reloadSoundFont(e,!0),this.overrideSoundfont.samples.forEach(t=>t.getAudioData()),this._snapshot!==void 0&&(this.applySynthesizerSnapshot(this._snapshot),this.resetAllControllers())}function Dr(e,A=!1){this.clearSoundFont(!1,A);try{A?this.overrideSoundfont=Lt(e):this.soundfontManager.reloadManager(e)}catch(t){this.post({messageType:qA.soundfontError,messageData:t});return}this.getDefaultPresets(),this.midiAudioChannels.forEach(t=>t.programChange(t.preset.program)),this.postReady(),this.sendPresetList(),p("%cSpessaSynth is ready!",I.recognized)}function kr(e=!0,A=!0){this.stopAllChannels(!0),A&&(delete this.overrideSoundfont,this.overrideSoundfont=void 0),this.getDefaultPresets(),this.cachedVoices=[];for(let t=0;t<this.midiAudioChannels.length;t++){let n=this.midiAudioChannels[t];(!A||A&&n.presetUsesOverride)&&n.setPresetLock(!1),n.programChange(n.preset.program)}e&&this.sendPresetList()}function Fr(){let e=this.soundfontManager.getPresetList();this.overrideSoundfont!==void 0&&this.overrideSoundfont.presets.forEach(A=>{let t=A.bank===128?128:A.bank+this.soundfontBankOffset,n=e.find(s=>s.bank===t&&s.program===A.program);n!==void 0?n.presetName=A.presetName:e.push({presetName:A.presetName,bank:t,program:A.program})}),this.processorInitialized.then(()=>{this.callEvent("presetlistchange",e)})}function wr(e,A){if(this.overrideSoundfont){let t=e===128?128:e-this.soundfontBankOffset,n=this.overrideSoundfont.getPresetNoFallback(t,A,FA(this.system));if(n)return n}return this.soundfontManager.getPreset(e,A,FA(this.system))}function Rr(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 Gr(e){e=Math.round(e);for(let A=0;A<this.midiAudioChannels.length;A++)this.midiAudioChannels[A].setCustomController(cA.masterTuning,e)}var Tt=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 dt=class e{channelSnapshots;keyMappings;mainVolume;pan;interpolation;system;transposition;effectsConfig;static createSynthesizerSnapshot(A){let t=new e;return t.channelSnapshots=A.midiAudioChannels.map((n,s)=>Tt.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.setMasterGain(t.mainVolume),A.setMasterPan(t.pan),A.transposeAllChannels(t.transposition),A.interpolationType=t.interpolation,A.keyModifierManager.setMappings(t.keyMappings);A.midiAudioChannels.length<t.channelSnapshots.length;)A.createWorkletChannel();t.channelSnapshots.forEach((n,s)=>{Tt.applyChannelSnapshot(A,s,n)}),p("%cFinished restoring controllers!",I.info)}};function Mr(e){dt.applySnapshot(this,e),p("%cFinished applying snapshot!",I.info)}function kn(e,A,t){if(t<e)return 0;let n=(t-e)/(1/A)+.25;return Math.abs(n-~~(n+.5))*4-1}function xr(e,A,t,n,s,o,r,E){if(e.isInRelease||A>=e.releaseStartTime&&(e.isInRelease=!0,Ee.startRelease(e),he.startRelease(e),e.sample.loopingMode===3&&(e.sample.isLooping=!1)),e.modulatedGenerators[a.initialAttenuation]>2500)return e.isInRelease&&(e.finished=!0),e.finished;let i=e.targetKey,g=e.modulatedGenerators[a.fineTune]+this.channelOctaveTuning[e.midiNote]+this.channelTuningCents,B=e.modulatedGenerators[a.coarseTune],c=this.synth.tunings[this.preset.program]?.[e.realKey];if(c!==void 0&&c?.midiNote>=0&&(i=c.midiNote,g+=c.centTuning),e.portamentoFromKey>-1){let C=Math.min((A-e.startTime)/e.portamentoDuration,1),L=i-e.portamentoFromKey;B-=L*(1-C)}g+=(i-e.sample.rootKey)*e.modulatedGenerators[a.scaleTuning];let Q=e.modulatedGenerators[a.vibLfoToPitch];if(Q!==0){let C=e.startTime+Ce(e.modulatedGenerators[a.delayVibLFO]),L=Mt(e.modulatedGenerators[a.freqVibLFO]),Z=kn(C,L,A);g+=Z*(Q*this.customControllers[cA.modulationMultiplier])}let h=0,m=e.modulatedGenerators[a.modLfoToPitch],f=e.modulatedGenerators[a.modLfoToVolume],S=e.modulatedGenerators[a.modLfoToFilterFc],x=0;if(m!==0||S!==0||f!==0){let C=e.startTime+Ce(e.modulatedGenerators[a.delayModLFO]),L=Mt(e.modulatedGenerators[a.freqModLFO]),Z=kn(C,L,A);g+=Z*(m*this.customControllers[cA.modulationMultiplier]),x=-Z*f,h+=Z*S}if(this.channelVibrato.depth>0){let C=kn(e.startTime+this.channelVibrato.delay,this.channelVibrato.rate,A);C&&(g+=C*this.channelVibrato.depth)}let D=e.modulatedGenerators[a.modEnvToPitch],M=e.modulatedGenerators[a.modEnvToFilterFc];if(M!==0||D!==0){let C=he.getValue(e,A);h+=C*M,g+=C*D}let w=~~(g+B*100);w!==e.currentTuningCents&&(e.currentTuningCents=w,e.currentTuningCalculated=Math.pow(2,w/1200));let G=new Float32Array(t.length);switch(this.synth.interpolationType){case Qt.fourthOrder:lt.getSampleCubic(e,G);break;case Qt.linear:default:lt.getSampleLinear(e,G);break;case Qt.nearestNeighbor:lt.getSampleNearest(e,G);break}return Ke.apply(e,G,h,this.synth.filterSmoothingFactor),Ee.apply(e,G,x,this.synth.volumeEnvelopeSmoothingFactor),this.panVoice(e,G,t,n,s,o,r,E),e.finished}function Nr(e,A=-12e3){this.voices.forEach(t=>{t.realKey===e&&(t.modulatedGenerators[a.releaseVolEnv]=A,t.release(this.synth.currentSynthTime))})}function br(e,A=!0){e=Math.round(e),this.setCustomController(cA.channelTuning,e),A&&p(`%cFine tuning for %c${this.channelNumber}%c is now set to %c${e}%c cents.`,I.info,I.recognized,I.info,I.value,I.info)}function Lr(e){e=Math.round(e),p(`%cChannel ${this.channelNumber} modulation depth. Cents: %c${e}`,I.info,I.value),this.setCustomController(cA.modulationMultiplier,e/50)}function Ur(e){switch(this.dataEntryState){default:break;case YA.RPCoarse:case YA.RPFine:switch(this.midiControllers[y.RPNMsb]|this.midiControllers[y.RPNLsb]>>7){default:break;case 0:if(e===0)break;this.midiControllers[MA+j.pitchWheelRange]|=e;let t=(this.midiControllers[MA+j.pitchWheelRange]>>7)+e/128;p(`%cChannel ${this.channelNumber} bend range. Semitones: %c${t}`,I.info,I.value);break;case 1:let s=this.customControllers[cA.channelTuning]<<7|e;this.setTuning(s*.01220703125);break;case 5:let r=this.customControllers[cA.modulationMultiplier]*50+e/128*100;this.setModulationDepth(r);break;case 16383:this.resetParameters();break}}}var Ni=1e3/200;function Tr(e,A,t){if(A.transformAmount===0)return A.currentValue=0,0;let n;if(A.sourceUsesCC)n=e[A.sourceIndex];else{let g=A.sourceIndex+MA;switch(A.sourceIndex){case j.noController:n=16383;break;case j.noteOnKeyNum:n=t.midiNote<<7;break;case j.noteOnVelocity:n=t.velocity<<7;break;case j.polyPressure:n=t.pressure<<7;break;default:n=e[g];break}}let s=je[A.sourceCurveType][A.sourcePolarity][A.sourceDirection][n],o;if(A.secSrcUsesCC)o=e[A.secSrcIndex];else{let g=A.secSrcIndex+MA;switch(A.secSrcIndex){case j.noController:o=16383;break;case j.noteOnKeyNum:o=t.midiNote<<7;break;case j.noteOnVelocity:o=t.velocity<<7;break;case j.polyPressure:o=t.pressure<<7;break;default:o=e[g]}}let r=je[A.secSrcCurveType][A.secSrcPolarity][A.secSrcDirection][o],E=A.transformAmount;A.isEffectModulator&&E<=1e3&&(E*=Ni,E=Math.min(E,1e3));let i=s*r*E;return A.transformType===2&&(i=Math.abs(i)),A.currentValue=i,i}function Be(e,A,t=-1,n=0){let s=e.modulators,o=e.generators,r=e.modulatedGenerators;if(t===-1){r.set(o),s.forEach(g=>{let B=X[g.modulatorDestination],c=r[g.modulatorDestination]+Tr(A,g,e);r[g.modulatorDestination]=Math.max(B.min,Math.min(c,B.max))}),Ee.recalculate(e),he.recalculate(e);return}let E=new Set([a.initialAttenuation,a.delayVolEnv,a.attackVolEnv,a.holdVolEnv,a.decayVolEnv,a.sustainVolEnv,a.releaseVolEnv,a.keyNumToVolEnvHold,a.keyNumToVolEnvDecay]),i=new Set;s.forEach(g=>{if(g.sourceUsesCC===t&&g.sourceIndex===n||g.secSrcUsesCC===t&&g.secSrcIndex===n){let B=g.modulatorDestination;i.has(B)||(r[B]=o[B],Tr(A,g,e),s.forEach(c=>{if(c.modulatorDestination===B){let Q=X[g.modulatorDestination],h=r[g.modulatorDestination]+c.currentValue;r[g.modulatorDestination]=Math.max(Q.min,Math.min(h,Q.max))}}),i.add(B))}}),[...i].some(g=>E.has(g))&&Ee.recalculate(e),he.recalculate(e)}var je=[];for(let e=0;e<4;e++){je[e]=[[new Float32Array(bA),new Float32Array(bA)],[new Float32Array(bA),new Float32Array(bA)]];for(let A=0;A<bA;A++)je[e][0][0][A]=_e(0,e,A/bA,0),je[e][1][0][A]=_e(0,e,A/bA,1),je[e][0][1][A]=_e(1,e,A/bA,0),je[e][1][1][A]=_e(1,e,A/bA,1)}function vr(e,A,t=!1){if(e>127){if(!t)return;switch(e){default:return;case Os.velocityOverride:this.velocityOverride=A}}if(e>=y.lsbForControl1ModulationWheel&&e<=y.lsbForControl13EffectControl2&&e!==y.lsbForControl6DataEntry){let n=e-32;if(this.lockedControllers[n])return;this.midiControllers[n]=this.midiControllers[n]&16256|A&127,this.voices.forEach(s=>Be(s,this.midiControllers,1,n))}if(!this.lockedControllers[e]){switch(this.midiControllers[e]=A<<7,e){case y.allNotesOff:this.stopAllNotes();break;case y.allSoundOff:this.stopAllNotes(!0);break;case y.bankSelect:this.setBankSelect(A);break;case y.lsbForControl0BankSelect:this.setBankSelect(A,!0);break;case y.RPNLsb:this.dataEntryState=YA.RPFine;break;case y.RPNMsb:this.dataEntryState=YA.RPCoarse;break;case y.NRPNMsb:this.dataEntryState=YA.NRPCoarse;break;case y.NRPNLsb:this.dataEntryState=YA.NRPFine;break;case y.dataEntryMsb:this.dataEntryCoarse(A);break;case y.lsbForControl6DataEntry:this.dataEntryFine(A);break;case y.resetAllControllers:this.resetControllersRP15Compliant();break;case y.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=>Be(n,this.midiControllers,1,e));break}this.synth.callEvent("controllerchange",{channel:this.channelNumber,controllerNumber:e,controllerValue:A})}}function Hr(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 Yr(e){e&&this.stopAllNotes(!0),this.isMuted=e,this.sendChannelProperty(),this.synth.callEvent("mutechannel",{channel:this.channelNumber,isMuted:e})}function Jr(e,A=!1){this.drumChannel||(e+=this.synth.transposition);let t=Math.trunc(e),n=this.channelTransposeKeyShift+this.customControllers[cA.channelTransposeFine]/100;this.drumChannel&&!A||e===n||(t!==this.channelTransposeKeyShift&&this.controllerChange(y.allNotesOff,127),this.channelTransposeKeyShift=t,this.setCustomController(cA.channelTransposeFine,(e-t)*100),this.sendChannelProperty())}var vt={pitchBendRange:0,fineTuning:1,coarseTuning:2,modulationDepth:5,resetParameters:16383},qe={partParameter:1,vibratoRate:8,vibratoDepth:9,vibratoDelay:10,EGAttackTime:100,EGReleaseTime:102,TVFFilterCutoff:32,drumReverb:29};function Kr(e){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,o)=>{o.length>0&&(o=" "+o),p(`%c${n} for %c${this.channelNumber}%c is now set to %c${s}%c${o}.`,I.info,I.recognized,I.info,I.value,I.info)};switch(this.dataEntryState){default:case YA.Idle:break;case YA.NRPFine:if(this.lockGSNRPNParams)return;let n=this.midiControllers[y.NRPNMsb]>>7,s=this.midiControllers[y.NRPNLsb]>>7;switch(n){default:if(e===64)return;Y(`%cUnrecognized NRPN for %c${this.channelNumber}%c: %c(0x${s.toString(16).toUpperCase()} 0x${s.toString(16).toUpperCase()})%c data value: %c${e}`,I.warn,I.recognized,I.warn,I.unrecognized,I.warn,I.value);break;case qe.partParameter:switch(s){default:if(e===64)return;Y(`%cUnrecognized NRPN for %c${this.channelNumber}%c: %c(0x${n.toString(16)} 0x${s.toString(16)})%c data value: %c${e}`,I.warn,I.recognized,I.warn,I.unrecognized,I.warn,I.value);break;case qe.vibratoRate:if(e===64)return;A(),this.channelVibrato.rate=e/64*8,t("Vibrato rate",`${e} = ${this.channelVibrato.rate}`,"Hz");break;case qe.vibratoDepth:if(e===64)return;A(),this.channelVibrato.depth=e/2,t("Vibrato depth",`${e} = ${this.channelVibrato.depth}`,"cents of detune");break;case qe.vibratoDelay:if(e===64)return;A(),this.channelVibrato.delay=e/64/3,t("Vibrato delay",`${e} = ${this.channelVibrato.delay}`,"seconds");break;case qe.TVFFilterCutoff:this.controllerChange(y.brightness,e),t("Filter cutoff",e.toString(),"");break;case qe.EGAttackTime:this.controllerChange(y.attackTime,e),t("EG attack time",e.toString(),"");break;case qe.EGReleaseTime:this.controllerChange(y.releaseTime,e),t("EG release time",e.toString(),"");break}break;case qe.drumReverb:let r=e;this.controllerChange(y.reverbDepth,r),t("GS Drum reverb",r.toString(),"percent");break}break;case YA.RPCoarse:case YA.RPFine:let o=this.midiControllers[y.RPNMsb]|this.midiControllers[y.RPNLsb]>>7;switch(o){default:Y(`%cUnrecognized RPN for %c${this.channelNumber}%c: %c(0x${o.toString(16)})%c data value: %c${e}`,I.warn,I.recognized,I.warn,I.unrecognized,I.warn,I.value);break;case vt.pitchBendRange:this.midiControllers[MA+j.pitchWheelRange]=e<<7,t("Pitch bend range",e.toString(),"semitones");break;case vt.coarseTuning:let r=e-64;this.setCustomController(cA.channelTuningSemitones,r),t("Coarse tuning",r.toString(),"semitones");break;case vt.fineTuning:this.setTuning(e-64,!1);break;case vt.modulationDepth:this.setModulationDepth(e*100);break;case vt.resetParameters:this.resetParameters();break}}}var Ht={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 bi(e){if(Ht[e]!==void 0)return Ht[e];let A=null,t=null;for(let n of Object.keys(Ht))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=Ht[A],s=Ht[t];return n+(e-A)*(s-n)/(t-A)}return 0}function qr(e,A){return bi(e)*(A/30)}function Or(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,n=t;if(t>127||t<0)return;let s=this.preset.program;this.synth.tunings[s]?.[t]?.midiNote>=0&&(n=this.synth.tunings[s]?.[t].midiNote),this.velocityOverride>0&&(A=this.velocityOverride);let o=this.synth.keyModifierManager.getVelocity(this.channelNumber,t);o>-1&&(A=o);let r=-1,E=0,i=this.midiControllers[y.portamentoTime]>>7,g=this.midiControllers[y.portamentoControl],B=g>>7;if(!this.drumChannel&&B!==n&&this.midiControllers[y.portamentoOnOff]>=8192&&i>0){if(g!==1){let m=Math.abs(n-B);E=qr(i,m),r=B}this.controllerChange(y.portamentoControl,n)}let c=this.synth.getWorkletVoices(this.channelNumber,n,A,t),Q=0;this.randomPan&&(Q=Math.round(Math.random()*1e3-500));let h=this.voices;c.forEach(m=>{m.portamentoFromKey=r,m.portamentoDuration=E,m.overridePan=Q;let f=m.exclusiveClass;f!==0&&h.forEach(C=>{C.exclusiveClass===f&&C.exclusiveRelease(this.synth.currentSynthTime)}),Be(m,this.midiControllers);let S=m.modulatedGenerators[a.startAddrsOffset]+m.modulatedGenerators[a.startAddrsCoarseOffset]*32768,x=m.modulatedGenerators[a.endAddrOffset]+m.modulatedGenerators[a.endAddrsCoarseOffset]*32768,D=m.modulatedGenerators[a.startloopAddrsOffset]+m.modulatedGenerators[a.startloopAddrsCoarseOffset]*32768,M=m.modulatedGenerators[a.endloopAddrsOffset]+m.modulatedGenerators[a.endloopAddrsCoarseOffset]*32768,w=m.sample,G=C=>Math.max(0,Math.min(w.sampleData.length-1,C));if(w.cursor=G(w.cursor+S),w.end=G(w.end+x),w.loopStart=G(w.loopStart+D),w.loopEnd=G(w.loopEnd+M),w.loopEnd<w.loopStart){let C=w.loopStart;w.loopStart=w.loopEnd,w.loopEnd=C}w.loopEnd-w.loopStart<1&&(w.loopingMode=0,w.isLooping=!1),m.volumeEnvelope.attenuation=m.volumeEnvelope.attenuationTargetGain,m.currentPan=Math.max(-500,Math.min(500,m.modulatedGenerators[a.pan]))}),this.synth.totalVoicesAmount+=c.length,this.synth.totalVoicesAmount>this.synth.voiceCap&&this.synth.voiceKilling(c.length),h.push(...c),this.sendChannelProperty(),this.synth.callEvent("noteon",{midiNote:e,channel:this.channelNumber,velocity:A})}function Vr(e){if(e>127||e<0){Y("Received a noteOn for note",e,"Ignoring.");return}let A=e+this.channelTransposeKeyShift;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 Pr(e,A){this.voices.forEach(t=>{t.midiNote===e&&(t.pressure=A,Be(t,this.midiControllers,0,j.polyPressure))}),this.synth.callEvent("polypressure",{channel:this.channelNumber,midiNote:e,pressure:A})}function Zr(e){this.midiControllers[MA+j.channelPressure]=e<<7,this.voices.forEach(A=>Be(A,this.midiControllers,0,j.channelPressure)),this.synth.callEvent("channelpressure",{channel:this.channelNumber,pressure:e})}function Xr(e,A){if(this.lockedControllers[MA+j.pitchWheel])return;let t=A|e<<7;this.synth.callEvent("pitchwheel",{channel:this.channelNumber,MSB:e,LSB:A}),this.midiControllers[MA+j.pitchWheel]=t,this.voices.forEach(n=>Be(n,this.midiControllers,0,j.pitchWheel)),this.sendChannelProperty()}function Wr(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 zr(e){if(this.lockPreset)return;let A=this.getBankSelect(),t,n,s=this.isXGChannel;if(this.synth.overrideSoundfont){let o=A===128?128:A-this.synth.soundfontBankOffset,r=this.synth.overrideSoundfont.getPresetNoFallback(o,e,s);if(r)t=r.bank===128?128:r.bank+this.synth.soundfontBankOffset,n=r,this.presetUsesOverride=!0;else{n=this.synth.soundfontManager.getPreset(A,e,s);let E=this.synth.soundfontManager.soundfontList.find(i=>i.soundfont===n.parentSoundBank).bankOffset;t=n.bank-E,this.presetUsesOverride=!1}}else{n=this.synth.soundfontManager.getPreset(A,e,s);let o=this.synth.soundfontManager.soundfontList.find(r=>r.soundfont===n.parentSoundBank).bankOffset;t=n.bank-o,this.presetUsesOverride=!1}this.setPreset(n),this.sentBank=t,this.synth.callEvent("programchange",{channel:this.channelNumber,program:n.program,bank:t}),this.sendChannelProperty()}var SA=class{midiControllers=new Int16Array(jt);lockedControllers=Array(jt).fill(!1);customControllers=new Float32Array(qn);channelTransposeKeyShift=0;channelOctaveTuning=new Int8Array(128);channelTuningCents=0;holdPedal=!1;drumChannel=!1;velocityOverride=0;randomPan=!1;dataEntryState=YA.Idle;bank=0;sentBank=0;bankLSB=0;preset=void 0;lockPreset=!1;lockedSystem="gs";presetUsesOverride=!1;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}get isXGChannel(){return FA(this.synth.system)||this.lockPreset&&FA(this.lockedSystem)}setCustomController(A,t){this.customControllers[A]=t,this.updateChannelTuning()}updateChannelTuning(){this.channelTuningCents=this.customControllers[cA.channelTuning]+this.customControllers[cA.channelTransposeFine]+this.customControllers[cA.masterTuning]+this.customControllers[cA.channelTuningSemitones]*100}renderAudio(A,t,n,s,o,r){this.voices=this.voices.filter(E=>!this.renderVoice(E,this.synth.currentSynthTime,A,t,n,s,o,r))}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,Et(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 ht(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.presetUsesOverride=!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[MA+j.pitchWheel],pitchBendRangeSemitones:this.midiControllers[MA+j.pitchWheelRange]/128,isMuted:this.isMuted,isDrum:this.drumChannel,transposition:this.channelTransposeKeyShift+this.customControllers[cA.channelTransposeFine]/100,bank:this.sentBank,program:this.preset.program};this.synth.post({messageType:qA.channelPropertyChange,messageData:[this.channelNumber,A]})}};SA.prototype.renderVoice=xr;SA.prototype.panVoice=pr;SA.prototype.killNote=Nr;SA.prototype.stopAllNotes=Hr;SA.prototype.muteChannel=Yr;SA.prototype.noteOn=Or;SA.prototype.noteOff=Vr;SA.prototype.polyPressure=Pr;SA.prototype.channelPressure=Zr;SA.prototype.pitchWheel=Xr;SA.prototype.programChange=zr;SA.prototype.setTuning=br;SA.prototype.setOctaveTuning=Wr;SA.prototype.setModulationDepth=Lr;SA.prototype.transposeChannel=Jr;SA.prototype.controllerChange=vr;SA.prototype.resetControllers=oo;SA.prototype.resetControllersRP15Compliant=ro;SA.prototype.resetParameters=io;SA.prototype.dataEntryFine=Ur;SA.prototype.dataEntryCoarse=Kr;function _r(e=!1){let A=new SA(this,this.defaultPreset,this.midiAudioChannels.length);this.midiAudioChannels.push(A),A.resetControllers(),A.sendChannelProperty(),e&&this.callEvent("newchannel",void 0),A.channelNumber%16===9&&this.midiAudioChannels[this.midiAudioChannels.length-1].setDrums(!0)}function jr(e,A){e===void 0&&(e={});for(let t in A)A.hasOwnProperty(t)&&!(t in e)&&(e[t]=A[t]);return e}var $r={skipToFirstNoteOn:!0,autoPlay:!0,preservePlaybackState:!1};var cr=.03,lr=.07,ns=1,RA=class{cachedVoices=[];deviceID=XA;eventQueue=[];interpolationType=Qt.fourthOrder;sequencer=new DA(this);transposition=0;tunings=[];soundfontBankOffset=0;masterGain=ns;midiVolume=1;reverbGain=1;chorusGain=1;voiceCap=350;pan=0;panLeft=.5;panRight=.5;highPerformanceMode=!1;keyModifierManager=new yn;overrideSoundfont=void 0;midiAudioChannels=[];system=An;totalVoicesAmount=0;defaultPreset;defaultPresetUsesOverride=!1;drumPreset;defaultDrumsUsesOverride=!1;processorInitialized=me.isInitialized;currentSynthTime=0;sampleRate;constructor(A,t,n,s,o=!0,r=!0,E={},i=0){this.midiOutputsCount=A,this.effectsEnabled=o;let g=this.midiOutputsCount;this.postCallback=s,this.currentSynthTime=i,this.sampleRate=n,this.sampleTime=1/n,this.enableEventSystem=r&&typeof s=="function";for(let B=0;B<127;B++)this.tunings.push([]);try{this.soundfontManager=new pn(t,this.postReady.bind(this))}catch(B){throw this.post({messageType:qA.soundfontError,messageData:B}),B}this.sendPresetList(),this.getDefaultPresets();for(let B=0;B<g;B++)this.createWorkletChannel(!1);this.midiAudioChannels[9].preset=this.drumPreset,this.midiAudioChannels[9].drumChannel=!0,this.volumeEnvelopeSmoothingFactor=So*(44100/n),this.panSmoothingFactor=dr*(44100/n),this.filterSmoothingFactor=hr*(44100/n),this._snapshot=E?.snapshot,E&&(this._snapshot!==void 0&&(this.applySynthesizerSnapshot(this._snapshot),this.resetAllControllers()),p("%cRendering enabled! Starting render.",I.info),E.parsedMIDI&&(E?.loopCount!==void 0?(this.sequencer.loopCount=E?.loopCount,this.sequencer.loop=!0):this.sequencer.loop=!1,this.voiceCap=1/0,this.processorInitialized.then(()=>{let B=jr(E.sequencerOptions,$r);this.sequencer.skipToFirstNoteOn=B.skipToFirstNoteOn,this.sequencer.preservePlaybackState=B.preservePlaybackState,this.sequencer.loadNewSongList([E.parsedMIDI])}))),this.postReady()}get currentGain(){return this.masterGain*this.midiVolume}getDefaultPresets(){let A=this.system;this.system="xg",this.defaultPreset=this.getPreset(0,0),this.defaultPresetUsesOverride=this.overrideSoundfont?.presets?.indexOf(this.defaultPreset)>=0,this.system=A,this.drumPreset=this.getPreset(128,0),this.defaultDrumsUsesOverride=this.overrideSoundfont?.presets?.indexOf(this.drumPreset)>=0}setSystem(A){this.system=A,this.post({messageType:qA.masterParameterChange,messageData:[Ue.midiSystem,this.system]})}getCachedVoice(A,t,n,s){return this.cachedVoices?.[A]?.[t]?.[n]?.[s]}setCachedVoice(A,t,n,s,o){this.cachedVoices||(this.cachedVoices=[]),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]=o}post(A,t=!1){!this.enableEventSystem&&!t||this.postCallback&&this.postCallback(A)}postReady(){this.processorInitialized.then(()=>{this.post({messageType:qA.isFullyInitialized,messageData:void 0},!0),p("%cSpessaSynth is ready!",I.recognized)})}debugMessage(){p({channels:this.midiAudioChannels,voicesAmount:this.totalVoicesAmount})}renderAudio(A,t,n){this.renderAudioSplit(t,n,Array(16).fill(A))}renderAudioSplit(A,t,n){this.sequencer.processTick();let s=this.currentSynthTime;for(;this.eventQueue[0]?.time<=s;)this.eventQueue.shift().callback();let o=A[0],r=A[1],E=t[0],i=t[1];this.totalVoicesAmount=0,this.midiAudioChannels.forEach((g,B)=>{if(g.voices.length<1||g.isMuted)return;let c=g.voices.length,Q=B%16;g.renderAudio(n[Q][0],n[Q][1],o,r,E,i),this.totalVoicesAmount+=g.voices.length,g.voices.length!==c&&g.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,delete this.sequencer.midiData,delete this.sequencer,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,n,s){let o=()=>{let E=at(A[0]),i=E.channel+t;switch(E.status){case F.noteOn:let g=A[2];g>0?this.noteOn(i,A[1],g):this.noteOff(i,A[1]);break;case F.noteOff:n?this.midiAudioChannels[i].killNote(A[1]):this.noteOff(i,A[1]);break;case F.pitchBend:this.pitchWheel(i,A[2],A[1]);break;case F.controllerChange:this.controllerChange(i,A[1],A[2],n);break;case F.programChange:this.programChange(i,A[1]);break;case F.polyPressure:this.polyPressure(i,A[0],A[1]);break;case F.channelPressure:this.channelPressure(i,A[1]);break;case F.systemExclusive:this.systemExclusive(new b(A.slice(1)),t);break;case F.reset:this.stopAllChannels(!0),this.resetAllControllers();break;default:break}},r=s.time;r>this.currentSynthTime?(this.eventQueue.push({callback:o.bind(this),time:r}),this.eventQueue.sort((E,i)=>E.time-i.time)):o()}};RA.prototype.voiceKilling=fo;RA.prototype.getWorkletVoices=Br;RA.prototype.callEvent=Do;RA.prototype.systemExclusive=ko;RA.prototype.stopAllChannels=yr;RA.prototype.createWorkletChannel=_r;RA.prototype.resetAllControllers=so;RA.prototype.setMasterGain=wo;RA.prototype.setMasterPan=Ro;RA.prototype.setMIDIVolume=Fo;RA.prototype.transposeAllChannels=Rr;RA.prototype.setMasterTuning=Gr;RA.prototype.getPreset=wr;RA.prototype.reloadSoundFont=Dr;RA.prototype.clearSoundFont=kr;RA.prototype.setEmbeddedSoundFont=Sr;RA.prototype.sendPresetList=Fr;RA.prototype.applySynthesizerSnapshot=Mr;var Ai="spessasynth-worklet-processor";var ds=class extends AudioWorkletProcessor{alive=!0;oneOutputMode=!1;constructor(A){super();let t=A.processorOptions;this.oneOutputMode=t.midiChannels===1,this.synthesizer=new RA(16,t.soundfont,sampleRate,this.postMessageToMainThread.bind(this),!this.oneOutputMode,t?.enableEventSystem,t?.startRenderingData,currentTime),this.port.onmessage=n=>this.handleMessage(n.data)}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)){Y(`Trying to access channel ${n} which does not exist... ignoring!`);return}switch(A.messageType){case wA.midiMessage:this.synthesizer.processMessage(...t);break;case wA.customcCcChange:s.setCustomController(t[0],t[1]),s.updateChannelTuning();break;case wA.ccReset:n===XA?this.synthesizer.resetAllControllers():s.resetControllers();break;case wA.setChannelVibrato:if(n===XA)for(let i=0;i<this.synthesizer.midiAudioChannels.length;i++){let g=this.synthesizer.midiAudioChannels[i];t.rate===XA?g.disableAndLockGSNRPN():g.setVibrato(t.depth,t.rate,t.delay)}else t.rate===XA?s.disableAndLockGSNRPN():s.setVibrato(t.depth,t.rate,t.delay);break;case wA.stopAll:n===XA?this.synthesizer.stopAllChannels(t===1):s.stopAllNotes(t===1);break;case wA.killNotes:this.synthesizer.voiceKilling(t);break;case wA.muteChannel:s.muteChannel(t);break;case wA.addNewChannel:this.synthesizer.createWorkletChannel(!0);break;case wA.debugMessage:this.synthesizer.debugMessage();break;case wA.setMasterParameter:let o=t[0],r=t[1];switch(o){case Ue.masterPan:this.synthesizer.setMasterPan(r);break;case Ue.mainVolume:this.synthesizer.setMasterGain(r);break;case Ue.voicesCap:this.synthesizer.voiceCap=r;break;case Ue.interpolationType:this.synthesizer.interpolationType=r;break;case Ue.midiSystem:this.synthesizer.setSystem(r)}break;case wA.setDrums:s.setDrums(t);break;case wA.transpose:n===XA?this.synthesizer.transposeAllChannels(t[0],t[1]):s.transposeChannel(t[0],t[1]);break;case wA.highPerformanceMode:this.synthesizer.highPerformanceMode=t;break;case wA.lockController:t[0]===XA?s.setPresetLock(t[1]):s.lockedControllers[t[0]]=t[1];break;case wA.sequencerSpecific:this.synthesizer.sequencer.processMessage(t.messageType,t.messageData);break;case wA.soundFontManager:try{this.synthesizer.soundfontManager.handleMessage(t[0],t[1])}catch(i){this.postMessageToMainThread({messageType:qA.soundfontError,messageData:i})}this.synthesizer.clearSoundFont(!0,!1);break;case wA.keyModifierManager:this.synthesizer.keyModifierManager.handleMessage(t[0],t[1]);break;case wA.requestSynthesizerSnapshot:let E=dt.createSynthesizerSnapshot(this.synthesizer);this.postMessageToMainThread({messageType:qA.synthesizerSnapshot,messageData:E});break;case wA.setLogLevel:bs(t[0],t[1],t[2],t[3]);break;case wA.setEffectsGain:this.synthesizer.reverbGain=t[0],this.synthesizer.chorusGain=t[1];break;case wA.destroyWorklet:this.alive=!1,this.synthesizer.destroySynthProcessor();break;default:Y("Unrecognized event:",t);break}}process(A,t){if(!this.alive)return!1;if(this.oneOutputMode){let n=t[0],s=[];for(let o=0;o<32;o+=2)s.push([n[o],n[o+1]]);this.synthesizer.renderAudioSplit([],[],s)}else this.synthesizer.renderAudioSplit(t[0],t[1],t.slice(2));return!0}};registerProcessor(Ai,ds);p("%cProcessor succesfully registered!",I.recognized);
19
+ Converted from DLS to SF2 with SpessaSynth`;for(let[i,E]of Object.entries(this.soundFontInfo))p(`%c"${i}": %c"${E}"`,I.info,I.recognized);let o=n.find(i=>i.header==="colh");o||(P(),this.parsingError("No colh chunk!")),this.instrumentAmount=N(o.chunkData,4),p(`%cInstruments amount: %c${this.instrumentAmount}`,I.info,I.recognized);let r=WA(n,"wvpl");r||(P(),this.parsingError("No wvpl chunk!")),this.readDLSSamples(r);let g=WA(n,"lins");g||(P(),this.parsingError("No lins chunk!")),this.readDLSInstrumentList(g),this.presets.sort((i,E)=>i.program-E.program+(i.bank-E.bank)),this._parseInternal(),p(`%cParsing finished! %c"${this.soundFontInfo.INAM||"UNNAMED"}"%c has %c${this.presets.length} %cpresets,
20
+ %c${this.instruments.length}%c instruments and %c${this.samples.length}%c samples.`,I.info,I.recognized,I.info,I.recognized,I.info,I.recognized,I.info,I.recognized,I.info),P()}verifyHeader(A,...t){for(let n of t)if(A.header.toLowerCase()===n.toLowerCase())return;P(),this.parsingError(`Invalid DLS chunk header! Expected "${t.toString()}" got "${A.header.toLowerCase()}"`)}verifyText(A,t){A.toLowerCase()!==t.toLowerCase()&&(P(),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}};we.prototype.readDLSInstrumentList=$o;we.prototype.readDLSInstrument=Ar;we.prototype.readRegion=sr;we.prototype.readLart=nr;we.prototype.readDLSSamples=rr;var rs=class extends ve{constructor(A,t,n,s,o,r,g,i,E,c,B,Q,h){super(A,r,g,i,E,c,s-t/2,o-t/2),this.sampleName=A,this.sampleStartIndex=t,this.sampleEndIndex=n,this.isSampleLoaded=!1,this.sampleID=Q,this.sampleLength=this.sampleEndIndex-this.sampleStartIndex,this.sampleDataArray=B,this.sampleData=new Float32Array(0),this.isCompressed&&(this.sampleLoopStartIndex+=this.sampleStartIndex/2,this.sampleLoopEndIndex+=this.sampleStartIndex/2,this.sampleLength=99999999),this.isDataRaw=h}getRawData(){let A=this.sampleDataArray;if(this.isCompressed){if(this.compressedData)return this.compressedData;let t=A.currentIndex;return A.slice(this.sampleStartIndex/2+t,this.sampleEndIndex/2+t)}else{this.isDataRaw||super.getRawData();let t=A.currentIndex;return A.slice(t+this.sampleStartIndex,t+this.sampleEndIndex)}}decodeVorbis(){if(this.sampleLength<1)return;let A=this.sampleDataArray,t=A.currentIndex,n=A.slice(this.sampleStartIndex/2+t,this.sampleEndIndex/2+t);this.sampleData=new Float32Array(0);try{let s=pe.decode(n.buffer);this.sampleData=s.data[0],this.sampleData===void 0&&H(`Error decoding sample ${this.sampleName}: Vorbis decode returned undefined.`)}catch(s){H(`Error decoding sample ${this.sampleName}: ${s}`),this.sampleData=new Float32Array(this.sampleLoopEndIndex+1)}}getAudioData(){return this.isSampleLoaded?this.sampleData:this.sampleLength<1?(H(`Invalid sample ${this.sampleName}! Invalid length: ${this.sampleLength}`),new Float32Array(1)):this.isCompressed?(this.decodeVorbis(),this.isSampleLoaded=!0,this.sampleData):this.isDataRaw?this.loadUncompressedData():this.getUncompressedReadyData()}loadUncompressedData(){if(this.isCompressed)return H("Trying to load a compressed sample via loadUncompressedData()... aborting!"),new Float32Array(0);let A=new Float32Array(this.sampleLength/2),t=this.sampleDataArray.currentIndex,n=new Int16Array(this.sampleDataArray.slice(t+this.sampleStartIndex,t+this.sampleEndIndex).buffer);for(let s=0;s<n.length;s++)A[s]=n[s]/32768;return this.sampleData=A,this.isSampleLoaded=!0,A}getUncompressedReadyData(){let A=this.sampleDataArray.slice(this.sampleStartIndex/2,this.sampleEndIndex/2);return this.sampleData=A,this.isSampleLoaded=!0,A}};function ir(e,A,t=!0){let n=[],s=0;for(;e.chunkData.length>e.chunkData.currentIndex;){let o=ki(s,e.chunkData,A,t);n.push(o),s++}return n.length>1&&n.pop(),n}function ki(e,A,t,n){let s=$(A,20),o=N(A,4)*2,r=N(A,4)*2,g=N(A,4),i=N(A,4),E=N(A,4),c=A[A.currentIndex++];c===255&&(c=60);let B=Js(A[A.currentIndex++]),Q=N(A,2),h=N(A,2);return new rs(s,o,r,g,i,E,c,B,Q,h,t,e,n)}var is=class extends U{constructor(A){super();let t=A.currentIndex;this.generatorType=A[t+1]<<8|A[t],this.generatorValue=be(A[t+2],A[t+3]),A.currentIndex+=4}};function as(e){let A=[];for(;e.chunkData.length>e.chunkData.currentIndex;)A.push(new is(e.chunkData));return A.length>1&&A.pop(),A}var Is=class extends VA{constructor(A){super(),this.generatorZoneStartIndex=N(A,2),this.modulatorZoneStartIndex=N(A,2),this.modulatorZoneSize=0,this.generatorZoneSize=0,this.isGlobal=!0}setZoneSize(A,t){this.modulatorZoneSize=A,this.generatorZoneSize=t}getGenerators(A){for(let t=this.generatorZoneStartIndex;t<this.generatorZoneStartIndex+this.generatorZoneSize;t++)this.generators.push(A[t])}getModulators(A){for(let t=this.modulatorZoneStartIndex;t<this.modulatorZoneStartIndex+this.modulatorZoneSize;t++)this.modulators.push(A[t])}getSample(A){let t=this.generators.find(n=>n.generatorType===a.sampleID);t&&(this.sample=A[t.generatorValue],this.isGlobal=!1,this.sample.useCount++)}getKeyRange(){let A=this.generators.find(t=>t.generatorType===a.keyRange);A&&(this.keyRange.min=A.generatorValue&127,this.keyRange.max=A.generatorValue>>8&127)}getVelRange(){let A=this.generators.find(t=>t.generatorType===a.velRange);A&&(this.velRange.min=A.generatorValue&127,this.velRange.max=A.generatorValue>>8&127)}};function ar(e,A,t,n){let s=[];for(;e.chunkData.length>e.chunkData.currentIndex;){let o=new Is(e.chunkData);if(s.length>0){let r=o.modulatorZoneStartIndex-s[s.length-1].modulatorZoneStartIndex,g=o.generatorZoneStartIndex-s[s.length-1].generatorZoneStartIndex;s[s.length-1].setZoneSize(r,g),s[s.length-1].getGenerators(A),s[s.length-1].getModulators(t),s[s.length-1].getSample(n),s[s.length-1].getKeyRange(),s[s.length-1].getVelRange()}s.push(o)}return s.length>1&&s.pop(),s}var gs=class extends Te{constructor(A){super(),this.generatorZoneStartIndex=N(A,2),this.modulatorZoneStartIndex=N(A,2),this.modulatorZoneSize=0,this.generatorZoneSize=0,this.isGlobal=!0}setZoneSize(A,t){this.modulatorZoneSize=A,this.generatorZoneSize=t}getGenerators(A){for(let t=this.generatorZoneStartIndex;t<this.generatorZoneStartIndex+this.generatorZoneSize;t++)this.generators.push(A[t])}getModulators(A){for(let t=this.modulatorZoneStartIndex;t<this.modulatorZoneStartIndex+this.modulatorZoneSize;t++)this.modulators.push(A[t])}getInstrument(A){let t=this.generators.find(n=>n.generatorType===a.instrument);t&&(this.instrument=A[t.generatorValue],this.instrument.addUseCount(),this.isGlobal=!1)}getKeyRange(){let A=this.generators.find(t=>t.generatorType===a.keyRange);A&&(this.keyRange.min=A.generatorValue&127,this.keyRange.max=A.generatorValue>>8&127)}getVelRange(){let A=this.generators.find(t=>t.generatorType===a.velRange);A&&(this.velRange.min=A.generatorValue&127,this.velRange.max=A.generatorValue>>8&127)}};function Ir(e,A,t,n){let s=[];for(;e.chunkData.length>e.chunkData.currentIndex;){let o=new gs(e.chunkData);if(s.length>0){let r=o.modulatorZoneStartIndex-s[s.length-1].modulatorZoneStartIndex,g=o.generatorZoneStartIndex-s[s.length-1].generatorZoneStartIndex;s[s.length-1].setZoneSize(r,g),s[s.length-1].getGenerators(A),s[s.length-1].getModulators(t),s[s.length-1].getInstrument(n),s[s.length-1].getKeyRange(),s[s.length-1].getVelRange()}s.push(o)}return s.length>1&&s.pop(),s}var Cs=class extends Ye{constructor(A,t){super(t),this.presetName=$(A.chunkData,20).trim().replace(/\d{3}:\d{3}/,""),this.program=N(A.chunkData,2),this.bank=N(A.chunkData,2),this.presetZoneStartIndex=N(A.chunkData,2),this.library=N(A.chunkData,4),this.genre=N(A.chunkData,4),this.morphology=N(A.chunkData,4),this.presetZonesAmount=0}getPresetZones(A,t){this.presetZonesAmount=A;for(let n=this.presetZoneStartIndex;n<this.presetZonesAmount+this.presetZoneStartIndex;n++)this.presetZones.push(t[n])}};function gr(e,A,t){let n=[];for(;e.chunkData.length>e.chunkData.currentIndex;){let s=new Cs(e,t);if(n.length>0){let o=s.presetZoneStartIndex-n[n.length-1].presetZoneStartIndex;n[n.length-1].getPresetZones(o,A)}n.push(s)}return n.length>1&&n.pop(),n}var Es=class extends He{constructor(A){super(),this.instrumentName=$(A.chunkData,20).trim(),this.instrumentZoneIndex=N(A.chunkData,2),this.instrumentZonesAmount=0}getInstrumentZones(A,t){this.instrumentZonesAmount=A;for(let n=this.instrumentZoneIndex;n<this.instrumentZonesAmount+this.instrumentZoneIndex;n++)this.instrumentZones.push(t[n])}};function Cr(e,A){let t=[];for(;e.chunkData.length>e.chunkData.currentIndex;){let n=new Es(e);if(t.length>0){let s=n.instrumentZoneIndex-t[t.length-1].instrumentZoneIndex;t[t.length-1].getInstrumentZones(s,A)}t.push(n)}return t.length>1&&t.pop(),t}var Bs=class extends _{constructor(A){let t=N(A,2),n=N(A,2),s=be(A[A.currentIndex++],A[A.currentIndex++]),o=N(A,2),r=N(A,2);super(t,o,n,s,r)}};function fn(e){let A=[];for(;e.chunkData.length>e.chunkData.currentIndex;)A.push(new Bs(e.chunkData));return A}var mn=class extends Je{constructor(A,t=!0){super(),t&&console.warn("Using the constructor directly is deprecated. Use loadSoundFont instead."),this.dataArray=new b(A),ie("%cParsing SoundFont...",I.info),this.dataArray||(P(),this.parsingError("No data provided!"));let n=IA(this.dataArray,!1);this.verifyHeader(n,"riff");let s=$(this.dataArray,4).toLowerCase();if(s!=="sfbk"&&s!=="sfpk")throw P(),new SyntaxError(`Invalid soundFont! Expected "sfbk" or "sfpk" got "${s}"`);let o=s==="sfpk",r=IA(this.dataArray);for(this.verifyHeader(r,"list"),$(r.chunkData,4);r.chunkData.length>r.chunkData.currentIndex;){let tA=IA(r.chunkData),T;switch(tA.header.toLowerCase()){case"ifil":case"iver":T=`${N(tA.chunkData,2)}.${N(tA.chunkData,2)}`,this.soundFontInfo[tA.header]=T;break;case"icmt":T=$(tA.chunkData,tA.chunkData.length,void 0,!1),this.soundFontInfo[tA.header]=T;break;case"dmod":let AA=fn(tA);AA.pop(),T=`Modulators: ${AA.length}`;let BA=this.defaultModulators;this.defaultModulators=AA,this.defaultModulators.push(...BA.filter(sA=>!this.defaultModulators.find(oA=>_.isIdentical(sA,oA)))),this.soundFontInfo[tA.header]=tA.chunkData;break;default:T=$(tA.chunkData,tA.chunkData.length),this.soundFontInfo[tA.header]=T}p(`%c"${tA.header}": %c"${T}"`,I.info,I.recognized)}let g=IA(this.dataArray,!1);this.verifyHeader(g,"list"),this.verifyText($(this.dataArray,4),"sdta"),p("%cVerifying smpl chunk...",I.warn);let i=IA(this.dataArray,!1);this.verifyHeader(i,"smpl");let E;if(o){p("%cSF2Pack detected, attempting to decode the smpl chunk...",I.info);try{E=pe.decode(this.dataArray.buffer.slice(this.dataArray.currentIndex,this.dataArray.currentIndex+g.size-12)).data[0]}catch(tA){throw P(),new Error(`SF2Pack Ogg Vorbis decode error: ${tA}`)}p(`%cDecoded the smpl chunk! Length: %c${E.length}`,I.info,I.value)}else E=this.dataArray,this.sampleDataStartIndex=this.dataArray.currentIndex;p(`%cSkipping sample chunk, length: %c${g.size-12}`,I.info,I.value),this.dataArray.currentIndex+=g.size-12,p("%cLoading preset data chunk...",I.warn);let c=IA(this.dataArray);this.verifyHeader(c,"list"),$(c.chunkData,4);let B=IA(c.chunkData);this.verifyHeader(B,"phdr");let Q=IA(c.chunkData);this.verifyHeader(Q,"pbag");let h=IA(c.chunkData);this.verifyHeader(h,"pmod");let m=IA(c.chunkData);this.verifyHeader(m,"pgen");let f=IA(c.chunkData);this.verifyHeader(f,"inst");let S=IA(c.chunkData);this.verifyHeader(S,"ibag");let x=IA(c.chunkData);this.verifyHeader(x,"imod");let D=IA(c.chunkData);this.verifyHeader(D,"igen");let G=IA(c.chunkData);this.verifyHeader(G,"shdr"),this.dataArray.currentIndex=this.sampleDataStartIndex,this.samples.push(...ir(G,E,!o));let M=as(D),R=fn(x),C=ar(S,M,R,this.samples);this.instruments=Cr(f,C);let L=as(m),J=fn(h),EA=Ir(Q,L,J,this.instruments);this.presets.push(...gr(B,EA,this)),this.presets.sort((tA,T)=>tA.program-T.program+(tA.bank-T.bank)),this._parseInternal(),p(`%cParsing finished! %c"${this.soundFontInfo.INAM}"%c has %c${this.presets.length} %cpresets,
21
+ %c${this.instruments.length}%c instruments and %c${this.samples.length}%c samples.`,I.info,I.recognized,I.info,I.recognized,I.info,I.recognized,I.info,I.recognized,I.info),P(),o&&delete this.dataArray}verifyHeader(A,t){A.header.toLowerCase()!==t.toLowerCase()&&(P(),this.parsingError(`Invalid chunk header! Expected "${t.toLowerCase()}" got "${A.header.toLowerCase()}"`))}verifyText(A,t){A.toLowerCase()!==t.toLowerCase()&&(P(),this.parsingError(`Invalid FourCC: Expected "${t.toLowerCase()}" got "${A.toLowerCase()}"\``))}destroySoundBank(){super.destroySoundBank(),delete this.dataArray}};function bt(e){let A=e.slice(8,12),t=new b(A);return $(t,4,void 0,!1).toLowerCase()==="dls "?new we(e):new mn(e,!1)}var pn=class{constructor(A,t){this.ready=t,this.reloadManager(A)}generatePresetList(){let A={};for(let t=this.soundfontList.length-1;t>=0;t--){let n=this.soundfontList[t],s=new Set;for(let o of n.soundfont.presets){let r=`${o.bank+n.bankOffset}-${o.program}`;s.has(r)||(s.add(r),A[r]=o.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])})}}getPresetList(){return this.presetList.slice()}reloadManager(A){let t=bt(A);this.soundfontList=[],this.soundfontList.push({id:"main",bankOffset:0,soundfont:t}),this.generatePresetList(),this.ready()}deleteSoundFont(A){if(this.soundfontList.length===0){H("1 soundfont left. Aborting!");return}let t=this.soundfontList.findIndex(n=>n.id===A);if(t===-1){H(`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)throw new Error("Cannot overwrite the existing soundfont. Use soundfontManager.delete(id) instead.");this.soundfontList.push({id:t,soundfont:bt(A),bankOffset:n}),this.generatePresetList(),this.ready()}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! This should never happen.");for(let o of this.soundfontList){let r=o.soundfont.getPresetNoFallback(A-o.bankOffset,t,n);if(r!==void 0)return r}if(A===128||n&&Ae(A)){for(let o of this.soundfontList){let r=o.soundfont.presets.find(i=>i.isDrumPreset(n)&&i.program===t);if(r)return r;let g=o.soundfont.presets.find(i=>i.isDrumPreset(n));if(g)return g}return this.soundfontList[0].soundfont.presets[0]}else{for(let o of this.soundfontList){let r=o.soundfont.presets.find(g=>g.program===t&&!g.isDrumPreset(n));if(r)return r}return this.soundfontList[0].soundfont.presets[0]}}destroyManager(){this.soundfontList.forEach(A=>{A.soundfont.destroySoundBank()}),delete this.soundfontList}};var Qt={linear:0,nearestNeighbor:1,fourthOrder:2},lt=class{static getSampleLinear(A,t){let n=A.sample,s=n.cursor,o=n.sampleData;if(n.isLooping){let r=n.loopEnd-n.loopStart;for(let g=0;g<t.length;g++){for(;s>=n.loopEnd;)s-=r;let i=~~s,E=i+1;for(;E>=n.loopEnd;)E-=r;let c=s-i,B=o[E],Q=o[i];t[g]=Q+(B-Q)*c,s+=n.playbackStep*A.currentTuningCalculated}}else{if(n.loopingMode===2&&!A.isInRelease)return;for(let r=0;r<t.length;r++){let g=~~s,i=g+1;if(i>=n.end){A.finished=!0;return}let E=s-g,c=o[i],B=o[g];t[r]=B+(c-B)*E,s+=n.playbackStep*A.currentTuningCalculated}}A.sample.cursor=s}static getSampleNearest(A,t){let n=A.sample,s=n.cursor,o=n.loopEnd-n.loopStart,r=n.sampleData;if(A.sample.isLooping)for(let g=0;g<t.length;g++){for(;s>=n.loopEnd;)s-=o;let i=~~s+1;for(;i>=n.loopEnd;)i-=o;t[g]=r[i],s+=n.playbackStep*A.currentTuningCalculated}else{if(n.loopingMode===2&&!A.isInRelease)return;for(let g=0;g<t.length;g++){let i=~~s+1;if(i>=n.end){A.finished=!0;return}t[g]=r[i],s+=n.playbackStep*A.currentTuningCalculated}}n.cursor=s}static getSampleCubic(A,t){let n=A.sample,s=n.cursor,o=n.sampleData;if(n.isLooping){let r=n.loopEnd-n.loopStart;for(let g=0;g<t.length;g++){for(;s>=n.loopEnd;)s-=r;let i=~~s,E=i+1,c=E+1,B=c+1,Q=s-i;E>=n.loopEnd&&(E-=r),c>=n.loopEnd&&(c-=r),B>=n.loopEnd&&(B-=r);let h=o[i],m=o[E],f=o[c],S=o[B],x=.5*(f-h),D=h-2.5*m+2*f-.5*S,G=.5*(S-h)+1.5*(m-f);t[g]=((G*Q+D)*Q+x)*Q+m,s+=n.playbackStep*A.currentTuningCalculated}}else{if(n.loopingMode===2&&!A.isInRelease)return;for(let r=0;r<t.length;r++){let g=~~s,i=g+1,E=i+1,c=E+1,B=s-g;if(i>=n.end||E>=n.end||c>=n.end){A.finished=!0;return}let Q=o[g],h=o[i],m=o[E],f=o[c],S=.5*(m-Q),x=Q-2.5*h+2*m-.5*f,D=.5*(f-Q)+1.5*(h-m);t[r]=((D*B+x)*B+S)*B+h,s+=n.playbackStep*A.currentTuningCalculated}}A.sample.cursor=s}};var Sn={addMapping:0,deleteMapping:1,clearMappings:2},yn=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 Er=.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 o=A.modulatedGenerators[a.initialFilterFc],r=A.filter;r.initialized?r.currentInitialFc+=(o-r.currentInitialFc)*s:(r.initialized=!0,r.currentInitialFc=o);let g=r.currentInitialFc+n,i=A.modulatedGenerators[a.initialFilterQ];if(r.currentInitialFc>13499&&g>13499&&i===0){r.currentInitialFc=13500;return}(Math.abs(r.lastTargetCutoff-g)>1||r.resonanceCb!==i)&&(r.lastTargetCutoff=g,r.resonanceCb=i,e.calculateCoefficients(r,g));for(let E=0;E<t.length;E++){let c=t[E],B=r.a0*c+r.a1*r.x1+r.a2*r.x2-r.a3*r.y1-r.a4*r.y2;r.x2=r.x1,r.x1=c,r.y2=r.y1,r.y1=B,t[E]=B}}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 o=xt(t);o=Math.min(o,A.maxCutoff);let r=n/10,g=ge(-(r-3.01)),i=1/Math.sqrt(ge(-r)),E=2*Math.PI*o/A.sampleRate,c=Math.cos(E),B=Math.sin(E)/(2*g),Q=(1-c)*i,h=Q/2,m=h,f=1+B,S=-2*c,x=1-B,D={};D.a0=h/f,D.a1=Q/f,D.a2=m/f,D.a3=S/f,D.a4=x/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}},hs=new Ke(44100);hs.resonanceCb=0;for(let e=1500;e<13500;e++)hs.currentInitialFc=e,Ke.calculateCoefficients(hs,e);var UA=16384,Re=new Float32Array(UA+1),ze=new Float32Array(UA+1);Re[0]=0;Re[Re.length-1]=1;ze[0]=0;ze[ze.length-1]=1;for(let e=1;e<UA-1;e++){let A=-.4166666666666667*Math.log(e/(Re.length-1))/Math.LN10;ze[e]=1-A,Re[Re.length-1-e]=A}function _e(e,A,t,n){switch(e&&(t=1-t),A){case RA.linear:return n?t*2-1:t;case RA.switch:return t=t>.5?1:0,n?t*2-1:t;case RA.concave:return n?(t=t*2-1,t<0?-Re[~~(t*-UA)]:Re[~~(t*UA)]):Re[~~(t*UA)];case RA.convex:return n?(t=t*2-1,t<0?-ze[~~(t*-UA)]:ze[~~(t*UA)]):ze[~~(t*UA)]}}var cs=1,ls=new Float32Array(1e3);for(let e=0;e<ls.length;e++)ls[e]=_e(0,RA.convex,e/1e3,0);var he=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[a.sustainModEnv]/1e3,t.attackDuration=Ee(A.modulatedGenerators[a.attackModEnv]);let n=(60-A.midiNote)*A.modulatedGenerators[a.keyNumToModEnvDecay],s=Ee(A.modulatedGenerators[a.decayModEnv]+n);t.decayDuration=s*(1-t.sustainLevel);let o=(60-A.midiNote)*A.modulatedGenerators[a.keyNumToModEnvHold];t.holdDuration=Ee(o+A.modulatedGenerators[a.holdModEnv]);let r=Ee(A.modulatedGenerators[a.releaseModEnv]);t.releaseDuration=r*t.releaseStartLevel,t.delayEnd=A.startTime+Ee(A.modulatedGenerators[a.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=ls[~~((1-(s.attackEnd-t)/s.attackDuration)*1e3)]:t<s.holdEnd?s.currentValue=cs:t<s.decayEnd?s.currentValue=(1-(s.decayEnd-t)/s.decayDuration)*(s.sustainLevel-cs)+cs:s.currentValue=s.sustainLevel,s.currentValue)}};var Fi=-2320,wi=-1130,Dn=class{sampleData;playbackStep=0;cursor=0;rootKey=0;loopStart=0;loopEnd=0;end=0;loopingMode=0;isLooping=!1;constructor(A,t,n,s,o,r,g,i){this.sampleData=A,this.playbackStep=t,this.cursor=n,this.rootKey=s,this.loopStart=o,this.loopEnd=r,this.end=g,this.loopingMode=i,this.isLooping=this.loopingMode===1||this.loopingMode===3}},Lt=class e{sample;filter;gain=1;generators;modulators=[];modulatedGenerators;finished=!1;isInRelease=!1;channelNumber=0;velocity=0;midiNote=0;pressure=0;targetKey=0;modulationEnvelope=new he;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,o,r,g,i,E,c){this.sample=t,this.generators=E,this.exclusiveClass=this.generators[a.exclusiveClass],this.modulatedGenerators=new Int16Array(E),this.modulators=c,this.filter=new Ke(A),this.velocity=s,this.midiNote=n,this.channelNumber=o,this.startTime=r,this.targetKey=g,this.realKey=i,this.volumeEnvelope=new Be(A,E[a.sustainVolEnv])}static copy(A,t,n){let s=A.sample,o=new Dn(s.sampleData,s.playbackStep,s.cursor,s.rootKey,s.loopStart,s.loopEnd,s.end,s.loopingMode);return new e(A.volumeEnvelope.sampleRate,o,A.midiNote,A.velocity,A.channelNumber,t,A.targetKey,n,A.generators,A.modulators.map(r=>_.copy(r)))}exclusiveRelease(A){this.release(A,cr),this.modulatedGenerators[a.releaseVolEnv]=Fi,this.modulatedGenerators[a.releaseModEnv]=wi,Be.recalculate(this),he.recalculate(this)}release(A,t=hr){this.releaseStartTime=A,this.releaseStartTime-this.startTime<t&&(this.releaseStartTime=this.startTime+t)}};function Br(e,A,t,n){let s,o=this.midiAudioChannels[e],r=this.keyModifierManager.hasOverridePatch(e,A),g=o.getBankSelect(),i=o.preset.program;if(r){let B=this.keyModifierManager.getPatch(e,A);g=B.bank,i=B.program}let E=this.getCachedVoice(g,i,A,t);if(E!==void 0)return E.map(B=>Lt.copy(B,this.currentSynthTime,n));let c=o.preset;return r&&(c=this.soundfontManager.getPreset(g,i,kA(this.system))),s=c.getSamplesAndGenerators(A,t).reduce((B,Q)=>{if(Q.sample.getAudioData()===void 0)return H(`Discarding invalid sample: ${Q.sample.sampleName}`),B;let h=new Int16Array(60);for(let M=0;M<60;M++)h[M]=Ks(M,Q.presetGenerators,Q.instrumentGenerators);h[a.initialAttenuation]=Math.floor(h[a.initialAttenuation]*.4);let m=Q.sample.samplePitch;h[a.overridingRootKey]>-1&&(m=h[a.overridingRootKey]);let f=A;h[a.keyNum]>-1&&(f=h[a.keyNum]);let S=Q.sample.sampleLoopStartIndex,x=Q.sample.sampleLoopEndIndex,D=h[a.sampleModes],G=new Dn(Q.sample.sampleData,Q.sample.sampleRate/this.sampleRate*Math.pow(2,Q.sample.samplePitchCorrection/1200),0,m,S,x,Math.floor(Q.sample.sampleData.length)-1,D);return h[a.velocity]>-1&&(t=h[a.velocity]),B.push(new Lt(this.sampleRate,G,A,t,e,this.currentSynthTime,f,n,h,Q.modulators.map(M=>_.copy(M)))),B},[]),this.setCachedVoice(g,i,A,t,s.map(B=>Lt.copy(B,this.currentSynthTime,n))),s}var Qr=.05,Ri=4600,Gi=2e3,lr=Math.PI/2,kn=-500,dr=500,Qs=dr-kn,ur=new Float32Array(Qs+1),fr=new Float32Array(Qs+1);for(let e=kn;e<=dr;e++){let A=(e-kn)/Qs,t=e-kn;ur[t]=Math.cos(lr*A),fr[t]=Math.sin(lr*A)}function mr(e,A,t,n,s,o,r,g){if(isNaN(A[0]))return;let i;e.overridePan?i=e.overridePan:(e.currentPan+=(e.modulatedGenerators[a.pan]-e.currentPan)*this.synth.panSmoothingFactor,i=e.currentPan);let E=this.synth.currentGain*e.gain,c=~~(i+500),B=ur[c]*E*this.synth.panLeft,Q=fr[c]*E*this.synth.panRight;if(this.synth.effectsEnabled){let h=e.modulatedGenerators[a.reverbEffectsSend];if(h>0){let f=this.synth.reverbGain*E*(h/Ri);for(let S=0;S<A.length;S++)s[S]+=f*A[S];o.set(s)}let m=e.modulatedGenerators[a.chorusEffectsSend];if(m>0){let f=this.synth.chorusGain*m/Gi,S=B*f,x=Q*f;for(let D=0;D<A.length;D++)r[D]+=S*A[D],g[D]+=x*A[D]}}if(B>0)for(let h=0;h<A.length;h++)t[h]+=B*A[h];if(Q>0)for(let h=0;h<A.length;h++)n[h]+=Q*A[h]}function pr(e=!1){p("%cStop all received!",I.info);for(let A=0;A<this.midiAudioChannels.length;A++)this.midiAudioChannels[A].stopAllNotes(e);this.callEvent("stopall",void 0)}function yr(e,A){this.soundfontBankOffset=A,this.reloadSoundFont(e,!0),this.overrideSoundfont.samples.forEach(t=>t.getAudioData()),this._snapshot!==void 0&&(this.applySynthesizerSnapshot(this._snapshot),this.resetAllControllers())}function Sr(e,A=!1){this.clearSoundFont(!1,A);try{A?this.overrideSoundfont=bt(e):this.soundfontManager.reloadManager(e)}catch(t){this.post({messageType:qA.soundfontError,messageData:t});return}this.getDefaultPresets(),this.midiAudioChannels.forEach(t=>t.programChange(t.preset.program)),this.postReady(),this.sendPresetList(),p("%cSpessaSynth is ready!",I.recognized)}function Dr(e=!0,A=!0){this.stopAllChannels(!0),A&&(delete this.overrideSoundfont,this.overrideSoundfont=void 0),this.getDefaultPresets(),this.cachedVoices=[];for(let t=0;t<this.midiAudioChannels.length;t++){let n=this.midiAudioChannels[t];(!A||A&&n.presetUsesOverride)&&n.setPresetLock(!1),n.programChange(n.preset.program)}e&&this.sendPresetList()}function kr(){let e=this.soundfontManager.getPresetList();this.overrideSoundfont!==void 0&&this.overrideSoundfont.presets.forEach(A=>{let t=A.bank===128?128:A.bank+this.soundfontBankOffset,n=e.find(s=>s.bank===t&&s.program===A.program);n!==void 0?n.presetName=A.presetName:e.push({presetName:A.presetName,bank:t,program:A.program})}),this.processorInitialized.then(()=>{this.callEvent("presetlistchange",e)})}function Fr(e,A){if(this.overrideSoundfont){let t=e===128?128:e-this.soundfontBankOffset,n=this.overrideSoundfont.getPresetNoFallback(t,A,kA(this.system));if(n)return n}return this.soundfontManager.getPreset(e,A,kA(this.system))}function wr(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 Rr(e){e=Math.round(e);for(let A=0;A<this.midiAudioChannels.length;A++)this.midiAudioChannels[A].setCustomController(cA.masterTuning,e)}var Ut=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 dt=class e{channelSnapshots;keyMappings;mainVolume;pan;interpolation;system;transposition;effectsConfig;static createSynthesizerSnapshot(A){let t=new e;return t.channelSnapshots=A.midiAudioChannels.map((n,s)=>Ut.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(OA.mainVolume,t.mainVolume),A.setMasterParameter(OA.masterPan,t.pan),A.transposeAllChannels(t.transposition),A.interpolationType=t.interpolation,A.keyModifierManager.setMappings(t.keyMappings);A.midiAudioChannels.length<t.channelSnapshots.length;)A.createWorkletChannel();t.channelSnapshots.forEach((n,s)=>{Ut.applyChannelSnapshot(A,s,n)}),p("%cFinished restoring controllers!",I.info)}};function Gr(e){dt.applySnapshot(this,e),p("%cFinished applying snapshot!",I.info)}function Fn(e,A,t){if(t<e)return 0;let n=(t-e)/(1/A)+.25;return Math.abs(n-~~(n+.5))*4-1}function xr(e,A,t,n,s,o,r,g){if(e.isInRelease||A>=e.releaseStartTime&&(e.isInRelease=!0,Be.startRelease(e),he.startRelease(e),e.sample.loopingMode===3&&(e.sample.isLooping=!1)),e.modulatedGenerators[a.initialAttenuation]>2500)return e.isInRelease&&(e.finished=!0),e.finished;let i=e.targetKey,E=e.modulatedGenerators[a.fineTune]+this.channelOctaveTuning[e.midiNote]+this.channelTuningCents,c=e.modulatedGenerators[a.coarseTune],B=this.synth.tunings[this.preset.program]?.[e.realKey];if(B!==void 0&&B?.midiNote>=0&&(i=B.midiNote,E+=B.centTuning),e.portamentoFromKey>-1){let C=Math.min((A-e.startTime)/e.portamentoDuration,1),L=i-e.portamentoFromKey;c-=L*(1-C)}E+=(i-e.sample.rootKey)*e.modulatedGenerators[a.scaleTuning];let Q=e.modulatedGenerators[a.vibLfoToPitch];if(Q!==0){let C=e.startTime+Ee(e.modulatedGenerators[a.delayVibLFO]),L=xt(e.modulatedGenerators[a.freqVibLFO]),J=Fn(C,L,A);E+=J*(Q*this.customControllers[cA.modulationMultiplier])}let h=0,m=e.modulatedGenerators[a.modLfoToPitch],f=e.modulatedGenerators[a.modLfoToVolume],S=e.modulatedGenerators[a.modLfoToFilterFc],x=0;if(m!==0||S!==0||f!==0){let C=e.startTime+Ee(e.modulatedGenerators[a.delayModLFO]),L=xt(e.modulatedGenerators[a.freqModLFO]),J=Fn(C,L,A);E+=J*(m*this.customControllers[cA.modulationMultiplier]),x=-J*f,h+=J*S}if(this.channelVibrato.depth>0){let C=Fn(e.startTime+this.channelVibrato.delay,this.channelVibrato.rate,A);C&&(E+=C*this.channelVibrato.depth)}let D=e.modulatedGenerators[a.modEnvToPitch],G=e.modulatedGenerators[a.modEnvToFilterFc];if(G!==0||D!==0){let C=he.getValue(e,A);h+=C*G,E+=C*D}let M=~~(E+c*100);M!==e.currentTuningCents&&(e.currentTuningCents=M,e.currentTuningCalculated=Math.pow(2,M/1200));let R=new Float32Array(t.length);switch(this.synth.interpolationType){case Qt.fourthOrder:lt.getSampleCubic(e,R);break;case Qt.linear:default:lt.getSampleLinear(e,R);break;case Qt.nearestNeighbor:lt.getSampleNearest(e,R);break}return Ke.apply(e,R,h,this.synth.filterSmoothingFactor),Be.apply(e,R,x,this.synth.volumeEnvelopeSmoothingFactor),this.panVoice(e,R,t,n,s,o,r,g),e.finished}function Mr(e,A=-12e3){this.voices.forEach(t=>{t.realKey===e&&(t.modulatedGenerators[a.releaseVolEnv]=A,t.release(this.synth.currentSynthTime))})}function Nr(e,A=!0){e=Math.round(e),this.setCustomController(cA.channelTuning,e),A&&p(`%cFine tuning for %c${this.channelNumber}%c is now set to %c${e}%c cents.`,I.info,I.recognized,I.info,I.value,I.info)}function br(e){e=Math.round(e),p(`%cChannel ${this.channelNumber} modulation depth. Cents: %c${e}`,I.info,I.value),this.setCustomController(cA.modulationMultiplier,e/50)}function Lr(e){switch(this.dataEntryState){default:break;case YA.RPCoarse:case YA.RPFine:switch(this.midiControllers[y.RPNMsb]|this.midiControllers[y.RPNLsb]>>7){default:break;case 0:if(e===0)break;this.midiControllers[GA+j.pitchWheelRange]|=e;let t=(this.midiControllers[GA+j.pitchWheelRange]>>7)+e/128;p(`%cChannel ${this.channelNumber} bend range. Semitones: %c${t}`,I.info,I.value);break;case 1:let s=this.customControllers[cA.channelTuning]<<7|e;this.setTuning(s*.01220703125);break;case 5:let r=this.customControllers[cA.modulationMultiplier]*50+e/128*100;this.setModulationDepth(r);break;case 16383:this.resetParameters();break}}}var xi=1e3/200;function Ur(e,A,t){if(A.transformAmount===0)return A.currentValue=0,0;let n;if(A.sourceUsesCC)n=e[A.sourceIndex];else{let E=A.sourceIndex+GA;switch(A.sourceIndex){case j.noController:n=16383;break;case j.noteOnKeyNum:n=t.midiNote<<7;break;case j.noteOnVelocity:n=t.velocity<<7;break;case j.polyPressure:n=t.pressure<<7;break;default:n=e[E];break}}let s=je[A.sourceCurveType][A.sourcePolarity][A.sourceDirection][n],o;if(A.secSrcUsesCC)o=e[A.secSrcIndex];else{let E=A.secSrcIndex+GA;switch(A.secSrcIndex){case j.noController:o=16383;break;case j.noteOnKeyNum:o=t.midiNote<<7;break;case j.noteOnVelocity:o=t.velocity<<7;break;case j.polyPressure:o=t.pressure<<7;break;default:o=e[E]}}let r=je[A.secSrcCurveType][A.secSrcPolarity][A.secSrcDirection][o],g=A.transformAmount;A.isEffectModulator&&g<=1e3&&(g*=xi,g=Math.min(g,1e3));let i=s*r*g;return A.transformType===2&&(i=Math.abs(i)),A.currentValue=i,i}function ce(e,A,t=-1,n=0){let s=e.modulators,o=e.generators,r=e.modulatedGenerators;if(t===-1){r.set(o),s.forEach(E=>{let c=X[E.modulatorDestination],B=r[E.modulatorDestination]+Ur(A,E,e);r[E.modulatorDestination]=Math.max(c.min,Math.min(B,c.max))}),Be.recalculate(e),he.recalculate(e);return}let g=new Set([a.initialAttenuation,a.delayVolEnv,a.attackVolEnv,a.holdVolEnv,a.decayVolEnv,a.sustainVolEnv,a.releaseVolEnv,a.keyNumToVolEnvHold,a.keyNumToVolEnvDecay]),i=new Set;s.forEach(E=>{if(E.sourceUsesCC===t&&E.sourceIndex===n||E.secSrcUsesCC===t&&E.secSrcIndex===n){let c=E.modulatorDestination;i.has(c)||(r[c]=o[c],Ur(A,E,e),s.forEach(B=>{if(B.modulatorDestination===c){let Q=X[E.modulatorDestination],h=r[E.modulatorDestination]+B.currentValue;r[E.modulatorDestination]=Math.max(Q.min,Math.min(h,Q.max))}}),i.add(c))}}),[...i].some(E=>g.has(E))&&Be.recalculate(e),he.recalculate(e)}var je=[];for(let e=0;e<4;e++){je[e]=[[new Float32Array(UA),new Float32Array(UA)],[new Float32Array(UA),new Float32Array(UA)]];for(let A=0;A<UA;A++)je[e][0][0][A]=_e(0,e,A/UA,0),je[e][1][0][A]=_e(0,e,A/UA,1),je[e][0][1][A]=_e(1,e,A/UA,0),je[e][1][1][A]=_e(1,e,A/UA,1)}function Tr(e,A,t=!1){if(e>127){if(!t)return;switch(e){default:return;case Os.velocityOverride:this.velocityOverride=A}}if(e>=y.lsbForControl1ModulationWheel&&e<=y.lsbForControl13EffectControl2&&e!==y.lsbForControl6DataEntry){let n=e-32;if(this.lockedControllers[n])return;this.midiControllers[n]=this.midiControllers[n]&16256|A&127,this.voices.forEach(s=>ce(s,this.midiControllers,1,n))}if(!this.lockedControllers[e]){switch(this.midiControllers[e]=A<<7,e){case y.allNotesOff:this.stopAllNotes();break;case y.allSoundOff:this.stopAllNotes(!0);break;case y.bankSelect:this.setBankSelect(A);break;case y.lsbForControl0BankSelect:this.setBankSelect(A,!0);break;case y.RPNLsb:this.dataEntryState=YA.RPFine;break;case y.RPNMsb:this.dataEntryState=YA.RPCoarse;break;case y.NRPNMsb:this.dataEntryState=YA.NRPCoarse;break;case y.NRPNLsb:this.dataEntryState=YA.NRPFine;break;case y.dataEntryMsb:this.dataEntryCoarse(A);break;case y.lsbForControl6DataEntry:this.dataEntryFine(A);break;case y.resetAllControllers:this.resetControllersRP15Compliant();break;case y.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=>ce(n,this.midiControllers,1,e));break}this.synth.callEvent("controllerchange",{channel:this.channelNumber,controllerNumber:e,controllerValue:A})}}function vr(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 Hr(e){e&&this.stopAllNotes(!0),this.isMuted=e,this.sendChannelProperty(),this.synth.callEvent("mutechannel",{channel:this.channelNumber,isMuted:e})}function Yr(e,A=!1){this.drumChannel||(e+=this.synth.transposition);let t=Math.trunc(e),n=this.channelTransposeKeyShift+this.customControllers[cA.channelTransposeFine]/100;this.drumChannel&&!A||e===n||(t!==this.channelTransposeKeyShift&&this.controllerChange(y.allNotesOff,127),this.channelTransposeKeyShift=t,this.setCustomController(cA.channelTransposeFine,(e-t)*100),this.sendChannelProperty())}var Tt={pitchBendRange:0,fineTuning:1,coarseTuning:2,modulationDepth:5,resetParameters:16383},qe={partParameter:1,vibratoRate:8,vibratoDepth:9,vibratoDelay:10,EGAttackTime:100,EGReleaseTime:102,TVFFilterCutoff:32,drumReverb:29};function Jr(e){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,o)=>{o.length>0&&(o=" "+o),p(`%c${n} for %c${this.channelNumber}%c is now set to %c${s}%c${o}.`,I.info,I.recognized,I.info,I.value,I.info)};switch(this.dataEntryState){default:case YA.Idle:break;case YA.NRPFine:if(this.lockGSNRPNParams)return;let n=this.midiControllers[y.NRPNMsb]>>7,s=this.midiControllers[y.NRPNLsb]>>7;switch(n){default:if(e===64)return;H(`%cUnrecognized NRPN for %c${this.channelNumber}%c: %c(0x${s.toString(16).toUpperCase()} 0x${s.toString(16).toUpperCase()})%c data value: %c${e}`,I.warn,I.recognized,I.warn,I.unrecognized,I.warn,I.value);break;case qe.partParameter:switch(s){default:if(e===64)return;H(`%cUnrecognized NRPN for %c${this.channelNumber}%c: %c(0x${n.toString(16)} 0x${s.toString(16)})%c data value: %c${e}`,I.warn,I.recognized,I.warn,I.unrecognized,I.warn,I.value);break;case qe.vibratoRate:if(e===64)return;A(),this.channelVibrato.rate=e/64*8,t("Vibrato rate",`${e} = ${this.channelVibrato.rate}`,"Hz");break;case qe.vibratoDepth:if(e===64)return;A(),this.channelVibrato.depth=e/2,t("Vibrato depth",`${e} = ${this.channelVibrato.depth}`,"cents of detune");break;case qe.vibratoDelay:if(e===64)return;A(),this.channelVibrato.delay=e/64/3,t("Vibrato delay",`${e} = ${this.channelVibrato.delay}`,"seconds");break;case qe.TVFFilterCutoff:this.controllerChange(y.brightness,e),t("Filter cutoff",e.toString(),"");break;case qe.EGAttackTime:this.controllerChange(y.attackTime,e),t("EG attack time",e.toString(),"");break;case qe.EGReleaseTime:this.controllerChange(y.releaseTime,e),t("EG release time",e.toString(),"");break}break;case qe.drumReverb:let r=e;this.controllerChange(y.reverbDepth,r),t("GS Drum reverb",r.toString(),"percent");break}break;case YA.RPCoarse:case YA.RPFine:let o=this.midiControllers[y.RPNMsb]|this.midiControllers[y.RPNLsb]>>7;switch(o){default:H(`%cUnrecognized RPN for %c${this.channelNumber}%c: %c(0x${o.toString(16)})%c data value: %c${e}`,I.warn,I.recognized,I.warn,I.unrecognized,I.warn,I.value);break;case Tt.pitchBendRange:this.midiControllers[GA+j.pitchWheelRange]=e<<7,t("Pitch bend range",e.toString(),"semitones");break;case Tt.coarseTuning:let r=e-64;this.setCustomController(cA.channelTuningSemitones,r),t("Coarse tuning",r.toString(),"semitones");break;case Tt.fineTuning:this.setTuning(e-64,!1);break;case Tt.modulationDepth:this.setModulationDepth(e*100);break;case Tt.resetParameters:this.resetParameters();break}}}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 Mi(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 Kr(e,A){return Mi(e)*(A/30)}function qr(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,n=t;if(t>127||t<0)return;let s=this.preset.program,o=this.synth.tunings[s]?.[t]?.midiNote;o>=0&&(n=o),this.velocityOverride>0&&(A=this.velocityOverride);let r=this.synth.keyModifierManager.getVelocity(this.channelNumber,t);r>-1&&(A=r);let g=this.synth.keyModifierManager.getGain(this.channelNumber,t),i=-1,E=0,c=this.midiControllers[y.portamentoTime]>>7,B=this.midiControllers[y.portamentoControl],Q=B>>7;if(!this.drumChannel&&Q!==n&&this.midiControllers[y.portamentoOnOff]>=8192&&c>0){if(B!==1){let S=Math.abs(n-Q);E=Kr(c,S),i=Q}this.controllerChange(y.portamentoControl,n)}let h=this.synth.getVoices(this.channelNumber,n,A,t),m=0;this.randomPan&&(m=Math.round(Math.random()*1e3-500));let f=this.voices;h.forEach(S=>{S.portamentoFromKey=i,S.portamentoDuration=E,S.overridePan=m,S.gain=g;let x=S.exclusiveClass;x!==0&&f.forEach(J=>{J.exclusiveClass===x&&J.exclusiveRelease(this.synth.currentSynthTime)}),ce(S,this.midiControllers);let D=S.modulatedGenerators[a.startAddrsOffset]+S.modulatedGenerators[a.startAddrsCoarseOffset]*32768,G=S.modulatedGenerators[a.endAddrOffset]+S.modulatedGenerators[a.endAddrsCoarseOffset]*32768,M=S.modulatedGenerators[a.startloopAddrsOffset]+S.modulatedGenerators[a.startloopAddrsCoarseOffset]*32768,R=S.modulatedGenerators[a.endloopAddrsOffset]+S.modulatedGenerators[a.endloopAddrsCoarseOffset]*32768,C=S.sample,L=J=>Math.max(0,Math.min(C.sampleData.length-1,J));if(C.cursor=L(C.cursor+D),C.end=L(C.end+G),C.loopStart=L(C.loopStart+M),C.loopEnd=L(C.loopEnd+R),C.loopEnd<C.loopStart){let J=C.loopStart;C.loopStart=C.loopEnd,C.loopEnd=J}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[a.pan]))}),this.synth.totalVoicesAmount+=h.length,this.synth.totalVoicesAmount>this.synth.voiceCap&&this.synth.voiceKilling(h.length),f.push(...h),this.sendChannelProperty(),this.synth.callEvent("noteon",{midiNote:e,channel:this.channelNumber,velocity:A})}function Or(e){if(e>127||e<0){H("Received a noteOn for note",e,"Ignoring.");return}let A=e+this.channelTransposeKeyShift;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 Vr(e,A){this.voices.forEach(t=>{t.midiNote===e&&(t.pressure=A,ce(t,this.midiControllers,0,j.polyPressure))}),this.synth.callEvent("polypressure",{channel:this.channelNumber,midiNote:e,pressure:A})}function Pr(e){this.midiControllers[GA+j.channelPressure]=e<<7,this.voices.forEach(A=>ce(A,this.midiControllers,0,j.channelPressure)),this.synth.callEvent("channelpressure",{channel:this.channelNumber,pressure:e})}function Zr(e,A){if(this.lockedControllers[GA+j.pitchWheel])return;let t=A|e<<7;this.synth.callEvent("pitchwheel",{channel:this.channelNumber,MSB:e,LSB:A}),this.midiControllers[GA+j.pitchWheel]=t,this.voices.forEach(n=>ce(n,this.midiControllers,0,j.pitchWheel)),this.sendChannelProperty()}function Xr(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 Wr(e){if(this.lockPreset)return;let A=this.getBankSelect(),t,n,s=this.isXGChannel;if(this.synth.overrideSoundfont){let o=A===128?128:A-this.synth.soundfontBankOffset,r=this.synth.overrideSoundfont.getPresetNoFallback(o,e,s);if(r)t=r.bank===128?128:r.bank+this.synth.soundfontBankOffset,n=r,this.presetUsesOverride=!0;else{n=this.synth.soundfontManager.getPreset(A,e,s);let g=this.synth.soundfontManager.soundfontList.find(i=>i.soundfont===n.parentSoundBank).bankOffset;t=n.bank-g,this.presetUsesOverride=!1}}else{n=this.synth.soundfontManager.getPreset(A,e,s);let o=this.synth.soundfontManager.soundfontList.find(r=>r.soundfont===n.parentSoundBank).bankOffset;t=n.bank-o,this.presetUsesOverride=!1}this.setPreset(n),this.sentBank=t,this.synth.callEvent("programchange",{channel:this.channelNumber,program:n.program,bank:t}),this.sendChannelProperty()}var SA=class{midiControllers=new Int16Array(jt);lockedControllers=Array(jt).fill(!1);customControllers=new Float32Array(On);channelTransposeKeyShift=0;channelOctaveTuning=new Int8Array(128);channelTuningCents=0;holdPedal=!1;drumChannel=!1;velocityOverride=0;randomPan=!1;dataEntryState=YA.Idle;bank=0;sentBank=0;bankLSB=0;preset=void 0;lockPreset=!1;lockedSystem="gs";presetUsesOverride=!1;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}get isXGChannel(){return kA(this.synth.system)||this.lockPreset&&kA(this.lockedSystem)}setCustomController(A,t){this.customControllers[A]=t,this.updateChannelTuning()}updateChannelTuning(){this.channelTuningCents=this.customControllers[cA.channelTuning]+this.customControllers[cA.channelTransposeFine]+this.customControllers[cA.masterTuning]+this.customControllers[cA.channelTuningSemitones]*100}renderAudio(A,t,n,s,o,r){this.voices=this.voices.filter(g=>!this.renderVoice(g,this.synth.currentSynthTime,A,t,n,s,o,r))}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,Et(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 Bt(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.presetUsesOverride=!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[GA+j.pitchWheel],pitchBendRangeSemitones:this.midiControllers[GA+j.pitchWheelRange]/128,isMuted:this.isMuted,isDrum:this.drumChannel,transposition:this.channelTransposeKeyShift+this.customControllers[cA.channelTransposeFine]/100,bank:this.sentBank,program:this.preset.program};this.synth.post({messageType:qA.channelPropertyChange,messageData:[this.channelNumber,A]})}};SA.prototype.renderVoice=xr;SA.prototype.panVoice=mr;SA.prototype.killNote=Mr;SA.prototype.stopAllNotes=vr;SA.prototype.muteChannel=Hr;SA.prototype.noteOn=qr;SA.prototype.noteOff=Or;SA.prototype.polyPressure=Vr;SA.prototype.channelPressure=Pr;SA.prototype.pitchWheel=Zr;SA.prototype.programChange=Wr;SA.prototype.setTuning=Nr;SA.prototype.setOctaveTuning=Xr;SA.prototype.setModulationDepth=br;SA.prototype.transposeChannel=Yr;SA.prototype.controllerChange=Tr;SA.prototype.resetControllers=ro;SA.prototype.resetControllersRP15Compliant=io;SA.prototype.resetParameters=ao;SA.prototype.dataEntryFine=Lr;SA.prototype.dataEntryCoarse=Jr;function zr(e=!1){let A=new SA(this,this.defaultPreset,this.midiAudioChannels.length);this.midiAudioChannels.push(A),A.resetControllers(),A.sendChannelProperty(),e&&this.callEvent("newchannel",void 0),A.channelNumber%16===9&&this.midiAudioChannels[this.midiAudioChannels.length-1].setDrums(!0)}function _r(e,A){e===void 0&&(e={});for(let t in A)A.hasOwnProperty(t)&&!(t in e)&&(e[t]=A[t]);return e}var jr={skipToFirstNoteOn:!0,autoPlay:!0,preservePlaybackState:!1};var hr=.03,cr=.07,ns=1,bA=class{cachedVoices=[];deviceID=ee;eventQueue=[];interpolationType=Qt.fourthOrder;sequencer=new FA(this);transposition=0;tunings=[];soundfontBankOffset=0;masterGain=ns;midiVolume=1;reverbGain=1;chorusGain=1;voiceCap=350;pan=0;panLeft=.5;panRight=.5;highPerformanceMode=!1;keyModifierManager=new yn;overrideSoundfont=void 0;midiAudioChannels=[];system=An;totalVoicesAmount=0;defaultPreset;defaultPresetUsesOverride=!1;drumPreset;defaultDrumsUsesOverride=!1;processorInitialized=pe.isInitialized;currentSynthTime=0;sampleRate;constructor(A,t,n,s,o=!0,r=!0,g={},i=0){this.midiOutputsCount=A,this.effectsEnabled=o;let E=this.midiOutputsCount;this.postCallback=s,this.currentSynthTime=i,this.sampleRate=n,this.sampleTime=1/n,this.enableEventSystem=r&&typeof s=="function";for(let c=0;c<128;c++)this.tunings.push([]);try{this.soundfontManager=new pn(t,this.postReady.bind(this))}catch(c){throw this.post({messageType:qA.soundfontError,messageData:c}),c}this.sendPresetList(),this.getDefaultPresets();for(let c=0;c<E;c++)this.createWorkletChannel(!1);this.midiAudioChannels[9].preset=this.drumPreset,this.midiAudioChannels[9].drumChannel=!0,this.volumeEnvelopeSmoothingFactor=So*(44100/n),this.panSmoothingFactor=Qr*(44100/n),this.filterSmoothingFactor=Er*(44100/n),this._snapshot=g?.snapshot,g&&(this._snapshot!==void 0&&(this.applySynthesizerSnapshot(this._snapshot),this.resetAllControllers()),p("%cRendering enabled! Starting render.",I.info),g.parsedMIDI&&(g?.loopCount!==void 0?(this.sequencer.loopCount=g?.loopCount,this.sequencer.loop=!0):this.sequencer.loop=!1,this.voiceCap=1/0,this.processorInitialized.then(()=>{let c=_r(g.sequencerOptions,jr);this.sequencer.skipToFirstNoteOn=c.skipToFirstNoteOn,this.sequencer.preservePlaybackState=c.preservePlaybackState,this.sequencer.loadNewSongList([g.parsedMIDI])}))),this.postReady()}get currentGain(){return this.masterGain*this.midiVolume}getDefaultPresets(){let A=this.system;this.system="xg",this.defaultPreset=this.getPreset(0,0),this.defaultPresetUsesOverride=this.overrideSoundfont?.presets?.indexOf(this.defaultPreset)>=0,this.system=A,this.drumPreset=this.getPreset(128,0),this.defaultDrumsUsesOverride=this.overrideSoundfont?.presets?.indexOf(this.drumPreset)>=0}setSystem(A){this.system=A,this.post({messageType:qA.masterParameterChange,messageData:[OA.midiSystem,this.system]})}getCachedVoice(A,t,n,s){return this.cachedVoices?.[A]?.[t]?.[n]?.[s]}setCachedVoice(A,t,n,s,o){this.cachedVoices||(this.cachedVoices=[]),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]=o}post(A,t=!1){!this.enableEventSystem&&!t||this.postCallback&&this.postCallback(A)}postReady(){this.processorInitialized.then(()=>{this.post({messageType:qA.isFullyInitialized,messageData:void 0},!0),p("%cSpessaSynth is ready!",I.recognized)})}debugMessage(){p({channels:this.midiAudioChannels,voicesAmount:this.totalVoicesAmount})}renderAudio(A,t,n){this.renderAudioSplit(t,n,Array(16).fill(A))}renderAudioSplit(A,t,n){this.sequencer.processTick();let s=this.currentSynthTime;for(;this.eventQueue[0]?.time<=s;)this.eventQueue.shift().callback();let o=A[0],r=A[1],g=t[0],i=t[1];this.totalVoicesAmount=0,this.midiAudioChannels.forEach((E,c)=>{if(E.voices.length<1||E.isMuted)return;let B=E.voices.length,Q=c%16;E.renderAudio(n[Q][0],n[Q][1],o,r,g,i),this.totalVoicesAmount+=E.voices.length,E.voices.length!==B&&E.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,delete this.sequencer.midiData,delete this.sequencer,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,n,s){let o=()=>{let g=at(A[0]),i=g.channel+t;switch(g.status){case F.noteOn:let E=A[2];E>0?this.noteOn(i,A[1],E):this.noteOff(i,A[1]);break;case F.noteOff:n?this.midiAudioChannels[i].killNote(A[1]):this.noteOff(i,A[1]);break;case F.pitchBend:this.pitchWheel(i,A[2],A[1]);break;case F.controllerChange:this.controllerChange(i,A[1],A[2],n);break;case F.programChange:this.programChange(i,A[1]);break;case F.polyPressure:this.polyPressure(i,A[0],A[1]);break;case F.channelPressure:this.channelPressure(i,A[1]);break;case F.systemExclusive:this.systemExclusive(new b(A.slice(1)),t);break;case F.reset:this.stopAllChannels(!0),this.resetAllControllers();break;default:break}},r=s.time;r>this.currentSynthTime?(this.eventQueue.push({callback:o.bind(this),time:r}),this.eventQueue.sort((g,i)=>g.time-i.time)):o()}setMIDIVolume(A){this.midiVolume=Math.pow(A,Math.E),this.setMasterParameter(OA.masterPan,this.pan)}};bA.prototype.voiceKilling=fo;bA.prototype.getVoices=Br;bA.prototype.callEvent=Do;bA.prototype.systemExclusive=wo;bA.prototype.stopAllChannels=pr;bA.prototype.createWorkletChannel=zr;bA.prototype.resetAllControllers=oo;bA.prototype.setMasterParameter=ko;bA.prototype.transposeAllChannels=wr;bA.prototype.setMasterTuning=Rr;bA.prototype.getPreset=Fr;bA.prototype.reloadSoundFont=Sr;bA.prototype.clearSoundFont=Dr;bA.prototype.setEmbeddedSoundFont=yr;bA.prototype.sendPresetList=kr;bA.prototype.applySynthesizerSnapshot=Gr;var $r="spessasynth-worklet-processor";var Ht={reloadSoundFont:0,addNewSoundFont:2,deleteSoundFont:3,rearrangeSoundFonts:4};var ds=class extends AudioWorkletProcessor{alive=!0;oneOutputMode=!1;constructor(A){super();let t=A.processorOptions;this.oneOutputMode=t.midiChannels===1,this.synthesizer=new bA(16,t.soundfont,sampleRate,this.postMessageToMainThread.bind(this),!this.oneOutputMode,t?.enableEventSystem,t?.startRenderingData,currentTime),this.port.onmessage=n=>this.handleMessage(n.data)}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)){H(`Trying to access channel ${n} which does not exist... ignoring!`);return}switch(A.messageType){case wA.midiMessage:this.synthesizer.processMessage(...t);break;case wA.customcCcChange:s.setCustomController(t[0],t[1]),s.updateChannelTuning();break;case wA.ccReset:n===ee?this.synthesizer.resetAllControllers():s.resetControllers();break;case wA.setChannelVibrato:if(n===ee)for(let m=0;m<this.synthesizer.midiAudioChannels.length;m++){let f=this.synthesizer.midiAudioChannels[m];t.rate===ee?f.disableAndLockGSNRPN():f.setVibrato(t.depth,t.rate,t.delay)}else t.rate===ee?s.disableAndLockGSNRPN():s.setVibrato(t.depth,t.rate,t.delay);break;case wA.stopAll:n===ee?this.synthesizer.stopAllChannels(t===1):s.stopAllNotes(t===1);break;case wA.killNotes:this.synthesizer.voiceKilling(t);break;case wA.muteChannel:s.muteChannel(t);break;case wA.addNewChannel:this.synthesizer.createWorkletChannel(!0);break;case wA.debugMessage:this.synthesizer.debugMessage();break;case wA.setMasterParameter:let o=t[0],r=t[1];this.synthesizer.setMasterParameter(o,r);break;case wA.setDrums:s.setDrums(t);break;case wA.transpose:n===ee?this.synthesizer.transposeAllChannels(t[0],t[1]):s.transposeChannel(t[0],t[1]);break;case wA.highPerformanceMode:this.synthesizer.highPerformanceMode=t;break;case wA.lockController:t[0]===ee?s.setPresetLock(t[1]):s.lockedControllers[t[0]]=t[1];break;case wA.sequencerSpecific:let g=this.synthesizer.sequencer,i=t.messageData;switch(t.messageType){default:break;case $A.loadNewSongList:g.loadNewSongList(i[0],i[1]);break;case $A.pause:g.pause();break;case $A.play:g.play(i);break;case $A.stop:g.stop();break;case $A.setTime:g.currentTime=i;break;case $A.changeMIDIMessageSending:g.sendMIDIMessages=i;break;case $A.setPlaybackRate:g.playbackRate=i;break;case $A.setLoop:let[m,f]=i;g.loop=m,f===ee?g.loopCount=1/0:g.loopCount=f;break;case $A.changeSong:switch(i[0]){case it.forwards:g.nextSong();break;case it.backwards:g.previousSong();break;case it.shuffleOff:g.shuffleMode=!1,g.songIndex=g.shuffledSongIndexes[g.songIndex];break;case it.shuffleOn:g.shuffleMode=!0,g.shuffleSongIndexes(),g.songIndex=0,g.loadCurrentSong();break;case it.index:g.songIndex=i[1],g.loadCurrentSong();break}break;case $A.getMIDI:g.post(LA.getMIDI,g.midiData);break;case $A.setSkipToFirstNote:g.skipToFirstNoteOn=i;break;case $A.setPreservePlaybackState:g.preservePlaybackState=i}break;case wA.soundFontManager:try{let m=this.synthesizer.soundfontManager,f=t[0],S=t[1];switch(f){case Ht.addNewSoundFont:m.addNewSoundFont(S[0],S[1],S[2]);break;case Ht.reloadSoundFont:m.reloadManager(S);break;case Ht.deleteSoundFont:m.deleteSoundFont(S);break;case Ht.rearrangeSoundFonts:m.rearrangeSoundFonts(S)}}catch(m){this.postMessageToMainThread({messageType:qA.soundfontError,messageData:m})}this.synthesizer.clearSoundFont(!0,!1);break;case wA.keyModifierManager:let c=t[0],B=this.synthesizer.keyModifierManager,Q=t[1];switch(c){default:return;case Sn.addMapping:B.addMapping(...Q);break;case Sn.clearMappings:B.clearMappings();break;case Sn.deleteMapping:B.deleteMapping(...Q)}break;case wA.requestSynthesizerSnapshot:let h=dt.createSynthesizerSnapshot(this.synthesizer);this.postMessageToMainThread({messageType:qA.synthesizerSnapshot,messageData:h});break;case wA.setLogLevel:bs(t[0],t[1],t[2],t[3]);break;case wA.setEffectsGain:this.synthesizer.reverbGain=t[0],this.synthesizer.chorusGain=t[1];break;case wA.destroyWorklet:this.alive=!1,this.synthesizer.destroySynthProcessor();break;default:H("Unrecognized event:",t);break}}process(A,t){if(!this.alive)return!1;if(this.oneOutputMode){let n=t[0],s=[];for(let o=0;o<32;o+=2)s.push([n[o],n[o+1]]);this.synthesizer.renderAudioSplit([],[],s)}else this.synthesizer.renderAudioSplit(t[0],t[1],t.slice(2));return!0}};registerProcessor($r,ds);p("%cProcessor succesfully registered!",I.recognized);