@marmooo/midy 0.2.1 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marmooo/midy",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "A MIDI player/synthesizer written in JavaScript that supports GM-Lite/GM1 and SF2/SF3.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -32,12 +32,12 @@ export class MidyGM1 {
32
32
  notePromises: any[];
33
33
  exclusiveClassMap: Map<any, any>;
34
34
  audioContext: any;
35
- masterGain: any;
35
+ masterVolume: any;
36
36
  voiceParamsHandlers: {
37
37
  modLfoToPitch: (channel: any, note: any, _prevValue: any) => void;
38
38
  vibLfoToPitch: (channel: any, note: any, _prevValue: any) => void;
39
39
  modLfoToFilterFc: (channel: any, note: any, _prevValue: any) => void;
40
- modLfoToVolume: (channel: any, note: any) => void;
40
+ modLfoToVolume: (channel: any, note: any, _prevValue: any) => void;
41
41
  chorusEffectsSend: (_channel: any, _note: any, _prevValue: any) => void;
42
42
  reverbEffectsSend: (_channel: any, _note: any, _prevValue: any) => void;
43
43
  delayModLFO: (_channel: any, note: any, _prevValue: any) => void;
@@ -124,7 +124,7 @@ export class MidyGM1 {
124
124
  modLfoToPitch: (channel: any, note: any, _prevValue: any) => void;
125
125
  vibLfoToPitch: (channel: any, note: any, _prevValue: any) => void;
126
126
  modLfoToFilterFc: (channel: any, note: any, _prevValue: any) => void;
127
- modLfoToVolume: (channel: any, note: any) => void;
127
+ modLfoToVolume: (channel: any, note: any, _prevValue: any) => void;
128
128
  chorusEffectsSend: (_channel: any, _note: any, _prevValue: any) => void;
129
129
  reverbEffectsSend: (_channel: any, _note: any, _prevValue: any) => void;
130
130
  delayModLFO: (_channel: any, note: any, _prevValue: any) => void;
@@ -132,7 +132,7 @@ export class MidyGM1 {
132
132
  delayVibLFO: (channel: any, note: any, prevValue: any) => void;
133
133
  freqVibLFO: (channel: any, note: any, _prevValue: any) => void;
134
134
  };
135
- getControllerState(channel: any, noteNumber: any, velocity: any): Float32Array;
135
+ getControllerState(channel: any, noteNumber: any, velocity: any): Float32Array<any>;
136
136
  applyVoiceParams(channel: any, controllerType: any): void;
137
137
  createControlChangeHandlers(): {
138
138
  1: (channelNumber: any, modulation: any) => void;
@@ -189,7 +189,7 @@ declare class Note {
189
189
  constructor(noteNumber: any, velocity: any, startTime: any, voice: any, voiceParams: any);
190
190
  bufferSource: any;
191
191
  filterNode: any;
192
- volumeNode: any;
192
+ volumeEnvelopeNode: any;
193
193
  volumeDepth: any;
194
194
  modulationLFO: any;
195
195
  modulationDepth: any;
@@ -1 +1 @@
1
- {"version":3,"file":"midy-GM1.d.ts","sourceRoot":"","sources":["../src/midy-GM1.js"],"names":[],"mappings":"AAqFA;IAoBE;;;;;;;;;;;;MAYE;IAEF,+BAQC;IAzCD,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;IAClB,iCAA8B;IAiB5B,kBAAgC;IAChC,gBAA4C;IAC5C;;;;;;;;;;;MAA2D;IAC3D;;;;;;;;;;;;;MAA+D;IAC/D,gBAAiD;IAKnD,4BAMC;IAED,mCAWC;IAED,gDAMC;IAED,sCASC;IAED;;;;MAeC;IAED,yCAUC;IAED,6DA2BC;IAED,iEAUC;IAED,2EA+CC;IAED,mCAOC;IAED,0BAkDC;IAED,uDAEC;IAED,wDAEC;IAED;;;MAgEC;IAED,+EAmBC;IAED,qDAKC;IAED,uBAKC;IAED,aAGC;IAED,cAKC;IAED,wBAIC;IAED,0BAKC;IAED,wBAOC;IAED,sBAGC;IAED,uDASC;IAED,6CAQC;IAED,2BAEC;IAED,8BAEC;IAED,8BAEC;IAED,4BAEC;IAED,qCAMC;IAED,iCAWC;IAED,mCAgBC;IAED,kCAqBC;IAED,6CAIC;IAED,mCAuBC;IAED,+DAoBC;IAED,gHA2BC;IAED,kGAgDC;IAED,0EAGC;IAED,qFA4BC;IAED,6HAuBC;IAED,0FAGC;IAED,kEAeC;IAED,gFAiBC;IAED,4DAGC;IAED,qEAGC;IAED,mDASC;IAED,gDASC;IAED,gDASC;IAED,qCAMC;IAED,mCAQC;IAED,gCAOC;IAED,+BAMC;IAED;;;;;;;;;;;MA2CC;IAED,+EAMC;IAED,0DA6CC;IAED;;;;;;;;;;;;;MAeC;IAED,+EASC;IAED,qCAiBC;IAED,8DAKC;IACD,iDAIC;IAED;;;MAMC;IAED,2CAIC;IAED,yDAIC;IAED,mDAGC;IAED,wCAWC;IAED,sDAKC;IAED,kFAeC;IAED,2DAMC;IAED,oCAkBC;IAED,gDAEC;IAED,gDAEC;IAED,mDAGC;IAED,kDAKC;IAED,wDASC;IAED,8CAKC;IAED,oDAOC;IAED,gDAKC;IAED,sDAOC;IAED,+CAEC;IAED,8CAqBC;IAED,+CAEC;IAED,4DAgBC;IAED,oBAMC;IAED,yDAaC;IAED,yCAGC;IAED,mCAQC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AAjzCD;IAUE,0FAMC;IAfD,kBAAa;IACb,gBAAW;IACX,gBAAW;IACX,iBAAY;IACZ,mBAAc;IACd,qBAAgB;IAChB,gBAAW;IACX,kBAAa;IAGX,gBAA4B;IAC5B,cAAwB;IACxB,eAA0B;IAC1B,WAAkB;IAClB,iBAA8B;CAEjC"}
1
+ {"version":3,"file":"midy-GM1.d.ts","sourceRoot":"","sources":["../src/midy-GM1.js"],"names":[],"mappings":"AAqFA;IAoBE;;;;;;;;;;;;MAYE;IAEF,+BAQC;IAzCD,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;IAClB,iCAA8B;IAiB5B,kBAAgC;IAChC,kBAA8C;IAC9C;;;;;;;;;;;MAA2D;IAC3D;;;;;;;;;;;;;MAA+D;IAC/D,gBAAiD;IAKnD,4BAMC;IAED,mCAWC;IAED,gDAMC;IAED,sCASC;IAED;;;;MAeC;IAED,yCAUC;IAED,6DA2BC;IAED,iEAUC;IAED,2EA+CC;IAED,mCAOC;IAED,0BAkDC;IAED,uDAEC;IAED,wDAEC;IAED;;;MAgEC;IAED,+EAmBC;IAED,qDAKC;IAED,uBAKC;IAED,aAGC;IAED,cAKC;IAED,wBAIC;IAED,0BAKC;IAED,wBAOC;IAED,sBAGC;IAED,uDASC;IAED,6CAQC;IAED,2BAEC;IAED,8BAEC;IAED,8BAEC;IAED,4BAEC;IAED,qCAMC;IAED,iCAWC;IAED,mCAgBC;IAED,kCAqBC;IAED,6CAIC;IAED,mCAuBC;IAED,+DAoBC;IAED,gHA2BC;IAED,kGAgDC;IAED,0EAGC;IAED,qFA4BC;IAED,6HAuBC;IAED,0FAGC;IAED,kEAeC;IAED,gFAiBC;IAED,4DAGC;IAED,qEAGC;IAED,mDASC;IAED,gDASC;IAED,gDASC;IAED,qCAMC;IAED,mCAQC;IAED,gCAOC;IAED,+BAMC;IAED;;;;;;;;;;;MA4CC;IAED,oFAMC;IAED,0DA6CC;IAED;;;;;;;;;;;;;MAeC;IAED,+EAWC;IAED,qCAeC;IAED,8DAIC;IACD,iDAIC;IAED;;;MAMC;IAED,2CAIC;IAED,yDAIC;IAED,mDAGC;IAED,wCAWC;IAED,sDAKC;IAED,kFAeC;IAED,2DAMC;IAED,oCAkBC;IAED,gDAEC;IAED,gDAEC;IAED,mDAGC;IAED,kDAKC;IAED,wDASC;IAED,8CAKC;IAED,oDAOC;IAED,gDAKC;IAED,sDAOC;IAED,+CAEC;IAED,8CAqBC;IAED,+CAEC;IAED,4DAgBC;IAED,oBAMC;IAED,yDAaC;IAED,yCAGC;IAED,mCAQC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AAjzCD;IAUE,0FAMC;IAfD,kBAAa;IACb,gBAAW;IACX,wBAAmB;IACnB,iBAAY;IACZ,mBAAc;IACd,qBAAgB;IAChB,gBAAW;IACX,kBAAa;IAGX,gBAA4B;IAC5B,cAAwB;IACxB,eAA0B;IAC1B,WAAkB;IAClB,iBAA8B;CAEjC"}
@@ -17,7 +17,7 @@ class Note {
17
17
  writable: true,
18
18
  value: void 0
19
19
  });
20
- Object.defineProperty(this, "volumeNode", {
20
+ Object.defineProperty(this, "volumeEnvelopeNode", {
21
21
  enumerable: true,
22
22
  configurable: true,
23
23
  writable: true,
@@ -236,11 +236,11 @@ class MidyGM1 {
236
236
  value: new Map()
237
237
  });
238
238
  this.audioContext = audioContext;
239
- this.masterGain = new GainNode(audioContext);
239
+ this.masterVolume = new GainNode(audioContext);
240
240
  this.voiceParamsHandlers = this.createVoiceParamsHandlers();
241
241
  this.controlChangeHandlers = this.createControlChangeHandlers();
242
242
  this.channels = this.createChannels(audioContext);
243
- this.masterGain.connect(audioContext.destination);
243
+ this.masterVolume.connect(audioContext.destination);
244
244
  this.GM1SystemOn();
245
245
  }
246
246
  initSoundFontTable() {
@@ -286,7 +286,7 @@ class MidyGM1 {
286
286
  const merger = new ChannelMergerNode(audioContext, { numberOfInputs: 2 });
287
287
  gainL.connect(merger, 0, 0);
288
288
  gainR.connect(merger, 0, 1);
289
- merger.connect(this.masterGain);
289
+ merger.connect(this.masterVolume);
290
290
  return {
291
291
  gainL,
292
292
  gainR,
@@ -634,7 +634,7 @@ class MidyGM1 {
634
634
  const volAttack = volDelay + voiceParams.volAttack;
635
635
  const volHold = volAttack + voiceParams.volHold;
636
636
  const volDecay = volHold + voiceParams.volDecay;
637
- note.volumeNode.gain
637
+ note.volumeEnvelopeNode.gain
638
638
  .cancelScheduledValues(now)
639
639
  .setValueAtTime(0, startTime)
640
640
  .setValueAtTime(1e-6, volDelay) // exponentialRampToValueAtTime() requires a non-zero value
@@ -710,14 +710,14 @@ class MidyGM1 {
710
710
  note.modulationLFO.connect(note.modulationDepth);
711
711
  note.modulationDepth.connect(note.bufferSource.detune);
712
712
  note.modulationLFO.connect(note.volumeDepth);
713
- note.volumeDepth.connect(note.volumeNode.gain);
713
+ note.volumeDepth.connect(note.volumeEnvelopeNode.gain);
714
714
  }
715
715
  async createNote(channel, voice, noteNumber, velocity, startTime, isSF3) {
716
716
  const state = channel.state;
717
717
  const voiceParams = voice.getAllParams(state.array);
718
718
  const note = new Note(noteNumber, velocity, startTime, voice, voiceParams);
719
719
  note.bufferSource = await this.createNoteBufferNode(voiceParams, isSF3);
720
- note.volumeNode = new GainNode(this.audioContext);
720
+ note.volumeEnvelopeNode = new GainNode(this.audioContext);
721
721
  note.filterNode = new BiquadFilterNode(this.audioContext, {
722
722
  type: "lowpass",
723
723
  Q: voiceParams.initialFilterQ / 10, // dB
@@ -729,7 +729,7 @@ class MidyGM1 {
729
729
  this.startModulation(channel, note, startTime);
730
730
  }
731
731
  note.bufferSource.connect(note.filterNode);
732
- note.filterNode.connect(note.volumeNode);
732
+ note.filterNode.connect(note.volumeEnvelopeNode);
733
733
  note.bufferSource.start(startTime);
734
734
  return note;
735
735
  }
@@ -745,8 +745,8 @@ class MidyGM1 {
745
745
  if (!voice)
746
746
  return;
747
747
  const note = await this.createNote(channel, voice, noteNumber, velocity, startTime, isSF3);
748
- note.volumeNode.connect(channel.gainL);
749
- note.volumeNode.connect(channel.gainR);
748
+ note.volumeEnvelopeNode.connect(channel.gainL);
749
+ note.volumeEnvelopeNode.connect(channel.gainR);
750
750
  const exclusiveClass = note.voiceParams.exclusiveClass;
751
751
  if (exclusiveClass !== 0) {
752
752
  if (this.exclusiveClassMap.has(exclusiveClass)) {
@@ -774,7 +774,7 @@ class MidyGM1 {
774
774
  }
775
775
  stopNote(endTime, stopTime, scheduledNotes, index) {
776
776
  const note = scheduledNotes[index];
777
- note.volumeNode.gain
777
+ note.volumeEnvelopeNode.gain
778
778
  .cancelScheduledValues(endTime)
779
779
  .linearRampToValueAtTime(0, stopTime);
780
780
  note.ending = true;
@@ -785,8 +785,8 @@ class MidyGM1 {
785
785
  note.bufferSource.onended = () => {
786
786
  scheduledNotes[index] = null;
787
787
  note.bufferSource.disconnect();
788
- note.volumeNode.disconnect();
789
788
  note.filterNode.disconnect();
789
+ note.volumeEnvelopeNode.disconnect();
790
790
  if (note.modulationDepth) {
791
791
  note.volumeDepth.disconnect();
792
792
  note.modulationDepth.disconnect();
@@ -883,12 +883,12 @@ class MidyGM1 {
883
883
  setModLfoToPitch(channel, note) {
884
884
  const now = this.audioContext.currentTime;
885
885
  const modLfoToPitch = note.voiceParams.modLfoToPitch;
886
- const modulationDepth = Math.abs(modLfoToPitch) +
886
+ const baseDepth = Math.abs(modLfoToPitch) +
887
887
  channel.state.modulationDepth;
888
- const modulationDepthSign = (0 < modLfoToPitch) ? 1 : -1;
888
+ const modulationDepth = baseDepth * Math.sign(modLfoToPitch);
889
889
  note.modulationDepth.gain
890
890
  .cancelScheduledValues(now)
891
- .setValueAtTime(modulationDepth * modulationDepthSign, now);
891
+ .setValueAtTime(modulationDepth, now);
892
892
  }
893
893
  setVibLfoToPitch(channel, note) {
894
894
  const now = this.audioContext.currentTime;
@@ -910,11 +910,11 @@ class MidyGM1 {
910
910
  setModLfoToVolume(note) {
911
911
  const now = this.audioContext.currentTime;
912
912
  const modLfoToVolume = note.voiceParams.modLfoToVolume;
913
- const volumeDepth = this.cbToRatio(Math.abs(modLfoToVolume)) - 1;
914
- const volumeDepthSign = (0 < modLfoToVolume) ? 1 : -1;
913
+ const baseDepth = this.cbToRatio(Math.abs(modLfoToVolume)) - 1;
914
+ const volumeDepth = baseDepth * Math.sign(modLfoToVolume);
915
915
  note.volumeDepth.gain
916
916
  .cancelScheduledValues(now)
917
- .setValueAtTime(volumeDepth * volumeDepthSign, now);
917
+ .setValueAtTime(volumeDepth, now);
918
918
  }
919
919
  setDelayModLFO(note) {
920
920
  const now = this.audioContext.currentTime;
@@ -948,7 +948,7 @@ class MidyGM1 {
948
948
  if (0 < channel.state.modulationDepth)
949
949
  this.setModLfoToFilterFc(note);
950
950
  },
951
- modLfoToVolume: (channel, note) => {
951
+ modLfoToVolume: (channel, note, _prevValue) => {
952
952
  if (0 < channel.state.modulationDepth)
953
953
  this.setModLfoToVolume(note);
954
954
  },
@@ -959,12 +959,12 @@ class MidyGM1 {
959
959
  delayVibLFO: (channel, note, prevValue) => {
960
960
  if (0 < channel.state.vibratoDepth) {
961
961
  const now = this.audioContext.currentTime;
962
- const prevStartTime = note.startTime +
963
- prevValue * channel.state.vibratoDelay * 2;
962
+ const vibratoDelay = channel.state.vibratoDelay * 2;
963
+ const prevStartTime = note.startTime + prevValue * vibratoDelay;
964
964
  if (now < prevStartTime)
965
965
  return;
966
- const startTime = note.startTime +
967
- value * channel.state.vibratoDelay * 2;
966
+ const value = note.voiceParams.delayVibLFO;
967
+ const startTime = note.startTime + value * vibratoDelay;
968
968
  note.vibratoLFO.stop(now);
969
969
  note.vibratoLFO.start(startTime);
970
970
  }
@@ -972,9 +972,10 @@ class MidyGM1 {
972
972
  freqVibLFO: (channel, note, _prevValue) => {
973
973
  if (0 < channel.state.vibratoDepth) {
974
974
  const now = this.audioContext.currentTime;
975
+ const freqVibLFO = note.voiceParams.freqVibLFO;
975
976
  note.vibratoLFO.frequency
976
977
  .cancelScheduledValues(now)
977
- .setValueAtTime(value * sate.vibratoRate, now);
978
+ .setValueAtTime(freqVibLFO * channel.state.vibratoRate, now);
978
979
  }
979
980
  },
980
981
  };
@@ -1053,6 +1054,8 @@ class MidyGM1 {
1053
1054
  const handler = this.controlChangeHandlers[controllerType];
1054
1055
  if (handler) {
1055
1056
  handler.call(this, channelNumber, value);
1057
+ const channel = this.channels[channelNumber];
1058
+ this.applyVoiceParams(channel, controller + 128);
1056
1059
  }
1057
1060
  else {
1058
1061
  console.warn(`Unsupported Control change: controllerType=${controllerType} value=${value}`);
@@ -1060,13 +1063,14 @@ class MidyGM1 {
1060
1063
  }
1061
1064
  updateModulation(channel) {
1062
1065
  const now = this.audioContext.currentTime;
1066
+ const depth = channel.state.modulationDepth * channel.modulationDepthRange;
1063
1067
  channel.scheduledNotes.forEach((noteList) => {
1064
1068
  for (let i = 0; i < noteList.length; i++) {
1065
1069
  const note = noteList[i];
1066
1070
  if (!note)
1067
1071
  continue;
1068
1072
  if (note.modulationDepth) {
1069
- note.modulationDepth.gain.setValueAtTime(channel.state.modulationDepth, now);
1073
+ note.modulationDepth.gain.setValueAtTime(depth, now);
1070
1074
  }
1071
1075
  else {
1072
1076
  this.setPitchEnvelope(note);
@@ -1077,8 +1081,7 @@ class MidyGM1 {
1077
1081
  }
1078
1082
  setModulationDepth(channelNumber, modulation) {
1079
1083
  const channel = this.channels[channelNumber];
1080
- channel.state.modulationDepth = (modulation / 127) *
1081
- channel.modulationDepthRange;
1084
+ channel.state.modulationDepth = modulation / 127;
1082
1085
  this.updateModulation(channel);
1083
1086
  }
1084
1087
  setVolume(channelNumber, volume) {
@@ -1298,8 +1301,8 @@ class MidyGM1 {
1298
1301
  }
1299
1302
  else {
1300
1303
  const now = this.audioContext.currentTime;
1301
- this.masterGain.gain.cancelScheduledValues(now);
1302
- this.masterGain.gain.setValueAtTime(volume * volume, now);
1304
+ this.masterVolume.gain.cancelScheduledValues(now);
1305
+ this.masterVolume.gain.setValueAtTime(volume * volume, now);
1303
1306
  }
1304
1307
  }
1305
1308
  handleExclusiveMessage(data) {
@@ -3,6 +3,8 @@ export class MidyGM2 {
3
3
  currentBufferSource: null;
4
4
  detune: number;
5
5
  scaleOctaveTuningTable: any[];
6
+ pressureTable: Uint8Array<ArrayBuffer>;
7
+ keyBasedInstrumentControlTable: Int8Array<ArrayBuffer>;
6
8
  program: number;
7
9
  bank: number;
8
10
  bankMSB: number;
@@ -75,14 +77,14 @@ export class MidyGM2 {
75
77
  output: any;
76
78
  };
77
79
  };
78
- masterGain: any;
80
+ masterVolume: any;
79
81
  voiceParamsHandlers: {
80
82
  modLfoToPitch: (channel: any, note: any, _prevValue: any) => void;
81
83
  vibLfoToPitch: (channel: any, note: any, _prevValue: any) => void;
82
84
  modLfoToFilterFc: (channel: any, note: any, _prevValue: any) => void;
83
- modLfoToVolume: (channel: any, note: any) => void;
84
- chorusEffectsSend: (_channel: any, note: any, prevValue: any) => void;
85
- reverbEffectsSend: (_channel: any, note: any, prevValue: any) => void;
85
+ modLfoToVolume: (channel: any, note: any, _prevValue: any) => void;
86
+ chorusEffectsSend: (channel: any, note: any, prevValue: any) => void;
87
+ reverbEffectsSend: (channel: any, note: any, prevValue: any) => void;
86
88
  delayModLFO: (_channel: any, note: any, _prevValue: any) => void;
87
89
  freqModLFO: (_channel: any, note: any, _prevValue: any) => void;
88
90
  delayVibLFO: (channel: any, note: any, prevValue: any) => void;
@@ -187,11 +189,12 @@ export class MidyGM2 {
187
189
  rateToCent(rate: any): number;
188
190
  centToRate(cent: any): number;
189
191
  centToHz(cent: any): number;
190
- calcDetune(channel: any, note: any): any;
192
+ calcChannelDetune(channel: any): any;
191
193
  calcNoteDetune(channel: any, note: any): any;
192
194
  updateDetune(channel: any): void;
195
+ getPortamentoTime(channel: any): number;
193
196
  setPortamentoStartVolumeEnvelope(channel: any, note: any): void;
194
- setVolumeEnvelope(note: any): void;
197
+ setVolumeEnvelope(channel: any, note: any): void;
195
198
  setPitchEnvelope(note: any): void;
196
199
  clampCutoffFrequency(frequency: any): number;
197
200
  setPortamentoStartFilterEnvelope(channel: any, note: any): void;
@@ -209,30 +212,31 @@ export class MidyGM2 {
209
212
  releaseSostenutoPedal(channelNumber: any, halfVelocity: any): any[];
210
213
  handleMIDIMessage(statusByte: any, data1: any, data2: any): void | Promise<any>;
211
214
  handleProgramChange(channelNumber: any, program: any): void;
212
- handleChannelPressure(channelNumber: any, pressure: any): void;
215
+ handleChannelPressure(channelNumber: any, value: any): void;
216
+ setChannelPressure(channel: any, note: any): void;
213
217
  handlePitchBendMessage(channelNumber: any, lsb: any, msb: any): void;
214
218
  setPitchBend(channelNumber: any, value: any): void;
215
219
  setModLfoToPitch(channel: any, note: any): void;
216
220
  setVibLfoToPitch(channel: any, note: any): void;
217
- setModLfoToFilterFc(note: any): void;
218
- setModLfoToVolume(note: any): void;
219
- setChorusEffectsSend(note: any, prevValue: any): void;
220
- setReverbEffectsSend(note: any, prevValue: any): void;
221
+ setModLfoToFilterFc(channel: any, note: any): void;
222
+ setModLfoToVolume(channel: any, note: any): void;
223
+ setReverbEffectsSend(channel: any, note: any, prevValue: any): void;
224
+ setChorusEffectsSend(channel: any, note: any, prevValue: any): void;
221
225
  setDelayModLFO(note: any): void;
222
226
  setFreqModLFO(note: any): void;
223
227
  createVoiceParamsHandlers(): {
224
228
  modLfoToPitch: (channel: any, note: any, _prevValue: any) => void;
225
229
  vibLfoToPitch: (channel: any, note: any, _prevValue: any) => void;
226
230
  modLfoToFilterFc: (channel: any, note: any, _prevValue: any) => void;
227
- modLfoToVolume: (channel: any, note: any) => void;
228
- chorusEffectsSend: (_channel: any, note: any, prevValue: any) => void;
229
- reverbEffectsSend: (_channel: any, note: any, prevValue: any) => void;
231
+ modLfoToVolume: (channel: any, note: any, _prevValue: any) => void;
232
+ chorusEffectsSend: (channel: any, note: any, prevValue: any) => void;
233
+ reverbEffectsSend: (channel: any, note: any, prevValue: any) => void;
230
234
  delayModLFO: (_channel: any, note: any, _prevValue: any) => void;
231
235
  freqModLFO: (_channel: any, note: any, _prevValue: any) => void;
232
236
  delayVibLFO: (channel: any, note: any, prevValue: any) => void;
233
237
  freqVibLFO: (channel: any, note: any, _prevValue: any) => void;
234
238
  };
235
- getControllerState(channel: any, noteNumber: any, velocity: any): Float32Array;
239
+ getControllerState(channel: any, noteNumber: any, velocity: any): Float32Array<any>;
236
240
  applyVoiceParams(channel: any, controllerType: any): void;
237
241
  createControlChangeHandlers(): {
238
242
  0: (channelNumber: any, msb: any) => void;
@@ -265,11 +269,13 @@ export class MidyGM2 {
265
269
  updateModulation(channel: any): void;
266
270
  setModulationDepth(channelNumber: any, modulation: any): void;
267
271
  setPortamentoTime(channelNumber: any, portamentoTime: any): void;
272
+ setKeyBasedVolume(channel: any): void;
268
273
  setVolume(channelNumber: any, volume: any): void;
269
274
  panToGain(pan: any): {
270
275
  gainLeft: number;
271
276
  gainRight: number;
272
277
  };
278
+ setKeyBasedPan(channel: any): void;
273
279
  setPan(channelNumber: any, pan: any): void;
274
280
  setExpression(channelNumber: any, expression: any): void;
275
281
  setBankLSB(channelNumber: any, lsb: any): void;
@@ -277,10 +283,10 @@ export class MidyGM2 {
277
283
  updateChannelVolume(channel: any): void;
278
284
  setSustainPedal(channelNumber: any, value: any): void;
279
285
  setPortamento(channelNumber: any, value: any): void;
280
- setReverbSendLevel(channelNumber: any, reverbSendLevel: any): void;
281
- setChorusSendLevel(channelNumber: any, chorusSendLevel: any): void;
282
286
  setSostenutoPedal(channelNumber: any, value: any): void;
283
287
  setSoftPedal(channelNumber: any, softPedal: any): void;
288
+ setReverbSendLevel(channelNumber: any, reverbSendLevel: any): void;
289
+ setChorusSendLevel(channelNumber: any, chorusSendLevel: any): void;
284
290
  limitData(channel: any, minMSB: any, maxMSB: any, minLSB: any, maxLSB: any): void;
285
291
  limitDataMSB(channel: any, minMSB: any, maxMSB: any): void;
286
292
  handleRPN(channelNumber: any): void;
@@ -312,8 +318,6 @@ export class MidyGM2 {
312
318
  setMasterFineTuning(value: any): void;
313
319
  handleMasterCoarseTuningSysEx(data: any): void;
314
320
  setMasterCoarseTuning(value: any): void;
315
- getChannelBitmap(data: any): any[];
316
- handleScaleOctaveTuning1ByteFormat(data: any): void;
317
321
  handleGlobalParameterControlSysEx(data: any): void;
318
322
  handleReverbParameterSysEx(data: any): void;
319
323
  setReverbType(type: any): void;
@@ -332,6 +336,15 @@ export class MidyGM2 {
332
336
  getChorusFeedback(value: any): number;
333
337
  setChorusSendToReverb(value: any): void;
334
338
  getChorusSendToReverb(value: any): number;
339
+ getChannelBitmap(data: any): any[];
340
+ handleScaleOctaveTuning1ByteFormatSysEx(data: any): void;
341
+ applyDestinationSettings(channel: any, note: any, table: any): void;
342
+ handleChannelPressureSysEx(data: any): void;
343
+ initControlTable(): Uint8Array<ArrayBuffer>;
344
+ applyControlTable(channel: any, controllerType: any): void;
345
+ handleControlChangeSysEx(data: any): void;
346
+ getKeyBasedInstrumentControlValue(channel: any, keyNumber: any, controllerType: any): number;
347
+ handleKeyBasedInstrumentControlSysEx(data: any): void;
335
348
  handleExclusiveMessage(data: any): void;
336
349
  handleSysEx(data: any): void;
337
350
  scheduleTask(callback: any, startTime: any): Promise<any>;
@@ -340,7 +353,10 @@ declare class Note {
340
353
  constructor(noteNumber: any, velocity: any, startTime: any, voice: any, voiceParams: any);
341
354
  bufferSource: any;
342
355
  filterNode: any;
356
+ volumeEnvelopeNode: any;
343
357
  volumeNode: any;
358
+ gainL: any;
359
+ gainR: any;
344
360
  volumeDepth: any;
345
361
  modulationLFO: any;
346
362
  modulationDepth: any;
@@ -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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"}