@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.
@@ -183,23 +183,23 @@ export class MidyGMLite {
183
183
  this.totalTime = this.calcTotalTime();
184
184
  }
185
185
  setChannelAudioNodes(audioContext) {
186
- const { gainLeft, gainRight } = this.panToGain(MidyGMLite.channelSettings.pan);
186
+ const { gainLeft, gainRight } = this.panToGain(this.constructor.channelSettings.pan);
187
187
  const gainL = new GainNode(audioContext, { gain: gainLeft });
188
188
  const gainR = new GainNode(audioContext, { gain: gainRight });
189
189
  const merger = new ChannelMergerNode(audioContext, { numberOfInputs: 2 });
190
190
  gainL.connect(merger, 0, 0);
191
191
  gainR.connect(merger, 0, 1);
192
- merger.connect(this.masterGain);
193
192
  return {
194
193
  gainL,
195
194
  gainR,
195
+ merger,
196
196
  };
197
197
  }
198
198
  createChannels(audioContext) {
199
199
  const channels = Array.from({ length: 16 }, () => {
200
200
  return {
201
- ...MidyGMLite.channelSettings,
202
- ...MidyGMLite.effectSettings,
201
+ ...this.constructor.channelSettings,
202
+ ...this.constructor.effectSettings,
203
203
  ...this.setChannelAudioNodes(audioContext),
204
204
  scheduledNotes: new Map(),
205
205
  };
@@ -491,9 +491,9 @@ export class MidyGMLite {
491
491
  }
492
492
  return noteList[0];
493
493
  }
494
- connectNoteEffects(channel, gainNode) {
495
- gainNode.connect(channel.gainL);
496
- gainNode.connect(channel.gainR);
494
+ connectEffects(channel, gainNode) {
495
+ gainNode.connect(channel.merger);
496
+ merger.connect(this.masterGain);
497
497
  }
498
498
  cbToRatio(cb) {
499
499
  return Math.pow(10, cb / 200);
@@ -559,7 +559,7 @@ export class MidyGMLite {
559
559
  startModulation(channel, note, time) {
560
560
  const { instrumentKey } = note;
561
561
  note.modLFOGain = new GainNode(this.audioContext, {
562
- gain: this.cbToRatio(instrumentKey.modLfoToVolume) * channel.modulation,
562
+ gain: this.cbToRatio(instrumentKey.modLfoToVolume + channel.modulation),
563
563
  });
564
564
  note.modLFO = new OscillatorNode(this.audioContext, {
565
565
  frequency: this.centToHz(instrumentKey.freqModLFO),
@@ -598,7 +598,7 @@ export class MidyGMLite {
598
598
  if (!instrumentKey)
599
599
  return;
600
600
  const note = await this.createNote(channel, instrumentKey, noteNumber, velocity, startTime, isSF3);
601
- this.connectNoteEffects(channel, note.gainNode);
601
+ this.connectEffects(channel, note.gainNode);
602
602
  const scheduledNotes = channel.scheduledNotes;
603
603
  if (scheduledNotes.has(noteNumber)) {
604
604
  scheduledNotes.get(noteNumber).push(note);
@@ -617,39 +617,41 @@ export class MidyGMLite {
617
617
  return;
618
618
  if (!channel.scheduledNotes.has(noteNumber))
619
619
  return;
620
- const targetNotes = channel.scheduledNotes.get(noteNumber);
621
- for (let i = 0; i < targetNotes.length; i++) {
622
- const targetNote = targetNotes[i];
623
- if (!targetNote)
620
+ const scheduledNotes = channel.scheduledNotes.get(noteNumber);
621
+ for (let i = 0; i < scheduledNotes.length; i++) {
622
+ const note = scheduledNotes[i];
623
+ if (!note)
624
624
  continue;
625
- if (targetNote.ending)
625
+ if (note.ending)
626
626
  continue;
627
- const { bufferSource, filterNode, gainNode, modLFO, modLFOGain, instrumentKey, } = targetNote;
628
627
  const velocityRate = (velocity + 127) / 127;
629
- const volEndTime = stopTime + instrumentKey.volRelease * velocityRate;
630
- gainNode.gain.cancelScheduledValues(stopTime);
631
- gainNode.gain.linearRampToValueAtTime(0, volEndTime);
628
+ const volEndTime = stopTime +
629
+ note.instrumentKey.volRelease * velocityRate;
630
+ note.gainNode.gain
631
+ .cancelScheduledValues(stopTime)
632
+ .linearRampToValueAtTime(0, volEndTime);
632
633
  const maxFreq = this.audioContext.sampleRate / 2;
633
- const baseFreq = this.centToHz(instrumentKey.initialFilterFc);
634
+ const baseFreq = this.centToHz(note.instrumentKey.initialFilterFc);
634
635
  const adjustedBaseFreq = Math.min(maxFreq, baseFreq);
635
- const modEndTime = stopTime + instrumentKey.modRelease * velocityRate;
636
- filterNode.frequency
636
+ const modEndTime = stopTime +
637
+ note.instrumentKey.modRelease * velocityRate;
638
+ note.filterNode.frequency
637
639
  .cancelScheduledValues(stopTime)
638
640
  .linearRampToValueAtTime(adjustedBaseFreq, modEndTime);
639
- targetNote.ending = true;
641
+ note.ending = true;
640
642
  this.scheduleTask(() => {
641
- bufferSource.loop = false;
643
+ note.bufferSource.loop = false;
642
644
  }, stopTime);
643
645
  return new Promise((resolve) => {
644
- bufferSource.onended = () => {
645
- targetNotes[i] = null;
646
- bufferSource.disconnect(0);
647
- filterNode.disconnect(0);
648
- gainNode.disconnect(0);
649
- if (modLFOGain)
650
- modLFOGain.disconnect(0);
651
- if (modLFO)
652
- modLFO.stop();
646
+ note.bufferSource.onended = () => {
647
+ scheduledNotes[i] = null;
648
+ note.bufferSource.disconnect();
649
+ note.filterNode.disconnect();
650
+ note.gainNode.disconnect();
651
+ if (note.modLFOGain)
652
+ note.modLFOGain.disconnect();
653
+ if (note.modLFO)
654
+ note.modLFO.stop();
653
655
  resolve();
654
656
  };
655
657
  bufferSource.stop(volEndTime);
@@ -715,7 +717,7 @@ export class MidyGMLite {
715
717
  case 1:
716
718
  return this.setModulation(channelNumber, value);
717
719
  case 6:
718
- return this.setDataEntry(channelNumber, value, true);
720
+ return this.dataEntryMSB(channelNumber, value);
719
721
  case 7:
720
722
  return this.setVolume(channelNumber, value);
721
723
  case 10:
@@ -723,7 +725,7 @@ export class MidyGMLite {
723
725
  case 11:
724
726
  return this.setExpression(channelNumber, value);
725
727
  case 38:
726
- return this.setDataEntry(channelNumber, value, false);
728
+ return this.dataEntryLSB(channelNumber, value);
727
729
  case 64:
728
730
  return this.setSustainPedal(channelNumber, value);
729
731
  case 100:
@@ -740,22 +742,24 @@ export class MidyGMLite {
740
742
  console.warn(`Unsupported Control change: controller=${controller} value=${value}`);
741
743
  }
742
744
  }
743
- setModulation(channelNumber, modulation) {
745
+ updateModulation(channel) {
744
746
  const now = this.audioContext.currentTime;
745
- const channel = this.channels[channelNumber];
746
- channel.modulation = (modulation / 127) *
747
- (channel.modulationDepthRange * 100);
748
747
  const activeNotes = this.getActiveNotes(channel, now);
749
748
  activeNotes.forEach((activeNote) => {
750
749
  if (activeNote.modLFO) {
751
- activeNote.gainNode.gain.setValueAtTime(this.cbToRatio(activeNote.instrumentKey.modLfoToVolume) *
752
- channel.modulation, now);
750
+ const { gainNode, instrumentKey } = activeNote;
751
+ gainNode.gain.setValueAtTime(this.cbToRatio(instrumentKey.modLfoToVolume + channel.modulation), now);
753
752
  }
754
753
  else {
755
754
  this.startModulation(channel, activeNote, now);
756
755
  }
757
756
  });
758
757
  }
758
+ setModulation(channelNumber, modulation) {
759
+ const channel = this.channels[channelNumber];
760
+ channel.modulation = (modulation / 127) * channel.modulationDepthRange;
761
+ this.updateModulation(channel);
762
+ }
759
763
  setVolume(channelNumber, volume) {
760
764
  const channel = this.channels[channelNumber];
761
765
  channel.volume = volume / 127;
@@ -778,6 +782,10 @@ export class MidyGMLite {
778
782
  channel.expression = expression / 127;
779
783
  this.updateChannelGain(channel);
780
784
  }
785
+ dataEntryLSB(channelNumber, value) {
786
+ this.channels[channelNumber].dataLSB = value;
787
+ this.handleRPN(channelNumber);
788
+ }
781
789
  updateChannelGain(channel) {
782
790
  const now = this.audioContext.currentTime;
783
791
  const volume = channel.volume * channel.expression;
@@ -801,7 +809,7 @@ export class MidyGMLite {
801
809
  const rpn = channel.rpnMSB * 128 + channel.rpnLSB;
802
810
  switch (rpn) {
803
811
  case 0:
804
- this.handlePitchBendRangeMessage(channelNumber);
812
+ this.handlePitchBendRangeRPN(channelNumber);
805
813
  break;
806
814
  default:
807
815
  console.warn(`Channel ${channelNumber}: Unsupported RPN MSB=${channel.rpnMSB} LSB=${channel.rpnLSB}`);
@@ -813,9 +821,8 @@ export class MidyGMLite {
813
821
  setRPNLSB(channelNumber, value) {
814
822
  this.channels[channelNumber].rpnLSB = value;
815
823
  }
816
- setDataEntry(channelNumber, value, isMSB) {
817
- const channel = this.channels[channelNumber];
818
- isMSB ? channel.dataMSB = value : channel.dataLSB = value;
824
+ dataEntryMSB(channelNumber, value) {
825
+ this.channels[channelNumber].dataMSB = value;
819
826
  this.handleRPN(channelNumber);
820
827
  }
821
828
  updateDetune(channel, detuneChange) {
@@ -829,7 +836,7 @@ export class MidyGMLite {
829
836
  .setValueAtTime(detune, now);
830
837
  });
831
838
  }
832
- handlePitchBendRangeMessage(channelNumber) {
839
+ handlePitchBendRangeRPN(channelNumber) {
833
840
  const channel = this.channels[channelNumber];
834
841
  this.limitData(channel, 0, 127, 0, 99);
835
842
  const pitchBendRange = channel.dataMSB + channel.dataLSB / 100;
@@ -967,7 +974,7 @@ Object.defineProperty(MidyGMLite, "channelSettings", {
967
974
  dataLSB: 0,
968
975
  program: 0,
969
976
  pitchBend: 0,
970
- modulationDepthRange: 0.5,
977
+ modulationDepthRange: 0.5, // cb
971
978
  }
972
979
  });
973
980
  Object.defineProperty(MidyGMLite, "effectSettings", {
package/esm/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[];
package/esm/midy.d.ts.map CHANGED
@@ -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"}