@marmooo/midy 0.2.4 → 0.2.5

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/esm/midy-GM1.d.ts CHANGED
@@ -22,6 +22,8 @@ export class MidyGM1 {
22
22
  resumeTime: number;
23
23
  soundFonts: any[];
24
24
  soundFontTable: any[];
25
+ audioBufferCounter: Map<any, any>;
26
+ audioBufferCache: Map<any, any>;
25
27
  isPlaying: boolean;
26
28
  isPausing: boolean;
27
29
  isPaused: boolean;
@@ -30,7 +32,7 @@ export class MidyGM1 {
30
32
  timeline: any[];
31
33
  instruments: any[];
32
34
  notePromises: any[];
33
- exclusiveClassMap: Map<any, any>;
35
+ exclusiveClassMap: SparseMap;
34
36
  audioContext: any;
35
37
  masterVolume: any;
36
38
  voiceParamsHandlers: {
@@ -71,12 +73,13 @@ export class MidyGM1 {
71
73
  };
72
74
  createChannels(audioContext: any): any[];
73
75
  createNoteBuffer(voiceParams: any, isSF3: any): Promise<any>;
74
- createNoteBufferNode(voiceParams: any, isSF3: any): Promise<any>;
76
+ createNoteBufferNode(audioBuffer: any, voiceParams: any): any;
75
77
  scheduleTimelineEvents(t: any, offset: any, queueIndex: any): Promise<any>;
76
78
  getQueueIndex(second: any): number;
77
79
  playNotes(): Promise<any>;
78
80
  ticksToSecond(ticks: any, secondsPerBeat: any): number;
79
81
  secondToTicks(second: any, secondsPerBeat: any): number;
82
+ getAudioBufferId(programNumber: any, noteNumber: any, velocity: any): string;
80
83
  extractMidiData(midi: any): {
81
84
  instruments: Set<any>;
82
85
  timeline: any[];
@@ -90,7 +93,7 @@ export class MidyGM1 {
90
93
  seekTo(second: any): void;
91
94
  calcTotalTime(): number;
92
95
  currentTime(): number;
93
- getActiveNotes(channel: any, time: any): Map<any, any>;
96
+ getActiveNotes(channel: any, time: any): SparseMap;
94
97
  getActiveNote(noteList: any, time: any): any;
95
98
  cbToRatio(cb: any): number;
96
99
  rateToCent(rate: any): number;
@@ -104,6 +107,7 @@ export class MidyGM1 {
104
107
  clampCutoffFrequency(frequency: any): number;
105
108
  setFilterEnvelope(note: any): void;
106
109
  startModulation(channel: any, note: any, startTime: any): void;
110
+ getAudioBuffer(program: any, noteNumber: any, velocity: any, voiceParams: any, isSF3: any): Promise<any>;
107
111
  createNote(channel: any, voice: any, noteNumber: any, velocity: any, startTime: any, isSF3: any): Promise<Note>;
108
112
  scheduleNoteOn(channelNumber: any, noteNumber: any, velocity: any, startTime: any): Promise<void>;
109
113
  noteOn(channelNumber: any, noteNumber: any, velocity: any): Promise<void>;
@@ -186,6 +190,19 @@ export class MidyGM1 {
186
190
  handleSysEx(data: any): void;
187
191
  scheduleTask(callback: any, startTime: any): Promise<any>;
188
192
  }
193
+ declare class SparseMap {
194
+ constructor(size: any);
195
+ data: any[];
196
+ activeIndices: any[];
197
+ set(key: any, value: any): void;
198
+ get(key: any): any;
199
+ delete(key: any): boolean;
200
+ has(key: any): boolean;
201
+ get size(): number;
202
+ clear(): void;
203
+ forEach(callback: any): void;
204
+ [Symbol.iterator](): Generator<any[], void, unknown>;
205
+ }
189
206
  declare class Note {
190
207
  constructor(noteNumber: any, velocity: any, startTime: any, voice: any, voiceParams: any);
191
208
  bufferSource: any;
@@ -1 +1 @@
1
- {"version":3,"file":"midy-GM1.d.ts","sourceRoot":"","sources":["../src/midy-GM1.js"],"names":[],"mappings":"AAqFA;IAoBE;;;;;;;;;;;;MAYE;IAEF,+BAQC;IAzCD,qBAAmB;IACnB,kBAAc;IACd,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;IAClB,iCAA8B;IAiB5B,kBAAgC;IAChC,kBAA8C;IAC9C;;;;;;;;;;;MAA2D;IAC3D;;;;;;;;;;;;;MAA+D;IAC/D,gBAAiD;IAKnD,4BAMC;IAED,mCAWC;IAED,gDAMC;IAED,sCASC;IAED;;;;MAeC;IAED,yCAUC;IAED,6DA2BC;IAED,iEAUC;IAED,2EA+CC;IAED,mCAOC;IAED,0BAkDC;IAED,uDAEC;IAED,wDAEC;IAED;;;MAgEC;IAED,+EAmBC;IAED,qDAKC;IAED,uBAKC;IAED,aAGC;IAED,cAKC;IAED,wBAIC;IAED,0BAKC;IAED,wBAOC;IAED,sBAGC;IAED,uDASC;IAED,6CAQC;IAED,2BAEC;IAED,8BAEC;IAED,8BAEC;IAED,4BAEC;IAED,qCAMC;IAED,wCAQC;IAED,4CAKC;IAED,mCAgBC;IAED,kCAqBC;IAED,6CAIC;IAED,mCAuBC;IAED,+DAoBC;IAED,gHA2BC;IAED,kGAgDC;IAED,0EAGC;IAED,qFA4BC;IAED,6HAuBC;IAED,0FAGC;IAED,kEAeC;IAED,gFAiBC;IAED,4DAGC;IAED,qEAGC;IAED,mDASC;IAED,gDASC;IAED,gDASC;IAED,qCAMC;IAED,mCAQC;IAED,gCAOC;IAED,+BAMC;IAED;;;;;;;;;;;MA4CC;IAED,oFAMC;IAED,0DA6CC;IAED;;;;;;;;;;;;;MAeC;IAED,+EAWC;IAED,qCAeC;IAED,8DAIC;IACD,iDAIC;IAED;;;MAMC;IAED,2CAIC;IAED,yDAIC;IAED,mDAGC;IAED,wCAWC;IAED,sDAKC;IAED,kFAeC;IAED,2DAMC;IAED,oCAkBC;IAED,gDAEC;IAED,gDAEC;IAED,mDAGC;IAED,kDAKC;IAED,wDASC;IAED,8CAKC;IAED,oDAOC;IAED,gDAKC;IAED,sDAOC;IAED,+CAEC;IAED,8CAqBC;IAED,+CAEC;IAED,4DAgBC;IAED,oBAMC;IAED,yDAaC;IAED,yCAGC;IAED,mCAQC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AArzCD;IAUE,0FAMC;IAfD,kBAAa;IACb,gBAAW;IACX,wBAAmB;IACnB,iBAAY;IACZ,mBAAc;IACd,qBAAgB;IAChB,gBAAW;IACX,kBAAa;IAGX,gBAA4B;IAC5B,cAAwB;IACxB,eAA0B;IAC1B,WAAkB;IAClB,iBAA8B;CAEjC"}
1
+ {"version":3,"file":"midy-GM1.d.ts","sourceRoot":"","sources":["../src/midy-GM1.js"],"names":[],"mappings":"AAkJA;IAsBE;;;;;;;;;;;;MAYE;IAEF,+BAQC;IA3CD,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,6BAAuC;IAiBrC,kBAAgC;IAChC,kBAA8C;IAC9C;;;;;;;;;;;MAA2D;IAC3D;;;;;;;;;;;;;MAA+D;IAC/D,gBAAiD;IAKnD,4BAMC;IAED,mCAWC;IAED,gDAMC;IAED,sCASC;IAED;;;;MAeC;IAED,yCAUC;IAED,6DA2BC;IAED,8DASC;IAED,2EA+CC;IAED,mCAOC;IAED,0BAoDC;IAED,uDAEC;IAED,wDAEC;IAED,6EAEC;IAED;;;MA4EC;IAED,+EAmBC;IAED,qDAKC;IAED,uBAKC;IAED,aAGC;IAED,cAKC;IAED,wBAIC;IAED,0BAKC;IAED,wBAOC;IAED,sBAGC;IAED,mDASC;IAED,6CAQC;IAED,2BAEC;IAED,8BAEC;IAED,8BAEC;IAED,4BAEC;IAED,qCAMC;IAED,wCAQC;IAED,4CAKC;IAED,mCAgBC;IAED,kCAqBC;IAED,6CAIC;IAED,mCAuBC;IAED,+DAoBC;IAED,yGAgBC;IAED,gHAuCC;IAED,kGAgDC;IAED,0EAGC;IAED,qFA4BC;IAED,6HAuBC;IAED,0FAGC;IAED,kEAeC;IAED,gFAiBC;IAED,4DAGC;IAED,qEAGC;IAED,mDASC;IAED,gDASC;IAED,gDASC;IAED,qCAMC;IAED,mCAQC;IAED,gCAOC;IAED,+BAMC;IAED;;;;;;;;;;;MA4CC;IAED,oFAMC;IAED,0DA6CC;IAED;;;;;;;;;;;;;MAeC;IAED,+EAWC;IAED,qCAeC;IAED,8DAIC;IACD,iDAIC;IAED;;;MAMC;IAED,2CAIC;IAED,yDAIC;IAED,mDAGC;IAED,wCAWC;IAED,sDAKC;IAED,kFAeC;IAED,2DAMC;IAED,oCAkBC;IAED,gDAEC;IAED,gDAEC;IAED,mDAGC;IAED,kDAKC;IAED,wDASC;IAED,8CAKC;IAED,oDAOC;IAED,gDAKC;IAED,sDAOC;IAED,+CAEC;IAED,8CAqBC;IAED,+CAEC;IAED,4DAgBC;IAED,oBAMC;IAED,yDAaC;IAED,yCAGC;IAED,mCAQC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AAl6CD;IACE,uBAGC;IAFC,YAA2B;IAC3B,qBAAuB;IAGzB,gCAKC;IAED,mBAEC;IAED,0BAUC;IAED,uBAEC;IAED,mBAEC;IAED,cAMC;IASD,6BAKC;IAZD,qDAKC;CAQF;AAED;IAUE,0FAMC;IAfD,kBAAa;IACb,gBAAW;IACX,wBAAmB;IACnB,iBAAY;IACZ,mBAAc;IACd,qBAAgB;IAChB,gBAAW;IACX,kBAAa;IAGX,gBAA4B;IAC5B,cAAwB;IACxB,eAA0B;IAC1B,WAAkB;IAClB,iBAA8B;CAEjC"}
package/esm/midy-GM1.js CHANGED
@@ -1,5 +1,57 @@
1
1
  import { parseMidi } from "midi-file";
2
2
  import { parse, SoundFont } from "@marmooo/soundfont-parser";
3
+ // 2-3 times faster than Map
4
+ class SparseMap {
5
+ constructor(size) {
6
+ this.data = new Array(size);
7
+ this.activeIndices = [];
8
+ }
9
+ set(key, value) {
10
+ if (this.data[key] === undefined) {
11
+ this.activeIndices.push(key);
12
+ }
13
+ this.data[key] = value;
14
+ }
15
+ get(key) {
16
+ return this.data[key];
17
+ }
18
+ delete(key) {
19
+ if (this.data[key] !== undefined) {
20
+ this.data[key] = undefined;
21
+ const index = this.activeIndices.indexOf(key);
22
+ if (index !== -1) {
23
+ this.activeIndices.splice(index, 1);
24
+ }
25
+ return true;
26
+ }
27
+ return false;
28
+ }
29
+ has(key) {
30
+ return this.data[key] !== undefined;
31
+ }
32
+ get size() {
33
+ return this.activeIndices.length;
34
+ }
35
+ clear() {
36
+ for (let i = 0; i < this.activeIndices.length; i++) {
37
+ const key = this.activeIndices[i];
38
+ this.data[key] = undefined;
39
+ }
40
+ this.activeIndices = [];
41
+ }
42
+ *[Symbol.iterator]() {
43
+ for (let i = 0; i < this.activeIndices.length; i++) {
44
+ const key = this.activeIndices[i];
45
+ yield [key, this.data[key]];
46
+ }
47
+ }
48
+ forEach(callback) {
49
+ for (let i = 0; i < this.activeIndices.length; i++) {
50
+ const key = this.activeIndices[i];
51
+ callback(this.data[key], key, this);
52
+ }
53
+ }
54
+ }
3
55
  class Note {
4
56
  constructor(noteNumber, velocity, startTime, voice, voiceParams) {
5
57
  Object.defineProperty(this, "bufferSource", {
@@ -178,6 +230,18 @@ export class MidyGM1 {
178
230
  writable: true,
179
231
  value: this.initSoundFontTable()
180
232
  });
233
+ Object.defineProperty(this, "audioBufferCounter", {
234
+ enumerable: true,
235
+ configurable: true,
236
+ writable: true,
237
+ value: new Map()
238
+ });
239
+ Object.defineProperty(this, "audioBufferCache", {
240
+ enumerable: true,
241
+ configurable: true,
242
+ writable: true,
243
+ value: new Map()
244
+ });
181
245
  Object.defineProperty(this, "isPlaying", {
182
246
  enumerable: true,
183
247
  configurable: true,
@@ -230,7 +294,7 @@ export class MidyGM1 {
230
294
  enumerable: true,
231
295
  configurable: true,
232
296
  writable: true,
233
- value: new Map()
297
+ value: new SparseMap(128)
234
298
  });
235
299
  this.audioContext = audioContext;
236
300
  this.masterVolume = new GainNode(audioContext);
@@ -243,7 +307,7 @@ export class MidyGM1 {
243
307
  initSoundFontTable() {
244
308
  const table = new Array(128);
245
309
  for (let i = 0; i < 128; i++) {
246
- table[i] = new Map();
310
+ table[i] = new SparseMap(128);
247
311
  }
248
312
  return table;
249
313
  }
@@ -296,7 +360,7 @@ export class MidyGM1 {
296
360
  ...this.constructor.channelSettings,
297
361
  state: new ControllerState(),
298
362
  ...this.setChannelAudioNodes(audioContext),
299
- scheduledNotes: new Map(),
363
+ scheduledNotes: new SparseMap(128),
300
364
  };
301
365
  });
302
366
  return channels;
@@ -330,9 +394,8 @@ export class MidyGM1 {
330
394
  return audioBuffer;
331
395
  }
332
396
  }
333
- async createNoteBufferNode(voiceParams, isSF3) {
397
+ createNoteBufferNode(audioBuffer, voiceParams) {
334
398
  const bufferSource = new AudioBufferSourceNode(this.audioContext);
335
- const audioBuffer = await this.createNoteBuffer(voiceParams, isSF3);
336
399
  bufferSource.buffer = audioBuffer;
337
400
  bufferSource.loop = voiceParams.sampleModes % 2 !== 0;
338
401
  if (bufferSource.loop) {
@@ -397,6 +460,7 @@ export class MidyGM1 {
397
460
  await Promise.all(this.notePromises);
398
461
  this.notePromises = [];
399
462
  this.exclusiveClassMap.clear();
463
+ this.audioBufferCache.clear();
400
464
  resolve();
401
465
  return;
402
466
  }
@@ -412,8 +476,9 @@ export class MidyGM1 {
412
476
  }
413
477
  else if (this.isStopping) {
414
478
  await this.stopNotes(0, true);
415
- this.exclusiveClassMap.clear();
416
479
  this.notePromises = [];
480
+ this.exclusiveClassMap.clear();
481
+ this.audioBufferCache.clear();
417
482
  resolve();
418
483
  this.isStopping = false;
419
484
  this.isPaused = false;
@@ -444,6 +509,9 @@ export class MidyGM1 {
444
509
  secondToTicks(second, secondsPerBeat) {
445
510
  return second * this.ticksPerBeat / secondsPerBeat;
446
511
  }
512
+ getAudioBufferId(programNumber, noteNumber, velocity) {
513
+ return `${programNumber}:${noteNumber}:${velocity}`;
514
+ }
447
515
  extractMidiData(midi) {
448
516
  const instruments = new Set();
449
517
  const timeline = [];
@@ -464,6 +532,8 @@ export class MidyGM1 {
464
532
  switch (event.type) {
465
533
  case "noteOn": {
466
534
  const channel = tmpChannels[event.channel];
535
+ const audioBufferId = this.getAudioBufferId(channel.programNumber, event.noteNumber, event.velocity);
536
+ this.audioBufferCounter.set(audioBufferId, (this.audioBufferCounter.get(audioBufferId) ?? 0) + 1);
467
537
  if (channel.programNumber < 0) {
468
538
  instruments.add(`${channel.bank}:0`);
469
539
  channel.programNumber = 0;
@@ -480,6 +550,10 @@ export class MidyGM1 {
480
550
  timeline.push(event);
481
551
  }
482
552
  }
553
+ for (const [audioBufferId, count] of this.audioBufferCounter) {
554
+ if (count === 1)
555
+ this.audioBufferCounter.delete(audioBufferId);
556
+ }
483
557
  const priority = {
484
558
  controller: 0,
485
559
  sysEx: 1,
@@ -570,7 +644,7 @@ export class MidyGM1 {
570
644
  return this.resumeTime + now - this.startTime - this.startDelay;
571
645
  }
572
646
  getActiveNotes(channel, time) {
573
- const activeNotes = new Map();
647
+ const activeNotes = new SparseMap(128);
574
648
  channel.scheduledNotes.forEach((noteList) => {
575
649
  const activeNote = this.getActiveNote(noteList, time);
576
650
  if (activeNote) {
@@ -712,11 +786,31 @@ export class MidyGM1 {
712
786
  note.modulationLFO.connect(note.volumeDepth);
713
787
  note.volumeDepth.connect(note.volumeEnvelopeNode.gain);
714
788
  }
789
+ async getAudioBuffer(program, noteNumber, velocity, voiceParams, isSF3) {
790
+ const audioBufferId = this.getAudioBufferId(program, noteNumber, velocity);
791
+ const cache = this.audioBufferCache.get(audioBufferId);
792
+ if (cache) {
793
+ cache.counter += 1;
794
+ if (cache.maxCount <= cache.counter) {
795
+ this.audioBufferCache.delete(audioBufferId);
796
+ }
797
+ return cache.audioBuffer;
798
+ }
799
+ else {
800
+ const maxCount = this.audioBufferCounter.get(audioBufferId) ?? 0;
801
+ const audioBuffer = await this.createNoteBuffer(voiceParams, isSF3);
802
+ const cache = { audioBuffer, maxCount, counter: 1 };
803
+ this.audioBufferCache.set(audioBufferId, cache);
804
+ return audioBuffer;
805
+ }
806
+ }
715
807
  async createNote(channel, voice, noteNumber, velocity, startTime, isSF3) {
716
808
  const state = channel.state;
717
- const voiceParams = voice.getAllParams(state.array);
809
+ const controllerState = this.getControllerState(channel, noteNumber, velocity);
810
+ const voiceParams = voice.getAllParams(controllerState);
718
811
  const note = new Note(noteNumber, velocity, startTime, voice, voiceParams);
719
- note.bufferSource = await this.createNoteBufferNode(voiceParams, isSF3);
812
+ const audioBuffer = await this.getAudioBuffer(channel.program, noteNumber, velocity, voiceParams, isSF3);
813
+ note.bufferSource = this.createNoteBufferNode(audioBuffer, voiceParams);
720
814
  note.volumeEnvelopeNode = new GainNode(this.audioContext);
721
815
  note.filterNode = new BiquadFilterNode(this.audioContext, {
722
816
  type: "lowpass",
@@ -740,10 +834,10 @@ export class MidyGM1 {
740
834
  if (soundFontIndex === undefined)
741
835
  return;
742
836
  const soundFont = this.soundFonts[soundFontIndex];
743
- const isSF3 = soundFont.parsed.info.version.major === 3;
744
837
  const voice = soundFont.getVoice(bankNumber, channel.program, noteNumber, velocity);
745
838
  if (!voice)
746
839
  return;
840
+ const isSF3 = soundFont.parsed.info.version.major === 3;
747
841
  const note = await this.createNote(channel, voice, noteNumber, velocity, startTime, isSF3);
748
842
  note.volumeEnvelopeNode.connect(channel.gainL);
749
843
  note.volumeEnvelopeNode.connect(channel.gainR);
package/esm/midy-GM2.d.ts CHANGED
@@ -2,7 +2,7 @@ export class MidyGM2 {
2
2
  static channelSettings: {
3
3
  currentBufferSource: null;
4
4
  detune: number;
5
- scaleOctaveTuningTable: any[];
5
+ scaleOctaveTuningTable: Int8Array<ArrayBuffer>;
6
6
  channelPressureTable: Uint8Array<ArrayBuffer>;
7
7
  keyBasedInstrumentControlTable: Int8Array<ArrayBuffer>;
8
8
  program: number;
@@ -47,6 +47,8 @@ export class MidyGM2 {
47
47
  resumeTime: number;
48
48
  soundFonts: any[];
49
49
  soundFontTable: any[];
50
+ audioBufferCounter: Map<any, any>;
51
+ audioBufferCache: Map<any, any>;
50
52
  isPlaying: boolean;
51
53
  isPausing: boolean;
52
54
  isPaused: boolean;
@@ -55,7 +57,7 @@ export class MidyGM2 {
55
57
  timeline: any[];
56
58
  instruments: any[];
57
59
  notePromises: any[];
58
- exclusiveClassMap: Map<any, any>;
60
+ exclusiveClassMap: SparseMap;
59
61
  defaultOptions: {
60
62
  reverbAlgorithm: (audioContext: any) => {
61
63
  input: any;
@@ -133,13 +135,14 @@ export class MidyGM2 {
133
135
  };
134
136
  createChannels(audioContext: any): any[];
135
137
  createNoteBuffer(voiceParams: any, isSF3: any): Promise<any>;
136
- createNoteBufferNode(voiceParams: any, isSF3: any): Promise<any>;
138
+ createNoteBufferNode(audioBuffer: any, voiceParams: any): any;
137
139
  findPortamentoTarget(queueIndex: any): any;
138
140
  scheduleTimelineEvents(t: any, offset: any, queueIndex: any): Promise<any>;
139
141
  getQueueIndex(second: any): number;
140
142
  playNotes(): Promise<any>;
141
143
  ticksToSecond(ticks: any, secondsPerBeat: any): number;
142
144
  secondToTicks(second: any, secondsPerBeat: any): number;
145
+ getAudioBufferId(programNumber: any, noteNumber: any, velocity: any): string;
143
146
  extractMidiData(midi: any): {
144
147
  instruments: Set<any>;
145
148
  timeline: any[];
@@ -153,7 +156,7 @@ export class MidyGM2 {
153
156
  seekTo(second: any): void;
154
157
  calcTotalTime(): number;
155
158
  currentTime(): number;
156
- getActiveNotes(channel: any, time: any): Map<any, any>;
159
+ getActiveNotes(channel: any, time: any): SparseMap;
157
160
  getActiveNote(noteList: any, time: any): any;
158
161
  createConvolutionReverbImpulse(audioContext: any, decay: any, preDecay: any): any;
159
162
  createConvolutionReverb(audioContext: any, impulse: any): {
@@ -194,6 +197,7 @@ export class MidyGM2 {
194
197
  setFilterEnvelope(channel: any, note: any, pressure: any): void;
195
198
  startModulation(channel: any, note: any, startTime: any): void;
196
199
  startVibrato(channel: any, note: any, startTime: any): void;
200
+ getAudioBuffer(program: any, noteNumber: any, velocity: any, voiceParams: any, isSF3: any): Promise<any>;
197
201
  createNote(channel: any, voice: any, noteNumber: any, velocity: any, startTime: any, portamento: any, isSF3: any): Promise<Note>;
198
202
  calcBank(channel: any, channelNumber: any): any;
199
203
  scheduleNoteOn(channelNumber: any, noteNumber: any, velocity: any, startTime: any, portamento: any): Promise<void>;
@@ -330,7 +334,7 @@ export class MidyGM2 {
330
334
  setChorusSendToReverb(value: any): void;
331
335
  getChorusSendToReverb(value: any): number;
332
336
  getChannelBitmap(data: any): any[];
333
- handleScaleOctaveTuning1ByteFormatSysEx(data: any): void;
337
+ handleScaleOctaveTuning1ByteFormatSysEx(data: any, realtime: any): void;
334
338
  applyDestinationSettings(channel: any, note: any, table: any): void;
335
339
  handleChannelPressureSysEx(data: any, tableName: any): void;
336
340
  initControlTable(): Uint8Array<ArrayBuffer>;
@@ -342,6 +346,19 @@ export class MidyGM2 {
342
346
  handleSysEx(data: any): any;
343
347
  scheduleTask(callback: any, startTime: any): Promise<any>;
344
348
  }
349
+ declare class SparseMap {
350
+ constructor(size: any);
351
+ data: any[];
352
+ activeIndices: any[];
353
+ set(key: any, value: any): void;
354
+ get(key: any): any;
355
+ delete(key: any): boolean;
356
+ has(key: any): boolean;
357
+ get size(): number;
358
+ clear(): void;
359
+ forEach(callback: any): void;
360
+ [Symbol.iterator](): Generator<any[], void, unknown>;
361
+ }
345
362
  declare class Note {
346
363
  constructor(noteNumber: any, velocity: any, startTime: any, voice: any, voiceParams: any);
347
364
  bufferSource: any;
@@ -1 +1 @@
1
- {"version":3,"file":"midy-GM2.d.ts","sourceRoot":"","sources":["../src/midy-GM2.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"midy-GM2.d.ts","sourceRoot":"","sources":["../src/midy-GM2.js"],"names":[],"mappings":"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"}