@marmooo/midy 0.1.3 → 0.1.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.
Files changed (35) hide show
  1. package/esm/deps/cdn.jsdelivr.net/npm/@marmooo/{soundfont-parser@0.0.4 → soundfont-parser@0.0.6}/+esm.d.ts +16 -20
  2. package/esm/deps/cdn.jsdelivr.net/npm/@marmooo/soundfont-parser@0.0.6/+esm.d.ts.map +1 -0
  3. package/esm/deps/cdn.jsdelivr.net/npm/@marmooo/soundfont-parser@0.0.6/+esm.js +180 -0
  4. package/esm/midy-GM1.d.ts +32 -3
  5. package/esm/midy-GM1.d.ts.map +1 -1
  6. package/esm/midy-GM1.js +93 -87
  7. package/esm/midy-GM2.d.ts +56 -3
  8. package/esm/midy-GM2.d.ts.map +1 -1
  9. package/esm/midy-GM2.js +142 -126
  10. package/esm/midy-GMLite.d.ts +32 -3
  11. package/esm/midy-GMLite.d.ts.map +1 -1
  12. package/esm/midy-GMLite.js +91 -85
  13. package/esm/midy.d.ts +87 -4
  14. package/esm/midy.d.ts.map +1 -1
  15. package/esm/midy.js +234 -140
  16. package/package.json +1 -1
  17. package/script/deps/cdn.jsdelivr.net/npm/@marmooo/{soundfont-parser@0.0.4 → soundfont-parser@0.0.6}/+esm.d.ts +16 -20
  18. package/script/deps/cdn.jsdelivr.net/npm/@marmooo/soundfont-parser@0.0.6/+esm.d.ts.map +1 -0
  19. package/script/deps/cdn.jsdelivr.net/npm/@marmooo/soundfont-parser@0.0.6/+esm.js +190 -0
  20. package/script/midy-GM1.d.ts +32 -3
  21. package/script/midy-GM1.d.ts.map +1 -1
  22. package/script/midy-GM1.js +93 -87
  23. package/script/midy-GM2.d.ts +56 -3
  24. package/script/midy-GM2.d.ts.map +1 -1
  25. package/script/midy-GM2.js +142 -126
  26. package/script/midy-GMLite.d.ts +32 -3
  27. package/script/midy-GMLite.d.ts.map +1 -1
  28. package/script/midy-GMLite.js +91 -85
  29. package/script/midy.d.ts +87 -4
  30. package/script/midy.d.ts.map +1 -1
  31. package/script/midy.js +234 -140
  32. package/esm/deps/cdn.jsdelivr.net/npm/@marmooo/soundfont-parser@0.0.4/+esm.d.ts.map +0 -1
  33. package/esm/deps/cdn.jsdelivr.net/npm/@marmooo/soundfont-parser@0.0.4/+esm.js +0 -162
  34. package/script/deps/cdn.jsdelivr.net/npm/@marmooo/soundfont-parser@0.0.4/+esm.d.ts.map +0 -1
  35. package/script/deps/cdn.jsdelivr.net/npm/@marmooo/soundfont-parser@0.0.4/+esm.js +0 -169
