audio-mixer-engine 0.3.4 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- const k = "data:audio/mpeg;base64,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", C = "data:audio/mpeg;base64,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qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tkxPIADij5M+wwzYmAm6X9hJmwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//s0xPaAClDTI6OxLwCwkeLoEJkoqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//sUxNoDwAAB/gAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";
1
+ const _ = "data:audio/mpeg;base64,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", k = "data:audio/mpeg;base64,//uUxAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAAMAAAQIAA0NDQ0NDQ0NE5OTk5OTk5OaWlpaWlpaWmAgICAgICAgICTk5OTk5OTk6qqqqqqqqqqu7u7u7u7u7u7zs7Ozs7Ozs7f39/f39/f3+/v7+/v7+/v7/n5+fn5+fn5//////////8AAABQTEFNRTMuMTAwBLkAAAAAAAAAABUgJAUHgQAB4AAAECAxW679AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//vUxAAACCABc/QAAASlsCq/NbBI//6YZkIUAAFLgQBA4oRqEAYLghE58ufUCCwQdg4cLg+fB8/KAMHwfPlAfB8Hwff/5cH3g+fy4Pg/+XPwQd/wQBD86Y8gkBAAEAAAAAAAAAgQrkCrEVHmoOI2GbVQgUVLGCAZk2giahgNUJfWEmZuCS6GQYHryLrek+YWAQUYGDJjZBcUZc/xZkxAJDiUv6cjCAkIBQcZEWkwrFnMRBNIDzDyqSPuYmdBd1NGE0AqpQKAGNiEXfAKhBiYOYGUjJkZ2AOyjaY0ImdI5lZETByCVvGepnGECLcW5goFEIwAAELA6QMjdpbgFAlHSELMYI6NhsXTlT0a85tNYaSysWCRGDNkX038MuQl7DiPSmsBRZZNyBo9HaWVW8U9F1wzIXGXk40RpLrPIy1qVQ1IHRXk7MxS3Pu14lTdsYzHOw7VlM7jjhVs6f7KYf65qepsuZYXYxJolGpbL5TLbNNSZXJm9p0M//iMsVQ7/6VK3d/rV2AgQAApEaRpCKTcVUUkVtqqLCJGtNg6y2jtwHDESSvk2Fw6N3+aXf7R0rLYHiC7AwuXLmKwOjqYF4Cw7uz6Q6jxc1eIrkEUD8+uLyva193XIM/kiYtbDp9tqTes/PzSb/uzzOWyZ2XrvWm1tmkXf87tJ/PepWrAEAoCaGjykkhihRd+7cjO7+xYQCJAAKmD4IYmMAkRJVGVgoqxsihA6IvC3dmL8QhTKbyvzcWEi1Yqn8Nxw+iSr5SxjlLdCXdF3Chq2GqmhH0HapSVXVjm0PmJjclY5ot8mZWeQo3Sli4Zr0gsEtIUA8FfWI9fP2eSDq6qlkGky9PhZFUT037KSvLeE8c2K8NvKfrAzDCxhsJ7mU9Vm07FWjX2tLxLQq2lvjQyS8yqG7DN9iqu/9xVUBAAABcGjNABl2BF8EOIWCATqRY08Bfh2GIJetn1bj8qt5zG4On8b9aPU0lrzLtNyztT9/lJVks/Wfh/luS1ajgshnKktaVD8Ujr7PfE//uUxMAAESEfTf2GAAKRL2l9h5o57CVDL1DUxE+16N/ZlErt0d6INCzx1MGSos2JUt3lWfLY5nki11ZSM6xtb3vTNd4HNv2PHg2roFE57bqRmzkX8dHGwUKEj00aazgk3DW3/7cM4oAXR8yqCLcwz1t2RCQUfk4mRuE/8tV2zdsVaBI3LojIxMcJgfx1zuK5vy3l1NN67gZjqF3iZF7JYhSpOY7UOy+nVNFM/VDGaZ3IQTIvjgSxHMbinYjE9ZWx6u2VOMivcV2m5bQIG9xSsb008hZkgymncftVx7hz2Rw/djtH3XsESkzENp/uY29u/2N17bvE/3K/tHpXvh6tn//6OHIgAAAnSNloBpAdRMhzluDPRIY5G1PMW1qMdGH+rLq+7w5m6FLCg7f7kP4nRnwIbPqAr3z+Sq5NEkz8M1GJBIpzMfL6qmwnkgnBnm8cgpbGf0JPSu4OYzZuJ8kmaNg2REliphhaQ1GNv2xwcoQkOczv23S5NOZDUaqY3db6//uUxN6Ak91LQ+wkfkpzLCi9h5o5m/kuQyJqdDKobXybFrBuLP2ZUVq8t3obzf/FeCNVgs9F5McOOmAhPUmiE0LFTZsTd5PPvG4KGI1mrDT7xZbWfMGWK4sTUXVfXEmoGG4/Fhsam3nSMA8mV7HQiZSPj/UNE4uFAsi3GeP1DyXqGEpWF9ZWiw5YU8jQAFwTqnZjplvvecwlhCe6n+RUtMErkJqWac+55tuWygx3UMW3XReqPwXZV9Xe79dshSru/e5HYRAAABdHqgdkdLIsIwNWlfDptNIBi+6q0GPS1prUB3I9agHNVpjZY08jLWAn1Asorb1qgRm6JMnkisbU6sVJq4W1twY2hvfs8NcqQqhiOYuKdEaS78/WFedz6osvG5yMR+1x1a1MS7ifEJpqpQcjeUGQTtd48omOqDGQuP7+W+/ZzzlFrinuP3j73Zr/3/Xz4twbleyOyTu97+/rSHBAVMZSQMqAREhdluKKDIZKPAQa1ZsklZOwFvo2yu1P//uExPYA0xEhQ+ek3gpHpCh5h5n5M3Sq5CW7uLj40BOOZlHgvYfxp9RZnadQwuTUnF0tRn7jhS1eMKQQpPHKcosSFtjMu3JRSxomIkDRDLB0OzxwwAodOIFFDal4zoQh9xUQmt+3kwqINMQcOmFtY7+L+VOxqzUXfKVevPvpcUdZVpKR8+Jz+1I63+/9eGEwAADLgoRDkhMWDZvH66VrO3JUGVutvizKB38fFVpreIUVGy2h3h0z9uKFp3Mb+0WDhss4HatoqOu3G0zFRib5GLbM4EzUb1TskJqa/CizSmo4hEQIFoQFyOZrGczw0Y/STG673ZA5IfmVs4UuaSBrTcMPTM5iII/zpKb87Xeu5rWv/e3zXn92LLiYIABexmOWmGikUwIJAXEntrwM7DKkoWFsYvj8rSD3LxcOnK/R+aLkEUGRdatbWULavvLikQcq//t0xP4Ak6FXP+y80cpiKig9l6H5RVFThop0KGGkgRGh0CwAgaDowc2nqVZRxQKRxRhDvXPCJvSS0iFI85U1+lmnNNOt64jha/7MFnFjRcq+x21mGoNV1UFWs2u22/6/aezV7f/+eINQQAVfQ5oBMXoZE9i7IPa2wZpK3YNo3Sau3kksskwNzLClcIIlSdXPtjjJs9fvMUkskrMlVE+LTnCpzv2cM2OTSJSc5krnXLMywyazLJWbtZ4au75+7aeX2/+V0/uPUdS3O7d3jWihOnC0MeKaZjXaLft85pbb57173f+RdIqAASvBmEzBisCQM0FZzTmvLujaergs8YNFZCuuDZU7bC5oKicRFULDSaTRghituw9ahmpIE5DIk7WX//uExOiAEUUhQ+w9D8okJqg9hiF54TxZEqxMmqScWJblwliNhGiYNkhnFX7qt/aV3QmB4ngkyP2J9ypCsWRXyTzPWkBEOA4NOnXKbKr//v+tpGDBAUwA1QSAmSX6dh3Y7Wd1MFnSVTktIT5eR2GaNxAOssKW4iaIeHsuOCCRKKpoeiZTh4IwJiKRuGZmN+SqOUCQKiQkB0VNy2S/hOW1yNtWtT62P82cfNovPjYvJh7JPib2kek0/dnfmv3jhJ6R8Zmu2/cyKfEsJxdbu9kXRmAAAHQCgrmAZQKJkLPGnRqBX+eVKpu7ZHFZkwNzB8QAFnRgqVhJEo/JTG25S3cnqScozDAZCYsOLEnOVaM4wPgPC4egqB9mDghpYcSeQNUT1sHvPvHN6ZdZsqKsMJjr7TI5kPTx1vMqs1+2guYHVnNUppvFrENscWYqzLu8qaRC//tkxPwAD61HQ+wkz8HdI+g9hI45gAS6BQcpTFqwRZcUONEHuQgyUG/n0dMLssFh8g8SJ3xCyjTdJpK1fVI3HZjM6E8txp3oGAVmqBw0RxkDt5cQjqEHKMJUcfF2nsvG0jYEEiouOG7m7ZtxJFy3M/9RpKEoh1KcZeu5KNpruysy8pVLBCdoB8kWLEx1S2IRvuMGXIlIoDf9gTxzs42MEdEBG0FoTpOcsJ2ixOihPbglHJnCSyBBEVZ/kKhKWIgNdcjGFkOeGrJlmBTJ5sqVsIT/4l38xIvAkm97OUV7x5gaenmUACAqQrC5xf1/3q3U//t0xO8AD70/Q+wkz+n5qGe9hKHtlsq7qqqakzcTDmwTWWuUEbDbnqtqtEb1afUxbmIMYiqi8bc8sJprNvdqi0NSyTUy69E7tmLYctB048TkJJITyTnV4QAxhEtzQ2/W/bYJkjw1HEgbf3//bfnnMIstHcz//1utqycFBToz9Zsftjy2ij/0z26l3mplGMDM1ACg5A6L2xqnxxw5cm2kNyX8RB+KTaK0JCBSwXpItftMy+crSfhDn98K0ycmFainmxRmnJnLsQDpfafL4c5MezncwxXVW41Vmu0smDHUckgSBwWtD42jqRW6CX3PyhmMACSVLELdkcLADC4/qy1L+Ht/uqLR8dHZVARYhQuMX3hx+zr2RRT6alzWRC7iBlCo//tkxPYADdkbO+elD2nQHud9pJn9TFUW552h+PSM431ETSTCJpbbra/leecUJ0D5UgCilASQAMP/CHi5OJhc5x5gGCe+N5bvM/sDJS+Vv8y3rfRYKi4jDSMS4i9KTEFNRTMuMTAwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tkxPIADij5M+wwzYmAm6X9hJmwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//s0xPaAClDTI6OxLwCwkeLoEJkoqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//sUxNoDwAAB/gAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";
2
2
  class p {
3
3
  /**
4
4
  * Create a new AudioEngine instance
@@ -79,8 +79,8 @@ class p {
79
79
  try {
80
80
  if (typeof fetch < "u") {
81
81
  const [t, e] = await Promise.all([
82
- fetch(k),
83
- fetch(C)
82
+ fetch(_),
83
+ fetch(k)
84
84
  ]), [i, s] = await Promise.all([
85
85
  t.arrayBuffer(),
86
86
  e.arrayBuffer()
@@ -189,12 +189,12 @@ class g {
189
189
  }
190
190
  if (q <= 0)
191
191
  return a;
192
- const o = Math.max(0, (r - n) * 1e3), l = setTimeout(() => {
192
+ const o = Math.max(0, (r - n) * 1e3), h = setTimeout(() => {
193
193
  this.noteOn(e, i), this.scheduledEvents.delete(`${a}_on`);
194
- }, o), h = o + q * 1e3, c = setTimeout(() => {
194
+ }, o), l = o + q * 1e3, c = setTimeout(() => {
195
195
  this.noteOff(e), this.scheduledEvents.delete(`${a}_off`);
196
- }, h);
197
- return this.scheduledEvents.set(`${a}_on`, l), this.scheduledEvents.set(`${a}_off`, c), a;
196
+ }, l);
197
+ return this.scheduledEvents.set(`${a}_on`, h), this.scheduledEvents.set(`${a}_off`, c), a;
198
198
  }
199
199
  /**
200
200
  * Stop all notes on this channel
@@ -288,7 +288,7 @@ class g {
288
288
  throw new Error("AudioEngine is not initialized");
289
289
  }
290
290
  }
291
- const T = {
291
+ const y = {
292
292
  // Piano family (0-7)
293
293
  piano: 0,
294
294
  bright_piano: 1,
@@ -438,8 +438,8 @@ const T = {
438
438
  helicopter: 125,
439
439
  applause: 126,
440
440
  gunshot: 127
441
- }, x = Object.entries(T).reduce((m, [t, e]) => (m[e] = t, m), {});
442
- class w {
441
+ }, C = Object.entries(y).reduce((m, [t, e]) => (m[e] = t, m), {});
442
+ class x {
443
443
  /**
444
444
  * Map common instrument names to MIDI program numbers
445
445
  * @param {string|number} instrument - Instrument name or program number
@@ -447,7 +447,7 @@ class w {
447
447
  */
448
448
  static getInstrumentProgram(t) {
449
449
  if (typeof t == "number") return t;
450
- const e = T[t.toLowerCase()];
450
+ const e = y[t.toLowerCase()];
451
451
  return e !== void 0 ? e : 0;
452
452
  }
453
453
  /**
@@ -456,7 +456,7 @@ class w {
456
456
  * @returns {string} Instrument name or fallback
457
457
  */
458
458
  static getProgramName(t) {
459
- return x[t] || `Program ${t}`;
459
+ return C[t] || `Program ${t}`;
460
460
  }
461
461
  /**
462
462
  * Generate a unique note ID
@@ -500,7 +500,7 @@ class v extends g {
500
500
  }
501
501
  async setInstrument(t) {
502
502
  this._validateActive();
503
- const e = w.getInstrumentProgram(t);
503
+ const e = x.getInstrumentProgram(t);
504
504
  this.currentInstrument = t;
505
505
  const i = this.engine._getSynthesizer();
506
506
  i && i.programChange ? i.programChange(this.midiChannel, e) : console.warn("Cannot set instrument: synthesizer not available or no programChange method");
@@ -530,6 +530,69 @@ class v extends g {
530
530
  getActiveNoteCount() {
531
531
  return this.activeNotes.size;
532
532
  }
533
+ /**
534
+ * Override playNote to use SpessaSynth's precise sample-accurate scheduling
535
+ * @param {number} startTime - Absolute audio context time when note should start
536
+ * @param {number} pitch - MIDI pitch (0-127)
537
+ * @param {number} velocity - Note velocity (0-127)
538
+ * @param {number} duration - Note duration in seconds
539
+ * @returns {string} Event ID for compatibility
540
+ */
541
+ playNote(t, e, i, s) {
542
+ this._validateActive();
543
+ const n = `${this.partId}_${t}_${e}_${Date.now()}`, a = this.engine._getSynthesizer();
544
+ if (a && a.post) {
545
+ const r = Math.round(i * this.currentVolume);
546
+ a.post({
547
+ channelNumber: this.midiChannel,
548
+ type: "midiMessage",
549
+ data: {
550
+ messageData: [144 | this.midiChannel, e, r],
551
+ channelOffset: 0,
552
+ force: !1,
553
+ options: {
554
+ time: t
555
+ // SpessaSynth will schedule this precisely!
556
+ }
557
+ }
558
+ }), a.post({
559
+ channelNumber: this.midiChannel,
560
+ type: "midiMessage",
561
+ data: {
562
+ messageData: [128 | this.midiChannel, e, 0],
563
+ channelOffset: 0,
564
+ force: !1,
565
+ options: {
566
+ time: t + s
567
+ // Precise note-off timing!
568
+ }
569
+ }
570
+ });
571
+ } else
572
+ return super.playNote(t, e, i, s);
573
+ return n;
574
+ }
575
+ /**
576
+ * Override allNotesOff to use SpessaSynth messaging system
577
+ */
578
+ allNotesOff() {
579
+ this._validateActive();
580
+ const t = this.engine._getSynthesizer();
581
+ t && t.post ? t.post({
582
+ channelNumber: this.midiChannel,
583
+ type: "midiMessage",
584
+ data: {
585
+ messageData: [176 | this.midiChannel, 123, 0],
586
+ // Control Change: All Notes Off
587
+ channelOffset: 0,
588
+ force: !1,
589
+ options: {
590
+ time: this.engine.audioContext.currentTime
591
+ // Execute immediately
592
+ }
593
+ }
594
+ }) : super.allNotesOff();
595
+ }
533
596
  destroy() {
534
597
  if (!this.isDestroyed) {
535
598
  const t = this.engine._getIndividualOutput(this.midiChannel);
@@ -552,19 +615,15 @@ class M extends p {
552
615
  super(t, e), this.synthesizer = null, this.soundfont = null, this.channelCounter = 0, this.partToMidiChannel = /* @__PURE__ */ new Map(), this.midiChannelToPart = /* @__PURE__ */ new Map(), this.individualOutputs = [];
553
616
  }
554
617
  async initialize(t) {
555
- try {
556
- const { WorkletSynthesizer: e } = await import("spessasynth_lib");
557
- let i;
558
- if (typeof t == "string")
559
- i = await this._loadSoundfontFromPath(t);
560
- else if (t instanceof ArrayBuffer)
561
- i = t;
562
- else
563
- throw new Error("Invalid soundfont data type. Expected string path or ArrayBuffer.");
564
- await this._loadAudioWorkletSafely(), this._setupIndividualOutputs(), this.dummyTarget = this.audioContext.createGain(), await new Promise((s) => setTimeout(s, 50)), this.synthesizer = new e(this.audioContext), await this.synthesizer.soundBankManager.addSoundBank(i, "main"), await this.synthesizer.isReady, this._connectIndividualOutputs(), this._initializeMetronomeChannel(), this.isInitialized = !0;
565
- } catch (e) {
566
- throw console.error("Failed to initialize SpessaSynthAudioEngine:", e), e;
567
- }
618
+ const { WorkletSynthesizer: e } = await import("spessasynth_lib");
619
+ let i;
620
+ if (typeof t == "string")
621
+ i = await this._loadSoundfontFromPath(t);
622
+ else if (t instanceof ArrayBuffer)
623
+ i = t;
624
+ else
625
+ throw new Error("Invalid soundfont data type. Expected string path or ArrayBuffer.");
626
+ await this._loadAudioWorkletSafely(), this._setupIndividualOutputs(), this.dummyTarget = this.audioContext.createGain(), await new Promise((s) => setTimeout(s, 50)), this.synthesizer = new e(this.audioContext), await this.synthesizer.soundBankManager.addSoundBank(i, "main"), await this.synthesizer.isReady, this._connectIndividualOutputs(), this._initializeMetronomeChannel(), this.isInitialized = !0;
568
627
  }
569
628
  createChannel(t, e = {}) {
570
629
  if (this._validateInitialized(), this.partToMidiChannel.has(t))
@@ -659,15 +718,10 @@ class M extends p {
659
718
  * @private
660
719
  */
661
720
  async _loadSoundfontFromPath(t) {
662
- if (typeof window < "u") {
663
- const e = await fetch(t);
664
- if (!e.ok)
665
- throw new Error(`Failed to load soundfont: ${e.status} ${e.statusText}`);
666
- return await e.arrayBuffer();
667
- } else {
668
- const e = await Promise.resolve().then(() => y), i = await Promise.resolve().then(() => y), s = i.isAbsolute(t) ? t : i.resolve(process.cwd(), t);
669
- return e.readFileSync(s).buffer;
670
- }
721
+ const e = await fetch(t);
722
+ if (!e.ok)
723
+ throw new Error(`Failed to load soundfont: ${e.status} ${e.statusText}`);
724
+ return await e.arrayBuffer();
671
725
  }
672
726
  /**
673
727
  * Load AudioWorklet
@@ -715,8 +769,32 @@ class M extends p {
715
769
  const s = this.getMetronomeChannel(), n = this._getSynthesizer();
716
770
  if (!s || !n)
717
771
  return super.playMetronomeTick(t, e, i);
718
- const a = 15, r = e ? 86 : 60, o = Math.round(Math.min(127, Math.max(0, i * (e ? 127 : 100)))), l = this.audioContext.currentTime, c = Math.max(t, l) - l;
719
- c <= 0.01 ? (n.noteOn && n.noteOn(a, r, o), setTimeout(() => {
772
+ const a = 15, r = e ? 86 : 60, o = Math.round(Math.min(127, Math.max(0, i * (e ? 127 : 100)))), h = this.audioContext.currentTime, l = Math.max(t, h), c = l - h;
773
+ n.post ? (n.post({
774
+ channelNumber: a,
775
+ type: "midiMessage",
776
+ data: {
777
+ messageData: [144 | a, r, o],
778
+ channelOffset: 0,
779
+ force: !1,
780
+ options: {
781
+ time: l
782
+ // Sample-accurate metronome timing!
783
+ }
784
+ }
785
+ }), n.post({
786
+ channelNumber: a,
787
+ type: "midiMessage",
788
+ data: {
789
+ messageData: [128 | a, r, 0],
790
+ channelOffset: 0,
791
+ force: !1,
792
+ options: {
793
+ time: l + 0.1
794
+ // Precise tick duration!
795
+ }
796
+ }
797
+ })) : c <= 0.01 ? (n.noteOn && n.noteOn(a, r, o), setTimeout(() => {
720
798
  n.noteOff && n.noteOff(a, r);
721
799
  }, 100)) : setTimeout(() => {
722
800
  n.noteOn && n.noteOn(a, r, o), setTimeout(() => {
@@ -735,7 +813,7 @@ class M extends p {
735
813
  return !this.individualOutputs || this.individualOutputs.length < 16 ? null : this.individualOutputs[15];
736
814
  }
737
815
  }
738
- class S {
816
+ class E {
739
817
  constructor() {
740
818
  this.partNames = [
741
819
  "soprano",
@@ -787,10 +865,10 @@ class S {
787
865
  duration: 0
788
866
  };
789
867
  let o = 8 + i;
790
- for (let l = 0; l < n; l++)
868
+ for (let h = 0; h < n; h++)
791
869
  if (e[o] === 77 && e[o + 1] === 84 && e[o + 2] === 114 && e[o + 3] === 107) {
792
- const h = this._bytesToNumber(e.slice(o + 4, o + 8)), c = e.slice(o + 8, o + 8 + h), A = this._parseTrack(c);
793
- q.tracks.push(A), o += 8 + h;
870
+ const l = this._bytesToNumber(e.slice(o + 4, o + 8)), c = e.slice(o + 8, o + 8 + l), A = this._parseTrack(c);
871
+ q.tracks.push(A), o += 8 + l;
794
872
  } else
795
873
  throw new Error(`Invalid track header at position ${o}`);
796
874
  return q;
@@ -822,28 +900,28 @@ class S {
822
900
  } else
823
901
  n = q;
824
902
  if (q === 255) {
825
- const o = t[i++], l = this._readVariableLengthValue(t, i);
826
- i += l.bytesRead;
827
- const h = t.slice(i, i + l.value);
828
- switch (i += l.value, o) {
903
+ const o = t[i++], h = this._readVariableLengthValue(t, i);
904
+ i += h.bytesRead;
905
+ const l = t.slice(i, i + h.value);
906
+ switch (i += h.value, o) {
829
907
  case 3:
830
- e.name = this._bytesToString(h);
908
+ e.name = this._bytesToString(l);
831
909
  break;
832
910
  case 1:
833
911
  e.events.push({
834
912
  type: "text",
835
- text: this._bytesToString(h),
913
+ text: this._bytesToString(l),
836
914
  tick: s
837
915
  });
838
916
  break;
839
917
  case 5:
840
918
  e.lyrics.push({
841
- text: this._bytesToString(h),
919
+ text: this._bytesToString(l),
842
920
  tick: s
843
921
  });
844
922
  break;
845
923
  case 81:
846
- const c = this._bytesToNumber(h), A = Math.round(6e7 / c);
924
+ const c = this._bytesToNumber(l), A = Math.round(6e7 / c);
847
925
  e.events.push({
848
926
  type: "tempo",
849
927
  bpm: A,
@@ -853,8 +931,8 @@ class S {
853
931
  case 88:
854
932
  e.events.push({
855
933
  type: "timeSignature",
856
- numerator: h[0],
857
- denominator: Math.pow(2, h[1]),
934
+ numerator: l[0],
935
+ denominator: Math.pow(2, l[1]),
858
936
  tick: s
859
937
  });
860
938
  break;
@@ -863,24 +941,24 @@ class S {
863
941
  break;
864
942
  }
865
943
  } else if ((q & 240) === 144) {
866
- const o = q & 15, l = t[i++], h = t[i++];
867
- h > 0 ? e.notes.push({
944
+ const o = q & 15, h = t[i++], l = t[i++];
945
+ l > 0 ? e.notes.push({
868
946
  type: "noteOn",
869
- noteNumber: l,
870
- velocity: h,
947
+ noteNumber: h,
948
+ velocity: l,
871
949
  tick: s,
872
950
  channel: o
873
951
  }) : e.notes.push({
874
952
  type: "noteOff",
875
- noteNumber: l,
953
+ noteNumber: h,
876
954
  tick: s,
877
955
  channel: o
878
956
  });
879
957
  } else if ((q & 240) === 128) {
880
- const o = q & 15, l = t[i++];
958
+ const o = q & 15, h = t[i++];
881
959
  t[i++], e.notes.push({
882
960
  type: "noteOff",
883
- noteNumber: l,
961
+ noteNumber: h,
884
962
  tick: s,
885
963
  channel: o
886
964
  });
@@ -888,32 +966,32 @@ class S {
888
966
  const o = this._readVariableLengthValue(t, i);
889
967
  i += o.bytesRead + o.value;
890
968
  } else if ((q & 240) === 176) {
891
- const o = q & 15, l = t[i++], h = t[i++];
969
+ const o = q & 15, h = t[i++], l = t[i++];
892
970
  e.events.push({
893
971
  type: "controller",
894
- controllerNumber: l,
895
- value: h,
972
+ controllerNumber: h,
973
+ value: l,
896
974
  channel: o,
897
975
  tick: s
898
976
  });
899
977
  } else if ((q & 240) === 192) {
900
- const o = q & 15, l = t[i++];
978
+ const o = q & 15, h = t[i++];
901
979
  e.events.push({
902
980
  type: "programChange",
903
- programNumber: l,
981
+ programNumber: h,
904
982
  channel: o,
905
983
  tick: s
906
984
  });
907
985
  } else if ((q & 240) === 208) {
908
- const o = q & 15, l = t[i++];
986
+ const o = q & 15, h = t[i++];
909
987
  e.events.push({
910
988
  type: "channelAftertouch",
911
- pressure: l,
989
+ pressure: h,
912
990
  channel: o,
913
991
  tick: s
914
992
  });
915
993
  } else if ((q & 240) === 224) {
916
- const o = q & 15, l = t[i++], c = (t[i++] << 7 | l) - 8192;
994
+ const o = q & 15, h = t[i++], c = (t[i++] << 7 | h) - 8192;
917
995
  e.events.push({
918
996
  type: "pitchBend",
919
997
  value: c,
@@ -921,11 +999,11 @@ class S {
921
999
  tick: s
922
1000
  });
923
1001
  } else if ((q & 240) === 160) {
924
- const o = q & 15, l = t[i++], h = t[i++];
1002
+ const o = q & 15, h = t[i++], l = t[i++];
925
1003
  e.events.push({
926
1004
  type: "noteAftertouch",
927
- noteNumber: l,
928
- pressure: h,
1005
+ noteNumber: h,
1006
+ pressure: l,
929
1007
  channel: o,
930
1008
  tick: s
931
1009
  });
@@ -970,35 +1048,35 @@ class S {
970
1048
  */
971
1049
  _extractBarStructure(t) {
972
1050
  const e = t.ticksPerBeat || 480, i = [];
973
- t.tracks.forEach((l) => {
974
- l.events.forEach((h) => {
975
- (h.type === "timeSignature" || h.type === "tempo") && i.push(h);
1051
+ t.tracks.forEach((h) => {
1052
+ h.events.forEach((l) => {
1053
+ (l.type === "timeSignature" || l.type === "tempo") && i.push(l);
976
1054
  });
977
- }), i.sort((l, h) => l.tick - h.tick);
1055
+ }), i.sort((h, l) => h.tick - l.tick);
978
1056
  let s = 0;
979
- t.tracks.forEach((l) => {
980
- l.notes && l.notes.forEach((h) => {
981
- h.type === "noteOff" && h.tick > s && (s = h.tick);
1057
+ t.tracks.forEach((h) => {
1058
+ h.notes && h.notes.forEach((l) => {
1059
+ l.type === "noteOff" && l.tick > s && (s = l.tick);
982
1060
  });
983
1061
  }), s === 0 && (s = e * 8);
984
- const n = [], a = i.filter((l) => l.type === "timeSignature").sort((l, h) => l.tick - h.tick);
1062
+ const n = [], a = i.filter((h) => h.type === "timeSignature").sort((h, l) => h.tick - l.tick);
985
1063
  let r = { numerator: 4, denominator: 4 }, q = 0, o = 0;
986
1064
  for (; q < s; ) {
987
1065
  for (; o < a.length && a[o].tick <= q; )
988
1066
  r = a[o], o++;
989
- let l;
990
- l = q + e * 4 * r.numerator / r.denominator, i.filter(
991
- (u) => u.type === "tempo" && u.tick >= q && u.tick < l
1067
+ let h;
1068
+ h = q + e * 4 * r.numerator / r.denominator, i.filter(
1069
+ (u) => u.type === "tempo" && u.tick >= q && u.tick < h
992
1070
  );
993
- const h = r.numerator, c = [], A = e * (4 / r.denominator);
994
- for (let u = 0; u < h; u++) {
1071
+ const l = r.numerator, c = [], A = e * (4 / r.denominator);
1072
+ for (let u = 0; u < l; u++) {
995
1073
  const d = q + u * A, f = this._ticksToTime(d, t);
996
1074
  c.push(f);
997
1075
  }
998
1076
  n.push({
999
1077
  sig: [r.numerator, r.denominator],
1000
1078
  beats: c
1001
- }), q = l;
1079
+ }), q = h;
1002
1080
  }
1003
1081
  this.parsedData.barStructure = n;
1004
1082
  }
@@ -1029,15 +1107,15 @@ class S {
1029
1107
  for (; e[r]; )
1030
1108
  r = `${a} ${q}`, q++;
1031
1109
  a = r;
1032
- const o = [], l = {};
1110
+ const o = [], h = {};
1033
1111
  s.notes.forEach((u) => {
1034
1112
  if (u.type === "noteOn")
1035
- l[u.noteNumber] = {
1113
+ h[u.noteNumber] = {
1036
1114
  tick: u.tick,
1037
1115
  velocity: u.velocity
1038
1116
  };
1039
- else if (u.type === "noteOff" && l[u.noteNumber]) {
1040
- const d = l[u.noteNumber], f = u.tick - d.tick;
1117
+ else if (u.type === "noteOff" && h[u.noteNumber]) {
1118
+ const d = h[u.noteNumber], f = u.tick - d.tick;
1041
1119
  o.push({
1042
1120
  pitch: u.noteNumber,
1043
1121
  name: this._midiNoteToName(u.noteNumber),
@@ -1048,10 +1126,10 @@ class S {
1048
1126
  startTime: this._ticksToTime(d.tick, t),
1049
1127
  endTime: this._ticksToTime(u.tick, t),
1050
1128
  velocity: d.velocity
1051
- }), delete l[u.noteNumber];
1129
+ }), delete h[u.noteNumber];
1052
1130
  }
1053
1131
  });
1054
- const h = s.lyrics.map((u) => ({
1132
+ const l = s.lyrics.map((u) => ({
1055
1133
  text: u.text,
1056
1134
  tick: u.tick,
1057
1135
  time: u.tick / i
@@ -1065,7 +1143,7 @@ class S {
1065
1143
  })).sort((u, d) => u.tick - d.tick), A = c.length > 0 ? c[0].programNumber : 0;
1066
1144
  e[a] = {
1067
1145
  notes: o,
1068
- lyrics: h,
1146
+ lyrics: l,
1069
1147
  trackIndex: n,
1070
1148
  programChanges: c,
1071
1149
  defaultInstrument: A
@@ -1123,8 +1201,8 @@ class S {
1123
1201
  for (const q of s) {
1124
1202
  if (q.tick > t) break;
1125
1203
  if (q.tick > a) {
1126
- const l = (q.tick - a) / i * (60 / r);
1127
- n += l, a = q.tick;
1204
+ const h = (q.tick - a) / i * (60 / r);
1205
+ n += h, a = q.tick;
1128
1206
  }
1129
1207
  r = q.bpm;
1130
1208
  }
@@ -1135,7 +1213,7 @@ class S {
1135
1213
  return n;
1136
1214
  }
1137
1215
  }
1138
- class E {
1216
+ class w {
1139
1217
  constructor() {
1140
1218
  this.barOrder = [], this.beatTable = [];
1141
1219
  }
@@ -1166,13 +1244,13 @@ class E {
1166
1244
  throw new Error(`Invalid section index: ${n.section}`);
1167
1245
  const r = n.section;
1168
1246
  s[r] || (s[r] = 0), s[r]++;
1169
- const q = s[r], o = n.from !== void 0 ? n.from : this._getSectionStartBar(t, n.section), l = n.to !== void 0 ? n.to : a.to, h = n.as || 1;
1170
- for (let c = o; c <= l; c++)
1171
- this._shouldPlayBar(a, c, h) && i.push({
1247
+ const q = s[r], o = n.from !== void 0 ? n.from : this._getSectionStartBar(t, n.section), h = n.to !== void 0 ? n.to : a.to, l = n.as || 1;
1248
+ for (let c = o; c <= h; c++)
1249
+ this._shouldPlayBar(a, c, l) && i.push({
1172
1250
  barNumber: c,
1173
1251
  repeat: q,
1174
1252
  sectionIndex: n.section,
1175
- voltaTime: h
1253
+ voltaTime: l
1176
1254
  });
1177
1255
  }
1178
1256
  return i;
@@ -1196,34 +1274,34 @@ class E {
1196
1274
  throw new Error(`Invalid MIDI bar structure at index ${n}`);
1197
1275
  s[o] = A.sig[0];
1198
1276
  }
1199
- const l = s[o];
1200
- let h = r[n], c = h.sig[0];
1201
- for (; c < l && n + 1 < r.length; ) {
1277
+ const h = s[o];
1278
+ let l = r[n], c = l.sig[0];
1279
+ for (; c < h && n + 1 < r.length; ) {
1202
1280
  const A = r[n + 1], u = [
1203
- h.sig[0] + A.sig[0],
1281
+ l.sig[0] + A.sig[0],
1204
1282
  // Total beats
1205
- h.sig[1]
1283
+ l.sig[1]
1206
1284
  // Keep original note value
1207
1285
  ], d = [
1208
- ...h.beats || [],
1286
+ ...l.beats || [],
1209
1287
  ...A.beats || []
1210
1288
  ];
1211
- h = {
1289
+ l = {
1212
1290
  sig: u,
1213
1291
  beats: d
1214
- }, r[n] = h, r.splice(n + 1, 1), c = u[0];
1292
+ }, r[n] = l, r.splice(n + 1, 1), c = u[0];
1215
1293
  }
1216
- if (c > l) {
1217
- const A = l, u = c - l, d = h.beats ? h.beats.slice(0, A) : [], f = h.beats ? h.beats.slice(A) : [], b = {
1218
- sig: [A, h.sig[1]],
1294
+ if (c > h) {
1295
+ const A = h, u = c - h, d = l.beats ? l.beats.slice(0, A) : [], f = l.beats ? l.beats.slice(A) : [], b = {
1296
+ sig: [A, l.sig[1]],
1219
1297
  beats: d
1220
1298
  }, I = {
1221
- sig: [u, h.sig[1]],
1299
+ sig: [u, l.sig[1]],
1222
1300
  beats: f
1223
1301
  };
1224
- r[n] = b, r.splice(n + 1, 0, I), h = b;
1302
+ r[n] = b, r.splice(n + 1, 0, I), l = b;
1225
1303
  }
1226
- this._generateBeatsForBar(i, q, h, l), n++, a++;
1304
+ this._generateBeatsForBar(i, q, l, h), n++, a++;
1227
1305
  }
1228
1306
  if (a < t.length)
1229
1307
  throw new Error(`Ran out of MIDI bars before completing score. Score bar ${a}/${t.length}, MIDI bar ${n}/${r.length}`);
@@ -1267,7 +1345,7 @@ class E {
1267
1345
  return s === -1 ? !0 : s + 1 === i;
1268
1346
  }
1269
1347
  }
1270
- function _(m) {
1348
+ function T(m) {
1271
1349
  return { all: m = m || /* @__PURE__ */ new Map(), on: function(t, e) {
1272
1350
  var i = m.get(t);
1273
1351
  i ? i.push(e) : m.set(t, [e]);
@@ -1283,7 +1361,7 @@ function _(m) {
1283
1361
  });
1284
1362
  } };
1285
1363
  }
1286
- class B {
1364
+ class S {
1287
1365
  /**
1288
1366
  * Create a new MidiPlayer instance
1289
1367
  * @param {AudioEngine} audioEngine - Initialized audio engine instance
@@ -1296,7 +1374,7 @@ class B {
1296
1374
  throw new Error("Initialized AudioEngine is required");
1297
1375
  if (!e)
1298
1376
  throw new Error("Parsed MIDI data is required");
1299
- this.audioEngine = t, this.instrumentMap = i || {}, this.parsedData = e, this._isPlaying = !1, this._currentTime = 0, this._totalDuration = 0, this.playbackSpeed = 1, this.partChannels = /* @__PURE__ */ new Map(), this.partOutputs = /* @__PURE__ */ new Map(), this.playbackStartTime = 0, this.lookAheadTime = 0.05, this.scheduleInterval = null, this.partNotePointers = /* @__PURE__ */ new Map(), this.partProgramPointers = /* @__PURE__ */ new Map(), this.eventBus = _(), this.beatMapper = new E(), this.beats = [], this._setupPartChannels(), this._calculateTotalDuration(), this._resetNotePointers(), this._resetProgramPointers();
1377
+ this.audioEngine = t, this.instrumentMap = i || {}, this.parsedData = e, this._isPlaying = !1, this._currentTime = 0, this._totalDuration = 0, this.playbackSpeed = 1, this.partChannels = /* @__PURE__ */ new Map(), this.partOutputs = /* @__PURE__ */ new Map(), this.playbackStartTime = 0, this.lookAheadTime = 0.05, this.scheduleInterval = null, this.partNotePointers = /* @__PURE__ */ new Map(), this.partProgramPointers = /* @__PURE__ */ new Map(), this.eventBus = T(), this.beatMapper = new w(), this.beats = [], this._setupPartChannels(), this._calculateTotalDuration(), this._resetNotePointers(), this._resetProgramPointers();
1300
1378
  const n = s || this._createDefaultStructureMetadata();
1301
1379
  this.beats = this.beatMapper.mapBeats(e, n);
1302
1380
  }
@@ -1346,7 +1424,9 @@ class B {
1346
1424
  if (t <= 0)
1347
1425
  throw new Error("Playback speed must be greater than 0");
1348
1426
  const i = e && this._isPlaying;
1349
- i && this.pause(), this.playbackSpeed = t, i ? this.play() : this.playbackStartTime = this.audioEngine.audioContext.currentTime - this._currentTime / this.playbackSpeed;
1427
+ i && this.pause();
1428
+ const s = (this.audioEngine.audioContext.currentTime - this.playbackStartTime) * this.playbackSpeed;
1429
+ this.playbackSpeed = t, i ? this.play() : this.playbackStartTime = this.audioEngine.audioContext.currentTime - s / this.playbackSpeed;
1350
1430
  }
1351
1431
  /**
1352
1432
  * Navigate to a specific bar position
@@ -1521,8 +1601,8 @@ class B {
1521
1601
  for (; r < q.length && q[r].startTime <= i; ) {
1522
1602
  const o = q[r];
1523
1603
  if (o.endTime - o.startTime >= 0.01) {
1524
- const l = this.playbackStartTime + o.startTime / this.playbackSpeed, h = (o.endTime - o.startTime) / this.playbackSpeed;
1525
- n.playNote(l, o.pitch, o.velocity, h);
1604
+ const h = this.playbackStartTime + o.startTime / this.playbackSpeed, l = (o.endTime - o.startTime) / this.playbackSpeed;
1605
+ n.playNote(h, o.pitch, o.velocity, l);
1526
1606
  }
1527
1607
  r++;
1528
1608
  }
@@ -1637,7 +1717,7 @@ class B {
1637
1717
  }), this.partOutputs.clear(), this.partNotePointers.clear(), this.partProgramPointers.clear(), this.eventBus.all.clear();
1638
1718
  }
1639
1719
  }
1640
- class P {
1720
+ class B {
1641
1721
  /**
1642
1722
  * Create a new PlaybackManager instance
1643
1723
  * @param {MidiPlayer} midiPlayer - Initialized MidiPlayer instance
@@ -1656,7 +1736,7 @@ class P {
1656
1736
  constructor(t, e = {}) {
1657
1737
  if (!t)
1658
1738
  throw new Error("MidiPlayer is required");
1659
- this.midiPlayer = t, this.audioEngine = t.audioEngine, this.eventBus = _(), this.metronomeConfig = {
1739
+ this.midiPlayer = t, this.audioEngine = t.audioEngine, this.eventBus = T(), this.metronomeConfig = {
1660
1740
  enabled: !1,
1661
1741
  tickInstrument: 115,
1662
1742
  // woodblock
@@ -1996,12 +2076,12 @@ class P {
1996
2076
  for (; t[s].time > e; ) s--;
1997
2077
  const a = t[s], r = t[s + 1];
1998
2078
  r ? n = r.time - a.time : s > 0 && (n = a.time - t[s - 1].time);
1999
- const q = this.midiPlayer.playbackSpeed || 1, o = n / q, l = a.timeSig === 1, h = l && r ? r.timeSig : a.timeSig, c = l ? h - 1 : a.beat > 1 ? a.beat - 1 : 0, A = i * h + c;
2079
+ const q = this.midiPlayer.playbackSpeed || 1, o = n / q, h = a.timeSig === 1, l = h && r ? r.timeSig : a.timeSig, c = h ? l - 1 : a.beat > 1 ? a.beat - 1 : 0, A = i * l + c;
2000
2080
  return {
2001
2081
  totalBeats: A,
2002
2082
  duration: A * o,
2003
- beatSequence: this._generateBeatSequence(A, o, h),
2004
- beatsPerBar: h,
2083
+ beatSequence: this._generateBeatSequence(A, o, l),
2084
+ beatsPerBar: l,
2005
2085
  startBeat: a
2006
2086
  };
2007
2087
  }
@@ -2168,8 +2248,8 @@ class P {
2168
2248
  if (n.time > s)
2169
2249
  break;
2170
2250
  if (a >= -0.025 && a <= 0.15) {
2171
- const r = this.audioEngine.audioContext.currentTime + 5e-3, q = this.audioEngine.audioContext.currentTime + Math.max(a, 5e-3), o = Math.max(r, q), l = n.beat === 1;
2172
- this._scheduleTickAtTime(o, l);
2251
+ const r = this.audioEngine.audioContext.currentTime + 5e-3, q = this.audioEngine.audioContext.currentTime + Math.max(a, 5e-3), o = Math.max(r, q), h = n.beat === 1;
2252
+ this._scheduleTickAtTime(o, h);
2173
2253
  }
2174
2254
  this.nextBeatIndex++;
2175
2255
  }
@@ -2274,17 +2354,14 @@ class P {
2274
2354
  this.stop(), this._stopLeadIn(), this._stopMetronome(), this._stopTimeUpdateLoop(), this.eventBus.all.clear();
2275
2355
  }
2276
2356
  }
2277
- const y = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
2278
- __proto__: null
2279
- }, Symbol.toStringTag, { value: "Module" }));
2280
2357
  export {
2281
2358
  p as AudioEngine,
2282
- w as AudioEngineUtils,
2283
- E as BeatMapper,
2359
+ x as AudioEngineUtils,
2360
+ w as BeatMapper,
2284
2361
  g as ChannelHandle,
2285
- S as MidiParser,
2286
- B as MidiPlayer,
2287
- P as PlaybackManager,
2362
+ E as MidiParser,
2363
+ S as MidiPlayer,
2364
+ B as PlaybackManager,
2288
2365
  M as SpessaSynthAudioEngine,
2289
2366
  v as SpessaSynthChannelHandle
2290
2367
  };