@marmooo/midy 0.0.7 → 0.0.9

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.
@@ -186,23 +186,23 @@ class MidyGMLite {
186
186
  this.totalTime = this.calcTotalTime();
187
187
  }
188
188
  setChannelAudioNodes(audioContext) {
189
- const { gainLeft, gainRight } = this.panToGain(MidyGMLite.channelSettings.pan);
189
+ const { gainLeft, gainRight } = this.panToGain(this.constructor.channelSettings.pan);
190
190
  const gainL = new GainNode(audioContext, { gain: gainLeft });
191
191
  const gainR = new GainNode(audioContext, { gain: gainRight });
192
192
  const merger = new ChannelMergerNode(audioContext, { numberOfInputs: 2 });
193
193
  gainL.connect(merger, 0, 0);
194
194
  gainR.connect(merger, 0, 1);
195
- merger.connect(this.masterGain);
196
195
  return {
197
196
  gainL,
198
197
  gainR,
198
+ merger,
199
199
  };
200
200
  }
201
201
  createChannels(audioContext) {
202
202
  const channels = Array.from({ length: 16 }, () => {
203
203
  return {
204
- ...MidyGMLite.channelSettings,
205
- ...MidyGMLite.effectSettings,
204
+ ...this.constructor.channelSettings,
205
+ ...this.constructor.effectSettings,
206
206
  ...this.setChannelAudioNodes(audioContext),
207
207
  scheduledNotes: new Map(),
208
208
  };
@@ -494,9 +494,9 @@ class MidyGMLite {
494
494
  }
495
495
  return noteList[0];
496
496
  }
497
- connectNoteEffects(channel, gainNode) {
498
- gainNode.connect(channel.gainL);
499
- gainNode.connect(channel.gainR);
497
+ connectEffects(channel, gainNode) {
498
+ gainNode.connect(channel.merger);
499
+ merger.connect(this.masterGain);
500
500
  }
501
501
  cbToRatio(cb) {
502
502
  return Math.pow(10, cb / 200);
@@ -562,7 +562,7 @@ class MidyGMLite {
562
562
  startModulation(channel, note, time) {
563
563
  const { instrumentKey } = note;
564
564
  note.modLFOGain = new GainNode(this.audioContext, {
565
- gain: this.cbToRatio(instrumentKey.modLfoToVolume) * channel.modulation,
565
+ gain: this.cbToRatio(instrumentKey.modLfoToVolume + channel.modulation),
566
566
  });
567
567
  note.modLFO = new OscillatorNode(this.audioContext, {
568
568
  frequency: this.centToHz(instrumentKey.freqModLFO),
@@ -601,7 +601,7 @@ class MidyGMLite {
601
601
  if (!instrumentKey)
602
602
  return;
603
603
  const note = await this.createNote(channel, instrumentKey, noteNumber, velocity, startTime, isSF3);
604
- this.connectNoteEffects(channel, note.gainNode);
604
+ this.connectEffects(channel, note.gainNode);
605
605
  const scheduledNotes = channel.scheduledNotes;
606
606
  if (scheduledNotes.has(noteNumber)) {
607
607
  scheduledNotes.get(noteNumber).push(note);
@@ -620,39 +620,41 @@ class MidyGMLite {
620
620
  return;
621
621
  if (!channel.scheduledNotes.has(noteNumber))
622
622
  return;
623
- const targetNotes = channel.scheduledNotes.get(noteNumber);
624
- for (let i = 0; i < targetNotes.length; i++) {
625
- const targetNote = targetNotes[i];
626
- if (!targetNote)
623
+ const scheduledNotes = channel.scheduledNotes.get(noteNumber);
624
+ for (let i = 0; i < scheduledNotes.length; i++) {
625
+ const note = scheduledNotes[i];
626
+ if (!note)
627
627
  continue;
628
- if (targetNote.ending)
628
+ if (note.ending)
629
629
  continue;
630
- const { bufferSource, filterNode, gainNode, modLFO, modLFOGain, instrumentKey, } = targetNote;
631
630
  const velocityRate = (velocity + 127) / 127;
632
- const volEndTime = stopTime + instrumentKey.volRelease * velocityRate;
633
- gainNode.gain.cancelScheduledValues(stopTime);
634
- gainNode.gain.linearRampToValueAtTime(0, volEndTime);
631
+ const volEndTime = stopTime +
632
+ note.instrumentKey.volRelease * velocityRate;
633
+ note.gainNode.gain
634
+ .cancelScheduledValues(stopTime)
635
+ .linearRampToValueAtTime(0, volEndTime);
635
636
  const maxFreq = this.audioContext.sampleRate / 2;
636
- const baseFreq = this.centToHz(instrumentKey.initialFilterFc);
637
+ const baseFreq = this.centToHz(note.instrumentKey.initialFilterFc);
637
638
  const adjustedBaseFreq = Math.min(maxFreq, baseFreq);
638
- const modEndTime = stopTime + instrumentKey.modRelease * velocityRate;
639
- filterNode.frequency
639
+ const modEndTime = stopTime +
640
+ note.instrumentKey.modRelease * velocityRate;
641
+ note.filterNode.frequency
640
642
  .cancelScheduledValues(stopTime)
641
643
  .linearRampToValueAtTime(adjustedBaseFreq, modEndTime);
642
- targetNote.ending = true;
644
+ note.ending = true;
643
645
  this.scheduleTask(() => {
644
- bufferSource.loop = false;
646
+ note.bufferSource.loop = false;
645
647
  }, stopTime);
646
648
  return new Promise((resolve) => {
647
- bufferSource.onended = () => {
648
- targetNotes[i] = null;
649
- bufferSource.disconnect(0);
650
- filterNode.disconnect(0);
651
- gainNode.disconnect(0);
652
- if (modLFOGain)
653
- modLFOGain.disconnect(0);
654
- if (modLFO)
655
- modLFO.stop();
649
+ note.bufferSource.onended = () => {
650
+ scheduledNotes[i] = null;
651
+ note.bufferSource.disconnect();
652
+ note.filterNode.disconnect();
653
+ note.gainNode.disconnect();
654
+ if (note.modLFOGain)
655
+ note.modLFOGain.disconnect();
656
+ if (note.modLFO)
657
+ note.modLFO.stop();
656
658
  resolve();
657
659
  };
658
660
  bufferSource.stop(volEndTime);
@@ -718,7 +720,7 @@ class MidyGMLite {
718
720
  case 1:
719
721
  return this.setModulation(channelNumber, value);
720
722
  case 6:
721
- return this.setDataEntry(channelNumber, value, true);
723
+ return this.dataEntryMSB(channelNumber, value);
722
724
  case 7:
723
725
  return this.setVolume(channelNumber, value);
724
726
  case 10:
@@ -726,7 +728,7 @@ class MidyGMLite {
726
728
  case 11:
727
729
  return this.setExpression(channelNumber, value);
728
730
  case 38:
729
- return this.setDataEntry(channelNumber, value, false);
731
+ return this.dataEntryLSB(channelNumber, value);
730
732
  case 64:
731
733
  return this.setSustainPedal(channelNumber, value);
732
734
  case 100:
@@ -743,22 +745,24 @@ class MidyGMLite {
743
745
  console.warn(`Unsupported Control change: controller=${controller} value=${value}`);
744
746
  }
745
747
  }
746
- setModulation(channelNumber, modulation) {
748
+ updateModulation(channel) {
747
749
  const now = this.audioContext.currentTime;
748
- const channel = this.channels[channelNumber];
749
- channel.modulation = (modulation / 127) *
750
- (channel.modulationDepthRange * 100);
751
750
  const activeNotes = this.getActiveNotes(channel, now);
752
751
  activeNotes.forEach((activeNote) => {
753
752
  if (activeNote.modLFO) {
754
- activeNote.gainNode.gain.setValueAtTime(this.cbToRatio(activeNote.instrumentKey.modLfoToVolume) *
755
- channel.modulation, now);
753
+ const { gainNode, instrumentKey } = activeNote;
754
+ gainNode.gain.setValueAtTime(this.cbToRatio(instrumentKey.modLfoToVolume + channel.modulation), now);
756
755
  }
757
756
  else {
758
757
  this.startModulation(channel, activeNote, now);
759
758
  }
760
759
  });
761
760
  }
761
+ setModulation(channelNumber, modulation) {
762
+ const channel = this.channels[channelNumber];
763
+ channel.modulation = (modulation / 127) * channel.modulationDepthRange;
764
+ this.updateModulation(channel);
765
+ }
762
766
  setVolume(channelNumber, volume) {
763
767
  const channel = this.channels[channelNumber];
764
768
  channel.volume = volume / 127;
@@ -781,6 +785,10 @@ class MidyGMLite {
781
785
  channel.expression = expression / 127;
782
786
  this.updateChannelGain(channel);
783
787
  }
788
+ dataEntryLSB(channelNumber, value) {
789
+ this.channels[channelNumber].dataLSB = value;
790
+ this.handleRPN(channelNumber);
791
+ }
784
792
  updateChannelGain(channel) {
785
793
  const now = this.audioContext.currentTime;
786
794
  const volume = channel.volume * channel.expression;
@@ -804,7 +812,7 @@ class MidyGMLite {
804
812
  const rpn = channel.rpnMSB * 128 + channel.rpnLSB;
805
813
  switch (rpn) {
806
814
  case 0:
807
- this.handlePitchBendRangeMessage(channelNumber);
815
+ this.handlePitchBendRangeRPN(channelNumber);
808
816
  break;
809
817
  default:
810
818
  console.warn(`Channel ${channelNumber}: Unsupported RPN MSB=${channel.rpnMSB} LSB=${channel.rpnLSB}`);
@@ -816,9 +824,8 @@ class MidyGMLite {
816
824
  setRPNLSB(channelNumber, value) {
817
825
  this.channels[channelNumber].rpnLSB = value;
818
826
  }
819
- setDataEntry(channelNumber, value, isMSB) {
820
- const channel = this.channels[channelNumber];
821
- isMSB ? channel.dataMSB = value : channel.dataLSB = value;
827
+ dataEntryMSB(channelNumber, value) {
828
+ this.channels[channelNumber].dataMSB = value;
822
829
  this.handleRPN(channelNumber);
823
830
  }
824
831
  updateDetune(channel, detuneChange) {
@@ -832,7 +839,7 @@ class MidyGMLite {
832
839
  .setValueAtTime(detune, now);
833
840
  });
834
841
  }
835
- handlePitchBendRangeMessage(channelNumber) {
842
+ handlePitchBendRangeRPN(channelNumber) {
836
843
  const channel = this.channels[channelNumber];
837
844
  this.limitData(channel, 0, 127, 0, 99);
838
845
  const pitchBendRange = channel.dataMSB + channel.dataLSB / 100;
@@ -971,7 +978,7 @@ Object.defineProperty(MidyGMLite, "channelSettings", {
971
978
  dataLSB: 0,
972
979
  program: 0,
973
980
  pitchBend: 0,
974
- modulationDepthRange: 0.5,
981
+ modulationDepthRange: 0.5, // cb
975
982
  }
976
983
  });
977
984
  Object.defineProperty(MidyGMLite, "effectSettings", {
package/script/midy.d.ts CHANGED
@@ -40,7 +40,14 @@ export class Midy {
40
40
  lfoFilterDepth: number;
41
41
  lfoAmplitudeDepth: number;
42
42
  };
43
- constructor(audioContext: any);
43
+ constructor(audioContext: any, options?: {
44
+ reverbAlgorithm: (audioContext: any) => {
45
+ input: any;
46
+ output: any;
47
+ dryGain: any;
48
+ wetGain: any;
49
+ };
50
+ });
44
51
  ticksPerBeat: number;
45
52
  totalTime: number;
46
53
  reverbFactor: number;
@@ -63,69 +70,25 @@ export class Midy {
63
70
  timeline: any[];
64
71
  instruments: any[];
65
72
  notePromises: any[];
66
- audioContext: any;
67
- masterGain: any;
68
- channels: {
69
- scheduledNotes: Map<any, any>;
70
- sostenutoNotes: Map<any, any>;
71
- polyphonicKeyPressure: {
72
- pitchControl: number;
73
- filterCutoffControl: number;
74
- amplitudeControl: number;
75
- lfoPitchDepth: number;
76
- lfoFilterDepth: number;
77
- lfoAmplitudeDepth: number;
78
- };
79
- channelPressure: {
80
- pitchControl: number;
81
- filterCutoffControl: number;
82
- amplitudeControl: number;
83
- lfoPitchDepth: number;
84
- lfoFilterDepth: number;
85
- lfoAmplitudeDepth: number;
86
- };
87
- gainL: any;
88
- gainR: any;
89
- reverbEffect: {
90
- convolverNode: any;
73
+ defaultOptions: {
74
+ reverbAlgorithm: (audioContext: any) => {
75
+ input: any;
76
+ output: any;
91
77
  dryGain: any;
92
78
  wetGain: any;
93
79
  };
94
- chorusEffect: {
95
- lfo: any;
96
- lfoGain: any;
97
- delayNodes: any[];
98
- chorusGains: any[];
80
+ };
81
+ audioContext: any;
82
+ options: {
83
+ reverbAlgorithm: (audioContext: any) => {
84
+ input: any;
85
+ output: any;
86
+ dryGain: any;
87
+ wetGain: any;
99
88
  };
100
- expression: number;
101
- modulation: number;
102
- sustainPedal: boolean;
103
- portamento: boolean;
104
- sostenutoPedal: boolean;
105
- softPedal: number;
106
- rpnMSB: number;
107
- rpnLSB: number;
108
- pitchBendRange: number;
109
- currentBufferSource: null;
110
- volume: number;
111
- pan: number;
112
- portamentoTime: number;
113
- reverb: number;
114
- chorus: number;
115
- vibratoRate: number;
116
- vibratoDepth: number;
117
- vibratoDelay: number;
118
- bank: number;
119
- bankMSB: number;
120
- bankLSB: number;
121
- dataMSB: number;
122
- dataLSB: number;
123
- program: number;
124
- pitchBend: number;
125
- fineTuning: number;
126
- coarseTuning: number;
127
- modulationDepthRange: number;
128
- }[];
89
+ };
90
+ masterGain: any;
91
+ channels: any[];
129
92
  initSoundFontTable(): any[];
130
93
  addSoundFont(soundFont: any): void;
131
94
  loadSoundFont(soundFontUrl: any): Promise<void>;
@@ -133,8 +96,10 @@ export class Midy {
133
96
  setChannelAudioNodes(audioContext: any): {
134
97
  gainL: any;
135
98
  gainR: any;
99
+ merger: any;
136
100
  reverbEffect: {
137
- convolverNode: any;
101
+ input: any;
102
+ output: any;
138
103
  dryGain: any;
139
104
  wetGain: any;
140
105
  };
@@ -143,69 +108,10 @@ export class Midy {
143
108
  lfoGain: any;
144
109
  delayNodes: any[];
145
110
  chorusGains: any[];
111
+ output: any;
146
112
  };
147
113
  };
148
- createChannels(audioContext: any): {
149
- scheduledNotes: Map<any, any>;
150
- sostenutoNotes: Map<any, any>;
151
- polyphonicKeyPressure: {
152
- pitchControl: number;
153
- filterCutoffControl: number;
154
- amplitudeControl: number;
155
- lfoPitchDepth: number;
156
- lfoFilterDepth: number;
157
- lfoAmplitudeDepth: number;
158
- };
159
- channelPressure: {
160
- pitchControl: number;
161
- filterCutoffControl: number;
162
- amplitudeControl: number;
163
- lfoPitchDepth: number;
164
- lfoFilterDepth: number;
165
- lfoAmplitudeDepth: number;
166
- };
167
- gainL: any;
168
- gainR: any;
169
- reverbEffect: {
170
- convolverNode: any;
171
- dryGain: any;
172
- wetGain: any;
173
- };
174
- chorusEffect: {
175
- lfo: any;
176
- lfoGain: any;
177
- delayNodes: any[];
178
- chorusGains: any[];
179
- };
180
- expression: number;
181
- modulation: number;
182
- sustainPedal: boolean;
183
- portamento: boolean;
184
- sostenutoPedal: boolean;
185
- softPedal: number;
186
- rpnMSB: number;
187
- rpnLSB: number;
188
- pitchBendRange: number;
189
- currentBufferSource: null;
190
- volume: number;
191
- pan: number;
192
- portamentoTime: number;
193
- reverb: number;
194
- chorus: number;
195
- vibratoRate: number;
196
- vibratoDepth: number;
197
- vibratoDelay: number;
198
- bank: number;
199
- bankMSB: number;
200
- bankLSB: number;
201
- dataMSB: number;
202
- dataLSB: number;
203
- program: number;
204
- pitchBend: number;
205
- fineTuning: number;
206
- coarseTuning: number;
207
- modulationDepthRange: number;
208
- }[];
114
+ createChannels(audioContext: any): any[];
209
115
  createNoteBuffer(instrumentKey: any, isSF3: any): Promise<any>;
210
116
  createNoteBufferNode(instrumentKey: any, isSF3: any): Promise<any>;
211
117
  convertToFloat32Array(uint8Array: any): Float32Array;
@@ -228,8 +134,18 @@ export class Midy {
228
134
  currentTime(): number;
229
135
  getActiveNotes(channel: any, time: any): Map<any, any>;
230
136
  getActiveNote(noteList: any, time: any): any;
231
- createReverbEffect(audioContext: any, options?: {}): {
137
+ createConvolutionReverb(audioContext: any, options?: {}): {
138
+ input: any;
139
+ output: any;
140
+ dryGain: any;
141
+ wetGain: any;
232
142
  convolverNode: any;
143
+ };
144
+ createCombFilter(audioContext: any, input: any, delay: any, feedback: any): any;
145
+ createAllpassFilter(audioContext: any, input: any, delay: any, feedback: any): any;
146
+ createSchroederReverb(audioContext: any, options?: {}): {
147
+ input: any;
148
+ output: any;
233
149
  dryGain: any;
234
150
  wetGain: any;
235
151
  };
@@ -238,8 +154,9 @@ export class Midy {
238
154
  lfoGain: any;
239
155
  delayNodes: any[];
240
156
  chorusGains: any[];
157
+ output: any;
241
158
  };
242
- connectNoteEffects(channel: any, gainNode: any): void;
159
+ connectEffects(channel: any, gainNode: any): void;
243
160
  cbToRatio(cb: any): number;
244
161
  centToHz(cent: any): number;
245
162
  calcSemitoneOffset(channel: any): any;
@@ -256,14 +173,15 @@ export class Midy {
256
173
  releaseNote(channelNumber: any, noteNumber: any, velocity: any): Promise<any> | undefined;
257
174
  releaseSustainPedal(channelNumber: any, halfVelocity: any): any[];
258
175
  releaseSostenutoPedal(channelNumber: any, halfVelocity: any): any[];
259
- handleMIDIMessage(statusByte: any, data1: any, data2: any): any;
176
+ handleMIDIMessage(statusByte: any, data1: any, data2: any): void | any[] | Promise<any>;
260
177
  handlePolyphonicKeyPressure(channelNumber: any, noteNumber: any, pressure: any): void;
261
178
  handleProgramChange(channelNumber: any, program: any): void;
262
179
  handleChannelPressure(channelNumber: any, pressure: any): void;
263
180
  handlePitchBendMessage(channelNumber: any, lsb: any, msb: any): void;
264
181
  setPitchBend(channelNumber: any, pitchBend: any): void;
265
- handleControlChange(channelNumber: any, controller: any, value: any): any;
182
+ handleControlChange(channelNumber: any, controller: any, value: any): void | any[];
266
183
  setBankMSB(channelNumber: any, msb: any): void;
184
+ updateModulation(channel: any): void;
267
185
  setModulation(channelNumber: any, modulation: any): void;
268
186
  setPortamentoTime(channelNumber: any, portamentoTime: any): void;
269
187
  setVolume(channelNumber: any, volume: any): void;
@@ -274,11 +192,12 @@ export class Midy {
274
192
  setPan(channelNumber: any, pan: any): void;
275
193
  setExpression(channelNumber: any, expression: any): void;
276
194
  setBankLSB(channelNumber: any, lsb: any): void;
195
+ dataEntryLSB(channelNumber: any, value: any): void;
277
196
  updateChannelGain(channel: any): void;
278
197
  setSustainPedal(channelNumber: any, value: any): void;
279
198
  setPortamento(channelNumber: any, value: any): void;
280
- setReverb(channelNumber: any, reverb: any): void;
281
- setChorus(channelNumber: any, chorus: any): void;
199
+ setReverbSendLevel(channelNumber: any, reverb: any): void;
200
+ setChorusSendLevel(channelNumber: any, chorus: any): void;
282
201
  setSostenutoPedal(channelNumber: any, value: any): void;
283
202
  setSoftPedal(channelNumber: any, softPedal: any): void;
284
203
  setVibratoRate(channelNumber: any, vibratoRate: any): void;
@@ -287,18 +206,20 @@ export class Midy {
287
206
  limitData(channel: any, minMSB: any, maxMSB: any, minLSB: any, maxLSB: any): void;
288
207
  limitDataMSB(channel: any, minMSB: any, maxMSB: any): void;
289
208
  handleRPN(channelNumber: any, value: any): void;
290
- incrementRPNValue(channelNumber: any): void;
291
- decrementRPNValue(channelNumber: any): void;
209
+ dataIncrement(channelNumber: any): void;
210
+ dataDecrement(channelNumber: any): void;
292
211
  setRPNMSB(channelNumber: any, value: any): void;
293
212
  setRPNLSB(channelNumber: any, value: any): void;
294
- setDataEntry(channelNumber: any, value: any, isMSB: any): void;
213
+ dataEntryMSB(channelNumber: any, value: any): void;
295
214
  updateDetune(channel: any, detuneChange: any): void;
296
- handlePitchBendRangeMessage(channelNumber: any): void;
215
+ handlePitchBendRangeRPN(channelNumber: any): void;
297
216
  setPitchBendRange(channelNumber: any, pitchBendRange: any): void;
298
- handleFineTuningMessage(channelNumber: any): void;
217
+ handleFineTuningRPN(channelNumber: any): void;
299
218
  setFineTuning(channelNumber: any, fineTuning: any): void;
300
- handleCoarseTuningMessage(channelNumber: any): void;
219
+ handleCoarseTuningRPN(channelNumber: any): void;
301
220
  setCoarseTuning(channelNumber: any, coarseTuning: any): void;
221
+ handleModulationDepthRangeRPN(channelNumber: any): void;
222
+ setModulationDepthRange(channelNumber: any, modulationDepthRange: any): void;
302
223
  allSoundOff(channelNumber: any): any[];
303
224
  resetAllControllers(channelNumber: any): void;
304
225
  allNotesOff(channelNumber: any): any[];
@@ -1 +1 @@
1
- {"version":3,"file":"midy.d.ts","sourceRoot":"","sources":["../src/midy.js"],"names":[],"mappings":"AAuBA;IAwBE;;;;;;;;;;;;;;;;;;;;MAoBE;IAEF;;;;;;;;;;;MAWE;IAEF;;;;;;;MAOE;IAEF,+BAMC;IAzED,qBAAmB;IACnB,kBAAc;IACd,qBAAmB;IACnB,yBAAqB;IACrB,2BAAuB;IACvB,cAAa;IACb,cAAa;IACb,0BAAwB;IACxB,kBAAc;IACd,mBAAiB;IACjB,kBAAc;IACd,mBAAe;IACf,kBAAgB;IAChB,sBAA2C;IAC3C,mBAAkB;IAClB,mBAAkB;IAClB,kBAAiB;IACjB,oBAAmB;IACnB,mBAAkB;IAClB,gBAAc;IACd,mBAAiB;IACjB,oBAAkB;IA+ChB,kBAAgC;IAChC,gBAA4C;IAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAAiD;IAInD,4BAMC;IAED,mCASC;IAED,gDAMC;IAED,sCASC;IAED;;;;;;;;;;;;;;MAqBC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAiBC;IAED,+DAyBC;IAED,mEAWC;IAED,qDAOC;IAED,2EAyDC;IAED,mCAOC;IAED,0BA+CC;IAED,uDAEC;IAED,wDAEC;IAED;;;MAgGC;IAED,4BAsBC;IAED,uBAKC;IAED,aAGC;IAED,cAKC;IAED,wBAIC;IAED,0BAKC;IAED,wBAOC;IAED,sBAGC;IAED,uDASC;IAED,6CAQC;IAED;;;;MAoCC;IAED;;;;;MAqCC;IAED,sDA6BC;IAED,2BAEC;IAED,4BAEC;IAED,sCAKC;IAED,mFAGC;IAED,iDAiBC;IAED,iDAiCC;IAED,0DAmBC;IAED,uDAcC;IAED,wHAqCC;IAED,gDAQC;IAED,kGAgCC;IAED,0EAGC;IAED,sIAwDC;IAED,0FAGC;IAED,kEAeC;IAED,oEAYC;IAED,gEAqBC;IAED,sFAcC;IAED,4DAIC;IAED,+DAcC;IAED,qEAGC;IAED,uDAOC;IAED,0EAkEC;IAED,+CAEC;IAED,yDAiBC;IAED,iEAEC;IAED,iDAIC;IAED;;;MAMC;IAED,2CAIC;IAED,yDAIC;IAED,+CAEC;IAED,sCAUC;IAED,sDAMC;IAED,oDAEC;IAED,iDASC;IAED,iDAIC;IAED,wDAWC;IAED,uDAGC;IAED,2DAGC;IAED,6DAGC;IAED,6DASC;IAED,kFAeC;IAED,2DAMC;IAGD,gDAqBC;IAED,4CAEC;IAED,4CAEC;IAED,gDAEC;IAED,gDAEC;IAED,+DAIC;IAED,oDAUC;IAED,sDAKC;IAED,iEAOC;IAED,kDAKC;IAED,yDAGC;IAED,oDAKC;IAED,6DAGC;IAED,uCAoBC;IAED,8CAEC;IAED,uCAoBC;IAED,gBAEC;IAED,eAEC;IAED,eAEC;IAED,eAEC;IAED,4DAmBC;IAED,oBAQC;IAED,oBAQC;IAED,yDAgDC;IAED,yCAGC;IAED,mCAQC;IAED,6CAGC;IAED,2CAMC;IAED,+CAGC;IAED,+CAMC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AA1hDD;IASE,gFAKC;IAbD,kBAAa;IACb,cAAS;IACT,gBAAW;IACX,YAAO;IACP,gBAAW;IACX,YAAO;IACP,gBAAW;IAGT,gBAA4B;IAC5B,cAAwB;IACxB,eAA0B;IAC1B,mBAAkC;CAErC"}
1
+ {"version":3,"file":"midy.d.ts","sourceRoot":"","sources":["../src/midy.js"],"names":[],"mappings":"AAuBA;IAwBE;;;;;;;;;;;;;;;;;;;;MAoBE;IAEF;;;;;;;;;;;MAWE;IAEF;;;;;;;MAOE;IASF;;;;;;;OAOC;IAjFD,qBAAmB;IACnB,kBAAc;IACd,qBAAmB;IACnB,yBAAqB;IACrB,2BAAuB;IACvB,cAAa;IACb,cAAa;IACb,0BAAwB;IACxB,kBAAc;IACd,mBAAiB;IACjB,kBAAc;IACd,mBAAe;IACf,kBAAgB;IAChB,sBAA2C;IAC3C,mBAAkB;IAClB,mBAAkB;IAClB,kBAAiB;IACjB,oBAAmB;IACnB,mBAAkB;IAClB,gBAAc;IACd,mBAAiB;IACjB,oBAAkB;IA8ClB;;;;;;;MAKE;IAGA,kBAAgC;IAChC;;;;;;;MAAqD;IACrD,gBAA4C;IAE5C,gBAAiD;IAInD,4BAMC;IAED,mCASC;IAED,gDAMC;IAED,sCASC;IAED;;;;;;;;;;;;;;;;;MAkBC;IAED,yCAiBC;IAED,+DAyBC;IAED,mEAWC;IAED,qDAOC;IAED,2EAyDC;IAED,mCAOC;IAED,0BA+CC;IAED,uDAEC;IAED,wDAEC;IAED;;;MAgGC;IAED,4BAsBC;IAED,uBAKC;IAED,aAGC;IAED,cAKC;IAED,wBAIC;IAED,0BAKC;IAED,wBAOC;IAED,sBAGC;IAED,uDASC;IAED,6CAQC;IAED;;;;;;MA4CC;IAED,gFAUC;IAED,mFAYC;IAID;;;;;MAuCC;IAED;;;;;;MAoCC;IAED,kDAuBC;IAED,2BAEC;IAED,4BAEC;IAED,sCAKC;IAED,mFAGC;IAED,iDAiBC;IAED,iDAiCC;IAED,0DAmBC;IAED,uDAcC;IAED,wHAqCC;IAED,gDAQC;IAED,kGAgCC;IAED,0EAGC;IAED,sIAiDC;IAED,0FAGC;IAED,kEAeC;IAED,oEAYC;IAED,wFAqBC;IAED,sFAcC;IAED,4DAIC;IAED,+DAcC;IAED,qEAGC;IAED,uDAOC;IAED,mFAkEC;IAED,+CAEC;IAED,qCAcC;IAED,yDAIC;IAED,iEAEC;IAED,iDAIC;IAED;;;MAMC;IAED,2CAIC;IAED,yDAIC;IAED,+CAEC;IAED,mDAGC;IAED,sCAUC;IAED,sDAMC;IAED,oDAEC;IAED,0DASC;IAED,0DAIC;IAED,wDAWC;IAED,uDAGC;IAED,2DAGC;IAED,6DAGC;IAED,6DASC;IAED,kFAeC;IAED,2DAMC;IAED,gDAyBC;IAED,wCAEC;IAED,wCAEC;IAED,gDAEC;IAED,gDAEC;IAED,mDAGC;IAED,oDAUC;IAED,kDAKC;IAED,iEAOC;IAED,8CAKC;IAED,yDAMC;IAED,gDAKC;IAED,6DAMC;IAED,wDAKC;IAED,6EAKC;IAED,uCAoBC;IAED,8CAEC;IAED,uCAoBC;IAED,gBAEC;IAED,eAEC;IAED,eAEC;IAED,eAEC;IAED,4DAmBC;IAED,oBAQC;IAED,oBAQC;IAED,yDAgDC;IAED,yCAGC;IAED,mCAQC;IAED,6CAGC;IAED,2CAMC;IAED,+CAGC;IAED,+CAMC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AA5nDD;IASE,gFAKC;IAbD,kBAAa;IACb,cAAS;IACT,gBAAW;IACX,YAAO;IACP,gBAAW;IACX,YAAO;IACP,gBAAW;IAGT,gBAA4B;IAC5B,cAAwB;IACxB,eAA0B;IAC1B,mBAAkC;CAErC"}