@marmooo/midy 0.1.0 → 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
@@ -56,6 +56,7 @@ export class MidyGM2 {
56
56
  modDepth: number;
57
57
  feedback: number;
58
58
  sendToReverb: number;
59
+ delayTimes: any[];
59
60
  };
60
61
  mono: boolean;
61
62
  omni: boolean;
@@ -89,6 +90,19 @@ export class MidyGM2 {
89
90
  };
90
91
  masterGain: any;
91
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
+ };
92
106
  initSoundFontTable(): any[];
93
107
  addSoundFont(soundFont: any): void;
94
108
  loadSoundFont(soundFontUrl: any): Promise<void>;
@@ -97,17 +111,6 @@ export class MidyGM2 {
97
111
  gainL: any;
98
112
  gainR: any;
99
113
  merger: any;
100
- reverbEffect: {
101
- input: any;
102
- output: any;
103
- };
104
- chorusEffect: {
105
- lfo: any;
106
- lfoGain: any;
107
- delayNodes: any[];
108
- chorusGains: any[];
109
- output: any;
110
- };
111
114
  };
112
115
  createChannels(audioContext: any): any[];
113
116
  createNoteBuffer(instrumentKey: any, isSF3: any): Promise<any>;
@@ -141,23 +144,24 @@ export class MidyGM2 {
141
144
  createCombFilter(audioContext: any, input: any, delay: any, feedback: any): any;
142
145
  createAllpassFilter(audioContext: any, input: any, delay: any, feedback: any): any;
143
146
  generateDistributedArray(center: any, count: any, varianceRatio?: number, randomness?: number): any[];
144
- createSchroederReverb(audioContext: any, combDelays: any, combFeedbacks: any, allpassDelays: any, allpassFeedbacks: any): {
147
+ createSchroederReverb(audioContext: any, combFeedbacks: any, combDelays: any, allpassFeedbacks: any, allpassDelays: any): {
145
148
  input: any;
146
149
  output: any;
147
150
  };
148
- createChorusEffect(audioContext: any, options?: {}): {
151
+ createChorusEffect(audioContext: any): {
152
+ input: any;
153
+ output: any;
154
+ sendGain: any;
149
155
  lfo: any;
150
156
  lfoGain: any;
151
157
  delayNodes: any[];
152
- chorusGains: any[];
153
- output: any;
158
+ feedbackGains: any[];
154
159
  };
155
- connectEffects(channel: any, gainNode: any): void;
156
160
  cbToRatio(cb: any): number;
157
161
  centToHz(cent: any): number;
158
162
  calcSemitoneOffset(channel: any): any;
159
163
  calcPlaybackRate(instrumentKey: any, noteNumber: any, semitoneOffset: any): number;
160
- setVolumeEnvelope(channel: any, note: any): void;
164
+ setVolumeEnvelope(note: any): void;
161
165
  setFilterEnvelope(channel: any, note: any): void;
162
166
  startModulation(channel: any, note: any, time: any): void;
163
167
  createNote(channel: any, instrumentKey: any, noteNumber: any, velocity: any, startTime: any, isSF3: any): Promise<Note>;
@@ -226,19 +230,24 @@ export class MidyGM2 {
226
230
  setMasterFineTuning(fineTuning: any): void;
227
231
  handleMasterCoarseTuningSysEx(data: any): void;
228
232
  setMasterCoarseTuning(coarseTuning: any): void;
229
- handleGlobalParameterControl(data: any): void;
230
- handleReverbParameter(data: any): void;
233
+ handleGlobalParameterControlSysEx(data: any): void;
234
+ handleReverbParameterSysEx(data: any): void;
231
235
  setReverbType(type: any): void;
232
236
  getReverbTimeFromType(type: any): number | undefined;
233
237
  setReverbTime(value: any): void;
234
238
  getReverbTime(value: any): number;
235
239
  calcDelay(rt60: any, feedback: any): number;
236
- handleChorusParameter(data: any): void;
240
+ handleChorusParameterSysEx(data: any): void;
237
241
  setChorusType(type: any): void;
242
+ setChorusParameter(modRate: any, modDepth: any, feedback: any, sendToReverb: any): void;
238
243
  setChorusModRate(value: any): void;
244
+ getChorusModRate(value: any): number;
239
245
  setChorusModDepth(value: any): void;
246
+ getChorusModDepth(value: any): number;
240
247
  setChorusFeedback(value: any): void;
248
+ getChorusFeedback(value: any): number;
241
249
  setChorusSendToReverb(value: any): void;
250
+ getChorusSendToReverb(value: any): number;
242
251
  handleExclusiveMessage(data: any): void;
243
252
  handleSysEx(data: any): void;
244
253
  scheduleTask(callback: any, startTime: any): Promise<any>;
@@ -1 +1 @@
1
- {"version":3,"file":"midy-GM2.d.ts","sourceRoot":"","sources":["../src/midy-GM2.js"],"names":[],"mappings":"AAuBA;IAiCE;;;;;;;;;;;;;;;;;MAiBE;IAEF;;;;;;;;;;;MAWE;IAEF;;;;;;;MAOE;IAgCF;;;;;OAOC;IA9GD,qBAAmB;IACnB,kBAAc;IACd,yBAAqB;IACrB,2BAAuB;IACvB;;;MAGE;IACF;;;;;MAKE;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;IA2ClB;;;;;MA4BE;IAGA,kBAAgC;IAChC;;;;;MAAqD;IACrD,gBAA4C;IAE5C,gBAAiD;IAInD,4BAMC;IAED,mCASC;IAED,gDAMC;IAED,sCASC;IAED;;;;;;;;;;;;;;;MAkBC;IAED,yCAcC;IAED,+DAyBC;IAED,mEAWC;IAED,qDAOC;IAED,2EAkDC;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;;;MAiCC;IAED;;;;;;MAoCC;IAED,kDAsBC;IAED,2BAEC;IAED,4BAEC;IAED,sCAKC;IAED,mFAGC;IAED,iDAiBC;IAED,iDAiCC;IAED,0DAmBC;IAED,wHAiCC;IAED,gDAQC;IAED,kGAgCC;IAED,0EAGC;IAED,sIAiDC;IAED,0FAGC;IAED,kEAeC;IAED,oEAYC;IAED,wFAmBC;IAED,4DAIC;IAED,+DAcC;IAED,qEAGC;IAED,uDAOC;IAED,mFAuDC;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,mEAOC;IAED,mEAIC;IAED,wDAWC;IAED,uDAGC;IAED,kFAeC;IAED,2DAMC;IAED,oCAqBC;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,8CAeC;IAED,uCAOC;IAED,+BAOC;IAED,qDAiBC;IAED,gCAMC;IAED,kCAEC;IA2BD,4CAEC;IAED,uCAaC;IAED,+BAEC;IAED,mCAEC;IAED,oCAEC;IAED,oCAEC;IAED,wCAEC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AAhsDD;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"}
1
+ {"version":3,"file":"midy-GM2.d.ts","sourceRoot":"","sources":["../src/midy-GM2.js"],"names":[],"mappings":"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"}