@marmooo/midy 0.3.2 → 0.3.3

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.
@@ -11,6 +11,12 @@ class Note {
11
11
  writable: true,
12
12
  value: -1
13
13
  });
14
+ Object.defineProperty(this, "ending", {
15
+ enumerable: true,
16
+ configurable: true,
17
+ writable: true,
18
+ value: false
19
+ });
14
20
  Object.defineProperty(this, "bufferSource", {
15
21
  enumerable: true,
16
22
  configurable: true,
@@ -311,17 +317,37 @@ class MidyGMLite {
311
317
  }
312
318
  }
313
319
  }
314
- async loadSoundFont(soundFontUrl) {
315
- const response = await fetch(soundFontUrl);
316
- const arrayBuffer = await response.arrayBuffer();
317
- const parsed = (0, soundfont_parser_1.parse)(new Uint8Array(arrayBuffer));
320
+ async loadSoundFont(input) {
321
+ let uint8Array;
322
+ if (typeof input === "string") {
323
+ const response = await fetch(input);
324
+ const arrayBuffer = await response.arrayBuffer();
325
+ uint8Array = new Uint8Array(arrayBuffer);
326
+ }
327
+ else if (input instanceof Uint8Array) {
328
+ uint8Array = input;
329
+ }
330
+ else {
331
+ throw new TypeError("input must be a URL string or Uint8Array");
332
+ }
333
+ const parsed = (0, soundfont_parser_1.parse)(uint8Array);
318
334
  const soundFont = new soundfont_parser_1.SoundFont(parsed);
319
335
  this.addSoundFont(soundFont);
320
336
  }
321
- async loadMIDI(midiUrl) {
322
- const response = await fetch(midiUrl);
323
- const arrayBuffer = await response.arrayBuffer();
324
- const midi = (0, midi_file_1.parseMidi)(new Uint8Array(arrayBuffer));
337
+ async loadMIDI(input) {
338
+ let uint8Array;
339
+ if (typeof input === "string") {
340
+ const response = await fetch(input);
341
+ const arrayBuffer = await response.arrayBuffer();
342
+ uint8Array = new Uint8Array(arrayBuffer);
343
+ }
344
+ else if (input instanceof Uint8Array) {
345
+ uint8Array = input;
346
+ }
347
+ else {
348
+ throw new TypeError("input must be a URL string or Uint8Array");
349
+ }
350
+ const midi = (0, midi_file_1.parseMidi)(uint8Array);
325
351
  this.ticksPerBeat = midi.header.ticksPerBeat;
326
352
  const midiData = this.extractMidiData(midi);
327
353
  this.instruments = midiData.instruments;
@@ -385,10 +411,12 @@ class MidyGMLite {
385
411
  return audioBuffer;
386
412
  }
387
413
  }
388
- createBufferSource(voiceParams, audioBuffer) {
414
+ createBufferSource(channel, voiceParams, audioBuffer) {
389
415
  const bufferSource = new AudioBufferSourceNode(this.audioContext);
390
416
  bufferSource.buffer = audioBuffer;
391
417
  bufferSource.loop = voiceParams.sampleModes % 2 !== 0;
418
+ if (channel.isDrum)
419
+ bufferSource.loop = false;
392
420
  if (bufferSource.loop) {
393
421
  bufferSource.loopStart = voiceParams.loopStart / voiceParams.sampleRate;
394
422
  bufferSource.loopEnd = voiceParams.loopEnd / voiceParams.sampleRate;
@@ -403,12 +431,13 @@ class MidyGMLite {
403
431
  const delay = this.startDelay - resumeTime;
404
432
  const startTime = event.startTime + delay;
405
433
  switch (event.type) {
406
- case "noteOn": {
407
- const noteOffEvent = {
408
- ...event.noteOffEvent,
409
- startTime: event.noteOffEvent.startTime + delay,
410
- };
411
- await this.scheduleNoteOn(event.channel, event.noteNumber, event.velocity, startTime, noteOffEvent);
434
+ case "noteOn":
435
+ await this.scheduleNoteOn(event.channel, event.noteNumber, event.velocity, startTime);
436
+ break;
437
+ case "noteOff": {
438
+ const notePromise = this.scheduleNoteOff(event.channel, event.noteNumber, event.velocity, startTime, false);
439
+ if (notePromise)
440
+ this.notePromises.push(notePromise);
412
441
  break;
413
442
  }
414
443
  case "controller":
@@ -510,6 +539,7 @@ class MidyGMLite {
510
539
  return `${programNumber}:${noteNumber}:${velocity}`;
511
540
  }
512
541
  extractMidiData(midi) {
542
+ this.audioBufferCounter.clear();
513
543
  const instruments = new Set();
514
544
  const timeline = [];
515
545
  const tmpChannels = new Array(this.channels.length);
@@ -573,38 +603,13 @@ class MidyGMLite {
573
603
  prevTempoTicks = event.ticks;
574
604
  }
575
605
  }
576
- const activeNotes = new Array(this.channels.length * 128);
577
- for (let i = 0; i < activeNotes.length; i++) {
578
- activeNotes[i] = [];
579
- }
580
- for (let i = 0; i < timeline.length; i++) {
581
- const event = timeline[i];
582
- switch (event.type) {
583
- case "noteOn": {
584
- const index = event.channel * 128 + event.noteNumber;
585
- activeNotes[index].push(event);
586
- break;
587
- }
588
- case "noteOff": {
589
- const index = event.channel * 128 + event.noteNumber;
590
- const noteOn = activeNotes[index].pop();
591
- if (noteOn) {
592
- noteOn.noteOffEvent = event;
593
- }
594
- else {
595
- const eventString = JSON.stringify(event, null, 2);
596
- console.warn(`noteOff without matching noteOn: ${eventString}`);
597
- }
598
- }
599
- }
600
- }
601
606
  return { instruments, timeline };
602
607
  }
603
608
  stopActiveNotes(channelNumber, velocity, force, scheduleTime) {
604
609
  const channel = this.channels[channelNumber];
605
610
  const promises = [];
606
611
  this.processActiveNotes(channel, scheduleTime, (note) => {
607
- const promise = this.scheduleNoteOff(channelNumber, note.noteNumber, velocity, scheduleTime, force, undefined);
612
+ const promise = this.scheduleNoteOff(channelNumber, note.noteNumber, velocity, scheduleTime, force);
608
613
  this.notePromises.push(promise);
609
614
  promises.push(promise);
610
615
  });
@@ -614,7 +619,7 @@ class MidyGMLite {
614
619
  const channel = this.channels[channelNumber];
615
620
  const promises = [];
616
621
  this.processScheduledNotes(channel, (note) => {
617
- const promise = this.scheduleNoteOff(channelNumber, note, velocity, scheduleTime, force);
622
+ const promise = this.scheduleNoteOff(channelNumber, note.noteNumber, velocity, scheduleTime, force);
618
623
  this.notePromises.push(promise);
619
624
  promises.push(promise);
620
625
  });
@@ -691,9 +696,6 @@ class MidyGMLite {
691
696
  continue;
692
697
  if (note.ending)
693
698
  continue;
694
- const noteOffEvent = note.noteOffEvent;
695
- if (noteOffEvent && noteOffEvent.startTime < scheduleTime)
696
- continue;
697
699
  if (scheduleTime < note.startTime)
698
700
  continue;
699
701
  callback(note);
@@ -835,7 +837,7 @@ class MidyGMLite {
835
837
  const voiceParams = voice.getAllParams(controllerState);
836
838
  const note = new Note(noteNumber, velocity, startTime, voice, voiceParams);
837
839
  const audioBuffer = await this.getAudioBuffer(channel.programNumber, noteNumber, velocity, voiceParams, isSF3);
838
- note.bufferSource = this.createBufferSource(voiceParams, audioBuffer);
840
+ note.bufferSource = this.createBufferSource(channel, voiceParams, audioBuffer);
839
841
  note.volumeEnvelopeNode = new GainNode(this.audioContext);
840
842
  note.filterNode = new BiquadFilterNode(this.audioContext, {
841
843
  type: "lowpass",
@@ -861,7 +863,7 @@ class MidyGMLite {
861
863
  if (prev) {
862
864
  const [prevNote, prevChannelNumber] = prev;
863
865
  if (prevNote && !prevNote.ending) {
864
- this.scheduleNoteOff(prevChannelNumber, prevNote, 0, // velocity,
866
+ this.scheduleNoteOff(prevChannelNumber, prevNote.noteNumber, 0, // velocity,
865
867
  startTime, true);
866
868
  }
867
869
  }
@@ -877,7 +879,7 @@ class MidyGMLite {
877
879
  const index = drumExclusiveClass * this.channels.length + channelNumber;
878
880
  const prevNote = this.drumExclusiveClassNotes[index];
879
881
  if (prevNote && !prevNote.ending) {
880
- this.scheduleNoteOff(channelNumber, prevNote, 0, // velocity,
882
+ this.scheduleNoteOff(channelNumber, prevNote.noteNumber, 0, // velocity,
881
883
  startTime, true);
882
884
  }
883
885
  this.drumExclusiveClassNotes[index] = note;
@@ -905,24 +907,6 @@ class MidyGMLite {
905
907
  const scheduledNotes = channel.scheduledNotes;
906
908
  note.index = scheduledNotes.length;
907
909
  scheduledNotes.push(note);
908
- if (channel.isDrum) {
909
- const stopTime = startTime + note.bufferSource.buffer.duration;
910
- const promise = new Promise((resolve) => {
911
- note.bufferSource.onended = () => {
912
- scheduledNotes[note.index] = undefined;
913
- this.disconnectNote(note);
914
- resolve();
915
- };
916
- note.bufferSource.stop(stopTime);
917
- });
918
- this.notePromises.push(promise);
919
- }
920
- else if (noteOffEvent) {
921
- const notePromise = this.scheduleNoteOff(channelNumber, note, noteOffEvent.velocity, noteOffEvent.startTime, false);
922
- if (notePromise) {
923
- this.notePromises.push(notePromise);
924
- }
925
- }
926
910
  }
927
911
  noteOn(channelNumber, noteNumber, velocity, scheduleTime) {
928
912
  scheduleTime ??= this.audioContext.currentTime;
@@ -938,36 +922,40 @@ class MidyGMLite {
938
922
  note.modulationLFO.stop();
939
923
  }
940
924
  }
941
- stopNote(channel, note, endTime, stopTime) {
925
+ releaseNote(channel, note, endTime) {
926
+ const volRelease = endTime + note.voiceParams.volRelease;
927
+ const modRelease = endTime + note.voiceParams.modRelease;
928
+ const stopTime = Math.min(volRelease, modRelease);
929
+ note.filterNode.frequency
930
+ .cancelScheduledValues(endTime)
931
+ .linearRampToValueAtTime(0, modRelease);
942
932
  note.volumeEnvelopeNode.gain
943
933
  .cancelScheduledValues(endTime)
944
- .linearRampToValueAtTime(0, stopTime);
945
- note.ending = true;
946
- this.scheduleTask(() => {
947
- note.bufferSource.loop = false;
948
- }, stopTime);
934
+ .linearRampToValueAtTime(0, volRelease);
949
935
  return new Promise((resolve) => {
950
- note.bufferSource.onended = () => {
951
- channel.scheduledNotes[note.index] = undefined;
936
+ this.scheduleTask(() => {
937
+ const bufferSource = note.bufferSource;
938
+ bufferSource.loop = false;
939
+ bufferSource.stop(stopTime);
952
940
  this.disconnectNote(note);
941
+ channel.scheduledNotes[note.index] = undefined;
953
942
  resolve();
954
- };
955
- note.bufferSource.stop(stopTime);
943
+ }, stopTime);
956
944
  });
957
945
  }
958
- scheduleNoteOff(channelNumber, note, _velocity, endTime, force) {
946
+ scheduleNoteOff(channelNumber, noteNumber, _velocity, endTime, force) {
959
947
  const channel = this.channels[channelNumber];
960
- if (channel.isDrum)
961
- return;
962
- if (!force && 0.5 <= channel.state.sustainPedal)
948
+ if (!force) {
949
+ if (channel.isDrum)
950
+ return;
951
+ if (0.5 <= channel.state.sustainPedal)
952
+ return;
953
+ }
954
+ const note = this.findNoteOffTarget(channel, noteNumber);
955
+ if (!note)
963
956
  return;
964
- const volRelease = endTime + note.voiceParams.volRelease;
965
- const modRelease = endTime + note.voiceParams.modRelease;
966
- note.filterNode.frequency
967
- .cancelScheduledValues(endTime)
968
- .linearRampToValueAtTime(0, modRelease);
969
- const stopTime = Math.min(volRelease, modRelease);
970
- return this.stopNote(channel, note, endTime, stopTime);
957
+ note.ending = true;
958
+ this.releaseNote(channel, note, endTime);
971
959
  }
972
960
  findNoteOffTarget(channel, noteNumber) {
973
961
  const scheduledNotes = channel.scheduledNotes;
@@ -984,16 +972,14 @@ class MidyGMLite {
984
972
  }
985
973
  noteOff(channelNumber, noteNumber, velocity, scheduleTime) {
986
974
  scheduleTime ??= this.audioContext.currentTime;
987
- const channel = this.channels[channelNumber];
988
- const note = this.findNoteOffTarget(channel, noteNumber);
989
- return this.scheduleNoteOff(channelNumber, note, velocity, scheduleTime, false);
975
+ return this.scheduleNoteOff(channelNumber, noteNumber, velocity, scheduleTime, false);
990
976
  }
991
977
  releaseSustainPedal(channelNumber, halfVelocity, scheduleTime) {
992
978
  const velocity = halfVelocity * 2;
993
979
  const channel = this.channels[channelNumber];
994
980
  const promises = [];
995
981
  for (let i = 0; i < channel.sustainNotes.length; i++) {
996
- const promise = this.scheduleNoteOff(channelNumber, channel.sustainNotes[i], velocity, scheduleTime);
982
+ const promise = this.scheduleNoteOff(channelNumber, channel.sustainNotes[i].noteNumber, velocity, scheduleTime);
997
983
  promises.push(promise);
998
984
  }
999
985
  channel.sustainNotes = [];
package/script/midy.d.ts CHANGED
@@ -101,8 +101,8 @@ export class Midy {
101
101
  };
102
102
  initSoundFontTable(): any[];
103
103
  addSoundFont(soundFont: any): void;
104
- loadSoundFont(soundFontUrl: any): Promise<void>;
105
- loadMIDI(midiUrl: any): Promise<void>;
104
+ loadSoundFont(input: any): Promise<void>;
105
+ loadMIDI(input: any): Promise<void>;
106
106
  setChannelAudioNodes(audioContext: any): {
107
107
  gainL: any;
108
108
  gainR: any;
@@ -111,7 +111,8 @@ export class Midy {
111
111
  resetChannelTable(channel: any): void;
112
112
  createChannels(audioContext: any): any[];
113
113
  createNoteBuffer(voiceParams: any, isSF3: any): Promise<any>;
114
- createBufferSource(voiceParams: any, audioBuffer: any): any;
114
+ isLoopDrum(channel: any, noteNumber: any): boolean;
115
+ createBufferSource(channel: any, noteNumber: any, voiceParams: any, audioBuffer: any): any;
115
116
  scheduleTimelineEvents(t: any, resumeTime: any, queueIndex: any): Promise<any>;
116
117
  getQueueIndex(second: any): number;
117
118
  playNotes(): Promise<any>;
@@ -180,17 +181,16 @@ export class Midy {
180
181
  calcBank(channel: any): any;
181
182
  handleExclusiveClass(note: any, channelNumber: any, startTime: any): void;
182
183
  handleDrumExclusiveClass(note: any, channelNumber: any, startTime: any): void;
183
- isDrumNoteOffException(channel: any, noteNumber: any): boolean;
184
184
  scheduleNoteOn(channelNumber: any, noteNumber: any, velocity: any, startTime: any, noteOffEvent: any): Promise<void>;
185
185
  noteOn(channelNumber: any, noteNumber: any, velocity: any, scheduleTime: any): Promise<void>;
186
186
  disconnectNote(note: any): void;
187
- stopNote(channel: any, note: any, endTime: any, stopTime: any): Promise<any>;
188
- scheduleNoteOff(channelNumber: any, note: any, _velocity: any, endTime: any, force: any): Promise<any> | undefined;
187
+ releaseNote(channel: any, note: any, endTime: any): Promise<any>;
188
+ scheduleNoteOff(channelNumber: any, noteNumber: any, _velocity: any, endTime: any, force: any): void;
189
189
  findNoteOffTarget(channel: any, noteNumber: any): any;
190
- noteOff(channelNumber: any, noteNumber: any, velocity: any, scheduleTime: any): Promise<any> | undefined;
191
- releaseSustainPedal(channelNumber: any, halfVelocity: any, scheduleTime: any): (Promise<any> | undefined)[];
192
- releaseSostenutoPedal(channelNumber: any, halfVelocity: any, scheduleTime: any): (Promise<any> | undefined)[];
193
- handleMIDIMessage(statusByte: any, data1: any, data2: any, scheduleTime: any): void | Promise<any>;
190
+ noteOff(channelNumber: any, noteNumber: any, velocity: any, scheduleTime: any): void;
191
+ releaseSustainPedal(channelNumber: any, halfVelocity: any, scheduleTime: any): void[];
192
+ releaseSostenutoPedal(channelNumber: any, halfVelocity: any, scheduleTime: any): void[];
193
+ handleMIDIMessage(statusByte: any, data1: any, data2: any, scheduleTime: any): void | Promise<void>;
194
194
  handlePolyphonicKeyPressure(channelNumber: any, noteNumber: any, pressure: any, scheduleTime: any): void;
195
195
  handleProgramChange(channelNumber: any, programNumber: any, _scheduleTime: any): void;
196
196
  handleChannelPressure(channelNumber: any, value: any, scheduleTime: any): void;
@@ -241,6 +241,7 @@ export class Midy {
241
241
  setSustainPedal(channelNumber: any, value: any, scheduleTime: any): void;
242
242
  setPortamento(channelNumber: any, value: any, scheduleTime: any): void;
243
243
  setSostenutoPedal(channelNumber: any, value: any, scheduleTime: any): void;
244
+ getSoftPedalFactor(channel: any, note: any): number;
244
245
  setSoftPedal(channelNumber: any, softPedal: any, scheduleTime: any): void;
245
246
  setFilterResonance(channelNumber: any, filterResonance: any, scheduleTime: any): void;
246
247
  setReleaseTime(channelNumber: any, releaseTime: any, scheduleTime: any): void;
@@ -319,7 +320,7 @@ export class Midy {
319
320
  resetControlTable(table: any): any;
320
321
  applyControlTable(channel: any, controllerType: any): void;
321
322
  handleControlChangeSysEx(data: any): void;
322
- getKeyBasedInstrumentControlValue(channel: any, keyNumber: any, controllerType: any): number;
323
+ getKeyBasedInstrumentControlValue(channel: any, keyNumber: any, controllerType: any): any;
323
324
  handleKeyBasedInstrumentControlSysEx(data: any, scheduleTime: any): void;
324
325
  handleSysEx(data: any, scheduleTime: any): void;
325
326
  scheduleTask(callback: any, scheduleTime: any): Promise<any>;
@@ -327,7 +328,7 @@ export class Midy {
327
328
  declare class Note {
328
329
  constructor(noteNumber: any, velocity: any, startTime: any, voice: any, voiceParams: any);
329
330
  index: number;
330
- noteOffEvent: any;
331
+ ending: boolean;
331
332
  bufferSource: any;
332
333
  filterNode: any;
333
334
  filterDepth: any;
@@ -1 +1 @@
1
- {"version":3,"file":"midy.d.ts","sourceRoot":"","sources":["../src/midy.js"],"names":[],"mappings":"AAuJA;IAwCE;;;;;;;;;;;;;;MAcE;IAgCF;;;;;OAmBC;IAxGD,aAAa;IACb,yBAAqB;IACrB,2BAAuB;IACvB;;;MAGE;IACF;;;;;;MAME;IACF,oBAAiB;IACjB,qBAAmB;IACnB,kBAAc;IACd,0BAAwB;IACxB,kBAAc;IACd,mBAAiB;IACjB,kBAAc;IACd,mBAAe;IACf,kBAAgB;IAChB,sBAA2C;IAC3C,kCAA+B;IAC/B,gCAA6B;IAC7B,mBAAkB;IAClB,mBAAkB;IAClB,kBAAiB;IACjB,oBAAmB;IACnB,mBAAkB;IAClB,gBAAc;IACd,mBAAiB;IACjB,oBAAkB;IAClB,2BAAqC;IACrC,+BAEE;IAkBF;;;;;MA4BE;IAGA,kBAAgC;IAChC;;;;;MAAqD;IACrD,kBAA8C;IAC9C,eAAwD;IACxD,qBAGE;IACF;;;;;;;;;;;MAA2D;IAC3D,6BAA+D;IAC/D,gBAAiD;IACjD;;;MAA8D;IAC9D;;;;;;;;MAAyD;IAQ3D,4BAMC;IAED,mCAWC;IAED,gDAMC;IAED,sCASC;IAED;;;;MAeC;IAED,sCAMC;IAED,yCAmBC;IAED,6DA2BC;IAED,4DASC;IAED,+EAwDC;IAED,mCAOC;IAED,0BAiEC;IAED,uDAEC;IAED,wDAEC;IAED,6EAEC;IAED;;;MAwIC;IAED,kGAgBC;IAED,mGAgBC;IAED,wEAMC;IAED,uBAKC;IAED,aAGC;IAED,cAKC;IAED,wBAIC;IAED,0BAKC;IAED,wBAOC;IAED,sBAGC;IAED,yDAQC;IAED,yEAWC;IAED,kFAuBC;IAED;;;;MAWC;IAED,gFAUC;IAED,mFAYC;IAED,sGAcC;IAID;;;MA8BC;IAED;;;;;;;;MA0CC;IAED,2BAEC;IAED,8BAEC;IAED,8BAEC;IAED,4BAEC;IAED,qCAYC;IAED,6CAEC;IAED,2DAIC;IAED,+DAiBC;IAED,mDAIC;IAED,2CAoDC;IAED,8EAYC;IAED,oEAiBC;IAED,+DAKC;IAED,qDAoBC;IAED,6CAIC;IAED,8EAuBC;IAED,oEA2BC;IAED,kEAoBC;IAED,+DAaC;IAED,+GA0BC;IAED,gHAwEC;IAED,4BAYC;IAED,0EAiBC;IAED,8EAoBC;IAED,+DAKC;IAED,qHA2EC;IAED,6FASC;IAED,gCAsBC;IAED,6EAgBC;IAED,mHAsBC;IAED,sDASC;IAED,yGAWC;IAED,4GAeC;IAED,8GAkBC;IAED,mGAoCC;IAED,yGAeC;IAED,sFAcC;IAED,+EAeC;IAED,wFAGC;IAED,sEAWC;IAED,mEAQC;IAED,mEAQC;IAED,sEAMC;IAED,oEAQC;IAED,uFA0BC;IAED,uFA0BC;IAED,mDAMC;IAED,kDAKC;IAED,gEAKC;IAED;;;;;;;;;;;MAiDC;IAED,oFAQC;IAED,6EAiDC;IAED,qCAqCC;IAED,kGAYC;IAED,+CAEC;IAED,wDAUC;IAED,iFAMC;IAED,wDAkBC;IAED,oFAMC;IAED,yDAaC;IAED,oEAMC;IAED;;;MAMC;IAED,sDAiBC;IAED,8DAMC;IAED,4EAKC;IAED,+CAEC;IAED,sEAGC;IAED,2DAUC;IAED,yEAYC;IAED,uEAMC;IAED,2EAcC;IAED,0EAeC;IAED,sFAUC;IAED,8EAKC;IAED,4EASC;IAED,4EAaC;IAED,0EAQC;IAED,8EASC;IAED,gFAeC;IAED,gFAUC;IAED,sFA4BC;IAED,sFA4BC;IAED,kFAeC;IAED,2DAMC;IAED,mEAyBC;IAGD,2DAGC;IAGD,2DAGC;IAED,gDAEC;IAED,gDAEC;IAED,sEAGC;IAED,qEAKC;IAED,2EAWC;IAED,iEAKC;IAED,uEASC;IAED,mEAKC;IAED,yEASC;IAED,2EASC;IAED,gGAMC;IAED,gFAGC;IAED,yCAwBC;IAGD,8EAqCC;IAED,gFAGC;IAED,iEAEC;IAED,gEAEC;IAED,gEAIC;IAED,gEAIC;IAED,+EAuCC;IAED,qCAcC;IAED,qCAcC;IAED,4EA6DC;IAED,4DAGC;IAED,sDASC;IAED,gEAGC;IAED,yDAWC;IAED,kEAGC;IAED,2DAWC;IAED,sEAeC;IAED,4CAOC;IAED,+BAKC;IAED,qDAiBC;IAED,gCAIC;IAED,kCAEC;IA6BD,4CAEC;IAED,+DAaC;IAED,kDAiBC;IAED,2GAKC;IAED,sDAIC;IAED,qCAEC;IAED,uDAMC;IAED,sCAEC;IAED,uDASC;IAED,sCAEC;IAED,2DAqBC;IAED,0CAEC;IAED,mCAeC;IAED,2FAgBC;IAED,2FAoBC;IAED,iDAIC;IAED,wDAMC;IAED,qDAMC;IAED,kDAMC;IAED,mDAMC;IAED,sDAMC;IAED,mEAYC;IAED,qDAUC;IAED,wBAKC;IAED,mCASC;IAED,2DAOC;IAED,0CAWC;IAED,6FAIC;IAED,yEAiBC;IAED,gDAYC;IAGD,6DAgBC;CACF;AApnGD;IAoBE,0FAMC;IAzBD,cAAW;IACX,kBAAa;IACb,kBAAa;IACb,gBAAW;IACX,iBAAY;IACZ,wBAAmB;IACnB,iBAAY;IACZ,gBAAW;IACX,WAAM;IACN,WAAM;IACN,mBAAc;IACd,qBAAgB;IAChB,gBAAW;IACX,kBAAa;IACb,uBAAkB;IAClB,uBAAkB;IAClB,6BAA0B;IAC1B,iBAAa;IAGX,gBAA4B;IAC5B,cAAwB;IACxB,eAA0B;IAC1B,WAAkB;IAClB,iBAA8B;CAEjC"}
1
+ {"version":3,"file":"midy.d.ts","sourceRoot":"","sources":["../src/midy.js"],"names":[],"mappings":"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"}