package/esm/midy-GM1.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { parseMidi } from "./deps/cdn.jsdelivr.net/npm/midi-file@1.2.4/+esm.js";
2
- import { parse, SoundFont, } from "./deps/cdn.jsdelivr.net/npm/@marmooo/soundfont-parser@0.0.4/+esm.js";
2
+ import { parse, SoundFont, } from "./deps/cdn.jsdelivr.net/npm/@marmooo/soundfont-parser@0.0.6/+esm.js";
3
3
  class Note {
4
4
  constructor(noteNumber, velocity, startTime, instrumentKey) {
5
5
  Object.defineProperty(this, "bufferSource", {
@@ -162,6 +162,7 @@ export class MidyGM1 {
162
162
  });
163
163
  this.audioContext = audioContext;
164
164
  this.masterGain = new GainNode(audioContext);
165
+ this.controlChangeHandlers = this.createControlChangeHandlers();
165
166
  this.channels = this.createChannels(audioContext);
166
167
  this.masterGain.connect(audioContext.destination);
167
168
  this.GM1SystemOn();
@@ -432,12 +433,13 @@ export class MidyGM1 {
432
433
  const now = this.audioContext.currentTime;
433
434
  const channel = this.channels[channelNumber];
434
435
  channel.scheduledNotes.forEach((noteList) => {
435
- noteList.forEach((note) => {
436
- if (note) {
437
- const promise = this.scheduleNoteRelease(channelNumber, note.noteNumber, velocity, now, stopPedal);
438
- this.notePromises.push(promise);
439
- }
440
- });
436
+ for (let i = 0; i < noteList.length; i++) {
437
+ const note = noteList[i];
438
+ if (!note)
439
+ continue;
440
+ const promise = this.scheduleNoteRelease(channelNumber, note.noteNumber, velocity, now, stopPedal);
441
+ this.notePromises.push(promise);
442
+ }
441
443
  });
442
444
  channel.scheduledNotes.clear();
443
445
  await Promise.all(this.notePromises);
@@ -529,7 +531,6 @@ export class MidyGM1 {
529
531
  }
530
532
  setVolumeEnvelope(note) {
531
533
  const { instrumentKey, startTime } = note;
532
- note.volumeNode = new GainNode(this.audioContext, { gain: 0 });
533
534
  const attackVolume = this.cbToRatio(-instrumentKey.initialAttenuation);
534
535
  const sustainVolume = attackVolume * (1 - instrumentKey.volSustain);
535
536
  const volDelay = startTime + instrumentKey.volDelay;
@@ -537,6 +538,8 @@ export class MidyGM1 {
537
538
  const volHold = volAttack + instrumentKey.volHold;
538
539
  const volDecay = volHold + instrumentKey.volDecay;
539
540
  note.volumeNode.gain
541
+ .cancelScheduledValues(startTime)
542
+ .setValueAtTime(0, startTime)
540
543
  .setValueAtTime(1e-6, volDelay) // exponentialRampToValueAtTime() requires a non-zero value
541
544
  .exponentialRampToValueAtTime(attackVolume, volAttack)
542
545
  .setValueAtTime(attackVolume, volHold)
@@ -560,29 +563,27 @@ export class MidyGM1 {
560
563
  .setValueAtTime(peekPitch, modHold)
561
564
  .linearRampToValueAtTime(basePitch, modDecay);
562
565
  }
563
- setFilterNode(channel, note) {
564
- const { instrumentKey, noteNumber, startTime } = note;
565
- const softPedalFactor = 1 -
566
- (0.1 + (noteNumber / 127) * 0.2) * channel.softPedal;
567
- const maxFreq = this.audioContext.sampleRate / 2;
568
- const baseFreq = this.centToHz(instrumentKey.initialFilterFc) *
569
- softPedalFactor;
570
- const peekFreq = this.centToHz(instrumentKey.initialFilterFc + instrumentKey.modEnvToFilterFc) * softPedalFactor;
571
- const sustainFreq = (baseFreq +
572
- (peekFreq - baseFreq) * (1 - instrumentKey.modSustain)) * softPedalFactor;
573
- const adjustedBaseFreq = Math.min(maxFreq, baseFreq);
574
- const adjustedPeekFreq = Math.min(maxFreq, peekFreq);
575
- const adjustedSustainFreq = Math.min(maxFreq, sustainFreq);
566
+ clampCutoffFrequency(frequency) {
567
+ const minFrequency = 20; // min Hz of initialFilterFc
568
+ const maxFrequency = 20000; // max Hz of initialFilterFc
569
+ return Math.max(minFrequency, Math.min(frequency, maxFrequency));
570
+ }
571
+ setFilterEnvelope(note) {
572
+ const { instrumentKey, startTime } = note;
573
+ const baseFreq = this.centToHz(instrumentKey.initialFilterFc);
574
+ const peekFreq = this.centToHz(instrumentKey.initialFilterFc + instrumentKey.modEnvToFilterFc);
575
+ const sustainFreq = baseFreq +
576
+ (peekFreq - baseFreq) * (1 - instrumentKey.modSustain);
577
+ const adjustedBaseFreq = this.clampCutoffFrequency(baseFreq);
578
+ const adjustedPeekFreq = this.clampCutoffFrequency(peekFreq);
579
+ const adjustedSustainFreq = this.clampCutoffFrequency(sustainFreq);
576
580
  const modDelay = startTime + instrumentKey.modDelay;
577
581
  const modAttack = modDelay + instrumentKey.modAttack;
578
582
  const modHold = modAttack + instrumentKey.modHold;
579
583
  const modDecay = modHold + instrumentKey.modDecay;
580
- note.filterNode = new BiquadFilterNode(this.audioContext, {
581
- type: "lowpass",
582
- Q: instrumentKey.initialFilterQ / 10, // dB
583
- frequency: adjustedBaseFreq,
584
- });
585
584
  note.filterNode.frequency
585
+ .cancelScheduledValues(startTime)
586
+ .setValueAtTime(adjustedBaseFreq, startTime)
586
587
  .setValueAtTime(adjustedBaseFreq, modDelay)
587
588
  .exponentialRampToValueAtTime(adjustedPeekFreq, modAttack)
588
589
  .setValueAtTime(adjustedPeekFreq, modHold)
@@ -619,8 +620,13 @@ export class MidyGM1 {
619
620
  const semitoneOffset = this.calcSemitoneOffset(channel);
620
621
  const note = new Note(noteNumber, velocity, startTime, instrumentKey);
621
622
  note.bufferSource = await this.createNoteBufferNode(instrumentKey, isSF3);
622
- this.setFilterNode(channel, note);
623
+ note.volumeNode = new GainNode(this.audioContext);
624
+ note.filterNode = new BiquadFilterNode(this.audioContext, {
625
+ type: "lowpass",
626
+ Q: instrumentKey.initialFilterQ / 10 * channel.filterResonance, // dB
627
+ });
623
628
  this.setVolumeEnvelope(note);
629
+ this.setFilterEnvelope(note);
624
630
  if (0 < channel.modulationDepth) {
625
631
  this.setPitch(note, semitoneOffset);
626
632
  this.startModulation(channel, note, startTime);
@@ -641,7 +647,7 @@ export class MidyGM1 {
641
647
  return;
642
648
  const soundFont = this.soundFonts[soundFontIndex];
643
649
  const isSF3 = soundFont.parsed.info.version.major === 3;
644
- const instrumentKey = soundFont.getInstrumentKey(bankNumber, channel.program, noteNumber);
650
+ const instrumentKey = soundFont.getInstrumentKey(bankNumber, channel.program, noteNumber, velocity);
645
651
  if (!instrumentKey)
646
652
  return;
647
653
  const note = await this.createNote(channel, instrumentKey, noteNumber, velocity, startTime, isSF3);
@@ -659,7 +665,7 @@ export class MidyGM1 {
659
665
  const now = this.audioContext.currentTime;
660
666
  return this.scheduleNoteOn(channelNumber, noteNumber, velocity, now);
661
667
  }
662
- scheduleNoteRelease(channelNumber, noteNumber, velocity, stopTime, stopPedal = false) {
668
+ scheduleNoteRelease(channelNumber, noteNumber, _velocity, stopTime, stopPedal = false) {
663
669
  const channel = this.channels[channelNumber];
664
670
  if (stopPedal && channel.sustainPedal)
665
671
  return;
@@ -672,14 +678,11 @@ export class MidyGM1 {
672
678
  continue;
673
679
  if (note.ending)
674
680
  continue;
675
- const velocityRate = (velocity + 127) / 127;
676
- const volEndTime = stopTime +
677
- note.instrumentKey.volRelease * velocityRate;
681
+ const volEndTime = stopTime + note.instrumentKey.volRelease;
678
682
  note.volumeNode.gain
679
683
  .cancelScheduledValues(stopTime)
680
684
  .linearRampToValueAtTime(0, volEndTime);
681
- const modRelease = stopTime +
682
- note.instrumentKey.modRelease * velocityRate;
685
+ const modRelease = stopTime + note.instrumentKey.modRelease;
683
686
  note.filterNode.frequency
684
687
  .cancelScheduledValues(stopTime)
685
688
  .linearRampToValueAtTime(0, modRelease);
@@ -693,12 +696,11 @@ export class MidyGM1 {
693
696
  note.bufferSource.disconnect();
694
697
  note.volumeNode.disconnect();
695
698
  note.filterNode.disconnect();
696
- if (note.volumeDepth)
699
+ if (note.modulationDepth) {
697
700
  note.volumeDepth.disconnect();
698
- if (note.modulationDepth)
699
701
  note.modulationDepth.disconnect();
700
- if (note.modulationLFO)
701
702
  note.modulationLFO.stop();
703
+ }
702
704
  resolve();
703
705
  };
704
706
  note.bufferSource.stop(volEndTime);
@@ -715,13 +717,14 @@ export class MidyGM1 {
715
717
  const promises = [];
716
718
  channel.sustainPedal = false;
717
719
  channel.scheduledNotes.forEach((noteList) => {
718
- noteList.forEach((note) => {
719
- if (note) {
720
- const { noteNumber } = note;
721
- const promise = this.releaseNote(channelNumber, noteNumber, velocity);
722
- promises.push(promise);
723
- }
724
- });
720
+ for (let i = 0; i < noteList.length; i++) {
721
+ const note = noteList[i];
722
+ if (!note)
723
+ continue;
724
+ const { noteNumber } = note;
725
+ const promise = this.releaseNote(channelNumber, noteNumber, velocity);
726
+ promises.push(promise);
727
+ }
725
728
  });
726
729
  return promises;
727
730
  }
@@ -759,47 +762,46 @@ export class MidyGM1 {
759
762
  channel.pitchBendRange * 100;
760
763
  this.updateDetune(channel, detuneChange);
761
764
  }
765
+ createControlChangeHandlers() {
766
+ return {
767
+ 1: this.setModulationDepth,
768
+ 6: this.dataEntryMSB,
769
+ 7: this.setVolume,
770
+ 10: this.setPan,
771
+ 11: this.setExpression,
772
+ 38: this.dataEntryLSB,
773
+ 64: this.setSustainPedal,
774
+ 100: this.setRPNLSB,
775
+ 101: this.setRPNMSB,
776
+ 120: this.allSoundOff,
777
+ 121: this.resetAllControllers,
778
+ 123: this.allNotesOff,
779
+ };
780
+ }
762
781
  handleControlChange(channelNumber, controller, value) {
763
- switch (controller) {
764
- case 1:
765
- return this.setModulationDepth(channelNumber, value);
766
- case 6:
767
- return this.dataEntryMSB(channelNumber, value);
768
- case 7:
769
- return this.setVolume(channelNumber, value);
770
- case 10:
771
- return this.setPan(channelNumber, value);
772
- case 11:
773
- return this.setExpression(channelNumber, value);
774
- case 38:
775
- return this.dataEntryLSB(channelNumber, value);
776
- case 64:
777
- return this.setSustainPedal(channelNumber, value);
778
- case 100:
779
- return this.setRPNLSB(channelNumber, value);
780
- case 101:
781
- return this.setRPNMSB(channelNumber, value);
782
- case 120:
783
- return this.allSoundOff(channelNumber);
784
- case 121:
785
- return this.resetAllControllers(channelNumber);
786
- case 123:
787
- return this.allNotesOff(channelNumber);
788
- default:
789
- console.warn(`Unsupported Control change: controller=${controller} value=${value}`);
782
+ const handler = this.controlChangeHandlers[controller];
783
+ if (handler) {
784
+ handler.call(this, channelNumber, value);
785
+ }
786
+ else {
787
+ console.warn(`Unsupported Control change: controller=${controller} value=${value}`);
790
788
  }
791
789
  }
792
790
  updateModulation(channel) {
793
791
  const now = this.audioContext.currentTime;
794
- const activeNotes = this.getActiveNotes(channel, now);
795
- activeNotes.forEach((activeNote) => {
796
- if (activeNote.modulationDepth) {
797
- activeNote.modulationDepth.gain.setValueAtTime(channel.modulationDepth, now);
798
- }
799
- else {
800
- const semitoneOffset = this.calcSemitoneOffset(channel);
801
- this.setPitch(activeNote, semitoneOffset);
802
- this.startModulation(channel, activeNote, now);
792
+ channel.scheduledNotes.forEach((noteList) => {
793
+ for (let i = 0; i < noteList.length; i++) {
794
+ const note = noteList[i];
795
+ if (!note)
796
+ continue;
797
+ if (note.modulationDepth) {
798
+ note.modulationDepth.gain.setValueAtTime(channel.modulationDepth, now);
799
+ }
800
+ else {
801
+ const semitoneOffset = this.calcSemitoneOffset(channel);
802
+ this.setPitch(note, semitoneOffset);
803
+ this.startModulation(channel, note, now);
804
+ }
803
805
  }
804
806
  });
805
807
  }
@@ -907,13 +909,17 @@ export class MidyGM1 {
907
909
  }
908
910
  updateDetune(channel, detuneChange) {
909
911
  const now = this.audioContext.currentTime;
910
- const activeNotes = this.getActiveNotes(channel, now);
911
- activeNotes.forEach((activeNote) => {
912
- const { bufferSource } = activeNote;
913
- const detune = bufferSource.detune.value + detuneChange;
914
- bufferSource.detune
915
- .cancelScheduledValues(now)
916
- .setValueAtTime(detune, now);
912
+ channel.scheduledNotes.forEach((noteList) => {
913
+ for (let i = 0; i < noteList.length; i++) {
914
+ const note = noteList[i];
915
+ if (!note)
916
+ continue;
917
+ const { bufferSource } = note;
918
+ const detune = bufferSource.detune.value + detuneChange;
919
+ bufferSource.detune
920
+ .cancelScheduledValues(now)
921
+ .setValueAtTime(detune, now);
922
+ }
917
923
  });
918
924
  }
919
925
  handlePitchBendRangeRPN(channelNumber) {
package/esm/midy-GM2.d.ts CHANGED
@@ -92,6 +92,32 @@ export class MidyGM2 {
92
92
  };
93
93
  };
94
94
  masterGain: any;
95
+ controlChangeHandlers: {
96
+ 0: (channelNumber: any, msb: any) => void;
97
+ 1: (channelNumber: any, modulation: any) => void;
98
+ 5: (channelNumber: any, portamentoTime: any) => void;
99
+ 6: (channelNumber: any, value: any) => void;
100
+ 7: (channelNumber: any, volume: any) => void;
101
+ 10: (channelNumber: any, pan: any) => void;
102
+ 11: (channelNumber: any, expression: any) => void;
103
+ 32: (channelNumber: any, lsb: any) => void;
104
+ 38: (channelNumber: any, value: any) => void;
105
+ 64: (channelNumber: any, value: any) => void;
106
+ 65: (channelNumber: any, value: any) => void;
107
+ 66: (channelNumber: any, value: any) => void;
108
+ 67: (channelNumber: any, softPedal: any) => void;
109
+ 91: (channelNumber: any, reverbSendLevel: any) => void;
110
+ 93: (channelNumber: any, chorusSendLevel: any) => void;
111
+ 100: (channelNumber: any, value: any) => void;
112
+ 101: (channelNumber: any, value: any) => void;
113
+ 120: (channelNumber: any) => Promise<void>;
114
+ 121: (channelNumber: any) => void;
115
+ 123: (channelNumber: any) => Promise<void>;
116
+ 124: () => void;
117
+ 125: () => void;
118
+ 126: () => void;
119
+ 127: () => void;
120
+ };
95
121
  channels: any[];
96
122
  reverbEffect: {
97
123
  input: any;
@@ -167,14 +193,15 @@ export class MidyGM2 {
167
193
  calcPlaybackRate(instrumentKey: any, noteNumber: any, semitoneOffset: any): number;
168
194
  setVolumeEnvelope(note: any): void;
169
195
  setPitch(note: any, semitoneOffset: any): void;
170
- setFilterNode(channel: any, note: any): void;
196
+ clampCutoffFrequency(frequency: any): number;
197
+ setFilterEnvelope(channel: any, note: any): void;
171
198
  startModulation(channel: any, note: any, startTime: any): void;
172
199
  startVibrato(channel: any, note: any, startTime: any): void;
173
200
  createNote(channel: any, instrumentKey: any, noteNumber: any, velocity: any, startTime: any, isSF3: any): Promise<Note>;
174
201
  calcBank(channel: any, channelNumber: any): any;
175
202
  scheduleNoteOn(channelNumber: any, noteNumber: any, velocity: any, startTime: any): Promise<void>;
176
203
  noteOn(channelNumber: any, noteNumber: any, velocity: any): Promise<void>;
177
- scheduleNoteRelease(channelNumber: any, noteNumber: any, velocity: any, stopTime: any, stopPedal?: boolean): Promise<any> | undefined;
204
+ scheduleNoteRelease(channelNumber: any, noteNumber: any, _velocity: any, stopTime: any, stopPedal?: boolean): Promise<any> | undefined;
178
205
  releaseNote(channelNumber: any, noteNumber: any, velocity: any): Promise<any> | undefined;
179
206
  releaseSustainPedal(channelNumber: any, halfVelocity: any): any[];
180
207
  releaseSostenutoPedal(channelNumber: any, halfVelocity: any): any[];
@@ -183,7 +210,33 @@ export class MidyGM2 {
183
210
  handleChannelPressure(channelNumber: any, pressure: any): void;
184
211
  handlePitchBendMessage(channelNumber: any, lsb: any, msb: any): void;
185
212
  setPitchBend(channelNumber: any, pitchBend: any): void;
186
- handleControlChange(channelNumber: any, controller: any, value: any): void | Promise<void>;
213
+ createControlChangeHandlers(): {
214
+ 0: (channelNumber: any, msb: any) => void;
215
+ 1: (channelNumber: any, modulation: any) => void;
216
+ 5: (channelNumber: any, portamentoTime: any) => void;
217
+ 6: (channelNumber: any, value: any) => void;
218
+ 7: (channelNumber: any, volume: any) => void;
219
+ 10: (channelNumber: any, pan: any) => void;
220
+ 11: (channelNumber: any, expression: any) => void;
221
+ 32: (channelNumber: any, lsb: any) => void;
222
+ 38: (channelNumber: any, value: any) => void;
223
+ 64: (channelNumber: any, value: any) => void;
224
+ 65: (channelNumber: any, value: any) => void;
225
+ 66: (channelNumber: any, value: any) => void;
226
+ 67: (channelNumber: any, softPedal: any) => void;
227
+ 91: (channelNumber: any, reverbSendLevel: any) => void;
228
+ 93: (channelNumber: any, chorusSendLevel: any) => void;
229
+ 100: (channelNumber: any, value: any) => void;
230
+ 101: (channelNumber: any, value: any) => void;
231
+ 120: (channelNumber: any) => Promise<void>;
232
+ 121: (channelNumber: any) => void;
233
+ 123: (channelNumber: any) => Promise<void>;
234
+ 124: () => void;
235
+ 125: () => void;
236
+ 126: () => void;
237
+ 127: () => void;
238
+ };
239
+ handleControlChange(channelNumber: any, controller: any, value: any): void;
187
240
  setBankMSB(channelNumber: any, msb: any): void;
188
241
  updateModulation(channel: any): void;
189
242
  setModulationDepth(channelNumber: any, modulation: any): void;
@@ -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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"}