@marmooo/midy 0.1.1 → 0.1.2

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
@@ -72,12 +72,11 @@ export class MidyGM1 {
72
72
  currentTime(): number;
73
73
  getActiveNotes(channel: any, time: any): Map<any, any>;
74
74
  getActiveNote(noteList: any, time: any): any;
75
- connectEffects(channel: any, gainNode: any): void;
76
75
  cbToRatio(cb: any): number;
77
76
  centToHz(cent: any): number;
78
77
  calcSemitoneOffset(channel: any): any;
79
78
  calcPlaybackRate(instrumentKey: any, noteNumber: any, semitoneOffset: any): number;
80
- setVolumeEnvelope(channel: any, note: any): void;
79
+ setVolumeEnvelope(note: any): void;
81
80
  setFilterEnvelope(channel: any, note: any): void;
82
81
  startModulation(channel: any, note: any, time: any): void;
83
82
  createNote(channel: any, instrumentKey: any, noteNumber: any, velocity: any, startTime: any, isSF3: any): Promise<Note>;
@@ -1 +1 @@
1
- {"version":3,"file":"midy-GM1.d.ts","sourceRoot":"","sources":["../src/midy-GM1.js"],"names":[],"mappings":"AAqBA;IAmBE;;;;;;;;;;;MAWE;IAEF;;;;;;;MAOE;IAEF,+BAMC;IA9CD,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;IAyBhB,kBAAgC;IAChC,gBAA4C;IAE5C,gBAAiD;IAInD,4BAMC;IAED,mCASC;IAED,gDAMC;IAED,sCASC;IAED;;;;MAcC;IAED,yCAUC;IAED,+DAyBC;IAED,mEAWC;IAED,qDAOC;IAED,2EA+CC;IAED,mCAOC;IAED,0BA+CC;IAED,uDAEC;IAED,wDAEC;IAED;;;MA8DC;IAED,4BAsBC;IAED,uBAKC;IAED,aAGC;IAED,cAKC;IAED,wBAIC;IAED,0BAKC;IAED,wBAOC;IAED,sBAGC;IAED,uDASC;IAED,6CAQC;IAED,kDAGC;IAED,2BAEC;IAED,4BAEC;IAED,sCAGC;IAED,mFAGC;IAED,iDAiBC;IAED,iDAiCC;IAED,0DAmBC;IAED,wHA6BC;IAED,kGA6BC;IAED,0EAGC;IAED,sIA8CC;IAED,0FAGC;IAED,kEAeC;IAED,wFAiBC;IAED,4DAGC;IAED,qEAGC;IAED,uDAOC;IAED,mFA+BC;IAED,qCAcC;IAED,yDAIC;IACD,iDAIC;IAED;;;MAMC;IAED,2CAIC;IAED,yDAIC;IAED,mDAGC;IAED,sCAUC;IAED,sDAMC;IAED,kFAeC;IAED,2DAMC;IAED,oCAkBC;IAED,gDAEC;IAED,gDAEC;IAED,mDAGC;IAED,oDAUC;IAED,kDAKC;IAED,iEAOC;IAED,8CAKC;IAED,yDAMC;IAED,gDAKC;IAED,6DAMC;IAED,uCAoBC;IAED,8CAEC;IAED,uCAoBC;IAED,4DAgBC;IAED,oBAQC;IAED,yDAaC;IAED,yCAGC;IAED,mCAQC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AAnjCD;IAOE,gFAKC;IAXD,kBAAa;IACb,cAAS;IACT,gBAAW;IACX,YAAO;IACP,gBAAW;IAGT,gBAA4B;IAC5B,cAAwB;IACxB,eAA0B;IAC1B,mBAAkC;CAErC"}
1
+ {"version":3,"file":"midy-GM1.d.ts","sourceRoot":"","sources":["../src/midy-GM1.js"],"names":[],"mappings":"AAqBA;IAmBE;;;;;;;;;;;MAWE;IAEF;;;;;;;MAOE;IAEF,+BAMC;IA9CD,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;IAyBhB,kBAAgC;IAChC,gBAA4C;IAC5C,gBAAiD;IAKnD,4BAMC;IAED,mCASC;IAED,gDAMC;IAED,sCASC;IAED;;;;MAeC;IAED,yCAUC;IAED,+DAyBC;IAED,mEAWC;IAED,qDAOC;IAED,2EA+CC;IAED,mCAOC;IAED,0BA+CC;IAED,uDAEC;IAED,wDAEC;IAED;;;MA8DC;IAED,4BAsBC;IAED,uBAKC;IAED,aAGC;IAED,cAKC;IAED,wBAIC;IAED,0BAKC;IAED,wBAOC;IAED,sBAGC;IAED,uDASC;IAED,6CAQC;IAED,2BAEC;IAED,4BAEC;IAED,sCAGC;IAED,mFAGC;IAED,mCAcC;IACD,iDAiCC;IAED,0DAmBC;IAED,wHA6BC;IAED,kGA6BC;IAED,0EAGC;IAED,sIA8CC;IAED,0FAGC;IAED,kEAeC;IAED,wFAiBC;IAED,4DAGC;IAED,qEAGC;IAED,uDAOC;IAED,mFA+BC;IAED,qCAcC;IAED,yDAIC;IACD,iDAIC;IAED;;;MAMC;IAED,2CAIC;IAED,yDAIC;IAED,mDAGC;IAED,sCAUC;IAED,sDAMC;IAED,kFAeC;IAED,2DAMC;IAED,oCAkBC;IAED,gDAEC;IAED,gDAEC;IAED,mDAGC;IAED,oDAUC;IAED,kDAKC;IAED,iEAOC;IAED,8CAKC;IAED,yDAMC;IAED,gDAKC;IAED,6DAMC;IAED,uCAoBC;IAED,8CAEC;IAED,uCAoBC;IAED,4DAgBC;IAED,oBAQC;IAED,yDAaC;IAED,yCAGC;IAED,mCAQC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AA3iCD;IAOE,gFAKC;IAXD,kBAAa;IACb,cAAS;IACT,gBAAW;IACX,YAAO;IACP,gBAAW;IAGT,gBAA4B;IAC5B,cAAwB;IACxB,eAA0B;IAC1B,mBAAkC;CAErC"}
package/esm/midy-GM1.js CHANGED
@@ -144,8 +144,8 @@ export class MidyGM1 {
144
144
  });
