@marmooo/midy 0.0.5 → 0.0.7

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
@@ -41,8 +41,8 @@ export class MidyGM1 {
41
41
  masterGain: any;
42
42
  channels: {
43
43
  scheduledNotes: Map<any, any>;
44
- gainNode: any;
45
- pannerNode: any;
44
+ gainL: any;
45
+ gainR: any;
46
46
  expression: number;
47
47
  modulation: number;
48
48
  sustainPedal: boolean;
@@ -65,13 +65,13 @@ export class MidyGM1 {
65
65
  loadSoundFont(soundFontUrl: any): Promise<void>;
66
66
  loadMIDI(midiUrl: any): Promise<void>;
67
67
  setChannelAudioNodes(audioContext: any): {
68
- gainNode: any;
69
- pannerNode: any;
68
+ gainL: any;
69
+ gainR: any;
70
70
  };
71
71
  createChannels(audioContext: any): {
72
72
  scheduledNotes: Map<any, any>;
73
- gainNode: any;
74
- pannerNode: any;
73
+ gainL: any;
74
+ gainR: any;
75
75
  expression: number;
76
76
  modulation: number;
77
77
  sustainPedal: boolean;
@@ -128,17 +128,31 @@ export class MidyGM1 {
128
128
  handleMIDIMessage(statusByte: any, data1: any, data2: any): void | any[] | Promise<any>;
129
129
  handleProgramChange(channelNumber: any, program: any): void;
130
130
  handlePitchBendMessage(channelNumber: any, lsb: any, msb: any): void;
131
- handlePitchBend(channelNumber: any, pitchBend: any): void;
131
+ setPitchBend(channelNumber: any, pitchBend: any): void;
132
132
  handleControlChange(channelNumber: any, controller: any, value: any): void | any[];
133
133
  setModulation(channelNumber: any, modulation: any): void;
134
134
  setVolume(channelNumber: any, volume: any): void;
135
+ panToGain(pan: any): {
136
+ gainLeft: number;
137
+ gainRight: number;
138
+ };
135
139
  setPan(channelNumber: any, pan: any): void;
136
140
  setExpression(channelNumber: any, expression: any): void;
137
141
  updateChannelGain(channel: any): void;
138
142
  setSustainPedal(channelNumber: any, value: any): void;
143
+ limitData(channel: any, minMSB: any, maxMSB: any, minLSB: any, maxLSB: any): void;
144
+ limitDataMSB(channel: any, minMSB: any, maxMSB: any): void;
145
+ handleRPN(channelNumber: any): void;
139
146
  setRPNMSB(channelNumber: any, value: any): void;
140
147
  setRPNLSB(channelNumber: any, value: any): void;
141
148
  setDataEntry(channelNumber: any, value: any, isMSB: any): void;
149
+ updateDetune(channel: any, detuneChange: any): void;
150
+ handlePitchBendRangeMessage(channelNumber: any): void;
151
+ setPitchBendRange(channelNumber: any, pitchBendRange: any): void;
152
+ handleFineTuningMessage(channelNumber: any): void;
153
+ setFineTuning(channelNumber: any, fineTuning: any): void;
154
+ handleCoarseTuningMessage(channelNumber: any): void;
155
+ setCoarseTuning(channelNumber: any, coarseTuning: any): void;
142
156
  allSoundOff(channelNumber: any): any[];
143
157
  resetAllControllers(channelNumber: any): void;
144
158
  allNotesOff(channelNumber: any): any[];
@@ -146,7 +160,7 @@ export class MidyGM1 {
146
160
  GM1SystemOn(): void;
147
161
  handleUniversalRealTimeExclusiveMessage(data: any): void;
148
162
  handleMasterVolumeSysEx(data: any): void;
149
- handleMasterVolume(volume: any): void;
163
+ setMasterVolume(volume: any): void;
150
164
  handleExclusiveMessage(data: any): void;
151
165
  handleSysEx(data: any): void;
152
166
  scheduleTask(callback: any, startTime: any): Promise<any>;
@@ -158,8 +172,6 @@ declare class Note {
158
172
  filterNode: any;
159
173
  modLFO: any;
160
174
  modLFOGain: any;
161
- vibLFO: any;
162
- vibLFOGain: any;
163
175
  noteNumber: any;
164
176
  velocity: any;
165
177
  startTime: any;
@@ -1 +1 @@
1
- {"version":3,"file":"midy-GM1.d.ts","sourceRoot":"","sources":["../src/midy-GM1.js"],"names":[],"mappings":"AAuBA;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;;;;;;;;;;;;;;;;;;;;QAAiD;IAInD,4BAMC;IAED,mCASC;IAED,gDAMC;IAED,sCASC;IAED;;;MAaC;IAED;;;;;;;;;;;;;;;;;;;;QAUC;IAED,+DAyBC;IAED,mEAWC;IAED,qDAOC;IAED,2EA+CC;IAED,mCAOC;IAED,0BA+CC;IAED,uDAEC;IAED,wDAEC;IAED;;;MAyEC;IAED,4BAsBC;IAED,uBAKC;IAED,aAGC;IAED,cAKC;IAED,wBAIC;IAED,0BAKC;IAED,wBAOC;IAED,sBAGC;IAED,uDASC;IAED,6CAQC;IAED,sDAEC;IAED,2BAEC;IAED,4BAEC;IAED,sCAGC;IAED,mFAGC;IAED,iDAmBC;IAED,iDAiCC;IAED,0DAmBC;IAED,wHA6BC;IAED,kGA6BC;IAED,0EAGC;IAED,sIAmDC;IAED,0FAGC;IAED,kEAeC;IAED,wFAiBC;IAED,4DAGC;IAED,qEAGC;IAED,0DAiBC;IAED,mFA+BC;IAED,yDAiBC;IAED,iDAIC;IAED,2CAMC;IAED,yDAIC;IAED,sCAKC;IAED,sDAMC;IAED,gDAEC;IAED,gDAEC;IAED,+DAoBC;IAED,uCAoBC;IAED,8CAEC;IAED,uCAoBC;IAED,4DAgBC;IAED,oBAQC;IAED,yDAaC;IAED,yCAGC;IAED,sCAQC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AAv+BD;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-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;;;;;;;;;;;;;;;;;;;;QAAiD;IAInD,4BAMC;IAED,mCASC;IAED,gDAMC;IAED,sCASC;IAED;;;MAYC;IAED;;;;;;;;;;;;;;;;;;;;QAUC;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,sDAGC;IAED,2BAEC;IAED,4BAEC;IAED,sCAGC;IAED,mFAGC;IAED,iDAiBC;IAED,iDAiCC;IAED,0DAmBC;IAED,wHA6BC;IAED,kGA6BC;IAED,0EAGC;IAED,sIAmDC;IAED,0FAGC;IAED,kEAeC;IAED,wFAiBC;IAED,4DAGC;IAED,qEAGC;IAED,uDAOC;IAED,mFA+BC;IAED,yDAiBC;IAED,iDAIC;IAED;;;MAMC;IAED,2CAIC;IAED,yDAIC;IAED,sCAUC;IAED,sDAMC;IAED,kFAeC;IAED,2DAMC;IAED,oCAkBC;IAED,gDAEC;IAED,gDAEC;IAED,+DAIC;IAED,oDAUC;IAED,sDAKC;IAED,iEAOC;IAED,kDAKC;IAED,yDAGC;IAED,oDAKC;IAED,6DAGC;IAED,uCAoBC;IAED,8CAEC;IAED,uCAoBC;IAED,4DAgBC;IAED,oBAQC;IAED,yDAaC;IAED,yCAGC;IAED,mCAQC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AA1iCD;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
@@ -32,18 +32,6 @@ class Note {
32
32
  writable: true,
33
33
  value: void 0
34
34
  });
35
- Object.defineProperty(this, "vibLFO", {
36
- enumerable: true,
37
- configurable: true,
38
- writable: true,
39
- value: void 0
40
- });
41
- Object.defineProperty(this, "vibLFOGain", {
42
- enumerable: true,
43
- configurable: true,
44
- writable: true,
45
- value: void 0
46
- });
47
35
  this.noteNumber = noteNumber;
48
36
  this.velocity = velocity;
49
37
  this.startTime = startTime;
@@ -195,17 +183,16 @@ export class MidyGM1 {
195
183
  this.totalTime = this.calcTotalTime();
196
184
  }
197
185
  setChannelAudioNodes(audioContext) {
198
- const gainNode = new GainNode(audioContext, {
199
- gain: MidyGM1.channelSettings.volume,
200
- });
201
- const pannerNode = new StereoPannerNode(audioContext, {
202
- pan: MidyGM1.channelSettings.pan,
203
- });
204
- pannerNode.connect(gainNode);
205
- gainNode.connect(this.masterGain);
186
+ const { gainLeft, gainRight } = this.panToGain(MidyGM1.channelSettings.pan);
187
+ const gainL = new GainNode(audioContext, { gain: gainLeft });
188
+ const gainR = new GainNode(audioContext, { gain: gainRight });
189
+ const merger = new ChannelMergerNode(audioContext, { numberOfInputs: 2 });
190
+ gainL.connect(merger, 0, 0);
191
+ gainR.connect(merger, 0, 1);
192
+ merger.connect(this.masterGain);
206
193
  return {
207
- gainNode,
208
- pannerNode,
194
+ gainL,
195
+ gainR,
209
196
  };
210
197
  }
211
198
  createChannels(audioContext) {
@@ -290,7 +277,7 @@ export class MidyGM1 {
290
277
  this.handleProgramChange(event.channel, event.programNumber);
291
278
  break;
292
279
  case "pitchBend":
293
- this.handlePitchBend(event.channel, event.value);
280
+ this.setPitchBend(event.channel, event.value);
294
281
  break;
295
282
  case "sysEx":
296
283
  this.handleSysEx(event.data);
@@ -370,7 +357,6 @@ export class MidyGM1 {
370
357
  const tmpChannels = new Array(16);
371
358
  for (let i = 0; i < tmpChannels.length; i++) {
372
359
  tmpChannels[i] = {
373
- durationTicks: new Map(),
374
360
  programNumber: -1,
375
361
  bank: this.channels[i].bank,
376
362
  };
@@ -387,16 +373,6 @@ export class MidyGM1 {
387
373
  instruments.add(`${channel.bank}:0`);
388
374
  channel.programNumber = 0;
389
375
  }
390
- channel.durationTicks.set(event.noteNumber, {
391
- ticks: event.ticks,
392
- noteOn: event,
393
- });
394
- break;
395
- }
396
- case "noteOff": {
397
- const { ticks, noteOn } = tmpChannels[event.channel].durationTicks
398
- .get(event.noteNumber);
399
- noteOn.durationTicks = event.ticks - ticks;
400
376
  break;
401
377
  }
402
378
  case "programChange": {
@@ -410,8 +386,8 @@ export class MidyGM1 {
410
386
  });
411
387
  });
412
388
  const priority = {
413
- setTempo: 0,
414
- controller: 1,
389
+ controller: 0,
390
+ sysEx: 1,
415
391
  };
416
392
  timeline.sort((a, b) => {
417
393
  if (a.ticks !== b.ticks)
@@ -516,7 +492,8 @@ export class MidyGM1 {
516
492
  return noteList[0];
517
493
  }
518
494
  connectNoteEffects(channel, gainNode) {
519
- gainNode.connect(channel.pannerNode);
495
+ gainNode.connect(channel.gainL);
496
+ gainNode.connect(channel.gainR);
520
497
  }
521
498
  cbToRatio(cb) {
522
499
  return Math.pow(10, cb / 200);
@@ -534,9 +511,7 @@ export class MidyGM1 {
534
511
  }
535
512
  setVolumeEnvelope(channel, note) {
536
513
  const { instrumentKey, startTime, velocity } = note;
537
- note.gainNode = new GainNode(this.audioContext, {
538
- gain: 0,
539
- });
514
+ note.gainNode = new GainNode(this.audioContext, { gain: 0 });
540
515
  let volume = (velocity / 127) * channel.volume * channel.expression;
541
516
  if (volume === 0)
542
517
  volume = 1e-6; // exponentialRampToValueAtTime() requires a non-zero value
@@ -726,21 +701,15 @@ export class MidyGM1 {
726
701
  }
727
702
  handlePitchBendMessage(channelNumber, lsb, msb) {
728
703
  const pitchBend = msb * 128 + lsb;
729
- this.handlePitchBend(channelNumber, pitchBend);
704
+ this.setPitchBend(channelNumber, pitchBend);
730
705
  }
731
- handlePitchBend(channelNumber, pitchBend) {
732
- const now = this.audioContext.currentTime;
706
+ setPitchBend(channelNumber, pitchBend) {
733
707
  const channel = this.channels[channelNumber];
708
+ const prevPitchBend = channel.pitchBend;
734
709
  channel.pitchBend = (pitchBend - 8192) / 8192;
735
- const semitoneOffset = this.calcSemitoneOffset(channel);
736
- const activeNotes = this.getActiveNotes(channel, now);
737
- activeNotes.forEach((activeNote) => {
738
- const { bufferSource, instrumentKey, noteNumber } = activeNote;
739
- const playbackRate = calcPlaybackRate(instrumentKey, noteNumber, semitoneOffset);
740
- bufferSource.playbackRate
741
- .cancelScheduledValues(now)
742
- .setValueAtTime(playbackRate * pressure, now);
743
- });
710
+ const detuneChange = (channel.pitchBend - prevPitchBend) *
711
+ channel.pitchBendRange * 100;
712
+ this.updateDetune(channel, detuneChange);
744
713
  }
745
714
  handleControlChange(channelNumber, controller, value) {
746
715
  switch (controller) {
@@ -759,9 +728,9 @@ export class MidyGM1 {
759
728
  case 64:
760
729
  return this.setSustainPedal(channelNumber, value);
761
730
  case 100:
762
- return this.setRPNMSB(channelNumber, value);
763
- case 101:
764
731
  return this.setRPNLSB(channelNumber, value);
732
+ case 101:
733
+ return this.setRPNMSB(channelNumber, value);
765
734
  case 120:
766
735
  return this.allSoundOff(channelNumber);
767
736
  case 121:
@@ -793,12 +762,17 @@ export class MidyGM1 {
793
762
  channel.volume = volume / 127;
794
763
  this.updateChannelGain(channel);
795
764
  }
765
+ panToGain(pan) {
766
+ const theta = Math.PI / 2 * Math.max(0, pan - 1) / 126;
767
+ return {
768
+ gainLeft: Math.cos(theta),
769
+ gainRight: Math.sin(theta),
770
+ };
771
+ }
796
772
  setPan(channelNumber, pan) {
797
- const now = this.audioContext.currentTime;
798
773
  const channel = this.channels[channelNumber];
799
- channel.pan = pan / 127 * 2 - 1; // -1 (left) - +1 (right)
800
- channel.pannerNode.pan.cancelScheduledValues(now);
801
- channel.pannerNode.pan.setValueAtTime(channel.pan, now);
774
+ channel.pan = pan;
775
+ this.updateChannelGain(channel);
802
776
  }
803
777
  setExpression(channelNumber, expression) {
804
778
  const channel = this.channels[channelNumber];
@@ -808,8 +782,13 @@ export class MidyGM1 {
808
782
  updateChannelGain(channel) {
809
783
  const now = this.audioContext.currentTime;
810
784
  const volume = channel.volume * channel.expression;
811
- channel.gainNode.gain.cancelScheduledValues(now);
812
- channel.gainNode.gain.setValueAtTime(volume, now);
785
+ const { gainLeft, gainRight } = this.panToGain(channel.pan);
786
+ channel.gainL.gain
787
+ .cancelScheduledValues(now)
788
+ .setValueAtTime(volume * gainLeft, now);
789
+ channel.gainR.gain
790
+ .cancelScheduledValues(now)
791
+ .setValueAtTime(volume * gainRight, now);
813
792
  }
814
793
  setSustainPedal(channelNumber, value) {
815
794
  const isOn = value >= 64;
@@ -818,31 +797,105 @@ export class MidyGM1 {
818
797
  this.releaseSustainPedal(channelNumber, value);
819
798
  }
820
799
  }
821
- setRPNMSB(channelNumber, value) {
822
- this.channels[channelNumber].rpnMSB = value;
800
+ limitData(channel, minMSB, maxMSB, minLSB, maxLSB) {
801
+ if (maxLSB < channel.dataLSB) {
802
+ channel.dataMSB++;
803
+ channel.dataLSB = minLSB;
804
+ }
805
+ else if (channel.dataLSB < 0) {
806
+ channel.dataMSB--;
807
+ channel.dataLSB = maxLSB;
808
+ }
809
+ if (maxMSB < channel.dataMSB) {
810
+ channel.dataMSB = maxMSB;
811
+ channel.dataLSB = maxLSB;
812
+ }
813
+ else if (channel.dataMSB < 0) {
814
+ channel.dataMSB = minMSB;
815
+ channel.dataLSB = minLSB;
816
+ }
823
817
  }
824
- setRPNLSB(channelNumber, value) {
825
- this.channels[channelNumber].rpnLSB = value;
818
+ limitDataMSB(channel, minMSB, maxMSB) {
819
+ if (maxMSB < channel.dataMSB) {
820
+ channel.dataMSB = maxMSB;
821
+ }
822
+ else if (channel.dataMSB < 0) {
823
+ channel.dataMSB = minMSB;
824
+ }
826
825
  }
827
- setDataEntry(channelNumber, value, isMSB) {
826
+ handleRPN(channelNumber) {
828
827
  const channel = this.channels[channelNumber];
829
828
  const rpn = channel.rpnMSB * 128 + channel.rpnLSB;
830
- isMSB ? channel.dataMSB = value : channel.dataLSB = value;
831
- const { dataMSB, dataLSB } = channel;
832
829
  switch (rpn) {
833
830
  case 0:
834
- channel.pitchBendRange = dataMSB + dataLSB / 100;
831
+ this.handlePitchBendRangeMessage(channelNumber);
835
832
  break;
836
833
  case 1:
837
- channel.fineTuning = (dataMSB * 128 + dataLSB - 8192) / 8192;
834
+ this.handleFineTuningMessage(channelNumber);
838
835
  break;
839
836
  case 2:
840
- channel.coarseTuning = dataMSB - 64;
837
+ this.handleCoarseTuningMessage(channelNumber);
841
838
  break;
842
839
  default:
843
840
  console.warn(`Channel ${channelNumber}: Unsupported RPN MSB=${channel.rpnMSB} LSB=${channel.rpnLSB}`);
844
841
  }
845
842
  }
843
+ setRPNMSB(channelNumber, value) {
844
+ this.channels[channelNumber].rpnMSB = value;
845
+ }
846
+ setRPNLSB(channelNumber, value) {
847
+ this.channels[channelNumber].rpnLSB = value;
848
+ }
849
+ setDataEntry(channelNumber, value, isMSB) {
850
+ const channel = this.channels[channelNumber];
851
+ isMSB ? channel.dataMSB = value : channel.dataLSB = value;
852
+ this.handleRPN(channelNumber);
853
+ }
854
+ updateDetune(channel, detuneChange) {
855
+ const now = this.audioContext.currentTime;
856
+ const activeNotes = this.getActiveNotes(channel, now);
857
+ activeNotes.forEach((activeNote) => {
858
+ const { bufferSource } = activeNote;
859
+ const detune = bufferSource.detune.value + detuneChange;
860
+ bufferSource.detune
861
+ .cancelScheduledValues(now)
862
+ .setValueAtTime(detune, now);
863
+ });
864
+ }
865
+ handlePitchBendRangeMessage(channelNumber) {
866
+ const channel = this.channels[channelNumber];
867
+ this.limitData(channel, 0, 127, 0, 99);
868
+ const pitchBendRange = channel.dataMSB + channel.dataLSB / 100;
869
+ this.setPitchBendRange(channelNumber, pitchBendRange);
870
+ }
871
+ setPitchBendRange(channelNumber, pitchBendRange) {
872
+ const channel = this.channels[channelNumber];
873
+ const prevPitchBendRange = channel.pitchBendRange;
874
+ channel.pitchBendRange = pitchBendRange;
875
+ const detuneChange = (channel.pitchBendRange - prevPitchBendRange) *
876
+ channel.pitchBend * 100;
877
+ this.updateDetune(channel, detuneChange);
878
+ }
879
+ handleFineTuningMessage(channelNumber) {
880
+ const channel = this.channels[channelNumber];
881
+ this.limitData(channel, 0, 127, 0, 127);
882
+ const fineTuning = (channel.dataMSB * 128 + channel.dataLSB - 8192) / 8192;
883
+ this.setFineTuning(channelNumber, fineTuning);
884
+ }
885
+ setFineTuning(channelNumber, fineTuning) {
886
+ const channel = this.channels[channelNumber];
887
+ channel.fineTuning = fineTuning;
888
+ }
889
+ handleCoarseTuningMessage(channelNumber) {
890
+ const channel = this.channels[channelNumber];
891
+ this.limitDataMSB(channel, 0, 127);
892
+ const coarseTuning = channel.dataMSB - 64;
893
+ this.setFineTuning(channelNumber, coarseTuning);
894
+ }
895
+ setCoarseTuning(channelNumber, coarseTuning) {
896
+ const channel = this.channels[channelNumber];
897
+ channel.fineTuning = coarseTuning;
898
+ }
846
899
  allSoundOff(channelNumber) {
847
900
  const now = this.audioContext.currentTime;
848
901
  const channel = this.channels[channelNumber];
@@ -918,9 +971,9 @@ export class MidyGM1 {
918
971
  }
919
972
  handleMasterVolumeSysEx(data) {
920
973
  const volume = (data[5] * 128 + data[4]) / 16383;
921
- this.handleMasterVolume(volume);
974
+ this.setMasterVolume(volume);
922
975
  }
923
- handleMasterVolume(volume) {
976
+ setMasterVolume(volume) {
924
977
  if (volume < 0 && 1 < volume) {
925
978
  console.error("Master Volume is out of range");
926
979
  }
@@ -961,7 +1014,7 @@ Object.defineProperty(MidyGM1, "channelSettings", {
961
1014
  writable: true,
962
1015
  value: {
963
1016
  volume: 100 / 127,
964
- pan: 0,
1017
+ pan: 64,
965
1018
  bank: 0,
966
1019
  dataMSB: 0,
967
1020
  dataLSB: 0,
package/esm/midy-GM2.d.ts CHANGED
@@ -73,8 +73,8 @@ export class MidyGM2 {
73
73
  lfoFilterDepth: number;
74
74
  lfoAmplitudeDepth: number;
75
75
  };
76
- gainNode: any;
77
- pannerNode: any;
76
+ gainL: any;
77
+ gainR: any;
78
78
  reverbEffect: {
79
79
  convolverNode: any;
80
80
  dryGain: any;
@@ -117,8 +117,8 @@ export class MidyGM2 {
117
117
  loadSoundFont(soundFontUrl: any): Promise<void>;
118
118
  loadMIDI(midiUrl: any): Promise<void>;
119
119
  setChannelAudioNodes(audioContext: any): {
120
- gainNode: any;
121
- pannerNode: any;
120
+ gainL: any;
121
+ gainR: any;
122
122
  reverbEffect: {
123
123
  convolverNode: any;
124
124
  dryGain: any;
@@ -142,8 +142,8 @@ export class MidyGM2 {
142
142
  lfoFilterDepth: number;
143
143
  lfoAmplitudeDepth: number;
144
144
  };
145
- gainNode: any;
146
- pannerNode: any;
145
+ gainL: any;
146
+ gainR: any;
147
147
  reverbEffect: {
148
148
  convolverNode: any;
149
149
  dryGain: any;
@@ -234,12 +234,16 @@ export class MidyGM2 {
234
234
  handleProgramChange(channelNumber: any, program: any): void;
235
235
  handleChannelPressure(channelNumber: any, pressure: any): void;
236
236
  handlePitchBendMessage(channelNumber: any, lsb: any, msb: any): void;
237
- handlePitchBend(channelNumber: any, pitchBend: any): void;
237
+ setPitchBend(channelNumber: any, pitchBend: any): void;
238
238
  handleControlChange(channelNumber: any, controller: any, value: any): void | any[];
239
239
  setBankMSB(channelNumber: any, msb: any): void;
240
240
  setModulation(channelNumber: any, modulation: any): void;
241
241
  setPortamentoTime(channelNumber: any, portamentoTime: any): void;
242
242
  setVolume(channelNumber: any, volume: any): void;
243
+ panToGain(pan: any): {
244
+ gainLeft: number;
245
+ gainRight: number;
246
+ };
243
247
  setPan(channelNumber: any, pan: any): void;
244
248
  setExpression(channelNumber: any, expression: any): void;
245
249
  setBankLSB(channelNumber: any, lsb: any): void;
@@ -250,9 +254,19 @@ export class MidyGM2 {
250
254
  setChorus(channelNumber: any, chorus: any): void;
251
255
  setSostenutoPedal(channelNumber: any, value: any): void;
252
256
  setSoftPedal(channelNumber: any, softPedal: any): void;
257
+ limitData(channel: any, minMSB: any, maxMSB: any, minLSB: any, maxLSB: any): void;
258
+ limitDataMSB(channel: any, minMSB: any, maxMSB: any): void;
259
+ handleRPN(channelNumber: any, value: any): void;
253
260
  setRPNMSB(channelNumber: any, value: any): void;
254
261
  setRPNLSB(channelNumber: any, value: any): void;
255
262
  setDataEntry(channelNumber: any, value: any, isMSB: any): void;
263
+ updateDetune(channel: any, detuneChange: any): void;
264
+ handlePitchBendRangeMessage(channelNumber: any): void;
265
+ setPitchBendRange(channelNumber: any, pitchBendRange: any): void;
266
+ handleFineTuningMessage(channelNumber: any): void;
267
+ setFineTuning(channelNumber: any, fineTuning: any): void;
268
+ handleCoarseTuningMessage(channelNumber: any): void;
269
+ setCoarseTuning(channelNumber: any, coarseTuning: any): void;
256
270
  allSoundOff(channelNumber: any): any[];
257
271
  resetAllControllers(channelNumber: any): void;
258
272
  allNotesOff(channelNumber: any): any[];
@@ -265,11 +279,11 @@ export class MidyGM2 {
265
279
  GM2SystemOn(): void;
266
280
  handleUniversalRealTimeExclusiveMessage(data: any): void;
267
281
  handleMasterVolumeSysEx(data: any): void;
268
- handleMasterVolume(volume: any): void;
282
+ setMasterVolume(volume: any): void;
269
283
  handleMasterFineTuningSysEx(data: any): void;
270
- handleMasterFineTuning(fineTuning: any): void;
284
+ setMasterFineTuning(fineTuning: any): void;
271
285
  handleMasterCoarseTuningSysEx(data: any): void;
272
- handleMasterCoarseTuning(coarseTuning: any): void;
286
+ setMasterCoarseTuning(coarseTuning: any): void;
273
287
  handleExclusiveMessage(data: any): void;
274
288
  handleSysEx(data: any): void;
275
289
  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;IAwBE;;;;;;;;;;;;;;;;;MAiBE;IAEF;;;;;;;;;;;MAWE;IAEF;;;;;;;MAOE;IAEF,+BAMC;IAtED,qBAAmB;IACnB,kBAAc;IACd,qBAAmB;IACnB,yBAAqB;IACrB,2BAAuB;IACvB,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;IA4ChB,kBAAgC;IAChC,gBAA4C;IAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAAiD;IAInD,4BAMC;IAED,mCASC;IAED,gDAMC;IAED,sCASC;IAED;;;;;;;;;;;;;;MAoBC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAcC;IAED,+DAyBC;IAED,mEAWC;IAED,qDAOC;IAED,2EAkDC;IAED,mCAOC;IAED,0BA+CC;IAED,uDAEC;IAED,wDAEC;IAED;;;MA2GC;IAED,4BAsBC;IAED,uBAKC;IAED,aAGC;IAED,cAKC;IAED,wBAIC;IAED,0BAKC;IAED,wBAOC;IAED,sBAGC;IAED,uDASC;IAED,6CAQC;IAED;;;;MAoCC;IAED;;;;;MA2CC;IAED,sDA2BC;IAED,2BAEC;IAED,4BAEC;IAED,sCAKC;IAED,mFAGC;IAED,iDAmBC;IAED,iDAiCC;IAED,0DAmBC;IAED,wHAiCC;IAED,gDAQC;IAED,kGAgCC;IAED,0EAGC;IAED,sIAoDC;IAED,0FAGC;IAED,kEAeC;IAED,oEAYC;IAED,wFAmBC;IAED,4DAIC;IAED,+DAcC;IAED,qEAGC;IAED,0DAiBC;IAED,mFAuDC;IAED,+CAEC;IAED,yDAiBC;IAED,iEAEC;IAED,iDAIC;IAED,2CAMC;IAED,yDAIC;IAED,+CAEC;IAED,sCAKC;IAED,sDAMC;IAED,oDAEC;IAED,iDASC;IAED,iDAIC;IAED,wDAUC;IAED,uDAGC;IAED,gDAEC;IAED,gDAEC;IAED,+DAuBC;IAED,uCAoBC;IAED,8CAEC;IAED,uCAoBC;IAED,gBAEC;IAED,eAEC;IAED,eAEC;IAED,eAEC;IAED,4DAmBC;IAED,oBAQC;IAED,oBAQC;IAED,yDAgDC;IAED,yCAGC;IAED,sCAQC;IAED,6CAGC;IAED,8CAMC;IAED,+CAGC;IAED,kDAMC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AAv3CD;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":"AAuBA;IAwBE;;;;;;;;;;;;;;;;;MAiBE;IAEF;;;;;;;;;;;MAWE;IAEF;;;;;;;MAOE;IAEF,+BAMC;IAtED,qBAAmB;IACnB,kBAAc;IACd,qBAAmB;IACnB,yBAAqB;IACrB,2BAAuB;IACvB,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;IA4ChB,kBAAgC;IAChC,gBAA4C;IAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAAiD;IAInD,4BAMC;IAED,mCASC;IAED,gDAMC;IAED,sCASC;IAED;;;;;;;;;;;;;;MAqBC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAcC;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;;;;MAoCC;IAED;;;;;MAqCC;IAED,sDA6BC;IAED,2BAEC;IAED,4BAEC;IAED,sCAKC;IAED,mFAGC;IAED,iDAiBC;IAED,iDAiCC;IAED,0DAmBC;IAED,wHAiCC;IAED,gDAQC;IAED,kGAgCC;IAED,0EAGC;IAED,sIAoDC;IAED,0FAGC;IAED,kEAeC;IAED,oEAYC;IAED,wFAmBC;IAED,4DAIC;IAED,+DAcC;IAED,qEAGC;IAED,uDAOC;IAED,mFAuDC;IAED,+CAEC;IAED,yDAiBC;IAED,iEAEC;IAED,iDAIC;IAED;;;MAMC;IAED,2CAIC;IAED,yDAIC;IAED,+CAEC;IAED,sCAUC;IAED,sDAMC;IAED,oDAEC;IAED,iDASC;IAED,iDAIC;IAED,wDAWC;IAED,uDAGC;IAED,kFAeC;IAED,2DAMC;IAED,gDAqBC;IAED,gDAEC;IAED,gDAEC;IAED,+DAIC;IAED,oDAUC;IAED,sDAKC;IAED,iEAOC;IAED,kDAKC;IAED,yDAGC;IAED,oDAKC;IAED,6DAGC;IAED,uCAoBC;IAED,8CAEC;IAED,uCAoBC;IAED,gBAEC;IAED,eAEC;IAED,eAEC;IAED,eAEC;IAED,4DAmBC;IAED,oBAQC;IAED,oBAQC;IAED,yDAgDC;IAED,yCAGC;IAED,mCAQC;IAED,6CAGC;IAED,2CAMC;IAED,+CAGC;IAED,+CAMC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AA17CD;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"}