@marmooo/midy 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -2
- package/esm/midy-GM1.d.ts +3 -2
- package/esm/midy-GM1.d.ts.map +1 -1
- package/esm/midy-GM1.js +59 -67
- package/esm/midy-GM2.d.ts +8 -18
- package/esm/midy-GM2.d.ts.map +1 -1
- package/esm/midy-GM2.js +117 -158
- package/esm/midy-GMLite.d.ts +3 -2
- package/esm/midy-GMLite.d.ts.map +1 -1
- package/esm/midy-GMLite.js +60 -68
- package/esm/midy.d.ts +8 -18
- package/esm/midy.d.ts.map +1 -1
- package/esm/midy.js +121 -161
- package/esm/reverb.d.ts +58 -0
- package/esm/reverb.d.ts.map +1 -0
- package/esm/reverb.js +389 -0
- package/package.json +1 -1
- package/script/midy-GM1.d.ts +3 -2
- package/script/midy-GM1.d.ts.map +1 -1
- package/script/midy-GM1.js +59 -67
- package/script/midy-GM2.d.ts +8 -18
- package/script/midy-GM2.d.ts.map +1 -1
- package/script/midy-GM2.js +117 -158
- package/script/midy-GMLite.d.ts +3 -2
- package/script/midy-GMLite.d.ts.map +1 -1
- package/script/midy-GMLite.js +60 -68
- package/script/midy.d.ts +8 -18
- package/script/midy.d.ts.map +1 -1
- package/script/midy.js +121 -161
- package/script/reverb.d.ts +58 -0
- package/script/reverb.d.ts.map +1 -0
- package/script/reverb.js +405 -0
package/esm/midy-GMLite.js
CHANGED
|
@@ -42,7 +42,7 @@ import { OggVorbisDecoderWebWorker } from "@wasm-audio-decoders/ogg-vorbis";
|
|
|
42
42
|
// A "rendering" event is dispatched when rendering starts, and a
|
|
43
43
|
// "rendered" event is dispatched when rendering completes.
|
|
44
44
|
/** @type {"none"|"ads"|"adsr"|"note"|"audio"} */
|
|
45
|
-
const DEFAULT_CACHE_MODE = "
|
|
45
|
+
const DEFAULT_CACHE_MODE = "ads";
|
|
46
46
|
const _f64Buf = new ArrayBuffer(8);
|
|
47
47
|
const _f64Array = new Float64Array(_f64Buf);
|
|
48
48
|
const _u64Array = new BigUint64Array(_f64Buf);
|
|
@@ -160,7 +160,13 @@ class Note {
|
|
|
160
160
|
}
|
|
161
161
|
}
|
|
162
162
|
class Channel {
|
|
163
|
-
constructor(audioNodes, settings) {
|
|
163
|
+
constructor(channelNumber, audioNodes, settings) {
|
|
164
|
+
Object.defineProperty(this, "channelNumber", {
|
|
165
|
+
enumerable: true,
|
|
166
|
+
configurable: true,
|
|
167
|
+
writable: true,
|
|
168
|
+
value: 0
|
|
169
|
+
});
|
|
164
170
|
Object.defineProperty(this, "isDrum", {
|
|
165
171
|
enumerable: true,
|
|
166
172
|
configurable: true,
|
|
@@ -233,6 +239,7 @@ class Channel {
|
|
|
233
239
|
writable: true,
|
|
234
240
|
value: null
|
|
235
241
|
});
|
|
242
|
+
this.channelNumber = channelNumber;
|
|
236
243
|
Object.assign(this, audioNodes);
|
|
237
244
|
Object.assign(this, settings);
|
|
238
245
|
this.state = new ControllerState();
|
|
@@ -881,6 +888,8 @@ export class MidyGMLite extends EventTarget {
|
|
|
881
888
|
return;
|
|
882
889
|
const soundFont = this.soundFonts[soundFontIndex];
|
|
883
890
|
const voice = soundFont.getVoice(bank, programNumber, noteNumber, velocity);
|
|
891
|
+
if (!voice)
|
|
892
|
+
return;
|
|
884
893
|
const { instrument, sampleID } = voice.generators;
|
|
885
894
|
return soundFontIndex * (2 ** 31) + instrument * (2 ** 24) +
|
|
886
895
|
(sampleID << 8);
|
|
@@ -897,7 +906,7 @@ export class MidyGMLite extends EventTarget {
|
|
|
897
906
|
}
|
|
898
907
|
createChannels(audioContext) {
|
|
899
908
|
const settings = this.constructor.channelSettings;
|
|
900
|
-
return Array.from({ length: this.numChannels }, () => new Channel(this.createChannelAudioNodes(audioContext), settings));
|
|
909
|
+
return Array.from({ length: this.numChannels }, (_, ch) => new Channel(ch, this.createChannelAudioNodes(audioContext), settings));
|
|
901
910
|
}
|
|
902
911
|
decodeOggVorbis(sample) {
|
|
903
912
|
const task = decoderQueue.then(async () => {
|
|
@@ -1365,6 +1374,7 @@ export class MidyGMLite extends EventTarget {
|
|
|
1365
1374
|
continue;
|
|
1366
1375
|
const soundFont = this.soundFonts[soundFontIndex];
|
|
1367
1376
|
const fakeChannel = {
|
|
1377
|
+
channelNumber: ch,
|
|
1368
1378
|
state: { array: renderControllerStates[ch].slice() },
|
|
1369
1379
|
programNumber,
|
|
1370
1380
|
isDrum,
|
|
@@ -1681,25 +1691,29 @@ export class MidyGMLite extends EventTarget {
|
|
|
1681
1691
|
const volHold = volAttack + voiceParams.volHold;
|
|
1682
1692
|
const decayDuration = voiceParams.volDecay;
|
|
1683
1693
|
const adsDuration = volHold + decayDuration * decayCurve * 5;
|
|
1684
|
-
const
|
|
1685
|
-
const
|
|
1694
|
+
const sampleLoopStart = voiceParams.loopStart / voiceParams.sampleRate;
|
|
1695
|
+
const sampleLoopDuration = isLoop
|
|
1686
1696
|
? (voiceParams.loopEnd - voiceParams.loopStart) / voiceParams.sampleRate
|
|
1687
1697
|
: 0;
|
|
1688
|
-
const
|
|
1689
|
-
|
|
1698
|
+
const playbackRate = voiceParams.playbackRate;
|
|
1699
|
+
const outputLoopStart = sampleLoopStart / playbackRate;
|
|
1700
|
+
const outputLoopDuration = sampleLoopDuration / playbackRate;
|
|
1701
|
+
const loopCount = isLoop && adsDuration > outputLoopStart
|
|
1702
|
+
? Math.ceil((adsDuration - outputLoopStart) / outputLoopDuration)
|
|
1690
1703
|
: 0;
|
|
1691
|
-
const alignedLoopStart =
|
|
1704
|
+
const alignedLoopStart = outputLoopStart + loopCount * outputLoopDuration;
|
|
1692
1705
|
const renderDuration = isLoop
|
|
1693
|
-
? alignedLoopStart +
|
|
1694
|
-
: audioBuffer.duration;
|
|
1695
|
-
const
|
|
1706
|
+
? alignedLoopStart + outputLoopDuration
|
|
1707
|
+
: audioBuffer.duration / playbackRate;
|
|
1708
|
+
const sampleRate = this.audioContext.sampleRate;
|
|
1709
|
+
const offlineContext = new OfflineAudioContext(audioBuffer.numberOfChannels, Math.ceil(renderDuration * sampleRate), sampleRate);
|
|
1696
1710
|
const bufferSource = new AudioBufferSourceNode(offlineContext);
|
|
1697
1711
|
bufferSource.buffer = audioBuffer;
|
|
1698
|
-
bufferSource.playbackRate.value =
|
|
1712
|
+
bufferSource.playbackRate.value = playbackRate;
|
|
1699
1713
|
bufferSource.loop = isLoop;
|
|
1700
1714
|
if (isLoop) {
|
|
1701
|
-
bufferSource.loopStart =
|
|
1702
|
-
bufferSource.loopEnd =
|
|
1715
|
+
bufferSource.loopStart = sampleLoopStart;
|
|
1716
|
+
bufferSource.loopEnd = sampleLoopStart + sampleLoopDuration;
|
|
1703
1717
|
}
|
|
1704
1718
|
const initialFreq = this.clampCutoffFrequency(this.centToHz(voiceParams.initialFilterFc));
|
|
1705
1719
|
const filterEnvelopeNode = new BiquadFilterNode(offlineContext, {
|
|
@@ -1731,7 +1745,7 @@ export class MidyGMLite extends EventTarget {
|
|
|
1731
1745
|
isLoop,
|
|
1732
1746
|
adsDuration,
|
|
1733
1747
|
loopStart: alignedLoopStart,
|
|
1734
|
-
loopDuration,
|
|
1748
|
+
loopDuration: outputLoopDuration,
|
|
1735
1749
|
});
|
|
1736
1750
|
}
|
|
1737
1751
|
async createAdsrRenderedBuffer(note, voiceParams, audioBuffer, noteDuration) {
|
|
@@ -1829,7 +1843,7 @@ export class MidyGMLite extends EventTarget {
|
|
|
1829
1843
|
}
|
|
1830
1844
|
async createFullRenderedBuffer(channel, note, voiceParams, noteDuration, noteEvent = {}) {
|
|
1831
1845
|
const { startTime: noteStartTime = 0, events: noteEvents = [] } = noteEvent;
|
|
1832
|
-
const ch =
|
|
1846
|
+
const ch = channel.channelNumber;
|
|
1833
1847
|
const releaseEndDuration = voiceParams.volRelease * releaseCurve * 5;
|
|
1834
1848
|
const totalDuration = noteDuration + releaseEndDuration;
|
|
1835
1849
|
const sampleRate = this.audioContext.sampleRate;
|
|
@@ -1878,7 +1892,7 @@ export class MidyGMLite extends EventTarget {
|
|
|
1878
1892
|
const audioBufferId = this.getVoiceId(channel, noteNumber, velocity);
|
|
1879
1893
|
if (!realtime) {
|
|
1880
1894
|
if (cacheMode === "note") {
|
|
1881
|
-
return await this.getFullCachedBuffer(note, audioBufferId);
|
|
1895
|
+
return await this.getFullCachedBuffer(channel, note, audioBufferId);
|
|
1882
1896
|
}
|
|
1883
1897
|
else if (cacheMode === "adsr") {
|
|
1884
1898
|
return await this.getAdsrCachedBuffer(note, audioBufferId);
|
|
@@ -1969,7 +1983,7 @@ export class MidyGMLite extends EventTarget {
|
|
|
1969
1983
|
durationMap.set(cacheKey, renderPromise);
|
|
1970
1984
|
return await renderPromise;
|
|
1971
1985
|
}
|
|
1972
|
-
async getFullCachedBuffer(note, audioBufferId) {
|
|
1986
|
+
async getFullCachedBuffer(channel, note, audioBufferId) {
|
|
1973
1987
|
const voiceParams = note.voiceParams;
|
|
1974
1988
|
const timelineIndex = note.timelineIndex;
|
|
1975
1989
|
const noteEvent = this.noteOnEvents.get(timelineIndex);
|
|
@@ -1994,7 +2008,7 @@ export class MidyGMLite extends EventTarget {
|
|
|
1994
2008
|
}
|
|
1995
2009
|
const renderPromise = (async () => {
|
|
1996
2010
|
try {
|
|
1997
|
-
const rendered = await this.createFullRenderedBuffer(
|
|
2011
|
+
const rendered = await this.createFullRenderedBuffer(channel, note, voiceParams, noteDuration, noteEvent);
|
|
1998
2012
|
durationMap.set(cacheKey, rendered);
|
|
1999
2013
|
return rendered;
|
|
2000
2014
|
}
|
|
@@ -2021,7 +2035,6 @@ export class MidyGMLite extends EventTarget {
|
|
|
2021
2035
|
note.renderedBuffer = isRendered ? audioBuffer : null;
|
|
2022
2036
|
note.bufferSource = this.createBufferSource(channel, voiceParams, audioBuffer);
|
|
2023
2037
|
note.volumeNode = new GainNode(audioContext);
|
|
2024
|
-
note.volumeNode.gain.setValueAtTime(1, now);
|
|
2025
2038
|
const cacheMode = this.cacheMode;
|
|
2026
2039
|
const isFullCached = isRendered && audioBuffer.isFull === true;
|
|
2027
2040
|
if (cacheMode === "none") {
|
|
@@ -2114,9 +2127,6 @@ export class MidyGMLite extends EventTarget {
|
|
|
2114
2127
|
startTime = this.audioContext.currentTime;
|
|
2115
2128
|
const note = new Note(noteNumber, velocity, startTime);
|
|
2116
2129
|
note.channel = channelNumber;
|
|
2117
|
-
const channel = this.channels[channelNumber];
|
|
2118
|
-
note.index = channel.scheduledNotes.length;
|
|
2119
|
-
channel.scheduledNotes.push(note);
|
|
2120
2130
|
return note;
|
|
2121
2131
|
}
|
|
2122
2132
|
async setupNote(channelNumber, note, startTime) {
|
|
@@ -2139,6 +2149,8 @@ export class MidyGMLite extends EventTarget {
|
|
|
2139
2149
|
note.voice = soundFont.getVoice(bank, programNumber, note.noteNumber, note.velocity);
|
|
2140
2150
|
if (!note.voice)
|
|
2141
2151
|
return;
|
|
2152
|
+
note.index = channel.scheduledNotes.length;
|
|
2153
|
+
channel.scheduledNotes.push(note);
|
|
2142
2154
|
await this.setNoteAudioNode(channel, note, realtime);
|
|
2143
2155
|
this.setNoteRouting(channelNumber, note, startTime);
|
|
2144
2156
|
note.resolveReady();
|
|
@@ -2184,18 +2196,8 @@ export class MidyGMLite extends EventTarget {
|
|
|
2184
2196
|
const volRelease = endTime + volDuration;
|
|
2185
2197
|
note.volumeNode.gain
|
|
2186
2198
|
.cancelScheduledValues(endTime)
|
|
2187
|
-
.setValueAtTime(1, endTime)
|
|
2188
2199
|
.setTargetAtTime(0, endTime, volDuration * releaseCurve);
|
|
2189
|
-
|
|
2190
|
-
this.scheduleTask(() => {
|
|
2191
|
-
note.bufferSource.loop = false;
|
|
2192
|
-
note.bufferSource.stop(volRelease);
|
|
2193
|
-
this.disconnectNote(note);
|
|
2194
|
-
channel.scheduledNotes[note.index] = undefined;
|
|
2195
|
-
this.releaseFullCache(note);
|
|
2196
|
-
resolve();
|
|
2197
|
-
}, volRelease);
|
|
2198
|
-
});
|
|
2200
|
+
note.bufferSource.stop(volRelease);
|
|
2199
2201
|
}
|
|
2200
2202
|
else {
|
|
2201
2203
|
const now = this.audioContext.currentTime;
|
|
@@ -2205,15 +2207,16 @@ export class MidyGMLite extends EventTarget {
|
|
|
2205
2207
|
this.releaseFullCache(note);
|
|
2206
2208
|
return Promise.resolve();
|
|
2207
2209
|
}
|
|
2208
|
-
|
|
2209
|
-
this.scheduleTask(() => {
|
|
2210
|
-
this.disconnectNote(note);
|
|
2211
|
-
channel.scheduledNotes[note.index] = undefined;
|
|
2212
|
-
this.releaseFullCache(note);
|
|
2213
|
-
resolve();
|
|
2214
|
-
}, naturalEndTime);
|
|
2215
|
-
});
|
|
2210
|
+
note.bufferSource.stop(naturalEndTime);
|
|
2216
2211
|
}
|
|
2212
|
+
return new Promise((resolve) => {
|
|
2213
|
+
note.bufferSource.onended = () => {
|
|
2214
|
+
this.disconnectNote(note);
|
|
2215
|
+
channel.scheduledNotes[note.index] = undefined;
|
|
2216
|
+
this.releaseFullCache(note);
|
|
2217
|
+
resolve();
|
|
2218
|
+
};
|
|
2219
|
+
});
|
|
2217
2220
|
}
|
|
2218
2221
|
const volDuration = note.voiceParams.volRelease;
|
|
2219
2222
|
const volRelease = endTime + volDuration;
|
|
@@ -2234,45 +2237,33 @@ export class MidyGMLite extends EventTarget {
|
|
|
2234
2237
|
const noteOffTime = note.startTime + (rb.noteDuration ?? 0);
|
|
2235
2238
|
const isEarlyCut = endTime < noteOffTime;
|
|
2236
2239
|
if (isEarlyCut) {
|
|
2237
|
-
const volRelease = endTime + volDuration;
|
|
2238
2240
|
note.volumeNode.gain
|
|
2239
2241
|
.cancelScheduledValues(endTime)
|
|
2240
|
-
.setValueAtTime(1, endTime)
|
|
2241
2242
|
.setTargetAtTime(0, endTime, volDuration * releaseCurve);
|
|
2242
|
-
|
|
2243
|
-
this.scheduleTask(() => {
|
|
2244
|
-
note.bufferSource.stop(volRelease);
|
|
2245
|
-
this.disconnectNote(note);
|
|
2246
|
-
channel.scheduledNotes[note.index] = undefined;
|
|
2247
|
-
resolve();
|
|
2248
|
-
}, volRelease);
|
|
2249
|
-
});
|
|
2243
|
+
note.bufferSource.stop(volRelease);
|
|
2250
2244
|
}
|
|
2251
2245
|
else {
|
|
2252
|
-
|
|
2253
|
-
this.scheduleTask(() => {
|
|
2254
|
-
note.bufferSource.stop();
|
|
2255
|
-
this.disconnectNote(note);
|
|
2256
|
-
channel.scheduledNotes[note.index] = undefined;
|
|
2257
|
-
resolve();
|
|
2258
|
-
}, naturalEndTime);
|
|
2259
|
-
});
|
|
2246
|
+
note.bufferSource.stop(naturalEndTime);
|
|
2260
2247
|
}
|
|
2248
|
+
return new Promise((resolve) => {
|
|
2249
|
+
note.bufferSource.onended = () => {
|
|
2250
|
+
this.disconnectNote(note);
|
|
2251
|
+
channel.scheduledNotes[note.index] = undefined;
|
|
2252
|
+
resolve();
|
|
2253
|
+
};
|
|
2254
|
+
});
|
|
2261
2255
|
}
|
|
2262
2256
|
note.volumeNode.gain
|
|
2263
2257
|
.cancelScheduledValues(endTime)
|
|
2264
|
-
.setValueAtTime(1, endTime)
|
|
2265
2258
|
.setTargetAtTime(0, endTime, volDuration * releaseCurve);
|
|
2266
2259
|
}
|
|
2260
|
+
note.bufferSource.stop(volRelease);
|
|
2267
2261
|
return new Promise((resolve) => {
|
|
2268
|
-
|
|
2269
|
-
const bufferSource = note.bufferSource;
|
|
2270
|
-
bufferSource.loop = false;
|
|
2271
|
-
bufferSource.stop(volRelease);
|
|
2262
|
+
note.bufferSource.onended = () => {
|
|
2272
2263
|
this.disconnectNote(note);
|
|
2273
2264
|
channel.scheduledNotes[note.index] = undefined;
|
|
2274
2265
|
resolve();
|
|
2275
|
-
}
|
|
2266
|
+
};
|
|
2276
2267
|
});
|
|
2277
2268
|
}
|
|
2278
2269
|
noteOff(channelNumber, noteNumber, _velocity, endTime, force) {
|
|
@@ -2787,9 +2778,10 @@ export class MidyGMLite extends EventTarget {
|
|
|
2787
2778
|
setMasterVolume(value, scheduleTime) {
|
|
2788
2779
|
if (!(0 <= scheduleTime))
|
|
2789
2780
|
scheduleTime = this.audioContext.currentTime;
|
|
2781
|
+
const timeConstant = this.perceptualSmoothingTime / 5; // 99.3% (5 * tau)
|
|
2790
2782
|
this.masterVolume.gain
|
|
2791
|
-
.
|
|
2792
|
-
.
|
|
2783
|
+
.cancelAndHoldAtTime(scheduleTime)
|
|
2784
|
+
.setTargetAtTime(value * value, scheduleTime, timeConstant);
|
|
2793
2785
|
}
|
|
2794
2786
|
handleSysEx(data, scheduleTime) {
|
|
2795
2787
|
switch (data[0]) {
|
package/esm/midy.d.ts
CHANGED
|
@@ -105,7 +105,7 @@ export class Midy extends EventTarget {
|
|
|
105
105
|
reverbEffect: {
|
|
106
106
|
input: any;
|
|
107
107
|
output: any;
|
|
108
|
-
}
|
|
108
|
+
};
|
|
109
109
|
chorusEffect: {
|
|
110
110
|
input: any;
|
|
111
111
|
output: any;
|
|
@@ -127,7 +127,7 @@ export class Midy extends EventTarget {
|
|
|
127
127
|
gainR: any;
|
|
128
128
|
merger: any;
|
|
129
129
|
};
|
|
130
|
-
createChannels(
|
|
130
|
+
createChannels(): Channel[];
|
|
131
131
|
decodeOggVorbis(sample: any): Promise<any>;
|
|
132
132
|
createAudioBuffer(voiceParams: any): Promise<any>;
|
|
133
133
|
isLoopDrum(channel: any, noteNumber: any): boolean;
|
|
@@ -160,24 +160,13 @@ export class Midy extends EventTarget {
|
|
|
160
160
|
processScheduledNotes(channel: any, callback: any): Promise<void>;
|
|
161
161
|
processActiveNotes(channel: any, scheduleTime: any, callback: any): Promise<void>;
|
|
162
162
|
applyToMPEChannels(channelNumber: any, fn: any): void;
|
|
163
|
-
createConvolutionReverbImpulse(audioContext: any, decay: any, preDecay: any): any;
|
|
164
|
-
createConvolutionReverb(audioContext: any, impulse: any): {
|
|
165
|
-
input: any;
|
|
166
|
-
output: any;
|
|
167
|
-
convolverNode: any;
|
|
168
|
-
};
|
|
169
|
-
createCombFilter(audioContext: any, input: any, delay: any, feedback: any): any;
|
|
170
|
-
createAllpassFilter(audioContext: any, input: any, delay: any, feedback: any): any;
|
|
171
163
|
generateDistributedArray(center: any, count: any, varianceRatio?: number, randomness?: number): any[];
|
|
172
|
-
|
|
164
|
+
setReverbEffect(algorithm: any): void;
|
|
165
|
+
createReverbEffect(algorithm: any): {
|
|
173
166
|
input: any;
|
|
174
167
|
output: any;
|
|
175
168
|
};
|
|
176
|
-
|
|
177
|
-
input: any;
|
|
178
|
-
output: any;
|
|
179
|
-
} | undefined;
|
|
180
|
-
createChorusEffect(audioContext: any): {
|
|
169
|
+
createChorusEffect(): {
|
|
181
170
|
input: any;
|
|
182
171
|
output: any;
|
|
183
172
|
sendGain: any;
|
|
@@ -213,7 +202,7 @@ export class Midy extends EventTarget {
|
|
|
213
202
|
getAudioBuffer(channel: any, note: any, realtime: any): Promise<any>;
|
|
214
203
|
getAdsCachedBuffer(channel: any, note: any, audioBufferId: any, realtime: any): Promise<any>;
|
|
215
204
|
getAdsrCachedBuffer(channel: any, note: any, audioBufferId: any): Promise<any>;
|
|
216
|
-
getFullCachedBuffer(note: any, audioBufferId: any): Promise<any>;
|
|
205
|
+
getFullCachedBuffer(channel: any, note: any, audioBufferId: any): Promise<any>;
|
|
217
206
|
setNoteAudioNode(channel: any, note: any, realtime: any): Promise<any>;
|
|
218
207
|
handleExclusiveClass(note: any, channelNumber: any, startTime: any): void;
|
|
219
208
|
handleDrumExclusiveClass(note: any, channelNumber: any, startTime: any): void;
|
|
@@ -394,7 +383,8 @@ export class Midy extends EventTarget {
|
|
|
394
383
|
scheduleTask(callback: any, scheduleTime: any): Promise<any>;
|
|
395
384
|
}
|
|
396
385
|
declare class Channel {
|
|
397
|
-
constructor(audioNodes: any, settings: any);
|
|
386
|
+
constructor(channelNumber: any, audioNodes: any, settings: any);
|
|
387
|
+
channelNumber: number;
|
|
398
388
|
isDrum: boolean;
|
|
399
389
|
programNumber: number;
|
|
400
390
|
scheduleIndex: number;
|
package/esm/midy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"midy.d.ts","sourceRoot":"","sources":["../src/midy.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"midy.d.ts","sourceRoot":"","sources":["../src/midy.js"],"names":[],"mappings":"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"}
|