midi-audio-player 1.1.0 → 1.1.2
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.
- package/README.md +0 -7
- package/dist/index.js +8 -8
- package/dist/index.js.map +2 -2
- package/dist/index.mjs +3 -3
- package/dist/index.mjs.map +3 -3
- package/dist/midi-audio-player.js +8 -8
- package/dist/midi-audio-player.js.map +2 -2
- package/dist/midi-audio-player.min.js +3 -3
- package/dist/midi-audio-player.min.js.map +3 -3
- package/index.js +7 -0
- package/package.json +4 -3
- package/src/midiaudioplayer.js +7 -8
package/dist/index.mjs
CHANGED
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
██████╔╝██║██║ ██║██║ ╚═╝ ██║███████╗ ██║ ██║ ██║██║╚██████╗██║ ██╗
|
|
8
8
|
╚═════╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═════╝╚═╝ ╚═╝
|
|
9
9
|
|
|
10
|
-
Version: 1.1.
|
|
11
|
-
Généré: 2026-05-
|
|
10
|
+
Version: 1.1.2
|
|
11
|
+
Généré: 2026-05-10 00:19:40
|
|
12
12
|
Auteur: Maxime Larrivée-Roy <mlarriveeroy@gmail.com>
|
|
13
13
|
Github: https://github.com/ZmotriN/midi-audio-player/
|
|
14
14
|
Website: https://zmotrin.github.io/midi-audio-player/
|
|
15
15
|
|
|
16
16
|
*/
|
|
17
|
-
function k(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")}function v(n,t){for(var V=0;V<t.length;V++){var q=t[V];q.enumerable=q.enumerable||!1,q.configurable=!0,"value"in q&&(q.writable=!0),Object.defineProperty(n,q.key,q)}}function b(n,t,V){return t&&v(n.prototype,t),V&&v(n,V),Object.defineProperty(n,"prototype",{writable:!1}),n}var c={VERSION:"2.0.17",NOTES:[],HEADER_CHUNK_LENGTH:14,CIRCLE_OF_FOURTHS:["C","F","Bb","Eb","Ab","Db","Gb","Cb","Fb","Bbb","Ebb","Abb"],CIRCLE_OF_FIFTHS:["C","G","D","A","E","B","F#","C#","G#","D#","A#","E#"]},E=[["C"],["C#","Db"],["D"],["D#","Eb"],["E"],["F"],["F#","Gb"],["G"],["G#","Ab"],["A"],["A#","Bb"],["B"]],M=0,w=function(t){E.forEach(function(V){V.forEach(function(q){return c.NOTES[M]=q+t}),M++})};for(T=-1;T<=9;T++)w(T);var T,r=(function(){function n(){k(this,n)}return b(n,null,[{key:"byteToHex",value:function(V){return("0"+V.toString(16)).slice(-2)}},{key:"bytesToHex",value:function(V){var q=[];return V.forEach(function(e){return q.push(n.byteToHex(e))}),q.join("")}},{key:"hexToNumber",value:function(V){return parseInt(V,16)}},{key:"bytesToNumber",value:function(V){return n.hexToNumber(n.bytesToHex(V))}},{key:"bytesToLetters",value:function(V){var q=[];return V.forEach(function(e){return q.push(String.fromCharCode(e))}),q.join("")}},{key:"decToBinary",value:function(V){return(V>>>0).toString(2)}},{key:"getVarIntLength",value:function(V){for(var q=V[0],e=1;q>=128;)q=V[e],e++;return e}},{key:"readVarInt",value:function(V){var q=0;return V.forEach(function(e){var a=e;a&128?(q+=a&127,q<<=7):q+=a}),q}},{key:"atob",value:(function(t){function V(q){return t.apply(this,arguments)}return V.toString=function(){return t.toString()},V})(function(t){return typeof atob=="function"?atob(t):Buffer.from(t,"base64").toString("binary")})}]),n})(),U=(function(){function n(t,V){k(this,n),this.enabled=!0,this.eventIndex=0,this.pointer=0,this.lastTick=0,this.lastStatus=null,this.index=t,this.data=V,this.delta=0,this.runningDelta=0,this.events=[];var q=this.data.subarray(this.data.length-3,this.data.length);if(!(q[0]===255&&q[1]===47&&q[2]===0))throw"Invalid MIDI file; Last three bytes of track "+this.index+"must be FF 2F 00 to mark end of track"}return b(n,[{key:"reset",value:function(){return this.enabled=!0,this.eventIndex=0,this.pointer=0,this.lastTick=0,this.lastStatus=null,this.delta=0,this.runningDelta=0,this}},{key:"enable",value:function(){return this.enabled=!0,this}},{key:"disable",value:function(){return this.enabled=!1,this}},{key:"setEventIndexByTick",value:function(V){V=V||0;for(var q=0;q<this.events.length;q++)if(this.events[q].tick>=V)return this.eventIndex=q,this}},{key:"getCurrentByte",value:function(){return this.data[this.pointer]}},{key:"getDeltaByteCount",value:function(){return r.getVarIntLength(this.data.subarray(this.pointer))}},{key:"getDelta",value:function(){return r.readVarInt(this.data.subarray(this.pointer,this.pointer+this.getDeltaByteCount()))}},{key:"handleEvent",value:function(V,q){if(q=q||!1,q){var e=V-this.lastTick,a=this.getDelta(),A=e>=a;if(this.pointer<this.data.length&&(q||A)){var i=this.parseEvent();if(this.enabled)return i}}else{for(var s=[];this.events[this.eventIndex]&&this.events[this.eventIndex].tick<=V;)this.enabled&&s.push(this.events[this.eventIndex]),this.eventIndex++;if(s.length>0)return s}return null}},{key:"getStringData",value:function(V){var q=r.getVarIntLength(this.data.subarray(V+2)),e=r.readVarInt(this.data.subarray(V+2,V+2+q)),a=r.bytesToLetters(this.data.subarray(V+2+q,V+2+q+e));return a}},{key:"parseEvent",value:function(){var V=this.pointer+this.getDeltaByteCount(),q={},e=this.getDeltaByteCount();if(q.track=this.index+1,q.delta=this.getDelta(),this.lastTick=this.lastTick+q.delta,this.runningDelta+=q.delta,q.tick=this.runningDelta,q.byteIndex=this.pointer,this.data[V]==255){switch(this.data[V+1]){case 0:q.name="Sequence Number";break;case 1:q.name="Text Event",q.string=this.getStringData(V);break;case 2:q.name="Copyright Notice";break;case 3:q.name="Sequence/Track Name",q.string=this.getStringData(V);break;case 4:q.name="Instrument Name",q.string=this.getStringData(V);break;case 5:q.name="Lyric",q.string=this.getStringData(V);break;case 6:q.name="Marker",q.string=this.getStringData(V);break;case 7:q.name="Cue Point",q.string=this.getStringData(V);break;case 9:q.name="Device Name",q.string=this.getStringData(V);break;case 32:q.name="MIDI Channel Prefix";break;case 33:q.name="MIDI Port",q.data=r.bytesToNumber([this.data[V+3]]);break;case 47:q.name="End of Track";break;case 81:q.name="Set Tempo",q.data=Math.round(6e7/r.bytesToNumber(this.data.subarray(V+3,V+6))),this.tempo=q.data;break;case 84:q.name="SMTPE Offset";break;case 88:q.name="Time Signature",q.data=this.data.subarray(V+3,V+7),q.timeSignature=""+q.data[0]+"/"+Math.pow(2,q.data[1]);break;case 89:q.name="Key Signature",q.data=this.data.subarray(V+3,V+5);var a=q.data[0]>127?q.data[0]-256:q.data[0];a>=0?q.keySignature=c.CIRCLE_OF_FIFTHS[a]:q.keySignature=c.CIRCLE_OF_FOURTHS[Math.abs(a)],q.data[1]==0?q.keySignature+=" Major":q.data[1]==1&&(q.keySignature+=" Minor");break;case 127:q.name="Sequencer-Specific Meta-event";break;default:q.name="Unknown: "+this.data[V+1].toString(16);break}var A=r.getVarIntLength(this.data.subarray(V+2)),i=r.readVarInt(this.data.subarray(V+2,V+2+A));this.pointer+=e+2+A+i}else if(this.data[V]===240){q.name="Sysex";var s=r.getVarIntLength(this.data.subarray(V+1)),h=r.readVarInt(this.data.subarray(V+1,V+1+s));q.data=this.data.subarray(V+1+s,V+1+s+h),this.pointer+=e+1+s+h}else if(this.data[V]===247){q.name="Sysex (escape)";var o=r.getVarIntLength(this.data.subarray(V+1)),u=r.readVarInt(this.data.subarray(V+1,V+1+o));q.data=this.data.subarray(V+1+o,V+1+o+u),this.pointer+=e+1+o+u}else if(this.data[V]<128)if(q.running=!0,q.noteNumber=this.data[V],q.noteName=c.NOTES[this.data[V]],q.velocity=this.data[V+1],this.lastStatus<=143)q.name="Note off",q.channel=this.lastStatus-128+1,this.pointer+=e+2;else if(this.lastStatus<=159)q.name="Note on",q.channel=this.lastStatus-144+1,this.pointer+=e+2;else if(this.lastStatus<=175)q.name="Polyphonic Key Pressure",q.channel=this.lastStatus-160+1,q.note=c.NOTES[this.data[V]],q.pressure=this.data[V+1],this.pointer+=e+2;else if(this.lastStatus<=191)q.name="Controller Change",q.channel=this.lastStatus-176+1,q.number=this.data[V],q.value=this.data[V+1],this.pointer+=e+2;else if(this.lastStatus<=207)q.name="Program Change",q.channel=this.lastStatus-192+1,q.value=this.data[V+1],this.pointer+=e+1;else if(this.lastStatus<=223)q.name="Channel Key Pressure",q.channel=this.lastStatus-208+1,this.pointer+=e+1;else if(this.lastStatus<=239)q.name="Pitch Bend",q.channel=this.lastStatus-224+1,q.value=(this.data[V+1]&127)<<7|this.data[V]&127,this.pointer+=e+2;else throw"Unknown event (running): ".concat(this.lastStatus);else if(this.lastStatus=this.data[V],this.data[V]<=143)q.name="Note off",q.channel=this.lastStatus-128+1,q.noteNumber=this.data[V+1],q.noteName=c.NOTES[this.data[V+1]],q.velocity=Math.round(this.data[V+2]/127*100),this.pointer+=e+3;else if(this.data[V]<=159)q.name="Note on",q.channel=this.lastStatus-144+1,q.noteNumber=this.data[V+1],q.noteName=c.NOTES[this.data[V+1]],q.velocity=Math.round(this.data[V+2]/127*100),this.pointer+=e+3;else if(this.data[V]<=175)q.name="Polyphonic Key Pressure",q.channel=this.lastStatus-160+1,q.note=c.NOTES[this.data[V+1]],q.pressure=this.data[V+2],this.pointer+=e+3;else if(this.data[V]<=191)q.name="Controller Change",q.channel=this.lastStatus-176+1,q.number=this.data[V+1],q.value=this.data[V+2],this.pointer+=e+3;else if(this.data[V]<=207)q.name="Program Change",q.channel=this.lastStatus-192+1,q.value=this.data[V+1],this.pointer+=e+2;else if(this.data[V]<=223)q.name="Channel Key Pressure",q.channel=this.lastStatus-208+1,this.pointer+=e+2;else if(this.data[V]<=239)q.name="Pitch Bend",q.channel=this.lastStatus-224+1,q.value=(this.data[V+2]&127)<<7|this.data[V+1]&127,this.pointer+=e+3;else throw"Unknown event: ".concat(this.data[V]);return this.delta+=q.delta,this.events.push(q),q}},{key:"endOfTrack",value:function(){return this.data[this.pointer+1]==255&&this.data[this.pointer+2]==47&&this.data[this.pointer+3]==0}}]),n})();Uint8Array.prototype.forEach||Object.defineProperty(Uint8Array.prototype,"forEach",{value:Array.prototype.forEach});var B=(function(){function n(t,V){k(this,n),this.sampleRate=5,this.startTime=0,this.buffer=V||null,this.midiChunksByteLength=null,this.division,this.format,this.setTimeoutId=!1,this.scheduledTime=0,this.tracks=[],this.instruments=[],this.defaultTempo=120,this.tempo=null,this.startTick=0,this.tick=0,this.lastTick=null,this.inLoop=!1,this.totalTicks=0,this.events=[],this.totalEvents=0,this.tempoMap=[],this.eventListeners={},typeof t=="function"&&this.on("midiEvent",t)}return b(n,[{key:"loadFile",value:function(V){throw"loadFile is only supported on Node.js"}},{key:"loadArrayBuffer",value:function(V){return this.buffer=new Uint8Array(V),this.fileLoaded()}},{key:"loadDataUri",value:function(V){for(var q=r.atob(V.split(",")[1]),e=new Uint8Array(q.length),a=0;a<q.length;a++)e[a]=q.charCodeAt(a);return this.buffer=e,this.fileLoaded()}},{key:"getFilesize",value:function(){return this.buffer?this.buffer.length:0}},{key:"fileLoaded",value:function(){if(!this.validate())throw"Invalid MIDI file; should start with MThd";return this.defaultTempo=120,this.setTempo(this.defaultTempo).getDivision().getFormat().getTracks().dryRun()}},{key:"validate",value:function(){return r.bytesToLetters(this.buffer.subarray(0,4))==="MThd"}},{key:"getFormat",value:function(){return this.format=r.bytesToNumber(this.buffer.subarray(8,10)),this}},{key:"getTracks",value:function(){this.tracks=[];for(var V=0;V<this.buffer.length;){if(r.bytesToLetters(this.buffer.subarray(V,V+4))=="MTrk"){var q=r.bytesToNumber(this.buffer.subarray(V+4,V+8));this.tracks.push(new U(this.tracks.length,this.buffer.subarray(V+8,V+8+q)))}V+=r.bytesToNumber(this.buffer.subarray(V+4,V+8))+8}var e=0;return this.tracks.forEach(function(a){e+=8+a.data.length}),this.midiChunksByteLength=c.HEADER_CHUNK_LENGTH+e,this}},{key:"enableTrack",value:function(V){return this.tracks[V-1].enable(),this}},{key:"disableTrack",value:function(V){return this.tracks[V-1].disable(),this}},{key:"getDivision",value:function(){return this.division=r.bytesToNumber(this.buffer.subarray(12,c.HEADER_CHUNK_LENGTH)),this}},{key:"playLoop",value:function(V){this.inLoop||(this.inLoop=!0,this.tick=this.getCurrentTick(),this.tracks.forEach(function(q,e){if(!V&&this.endOfFile())this.stop(),this.triggerPlayerEvent("endOfFile");else{var a=q.handleEvent(this.tick,V);if(V&&a)a.hasOwnProperty("name")&&a.name==="Set Tempo"&&this.setTempo(a.data),a.hasOwnProperty("name")&&a.name==="Program Change"&&(this.instruments.includes(a.value)||this.instruments.push(a.value));else if(a){var A=Array.isArray(a)?a:[a];A.forEach(function(i){i.hasOwnProperty("name")&&i.name==="Set Tempo"&&this.setTempo(i.data),this.emitEvent(i)},this)}}},this),!V&&this.isPlaying()&&this.triggerPlayerEvent("playing",{tick:this.tick}),this.inLoop=!1)}},{key:"setTempo",value:function(V){return this.tempo=V,this}},{key:"setStartTime",value:function(V){return this.startTime=V,this}},{key:"play",value:function(){if(this.isPlaying())throw"Already playing...";return this.startTime||(this.startTime=new Date().getTime()),this.scheduledTime=Date.now(),this.schedulePlayLoop(this.sampleRate),this}},{key:"schedulePlayLoop",value:function(V){var q=this;this.setTimeoutId=setTimeout(function(){if(q.playLoop(),q.setTimeoutId!==!1){q.scheduledTime+=q.sampleRate;var e=Date.now()-q.scheduledTime;q.schedulePlayLoop(Math.max(0,q.sampleRate-e))}},V)}},{key:"pause",value:function(){return clearTimeout(this.setTimeoutId),this.setTimeoutId=!1,this.scheduledTime=0,this.startTick=this.tick,this.startTime=0,this}},{key:"stop",value:function(){return clearTimeout(this.setTimeoutId),this.setTimeoutId=!1,this.scheduledTime=0,this.startTick=0,this.startTime=0,this.resetTracks(),this}},{key:"skipToTick",value:function(V){this.stop(),this.startTick=V;for(var q=this.tempoMap.length-1;q>=0;q--)if(this.tempoMap[q].tick<=V){this.setTempo(this.tempoMap[q].tempo);break}return this.collectStateAtTick(V).forEach(function(e){this.emitEvent(e)},this),this.tracks.forEach(function(e){e.setEventIndexByTick(V)}),this}},{key:"collectStateAtTick",value:function(V){var q={};return this.events.forEach(function(e){e.forEach(function(a){if(!(a.tick>=V)){var A;a.name==="Program Change"?A="pc:"+a.channel:a.name==="Controller Change"?A="cc:"+a.channel+":"+a.number:a.name==="Pitch Bend"&&(A="pb:"+a.channel),A&&(q[A]=a)}})}),Object.keys(q).map(function(e){return q[e]})}},{key:"skipToPercent",value:function(V){if(V<0||V>100)throw"Percent must be number between 1 and 100.";return this.skipToTick(Math.round(V/100*this.totalTicks)),this}},{key:"skipToSeconds",value:function(V){var q=this.getSongTime();if(V<0||V>q)throw V+" seconds not within song time of "+q;return this.skipToTick(this.secondsToTicks(V)),this}},{key:"isPlaying",value:function(){return this.setTimeoutId!==!1}},{key:"dryRun",value:function(){for(this.resetTracks();!this.endOfFile();)this.playLoop(!0);return this.events=this.getEvents(),this.totalEvents=this.getTotalEvents(),this.totalTicks=this.getTotalTicks(),this.buildTempoMap(),this.startTick=0,this.startTime=0,this.resetTracks(),this.triggerPlayerEvent("fileLoaded",this),this}},{key:"resetTracks",value:function(){return this.tracks.forEach(function(V){return V.reset()}),this}},{key:"getEvents",value:function(){return this.tracks.map(function(V){return V.events})}},{key:"getTotalTicks",value:function(){return Math.max.apply(null,this.tracks.map(function(V){return V.delta}))}},{key:"getTotalEvents",value:function(){return this.tracks.reduce(function(V,q){return{events:{length:V.events.length+q.events.length}}},{events:{length:0}}).events.length}},{key:"buildTempoMap",value:function(){var V=[];return this.events.forEach(function(q){q.forEach(function(e){e.name==="Set Tempo"&&V.push({tick:e.tick,tempo:e.data})})}),V.sort(function(q,e){return q.tick-e.tick}),this.tempoMap=[{tick:0,tempo:this.defaultTempo}],V.forEach(function(q){var e=this.tempoMap[this.tempoMap.length-1];q.tick===e.tick?e.tempo=q.tempo:this.tempoMap.push({tick:q.tick,tempo:q.tempo})},this),this}},{key:"ticksToSeconds",value:function(V,q){for(var e=0,a=V,A=0;A<this.tempoMap.length;A++){var i=this.tempoMap[A],s=A+1<this.tempoMap.length?this.tempoMap[A+1].tick:q;if(!(s<=V)){var h=Math.max(i.tick,V),o=Math.min(s,q);if(h>=q)break;var u=o-h;e+=u/this.division/i.tempo*60,a=o}}if(a<q){var d=this.tempoMap[this.tempoMap.length-1];e+=(q-a)/this.division/d.tempo*60}return e}},{key:"secondsToTicks",value:function(V){for(var q=V,e=0,a=0;a<this.tempoMap.length;a++){var A=this.tempoMap[a],i=a+1<this.tempoMap.length?this.tempoMap[a+1].tick:1/0,s=i-A.tick,h=s/this.division/A.tempo*60;if(q<=h)return e=A.tick+Math.round(q/60*A.tempo*this.division),e;q-=h,e=i}return this.totalTicks}},{key:"getSongTime",value:function(){return this.ticksToSeconds(0,this.totalTicks)}},{key:"getSongTimeRemaining",value:function(){return Math.round(this.ticksToSeconds(this.getCurrentTick(),this.totalTicks))}},{key:"getSongPercentRemaining",value:function(){return Math.round(this.getSongTimeRemaining()/this.getSongTime()*100)}},{key:"bytesProcessed",value:function(){return c.HEADER_CHUNK_LENGTH+this.tracks.length*8+this.tracks.reduce(function(V,q){return{pointer:V.pointer+q.pointer}},{pointer:0}).pointer}},{key:"eventsPlayed",value:function(){return this.tracks.reduce(function(V,q){return{eventIndex:V.eventIndex+q.eventIndex}},{eventIndex:0}).eventIndex}},{key:"endOfFile",value:function(){return this.isPlaying()?this.totalTicks-this.tick<=0:this.bytesProcessed()>=this.midiChunksByteLength}},{key:"getCurrentTick",value:function(){if(!this.startTime)return this.startTick;var V=(new Date().getTime()-this.startTime)/1e3,q=this.ticksToSeconds(0,this.startTick);return this.secondsToTicks(q+V)}},{key:"emitEvent",value:function(V){return this.triggerPlayerEvent("midiEvent",V),this}},{key:"on",value:function(V,q){return this.eventListeners.hasOwnProperty(V)||(this.eventListeners[V]=[]),this.eventListeners[V].push(q),this}},{key:"triggerPlayerEvent",value:function(V,q){return this.eventListeners.hasOwnProperty(V)&&this.eventListeners[V].forEach(function(e){return e(q||{})}),this}}]),n})(),S={Player:B,Utils:r,Constants:c};var p=class{#V=null;#e=null;#q=[];#t=.05;#i=1e-6;constructor(t,V){this.#V=t,this.#e=V,this.#e.zones.map(q=>this.#r(q))}queueWaveTable(t,V,q,e,a){this.#V.state==="suspended"&&this.#V.resume().catch(()=>{});let A=this.#h(e),i=this.#u(V);if(!i?.buffer)return null;let s=i.originalPitch-100*i.coarseTune-i.fineTune,h=Math.pow(2,(100*V-s)/1200),o=Math.max(t,this.#V.currentTime),u=q+this.#t,d=i.loopStart>=1&&i.loopStart<i.loopEnd;d||(u=Math.min(u,i.buffer.duration/h));let f=this.#o();this.#s(f,i,A,o,u,q);let l=this.#V.createBufferSource();if(l.buffer=i.buffer,l.playbackRate.setValueAtTime(h,0),a?.length>0&&(l.playbackRate.setValueAtTime(h,o),a.forEach(m=>{let y=Math.pow(2,(100*(V+m.delta)-s)/1200);l.playbackRate.linearRampToValueAtTime(y,o+m.when)})),l.loop=d,d){let m=i.delay??0;l.loopStart=i.loopStart/i.sampleRate+m,l.loopEnd=i.loopEnd/i.sampleRate+m}return l.connect(f),l.start(o,i.delay??0),l.stop(o+u),f.audioBufferSourceNode=l,f.when=o,f.duration=u,f}queueChord(t,V,q,e,a,A){let i=this.#h(a);return q.map((s,h)=>this.queueWaveTable(this.#V,this.#V.destination,t,V,s,e,i-Math.random()*.01,A?.[h])).filter(Boolean)}async cancelQueue(){this.#q.forEach(t=>{t.gain.cancelScheduledValues(0),t.gain.setValueAtTime(this.#i,this.#V.currentTime),t.when=-1;try{t.audioBufferSourceNode?.disconnect()}catch{}})}#r(t){if(t.buffer)return Promise.resolve(t);if(t.delay=0,t.sample){let V=atob(t.sample),q=V.length,e=new Uint8Array(q);for(let s=0;s<q;s++)e[s]=V.charCodeAt(s);let a=new Int16Array(e.buffer),A=a.length;t.buffer=this.#V.createBuffer(1,A,t.sampleRate);let i=t.buffer.getChannelData(0);for(let s=0;s<A;s++)i[s]=a[s]/32768;return this.#a(t),t}else if(t.file){let V=atob(t.file),q=new Uint8Array(V.length);for(let e=0;e<V.length;e++)q[e]=V.charCodeAt(e);this.#V.decodeAudioData(q.buffer,e=>(t.buffer=e,this.#a(t),t),e=>(console.error("Audio decoding error:",e),!1))}else return this.#a(t),t}#a(t){t.loopStart=this.#A(t.loopStart,0),t.loopEnd=this.#A(t.loopEnd,0),t.coarseTune=this.#A(t.coarseTune,0),t.fineTune=this.#A(t.fineTune,0),t.originalPitch=this.#A(t.originalPitch,6e3),t.sampleRate=this.#A(t.sampleRate,44100)}#s(t,V,q,e,a,A){t.gain.setValueAtTime(this.#n(0),this.#V.currentTime);let i=Math.min(A,a-this.#t),s=V.ahdsr&&V.ahdsr.length>0?V.ahdsr:[{duration:0,volume:1},{duration:i,volume:1}];t.gain.cancelScheduledValues(e);let h=(s[0]?.volume??1)*q;t.gain.setValueAtTime(this.#n(h),e);let o=0,u=s[0]?.volume??1;for(let d of s){let{duration:f,volume:l}=d;if(f<=0)continue;let m=i-o;if(f>m){let y=m/f,C=u+y*(l-u);t.gain.linearRampToValueAtTime(this.#n(q*C),e+i);break}o+=f,u=l,t.gain.linearRampToValueAtTime(this.#n(q*u),e+o)}t.gain.linearRampToValueAtTime(this.#n(0),e+i+this.#t)}#o(){let t=this.#q.find(V=>V.target===this.#V.destination&&this.#V.currentTime>V.when+V.duration+.001);if(t){if(t.audioBufferSourceNode){try{t.audioBufferSourceNode.stop(0),t.audioBufferSourceNode.disconnect()}catch{}t.audioBufferSourceNode=null}}else t=this.#V.createGain(),t.gain.value=0,t.target=this.#V.destination,t.connect(this.#V.destination),t.cancel=()=>{t.when+t.duration>this.#V.currentTime&&(t.gain.cancelScheduledValues(0),t.gain.setTargetAtTime(this.#i,this.#V.currentTime,.1),t.when=this.#V.currentTime+1e-5,t.duration=0)},this.#q.push(t);return t}#u(t){let V=this.#e.zones.findLast(q=>t>=q.keyRangeLow&&t<=q.keyRangeHigh+1);return V&&this.#r(V),V}#h(t){let V=t?1*t:.5;return Math.min(V,.8)}#n(t){return t>this.#i?t:this.#i}#A(t,V){return typeof t=="number"?t:V}};var x={zones:[{midi:81,originalPitch:4200,keyRangeLow:0,keyRangeHigh:43,loopStart:256,loopEnd:768,coarseTune:0,fineTune:0,sampleRate:48e3,ahdsr:!1,file:"SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3LjcyLjEwMQAAAAAAAAAAAAAA//tUwAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAAGAACgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg//////////////////////////////////////////////////////////////////8AAAAATGF2YzU3Ljk2AAAAAAAAAAAAAAAAJALAAAAAAAAABgA5CeiPAAAAAAAAAAAAAAAAAAAA//vUxAAAB+gfQ1TwACTywCx/NYAJAABZOW7fg6F8L8A3AOwb5L2e7x5R5EoCADB8HwfPxACAYrB8H8oCDsHw/lAQdlwPqDHh/UCEp4fhiU8/ynv6BAGOZS1NzNUNm83W5HHJGz4Kk0TfzwzSZu8CgJ3TZ11pu3hi1hoxY8qMFcPAcBX40CM1RcwUo9EFQgiY2VPldy90c24GUwVQROZnA0ZXohQyMsyIBlAWEQK/zrsHfSBGmF4i+yiKKKNrP5FDrYJM+8XdeIRR1FaEwk0mLq5Upl0G35bBliJz8DxCcgSVtAYMpU27BVbW0tSXOzHsLU+88MTkCQ3PwO05aTrtqwF1G2YFHc7M1hamc5RYnJXbn6S9OU7L2apytcaEpk5bQVbXIszWrUzuzNatW5HKL05K+z9Jyip+vcyqG3yZTDELa1DcIazEIXV3jW1lV3jW1lV7h/M/7h/M/7h/9/+f/f/n/3/58qr2JTUtyqvYlNy3TXbFLct012xS3Kemu0lLWp6arSexu7G62Ja2Ja2Ja0QsKrWx13Wb36/a/7/ew5kMjLhQNcmAxqICUIjQsMqB4zeSzGokEALDBOxI2OrTTJJMLBUwcCQYAVMDdlQ0A6Zkis4q5jIAQzknMdGQMBLAltWVxZrJm4ma0hGaGCmrpKmfS87RrhMci3muq5p4+b4wKbPCqVlsBQHbcmCKhmxoZcGGmnZmJeZOEmiGS7nGjrWX5mn+j92HZJcMqKDIgYz0vMnJTHwUzYoMiIGdQNMuTIbj/U13dLc1aMqCjSTkzEvMpCTQjQy4qMkBjPTGR3X9pMI1N9q1aWtWpqtUyspMhBTOCwyYkMeAjNSsyUjMdATMCYyIgpZJZygGm+AqXGzWrWqtWzWrWjGgAy0lMhHwEXmVERjw4AigycfMdGwMVmSDhjQwCiSU1solVxiNamhqlpYZx3jllljvHLWWLlv/F3cfyKO+/8vfx/JY/7/y9/H8lj/v/Pv5Dk5D8bn4xGJyNxuf1llvHHWWW8cdZZbx//u0xLeAL2H/Z7nNkIFVkCR3sMAFx1llvHHWVbHGrllWAbmu1l2+wACIJmablgZJEkGiBRmRmRKSQMOakoAW1jywyxmXRDkBISlWnK1b7K0xdxcdLomjI+e1lat9latrlly7rLnrbVat8FFQgpgKeCmxTcgrgVVMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",anchor:.00533333},{midi:81,originalPitch:5400,keyRangeLow:44,keyRangeHigh:55,loopStart:128,loopEnd:384,coarseTune:0,fineTune:0,sampleRate:48e3,ahdsr:!1,file:"SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3LjcyLjEwMQAAAAAAAAAAAAAA//tUwAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAAEsADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM//////////////////////////////////////////////////////////////////8AAAAATGF2YzU3Ljk2AAAAAAAAAAAAAAAAJATAAAAAAAAABLAMEvhQAAAAAAAAAAAAAAAAAAAA//vUxAAACSwNaVQwACRXSC6/NYAIAAa9txyS8qHAwMDPlz5QEIIROfLn1AhBBy3lz/BCt5c/wQz5c/RBCXPlw/EEEHLPlz9EEOt8QQQcs+XPykQVh8uH4gcIHLD6w+JgcGkGbGakSCqjColKJDEMCR4mYQ8kQZ1UAiwCAIbAc4b1maEch6LAEVzMhwxuYQGCgLBWbmQSPi+kAzkOM6i/Ei2XrGgFiMbisXednEOO7NP9KJdLKedbxd7vvezh3pl/YdmreFqxnZjEgf+NyN/I1TXaWzqnqWqTOzTyyihuX0cMUlNa3S81TYWrGd63q/RRuno4xSUUbt3YzSYU1fuH8z/uH8zp6OMUlFK6e/KKTG5zKZy+ax/+4fzP+4fzP70rp78opL1PXv0lSzVy+tjjVyyrY41e4fzf91/N/3X83/dfzf91/N/3X5/3D+b/uv5v+6/m/7r/3/6/9/+sst446yy3jVyyrY41csq2ONXLKtjjVyyrKiLXdbW5JI24SEB1CQjhFAAXAIxdxbUKO0ekXEuKphJ5DkSgYKJVFFxQVwUwFDcRcUFcFcCjsTYoK4K4FHYmxQXwrgUdibFBfCvCjsTcRXhXhT8TcRXhXhT8TcRXhXhT8TcRXhXhT8TcakxBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tkxMWDzQgxS7zzACgAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq",anchor:.00266667},{midi:81,originalPitch:6600,keyRangeLow:56,keyRangeHigh:67,loopStart:64,loopEnd:192,coarseTune:0,fineTune:0,sampleRate:48e3,ahdsr:!1,file:"SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3LjcyLjEwMQAAAAAAAAAAAAAA//tUwAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAAE4ADs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs//////////////////////////////////////////////////////////////////8AAAAATGF2YzU3Ljk2AAAAAAAAAAAAAAAAJAXAAAAAAAAABODQyktQAAAAAAAAAAAAAAAAAAAA//vkxAAABywBgbQAACYVyC6/P9AwKAASUcckkt4YWD4fLn1AhBCJz5c+oEFghy5/ghy5+cghy7+GKZd/DHLn1HIYk5d/DHL+6H5d5TOdLnbLTLKrBqyq+vlkqeD4lCzTAngBgvMYACAAGg+NZZoFwogYAGAZCwCsDgBJsJhRJLyYvYUvg4BLFAA9AKpqYxQCumE3hMhEBIkBkBLuNR5oOGzUbs0Jk7jR1yTFgpzGY2TMgWV8qtT4fmaf4xDKgxlNgzTGRZScSFbPVQxarGZbWMLiNMUC1MshXMJx+MRSeaZHnuceOvbGrV2ls6MOQUMAAnMDAzMMgRMAQkMCQufiahT9zMJfim7ul5rIDBEFgJBgHgoHQuBANAwFA1WkUbqzssyns944flv09UjUcU9kjkkk9UjZfjOyzKep8Z2kxucyq9+ax9JFNJNJNZNFNFNVNJNJNbKRRvGQxjKejfJ2Udq/9bf1darY41U0U0U1U0k0k+k0U0U+U0k0k+k0e5/zD+5/zD+5/zX93/Nf3f81/d////////7/9f+//X/v/1/7/9Jop8ppJpJ9Jop6qwppJ7KxJGp6qwpHKrKxI2qqqwo3KrKxI2qqq9RuVWV8jaqqr1G5TEFNRTMuOTkuNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//sUxNoDwAAB/hwAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",anchor:.00133333},{midi:81,originalPitch:7800,keyRangeLow:68,keyRangeHigh:79,loopStart:32,loopEnd:96,coarseTune:0,fineTune:0,sampleRate:48e3,ahdsr:!1,file:"SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3LjcyLjEwMQAAAAAAAAAAAAAA//tUwAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAADwADm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm//////////////////////////////////////////////////////////////////8AAAAATGF2YzU3Ljk2AAAAAAAAAAAAAAAAJAZAAAAAAAAAA8CsVDBMAAAAAAAAAAAAAAAAAAAA//vExAAABmQBjaAAACGQBa9497AdtbAkWdckklxRyjhQ5BBYYqOFHRAXDHKHOGOUOcMco7nOJHawxynnOU5cMcHOXOcHOl3NXGMqsiEAqoMI8QsSUcIsgeiQgJISFCg5ABAyw+VQaiK8yY18FNiuxBUorwU0FdiC4ivimgrsQXEV4KaCuxBcTfBXAv4isTfiuBf6KxN+L4r8RUU3wXoL+JsU3wXoL+JsV3gvRSpMQU1FMy45OS41qqqqqqqqqqqqqqqqqqqqqqqq6goZoAABEOiCXDs8P3G8oicJAhZjVVVBlsStNFVVUT8StNVMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//sUxOuDxEQnByYExigAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",anchor:66667e-8},{midi:81,originalPitch:9e3,keyRangeLow:80,keyRangeHigh:91,loopStart:16,loopEnd:48,coarseTune:0,fineTune:0,sampleRate:48e3,ahdsr:!1,file:"SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3LjcyLjEwMQAAAAAAAAAAAAAA//tUwAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAADwADm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm//////////////////////////////////////////////////////////////////8AAAAATGF2YzU3Ljk2AAAAAAAAAAAAAAAAJAaAAAAAAAAAA8ChXkahAAAAAAAAAAAAAAAAAAAA//vExAAABkQDh+AAACGUhq9895iZZVlzMgFEYk0nBACCLQfD6gTB8/qBDBwMflC4f/gQMfqBMH/4OHP4Df+XBw5+UBN/6wJu1fapqZhlttyF2FyUYQ0W0QkFSJiRIro4TAYk8aQCAQCAKjiRIkSr+xQUFOBQUV/5BQU4KChv+CgoL4KCu/4QUN8KCn/8UFN8FFf/wgp/hQ3/8FBXYgoL/+FBX5BQ3/8FBfigopVMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//sUxNoDwAAB/gAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",anchor:33333e-8},{midi:81,originalPitch:10200,keyRangeLow:92,keyRangeHigh:103,loopStart:8,loopEnd:56,coarseTune:0,fineTune:0,sampleRate:48e3,ahdsr:!1,file:"SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3LjcyLjEwMQAAAAAAAAAAAAAA//tUwAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAADwADm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm//////////////////////////////////////////////////////////////////8AAAAATGF2YzU3Ljk2AAAAAAAAAAAAAAAAJAaAAAAAAAAAA8AljJJeAAAAAAAAAAAAAAAAAAAA//vExAAABmgDh+AAACG7Cq649JmAh3unfGYwJRhSgQBBEXB8PjogBDn8EwfP6gQdicP/g4GOXB/lHfgmH905/UclwcOf/8oA/2r/qekIFM1D+AxK8OEgo9IhpLSJFdJaehzC3CbBom0GChJpEiRn/tRxIkSJT6OJJB3BUFXSwNB3BUFQVgqCoaqBoGsqd4iBo8oGgaTWCoaxEDR6VBUFTpUFQV//BoGoiBoO//rxKCv//iIGv/+WTEFNRTMuOTkuNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//sUxNoDwAAB/gAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",anchor:16667e-8},{midi:81,originalPitch:11400,keyRangeLow:104,keyRangeHigh:115,loopStart:12,loopEnd:52,coarseTune:0,fineTune:0,sampleRate:48e3,ahdsr:!1,file:"SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3LjcyLjEwMQAAAAAAAAAAAAAA//tUwAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAADwADm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm//////////////////////////////////////////////////////////////////8AAAAATGF2YzU3Ljk2AAAAAAAAAAAAAAAAJAaAAAAAAAAAA8CNr1v4AAAAAAAAAAAAAAAAAAAA//vExAAAB1SVheCEbeI4SC349ApomIy4jYiPtA6x5AACs4xjvkAAPmMY/wAXzGMf4AL/X+IgG4PvwQOfIQQOZcH//wQlwfBA5/1h/iB2sP/17/1GMvIAEJ8BiUYMEW0NSAKQjJWj5HCbB/EGHqQ5m2plUuYL1WvVqeGZmb/VVVf9mZr/1VVX9hYGwKgFgbB9TCwNgbB8BG6lKUreYxjfKUrfQxvylK3oYxjeUKAgICJYoCAgICUvoYxvylL9DGN9SlL9P+UrfMYxjOoYCAgIUb6lL////////qUpSzASTEFNRTMuOTkuNaqqqqpMQU1FMy45OS41qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//sUxNoDwAAB/gAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq",anchor:8333e-8},{midi:81,originalPitch:12600,keyRangeLow:116,keyRangeHigh:127,loopStart:6,loopEnd:42,coarseTune:0,fineTune:0,sampleRate:48e3,ahdsr:!1,file:"SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3LjcyLjEwMQAAAAAAAAAAAAAA//tUwAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAAEIADo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo//////////////////////////////////////////////////////////////////8AAAAATGF2YzU3Ljk2AAAAAAAAAAAAAAAAJAaQAAAAAAAABCDWHfeqAAAAAAAAAAAAAAAAAAAA//vUxAAACUUrfeCE1eMLSCx88a54l3jMh4t/trUApEAAAUAGYxja+WMYx/yAAH+MY/+AYx/4AAX8xjH/7/8AF//zHyAMdoIAgAAADAYWTt4IA/Kc5/////////y4Pg/v3FZropQkAAAEiDVBBhkjdBSk5JyDlHqDmWi+kJRsJiOZ69eva6x+zAQEBCm/9VVVb/9mVVL/9mZmP/6qqqn/8ZlVV/6zMzM3/VCgICanXX+5I2JRJHaana+SSNwIQEQAwAQAQEw6j5KBCASACACAKAmBGHcdr5RNR2jtJRsed/DkTU1NTra/3Oc5znf+1rWuc7/3Na1ra/9znOc7/9rWtc7/9zWta3/4c5znO/9rTU1NXOvbW4lDtDyHkPI7TqQIQAxMQU1FMy45OS41qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy45OS41qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//sUxNoDwAABpAAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq",anchor:4167e-8}]};var g=class extends S.Player{#V=null;#e=null;#q=null;#t={preset:x,volume:.012,onEndFile:null};constructor(t={}){super(V=>this.#r(V)),this.#t={...this.#t,...t},this.#q=new Map,this.#V=new(window.AudioContext||window.webkitAudioContext),this.#e=new p(this.#V,this.#t.preset),this.on("endOfFile",async()=>{await new Promise(V=>requestAnimationFrame(()=>setTimeout(V,1))),await this.#i()})}async play(t=null){t&&await this.#o(t),await this.#V.resume(),await super.play()}async pause(){await super.pause(),await this.#s(),await this.#e.cancelQueue()}async stop(){await super.stop(),await this.#s(),await this.#e.cancelQueue()}async#i(){typeof this.#t.onEndFile=="function"&&await this.#t.onEndFile()}async#r(t){if(t.name!=="Note on"&&t.name!=="Note off"||!this.isPlaying()||t.noteNumber===void 0)return;let V=this.#V.currentTime;switch(t.name){case"Note on":if(t.velocity>0&&t.velocity<=127){this.#a(t.noteNumber);let q=t.velocity/127*this.#t.volume,e=this.#e.queueWaveTable(0,t.noteNumber,2,q);this.#q.set(t.noteNumber,e)}else this.#a(t.noteNumber);break;case"Note off":this.#a(t.noteNumber);break}}#a(t){let V=this.#q.get(t);V&&(V.cancel(),this.#q.delete(t))}#s(){this.#q&&(this.#q.forEach((t,V)=>{t&&t.cancel&&t.cancel()}),this.#q.clear())}async#o(t){this.isPlaying()&&this.stop(),this.#s(),await this.loadArrayBuffer(t)}};typeof window<"u"&&(window.MidiAudioPlayer=g);var Q=g;export{g as MidiAudioPlayer,Q as default};
|
|
17
|
+
function k(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")}function v(n,t){for(var V=0;V<t.length;V++){var q=t[V];q.enumerable=q.enumerable||!1,q.configurable=!0,"value"in q&&(q.writable=!0),Object.defineProperty(n,q.key,q)}}function b(n,t,V){return t&&v(n.prototype,t),V&&v(n,V),Object.defineProperty(n,"prototype",{writable:!1}),n}var c={VERSION:"2.0.17",NOTES:[],HEADER_CHUNK_LENGTH:14,CIRCLE_OF_FOURTHS:["C","F","Bb","Eb","Ab","Db","Gb","Cb","Fb","Bbb","Ebb","Abb"],CIRCLE_OF_FIFTHS:["C","G","D","A","E","B","F#","C#","G#","D#","A#","E#"]},E=[["C"],["C#","Db"],["D"],["D#","Eb"],["E"],["F"],["F#","Gb"],["G"],["G#","Ab"],["A"],["A#","Bb"],["B"]],M=0,w=function(t){E.forEach(function(V){V.forEach(function(q){return c.NOTES[M]=q+t}),M++})};for(T=-1;T<=9;T++)w(T);var T,r=(function(){function n(){k(this,n)}return b(n,null,[{key:"byteToHex",value:function(V){return("0"+V.toString(16)).slice(-2)}},{key:"bytesToHex",value:function(V){var q=[];return V.forEach(function(e){return q.push(n.byteToHex(e))}),q.join("")}},{key:"hexToNumber",value:function(V){return parseInt(V,16)}},{key:"bytesToNumber",value:function(V){return n.hexToNumber(n.bytesToHex(V))}},{key:"bytesToLetters",value:function(V){var q=[];return V.forEach(function(e){return q.push(String.fromCharCode(e))}),q.join("")}},{key:"decToBinary",value:function(V){return(V>>>0).toString(2)}},{key:"getVarIntLength",value:function(V){for(var q=V[0],e=1;q>=128;)q=V[e],e++;return e}},{key:"readVarInt",value:function(V){var q=0;return V.forEach(function(e){var a=e;a&128?(q+=a&127,q<<=7):q+=a}),q}},{key:"atob",value:(function(t){function V(q){return t.apply(this,arguments)}return V.toString=function(){return t.toString()},V})(function(t){return typeof atob=="function"?atob(t):Buffer.from(t,"base64").toString("binary")})}]),n})(),U=(function(){function n(t,V){k(this,n),this.enabled=!0,this.eventIndex=0,this.pointer=0,this.lastTick=0,this.lastStatus=null,this.index=t,this.data=V,this.delta=0,this.runningDelta=0,this.events=[];var q=this.data.subarray(this.data.length-3,this.data.length);if(!(q[0]===255&&q[1]===47&&q[2]===0))throw"Invalid MIDI file; Last three bytes of track "+this.index+"must be FF 2F 00 to mark end of track"}return b(n,[{key:"reset",value:function(){return this.enabled=!0,this.eventIndex=0,this.pointer=0,this.lastTick=0,this.lastStatus=null,this.delta=0,this.runningDelta=0,this}},{key:"enable",value:function(){return this.enabled=!0,this}},{key:"disable",value:function(){return this.enabled=!1,this}},{key:"setEventIndexByTick",value:function(V){V=V||0;for(var q=0;q<this.events.length;q++)if(this.events[q].tick>=V)return this.eventIndex=q,this}},{key:"getCurrentByte",value:function(){return this.data[this.pointer]}},{key:"getDeltaByteCount",value:function(){return r.getVarIntLength(this.data.subarray(this.pointer))}},{key:"getDelta",value:function(){return r.readVarInt(this.data.subarray(this.pointer,this.pointer+this.getDeltaByteCount()))}},{key:"handleEvent",value:function(V,q){if(q=q||!1,q){var e=V-this.lastTick,a=this.getDelta(),A=e>=a;if(this.pointer<this.data.length&&(q||A)){var i=this.parseEvent();if(this.enabled)return i}}else{for(var s=[];this.events[this.eventIndex]&&this.events[this.eventIndex].tick<=V;)this.enabled&&s.push(this.events[this.eventIndex]),this.eventIndex++;if(s.length>0)return s}return null}},{key:"getStringData",value:function(V){var q=r.getVarIntLength(this.data.subarray(V+2)),e=r.readVarInt(this.data.subarray(V+2,V+2+q)),a=r.bytesToLetters(this.data.subarray(V+2+q,V+2+q+e));return a}},{key:"parseEvent",value:function(){var V=this.pointer+this.getDeltaByteCount(),q={},e=this.getDeltaByteCount();if(q.track=this.index+1,q.delta=this.getDelta(),this.lastTick=this.lastTick+q.delta,this.runningDelta+=q.delta,q.tick=this.runningDelta,q.byteIndex=this.pointer,this.data[V]==255){switch(this.data[V+1]){case 0:q.name="Sequence Number";break;case 1:q.name="Text Event",q.string=this.getStringData(V);break;case 2:q.name="Copyright Notice";break;case 3:q.name="Sequence/Track Name",q.string=this.getStringData(V);break;case 4:q.name="Instrument Name",q.string=this.getStringData(V);break;case 5:q.name="Lyric",q.string=this.getStringData(V);break;case 6:q.name="Marker",q.string=this.getStringData(V);break;case 7:q.name="Cue Point",q.string=this.getStringData(V);break;case 9:q.name="Device Name",q.string=this.getStringData(V);break;case 32:q.name="MIDI Channel Prefix";break;case 33:q.name="MIDI Port",q.data=r.bytesToNumber([this.data[V+3]]);break;case 47:q.name="End of Track";break;case 81:q.name="Set Tempo",q.data=Math.round(6e7/r.bytesToNumber(this.data.subarray(V+3,V+6))),this.tempo=q.data;break;case 84:q.name="SMTPE Offset";break;case 88:q.name="Time Signature",q.data=this.data.subarray(V+3,V+7),q.timeSignature=""+q.data[0]+"/"+Math.pow(2,q.data[1]);break;case 89:q.name="Key Signature",q.data=this.data.subarray(V+3,V+5);var a=q.data[0]>127?q.data[0]-256:q.data[0];a>=0?q.keySignature=c.CIRCLE_OF_FIFTHS[a]:q.keySignature=c.CIRCLE_OF_FOURTHS[Math.abs(a)],q.data[1]==0?q.keySignature+=" Major":q.data[1]==1&&(q.keySignature+=" Minor");break;case 127:q.name="Sequencer-Specific Meta-event";break;default:q.name="Unknown: "+this.data[V+1].toString(16);break}var A=r.getVarIntLength(this.data.subarray(V+2)),i=r.readVarInt(this.data.subarray(V+2,V+2+A));this.pointer+=e+2+A+i}else if(this.data[V]===240){q.name="Sysex";var s=r.getVarIntLength(this.data.subarray(V+1)),h=r.readVarInt(this.data.subarray(V+1,V+1+s));q.data=this.data.subarray(V+1+s,V+1+s+h),this.pointer+=e+1+s+h}else if(this.data[V]===247){q.name="Sysex (escape)";var o=r.getVarIntLength(this.data.subarray(V+1)),u=r.readVarInt(this.data.subarray(V+1,V+1+o));q.data=this.data.subarray(V+1+o,V+1+o+u),this.pointer+=e+1+o+u}else if(this.data[V]<128)if(q.running=!0,q.noteNumber=this.data[V],q.noteName=c.NOTES[this.data[V]],q.velocity=this.data[V+1],this.lastStatus<=143)q.name="Note off",q.channel=this.lastStatus-128+1,this.pointer+=e+2;else if(this.lastStatus<=159)q.name="Note on",q.channel=this.lastStatus-144+1,this.pointer+=e+2;else if(this.lastStatus<=175)q.name="Polyphonic Key Pressure",q.channel=this.lastStatus-160+1,q.note=c.NOTES[this.data[V]],q.pressure=this.data[V+1],this.pointer+=e+2;else if(this.lastStatus<=191)q.name="Controller Change",q.channel=this.lastStatus-176+1,q.number=this.data[V],q.value=this.data[V+1],this.pointer+=e+2;else if(this.lastStatus<=207)q.name="Program Change",q.channel=this.lastStatus-192+1,q.value=this.data[V+1],this.pointer+=e+1;else if(this.lastStatus<=223)q.name="Channel Key Pressure",q.channel=this.lastStatus-208+1,this.pointer+=e+1;else if(this.lastStatus<=239)q.name="Pitch Bend",q.channel=this.lastStatus-224+1,q.value=(this.data[V+1]&127)<<7|this.data[V]&127,this.pointer+=e+2;else throw"Unknown event (running): ".concat(this.lastStatus);else if(this.lastStatus=this.data[V],this.data[V]<=143)q.name="Note off",q.channel=this.lastStatus-128+1,q.noteNumber=this.data[V+1],q.noteName=c.NOTES[this.data[V+1]],q.velocity=Math.round(this.data[V+2]/127*100),this.pointer+=e+3;else if(this.data[V]<=159)q.name="Note on",q.channel=this.lastStatus-144+1,q.noteNumber=this.data[V+1],q.noteName=c.NOTES[this.data[V+1]],q.velocity=Math.round(this.data[V+2]/127*100),this.pointer+=e+3;else if(this.data[V]<=175)q.name="Polyphonic Key Pressure",q.channel=this.lastStatus-160+1,q.note=c.NOTES[this.data[V+1]],q.pressure=this.data[V+2],this.pointer+=e+3;else if(this.data[V]<=191)q.name="Controller Change",q.channel=this.lastStatus-176+1,q.number=this.data[V+1],q.value=this.data[V+2],this.pointer+=e+3;else if(this.data[V]<=207)q.name="Program Change",q.channel=this.lastStatus-192+1,q.value=this.data[V+1],this.pointer+=e+2;else if(this.data[V]<=223)q.name="Channel Key Pressure",q.channel=this.lastStatus-208+1,this.pointer+=e+2;else if(this.data[V]<=239)q.name="Pitch Bend",q.channel=this.lastStatus-224+1,q.value=(this.data[V+2]&127)<<7|this.data[V+1]&127,this.pointer+=e+3;else throw"Unknown event: ".concat(this.data[V]);return this.delta+=q.delta,this.events.push(q),q}},{key:"endOfTrack",value:function(){return this.data[this.pointer+1]==255&&this.data[this.pointer+2]==47&&this.data[this.pointer+3]==0}}]),n})();Uint8Array.prototype.forEach||Object.defineProperty(Uint8Array.prototype,"forEach",{value:Array.prototype.forEach});var B=(function(){function n(t,V){k(this,n),this.sampleRate=5,this.startTime=0,this.buffer=V||null,this.midiChunksByteLength=null,this.division,this.format,this.setTimeoutId=!1,this.scheduledTime=0,this.tracks=[],this.instruments=[],this.defaultTempo=120,this.tempo=null,this.startTick=0,this.tick=0,this.lastTick=null,this.inLoop=!1,this.totalTicks=0,this.events=[],this.totalEvents=0,this.tempoMap=[],this.eventListeners={},typeof t=="function"&&this.on("midiEvent",t)}return b(n,[{key:"loadFile",value:function(V){throw"loadFile is only supported on Node.js"}},{key:"loadArrayBuffer",value:function(V){return this.buffer=new Uint8Array(V),this.fileLoaded()}},{key:"loadDataUri",value:function(V){for(var q=r.atob(V.split(",")[1]),e=new Uint8Array(q.length),a=0;a<q.length;a++)e[a]=q.charCodeAt(a);return this.buffer=e,this.fileLoaded()}},{key:"getFilesize",value:function(){return this.buffer?this.buffer.length:0}},{key:"fileLoaded",value:function(){if(!this.validate())throw"Invalid MIDI file; should start with MThd";return this.defaultTempo=120,this.setTempo(this.defaultTempo).getDivision().getFormat().getTracks().dryRun()}},{key:"validate",value:function(){return r.bytesToLetters(this.buffer.subarray(0,4))==="MThd"}},{key:"getFormat",value:function(){return this.format=r.bytesToNumber(this.buffer.subarray(8,10)),this}},{key:"getTracks",value:function(){this.tracks=[];for(var V=0;V<this.buffer.length;){if(r.bytesToLetters(this.buffer.subarray(V,V+4))=="MTrk"){var q=r.bytesToNumber(this.buffer.subarray(V+4,V+8));this.tracks.push(new U(this.tracks.length,this.buffer.subarray(V+8,V+8+q)))}V+=r.bytesToNumber(this.buffer.subarray(V+4,V+8))+8}var e=0;return this.tracks.forEach(function(a){e+=8+a.data.length}),this.midiChunksByteLength=c.HEADER_CHUNK_LENGTH+e,this}},{key:"enableTrack",value:function(V){return this.tracks[V-1].enable(),this}},{key:"disableTrack",value:function(V){return this.tracks[V-1].disable(),this}},{key:"getDivision",value:function(){return this.division=r.bytesToNumber(this.buffer.subarray(12,c.HEADER_CHUNK_LENGTH)),this}},{key:"playLoop",value:function(V){this.inLoop||(this.inLoop=!0,this.tick=this.getCurrentTick(),this.tracks.forEach(function(q,e){if(!V&&this.endOfFile())this.stop(),this.triggerPlayerEvent("endOfFile");else{var a=q.handleEvent(this.tick,V);if(V&&a)a.hasOwnProperty("name")&&a.name==="Set Tempo"&&this.setTempo(a.data),a.hasOwnProperty("name")&&a.name==="Program Change"&&(this.instruments.includes(a.value)||this.instruments.push(a.value));else if(a){var A=Array.isArray(a)?a:[a];A.forEach(function(i){i.hasOwnProperty("name")&&i.name==="Set Tempo"&&this.setTempo(i.data),this.emitEvent(i)},this)}}},this),!V&&this.isPlaying()&&this.triggerPlayerEvent("playing",{tick:this.tick}),this.inLoop=!1)}},{key:"setTempo",value:function(V){return this.tempo=V,this}},{key:"setStartTime",value:function(V){return this.startTime=V,this}},{key:"play",value:function(){if(this.isPlaying())throw"Already playing...";return this.startTime||(this.startTime=new Date().getTime()),this.scheduledTime=Date.now(),this.schedulePlayLoop(this.sampleRate),this}},{key:"schedulePlayLoop",value:function(V){var q=this;this.setTimeoutId=setTimeout(function(){if(q.playLoop(),q.setTimeoutId!==!1){q.scheduledTime+=q.sampleRate;var e=Date.now()-q.scheduledTime;q.schedulePlayLoop(Math.max(0,q.sampleRate-e))}},V)}},{key:"pause",value:function(){return clearTimeout(this.setTimeoutId),this.setTimeoutId=!1,this.scheduledTime=0,this.startTick=this.tick,this.startTime=0,this}},{key:"stop",value:function(){return clearTimeout(this.setTimeoutId),this.setTimeoutId=!1,this.scheduledTime=0,this.startTick=0,this.startTime=0,this.resetTracks(),this}},{key:"skipToTick",value:function(V){this.stop(),this.startTick=V;for(var q=this.tempoMap.length-1;q>=0;q--)if(this.tempoMap[q].tick<=V){this.setTempo(this.tempoMap[q].tempo);break}return this.collectStateAtTick(V).forEach(function(e){this.emitEvent(e)},this),this.tracks.forEach(function(e){e.setEventIndexByTick(V)}),this}},{key:"collectStateAtTick",value:function(V){var q={};return this.events.forEach(function(e){e.forEach(function(a){if(!(a.tick>=V)){var A;a.name==="Program Change"?A="pc:"+a.channel:a.name==="Controller Change"?A="cc:"+a.channel+":"+a.number:a.name==="Pitch Bend"&&(A="pb:"+a.channel),A&&(q[A]=a)}})}),Object.keys(q).map(function(e){return q[e]})}},{key:"skipToPercent",value:function(V){if(V<0||V>100)throw"Percent must be number between 1 and 100.";return this.skipToTick(Math.round(V/100*this.totalTicks)),this}},{key:"skipToSeconds",value:function(V){var q=this.getSongTime();if(V<0||V>q)throw V+" seconds not within song time of "+q;return this.skipToTick(this.secondsToTicks(V)),this}},{key:"isPlaying",value:function(){return this.setTimeoutId!==!1}},{key:"dryRun",value:function(){for(this.resetTracks();!this.endOfFile();)this.playLoop(!0);return this.events=this.getEvents(),this.totalEvents=this.getTotalEvents(),this.totalTicks=this.getTotalTicks(),this.buildTempoMap(),this.startTick=0,this.startTime=0,this.resetTracks(),this.triggerPlayerEvent("fileLoaded",this),this}},{key:"resetTracks",value:function(){return this.tracks.forEach(function(V){return V.reset()}),this}},{key:"getEvents",value:function(){return this.tracks.map(function(V){return V.events})}},{key:"getTotalTicks",value:function(){return Math.max.apply(null,this.tracks.map(function(V){return V.delta}))}},{key:"getTotalEvents",value:function(){return this.tracks.reduce(function(V,q){return{events:{length:V.events.length+q.events.length}}},{events:{length:0}}).events.length}},{key:"buildTempoMap",value:function(){var V=[];return this.events.forEach(function(q){q.forEach(function(e){e.name==="Set Tempo"&&V.push({tick:e.tick,tempo:e.data})})}),V.sort(function(q,e){return q.tick-e.tick}),this.tempoMap=[{tick:0,tempo:this.defaultTempo}],V.forEach(function(q){var e=this.tempoMap[this.tempoMap.length-1];q.tick===e.tick?e.tempo=q.tempo:this.tempoMap.push({tick:q.tick,tempo:q.tempo})},this),this}},{key:"ticksToSeconds",value:function(V,q){for(var e=0,a=V,A=0;A<this.tempoMap.length;A++){var i=this.tempoMap[A],s=A+1<this.tempoMap.length?this.tempoMap[A+1].tick:q;if(!(s<=V)){var h=Math.max(i.tick,V),o=Math.min(s,q);if(h>=q)break;var u=o-h;e+=u/this.division/i.tempo*60,a=o}}if(a<q){var d=this.tempoMap[this.tempoMap.length-1];e+=(q-a)/this.division/d.tempo*60}return e}},{key:"secondsToTicks",value:function(V){for(var q=V,e=0,a=0;a<this.tempoMap.length;a++){var A=this.tempoMap[a],i=a+1<this.tempoMap.length?this.tempoMap[a+1].tick:1/0,s=i-A.tick,h=s/this.division/A.tempo*60;if(q<=h)return e=A.tick+Math.round(q/60*A.tempo*this.division),e;q-=h,e=i}return this.totalTicks}},{key:"getSongTime",value:function(){return this.ticksToSeconds(0,this.totalTicks)}},{key:"getSongTimeRemaining",value:function(){return Math.round(this.ticksToSeconds(this.getCurrentTick(),this.totalTicks))}},{key:"getSongPercentRemaining",value:function(){return Math.round(this.getSongTimeRemaining()/this.getSongTime()*100)}},{key:"bytesProcessed",value:function(){return c.HEADER_CHUNK_LENGTH+this.tracks.length*8+this.tracks.reduce(function(V,q){return{pointer:V.pointer+q.pointer}},{pointer:0}).pointer}},{key:"eventsPlayed",value:function(){return this.tracks.reduce(function(V,q){return{eventIndex:V.eventIndex+q.eventIndex}},{eventIndex:0}).eventIndex}},{key:"endOfFile",value:function(){return this.isPlaying()?this.totalTicks-this.tick<=0:this.bytesProcessed()>=this.midiChunksByteLength}},{key:"getCurrentTick",value:function(){if(!this.startTime)return this.startTick;var V=(new Date().getTime()-this.startTime)/1e3,q=this.ticksToSeconds(0,this.startTick);return this.secondsToTicks(q+V)}},{key:"emitEvent",value:function(V){return this.triggerPlayerEvent("midiEvent",V),this}},{key:"on",value:function(V,q){return this.eventListeners.hasOwnProperty(V)||(this.eventListeners[V]=[]),this.eventListeners[V].push(q),this}},{key:"triggerPlayerEvent",value:function(V,q){return this.eventListeners.hasOwnProperty(V)&&this.eventListeners[V].forEach(function(e){return e(q||{})}),this}}]),n})(),S={Player:B,Utils:r,Constants:c};var p=class{#V=null;#e=null;#q=[];#t=.05;#i=1e-6;constructor(t,V){this.#V=t,this.#e=V,this.#e.zones.map(q=>this.#r(q))}queueWaveTable(t,V,q,e,a){this.#V.state==="suspended"&&this.#V.resume().catch(()=>{});let A=this.#o(e),i=this.#u(V);if(!i?.buffer)return null;let s=i.originalPitch-100*i.coarseTune-i.fineTune,h=Math.pow(2,(100*V-s)/1200),o=Math.max(t,this.#V.currentTime),u=q+this.#t,d=i.loopStart>=1&&i.loopStart<i.loopEnd;d||(u=Math.min(u,i.buffer.duration/h));let f=this.#h();this.#s(f,i,A,o,u,q);let l=this.#V.createBufferSource();if(l.buffer=i.buffer,l.playbackRate.setValueAtTime(h,0),a?.length>0&&(l.playbackRate.setValueAtTime(h,o),a.forEach(m=>{let y=Math.pow(2,(100*(V+m.delta)-s)/1200);l.playbackRate.linearRampToValueAtTime(y,o+m.when)})),l.loop=d,d){let m=i.delay??0;l.loopStart=i.loopStart/i.sampleRate+m,l.loopEnd=i.loopEnd/i.sampleRate+m}return l.connect(f),l.start(o,i.delay??0),l.stop(o+u),f.audioBufferSourceNode=l,f.when=o,f.duration=u,f}queueChord(t,V,q,e,a,A){let i=this.#o(a);return q.map((s,h)=>this.queueWaveTable(this.#V,this.#V.destination,t,V,s,e,i-Math.random()*.01,A?.[h])).filter(Boolean)}async cancelQueue(){this.#q.forEach(t=>{t.gain.cancelScheduledValues(0),t.gain.setValueAtTime(this.#i,this.#V.currentTime),t.when=-1;try{t.audioBufferSourceNode?.disconnect()}catch{}})}#r(t){if(t.buffer)return Promise.resolve(t);if(t.delay=0,t.sample){let V=atob(t.sample),q=V.length,e=new Uint8Array(q);for(let s=0;s<q;s++)e[s]=V.charCodeAt(s);let a=new Int16Array(e.buffer),A=a.length;t.buffer=this.#V.createBuffer(1,A,t.sampleRate);let i=t.buffer.getChannelData(0);for(let s=0;s<A;s++)i[s]=a[s]/32768;return this.#a(t),t}else if(t.file){let V=atob(t.file),q=new Uint8Array(V.length);for(let e=0;e<V.length;e++)q[e]=V.charCodeAt(e);this.#V.decodeAudioData(q.buffer,e=>(t.buffer=e,this.#a(t),t),e=>(console.error("Audio decoding error:",e),!1))}else return this.#a(t),t}#a(t){t.loopStart=this.#A(t.loopStart,0),t.loopEnd=this.#A(t.loopEnd,0),t.coarseTune=this.#A(t.coarseTune,0),t.fineTune=this.#A(t.fineTune,0),t.originalPitch=this.#A(t.originalPitch,6e3),t.sampleRate=this.#A(t.sampleRate,44100)}#s(t,V,q,e,a,A){t.gain.setValueAtTime(this.#n(0),this.#V.currentTime);let i=Math.min(A,a-this.#t),s=V.ahdsr&&V.ahdsr.length>0?V.ahdsr:[{duration:0,volume:1},{duration:i,volume:1}];t.gain.cancelScheduledValues(e);let h=(s[0]?.volume??1)*q;t.gain.setValueAtTime(this.#n(h),e);let o=0,u=s[0]?.volume??1;for(let d of s){let{duration:f,volume:l}=d;if(f<=0)continue;let m=i-o;if(f>m){let y=m/f,C=u+y*(l-u);t.gain.linearRampToValueAtTime(this.#n(q*C),e+i);break}o+=f,u=l,t.gain.linearRampToValueAtTime(this.#n(q*u),e+o)}t.gain.linearRampToValueAtTime(this.#n(0),e+i+this.#t)}#h(){let t=this.#q.find(V=>V.target===this.#V.destination&&this.#V.currentTime>V.when+V.duration+.001);if(t){if(t.audioBufferSourceNode){try{t.audioBufferSourceNode.stop(0),t.audioBufferSourceNode.disconnect()}catch{}t.audioBufferSourceNode=null}}else t=this.#V.createGain(),t.gain.value=0,t.target=this.#V.destination,t.connect(this.#V.destination),t.cancel=()=>{t.when+t.duration>this.#V.currentTime&&(t.gain.cancelScheduledValues(0),t.gain.setTargetAtTime(this.#i,this.#V.currentTime,.1),t.when=this.#V.currentTime+1e-5,t.duration=0)},this.#q.push(t);return t}#u(t){let V=this.#e.zones.findLast(q=>t>=q.keyRangeLow&&t<=q.keyRangeHigh+1);return V&&this.#r(V),V}#o(t){let V=t?1*t:.5;return Math.min(V,.8)}#n(t){return t>this.#i?t:this.#i}#A(t,V){return typeof t=="number"?t:V}};var x={zones:[{midi:81,originalPitch:4200,keyRangeLow:0,keyRangeHigh:43,loopStart:256,loopEnd:768,coarseTune:0,fineTune:0,sampleRate:48e3,ahdsr:!1,file:"SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3LjcyLjEwMQAAAAAAAAAAAAAA//tUwAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAAGAACgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg//////////////////////////////////////////////////////////////////8AAAAATGF2YzU3Ljk2AAAAAAAAAAAAAAAAJALAAAAAAAAABgA5CeiPAAAAAAAAAAAAAAAAAAAA//vUxAAAB+gfQ1TwACTywCx/NYAJAABZOW7fg6F8L8A3AOwb5L2e7x5R5EoCADB8HwfPxACAYrB8H8oCDsHw/lAQdlwPqDHh/UCEp4fhiU8/ynv6BAGOZS1NzNUNm83W5HHJGz4Kk0TfzwzSZu8CgJ3TZ11pu3hi1hoxY8qMFcPAcBX40CM1RcwUo9EFQgiY2VPldy90c24GUwVQROZnA0ZXohQyMsyIBlAWEQK/zrsHfSBGmF4i+yiKKKNrP5FDrYJM+8XdeIRR1FaEwk0mLq5Upl0G35bBliJz8DxCcgSVtAYMpU27BVbW0tSXOzHsLU+88MTkCQ3PwO05aTrtqwF1G2YFHc7M1hamc5RYnJXbn6S9OU7L2apytcaEpk5bQVbXIszWrUzuzNatW5HKL05K+z9Jyip+vcyqG3yZTDELa1DcIazEIXV3jW1lV3jW1lV7h/M/7h/M/7h/9/+f/f/n/3/58qr2JTUtyqvYlNy3TXbFLct012xS3Kemu0lLWp6arSexu7G62Ja2Ja2Ja0QsKrWx13Wb36/a/7/ew5kMjLhQNcmAxqICUIjQsMqB4zeSzGokEALDBOxI2OrTTJJMLBUwcCQYAVMDdlQ0A6Zkis4q5jIAQzknMdGQMBLAltWVxZrJm4ma0hGaGCmrpKmfS87RrhMci3muq5p4+b4wKbPCqVlsBQHbcmCKhmxoZcGGmnZmJeZOEmiGS7nGjrWX5mn+j92HZJcMqKDIgYz0vMnJTHwUzYoMiIGdQNMuTIbj/U13dLc1aMqCjSTkzEvMpCTQjQy4qMkBjPTGR3X9pMI1N9q1aWtWpqtUyspMhBTOCwyYkMeAjNSsyUjMdATMCYyIgpZJZygGm+AqXGzWrWqtWzWrWjGgAy0lMhHwEXmVERjw4AigycfMdGwMVmSDhjQwCiSU1solVxiNamhqlpYZx3jllljvHLWWLlv/F3cfyKO+/8vfx/JY/7/y9/H8lj/v/Pv5Dk5D8bn4xGJyNxuf1llvHHWWW8cdZZbx//u0xLeAL2H/Z7nNkIFVkCR3sMAFx1llvHHWVbHGrllWAbmu1l2+wACIJmablgZJEkGiBRmRmRKSQMOakoAW1jywyxmXRDkBISlWnK1b7K0xdxcdLomjI+e1lat9latrlly7rLnrbVat8FFQgpgKeCmxTcgrgVVMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",anchor:.00533333},{midi:81,originalPitch:5400,keyRangeLow:44,keyRangeHigh:55,loopStart:128,loopEnd:384,coarseTune:0,fineTune:0,sampleRate:48e3,ahdsr:!1,file:"SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3LjcyLjEwMQAAAAAAAAAAAAAA//tUwAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAAEsADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM//////////////////////////////////////////////////////////////////8AAAAATGF2YzU3Ljk2AAAAAAAAAAAAAAAAJATAAAAAAAAABLAMEvhQAAAAAAAAAAAAAAAAAAAA//vUxAAACSwNaVQwACRXSC6/NYAIAAa9txyS8qHAwMDPlz5QEIIROfLn1AhBBy3lz/BCt5c/wQz5c/RBCXPlw/EEEHLPlz9EEOt8QQQcs+XPykQVh8uH4gcIHLD6w+JgcGkGbGakSCqjColKJDEMCR4mYQ8kQZ1UAiwCAIbAc4b1maEch6LAEVzMhwxuYQGCgLBWbmQSPi+kAzkOM6i/Ei2XrGgFiMbisXednEOO7NP9KJdLKedbxd7vvezh3pl/YdmreFqxnZjEgf+NyN/I1TXaWzqnqWqTOzTyyihuX0cMUlNa3S81TYWrGd63q/RRuno4xSUUbt3YzSYU1fuH8z/uH8zp6OMUlFK6e/KKTG5zKZy+ax/+4fzP+4fzP70rp78opL1PXv0lSzVy+tjjVyyrY41e4fzf91/N/3X83/dfzf91/N/3X5/3D+b/uv5v+6/m/7r/3/6/9/+sst446yy3jVyyrY41csq2ONXLKtjjVyyrKiLXdbW5JI24SEB1CQjhFAAXAIxdxbUKO0ekXEuKphJ5DkSgYKJVFFxQVwUwFDcRcUFcFcCjsTYoK4K4FHYmxQXwrgUdibFBfCvCjsTcRXhXhT8TcRXhXhT8TcRXhXhT8TcRXhXhT8TcakxBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tkxMWDzQgxS7zzACgAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq",anchor:.00266667},{midi:81,originalPitch:6600,keyRangeLow:56,keyRangeHigh:67,loopStart:64,loopEnd:192,coarseTune:0,fineTune:0,sampleRate:48e3,ahdsr:!1,file:"SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3LjcyLjEwMQAAAAAAAAAAAAAA//tUwAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAAE4ADs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs//////////////////////////////////////////////////////////////////8AAAAATGF2YzU3Ljk2AAAAAAAAAAAAAAAAJAXAAAAAAAAABODQyktQAAAAAAAAAAAAAAAAAAAA//vkxAAABywBgbQAACYVyC6/P9AwKAASUcckkt4YWD4fLn1AhBCJz5c+oEFghy5/ghy5+cghy7+GKZd/DHLn1HIYk5d/DHL+6H5d5TOdLnbLTLKrBqyq+vlkqeD4lCzTAngBgvMYACAAGg+NZZoFwogYAGAZCwCsDgBJsJhRJLyYvYUvg4BLFAA9AKpqYxQCumE3hMhEBIkBkBLuNR5oOGzUbs0Jk7jR1yTFgpzGY2TMgWV8qtT4fmaf4xDKgxlNgzTGRZScSFbPVQxarGZbWMLiNMUC1MshXMJx+MRSeaZHnuceOvbGrV2ls6MOQUMAAnMDAzMMgRMAQkMCQufiahT9zMJfim7ul5rIDBEFgJBgHgoHQuBANAwFA1WkUbqzssyns944flv09UjUcU9kjkkk9UjZfjOyzKep8Z2kxucyq9+ax9JFNJNJNZNFNFNVNJNJNbKRRvGQxjKejfJ2Udq/9bf1darY41U0U0U1U0k0k+k0U0U+U0k0k+k0e5/zD+5/zD+5/zX93/Nf3f81/d////////7/9f+//X/v/1/7/9Jop8ppJpJ9Jop6qwppJ7KxJGp6qwpHKrKxI2qqqwo3KrKxI2qqq9RuVWV8jaqqr1G5TEFNRTMuOTkuNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//sUxNoDwAAB/hwAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",anchor:.00133333},{midi:81,originalPitch:7800,keyRangeLow:68,keyRangeHigh:79,loopStart:32,loopEnd:96,coarseTune:0,fineTune:0,sampleRate:48e3,ahdsr:!1,file:"SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3LjcyLjEwMQAAAAAAAAAAAAAA//tUwAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAADwADm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm//////////////////////////////////////////////////////////////////8AAAAATGF2YzU3Ljk2AAAAAAAAAAAAAAAAJAZAAAAAAAAAA8CsVDBMAAAAAAAAAAAAAAAAAAAA//vExAAABmQBjaAAACGQBa9497AdtbAkWdckklxRyjhQ5BBYYqOFHRAXDHKHOGOUOcMco7nOJHawxynnOU5cMcHOXOcHOl3NXGMqsiEAqoMI8QsSUcIsgeiQgJISFCg5ABAyw+VQaiK8yY18FNiuxBUorwU0FdiC4ivimgrsQXEV4KaCuxBcTfBXAv4isTfiuBf6KxN+L4r8RUU3wXoL+JsU3wXoL+JsV3gvRSpMQU1FMy45OS41qqqqqqqqqqqqqqqqqqqqqqqq6goZoAABEOiCXDs8P3G8oicJAhZjVVVBlsStNFVVUT8StNVMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//sUxOuDxEQnByYExigAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",anchor:66667e-8},{midi:81,originalPitch:9e3,keyRangeLow:80,keyRangeHigh:91,loopStart:16,loopEnd:48,coarseTune:0,fineTune:0,sampleRate:48e3,ahdsr:!1,file:"SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3LjcyLjEwMQAAAAAAAAAAAAAA//tUwAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAADwADm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm//////////////////////////////////////////////////////////////////8AAAAATGF2YzU3Ljk2AAAAAAAAAAAAAAAAJAaAAAAAAAAAA8ChXkahAAAAAAAAAAAAAAAAAAAA//vExAAABkQDh+AAACGUhq9895iZZVlzMgFEYk0nBACCLQfD6gTB8/qBDBwMflC4f/gQMfqBMH/4OHP4Df+XBw5+UBN/6wJu1fapqZhlttyF2FyUYQ0W0QkFSJiRIro4TAYk8aQCAQCAKjiRIkSr+xQUFOBQUV/5BQU4KChv+CgoL4KCu/4QUN8KCn/8UFN8FFf/wgp/hQ3/8FBXYgoL/+FBX5BQ3/8FBfigopVMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//sUxNoDwAAB/gAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",anchor:33333e-8},{midi:81,originalPitch:10200,keyRangeLow:92,keyRangeHigh:103,loopStart:8,loopEnd:56,coarseTune:0,fineTune:0,sampleRate:48e3,ahdsr:!1,file:"SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3LjcyLjEwMQAAAAAAAAAAAAAA//tUwAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAADwADm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm//////////////////////////////////////////////////////////////////8AAAAATGF2YzU3Ljk2AAAAAAAAAAAAAAAAJAaAAAAAAAAAA8AljJJeAAAAAAAAAAAAAAAAAAAA//vExAAABmgDh+AAACG7Cq649JmAh3unfGYwJRhSgQBBEXB8PjogBDn8EwfP6gQdicP/g4GOXB/lHfgmH905/UclwcOf/8oA/2r/qekIFM1D+AxK8OEgo9IhpLSJFdJaehzC3CbBom0GChJpEiRn/tRxIkSJT6OJJB3BUFXSwNB3BUFQVgqCoaqBoGsqd4iBo8oGgaTWCoaxEDR6VBUFTpUFQV//BoGoiBoO//rxKCv//iIGv/+WTEFNRTMuOTkuNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//sUxNoDwAAB/gAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",anchor:16667e-8},{midi:81,originalPitch:11400,keyRangeLow:104,keyRangeHigh:115,loopStart:12,loopEnd:52,coarseTune:0,fineTune:0,sampleRate:48e3,ahdsr:!1,file:"SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3LjcyLjEwMQAAAAAAAAAAAAAA//tUwAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAADwADm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm//////////////////////////////////////////////////////////////////8AAAAATGF2YzU3Ljk2AAAAAAAAAAAAAAAAJAaAAAAAAAAAA8CNr1v4AAAAAAAAAAAAAAAAAAAA//vExAAAB1SVheCEbeI4SC349ApomIy4jYiPtA6x5AACs4xjvkAAPmMY/wAXzGMf4AL/X+IgG4PvwQOfIQQOZcH//wQlwfBA5/1h/iB2sP/17/1GMvIAEJ8BiUYMEW0NSAKQjJWj5HCbB/EGHqQ5m2plUuYL1WvVqeGZmb/VVVf9mZr/1VVX9hYGwKgFgbB9TCwNgbB8BG6lKUreYxjfKUrfQxvylK3oYxjeUKAgICJYoCAgICUvoYxvylL9DGN9SlL9P+UrfMYxjOoYCAgIUb6lL////////qUpSzASTEFNRTMuOTkuNaqqqqpMQU1FMy45OS41qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//sUxNoDwAAB/gAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq",anchor:8333e-8},{midi:81,originalPitch:12600,keyRangeLow:116,keyRangeHigh:127,loopStart:6,loopEnd:42,coarseTune:0,fineTune:0,sampleRate:48e3,ahdsr:!1,file:"SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3LjcyLjEwMQAAAAAAAAAAAAAA//tUwAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAAEIADo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo//////////////////////////////////////////////////////////////////8AAAAATGF2YzU3Ljk2AAAAAAAAAAAAAAAAJAaQAAAAAAAABCDWHfeqAAAAAAAAAAAAAAAAAAAA//vUxAAACUUrfeCE1eMLSCx88a54l3jMh4t/trUApEAAAUAGYxja+WMYx/yAAH+MY/+AYx/4AAX8xjH/7/8AF//zHyAMdoIAgAAADAYWTt4IA/Kc5/////////y4Pg/v3FZropQkAAAEiDVBBhkjdBSk5JyDlHqDmWi+kJRsJiOZ69eva6x+zAQEBCm/9VVVb/9mVVL/9mZmP/6qqqn/8ZlVV/6zMzM3/VCgICanXX+5I2JRJHaana+SSNwIQEQAwAQAQEw6j5KBCASACACAKAmBGHcdr5RNR2jtJRsed/DkTU1NTra/3Oc5znf+1rWuc7/3Na1ra/9znOc7/9rWtc7/9zWta3/4c5znO/9rTU1NXOvbW4lDtDyHkPI7TqQIQAxMQU1FMy45OS41qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy45OS41qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//sUxNoDwAABpAAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq",anchor:4167e-8}]};var g=class extends S.Player{#V=null;#e=null;#q=null;#t={preset:x,volume:.012,onEndFile:null};constructor(t={}){super(V=>this.#r(V)),this.#t={...this.#t,...t},this.#q=new Map,this.#V=new(window.AudioContext||window.webkitAudioContext),this.#e=new p(this.#V,this.#t.preset),this.on("endOfFile",async()=>{await new Promise(V=>requestAnimationFrame(()=>setTimeout(V,1))),await this.#i()})}async load(t){this.isPlaying()&&this.stop(),this.#s(),await this.loadArrayBuffer(t)}async play(t=null){t&&await this.load(t),await this.#V.resume(),await super.play()}async pause(){await super.pause(),await this.#s(),await this.#e.cancelQueue()}async stop(){await super.stop(),await this.#s(),await this.#e.cancelQueue()}async#i(){typeof this.#t.onEndFile=="function"&&await this.#t.onEndFile()}async#r(t){if(t.name!=="Note on"&&t.name!=="Note off"||!this.isPlaying()||t.noteNumber===void 0)return;let V=this.#V.currentTime;switch(t.name){case"Note on":if(t.velocity>0&&t.velocity<=127){this.#a(t.noteNumber);let q=t.velocity/127*this.#t.volume,e=this.#e.queueWaveTable(0,t.noteNumber,2,q);this.#q.set(t.noteNumber,e)}else this.#a(t.noteNumber);break;case"Note off":this.#a(t.noteNumber);break}}#a(t){let V=this.#q.get(t);V&&(V.cancel(),this.#q.delete(t))}#s(){this.#q&&(this.#q.forEach((t,V)=>{t&&t.cancel&&t.cancel()}),this.#q.clear())}};typeof window<"u"&&(window.MidiAudioPlayer=g);var Q=g;export{g as MidiAudioPlayer,Q as default};
|
|
18
18
|
//# sourceMappingURL=index.mjs.map
|