@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/README.md CHANGED
@@ -1,10 +1,9 @@
1
1
  # Midy
2
2
 
3
- A MIDI player/synthesizer written in JavaScript that supports GM-Lite/GM1 and
4
- SF2/SF3.
3
+ A MIDI player/synthesizer written in JavaScript that supports GM-Lite/GM1/GM2
4
+ and SF2/SF3.
5
5
 
6
- This library provides several files depending on the implementation level. GM2
7
- support is in progress and should be completed soon.
6
+ This library provides several files depending on the implementation level.
8
7
 
9
8
  - midy-GMLite.js: support minimal GM-Lite (ref:
10
9
  [en](https://amei.or.jp/midistandardcommittee/Recommended_Practice/e/gml-v1.pdf),
@@ -16,7 +15,6 @@ support is in progress and should be completed soon.
16
15
  [en v1.2a](https://amei.or.jp/midistandardcommittee/Recommended_Practice/e/GM2-v12a.pdf),
17
16
  [en v1.0](https://amei.or.jp/midistandardcommittee/Recommended_Practice/e/rp24(e).pdf),
18
17
  [ja v1.0](https://amei.or.jp/midistandardcommittee/Recommended_Practice/GM2_japanese.pdf))
19
- (in progress)
20
18
  - midy.js: full implementation (in progress)
21
19
 
22
20
  ## Usage
package/esm/midy-GM1.d.ts CHANGED
@@ -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"}
package/esm/midy-GM1.js CHANGED
@@ -14,7 +14,7 @@ class Note {
14
14
  writable: true,
15
15
  value: void 0
16
16
  });
17
- Object.defineProperty(this, "volumeNode", {
17
+ Object.defineProperty(this, "volumeEnvelopeNode", {
18
18
  enumerable: true,
19
19
  configurable: true,
20
20
  writable: true,
@@ -233,11 +233,11 @@ export class MidyGM1 {
233
233
  value: new Map()
234
234
  });
235
235
  this.audioContext = audioContext;
236
- this.masterGain = new GainNode(audioContext);
236
+ this.masterVolume = new GainNode(audioContext);
237
237
  this.voiceParamsHandlers = this.createVoiceParamsHandlers();
238
238
  this.controlChangeHandlers = this.createControlChangeHandlers();
239
239
  this.channels = this.createChannels(audioContext);
240
- this.masterGain.connect(audioContext.destination);
240
+ this.masterVolume.connect(audioContext.destination);
241
241
  this.GM1SystemOn();
242
242
  }
243
243
  initSoundFontTable() {
@@ -283,7 +283,7 @@ export class MidyGM1 {
283
283
  const merger = new ChannelMergerNode(audioContext, { numberOfInputs: 2 });
284
284
  gainL.connect(merger, 0, 0);
285
285
  gainR.connect(merger, 0, 1);
286
- merger.connect(this.masterGain);
286
+ merger.connect(this.masterVolume);
287
287
  return {
288
288
  gainL,
289
289
  gainR,
@@ -631,7 +631,7 @@ export class MidyGM1 {
631
631
  const volAttack = volDelay + voiceParams.volAttack;
632
632
  const volHold = volAttack + voiceParams.volHold;
633
633
  const volDecay = volHold + voiceParams.volDecay;
634
- note.volumeNode.gain
634
+ note.volumeEnvelopeNode.gain
635
635
  .cancelScheduledValues(now)
636
636
  .setValueAtTime(0, startTime)
637
637
  .setValueAtTime(1e-6, volDelay) // exponentialRampToValueAtTime() requires a non-zero value
@@ -707,14 +707,14 @@ export class MidyGM1 {
707
707
  note.modulationLFO.connect(note.modulationDepth);
708
708
  note.modulationDepth.connect(note.bufferSource.detune);
709
709
  note.modulationLFO.connect(note.volumeDepth);
710
- note.volumeDepth.connect(note.volumeNode.gain);
710
+ note.volumeDepth.connect(note.volumeEnvelopeNode.gain);
711
711
  }
712
712
  async createNote(channel, voice, noteNumber, velocity, startTime, isSF3) {
713
713
  const state = channel.state;
714
714
  const voiceParams = voice.getAllParams(state.array);
715
715
  const note = new Note(noteNumber, velocity, startTime, voice, voiceParams);
716
716
  note.bufferSource = await this.createNoteBufferNode(voiceParams, isSF3);
717
- note.volumeNode = new GainNode(this.audioContext);
717
+ note.volumeEnvelopeNode = new GainNode(this.audioContext);
718
718
  note.filterNode = new BiquadFilterNode(this.audioContext, {
719
719
  type: "lowpass",
720
720
  Q: voiceParams.initialFilterQ / 10, // dB
@@ -726,7 +726,7 @@ export class MidyGM1 {
726
726
  this.startModulation(channel, note, startTime);
727
727
  }
728
728
  note.bufferSource.connect(note.filterNode);
729
- note.filterNode.connect(note.volumeNode);
729
+ note.filterNode.connect(note.volumeEnvelopeNode);
730
730
  note.bufferSource.start(startTime);
731
731
  return note;
732
732
  }
@@ -742,8 +742,8 @@ export class MidyGM1 {
742
742
  if (!voice)
743
743
  return;
744
744
  const note = await this.createNote(channel, voice, noteNumber, velocity, startTime, isSF3);
745
- note.volumeNode.connect(channel.gainL);
746
- note.volumeNode.connect(channel.gainR);
745
+ note.volumeEnvelopeNode.connect(channel.gainL);
746
+ note.volumeEnvelopeNode.connect(channel.gainR);
747
747
  const exclusiveClass = note.voiceParams.exclusiveClass;
748
748
  if (exclusiveClass !== 0) {
749
749
  if (this.exclusiveClassMap.has(exclusiveClass)) {
@@ -771,7 +771,7 @@ export class MidyGM1 {
771
771
  }
772
772
  stopNote(endTime, stopTime, scheduledNotes, index) {
773
773
  const note = scheduledNotes[index];
774
- note.volumeNode.gain
774
+ note.volumeEnvelopeNode.gain
775
775
  .cancelScheduledValues(endTime)
776
776
  .linearRampToValueAtTime(0, stopTime);
777
777
  note.ending = true;
@@ -782,8 +782,8 @@ export class MidyGM1 {
782
782
  note.bufferSource.onended = () => {
783
783
  scheduledNotes[index] = null;
784
784
  note.bufferSource.disconnect();
785
- note.volumeNode.disconnect();
786
785
  note.filterNode.disconnect();
786
+ note.volumeEnvelopeNode.disconnect();
787
787
  if (note.modulationDepth) {
788
788
  note.volumeDepth.disconnect();
789
789
  note.modulationDepth.disconnect();
@@ -880,12 +880,12 @@ export class MidyGM1 {
880
880
  setModLfoToPitch(channel, note) {
881
881
  const now = this.audioContext.currentTime;
882
882
  const modLfoToPitch = note.voiceParams.modLfoToPitch;
883
- const modulationDepth = Math.abs(modLfoToPitch) +
883
+ const baseDepth = Math.abs(modLfoToPitch) +
884
884
  channel.state.modulationDepth;
885
- const modulationDepthSign = (0 < modLfoToPitch) ? 1 : -1;
885
+ const modulationDepth = baseDepth * Math.sign(modLfoToPitch);
886
886
  note.modulationDepth.gain
887
887
  .cancelScheduledValues(now)
888
- .setValueAtTime(modulationDepth * modulationDepthSign, now);
888
+ .setValueAtTime(modulationDepth, now);
889
889
  }
890
890
  setVibLfoToPitch(channel, note) {
891
891
  const now = this.audioContext.currentTime;
@@ -907,11 +907,11 @@ export class MidyGM1 {
907
907
  setModLfoToVolume(note) {
908
908
  const now = this.audioContext.currentTime;
909
909
  const modLfoToVolume = note.voiceParams.modLfoToVolume;
910
- const volumeDepth = this.cbToRatio(Math.abs(modLfoToVolume)) - 1;
911
- const volumeDepthSign = (0 < modLfoToVolume) ? 1 : -1;
910
+ const baseDepth = this.cbToRatio(Math.abs(modLfoToVolume)) - 1;
911
+ const volumeDepth = baseDepth * Math.sign(modLfoToVolume);
912
912
  note.volumeDepth.gain
913
913
  .cancelScheduledValues(now)
914
- .setValueAtTime(volumeDepth * volumeDepthSign, now);
914
+ .setValueAtTime(volumeDepth, now);
915
915
  }
916
916
  setDelayModLFO(note) {
917
917
  const now = this.audioContext.currentTime;
@@ -945,7 +945,7 @@ export class MidyGM1 {
945
945
  if (0 < channel.state.modulationDepth)
946
946
  this.setModLfoToFilterFc(note);
947
947
  },
948
- modLfoToVolume: (channel, note) => {
948
+ modLfoToVolume: (channel, note, _prevValue) => {
949
949
  if (0 < channel.state.modulationDepth)
950
950
  this.setModLfoToVolume(note);
951
951
  },
@@ -956,12 +956,12 @@ export class MidyGM1 {
956
956
  delayVibLFO: (channel, note, prevValue) => {
957
957
  if (0 < channel.state.vibratoDepth) {
958
958
  const now = this.audioContext.currentTime;
959
- const prevStartTime = note.startTime +
960
- prevValue * channel.state.vibratoDelay * 2;
959
+ const vibratoDelay = channel.state.vibratoDelay * 2;
960
+ const prevStartTime = note.startTime + prevValue * vibratoDelay;
961
961
  if (now < prevStartTime)
962
962
  return;
963
- const startTime = note.startTime +
964
- value * channel.state.vibratoDelay * 2;
963
+ const value = note.voiceParams.delayVibLFO;
964
+ const startTime = note.startTime + value * vibratoDelay;
965
965
  note.vibratoLFO.stop(now);
966
966
  note.vibratoLFO.start(startTime);
967
967
  }
@@ -969,9 +969,10 @@ export class MidyGM1 {
969
969
  freqVibLFO: (channel, note, _prevValue) => {
970
970
  if (0 < channel.state.vibratoDepth) {
971
971
  const now = this.audioContext.currentTime;
972
+ const freqVibLFO = note.voiceParams.freqVibLFO;
972
973
  note.vibratoLFO.frequency
973
974
  .cancelScheduledValues(now)
974
- .setValueAtTime(value * sate.vibratoRate, now);
975
+ .setValueAtTime(freqVibLFO * channel.state.vibratoRate, now);
975
976
  }
976
977
  },
977
978
  };
@@ -1050,6 +1051,8 @@ export class MidyGM1 {
1050
1051
  const handler = this.controlChangeHandlers[controllerType];
1051
1052
  if (handler) {
1052
1053
  handler.call(this, channelNumber, value);
1054
+ const channel = this.channels[channelNumber];
1055
+ this.applyVoiceParams(channel, controller + 128);
1053
1056
  }
1054
1057
  else {
1055
1058
  console.warn(`Unsupported Control change: controllerType=${controllerType} value=${value}`);
@@ -1057,13 +1060,14 @@ export class MidyGM1 {
1057
1060
  }
1058
1061
  updateModulation(channel) {
1059
1062
  const now = this.audioContext.currentTime;
1063
+ const depth = channel.state.modulationDepth * channel.modulationDepthRange;
1060
1064
  channel.scheduledNotes.forEach((noteList) => {
1061
1065
  for (let i = 0; i < noteList.length; i++) {
1062
1066
  const note = noteList[i];
1063
1067
  if (!note)
1064
1068
  continue;
1065
1069
  if (note.modulationDepth) {
1066
- note.modulationDepth.gain.setValueAtTime(channel.state.modulationDepth, now);
1070
+ note.modulationDepth.gain.setValueAtTime(depth, now);
1067
1071
  }
1068
1072
  else {
1069
1073
  this.setPitchEnvelope(note);
@@ -1074,8 +1078,7 @@ export class MidyGM1 {
1074
1078
  }
1075
1079
  setModulationDepth(channelNumber, modulation) {
1076
1080
  const channel = this.channels[channelNumber];
1077
- channel.state.modulationDepth = (modulation / 127) *
1078
- channel.modulationDepthRange;
1081
+ channel.state.modulationDepth = modulation / 127;
1079
1082
  this.updateModulation(channel);
1080
1083
  }
1081
1084
  setVolume(channelNumber, volume) {
@@ -1295,8 +1298,8 @@ export class MidyGM1 {
1295
1298
  }
1296
1299
  else {
1297
1300
  const now = this.audioContext.currentTime;
1298
- this.masterGain.gain.cancelScheduledValues(now);
1299
- this.masterGain.gain.setValueAtTime(volume * volume, now);
1301
+ this.masterVolume.gain.cancelScheduledValues(now);
1302
+ this.masterVolume.gain.setValueAtTime(volume * volume, now);
1300
1303
  }
1301
1304
  }
1302
1305
  handleExclusiveMessage(data) {
package/esm/midy-GM2.d.ts CHANGED
@@ -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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"}