145
145
  this.audioContext = audioContext;
146
146
  this.masterGain = new GainNode(audioContext);
147
- this.masterGain.connect(audioContext.destination);
148
147
  this.channels = this.createChannels(audioContext);
148
+ this.masterGain.connect(audioContext.destination);
149
149
  this.GM1SystemOn();
150
150
  }
151
151
  initSoundFontTable() {
@@ -189,6 +189,7 @@ export class MidyGM1 {
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);
192
193
  return {
193
194
  gainL,
194
195
  gainR,
@@ -491,10 +492,6 @@ export class MidyGM1 {
491
492
  }
492
493
  return noteList[0];
493
494
  }
494
- connectEffects(channel, gainNode) {
495
- gainNode.connect(channel.merger);
496
- merger.connect(this.masterGain);
497
- }
498
495
  cbToRatio(cb) {
499
496
  return Math.pow(10, cb / 200);
500
497
  }
@@ -509,14 +506,10 @@ export class MidyGM1 {
509
506
  return instrumentKey.playbackRate(noteNumber) *
510
507
  Math.pow(2, semitoneOffset / 12);
511
508
  }
512
- setVolumeEnvelope(channel, note) {
513
- const { instrumentKey, startTime, velocity } = note;
509
+ setVolumeEnvelope(note) {
510
+ const { instrumentKey, startTime } = note;
514
511
  note.gainNode = new GainNode(this.audioContext, { gain: 0 });
515
- let volume = (velocity / 127) * channel.volume * channel.expression;
516
- if (volume === 0)
517
- volume = 1e-6; // exponentialRampToValueAtTime() requires a non-zero value
518
- const attackVolume = this.cbToRatio(-instrumentKey.initialAttenuation) *
519
- volume;
512
+ const attackVolume = this.cbToRatio(-instrumentKey.initialAttenuation);
520
513
  const sustainVolume = attackVolume * (1 - instrumentKey.volSustain);
521
514
  const volDelay = startTime + instrumentKey.volDelay;
522
515
  const volAttack = volDelay + instrumentKey.volAttack;
@@ -576,7 +569,7 @@ export class MidyGM1 {
576
569
  const note = new Note(noteNumber, velocity, startTime, instrumentKey);
577
570
  note.bufferSource = await this.createNoteBufferNode(instrumentKey, isSF3);
578
571
  note.bufferSource.playbackRate.value = this.calcPlaybackRate(instrumentKey, noteNumber, semitoneOffset);
579
- this.setVolumeEnvelope(channel, note);
572
+ this.setVolumeEnvelope(note);
580
573
  this.setFilterEnvelope(channel, note);
581
574
  if (channel.modulation > 0) {
582
575
  const delayModLFO = startTime + instrumentKey.delayModLFO;
@@ -599,7 +592,8 @@ export class MidyGM1 {
599
592
  if (!instrumentKey)
600
593
  return;
601
594
  const note = await this.createNote(channel, instrumentKey, noteNumber, velocity, startTime, isSF3);
602
- this.connectEffects(channel, note.gainNode);
595
+ note.gainNode.connect(channel.gainL);
596
+ note.gainNode.connect(channel.gainR);
603
597
  const scheduledNotes = channel.scheduledNotes;
604
598
  if (scheduledNotes.has(noteNumber)) {
605
599
  scheduledNotes.get(noteNumber).push(note);
@@ -702,13 +696,13 @@ export class MidyGM1 {
702
696
  channel.program = program;
703
697
  }
704
698
  handlePitchBendMessage(channelNumber, lsb, msb) {
705
- const pitchBend = msb * 128 + lsb;
699
+ const pitchBend = msb * 128 + lsb - 8192;
706
700
  this.setPitchBend(channelNumber, pitchBend);
707
701
  }
708
702
  setPitchBend(channelNumber, pitchBend) {
709
703
  const channel = this.channels[channelNumber];
710
704
  const prevPitchBend = channel.pitchBend;
711
- channel.pitchBend = (pitchBend - 8192) / 8192;
705
+ channel.pitchBend = pitchBend / 8192;
712
706
  const detuneChange = (channel.pitchBend - prevPitchBend) *
713
707
  channel.pitchBendRange * 100;
714
708
  this.updateDetune(channel, detuneChange);
@@ -936,7 +930,7 @@ export class MidyGM1 {
936
930
  channel.scheduledNotes.forEach((noteList) => {
937
931
  const activeNote = this.getActiveNote(noteList, now);
938
932
  if (activeNote) {
939
- const notePromise = this.scheduleNoteRelease(channelNumber, noteNumber, velocity, now, stopPedal);
933
+ const notePromise = this.scheduleNoteRelease(channelNumber, activeNote.noteNumber, velocity, now, stopPedal);
940
934
  promises.push(notePromise);
941
935
  }
942
936
  });
package/esm/midy-GM2.d.ts CHANGED
@@ -90,6 +90,19 @@ export class MidyGM2 {
90
90
  };
91
91
  masterGain: any;
92
92
  channels: any[];
93
+ reverbEffect: {
94
+ input: any;
95
+ output: any;
96
+ };
97
+ chorusEffect: {
98
+ input: any;
99
+ output: any;
100
+ sendGain: any;
101
+ lfo: any;
102
+ lfoGain: any;
103
+ delayNodes: any[];
104
+ feedbackGains: any[];
105
+ };
93
106
  initSoundFontTable(): any[];
94
107
  addSoundFont(soundFont: any): void;
95
108
  loadSoundFont(soundFontUrl: any): Promise<void>;
@@ -98,19 +111,6 @@ export class MidyGM2 {
98
111
  gainL: any;
99
112
  gainR: any;
100
113
  merger: any;
101
- reverbEffect: {
102
- input: any;
103
- output: any;
104
- };
105
- chorusEffect: {
106
- input: any;
107
- output: any;
108
- sendGain: any;
109
- lfo: any;
110
- lfoGain: any;
111
- delayNodes: any[];
112
- feedbackGains: any[];
113
- };
114
114
  };
115
115
  createChannels(audioContext: any): any[];
116
116
  createNoteBuffer(instrumentKey: any, isSF3: any): Promise<any>;
@@ -144,7 +144,7 @@ export class MidyGM2 {
144
144
  createCombFilter(audioContext: any, input: any, delay: any, feedback: any): any;
145
145
  createAllpassFilter(audioContext: any, input: any, delay: any, feedback: any): any;
146
146
  generateDistributedArray(center: any, count: any, varianceRatio?: number, randomness?: number): any[];
147
- createSchroederReverb(audioContext: any, combDelays: any, combFeedbacks: any, allpassDelays: any, allpassFeedbacks: any): {
147
+ createSchroederReverb(audioContext: any, combFeedbacks: any, combDelays: any, allpassFeedbacks: any, allpassDelays: any): {
148
148
  input: any;
149
149
  output: any;
150
150
  };
@@ -157,12 +157,11 @@ export class MidyGM2 {
157
157
  delayNodes: any[];
158
158
  feedbackGains: any[];
159
159
  };
160
- connectEffects(channel: any, gainNode: any): void;
161
160
  cbToRatio(cb: any): number;
162
161
  centToHz(cent: any): number;
163
162
  calcSemitoneOffset(channel: any): any;
164
163
  calcPlaybackRate(instrumentKey: any, noteNumber: any, semitoneOffset: any): number;
165
- setVolumeEnvelope(channel: any, note: any): void;
164
+ setVolumeEnvelope(note: any): void;
166
165
  setFilterEnvelope(channel: any, note: any): void;
167
166
  startModulation(channel: any, note: any, time: any): void;
168
167
  createNote(channel: any, instrumentKey: any, noteNumber: any, velocity: any, startTime: any, isSF3: any): Promise<Note>;
@@ -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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"}
package/esm/midy-GM2.js CHANGED
@@ -82,7 +82,7 @@ export class MidyGM2 {
82
82
  writable: true,
83
83
  value: {
84
84
  time: this.getReverbTime(64),
85
- feedback: 0.25,
85
+ feedback: 0.8,
86
86
  }
87
87
  });
88
88
  Object.defineProperty(this, "chorus", {
@@ -224,8 +224,12 @@ export class MidyGM2 {
224
224
  this.audioContext = audioContext;
225
225
  this.options = { ...this.defaultOptions, ...options };
226
226
  this.masterGain = new GainNode(audioContext);
227
- this.masterGain.connect(audioContext.destination);
228
227
  this.channels = this.createChannels(audioContext);
228
+ this.reverbEffect = this.options.reverbAlgorithm(audioContext);
229
+ this.chorusEffect = this.createChorusEffect(audioContext);
230
+ this.chorusEffect.output.connect(this.masterGain);
231
+ this.reverbEffect.output.connect(this.masterGain);
232
+ this.masterGain.connect(audioContext.destination);
229
233
  this.GM2SystemOn();
230
234
  }
231
235
  initSoundFontTable() {
@@ -269,14 +273,11 @@ export class MidyGM2 {
269
273
  const merger = new ChannelMergerNode(audioContext, { numberOfInputs: 2 });
270
274
  gainL.connect(merger, 0, 0);
271
275
  gainR.connect(merger, 0, 1);
272
- const reverbEffect = this.options.reverbAlgorithm(audioContext);
273
- const chorusEffect = this.createChorusEffect(audioContext);
276
+ merger.connect(this.masterGain);
274
277
  return {
275
278
  gainL,
276
279
  gainR,
277
280
  merger,
278
- reverbEffect,
279
- chorusEffect,
280
281
  };
281
282
  }
282
283
  createChannels(audioContext) {
@@ -686,7 +687,7 @@ export class MidyGM2 {
686
687
  }
687
688
  // https://hajim.rochester.edu/ece/sites/zduan/teaching/ece472/reading/Schroeder_1962.pdf
688
689
  // M.R.Schroeder, "Natural Sounding Artificial Reverberation", J.Audio Eng. Soc., vol.10, p.219, 1962
689
- createSchroederReverb(audioContext, combDelays, combFeedbacks, allpassDelays, allpassFeedbacks) {
690
+ createSchroederReverb(audioContext, combFeedbacks, combDelays, allpassFeedbacks, allpassDelays) {
690
691
  const input = new GainNode(audioContext);
691
692
  const output = new GainNode(audioContext);
692
693
  const mergerGain = new GainNode(audioContext);
@@ -745,21 +746,6 @@ export class MidyGM2 {
745
746
  feedbackGains,
746
747
  };
747
748
  }
748
- connectEffects(channel, gainNode) {
749
- gainNode.connect(channel.merger);
750
- channel.merger.connect(this.masterGain);
751
- if (0 < channel.reverbSendLevel) {
752
- channel.merger.connect(channel.reverbEffect.input);
753
- channel.reverbEffect.output.connect(this.masterGain);
754
- }
755
- if (0 < channel.chorusSendLevel) {
756
- channel.merger.connect(channel.chorusEffect.input);
757
- channel.reverbEffect.output.connect(this.masterGain);
758
- }
759
- if (0 < this.chorus.sendToReverb) {
760
- channel.chorusEffect.sendGain.connect(channel.reverbEffect.input);
761
- }
762
- }
763
749
  cbToRatio(cb) {
764
750
  return Math.pow(10, cb / 200);
765
751
  }
@@ -776,14 +762,10 @@ export class MidyGM2 {
776
762
  return instrumentKey.playbackRate(noteNumber) *
777
763
  Math.pow(2, semitoneOffset / 12);
778
764
  }
779
- setVolumeEnvelope(channel, note) {
780
- const { instrumentKey, startTime, velocity } = note;
765
+ setVolumeEnvelope(note) {
766
+ const { instrumentKey, startTime } = note;
781
767
  note.gainNode = new GainNode(this.audioContext, { gain: 0 });
782
- let volume = (velocity / 127) * channel.volume * channel.expression;
783
- if (volume === 0)
784
- volume = 1e-6; // exponentialRampToValueAtTime() requires a non-zero value
785
- const attackVolume = this.cbToRatio(-instrumentKey.initialAttenuation) *
786
- volume;
768
+ const attackVolume = this.cbToRatio(-instrumentKey.initialAttenuation);
787
769
  const sustainVolume = attackVolume * (1 - instrumentKey.volSustain);
788
770
  const volDelay = startTime + instrumentKey.volDelay;
789
771
  const volAttack = volDelay + instrumentKey.volAttack;
@@ -843,7 +825,7 @@ export class MidyGM2 {
843
825
  const note = new Note(noteNumber, velocity, startTime, instrumentKey);
844
826
  note.bufferSource = await this.createNoteBufferNode(instrumentKey, isSF3);
845
827
  note.bufferSource.playbackRate.value = this.calcPlaybackRate(instrumentKey, noteNumber, semitoneOffset);
846
- this.setVolumeEnvelope(channel, note);
828
+ this.setVolumeEnvelope(note);
847
829
  this.setFilterEnvelope(channel, note);
848
830
  if (channel.modulation > 0) {
849
831
  const delayModLFO = startTime + instrumentKey.delayModLFO;
@@ -879,7 +861,8 @@ export class MidyGM2 {
879
861
  if (!instrumentKey)
880
862
  return;
881
863
  const note = await this.createNote(channel, instrumentKey, noteNumber, velocity, startTime, isSF3);
882
- this.connectEffects(channel, note.gainNode);
864
+ note.gainNode.connect(channel.gainL);
865
+ note.gainNode.connect(channel.gainR);
883
866
  if (channel.sostenutoPedal) {
884
867
  channel.sostenutoNotes.set(noteNumber, note);
885
868
  }
@@ -1022,13 +1005,13 @@ export class MidyGM2 {
1022
1005
  }
1023
1006
  }
1024
1007
  handlePitchBendMessage(channelNumber, lsb, msb) {
1025
- const pitchBend = msb * 128 + lsb;
1008
+ const pitchBend = msb * 128 + lsb - 8192;
1026
1009
  this.setPitchBend(channelNumber, pitchBend);
1027
1010
  }
1028
1011
  setPitchBend(channelNumber, pitchBend) {
1029
1012
  const channel = this.channels[channelNumber];
1030
1013
  const prevPitchBend = channel.pitchBend;
1031
- channel.pitchBend = (pitchBend - 8192) / 8192;
1014
+ channel.pitchBend = pitchBend / 8192;
1032
1015
  const detuneChange = (channel.pitchBend - prevPitchBend) *
1033
1016
  channel.pitchBendRange * 100;
1034
1017
  this.updateDetune(channel, detuneChange);
@@ -1163,20 +1146,30 @@ export class MidyGM2 {
1163
1146
  this.channels[channelNumber].portamento = value >= 64;
1164
1147
  }
1165
1148
  setReverbSendLevel(channelNumber, reverbSendLevel) {
1166
- const now = this.audioContext.currentTime;
1167
1149
  const channel = this.channels[channelNumber];
1168
- const reverbEffect = channel.reverbEffect;
1169
- channel.reverbSendLevel = reverbSendLevel / 127;
1170
- reverbEffect.output.gain.cancelScheduledValues(now);
1171
- reverbEffect.output.gain.setValueAtTime(channel.reverbSendLevel, now);
1150
+ const reverbEffect = this.reverbEffect;
1151
+ if (0 < reverbSendLevel) {
1152
+ const now = this.audioContext.currentTime;
1153
+ channel.reverbSendLevel = reverbSendLevel / 127;
1154
+ reverbEffect.output.gain.cancelScheduledValues(now);
1155
+ reverbEffect.output.gain.setValueAtTime(channel.reverbSendLevel, now);
1156
+ }
1157
+ else if (channel.reverbSendLevel !== 0) {
1158
+ channel.merger.disconnect(reverbEffect.input);
1159
+ }
1172
1160
  }
1173
1161
  setChorusSendLevel(channelNumber, chorusSendLevel) {
1174
- const now = this.audioContext.currentTime;
1175
1162
  const channel = this.channels[channelNumber];
1176
- const chorusEffect = channel.chorusEffect;
1177
- channel.chorusSendLevel = chorusSendLevel / 127;
1178
- chorusEffect.output.gain.cancelScheduledValues(now);
1179
- chorusEffect.output.gain.setValueAtTime(channel.chorusSendLevel, now);
1163
+ const chorusEffect = this.chorusEffect;
1164
+ if (0 < chorusSendLevel) {
1165
+ const now = this.audioContext.currentTime;
1166
+ channel.chorusSendLevel = chorusSendLevel / 127;
1167
+ chorusEffect.output.gain.cancelScheduledValues(now);
1168
+ chorusEffect.output.gain.setValueAtTime(channel.chorusSendLevel, now);
1169
+ }
1170
+ else if (channel.chorusSendLevel !== 0) {
1171
+ channel.merger.disconnect(chorusEffect.input);
1172
+ }
1180
1173
  }
1181
1174
  setSostenutoPedal(channelNumber, value) {
1182
1175
  const isOn = value >= 64;
@@ -1341,7 +1334,7 @@ export class MidyGM2 {
1341
1334
  channel.scheduledNotes.forEach((noteList) => {
1342
1335
  const activeNote = this.getActiveNote(noteList, now);
1343
1336
  if (activeNote) {
1344
- const notePromise = this.scheduleNoteRelease(channelNumber, noteNumber, velocity, now, stopPedal);
1337
+ const notePromise = this.scheduleNoteRelease(channelNumber, activeNote.noteNumber, velocity, now, stopPedal);
1345
1338
  promises.push(notePromise);
1346
1339
  }
1347
1340
  });
@@ -1510,11 +1503,9 @@ export class MidyGM2 {
1510
1503
  }
1511
1504
  setReverbType(type) {
1512
1505
  this.reverb.time = this.getReverbTimeFromType(type);
1513
- this.reverb.feedback = (type === 8) ? 0.1 : 0.2;
1514
- const { audioContext, channels, options } = this;
1515
- for (let i = 0; i < channels.length; i++) {
1516
- channels[i].reverbEffect = options.reverbAlgorithm(audioContext);
1517
- }
1506
+ this.reverb.feedback = (type === 8) ? 0.9 : 0.8;
1507
+ const { audioContext, options } = this;
1508
+ this.reverbEffect = options.reverbAlgorithm(audioContext);
1518
1509
  }
1519
1510
  getReverbTimeFromType(type) {
1520
1511
  switch (type) {
@@ -1656,15 +1647,17 @@ export class MidyGM2 {
1656
1647
  return value * 0.00763;
1657
1648
  }
1658
1649
  setChorusSendToReverb(value) {
1659
- const now = this.audioContext.currentTime;
1660
1650
  const sendToReverb = this.getChorusSendToReverb(value);
1661
- this.chorus.sendToReverb = sendToReverb;
1662
- for (let i = 0; i < this.channels.length; i++) {
1663
- const chorusEffect = this.channels[i].chorusEffect;
1664
- chorusEffect.sendGain.gain
1651
+ if (0 < sendToReverb) {
1652
+ const now = this.audioContext.currentTime;
1653
+ this.chorus.sendToReverb = sendToReverb;
1654
+ this.chorusEffect.sendGain.gain
1665
1655
  .cancelScheduledValues(now)
1666
1656
  .setValueAtTime(sendToReverb, now);
1667
1657
  }
1658
+ else if (this.chorus.sendToReverb !== 0) {
1659
+ this.chorusEffect.sendGain.disconnect(this.reverbEffect.input);
1660
+ }
1668
1661
  }
1669
1662
  getChorusSendToReverb(value) {
1670
1663
  return value * 0.00787;
@@ -70,12 +70,11 @@ export class MidyGMLite {
70
70
  currentTime(): number;
71
71
  getActiveNotes(channel: any, time: any): Map<any, any>;
72
72
  getActiveNote(noteList: any, time: any): any;
73
- connectEffects(channel: any, gainNode: any): void;
74
73
  cbToRatio(cb: any): number;
75
74
  centToHz(cent: any): number;
76
75
  calcSemitoneOffset(channel: any): number;
77
76
  calcPlaybackRate(instrumentKey: any, noteNumber: any, semitoneOffset: any): number;
78
- setVolumeEnvelope(channel: any, note: any): void;
77
+ setVolumeEnvelope(note: any): void;
79
78
  setFilterEnvelope(channel: any, note: any): void;
80
79
  startModulation(channel: any, note: any, time: any): void;
81
80
  createNote(channel: any, instrumentKey: any, noteNumber: any, velocity: any, startTime: any, isSF3: any): Promise<Note>;
@@ -1 +1 @@
1
- {"version":3,"file":"midy-GMLite.d.ts","sourceRoot":"","sources":["../src/midy-GMLite.js"],"names":[],"mappings":"AAqBA;IAmBE;;;;;;;;;MASE;IAEF;;;;;;;MAOE;IAEF,+BAMC;IA5CD,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;IAuBhB,kBAAgC;IAChC,gBAA4C;IAE5C,gBAAiD;IAInD,4BAMC;IAED,mCASC;IAED,gDAMC;IAED,sCASC;IAED;;;;MAcC;IAED,yCAUC;IAED,+DAyBC;IAED,mEAWC;IAED,qDAOC;IAED,2EA+CC;IAED,mCAOC;IAED,0BA+CC;IAED,uDAEC;IAED,wDAEC;IAED;;;MA8DC;IAED,4BAsBC;IAED,uBAKC;IAED,aAGC;IAED,cAKC;IAED,wBAIC;IAED,0BAKC;IAED,wBAOC;IAED,sBAGC;IAED,uDASC;IAED,6CAQC;IAED,kDAGC;IAED,2BAEC;IAED,4BAEC;IAED,yCAEC;IAED,mFAGC;IAED,iDAiBC;IAED,iDAiCC;IAED,0DAmBC;IAED,wHA6BC;IAED,kGA6BC;IAED,0EAGC;IAED,sIA8CC;IAED,0FAGC;IAED,kEAeC;IAED,wFAiBC;IAED,4DAGC;IAED,qEAGC;IAED,uDAOC;IAED,mFA+BC;IAED,qCAcC;IAED,yDAIC;IACD,iDAIC;IAED;;;MAMC;IAED,2CAIC;IAED,yDAIC;IAED,mDAGC;IAED,sCAUC;IAED,sDAMC;IAED,oCAYC;IAED,gDAEC;IAED,gDAEC;IAED,mDAGC;IAED,oDAUC;IAED,kDAKC;IAED,iEAOC;IAED,uCAoBC;IAED,8CAEC;IAED,uCAoBC;IAED,4DAgBC;IAED,oBAQC;IAED,yDAaC;IAED,yCAGC;IAED,mCAQC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AAn/BD;IAOE,gFAKC;IAXD,kBAAa;IACb,cAAS;IACT,gBAAW;IACX,YAAO;IACP,gBAAW;IAGT,gBAA4B;IAC5B,cAAwB;IACxB,eAA0B;IAC1B,mBAAkC;CAErC"}
1
+ {"version":3,"file":"midy-GMLite.d.ts","sourceRoot":"","sources":["../src/midy-GMLite.js"],"names":[],"mappings":"AAqBA;IAmBE;;;;;;;;;MASE;IAEF;;;;;;;MAOE;IAEF,+BAMC;IA5CD,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;IAuBhB,kBAAgC;IAChC,gBAA4C;IAC5C,gBAAiD;IAKnD,4BAMC;IAED,mCASC;IAED,gDAMC;IAED,sCASC;IAED;;;;MAeC;IAED,yCAUC;IAED,+DAyBC;IAED,mEAWC;IAED,qDAOC;IAED,2EA+CC;IAED,mCAOC;IAED,0BA+CC;IAED,uDAEC;IAED,wDAEC;IAED;;;MA8DC;IAED,4BAsBC;IAED,uBAKC;IAED,aAGC;IAED,cAKC;IAED,wBAIC;IAED,0BAKC;IAED,wBAOC;IAED,sBAGC;IAED,uDASC;IAED,6CAQC;IAED,2BAEC;IAED,4BAEC;IAED,yCAEC;IAED,mFAGC;IAED,mCAcC;IAED,iDAiCC;IAED,0DAmBC;IAED,wHA6BC;IAED,kGA6BC;IAED,0EAGC;IAED,sIA8CC;IAED,0FAGC;IAED,kEAeC;IAED,wFAiBC;IAED,4DAGC;IAED,qEAGC;IAED,uDAOC;IAED,mFA+BC;IAED,qCAcC;IAED,yDAIC;IACD,iDAIC;IAED;;;MAMC;IAED,2CAIC;IAED,yDAIC;IAED,mDAGC;IAED,sCAUC;IAED,sDAMC;IAED,oCAYC;IAED,gDAEC;IAED,gDAEC;IAED,mDAGC;IAED,oDAUC;IAED,kDAKC;IAED,iEAOC;IAED,uCAoBC;IAED,8CAEC;IAED,uCAoBC;IAED,4DAgBC;IAED,oBAQC;IAED,yDAaC;IAED,yCAGC;IAED,mCAQC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AA5+BD;IAOE,gFAKC;IAXD,kBAAa;IACb,cAAS;IACT,gBAAW;IACX,YAAO;IACP,gBAAW;IAGT,gBAA4B;IAC5B,cAAwB;IACxB,eAA0B;IAC1B,mBAAkC;CAErC"}
@@ -144,8 +144,8 @@ export class MidyGMLite {
144
144
  });
145
145
  this.audioContext = audioContext;
146
146
  this.masterGain = new GainNode(audioContext);
147
- this.masterGain.connect(audioContext.destination);
148
147
  this.channels = this.createChannels(audioContext);
148
+ this.masterGain.connect(audioContext.destination);
149
149
  this.GM1SystemOn();
150
150
  }
151
151
  initSoundFontTable() {
@@ -189,6 +189,7 @@ export class MidyGMLite {
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);
192
193
  return {
193
194
  gainL,
194
195
  gainR,
@@ -491,10 +492,6 @@ export class MidyGMLite {
491
492
  }
492
493
  return noteList[0];
493
494
  }
494
- connectEffects(channel, gainNode) {
495
- gainNode.connect(channel.merger);
496
- merger.connect(this.masterGain);
497
- }
498
495
  cbToRatio(cb) {
499
496
  return Math.pow(10, cb / 200);
500
497
  }
@@ -508,14 +505,10 @@ export class MidyGMLite {
508
505
  return instrumentKey.playbackRate(noteNumber) *
509
506
  Math.pow(2, semitoneOffset / 12);
510
507
  }
511
- setVolumeEnvelope(channel, note) {
512
- const { instrumentKey, startTime, velocity } = note;
508
+ setVolumeEnvelope(note) {
509
+ const { instrumentKey, startTime } = note;
513
510
  note.gainNode = new GainNode(this.audioContext, { gain: 0 });
514
- let volume = (velocity / 127) * channel.volume * channel.expression;
515
- if (volume === 0)
516
- volume = 1e-6; // exponentialRampToValueAtTime() requires a non-zero value
517
- const attackVolume = this.cbToRatio(-instrumentKey.initialAttenuation) *
518
- volume;
511
+ const attackVolume = this.cbToRatio(-instrumentKey.initialAttenuation);
519
512
  const sustainVolume = attackVolume * (1 - instrumentKey.volSustain);
520
513
  const volDelay = startTime + instrumentKey.volDelay;
521
514
  const volAttack = volDelay + instrumentKey.volAttack;
@@ -575,7 +568,7 @@ export class MidyGMLite {
575
568
  const note = new Note(noteNumber, velocity, startTime, instrumentKey);
576
569
  note.bufferSource = await this.createNoteBufferNode(instrumentKey, isSF3);
577
570
  note.bufferSource.playbackRate.value = this.calcPlaybackRate(instrumentKey, noteNumber, semitoneOffset);
578
- this.setVolumeEnvelope(channel, note);
571
+ this.setVolumeEnvelope(note);
579
572
  this.setFilterEnvelope(channel, note);
580
573
  if (channel.modulation > 0) {
581
574
  const delayModLFO = startTime + instrumentKey.delayModLFO;
@@ -598,7 +591,8 @@ export class MidyGMLite {
598
591
  if (!instrumentKey)
599
592
  return;
600
593
  const note = await this.createNote(channel, instrumentKey, noteNumber, velocity, startTime, isSF3);
601
- this.connectEffects(channel, note.gainNode);
594
+ note.gainNode.connect(channel.gainL);
595
+ note.gainNode.connect(channel.gainR);
602
596
  const scheduledNotes = channel.scheduledNotes;
603
597
  if (scheduledNotes.has(noteNumber)) {
604
598
  scheduledNotes.get(noteNumber).push(note);
@@ -701,13 +695,13 @@ export class MidyGMLite {
701
695
  channel.program = program;
702
696
  }
703
697
  handlePitchBendMessage(channelNumber, lsb, msb) {
704
- const pitchBend = msb * 128 + lsb;
698
+ const pitchBend = msb * 128 + lsb - 8192;
705
699
  this.setPitchBend(channelNumber, pitchBend);
706
700
  }
707
701
  setPitchBend(channelNumber, pitchBend) {
708
702
  const channel = this.channels[channelNumber];
709
703
  const prevPitchBend = channel.pitchBend;
710
- channel.pitchBend = (pitchBend - 8192) / 8192;
704
+ channel.pitchBend = pitchBend / 8192;
711
705
  const detuneChange = (channel.pitchBend - prevPitchBend) *
712
706
  channel.pitchBendRange * 100;
713
707
  this.updateDetune(channel, detuneChange);
@@ -877,7 +871,7 @@ export class MidyGMLite {
877
871
  channel.scheduledNotes.forEach((noteList) => {
878
872
  const activeNote = this.getActiveNote(noteList, now);
879
873
  if (activeNote) {
880
- const notePromise = this.scheduleNoteRelease(channelNumber, noteNumber, velocity, now, stopPedal);
874
+ const notePromise = this.scheduleNoteRelease(channelNumber, activeNote.noteNumber, velocity, now, stopPedal);
881
875
  promises.push(notePromise);
882
876
  }
883
877
  });
package/esm/midy.d.ts CHANGED
@@ -93,6 +93,19 @@ export class Midy {
93
93
  };
94
94
  masterGain: any;
95
95
  channels: any[];
96
+ reverbEffect: {
97
+ input: any;
98
+ output: any;
99
+ };
100
+ chorusEffect: {
101
+ input: any;
102
+ output: any;
103
+ sendGain: any;
104
+ lfo: any;
105
+ lfoGain: any;
106
+ delayNodes: any[];
107
+ feedbackGains: any[];
108
+ };
96
109
  initSoundFontTable(): any[];
97
110
  addSoundFont(soundFont: any): void;
98
111
  loadSoundFont(soundFontUrl: any): Promise<void>;
@@ -101,19 +114,6 @@ export class Midy {
101
114
  gainL: any;
102
115
  gainR: any;
103
116
  merger: any;
104
- reverbEffect: {
105
- input: any;
106
- output: any;
107
- };
108
- chorusEffect: {
109
- input: any;
110
- output: any;
111
- sendGain: any;
112
- lfo: any;
113
- lfoGain: any;
114
- delayNodes: any[];
115
- feedbackGains: any[];
116
- };
117
117
  };
118
118
  createChannels(audioContext: any): any[];
119
119
  createNoteBuffer(instrumentKey: any, isSF3: any): Promise<any>;
@@ -147,7 +147,7 @@ export class Midy {
147
147
  createCombFilter(audioContext: any, input: any, delay: any, feedback: any): any;
148
148
  createAllpassFilter(audioContext: any, input: any, delay: any, feedback: any): any;
149
149
  generateDistributedArray(center: any, count: any, varianceRatio?: number, randomness?: number): any[];
150
- createSchroederReverb(audioContext: any, combDelays: any, combFeedbacks: any, allpassDelays: any, allpassFeedbacks: any): {
150
+ createSchroederReverb(audioContext: any, combFeedbacks: any, combDelays: any, allpassFeedbacks: any, allpassDelays: any): {
151
151
  input: any;
152
152
  output: any;
153
153
  };
@@ -160,12 +160,11 @@ export class Midy {
160
160
  delayNodes: any[];
161
161
  feedbackGains: any[];
162
162
  };
163
- connectEffects(channel: any, gainNode: any): void;
164
163
  cbToRatio(cb: any): number;
165
164
  centToHz(cent: any): number;
166
165
  calcSemitoneOffset(channel: any): any;
167
166
  calcPlaybackRate(instrumentKey: any, noteNumber: any, semitoneOffset: any): number;
168
- setVolumeEnvelope(channel: any, note: any): void;
167
+ setVolumeEnvelope(note: any): void;
169
168
  setFilterEnvelope(channel: any, note: any): void;
170
169
  startModulation(channel: any, note: any, time: any): void;
171
170
  startVibrato(channel: any, note: any, time: any): void;
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":"AAuBA;IAkCE;;;;;;;;;;;;;;;;;;;;MAoBE;IAEF;;;;;;;;;;;MAWE;IAEF;;;;;;;MAOE;IAgCF;;;;;OAWC;IAtHD,qBAAmB;IACnB,kBAAc;IACd,yBAAqB;IACrB,2BAAuB;IACvB;;;MAGE;IACF;;;;;;MAME;IACF,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;;;;;MA4BE;IAGA,kBAAgC;IAChC;;;;;MAAqD;IACrD,gBAA4C;IAC5C,gBAAiD;IACjD;;;MAA8D;IAC9D;;;;;;;;MAAyD;IAO3D,4BAMC;IAED,mCASC;IAED,gDAMC;IAED,sCASC;IAED;;;;MAeC;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,kFAuBC;IAED;;;;MAWC;IAED,gFAUC;IAED,mFAYC;IAED,sGAcC;IAID;;;MA+BC;IAED;;;;;;;;MA0CC;IAED,2BAEC;IAED,4BAEC;IAED,sCAKC;IAED,mFAGC;IAED,mCAcC;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;IAGD,oDAEC;IAED,mEAWC;IAED,mEAWC;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,yDAiDC;IAED,yCAGC;IAED,mCAQC;IAED,6CAGC;IAED,2CAMC;IAED,+CAGC;IAED,+CAMC;IAED,mDAeC;IAED,4CAOC;IAED,+BAKC;IAED,qDAiBC;IAED,gCAMC;IAED,kCAEC;IA6BD,4CAEC;IAED,4CAaC;IAED,+BAiBC;IAED,wFAKC;IAED,mCAQC;IAED,qCAEC;IAED,oCAUC;IAED,sCAEC;IAED,oCAaC;IAED,sCAEC;IAED,wCAWC;IAED,0CAEC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AA71DD;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"}