@marmooo/midy 0.2.0 → 0.2.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.
@@ -1,6 +1,7 @@
1
1
  export class MidyGMLite {
2
2
  static channelSettings: {
3
3
  currentBufferSource: null;
4
+ detune: number;
4
5
  program: number;
5
6
  bank: number;
6
7
  dataMSB: number;
@@ -89,11 +90,13 @@ export class MidyGMLite {
89
90
  getActiveNotes(channel: any, time: any): Map<any, any>;
90
91
  getActiveNote(noteList: any, time: any): any;
91
92
  cbToRatio(cb: any): number;
93
+ rateToCent(rate: any): number;
94
+ centToRate(cent: any): number;
92
95
  centToHz(cent: any): number;
93
- calcSemitoneOffset(channel: any): number;
96
+ calcChannelDetune(channel: any): number;
97
+ updateDetune(channel: any): void;
94
98
  setVolumeEnvelope(note: any): void;
95
- setPlaybackRate(note: any): void;
96
- setPitch(channel: any, note: any): void;
99
+ setPitchEnvelope(note: any): void;
97
100
  clampCutoffFrequency(frequency: any): number;
98
101
  setFilterEnvelope(note: any): void;
99
102
  startModulation(channel: any, note: any, startTime: any): void;
@@ -109,8 +112,8 @@ export class MidyGMLite {
109
112
  handlePitchBendMessage(channelNumber: any, lsb: any, msb: any): void;
110
113
  setPitchBend(channelNumber: any, value: any): void;
111
114
  setModLfoToPitch(channel: any, note: any): void;
112
- setModLfoToVolume(note: any): void;
113
115
  setModLfoToFilterFc(note: any): void;
116
+ setModLfoToVolume(note: any): void;
114
117
  setDelayModLFO(note: any): void;
115
118
  setFreqModLFO(note: any): void;
116
119
  createVoiceParamsHandlers(): {
@@ -125,7 +128,7 @@ export class MidyGMLite {
125
128
  delayVibLFO: (_channel: any, _note: any, _prevValue: any) => void;
126
129
  freqVibLFO: (_channel: any, _note: any, _prevValue: any) => void;
127
130
  };
128
- getControllerState(channel: any, noteNumber: any, velocity: any): Float32Array;
131
+ getControllerState(channel: any, noteNumber: any, velocity: any): Float32Array<any>;
129
132
  applyVoiceParams(channel: any, controllerType: any): void;
130
133
  createControlChangeHandlers(): {
131
134
  1: (channelNumber: any, modulation: any) => void;
@@ -159,7 +162,6 @@ export class MidyGMLite {
159
162
  setRPNMSB(channelNumber: any, value: any): void;
160
163
  setRPNLSB(channelNumber: any, value: any): void;
161
164
  dataEntryMSB(channelNumber: any, value: any): void;
162
- updateDetune(channel: any, detune: any): void;
163
165
  handlePitchBendRangeRPN(channelNumber: any): void;
164
166
  setPitchBendRange(channelNumber: any, pitchWheelSensitivity: any): void;
165
167
  allSoundOff(channelNumber: any): Promise<void>;
@@ -178,7 +180,7 @@ declare class Note {
178
180
  constructor(noteNumber: any, velocity: any, startTime: any, voice: any, voiceParams: any);
179
181
  bufferSource: any;
180
182
  filterNode: any;
181
- volumeNode: any;
183
+ volumeEnvelopeNode: any;
182
184
  volumeDepth: any;
183
185
  modulationLFO: any;
184
186
  modulationDepth: any;
@@ -1 +1 @@
1
- {"version":3,"file":"midy-GMLite.d.ts","sourceRoot":"","sources":["../src/midy-GMLite.js"],"names":[],"mappings":"AAmFA;IAoBE;;;;;;;;MAQE;IAEF,+BAQC;IArCD,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;IAa5B,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,4BAEC;IAED,yCAIC;IAED,mCAgBC;IAED,iCAKC;IAED,wCAmBC;IAED,6CAIC;IAED,mCAuBC;IAED,+DAoBC;IAED,gHA4BC;IAED,kGAgDC;IAED,0EAGC;IAED,qFAwBC;IAED,6HAuBC;IAED,0FAGC;IAED,kEAeC;IAED,gFAiBC;IAED,4DAGC;IAED,qEAGC;IAED,mDAOC;IAED,gDASC;IAED,mCAQC;IAED,qCAMC;IAED,gCAOC;IAED,+BAMC;IAED;;;;;;;;;;;MAqBC;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,oCAYC;IAED,gDAEC;IAED,gDAEC;IAED,mDAGC;IAED,8CAYC;IAED,kDAKC;IAED,wEAOC;IAED,+CAEC;IAED,8CAqBC;IAED,+CAEC;IAED,4DAgBC;IAED,oBAMC;IAED,yDAaC;IAED,yCAGC;IAED,mCAQC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AAjtCD;IAQE,0FAMC;IAbD,kBAAa;IACb,gBAAW;IACX,gBAAW;IACX,iBAAY;IACZ,mBAAc;IACd,qBAAgB;IAGd,gBAA4B;IAC5B,cAAwB;IACxB,eAA0B;IAC1B,WAAkB;IAClB,iBAA8B;CAEjC"}
1
+ {"version":3,"file":"midy-GMLite.d.ts","sourceRoot":"","sources":["../src/midy-GMLite.js"],"names":[],"mappings":"AAmFA;IAoBE;;;;;;;;;MASE;IAEF,+BAQC;IAtCD,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;IAc5B,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,wCAIC;IAED,iCAWC;IAED,mCAgBC;IAED,kCAqBC;IAED,6CAIC;IAED,mCAuBC;IAED,+DAoBC;IAED,gHA2BC;IAED,kGAgDC;IAED,0EAGC;IAED,qFAwBC;IAED,6HAuBC;IAED,0FAGC;IAED,kEAeC;IAED,gFAiBC;IAED,4DAGC;IAED,qEAGC;IAED,mDASC;IAED,gDASC;IAED,qCAMC;IAED,mCAQC;IAED,gCAOC;IAED,+BAMC;IAED;;;;;;;;;;;MAqBC;IAED,oFAMC;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,oCAYC;IAED,gDAEC;IAED,gDAEC;IAED,mDAGC;IAED,kDAKC;IAED,wEAOC;IAED,+CAEC;IAED,8CAqBC;IAED,+CAEC;IAED,4DAgBC;IAED,oBAMC;IAED,yDAaC;IAED,yCAGC;IAED,mCAQC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AArtCD;IAQE,0FAMC;IAbD,kBAAa;IACb,gBAAW;IACX,wBAAmB;IACnB,iBAAY;IACZ,mBAAc;IACd,qBAAgB;IAGd,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,
@@ -584,14 +584,33 @@ class MidyGMLite {
584
584
  cbToRatio(cb) {
585
585
  return Math.pow(10, cb / 200);
586
586
  }
587
+ rateToCent(rate) {
588
+ return 1200 * Math.log2(rate);
589
+ }
590
+ centToRate(cent) {
591
+ return Math.pow(2, cent / 1200);
592
+ }
587
593
  centToHz(cent) {
588
- return 8.176 * Math.pow(2, cent / 1200);
594
+ return 8.176 * this.centToRate(cent);
589
595
  }
590
- calcSemitoneOffset(channel) {
596
+ calcChannelDetune(channel) {
591
597
  const pitchWheel = channel.state.pitchWheel * 2 - 1;
592
- const pitchWheelSensitivity = channel.state.pitchWheelSensitivity * 128;
598
+ const pitchWheelSensitivity = channel.state.pitchWheelSensitivity * 12800;
593
599
  return pitchWheel * pitchWheelSensitivity;
594
600
  }
601
+ updateDetune(channel) {
602
+ const now = this.audioContext.currentTime;
603
+ channel.scheduledNotes.forEach((noteList) => {
604
+ for (let i = 0; i < noteList.length; i++) {
605
+ const note = noteList[i];
606
+ if (!note)
607
+ continue;
608
+ note.bufferSource.detune
609
+ .cancelScheduledValues(now)
610
+ .setValueAtTime(channel.detune, now);
611
+ }
612
+ });
613
+ }
595
614
  setVolumeEnvelope(note) {
596
615
  const now = this.audioContext.currentTime;
597
616
  const { voiceParams, startTime } = note;
@@ -601,7 +620,7 @@ class MidyGMLite {
601
620
  const volAttack = volDelay + voiceParams.volAttack;
602
621
  const volHold = volAttack + voiceParams.volHold;
603
622
  const volDecay = volHold + voiceParams.volDecay;
604
- note.volumeNode.gain
623
+ note.volumeEnvelopeNode.gain
605
624
  .cancelScheduledValues(now)
606
625
  .setValueAtTime(0, startTime)
607
626
  .setValueAtTime(1e-6, volDelay) // exponentialRampToValueAtTime() requires a non-zero value
@@ -609,32 +628,28 @@ class MidyGMLite {
609
628
  .setValueAtTime(attackVolume, volHold)
610
629
  .linearRampToValueAtTime(sustainVolume, volDecay);
611
630
  }
612
- setPlaybackRate(note) {
631
+ setPitchEnvelope(note) {
613
632
  const now = this.audioContext.currentTime;
633
+ const { voiceParams } = note;
634
+ const baseRate = voiceParams.playbackRate;
614
635
  note.bufferSource.playbackRate
615
636
  .cancelScheduledValues(now)
616
- .setValueAtTime(note.voiceParams.playbackRate, now);
617
- }
618
- setPitch(channel, note) {
619
- const now = this.audioContext.currentTime;
620
- const { startTime } = note;
621
- const basePitch = this.calcSemitoneOffset(channel) * 100;
622
- note.bufferSource.detune
623
- .cancelScheduledValues(now)
624
- .setValueAtTime(basePitch, startTime);
625
- const modEnvToPitch = note.voiceParams.modEnvToPitch;
637
+ .setValueAtTime(baseRate, now);
638
+ const modEnvToPitch = voiceParams.modEnvToPitch;
626
639
  if (modEnvToPitch === 0)
627
640
  return;
641
+ const basePitch = this.rateToCent(baseRate);
628
642
  const peekPitch = basePitch + modEnvToPitch;
643
+ const peekRate = this.centToRate(peekPitch);
629
644
  const modDelay = startTime + voiceParams.modDelay;
630
645
  const modAttack = modDelay + voiceParams.modAttack;
631
646
  const modHold = modAttack + voiceParams.modHold;
632
647
  const modDecay = modHold + voiceParams.modDecay;
633
- note.bufferSource.detune
634
- .setValueAtTime(basePitch, modDelay)
635
- .exponentialRampToValueAtTime(peekPitch, modAttack)
636
- .setValueAtTime(peekPitch, modHold)
637
- .linearRampToValueAtTime(basePitch, modDecay);
648
+ note.bufferSource.playbackRate
649
+ .setValueAtTime(baseRate, modDelay)
650
+ .exponentialRampToValueAtTime(peekRate, modAttack)
651
+ .setValueAtTime(peekRate, modHold)
652
+ .linearRampToValueAtTime(baseRate, modDecay);
638
653
  }
639
654
  clampCutoffFrequency(frequency) {
640
655
  const minFrequency = 20; // min Hz of initialFilterFc
@@ -681,27 +696,26 @@ class MidyGMLite {
681
696
  note.modulationLFO.connect(note.modulationDepth);
682
697
  note.modulationDepth.connect(note.bufferSource.detune);
683
698
  note.modulationLFO.connect(note.volumeDepth);
684
- note.volumeDepth.connect(note.volumeNode.gain);
699
+ note.volumeDepth.connect(note.volumeEnvelopeNode.gain);
685
700
  }
686
701
  async createNote(channel, voice, noteNumber, velocity, startTime, isSF3) {
687
702
  const state = channel.state;
688
703
  const voiceParams = voice.getAllParams(state.array);
689
704
  const note = new Note(noteNumber, velocity, startTime, voice, voiceParams);
690
705
  note.bufferSource = await this.createNoteBufferNode(voiceParams, isSF3);
691
- note.volumeNode = new GainNode(this.audioContext);
706
+ note.volumeEnvelopeNode = new GainNode(this.audioContext);
692
707
  note.filterNode = new BiquadFilterNode(this.audioContext, {
693
708
  type: "lowpass",
694
709
  Q: voiceParams.initialFilterQ / 10, // dB
695
710
  });
696
711
  this.setVolumeEnvelope(note);
697
712
  this.setFilterEnvelope(note);
698
- this.setPlaybackRate(note);
713
+ this.setPitchEnvelope(note);
699
714
  if (0 < state.modulationDepth) {
700
- this.setPitch(channel, note);
701
715
  this.startModulation(channel, note, startTime);
702
716
  }
703
717
  note.bufferSource.connect(note.filterNode);
704
- note.filterNode.connect(note.volumeNode);
718
+ note.filterNode.connect(note.volumeEnvelopeNode);
705
719
  note.bufferSource.start(startTime);
706
720
  return note;
707
721
  }
@@ -717,8 +731,8 @@ class MidyGMLite {
717
731
  if (!voice)
718
732
  return;
719
733
  const note = await this.createNote(channel, voice, noteNumber, velocity, startTime, isSF3);
720
- note.volumeNode.connect(channel.gainL);
721
- note.volumeNode.connect(channel.gainR);
734
+ note.volumeEnvelopeNode.connect(channel.gainL);
735
+ note.volumeEnvelopeNode.connect(channel.gainR);
722
736
  const exclusiveClass = note.voiceParams.exclusiveClass;
723
737
  if (exclusiveClass !== 0) {
724
738
  if (this.exclusiveClassMap.has(exclusiveClass)) {
@@ -746,7 +760,7 @@ class MidyGMLite {
746
760
  }
747
761
  stopNote(endTime, stopTime, scheduledNotes, index) {
748
762
  const note = scheduledNotes[index];
749
- note.volumeNode.gain
763
+ note.volumeEnvelopeNode.gain
750
764
  .cancelScheduledValues(endTime)
751
765
  .linearRampToValueAtTime(0, stopTime);
752
766
  note.ending = true;
@@ -757,8 +771,8 @@ class MidyGMLite {
757
771
  note.bufferSource.onended = () => {
758
772
  scheduledNotes[index] = null;
759
773
  note.bufferSource.disconnect();
760
- note.volumeNode.disconnect();
761
774
  note.filterNode.disconnect();
775
+ note.volumeEnvelopeNode.disconnect();
762
776
  if (note.modulationDepth) {
763
777
  note.volumeDepth.disconnect();
764
778
  note.modulationDepth.disconnect();
@@ -841,29 +855,22 @@ class MidyGMLite {
841
855
  setPitchBend(channelNumber, value) {
842
856
  const channel = this.channels[channelNumber];
843
857
  const state = channel.state;
858
+ const prev = state.pitchWheel * 2 - 1;
859
+ const next = (value - 8192) / 8192;
844
860
  state.pitchWheel = value / 16383;
845
- const pitchWheel = (value - 8192) / 8192;
846
- const detuneChange = pitchWheel * state.pitchWheelSensitivity * 12800;
847
- this.updateDetune(channel, detuneChange);
861
+ channel.detune += (next - prev) * state.pitchWheelSensitivity * 12800;
862
+ this.updateDetune(channel);
863
+ this.applyVoiceParams(channel, 14);
848
864
  }
849
865
  setModLfoToPitch(channel, note) {
850
866
  const now = this.audioContext.currentTime;
851
867
  const modLfoToPitch = note.voiceParams.modLfoToPitch;
852
- const modulationDepth = Math.abs(modLfoToPitch) +
868
+ const baseDepth = Math.abs(modLfoToPitch) +
853
869
  channel.state.modulationDepth;
854
- const modulationDepthSign = (0 < modLfoToPitch) ? 1 : -1;
870
+ const modulationDepth = baseDepth * Math.sign(modLfoToPitch);
855
871
  note.modulationDepth.gain
856
872
  .cancelScheduledValues(now)
857
- .setValueAtTime(modulationDepth * modulationDepthSign, now);
858
- }
859
- setModLfoToVolume(note) {
860
- const now = this.audioContext.currentTime;
861
- const modLfoToVolume = note.voiceParams.modLfoToVolume;
862
- const volumeDepth = this.cbToRatio(Math.abs(modLfoToVolume)) - 1;
863
- const volumeDepthSign = (0 < modLfoToVolume) ? 1 : -1;
864
- note.volumeDepth.gain
865
- .cancelScheduledValues(now)
866
- .setValueAtTime(volumeDepth * volumeDepthSign, now);
873
+ .setValueAtTime(modulationDepth, now);
867
874
  }
868
875
  setModLfoToFilterFc(note) {
869
876
  const now = this.audioContext.currentTime;
@@ -872,6 +879,15 @@ class MidyGMLite {
872
879
  .cancelScheduledValues(now)
873
880
  .setValueAtTime(modLfoToFilterFc, now);
874
881
  }
882
+ setModLfoToVolume(note) {
883
+ const now = this.audioContext.currentTime;
884
+ const modLfoToVolume = note.voiceParams.modLfoToVolume;
885
+ const baseDepth = this.cbToRatio(Math.abs(modLfoToVolume)) - 1;
886
+ const volumeDepth = baseDepth * Math.sign(modLfoToVolume);
887
+ note.volumeDepth.gain
888
+ .cancelScheduledValues(now)
889
+ .setValueAtTime(volumeDepth, now);
890
+ }
875
891
  setDelayModLFO(note) {
876
892
  const now = this.audioContext.currentTime;
877
893
  const startTime = note.startTime;
@@ -948,7 +964,7 @@ class MidyGMLite {
948
964
  noteVoiceParams[key] = voiceParams[key];
949
965
  }
950
966
  this.setFilterEnvelope(channel, note);
951
- this.setPitch(channel, note);
967
+ this.setPitchEnvelope(note);
952
968
  }
953
969
  else if (volumeEnvelopeKeySet.has(key)) {
954
970
  if (appliedVolumeEnvelope)
@@ -1002,7 +1018,7 @@ class MidyGMLite {
1002
1018
  note.modulationDepth.gain.setValueAtTime(channel.state.modulationDepth, now);
1003
1019
  }
1004
1020
  else {
1005
- this.setPitch(channel, note);
1021
+ this.setPitchEnvelope(note);
1006
1022
  this.startModulation(channel, note, now);
1007
1023
  }
1008
1024
  }
@@ -1097,20 +1113,6 @@ class MidyGMLite {
1097
1113
  this.channels[channelNumber].dataMSB = value;
1098
1114
  this.handleRPN(channelNumber);
1099
1115
  }
1100
- updateDetune(channel, detune) {
1101
- const now = this.audioContext.currentTime;
1102
- channel.scheduledNotes.forEach((noteList) => {
1103
- for (let i = 0; i < noteList.length; i++) {
1104
- const note = noteList[i];
1105
- if (!note)
1106
- continue;
1107
- const { bufferSource } = note;
1108
- bufferSource.detune
1109
- .cancelScheduledValues(now)
1110
- .setValueAtTime(detune, now);
1111
- }
1112
- });
1113
- }
1114
1116
  handlePitchBendRangeRPN(channelNumber) {
1115
1117
  const channel = this.channels[channelNumber];
1116
1118
  this.limitData(channel, 0, 127, 0, 99);
@@ -1237,6 +1239,7 @@ Object.defineProperty(MidyGMLite, "channelSettings", {
1237
1239
  writable: true,
1238
1240
  value: {
1239
1241
  currentBufferSource: null,
1242
+ detune: 0,
1240
1243
  program: 0,
1241
1244
  bank: 0,
1242
1245
  dataMSB: 0,
package/script/midy.d.ts CHANGED
@@ -1,6 +1,10 @@
1
1
  export class Midy {
2
2
  static channelSettings: {
3
3
  currentBufferSource: null;
4
+ detune: number;
5
+ scaleOctaveTuningTable: any[];
6
+ pressureTable: Uint8Array<ArrayBuffer>;
7
+ keyBasedInstrumentControlTable: Int8Array<ArrayBuffer>;
4
8
  program: number;
5
9
  bank: number;
6
10
  bankMSB: number;
@@ -79,8 +83,8 @@ export class Midy {
79
83
  vibLfoToPitch: (channel: any, note: any, _prevValue: any) => void;
80
84
  modLfoToFilterFc: (channel: any, note: any, _prevValue: any) => void;
81
85
  modLfoToVolume: (channel: any, note: any) => void;
82
- chorusEffectsSend: (_channel: any, note: any, prevValue: any) => void;
83
- reverbEffectsSend: (_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;
84
88
  delayModLFO: (_channel: any, note: any, _prevValue: any) => void;
85
89
  freqModLFO: (_channel: any, note: any, _prevValue: any) => void;
86
90
  delayVibLFO: (channel: any, note: any, prevValue: any) => void;
@@ -192,12 +196,16 @@ export class Midy {
192
196
  feedbackGains: any[];
193
197
  };
194
198
  cbToRatio(cb: any): number;
199
+ rateToCent(rate: any): number;
200
+ centToRate(cent: any): number;
195
201
  centToHz(cent: any): number;
196
- calcSemitoneOffset(channel: any): any;
202
+ calcChannelDetune(channel: any): any;
203
+ calcNoteDetune(channel: any, note: any): any;
204
+ updateDetune(channel: any): void;
205
+ getPortamentoTime(channel: any): number;
197
206
  setPortamentoStartVolumeEnvelope(channel: any, note: any): void;
198
207
  setVolumeEnvelope(channel: any, note: any): void;
199
- setPlaybackRate(note: any): void;
200
- setPitch(channel: any, note: any): void;
208
+ setPitchEnvelope(note: any): void;
201
209
  clampCutoffFrequency(frequency: any): number;
202
210
  setPortamentoStartFilterEnvelope(channel: any, note: any): void;
203
211
  setFilterEnvelope(channel: any, note: any): void;
@@ -215,15 +223,16 @@ export class Midy {
215
223
  handleMIDIMessage(statusByte: any, data1: any, data2: any): void | Promise<any>;
216
224
  handlePolyphonicKeyPressure(channelNumber: any, noteNumber: any, pressure: any): void;
217
225
  handleProgramChange(channelNumber: any, program: any): void;
218
- handleChannelPressure(channelNumber: any, pressure: any): void;
226
+ handleChannelPressure(channelNumber: any, value: any): void;
227
+ setChannelPressure(channel: any, note: any): void;
219
228
  handlePitchBendMessage(channelNumber: any, lsb: any, msb: any): void;
220
229
  setPitchBend(channelNumber: any, value: any): void;
221
230
  setModLfoToPitch(channel: any, note: any): void;
222
- setModLfoToVolume(note: any): void;
223
- setChorusEffectsSend(note: any, prevValue: any): void;
224
- setReverbEffectsSend(note: any, prevValue: any): void;
225
231
  setVibLfoToPitch(channel: any, note: any): void;
226
- setModLfoToFilterFc(note: any): void;
232
+ setModLfoToFilterFc(channel: any, note: any): void;
233
+ setModLfoToVolume(channel: any, note: any): void;
234
+ setReverbEffectsSend(channel: any, note: any, prevValue: any): void;
235
+ setChorusEffectsSend(channel: any, note: any, prevValue: any): void;
227
236
  setDelayModLFO(note: any): void;
228
237
  setFreqModLFO(note: any): void;
229
238
  createVoiceParamsHandlers(): {
@@ -231,14 +240,14 @@ export class Midy {
231
240
  vibLfoToPitch: (channel: any, note: any, _prevValue: any) => void;
232
241
  modLfoToFilterFc: (channel: any, note: any, _prevValue: any) => void;
233
242
  modLfoToVolume: (channel: any, note: any) => void;
234
- chorusEffectsSend: (_channel: any, note: any, prevValue: any) => void;
235
- reverbEffectsSend: (_channel: any, note: any, prevValue: any) => void;
243
+ chorusEffectsSend: (channel: any, note: any, prevValue: any) => void;
244
+ reverbEffectsSend: (channel: any, note: any, prevValue: any) => void;
236
245
  delayModLFO: (_channel: any, note: any, _prevValue: any) => void;
237
246
  freqModLFO: (_channel: any, note: any, _prevValue: any) => void;
238
247
  delayVibLFO: (channel: any, note: any, prevValue: any) => void;
239
248
  freqVibLFO: (channel: any, note: any, _prevValue: any) => void;
240
249
  };
241
- getControllerState(channel: any, noteNumber: any, velocity: any): Float32Array;
250
+ getControllerState(channel: any, noteNumber: any, velocity: any): Float32Array<any>;
242
251
  applyVoiceParams(channel: any, controllerType: any): void;
243
252
  createControlChangeHandlers(): {
244
253
  0: (channelNumber: any, msb: any) => void;
@@ -281,11 +290,13 @@ export class Midy {
281
290
  updateModulation(channel: any): void;
282
291
  setModulationDepth(channelNumber: any, modulation: any): void;
283
292
  setPortamentoTime(channelNumber: any, portamentoTime: any): void;
293
+ setKeyBasedVolume(channel: any): void;
284
294
  setVolume(channelNumber: any, volume: any): void;
285
295
  panToGain(pan: any): {
286
296
  gainLeft: number;
287
297
  gainRight: number;
288
298
  };
299
+ setKeyBasedPan(channel: any): void;
289
300
  setPan(channelNumber: any, pan: any): void;
290
301
  setExpression(channelNumber: any, expression: any): void;
291
302
  setBankLSB(channelNumber: any, lsb: any): void;
@@ -293,8 +304,6 @@ export class Midy {
293
304
  updateChannelVolume(channel: any): void;
294
305
  setSustainPedal(channelNumber: any, value: any): void;
295
306
  setPortamento(channelNumber: any, value: any): void;
296
- setReverbSendLevel(channelNumber: any, reverbSendLevel: any): void;
297
- setChorusSendLevel(channelNumber: any, chorusSendLevel: any): void;
298
307
  setSostenutoPedal(channelNumber: any, value: any): void;
299
308
  setSoftPedal(channelNumber: any, softPedal: any): void;
300
309
  setFilterResonance(channelNumber: any, filterResonance: any): void;
@@ -305,6 +314,8 @@ export class Midy {
305
314
  setVibratoRate(channelNumber: any, vibratoRate: any): void;
306
315
  setVibratoDepth(channelNumber: any, vibratoDepth: any): void;
307
316
  setVibratoDelay(channelNumber: any, vibratoDelay: any): void;
317
+ setReverbSendLevel(channelNumber: any, reverbSendLevel: any): void;
318
+ setChorusSendLevel(channelNumber: any, chorusSendLevel: any): void;
308
319
  limitData(channel: any, minMSB: any, maxMSB: any, minLSB: any, maxLSB: any): void;
309
320
  limitDataMSB(channel: any, minMSB: any, maxMSB: any): void;
310
321
  handleRPN(channelNumber: any, value: any): void;
@@ -313,13 +324,12 @@ export class Midy {
313
324
  setRPNMSB(channelNumber: any, value: any): void;
314
325
  setRPNLSB(channelNumber: any, value: any): void;
315
326
  dataEntryMSB(channelNumber: any, value: any): void;
316
- updateDetune(channel: any, detune: any): void;
317
327
  handlePitchBendRangeRPN(channelNumber: any): void;
318
- setPitchBendRange(channelNumber: any, pitchWheelSensitivity: any): void;
328
+ setPitchBendRange(channelNumber: any, value: any): void;
319
329
  handleFineTuningRPN(channelNumber: any): void;
320
- setFineTuning(channelNumber: any, fineTuning: any): void;
330
+ setFineTuning(channelNumber: any, value: any): void;
321
331
  handleCoarseTuningRPN(channelNumber: any): void;
322
- setCoarseTuning(channelNumber: any, coarseTuning: any): void;
332
+ setCoarseTuning(channelNumber: any, value: any): void;
323
333
  handleModulationDepthRangeRPN(channelNumber: any): void;
324
334
  setModulationDepthRange(channelNumber: any, modulationDepthRange: any): void;
325
335
  allSoundOff(channelNumber: any): Promise<void>;
@@ -336,9 +346,9 @@ export class Midy {
336
346
  handleMasterVolumeSysEx(data: any): void;
337
347
  setMasterVolume(volume: any): void;
338
348
  handleMasterFineTuningSysEx(data: any): void;
339
- setMasterFineTuning(fineTuning: any): void;
349
+ setMasterFineTuning(value: any): void;
340
350
  handleMasterCoarseTuningSysEx(data: any): void;
341
- setMasterCoarseTuning(coarseTuning: any): void;
351
+ setMasterCoarseTuning(value: any): void;
342
352
  handleGlobalParameterControlSysEx(data: any): void;
343
353
  handleReverbParameterSysEx(data: any): void;
344
354
  setReverbType(type: any): void;
@@ -357,6 +367,11 @@ export class Midy {
357
367
  getChorusFeedback(value: any): number;
358
368
  setChorusSendToReverb(value: any): void;
359
369
  getChorusSendToReverb(value: any): number;
370
+ getChannelBitmap(data: any): any[];
371
+ handleScaleOctaveTuning1ByteFormatSysEx(data: any): void;
372
+ handleChannelPressureSysEx(data: any): void;
373
+ getKeyBasedInstrumentControlValue(channel: any, keyNumber: any, controllerType: any): number;
374
+ handleKeyBasedInstrumentControlSysEx(data: any): void;
360
375
  handleExclusiveMessage(data: any): void;
361
376
  handleSysEx(data: any): void;
362
377
  scheduleTask(callback: any, startTime: any): Promise<any>;
@@ -365,7 +380,10 @@ declare class Note {
365
380
  constructor(noteNumber: any, velocity: any, startTime: any, voice: any, voiceParams: any);
366
381
  bufferSource: any;
367
382
  filterNode: any;
383
+ volumeEnvelopeNode: any;
368
384
  volumeNode: any;
385
+ gainL: any;
386
+ gainR: any;
369
387
  volumeDepth: any;
370
388
  modulationLFO: any;
371
389
  modulationDepth: any;
@@ -1 +1 @@
1
- {"version":3,"file":"midy.d.ts","sourceRoot":"","sources":["../src/midy.js"],"names":[],"mappings":"AA8GA;IAmCE;;;;;;;;;;;;;MAaE;IAEF;;;;;;;MAOE;IAgCF;;;;;OAaC;IArGD,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;IAClB,iCAA8B;IA0B9B;;;;;MA4BE;IAGA,kBAAgC;IAChC;;;;;MAAqD;IACrD,gBAA4C;IAC5C;;;;;;;;;;;MAA2D;IAC3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAA+D;IAC/D,gBAAiD;IACjD;;;MAA8D;IAC9D;;;;;;;;MAAyD;IAO3D,4BAMC;IAED,mCAWC;IAED,gDAMC;IAED,sCASC;IAED;;;;MAeC;IAED,yCAiBC;IAED,6DA2BC;IAED,iEAUC;IAED,2CAcC;IAED,2EA8DC;IAED,mCAOC;IAED,0BAkDC;IAED,uDAEC;IAED,wDAEC;IAED;;;MAoGC;IAED,+EAoBC;IAED,qDAKC;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;;;MA8BC;IAED;;;;;;;;MA0CC;IAED,2BAEC;IAED,4BAEC;IAED,sCAOC;IAED,gEAWC;IAED,iDAiBC;IAED,iCAKC;IAED,wCAmBC;IAED,6CAIC;IAED,gEAsBC;IAED,iDA2BC;IAED,+DAoBC;IAED,4DAcC;IAED,iIAwDC;IAED,gDAQC;IAED,mHA0DC;IAED,2FASC;IAED,qFAkCC;IAED,wJAuCC;IAED,qHAUC;IAED,kEAeC;IAED,oEAYC;IAED,gFAqBC;IAED,sFAeC;IAED,4DAIC;IAED,+DAeC;IAED,qEAGC;IAED,mDAQC;IAED,gDASC;IAED,mCAQC;IAED,sDAsBC;IAED,sDAsBC;IAED,gDASC;IAED,qCAMC;IAED,gCAOC;IAED,+BAMC;IAED;;;;;;;;;;;MA+CC;IAED,+EAMC;IAED,0DAiDC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAqCC;IAED,+EAYC;IAED,+CAEC;IAED,qCAiBC;IAED,8DAKC;IAED,iEAIC;IAED,iDAIC;IAED;;;MAMC;IAED,2CAIC;IAED,yDAIC;IAED,+CAEC;IAED,mDAGC;IAED,wCAWC;IAED,sDAKC;IAED,oDAEC;IAED,mEAmCC;IAED,mEAmCC;IAED,wDAUC;IAED,uDAGC;IAED,mEAaC;IAED,2DAGC;IAED,yDAYC;IAED,yDAUC;IAED,uDAUC;IAED,2DAWC;IAED,6DAGC;IAED,6DAGC;IAED,kFAeC;IAED,2DAMC;IAED,gDAyBC;IAGD,wCAEC;IAGD,wCAEC;IAED,gDAEC;IAED,gDAEC;IAED,mDAGC;IAED,8CAYC;IAED,kDAKC;IAED,wEAOC;IAED,8CAKC;IAED,yDAMC;IAED,gDAKC;IAED,6DAMC;IAED,wDAKC;IAED,6EAKC;IAED,+CAEC;IAED,8CAyBC;IAED,+CAEC;IAED,gBAEC;IAED,eAEC;IAED,eAEC;IAED,eAEC;IAED,4DAmBC;IAED,oBASC;IAED,oBASC;IAED,yDAiDC;IAED,yCAGC;IAED,mCAQC;IAED,6CAGC;IAED,2CAMC;IAED,+CAGC;IAED,+CAMC;IAED,mDAeC;IAED,4CAOC;IAED,+BAKC;IAED,qDAiBC;IAED,gCAIC;IAED,kCAEC;IA6BD,4CAEC;IAED,4CAaC;IAED,+BAiBC;IAED,wFAKC;IAED,mCAKC;IAED,qCAEC;IAED,oCAOC;IAED,sCAEC;IAED,oCAUC;IAED,sCAEC;IAED,wCAuBC;IAED,0CAEC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AAz4ED;IAaE,0FAMC;IAlBD,kBAAa;IACb,gBAAW;IACX,gBAAW;IACX,iBAAY;IACZ,mBAAc;IACd,qBAAgB;IAChB,gBAAW;IACX,kBAAa;IACb,uBAAkB;IAClB,uBAAkB;IAClB,gBAAW;IAGT,gBAA4B;IAC5B,cAAwB;IACxB,eAA0B;IAC1B,WAAkB;IAClB,iBAA8B;CAEjC"}
1
+ {"version":3,"file":"midy.d.ts","sourceRoot":"","sources":["../src/midy.js"],"names":[],"mappings":"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"}