@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.
@@ -8,6 +8,12 @@ class Note {
8
8
  writable: true,
9
9
  value: -1
10
10
  });
11
+ Object.defineProperty(this, "ending", {
12
+ enumerable: true,
13
+ configurable: true,
14
+ writable: true,
15
+ value: false
16
+ });
11
17
  Object.defineProperty(this, "bufferSource", {
12
18
  enumerable: true,
13
19
  configurable: true,
@@ -308,17 +314,37 @@ export class MidyGMLite {
308
314
  }
309
315
  }
310
316
  }
311
- async loadSoundFont(soundFontUrl) {
312
- const response = await fetch(soundFontUrl);
313
- const arrayBuffer = await response.arrayBuffer();
314
- const parsed = parse(new Uint8Array(arrayBuffer));
317
+ async loadSoundFont(input) {
318
+ let uint8Array;
319
+ if (typeof input === "string") {
320
+ const response = await fetch(input);
321
+ const arrayBuffer = await response.arrayBuffer();
322
+ uint8Array = new Uint8Array(arrayBuffer);
323
+ }
324
+ else if (input instanceof Uint8Array) {
325
+ uint8Array = input;
326
+ }
327
+ else {
328
+ throw new TypeError("input must be a URL string or Uint8Array");
329
+ }
330
+ const parsed = parse(uint8Array);
315
331
  const soundFont = new SoundFont(parsed);
316
332
  this.addSoundFont(soundFont);
317
333
  }
318
- async loadMIDI(midiUrl) {
319
- const response = await fetch(midiUrl);
320
- const arrayBuffer = await response.arrayBuffer();
321
- const midi = parseMidi(new Uint8Array(arrayBuffer));
334
+ async loadMIDI(input) {
335
+ let uint8Array;
336
+ if (typeof input === "string") {
337
+ const response = await fetch(input);
338
+ const arrayBuffer = await response.arrayBuffer();
339
+ uint8Array = new Uint8Array(arrayBuffer);
340
+ }
341
+ else if (input instanceof Uint8Array) {
342
+ uint8Array = input;
343
+ }
344
+ else {
345
+ throw new TypeError("input must be a URL string or Uint8Array");
346
+ }
347
+ const midi = parseMidi(uint8Array);
322
348
  this.ticksPerBeat = midi.header.ticksPerBeat;
323
349
  const midiData = this.extractMidiData(midi);
324
350
  this.instruments = midiData.instruments;
@@ -382,10 +408,12 @@ export class MidyGMLite {
382
408
  return audioBuffer;
383
409
  }
384
410
  }
385
- createBufferSource(voiceParams, audioBuffer) {
411
+ createBufferSource(channel, voiceParams, audioBuffer) {
386
412
  const bufferSource = new AudioBufferSourceNode(this.audioContext);
387
413
  bufferSource.buffer = audioBuffer;
388
414
  bufferSource.loop = voiceParams.sampleModes % 2 !== 0;
415
+ if (channel.isDrum)
416
+ bufferSource.loop = false;
389
417
  if (bufferSource.loop) {
390
418
  bufferSource.loopStart = voiceParams.loopStart / voiceParams.sampleRate;
391
419
  bufferSource.loopEnd = voiceParams.loopEnd / voiceParams.sampleRate;
@@ -400,12 +428,13 @@ export class MidyGMLite {
400
428
  const delay = this.startDelay - resumeTime;
401
429
  const startTime = event.startTime + delay;
402
430
  switch (event.type) {
403
- case "noteOn": {
404
- const noteOffEvent = {
405
- ...event.noteOffEvent,
406
- startTime: event.noteOffEvent.startTime + delay,
407
- };
408
- await this.scheduleNoteOn(event.channel, event.noteNumber, event.velocity, startTime, noteOffEvent);
431
+ case "noteOn":
432
+ await this.scheduleNoteOn(event.channel, event.noteNumber, event.velocity, startTime);
433
+ break;
434
+ case "noteOff": {
435
+ const notePromise = this.scheduleNoteOff(event.channel, event.noteNumber, event.velocity, startTime, false);
436
+ if (notePromise)
437
+ this.notePromises.push(notePromise);
409
438
  break;
410
439
  }
411
440
  case "controller":
@@ -507,6 +536,7 @@ export class MidyGMLite {
507
536
  return `${programNumber}:${noteNumber}:${velocity}`;
508
537
  }
509
538
  extractMidiData(midi) {
539
+ this.audioBufferCounter.clear();
510
540
  const instruments = new Set();
511
541
  const timeline = [];
512
542
  const tmpChannels = new Array(this.channels.length);
@@ -570,38 +600,13 @@ export class MidyGMLite {
570
600
  prevTempoTicks = event.ticks;
571
601
  }
572
602
  }
573
- const activeNotes = new Array(this.channels.length * 128);
574
- for (let i = 0; i < activeNotes.length; i++) {
575
- activeNotes[i] = [];
576
- }
577
- for (let i = 0; i < timeline.length; i++) {
578
- const event = timeline[i];
579
- switch (event.type) {
580
- case "noteOn": {
581
- const index = event.channel * 128 + event.noteNumber;
582
- activeNotes[index].push(event);
583
- break;
584
- }
585
- case "noteOff": {
586
- const index = event.channel * 128 + event.noteNumber;
587
- const noteOn = activeNotes[index].pop();
588
- if (noteOn) {
589
- noteOn.noteOffEvent = event;
590
- }
591
- else {
592
- const eventString = JSON.stringify(event, null, 2);
593
- console.warn(`noteOff without matching noteOn: ${eventString}`);
594
- }
595
- }
596
- }
597
- }
598
603
  return { instruments, timeline };
599
604
  }
600
605
  stopActiveNotes(channelNumber, velocity, force, scheduleTime) {
601
606
  const channel = this.channels[channelNumber];
602
607
  const promises = [];
603
608
  this.processActiveNotes(channel, scheduleTime, (note) => {
604
- const promise = this.scheduleNoteOff(channelNumber, note.noteNumber, velocity, scheduleTime, force, undefined);
609
+ const promise = this.scheduleNoteOff(channelNumber, note.noteNumber, velocity, scheduleTime, force);
605
610
  this.notePromises.push(promise);
606
611
  promises.push(promise);
607
612
  });
@@ -611,7 +616,7 @@ export class MidyGMLite {
611
616
  const channel = this.channels[channelNumber];
612
617
  const promises = [];
613
618
  this.processScheduledNotes(channel, (note) => {
614
- const promise = this.scheduleNoteOff(channelNumber, note, velocity, scheduleTime, force);
619
+ const promise = this.scheduleNoteOff(channelNumber, note.noteNumber, velocity, scheduleTime, force);
615
620
  this.notePromises.push(promise);
616
621
  promises.push(promise);
617
622
  });
@@ -688,9 +693,6 @@ export class MidyGMLite {
688
693
  continue;
689
694
  if (note.ending)
690
695
  continue;
691
- const noteOffEvent = note.noteOffEvent;
692
- if (noteOffEvent && noteOffEvent.startTime < scheduleTime)
693
- continue;
694
696
  if (scheduleTime < note.startTime)
695
697
  continue;
696
698
  callback(note);
@@ -832,7 +834,7 @@ export class MidyGMLite {
832
834
  const voiceParams = voice.getAllParams(controllerState);
833
835
  const note = new Note(noteNumber, velocity, startTime, voice, voiceParams);
834
836
  const audioBuffer = await this.getAudioBuffer(channel.programNumber, noteNumber, velocity, voiceParams, isSF3);
835
- note.bufferSource = this.createBufferSource(voiceParams, audioBuffer);
837
+ note.bufferSource = this.createBufferSource(channel, voiceParams, audioBuffer);
836
838
  note.volumeEnvelopeNode = new GainNode(this.audioContext);
837
839
  note.filterNode = new BiquadFilterNode(this.audioContext, {
838
840
  type: "lowpass",
@@ -858,7 +860,7 @@ export class MidyGMLite {
858
860
  if (prev) {
859
861
  const [prevNote, prevChannelNumber] = prev;
860
862
  if (prevNote && !prevNote.ending) {
861
- this.scheduleNoteOff(prevChannelNumber, prevNote, 0, // velocity,
863
+ this.scheduleNoteOff(prevChannelNumber, prevNote.noteNumber, 0, // velocity,
862
864
  startTime, true);
863
865
  }
864
866
  }
@@ -874,7 +876,7 @@ export class MidyGMLite {
874
876
  const index = drumExclusiveClass * this.channels.length + channelNumber;
875
877
  const prevNote = this.drumExclusiveClassNotes[index];
876
878
  if (prevNote && !prevNote.ending) {
877
- this.scheduleNoteOff(channelNumber, prevNote, 0, // velocity,
879
+ this.scheduleNoteOff(channelNumber, prevNote.noteNumber, 0, // velocity,
878
880
  startTime, true);
879
881
  }
880
882
  this.drumExclusiveClassNotes[index] = note;
@@ -902,24 +904,6 @@ export class MidyGMLite {
902
904
  const scheduledNotes = channel.scheduledNotes;
903
905
  note.index = scheduledNotes.length;
904
906
  scheduledNotes.push(note);
905
- if (channel.isDrum) {
906
- const stopTime = startTime + note.bufferSource.buffer.duration;
907
- const promise = new Promise((resolve) => {
908
- note.bufferSource.onended = () => {
909
- scheduledNotes[note.index] = undefined;
910
- this.disconnectNote(note);
911
- resolve();
912
- };
913
- note.bufferSource.stop(stopTime);
914
- });
915
- this.notePromises.push(promise);
916
- }
917
- else if (noteOffEvent) {
918
- const notePromise = this.scheduleNoteOff(channelNumber, note, noteOffEvent.velocity, noteOffEvent.startTime, false);
919
- if (notePromise) {
920
- this.notePromises.push(notePromise);
921
- }
922
- }
923
907
  }
924
908
  noteOn(channelNumber, noteNumber, velocity, scheduleTime) {
925
909
  scheduleTime ??= this.audioContext.currentTime;
@@ -935,36 +919,40 @@ export class MidyGMLite {
935
919
  note.modulationLFO.stop();
936
920
  }
937
921
  }
938
- stopNote(channel, note, endTime, stopTime) {
922
+ releaseNote(channel, note, endTime) {
923
+ const volRelease = endTime + note.voiceParams.volRelease;
924
+ const modRelease = endTime + note.voiceParams.modRelease;
925
+ const stopTime = Math.min(volRelease, modRelease);
926
+ note.filterNode.frequency
927
+ .cancelScheduledValues(endTime)
928
+ .linearRampToValueAtTime(0, modRelease);
939
929
  note.volumeEnvelopeNode.gain
940
930
  .cancelScheduledValues(endTime)
941
- .linearRampToValueAtTime(0, stopTime);
942
- note.ending = true;
943
- this.scheduleTask(() => {
944
- note.bufferSource.loop = false;
945
- }, stopTime);
931
+ .linearRampToValueAtTime(0, volRelease);
946
932
  return new Promise((resolve) => {
947
- note.bufferSource.onended = () => {
948
- channel.scheduledNotes[note.index] = undefined;
933
+ this.scheduleTask(() => {
934
+ const bufferSource = note.bufferSource;
935
+ bufferSource.loop = false;
936
+ bufferSource.stop(stopTime);
949
937
  this.disconnectNote(note);
938
+ channel.scheduledNotes[note.index] = undefined;
950
939
  resolve();
951
- };
952
- note.bufferSource.stop(stopTime);
940
+ }, stopTime);
953
941
  });
954
942
  }
955
- scheduleNoteOff(channelNumber, note, _velocity, endTime, force) {
943
+ scheduleNoteOff(channelNumber, noteNumber, _velocity, endTime, force) {
956
944
  const channel = this.channels[channelNumber];
957
- if (channel.isDrum)
958
- return;
959
- if (!force && 0.5 <= channel.state.sustainPedal)
945
+ if (!force) {
946
+ if (channel.isDrum)
947
+ return;
948
+ if (0.5 <= channel.state.sustainPedal)
949
+ return;
950
+ }
951
+ const note = this.findNoteOffTarget(channel, noteNumber);
952
+ if (!note)
960
953
  return;
961
- const volRelease = endTime + note.voiceParams.volRelease;
962
- const modRelease = endTime + note.voiceParams.modRelease;
963
- note.filterNode.frequency
964
- .cancelScheduledValues(endTime)
965
- .linearRampToValueAtTime(0, modRelease);
966
- const stopTime = Math.min(volRelease, modRelease);
967
- return this.stopNote(channel, note, endTime, stopTime);
954
+ note.ending = true;
955
+ this.releaseNote(channel, note, endTime);
968
956
  }
969
957
  findNoteOffTarget(channel, noteNumber) {
970
958
  const scheduledNotes = channel.scheduledNotes;
@@ -981,16 +969,14 @@ export class MidyGMLite {
981
969
  }
982
970
  noteOff(channelNumber, noteNumber, velocity, scheduleTime) {
983
971
  scheduleTime ??= this.audioContext.currentTime;
984
- const channel = this.channels[channelNumber];
985
- const note = this.findNoteOffTarget(channel, noteNumber);
986
- return this.scheduleNoteOff(channelNumber, note, velocity, scheduleTime, false);
972
+ return this.scheduleNoteOff(channelNumber, noteNumber, velocity, scheduleTime, false);
987
973
  }
988
974
  releaseSustainPedal(channelNumber, halfVelocity, scheduleTime) {
989
975
  const velocity = halfVelocity * 2;
990
976
  const channel = this.channels[channelNumber];
991
977
  const promises = [];
992
978
  for (let i = 0; i < channel.sustainNotes.length; i++) {
993
- const promise = this.scheduleNoteOff(channelNumber, channel.sustainNotes[i], velocity, scheduleTime);
979
+ const promise = this.scheduleNoteOff(channelNumber, channel.sustainNotes[i].noteNumber, velocity, scheduleTime);
994
980
  promises.push(promise);
995
981
  }
996
982
  channel.sustainNotes = [];
package/esm/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;
package/esm/midy.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"midy.d.ts","sourceRoot":"","sources":["../src/midy.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"midy.d.ts","sourceRoot":"","sources":["../src/midy.js"],"names":[],"mappings":"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"}