@marmooo/midy 0.0.7 → 0.0.8
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 +6 -4
- package/esm/midy-GM1.d.ts.map +1 -1
- package/esm/midy-GM1.js +32 -21
- package/esm/midy-GM2.d.ts +11 -7
- package/esm/midy-GM2.d.ts.map +1 -1
- package/esm/midy-GM2.js +57 -34
- package/esm/midy-GMLite.d.ts +4 -2
- package/esm/midy-GMLite.d.ts.map +1 -1
- package/esm/midy-GMLite.js +19 -14
- package/esm/midy.d.ts +14 -10
- package/esm/midy.d.ts.map +1 -1
- package/esm/midy.js +61 -35
- package/package.json +1 -1
- package/script/midy-GM1.d.ts +6 -4
- package/script/midy-GM1.d.ts.map +1 -1
- package/script/midy-GM1.js +32 -21
- package/script/midy-GM2.d.ts +11 -7
- package/script/midy-GM2.d.ts.map +1 -1
- package/script/midy-GM2.js +57 -34
- package/script/midy-GMLite.d.ts +4 -2
- package/script/midy-GMLite.d.ts.map +1 -1
- package/script/midy-GMLite.js +19 -14
- package/script/midy.d.ts +14 -10
- package/script/midy.d.ts.map +1 -1
- package/script/midy.js +61 -35
package/esm/midy-GM1.d.ts
CHANGED
|
@@ -130,6 +130,7 @@ export class MidyGM1 {
|
|
|
130
130
|
handlePitchBendMessage(channelNumber: any, lsb: any, msb: any): void;
|
|
131
131
|
setPitchBend(channelNumber: any, pitchBend: any): void;
|
|
132
132
|
handleControlChange(channelNumber: any, controller: any, value: any): void | any[];
|
|
133
|
+
updateModulation(channel: any): void;
|
|
133
134
|
setModulation(channelNumber: any, modulation: any): void;
|
|
134
135
|
setVolume(channelNumber: any, volume: any): void;
|
|
135
136
|
panToGain(pan: any): {
|
|
@@ -138,6 +139,7 @@ export class MidyGM1 {
|
|
|
138
139
|
};
|
|
139
140
|
setPan(channelNumber: any, pan: any): void;
|
|
140
141
|
setExpression(channelNumber: any, expression: any): void;
|
|
142
|
+
dataEntryLSB(channelNumber: any, value: any): void;
|
|
141
143
|
updateChannelGain(channel: any): void;
|
|
142
144
|
setSustainPedal(channelNumber: any, value: any): void;
|
|
143
145
|
limitData(channel: any, minMSB: any, maxMSB: any, minLSB: any, maxLSB: any): void;
|
|
@@ -145,13 +147,13 @@ export class MidyGM1 {
|
|
|
145
147
|
handleRPN(channelNumber: any): void;
|
|
146
148
|
setRPNMSB(channelNumber: any, value: any): void;
|
|
147
149
|
setRPNLSB(channelNumber: any, value: any): void;
|
|
148
|
-
|
|
150
|
+
dataEntryMSB(channelNumber: any, value: any): void;
|
|
149
151
|
updateDetune(channel: any, detuneChange: any): void;
|
|
150
|
-
|
|
152
|
+
handlePitchBendRangeRPN(channelNumber: any): void;
|
|
151
153
|
setPitchBendRange(channelNumber: any, pitchBendRange: any): void;
|
|
152
|
-
|
|
154
|
+
handleFineTuningRPN(channelNumber: any): void;
|
|
153
155
|
setFineTuning(channelNumber: any, fineTuning: any): void;
|
|
154
|
-
|
|
156
|
+
handleCoarseTuningRPN(channelNumber: any): void;
|
|
155
157
|
setCoarseTuning(channelNumber: any, coarseTuning: any): void;
|
|
156
158
|
allSoundOff(channelNumber: any): any[];
|
|
157
159
|
resetAllControllers(channelNumber: any): void;
|
package/esm/midy-GM1.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"midy-GM1.d.ts","sourceRoot":"","sources":["../src/midy-GM1.js"],"names":[],"mappings":"AAqBA;IAmBE;;;;;;;;;;;MAWE;IAEF;;;;;;;MAOE;IAEF,+BAMC;IA9CD,qBAAmB;IACnB,kBAAc;IACd,0BAAwB;IACxB,kBAAc;IACd,mBAAiB;IACjB,kBAAc;IACd,mBAAe;IACf,kBAAgB;IAChB,sBAA2C;IAC3C,mBAAkB;IAClB,mBAAkB;IAClB,kBAAiB;IACjB,oBAAmB;IACnB,mBAAkB;IAClB,gBAAc;IACd,mBAAiB;IACjB,oBAAkB;IAyBhB,kBAAgC;IAChC,gBAA4C;IAE5C;;;;;;;;;;;;;;;;;;;;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,
|
|
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,qCAcC;IAED,yDAIC;IACD,iDAIC;IAED;;;MAMC;IAED,2CAIC;IAED,yDAIC;IAED,mDAGC;IAED,sCAUC;IAED,sDAMC;IAED,kFAeC;IAED,2DAMC;IAED,oCAkBC;IAED,gDAEC;IAED,gDAEC;IAED,mDAGC;IAED,oDAUC;IAED,kDAKC;IAED,iEAOC;IAED,8CAKC;IAED,yDAMC;IAED,gDAKC;IAED,6DAMC;IAED,uCAoBC;IAED,8CAEC;IAED,uCAoBC;IAED,4DAgBC;IAED,oBAQC;IAED,yDAaC;IAED,yCAGC;IAED,mCAQC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AAtjCD;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
|
@@ -716,7 +716,7 @@ export class MidyGM1 {
|
|
|
716
716
|
case 1:
|
|
717
717
|
return this.setModulation(channelNumber, value);
|
|
718
718
|
case 6:
|
|
719
|
-
return this.
|
|
719
|
+
return this.dataEntryMSB(channelNumber, value);
|
|
720
720
|
case 7:
|
|
721
721
|
return this.setVolume(channelNumber, value);
|
|
722
722
|
case 10:
|
|
@@ -724,7 +724,7 @@ export class MidyGM1 {
|
|
|
724
724
|
case 11:
|
|
725
725
|
return this.setExpression(channelNumber, value);
|
|
726
726
|
case 38:
|
|
727
|
-
return this.
|
|
727
|
+
return this.dataEntryLSB(channelNumber, value);
|
|
728
728
|
case 64:
|
|
729
729
|
return this.setSustainPedal(channelNumber, value);
|
|
730
730
|
case 100:
|
|
@@ -741,22 +741,24 @@ export class MidyGM1 {
|
|
|
741
741
|
console.warn(`Unsupported Control change: controller=${controller} value=${value}`);
|
|
742
742
|
}
|
|
743
743
|
}
|
|
744
|
-
|
|
744
|
+
updateModulation(channel) {
|
|
745
745
|
const now = this.audioContext.currentTime;
|
|
746
|
-
const channel = this.channels[channelNumber];
|
|
747
|
-
channel.modulation = (modulation / 127) *
|
|
748
|
-
(channel.modulationDepthRange * 100);
|
|
749
746
|
const activeNotes = this.getActiveNotes(channel, now);
|
|
750
747
|
activeNotes.forEach((activeNote) => {
|
|
751
748
|
if (activeNote.modLFO) {
|
|
752
|
-
|
|
753
|
-
|
|
749
|
+
const { gainNode, instrumentKey } = activeNote;
|
|
750
|
+
gainNode.gain.setValueAtTime(this.cbToRatio(instrumentKey.modLfoToVolume + channel.modulation), now);
|
|
754
751
|
}
|
|
755
752
|
else {
|
|
756
753
|
this.startModulation(channel, activeNote, now);
|
|
757
754
|
}
|
|
758
755
|
});
|
|
759
756
|
}
|
|
757
|
+
setModulation(channelNumber, modulation) {
|
|
758
|
+
const channel = this.channels[channelNumber];
|
|
759
|
+
channel.modulation = (modulation / 127) * channel.modulationDepthRange;
|
|
760
|
+
this.updateModulation(channel);
|
|
761
|
+
}
|
|
760
762
|
setVolume(channelNumber, volume) {
|
|
761
763
|
const channel = this.channels[channelNumber];
|
|
762
764
|
channel.volume = volume / 127;
|
|
@@ -779,6 +781,10 @@ export class MidyGM1 {
|
|
|
779
781
|
channel.expression = expression / 127;
|
|
780
782
|
this.updateChannelGain(channel);
|
|
781
783
|
}
|
|
784
|
+
dataEntryLSB(channelNumber, value) {
|
|
785
|
+
this.channels[channelNumber].dataLSB = value;
|
|
786
|
+
this.handleRPN(channelNumber, 0);
|
|
787
|
+
}
|
|
782
788
|
updateChannelGain(channel) {
|
|
783
789
|
const now = this.audioContext.currentTime;
|
|
784
790
|
const volume = channel.volume * channel.expression;
|
|
@@ -828,13 +834,13 @@ export class MidyGM1 {
|
|
|
828
834
|
const rpn = channel.rpnMSB * 128 + channel.rpnLSB;
|
|
829
835
|
switch (rpn) {
|
|
830
836
|
case 0:
|
|
831
|
-
this.
|
|
837
|
+
this.handlePitchBendRangeRPN(channelNumber);
|
|
832
838
|
break;
|
|
833
839
|
case 1:
|
|
834
|
-
this.
|
|
840
|
+
this.handleFineTuningRPN(channelNumber);
|
|
835
841
|
break;
|
|
836
842
|
case 2:
|
|
837
|
-
this.
|
|
843
|
+
this.handleCoarseTuningRPN(channelNumber);
|
|
838
844
|
break;
|
|
839
845
|
default:
|
|
840
846
|
console.warn(`Channel ${channelNumber}: Unsupported RPN MSB=${channel.rpnMSB} LSB=${channel.rpnLSB}`);
|
|
@@ -846,9 +852,8 @@ export class MidyGM1 {
|
|
|
846
852
|
setRPNLSB(channelNumber, value) {
|
|
847
853
|
this.channels[channelNumber].rpnLSB = value;
|
|
848
854
|
}
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
isMSB ? channel.dataMSB = value : channel.dataLSB = value;
|
|
855
|
+
dataEntryMSB(channelNumber, value) {
|
|
856
|
+
this.channels[channelNumber].dataMSB = value;
|
|
852
857
|
this.handleRPN(channelNumber);
|
|
853
858
|
}
|
|
854
859
|
updateDetune(channel, detuneChange) {
|
|
@@ -862,7 +867,7 @@ export class MidyGM1 {
|
|
|
862
867
|
.setValueAtTime(detune, now);
|
|
863
868
|
});
|
|
864
869
|
}
|
|
865
|
-
|
|
870
|
+
handlePitchBendRangeRPN(channelNumber) {
|
|
866
871
|
const channel = this.channels[channelNumber];
|
|
867
872
|
this.limitData(channel, 0, 127, 0, 99);
|
|
868
873
|
const pitchBendRange = channel.dataMSB + channel.dataLSB / 100;
|
|
@@ -876,7 +881,7 @@ export class MidyGM1 {
|
|
|
876
881
|
channel.pitchBend * 100;
|
|
877
882
|
this.updateDetune(channel, detuneChange);
|
|
878
883
|
}
|
|
879
|
-
|
|
884
|
+
handleFineTuningRPN(channelNumber) {
|
|
880
885
|
const channel = this.channels[channelNumber];
|
|
881
886
|
this.limitData(channel, 0, 127, 0, 127);
|
|
882
887
|
const fineTuning = (channel.dataMSB * 128 + channel.dataLSB - 8192) / 8192;
|
|
@@ -884,9 +889,12 @@ export class MidyGM1 {
|
|
|
884
889
|
}
|
|
885
890
|
setFineTuning(channelNumber, fineTuning) {
|
|
886
891
|
const channel = this.channels[channelNumber];
|
|
892
|
+
const prevFineTuning = channel.fineTuning;
|
|
887
893
|
channel.fineTuning = fineTuning;
|
|
894
|
+
const detuneChange = channel.fineTuning - prevFineTuning;
|
|
895
|
+
this.updateDetune(channel, detuneChange);
|
|
888
896
|
}
|
|
889
|
-
|
|
897
|
+
handleCoarseTuningRPN(channelNumber) {
|
|
890
898
|
const channel = this.channels[channelNumber];
|
|
891
899
|
this.limitDataMSB(channel, 0, 127);
|
|
892
900
|
const coarseTuning = channel.dataMSB - 64;
|
|
@@ -894,7 +902,10 @@ export class MidyGM1 {
|
|
|
894
902
|
}
|
|
895
903
|
setCoarseTuning(channelNumber, coarseTuning) {
|
|
896
904
|
const channel = this.channels[channelNumber];
|
|
897
|
-
|
|
905
|
+
const prevCoarseTuning = channel.coarseTuning;
|
|
906
|
+
channel.coarseTuning = coarseTuning;
|
|
907
|
+
const detuneChange = channel.coarseTuning - prevCoarseTuning;
|
|
908
|
+
this.updateDetune(channel, detuneChange);
|
|
898
909
|
}
|
|
899
910
|
allSoundOff(channelNumber) {
|
|
900
911
|
const now = this.audioContext.currentTime;
|
|
@@ -1020,9 +1031,9 @@ Object.defineProperty(MidyGM1, "channelSettings", {
|
|
|
1020
1031
|
dataLSB: 0,
|
|
1021
1032
|
program: 0,
|
|
1022
1033
|
pitchBend: 0,
|
|
1023
|
-
fineTuning: 0,
|
|
1024
|
-
coarseTuning: 0,
|
|
1025
|
-
modulationDepthRange: 0.5,
|
|
1034
|
+
fineTuning: 0, // cb
|
|
1035
|
+
coarseTuning: 0, // cb
|
|
1036
|
+
modulationDepthRange: 0.5, // cb
|
|
1026
1037
|
}
|
|
1027
1038
|
});
|
|
1028
1039
|
Object.defineProperty(MidyGM1, "effectSettings", {
|
package/esm/midy-GM2.d.ts
CHANGED
|
@@ -237,6 +237,7 @@ export class MidyGM2 {
|
|
|
237
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
|
+
updateModulation(channel: any): void;
|
|
240
241
|
setModulation(channelNumber: any, modulation: any): void;
|
|
241
242
|
setPortamentoTime(channelNumber: any, portamentoTime: any): void;
|
|
242
243
|
setVolume(channelNumber: any, volume: any): void;
|
|
@@ -247,26 +248,29 @@ export class MidyGM2 {
|
|
|
247
248
|
setPan(channelNumber: any, pan: any): void;
|
|
248
249
|
setExpression(channelNumber: any, expression: any): void;
|
|
249
250
|
setBankLSB(channelNumber: any, lsb: any): void;
|
|
251
|
+
dataEntryLSB(channelNumber: any, value: any): void;
|
|
250
252
|
updateChannelGain(channel: any): void;
|
|
251
253
|
setSustainPedal(channelNumber: any, value: any): void;
|
|
252
254
|
setPortamento(channelNumber: any, value: any): void;
|
|
253
|
-
|
|
254
|
-
|
|
255
|
+
setReverbSendLevel(channelNumber: any, reverb: any): void;
|
|
256
|
+
setChorusSendLevel(channelNumber: any, chorus: any): void;
|
|
255
257
|
setSostenutoPedal(channelNumber: any, value: any): void;
|
|
256
258
|
setSoftPedal(channelNumber: any, softPedal: any): void;
|
|
257
259
|
limitData(channel: any, minMSB: any, maxMSB: any, minLSB: any, maxLSB: any): void;
|
|
258
260
|
limitDataMSB(channel: any, minMSB: any, maxMSB: any): void;
|
|
259
|
-
handleRPN(channelNumber: any
|
|
261
|
+
handleRPN(channelNumber: any): void;
|
|
260
262
|
setRPNMSB(channelNumber: any, value: any): void;
|
|
261
263
|
setRPNLSB(channelNumber: any, value: any): void;
|
|
262
|
-
|
|
264
|
+
dataEntryMSB(channelNumber: any, value: any): void;
|
|
263
265
|
updateDetune(channel: any, detuneChange: any): void;
|
|
264
|
-
|
|
266
|
+
handlePitchBendRangeRPN(channelNumber: any): void;
|
|
265
267
|
setPitchBendRange(channelNumber: any, pitchBendRange: any): void;
|
|
266
|
-
|
|
268
|
+
handleFineTuningRPN(channelNumber: any): void;
|
|
267
269
|
setFineTuning(channelNumber: any, fineTuning: any): void;
|
|
268
|
-
|
|
270
|
+
handleCoarseTuningRPN(channelNumber: any): void;
|
|
269
271
|
setCoarseTuning(channelNumber: any, coarseTuning: any): void;
|
|
272
|
+
handleModulationDepthRangeRPN(channelNumber: any): void;
|
|
273
|
+
setModulationDepthRange(channelNumber: any, modulationDepthRange: any): void;
|
|
270
274
|
allSoundOff(channelNumber: any): any[];
|
|
271
275
|
resetAllControllers(channelNumber: any): void;
|
|
272
276
|
allNotesOff(channelNumber: any): any[];
|
package/esm/midy-GM2.d.ts.map
CHANGED
|
@@ -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;;;;;;;;;;;;;;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,
|
|
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,qCAcC;IAED,yDAIC;IAED,iEAEC;IAED,iDAIC;IAED;;;MAMC;IAED,2CAIC;IAED,yDAIC;IAED,+CAEC;IAED,mDAGC;IAED,sCAUC;IAED,sDAMC;IAED,oDAEC;IAED,0DASC;IAED,0DAIC;IAED,wDAWC;IAED,uDAGC;IAED,kFAeC;IAED,2DAMC;IAED,oCAqBC;IAED,gDAEC;IAED,gDAEC;IAED,mDAGC;IAED,oDAUC;IAED,kDAKC;IAED,iEAOC;IAED,8CAKC;IAED,yDAMC;IAED,gDAKC;IAED,6DAMC;IAED,wDAKC;IAED,6EAKC;IAED,uCAoBC;IAED,8CAEC;IAED,uCAoBC;IAED,gBAEC;IAED,eAEC;IAED,eAEC;IAED,eAEC;IAED,4DAmBC;IAED,oBAQC;IAED,oBAQC;IAED,yDAgDC;IAED,yCAGC;IAED,mCAQC;IAED,6CAGC;IAED,2CAMC;IAED,+CAGC;IAED,+CAMC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AAr9CD;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"}
|
package/esm/midy-GM2.js
CHANGED
|
@@ -75,13 +75,13 @@ export class MidyGM2 {
|
|
|
75
75
|
configurable: true,
|
|
76
76
|
writable: true,
|
|
77
77
|
value: 0
|
|
78
|
-
});
|
|
78
|
+
}); // cb
|
|
79
79
|
Object.defineProperty(this, "masterCoarseTuning", {
|
|
80
80
|
enumerable: true,
|
|
81
81
|
configurable: true,
|
|
82
82
|
writable: true,
|
|
83
83
|
value: 0
|
|
84
|
-
});
|
|
84
|
+
}); // cb
|
|
85
85
|
Object.defineProperty(this, "mono", {
|
|
86
86
|
enumerable: true,
|
|
87
87
|
configurable: true,
|
|
@@ -951,7 +951,7 @@ export class MidyGM2 {
|
|
|
951
951
|
case 5:
|
|
952
952
|
return this.setPortamentoTime(channelNumber, value);
|
|
953
953
|
case 6:
|
|
954
|
-
return this.
|
|
954
|
+
return this.dataEntryMSB(channelNumber, value);
|
|
955
955
|
case 7:
|
|
956
956
|
return this.setVolume(channelNumber, value);
|
|
957
957
|
case 10:
|
|
@@ -961,7 +961,7 @@ export class MidyGM2 {
|
|
|
961
961
|
case 32:
|
|
962
962
|
return this.setBankLSB(channelNumber, value);
|
|
963
963
|
case 38:
|
|
964
|
-
return this.
|
|
964
|
+
return this.dataEntryLSB(channelNumber, value);
|
|
965
965
|
case 64:
|
|
966
966
|
return this.setSustainPedal(channelNumber, value);
|
|
967
967
|
case 65:
|
|
@@ -971,9 +971,9 @@ export class MidyGM2 {
|
|
|
971
971
|
case 67:
|
|
972
972
|
return this.setSoftPedal(channelNumber, value);
|
|
973
973
|
case 91:
|
|
974
|
-
return this.
|
|
974
|
+
return this.setReverbSendLevel(channelNumber, value);
|
|
975
975
|
case 93:
|
|
976
|
-
return this.
|
|
976
|
+
return this.setChorusSendLevel(channelNumber, value);
|
|
977
977
|
case 100:
|
|
978
978
|
return this.setRPNLSB(channelNumber, value);
|
|
979
979
|
case 101:
|
|
@@ -999,22 +999,24 @@ export class MidyGM2 {
|
|
|
999
999
|
setBankMSB(channelNumber, msb) {
|
|
1000
1000
|
this.channels[channelNumber].bankMSB = msb;
|
|
1001
1001
|
}
|
|
1002
|
-
|
|
1002
|
+
updateModulation(channel) {
|
|
1003
1003
|
const now = this.audioContext.currentTime;
|
|
1004
|
-
const channel = this.channels[channelNumber];
|
|
1005
|
-
channel.modulation = (modulation / 127) *
|
|
1006
|
-
(channel.modulationDepthRange * 100);
|
|
1007
1004
|
const activeNotes = this.getActiveNotes(channel, now);
|
|
1008
1005
|
activeNotes.forEach((activeNote) => {
|
|
1009
1006
|
if (activeNote.modLFO) {
|
|
1010
|
-
|
|
1011
|
-
|
|
1007
|
+
const { gainNode, instrumentKey } = activeNote;
|
|
1008
|
+
gainNode.gain.setValueAtTime(this.cbToRatio(instrumentKey.modLfoToVolume + channel.modulation), now);
|
|
1012
1009
|
}
|
|
1013
1010
|
else {
|
|
1014
1011
|
this.startModulation(channel, activeNote, now);
|
|
1015
1012
|
}
|
|
1016
1013
|
});
|
|
1017
1014
|
}
|
|
1015
|
+
setModulation(channelNumber, modulation) {
|
|
1016
|
+
const channel = this.channels[channelNumber];
|
|
1017
|
+
channel.modulation = (modulation / 127) * channel.modulationDepthRange;
|
|
1018
|
+
this.updateModulation(channel);
|
|
1019
|
+
}
|
|
1018
1020
|
setPortamentoTime(channelNumber, portamentoTime) {
|
|
1019
1021
|
this.channels[channelNumber].portamentoTime = portamentoTime / 127;
|
|
1020
1022
|
}
|
|
@@ -1043,6 +1045,10 @@ export class MidyGM2 {
|
|
|
1043
1045
|
setBankLSB(channelNumber, lsb) {
|
|
1044
1046
|
this.channels[channelNumber].bankLSB = lsb;
|
|
1045
1047
|
}
|
|
1048
|
+
dataEntryLSB(channelNumber, value) {
|
|
1049
|
+
this.channels[channelNumber].dataLSB = value;
|
|
1050
|
+
this.handleRPN(channelNumber);
|
|
1051
|
+
}
|
|
1046
1052
|
updateChannelGain(channel) {
|
|
1047
1053
|
const now = this.audioContext.currentTime;
|
|
1048
1054
|
const volume = channel.volume * channel.expression;
|
|
@@ -1064,7 +1070,7 @@ export class MidyGM2 {
|
|
|
1064
1070
|
setPortamento(channelNumber, value) {
|
|
1065
1071
|
this.channels[channelNumber].portamento = value >= 64;
|
|
1066
1072
|
}
|
|
1067
|
-
|
|
1073
|
+
setReverbSendLevel(channelNumber, reverb) {
|
|
1068
1074
|
const now = this.audioContext.currentTime;
|
|
1069
1075
|
const channel = this.channels[channelNumber];
|
|
1070
1076
|
const reverbEffect = channel.reverbEffect;
|
|
@@ -1074,7 +1080,7 @@ export class MidyGM2 {
|
|
|
1074
1080
|
reverbEffect.wetGain.gain.cancelScheduledValues(now);
|
|
1075
1081
|
reverbEffect.wetGain.gain.setValueAtTime(channel.reverb, now);
|
|
1076
1082
|
}
|
|
1077
|
-
|
|
1083
|
+
setChorusSendLevel(channelNumber, chorus) {
|
|
1078
1084
|
const channel = this.channels[channelNumber];
|
|
1079
1085
|
channel.chorus = chorus / 127;
|
|
1080
1086
|
channel.chorusEffect.lfoGain = channel.chorus;
|
|
@@ -1122,21 +1128,21 @@ export class MidyGM2 {
|
|
|
1122
1128
|
channel.dataMSB = minMSB;
|
|
1123
1129
|
}
|
|
1124
1130
|
}
|
|
1125
|
-
handleRPN(channelNumber
|
|
1131
|
+
handleRPN(channelNumber) {
|
|
1126
1132
|
const channel = this.channels[channelNumber];
|
|
1127
1133
|
const rpn = channel.rpnMSB * 128 + channel.rpnLSB;
|
|
1128
1134
|
switch (rpn) {
|
|
1129
1135
|
case 0:
|
|
1130
|
-
|
|
1131
|
-
this.handlePitchBendRangeMessage(channelNumber);
|
|
1136
|
+
this.handlePitchBendRangeRPN(channelNumber);
|
|
1132
1137
|
break;
|
|
1133
1138
|
case 1:
|
|
1134
|
-
|
|
1135
|
-
this.handleFineTuningMessage(channelNumber);
|
|
1139
|
+
this.handleFineTuningRPN(channelNumber);
|
|
1136
1140
|
break;
|
|
1137
1141
|
case 2:
|
|
1138
|
-
|
|
1139
|
-
|
|
1142
|
+
this.handleCoarseTuningRPN(channelNumber);
|
|
1143
|
+
break;
|
|
1144
|
+
case 5:
|
|
1145
|
+
this.handleModulationDepthRangeRPN(channelNumber);
|
|
1140
1146
|
break;
|
|
1141
1147
|
default:
|
|
1142
1148
|
console.warn(`Channel ${channelNumber}: Unsupported RPN MSB=${channel.rpnMSB} LSB=${channel.rpnLSB}`);
|
|
@@ -1148,9 +1154,8 @@ export class MidyGM2 {
|
|
|
1148
1154
|
setRPNLSB(channelNumber, value) {
|
|
1149
1155
|
this.channels[channelNumber].rpnLSB = value;
|
|
1150
1156
|
}
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
isMSB ? channel.dataMSB = value : channel.dataLSB = value;
|
|
1157
|
+
dataEntryMSB(channelNumber, value) {
|
|
1158
|
+
this.channels[channelNumber].dataMSB = value;
|
|
1154
1159
|
this.handleRPN(channelNumber);
|
|
1155
1160
|
}
|
|
1156
1161
|
updateDetune(channel, detuneChange) {
|
|
@@ -1164,7 +1169,7 @@ export class MidyGM2 {
|
|
|
1164
1169
|
.setValueAtTime(detune, now);
|
|
1165
1170
|
});
|
|
1166
1171
|
}
|
|
1167
|
-
|
|
1172
|
+
handlePitchBendRangeRPN(channelNumber) {
|
|
1168
1173
|
const channel = this.channels[channelNumber];
|
|
1169
1174
|
this.limitData(channel, 0, 127, 0, 99);
|
|
1170
1175
|
const pitchBendRange = channel.dataMSB + channel.dataLSB / 100;
|
|
@@ -1178,7 +1183,7 @@ export class MidyGM2 {
|
|
|
1178
1183
|
channel.pitchBend * 100;
|
|
1179
1184
|
this.updateDetune(channel, detuneChange);
|
|
1180
1185
|
}
|
|
1181
|
-
|
|
1186
|
+
handleFineTuningRPN(channelNumber) {
|
|
1182
1187
|
const channel = this.channels[channelNumber];
|
|
1183
1188
|
this.limitData(channel, 0, 127, 0, 127);
|
|
1184
1189
|
const fineTuning = (channel.dataMSB * 128 + channel.dataLSB - 8192) / 8192;
|
|
@@ -1186,9 +1191,12 @@ export class MidyGM2 {
|
|
|
1186
1191
|
}
|
|
1187
1192
|
setFineTuning(channelNumber, fineTuning) {
|
|
1188
1193
|
const channel = this.channels[channelNumber];
|
|
1194
|
+
const prevFineTuning = channel.fineTuning;
|
|
1189
1195
|
channel.fineTuning = fineTuning;
|
|
1196
|
+
const detuneChange = channel.fineTuning - prevFineTuning;
|
|
1197
|
+
this.updateDetune(channel, detuneChange);
|
|
1190
1198
|
}
|
|
1191
|
-
|
|
1199
|
+
handleCoarseTuningRPN(channelNumber) {
|
|
1192
1200
|
const channel = this.channels[channelNumber];
|
|
1193
1201
|
this.limitDataMSB(channel, 0, 127);
|
|
1194
1202
|
const coarseTuning = channel.dataMSB - 64;
|
|
@@ -1196,7 +1204,22 @@ export class MidyGM2 {
|
|
|
1196
1204
|
}
|
|
1197
1205
|
setCoarseTuning(channelNumber, coarseTuning) {
|
|
1198
1206
|
const channel = this.channels[channelNumber];
|
|
1199
|
-
|
|
1207
|
+
const prevCoarseTuning = channel.coarseTuning;
|
|
1208
|
+
channel.coarseTuning = coarseTuning;
|
|
1209
|
+
const detuneChange = channel.coarseTuning - prevCoarseTuning;
|
|
1210
|
+
this.updateDetune(channel, detuneChange);
|
|
1211
|
+
}
|
|
1212
|
+
handleModulationDepthRangeRPN(channelNumber) {
|
|
1213
|
+
const channel = this.channels[channelNumber];
|
|
1214
|
+
this.limitData(channel, 0, 127, 0, 127);
|
|
1215
|
+
const modulationDepthRange = dataMSB + dataLSB / 128;
|
|
1216
|
+
this.setModulationDepthRange(channelNumber, modulationDepthRange);
|
|
1217
|
+
}
|
|
1218
|
+
setModulationDepthRange(channelNumber, modulationDepthRange) {
|
|
1219
|
+
const channel = this.channels[channelNumber];
|
|
1220
|
+
channel.modulationDepthRange = modulationDepthRange;
|
|
1221
|
+
channel.modulation = (modulation / 127) * channel.modulationDepthRange;
|
|
1222
|
+
this.updateModulation(channel);
|
|
1200
1223
|
}
|
|
1201
1224
|
allSoundOff(channelNumber) {
|
|
1202
1225
|
const now = this.audioContext.currentTime;
|
|
@@ -1287,9 +1310,9 @@ export class MidyGM2 {
|
|
|
1287
1310
|
switch (data[3]) {
|
|
1288
1311
|
case 1:
|
|
1289
1312
|
return this.handleMasterVolumeSysEx(data);
|
|
1290
|
-
case 3:
|
|
1313
|
+
case 3: // https://amei.or.jp/midistandardcommittee/Recommended_Practice/e/ca25.pdf
|
|
1291
1314
|
return this.handleMasterFineTuningSysEx(data);
|
|
1292
|
-
case 4:
|
|
1315
|
+
case 4: // https://amei.or.jp/midistandardcommittee/Recommended_Practice/e/ca25.pdf
|
|
1293
1316
|
return this.handleMasterCoarseTuningSysEx(data);
|
|
1294
1317
|
// case 5: // TODO: Global Parameter Control
|
|
1295
1318
|
default:
|
|
@@ -1400,7 +1423,7 @@ Object.defineProperty(MidyGM2, "channelSettings", {
|
|
|
1400
1423
|
value: {
|
|
1401
1424
|
currentBufferSource: null,
|
|
1402
1425
|
volume: 100 / 127,
|
|
1403
|
-
pan:
|
|
1426
|
+
pan: 64,
|
|
1404
1427
|
portamentoTime: 0,
|
|
1405
1428
|
reverb: 0,
|
|
1406
1429
|
chorus: 0,
|
|
@@ -1411,9 +1434,9 @@ Object.defineProperty(MidyGM2, "channelSettings", {
|
|
|
1411
1434
|
dataLSB: 0,
|
|
1412
1435
|
program: 0,
|
|
1413
1436
|
pitchBend: 0,
|
|
1414
|
-
fineTuning: 0,
|
|
1415
|
-
coarseTuning: 0,
|
|
1416
|
-
modulationDepthRange: 0.5,
|
|
1437
|
+
fineTuning: 0, // cb
|
|
1438
|
+
coarseTuning: 0, // cb
|
|
1439
|
+
modulationDepthRange: 0.5, // cb
|
|
1417
1440
|
}
|
|
1418
1441
|
});
|
|
1419
1442
|
Object.defineProperty(MidyGM2, "effectSettings", {
|
package/esm/midy-GMLite.d.ts
CHANGED
|
@@ -124,6 +124,7 @@ export class MidyGMLite {
|
|
|
124
124
|
handlePitchBendMessage(channelNumber: any, lsb: any, msb: any): void;
|
|
125
125
|
setPitchBend(channelNumber: any, pitchBend: any): void;
|
|
126
126
|
handleControlChange(channelNumber: any, controller: any, value: any): void | any[];
|
|
127
|
+
updateModulation(channel: any): void;
|
|
127
128
|
setModulation(channelNumber: any, modulation: any): void;
|
|
128
129
|
setVolume(channelNumber: any, volume: any): void;
|
|
129
130
|
panToGain(pan: any): {
|
|
@@ -132,14 +133,15 @@ export class MidyGMLite {
|
|
|
132
133
|
};
|
|
133
134
|
setPan(channelNumber: any, pan: any): void;
|
|
134
135
|
setExpression(channelNumber: any, expression: any): void;
|
|
136
|
+
dataEntryLSB(channelNumber: any, value: any): void;
|
|
135
137
|
updateChannelGain(channel: any): void;
|
|
136
138
|
setSustainPedal(channelNumber: any, value: any): void;
|
|
137
139
|
handleRPN(channelNumber: any): void;
|
|
138
140
|
setRPNMSB(channelNumber: any, value: any): void;
|
|
139
141
|
setRPNLSB(channelNumber: any, value: any): void;
|
|
140
|
-
|
|
142
|
+
dataEntryMSB(channelNumber: any, value: any): void;
|
|
141
143
|
updateDetune(channel: any, detuneChange: any): void;
|
|
142
|
-
|
|
144
|
+
handlePitchBendRangeRPN(channelNumber: any): void;
|
|
143
145
|
setPitchBendRange(channelNumber: any, pitchBendRange: any): void;
|
|
144
146
|
allSoundOff(channelNumber: any): any[];
|
|
145
147
|
resetAllControllers(channelNumber: any): void;
|
package/esm/midy-GMLite.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"midy-GMLite.d.ts","sourceRoot":"","sources":["../src/midy-GMLite.js"],"names":[],"mappings":"AAqBA;IAmBE;;;;;;;;;MASE;IAEF;;;;;;;MAOE;IAEF,+BAMC;IA5CD,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;IAuBhB,kBAAgC;IAChC,gBAA4C;IAE5C;;;;;;;;;;;;;;;;;;QAAiD;IAInD,4BAMC;IAED,mCASC;IAED,gDAMC;IAED,sCASC;IAED;;;MAcC;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,yCAEC;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,
|
|
1
|
+
{"version":3,"file":"midy-GMLite.d.ts","sourceRoot":"","sources":["../src/midy-GMLite.js"],"names":[],"mappings":"AAqBA;IAmBE;;;;;;;;;MASE;IAEF;;;;;;;MAOE;IAEF,+BAMC;IA5CD,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;IAuBhB,kBAAgC;IAChC,gBAA4C;IAE5C;;;;;;;;;;;;;;;;;;QAAiD;IAInD,4BAMC;IAED,mCASC;IAED,gDAMC;IAED,sCASC;IAED;;;MAcC;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,yCAEC;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,qCAcC;IAED,yDAIC;IACD,iDAIC;IAED;;;MAMC;IAED,2CAIC;IAED,yDAIC;IAED,mDAGC;IAED,sCAUC;IAED,sDAMC;IAED,oCAYC;IAED,gDAEC;IAED,gDAEC;IAED,mDAGC;IAED,oDAUC;IAED,kDAKC;IAED,iEAOC;IAED,uCAoBC;IAED,8CAEC;IAED,uCAoBC;IAED,4DAgBC;IAED,oBAQC;IAED,yDAaC;IAED,yCAGC;IAED,mCAQC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AAx/BD;IAOE,gFAKC;IAXD,kBAAa;IACb,cAAS;IACT,gBAAW;IACX,YAAO;IACP,gBAAW;IAGT,gBAA4B;IAC5B,cAAwB;IACxB,eAA0B;IAC1B,mBAAkC;CAErC"}
|
package/esm/midy-GMLite.js
CHANGED
|
@@ -715,7 +715,7 @@ export class MidyGMLite {
|
|
|
715
715
|
case 1:
|
|
716
716
|
return this.setModulation(channelNumber, value);
|
|
717
717
|
case 6:
|
|
718
|
-
return this.
|
|
718
|
+
return this.dataEntryMSB(channelNumber, value);
|
|
719
719
|
case 7:
|
|
720
720
|
return this.setVolume(channelNumber, value);
|
|
721
721
|
case 10:
|
|
@@ -723,7 +723,7 @@ export class MidyGMLite {
|
|
|
723
723
|
case 11:
|
|
724
724
|
return this.setExpression(channelNumber, value);
|
|
725
725
|
case 38:
|
|
726
|
-
return this.
|
|
726
|
+
return this.dataEntryLSB(channelNumber, value);
|
|
727
727
|
case 64:
|
|
728
728
|
return this.setSustainPedal(channelNumber, value);
|
|
729
729
|
case 100:
|
|
@@ -740,22 +740,24 @@ export class MidyGMLite {
|
|
|
740
740
|
console.warn(`Unsupported Control change: controller=${controller} value=${value}`);
|
|
741
741
|
}
|
|
742
742
|
}
|
|
743
|
-
|
|
743
|
+
updateModulation(channel) {
|
|
744
744
|
const now = this.audioContext.currentTime;
|
|
745
|
-
const channel = this.channels[channelNumber];
|
|
746
|
-
channel.modulation = (modulation / 127) *
|
|
747
|
-
(channel.modulationDepthRange * 100);
|
|
748
745
|
const activeNotes = this.getActiveNotes(channel, now);
|
|
749
746
|
activeNotes.forEach((activeNote) => {
|
|
750
747
|
if (activeNote.modLFO) {
|
|
751
|
-
|
|
752
|
-
|
|
748
|
+
const { gainNode, instrumentKey } = activeNote;
|
|
749
|
+
gainNode.gain.setValueAtTime(this.cbToRatio(instrumentKey.modLfoToVolume + channel.modulation), now);
|
|
753
750
|
}
|
|
754
751
|
else {
|
|
755
752
|
this.startModulation(channel, activeNote, now);
|
|
756
753
|
}
|
|
757
754
|
});
|
|
758
755
|
}
|
|
756
|
+
setModulation(channelNumber, modulation) {
|
|
757
|
+
const channel = this.channels[channelNumber];
|
|
758
|
+
channel.modulation = (modulation / 127) * channel.modulationDepthRange;
|
|
759
|
+
this.updateModulation(channel);
|
|
760
|
+
}
|
|
759
761
|
setVolume(channelNumber, volume) {
|
|
760
762
|
const channel = this.channels[channelNumber];
|
|
761
763
|
channel.volume = volume / 127;
|
|
@@ -778,6 +780,10 @@ export class MidyGMLite {
|
|
|
778
780
|
channel.expression = expression / 127;
|
|
779
781
|
this.updateChannelGain(channel);
|
|
780
782
|
}
|
|
783
|
+
dataEntryLSB(channelNumber, value) {
|
|
784
|
+
this.channels[channelNumber].dataLSB = value;
|
|
785
|
+
this.handleRPN(channelNumber);
|
|
786
|
+
}
|
|
781
787
|
updateChannelGain(channel) {
|
|
782
788
|
const now = this.audioContext.currentTime;
|
|
783
789
|
const volume = channel.volume * channel.expression;
|
|
@@ -801,7 +807,7 @@ export class MidyGMLite {
|
|
|
801
807
|
const rpn = channel.rpnMSB * 128 + channel.rpnLSB;
|
|
802
808
|
switch (rpn) {
|
|
803
809
|
case 0:
|
|
804
|
-
this.
|
|
810
|
+
this.handlePitchBendRangeRPN(channelNumber);
|
|
805
811
|
break;
|
|
806
812
|
default:
|
|
807
813
|
console.warn(`Channel ${channelNumber}: Unsupported RPN MSB=${channel.rpnMSB} LSB=${channel.rpnLSB}`);
|
|
@@ -813,9 +819,8 @@ export class MidyGMLite {
|
|
|
813
819
|
setRPNLSB(channelNumber, value) {
|
|
814
820
|
this.channels[channelNumber].rpnLSB = value;
|
|
815
821
|
}
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
isMSB ? channel.dataMSB = value : channel.dataLSB = value;
|
|
822
|
+
dataEntryMSB(channelNumber, value) {
|
|
823
|
+
this.channels[channelNumber].dataMSB = value;
|
|
819
824
|
this.handleRPN(channelNumber);
|
|
820
825
|
}
|
|
821
826
|
updateDetune(channel, detuneChange) {
|
|
@@ -829,7 +834,7 @@ export class MidyGMLite {
|
|
|
829
834
|
.setValueAtTime(detune, now);
|
|
830
835
|
});
|
|
831
836
|
}
|
|
832
|
-
|
|
837
|
+
handlePitchBendRangeRPN(channelNumber) {
|
|
833
838
|
const channel = this.channels[channelNumber];
|
|
834
839
|
this.limitData(channel, 0, 127, 0, 99);
|
|
835
840
|
const pitchBendRange = channel.dataMSB + channel.dataLSB / 100;
|
|
@@ -967,7 +972,7 @@ Object.defineProperty(MidyGMLite, "channelSettings", {
|
|
|
967
972
|
dataLSB: 0,
|
|
968
973
|
program: 0,
|
|
969
974
|
pitchBend: 0,
|
|
970
|
-
modulationDepthRange: 0.5,
|
|
975
|
+
modulationDepthRange: 0.5, // cb
|
|
971
976
|
}
|
|
972
977
|
});
|
|
973
978
|
Object.defineProperty(MidyGMLite, "effectSettings", {
|