@marmooo/midy 0.0.6 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/midy-GM1.d.ts +9 -1
- package/esm/midy-GM1.d.ts.map +1 -1
- package/esm/midy-GM1.js +79 -31
- package/esm/midy-GM2.d.ts +15 -7
- package/esm/midy-GM2.d.ts.map +1 -1
- package/esm/midy-GM2.js +97 -47
- package/esm/midy-GMLite.d.ts +3 -1
- package/esm/midy-GMLite.d.ts.map +1 -1
- package/esm/midy-GMLite.js +32 -30
- package/esm/midy.d.ts +9 -1
- package/esm/midy.d.ts.map +1 -1
- package/esm/midy.js +85 -64
- package/package.json +1 -1
- package/script/midy-GM1.d.ts +9 -1
- package/script/midy-GM1.d.ts.map +1 -1
- package/script/midy-GM1.js +79 -31
- package/script/midy-GM2.d.ts +15 -7
- package/script/midy-GM2.d.ts.map +1 -1
- package/script/midy-GM2.js +97 -47
- package/script/midy-GMLite.d.ts +3 -1
- package/script/midy-GMLite.d.ts.map +1 -1
- package/script/midy-GMLite.js +32 -30
- package/script/midy.d.ts +9 -1
- package/script/midy.d.ts.map +1 -1
- package/script/midy.js +85 -64
package/esm/midy-GM1.d.ts
CHANGED
|
@@ -140,11 +140,19 @@ export class MidyGM1 {
|
|
|
140
140
|
setExpression(channelNumber: any, expression: any): void;
|
|
141
141
|
updateChannelGain(channel: any): void;
|
|
142
142
|
setSustainPedal(channelNumber: any, value: any): void;
|
|
143
|
+
limitData(channel: any, minMSB: any, maxMSB: any, minLSB: any, maxLSB: any): void;
|
|
144
|
+
limitDataMSB(channel: any, minMSB: any, maxMSB: any): void;
|
|
145
|
+
handleRPN(channelNumber: any): void;
|
|
143
146
|
setRPNMSB(channelNumber: any, value: any): void;
|
|
144
147
|
setRPNLSB(channelNumber: any, value: any): void;
|
|
145
148
|
setDataEntry(channelNumber: any, value: any, isMSB: any): void;
|
|
146
|
-
|
|
149
|
+
updateDetune(channel: any, detuneChange: any): void;
|
|
150
|
+
handlePitchBendRangeMessage(channelNumber: any): void;
|
|
147
151
|
setPitchBendRange(channelNumber: any, pitchBendRange: any): void;
|
|
152
|
+
handleFineTuningMessage(channelNumber: any): void;
|
|
153
|
+
setFineTuning(channelNumber: any, fineTuning: any): void;
|
|
154
|
+
handleCoarseTuningMessage(channelNumber: any): void;
|
|
155
|
+
setCoarseTuning(channelNumber: any, coarseTuning: any): void;
|
|
148
156
|
allSoundOff(channelNumber: any): any[];
|
|
149
157
|
resetAllControllers(channelNumber: any): void;
|
|
150
158
|
allNotesOff(channelNumber: any): any[];
|
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,
|
|
1
|
+
{"version":3,"file":"midy-GM1.d.ts","sourceRoot":"","sources":["../src/midy-GM1.js"],"names":[],"mappings":"AAqBA;IAmBE;;;;;;;;;;;MAWE;IAEF;;;;;;;MAOE;IAEF,+BAMC;IA9CD,qBAAmB;IACnB,kBAAc;IACd,0BAAwB;IACxB,kBAAc;IACd,mBAAiB;IACjB,kBAAc;IACd,mBAAe;IACf,kBAAgB;IAChB,sBAA2C;IAC3C,mBAAkB;IAClB,mBAAkB;IAClB,kBAAiB;IACjB,oBAAmB;IACnB,mBAAkB;IAClB,gBAAc;IACd,mBAAiB;IACjB,oBAAkB;IAyBhB,kBAAgC;IAChC,gBAA4C;IAE5C;;;;;;;;;;;;;;;;;;;;QAAiD;IAInD,4BAMC;IAED,mCASC;IAED,gDAMC;IAED,sCASC;IAED;;;MAYC;IAED;;;;;;;;;;;;;;;;;;;;QAUC;IAED,+DAyBC;IAED,mEAWC;IAED,qDAOC;IAED,2EA+CC;IAED,mCAOC;IAED,0BA+CC;IAED,uDAEC;IAED,wDAEC;IAED;;;MA8DC;IAED,4BAsBC;IAED,uBAKC;IAED,aAGC;IAED,cAKC;IAED,wBAIC;IAED,0BAKC;IAED,wBAOC;IAED,sBAGC;IAED,uDASC;IAED,6CAQC;IAED,sDAGC;IAED,2BAEC;IAED,4BAEC;IAED,sCAGC;IAED,mFAGC;IAED,iDAiBC;IAED,iDAiCC;IAED,0DAmBC;IAED,wHA6BC;IAED,kGA6BC;IAED,0EAGC;IAED,sIAmDC;IAED,0FAGC;IAED,kEAeC;IAED,wFAiBC;IAED,4DAGC;IAED,qEAGC;IAED,uDAOC;IAED,mFA+BC;IAED,yDAiBC;IAED,iDAIC;IAED;;;MAMC;IAED,2CAIC;IAED,yDAIC;IAED,sCAUC;IAED,sDAMC;IAED,kFAeC;IAED,2DAMC;IAED,oCAkBC;IAED,gDAEC;IAED,gDAEC;IAED,+DAIC;IAED,oDAUC;IAED,sDAKC;IAED,iEAOC;IAED,kDAKC;IAED,yDAGC;IAED,oDAKC;IAED,6DAGC;IAED,uCAoBC;IAED,8CAEC;IAED,uCAoBC;IAED,4DAgBC;IAED,oBAQC;IAED,yDAaC;IAED,yCAGC;IAED,mCAQC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AA1iCD;IAOE,gFAKC;IAXD,kBAAa;IACb,cAAS;IACT,gBAAW;IACX,YAAO;IACP,gBAAW;IAGT,gBAA4B;IAC5B,cAAwB;IACxB,eAA0B;IAC1B,mBAAkC;CAErC"}
|
package/esm/midy-GM1.js
CHANGED
|
@@ -492,7 +492,8 @@ export class MidyGM1 {
|
|
|
492
492
|
return noteList[0];
|
|
493
493
|
}
|
|
494
494
|
connectNoteEffects(channel, gainNode) {
|
|
495
|
-
gainNode.connect(channel.
|
|
495
|
+
gainNode.connect(channel.gainL);
|
|
496
|
+
gainNode.connect(channel.gainR);
|
|
496
497
|
}
|
|
497
498
|
cbToRatio(cb) {
|
|
498
499
|
return Math.pow(10, cb / 200);
|
|
@@ -703,20 +704,12 @@ export class MidyGM1 {
|
|
|
703
704
|
this.setPitchBend(channelNumber, pitchBend);
|
|
704
705
|
}
|
|
705
706
|
setPitchBend(channelNumber, pitchBend) {
|
|
706
|
-
const now = this.audioContext.currentTime;
|
|
707
707
|
const channel = this.channels[channelNumber];
|
|
708
708
|
const prevPitchBend = channel.pitchBend;
|
|
709
709
|
channel.pitchBend = (pitchBend - 8192) / 8192;
|
|
710
710
|
const detuneChange = (channel.pitchBend - prevPitchBend) *
|
|
711
711
|
channel.pitchBendRange * 100;
|
|
712
|
-
|
|
713
|
-
activeNotes.forEach((activeNote) => {
|
|
714
|
-
const { bufferSource } = activeNote;
|
|
715
|
-
const detune = bufferSource.detune.value + detuneChange;
|
|
716
|
-
bufferSource.detune
|
|
717
|
-
.cancelScheduledValues(now)
|
|
718
|
-
.setValueAtTime(detune, now);
|
|
719
|
-
});
|
|
712
|
+
this.updateDetune(channel, detuneChange);
|
|
720
713
|
}
|
|
721
714
|
handleControlChange(channelNumber, controller, value) {
|
|
722
715
|
switch (controller) {
|
|
@@ -735,9 +728,9 @@ export class MidyGM1 {
|
|
|
735
728
|
case 64:
|
|
736
729
|
return this.setSustainPedal(channelNumber, value);
|
|
737
730
|
case 100:
|
|
738
|
-
return this.setRPNMSB(channelNumber, value);
|
|
739
|
-
case 101:
|
|
740
731
|
return this.setRPNLSB(channelNumber, value);
|
|
732
|
+
case 101:
|
|
733
|
+
return this.setRPNMSB(channelNumber, value);
|
|
741
734
|
case 120:
|
|
742
735
|
return this.allSoundOff(channelNumber);
|
|
743
736
|
case 121:
|
|
@@ -804,41 +797,62 @@ export class MidyGM1 {
|
|
|
804
797
|
this.releaseSustainPedal(channelNumber, value);
|
|
805
798
|
}
|
|
806
799
|
}
|
|
807
|
-
|
|
808
|
-
|
|
800
|
+
limitData(channel, minMSB, maxMSB, minLSB, maxLSB) {
|
|
801
|
+
if (maxLSB < channel.dataLSB) {
|
|
802
|
+
channel.dataMSB++;
|
|
803
|
+
channel.dataLSB = minLSB;
|
|
804
|
+
}
|
|
805
|
+
else if (channel.dataLSB < 0) {
|
|
806
|
+
channel.dataMSB--;
|
|
807
|
+
channel.dataLSB = maxLSB;
|
|
808
|
+
}
|
|
809
|
+
if (maxMSB < channel.dataMSB) {
|
|
810
|
+
channel.dataMSB = maxMSB;
|
|
811
|
+
channel.dataLSB = maxLSB;
|
|
812
|
+
}
|
|
813
|
+
else if (channel.dataMSB < 0) {
|
|
814
|
+
channel.dataMSB = minMSB;
|
|
815
|
+
channel.dataLSB = minLSB;
|
|
816
|
+
}
|
|
809
817
|
}
|
|
810
|
-
|
|
811
|
-
|
|
818
|
+
limitDataMSB(channel, minMSB, maxMSB) {
|
|
819
|
+
if (maxMSB < channel.dataMSB) {
|
|
820
|
+
channel.dataMSB = maxMSB;
|
|
821
|
+
}
|
|
822
|
+
else if (channel.dataMSB < 0) {
|
|
823
|
+
channel.dataMSB = minMSB;
|
|
824
|
+
}
|
|
812
825
|
}
|
|
813
|
-
|
|
826
|
+
handleRPN(channelNumber) {
|
|
814
827
|
const channel = this.channels[channelNumber];
|
|
815
828
|
const rpn = channel.rpnMSB * 128 + channel.rpnLSB;
|
|
816
|
-
isMSB ? channel.dataMSB = value : channel.dataLSB = value;
|
|
817
|
-
const { dataMSB, dataLSB } = channel;
|
|
818
829
|
switch (rpn) {
|
|
819
830
|
case 0:
|
|
820
|
-
|
|
831
|
+
this.handlePitchBendRangeMessage(channelNumber);
|
|
832
|
+
break;
|
|
821
833
|
case 1:
|
|
822
|
-
|
|
834
|
+
this.handleFineTuningMessage(channelNumber);
|
|
823
835
|
break;
|
|
824
836
|
case 2:
|
|
825
|
-
|
|
837
|
+
this.handleCoarseTuningMessage(channelNumber);
|
|
826
838
|
break;
|
|
827
839
|
default:
|
|
828
840
|
console.warn(`Channel ${channelNumber}: Unsupported RPN MSB=${channel.rpnMSB} LSB=${channel.rpnLSB}`);
|
|
829
841
|
}
|
|
830
842
|
}
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
this.setPitchBendRange(channelNumber, pitchBendRange);
|
|
843
|
+
setRPNMSB(channelNumber, value) {
|
|
844
|
+
this.channels[channelNumber].rpnMSB = value;
|
|
834
845
|
}
|
|
835
|
-
|
|
836
|
-
|
|
846
|
+
setRPNLSB(channelNumber, value) {
|
|
847
|
+
this.channels[channelNumber].rpnLSB = value;
|
|
848
|
+
}
|
|
849
|
+
setDataEntry(channelNumber, value, isMSB) {
|
|
837
850
|
const channel = this.channels[channelNumber];
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
851
|
+
isMSB ? channel.dataMSB = value : channel.dataLSB = value;
|
|
852
|
+
this.handleRPN(channelNumber);
|
|
853
|
+
}
|
|
854
|
+
updateDetune(channel, detuneChange) {
|
|
855
|
+
const now = this.audioContext.currentTime;
|
|
842
856
|
const activeNotes = this.getActiveNotes(channel, now);
|
|
843
857
|
activeNotes.forEach((activeNote) => {
|
|
844
858
|
const { bufferSource } = activeNote;
|
|
@@ -848,6 +862,40 @@ export class MidyGM1 {
|
|
|
848
862
|
.setValueAtTime(detune, now);
|
|
849
863
|
});
|
|
850
864
|
}
|
|
865
|
+
handlePitchBendRangeMessage(channelNumber) {
|
|
866
|
+
const channel = this.channels[channelNumber];
|
|
867
|
+
this.limitData(channel, 0, 127, 0, 99);
|
|
868
|
+
const pitchBendRange = channel.dataMSB + channel.dataLSB / 100;
|
|
869
|
+
this.setPitchBendRange(channelNumber, pitchBendRange);
|
|
870
|
+
}
|
|
871
|
+
setPitchBendRange(channelNumber, pitchBendRange) {
|
|
872
|
+
const channel = this.channels[channelNumber];
|
|
873
|
+
const prevPitchBendRange = channel.pitchBendRange;
|
|
874
|
+
channel.pitchBendRange = pitchBendRange;
|
|
875
|
+
const detuneChange = (channel.pitchBendRange - prevPitchBendRange) *
|
|
876
|
+
channel.pitchBend * 100;
|
|
877
|
+
this.updateDetune(channel, detuneChange);
|
|
878
|
+
}
|
|
879
|
+
handleFineTuningMessage(channelNumber) {
|
|
880
|
+
const channel = this.channels[channelNumber];
|
|
881
|
+
this.limitData(channel, 0, 127, 0, 127);
|
|
882
|
+
const fineTuning = (channel.dataMSB * 128 + channel.dataLSB - 8192) / 8192;
|
|
883
|
+
this.setFineTuning(channelNumber, fineTuning);
|
|
884
|
+
}
|
|
885
|
+
setFineTuning(channelNumber, fineTuning) {
|
|
886
|
+
const channel = this.channels[channelNumber];
|
|
887
|
+
channel.fineTuning = fineTuning;
|
|
888
|
+
}
|
|
889
|
+
handleCoarseTuningMessage(channelNumber) {
|
|
890
|
+
const channel = this.channels[channelNumber];
|
|
891
|
+
this.limitDataMSB(channel, 0, 127);
|
|
892
|
+
const coarseTuning = channel.dataMSB - 64;
|
|
893
|
+
this.setFineTuning(channelNumber, coarseTuning);
|
|
894
|
+
}
|
|
895
|
+
setCoarseTuning(channelNumber, coarseTuning) {
|
|
896
|
+
const channel = this.channels[channelNumber];
|
|
897
|
+
channel.fineTuning = coarseTuning;
|
|
898
|
+
}
|
|
851
899
|
allSoundOff(channelNumber) {
|
|
852
900
|
const now = this.audioContext.currentTime;
|
|
853
901
|
const channel = this.channels[channelNumber];
|
package/esm/midy-GM2.d.ts
CHANGED
|
@@ -73,8 +73,8 @@ export class MidyGM2 {
|
|
|
73
73
|
lfoFilterDepth: number;
|
|
74
74
|
lfoAmplitudeDepth: number;
|
|
75
75
|
};
|
|
76
|
-
|
|
77
|
-
|
|
76
|
+
gainL: any;
|
|
77
|
+
gainR: any;
|
|
78
78
|
reverbEffect: {
|
|
79
79
|
convolverNode: any;
|
|
80
80
|
dryGain: any;
|
|
@@ -117,8 +117,8 @@ export class MidyGM2 {
|
|
|
117
117
|
loadSoundFont(soundFontUrl: any): Promise<void>;
|
|
118
118
|
loadMIDI(midiUrl: any): Promise<void>;
|
|
119
119
|
setChannelAudioNodes(audioContext: any): {
|
|
120
|
-
|
|
121
|
-
|
|
120
|
+
gainL: any;
|
|
121
|
+
gainR: any;
|
|
122
122
|
reverbEffect: {
|
|
123
123
|
convolverNode: any;
|
|
124
124
|
dryGain: any;
|
|
@@ -142,8 +142,8 @@ export class MidyGM2 {
|
|
|
142
142
|
lfoFilterDepth: number;
|
|
143
143
|
lfoAmplitudeDepth: number;
|
|
144
144
|
};
|
|
145
|
-
|
|
146
|
-
|
|
145
|
+
gainL: any;
|
|
146
|
+
gainR: any;
|
|
147
147
|
reverbEffect: {
|
|
148
148
|
convolverNode: any;
|
|
149
149
|
dryGain: any;
|
|
@@ -254,11 +254,19 @@ export class MidyGM2 {
|
|
|
254
254
|
setChorus(channelNumber: any, chorus: any): void;
|
|
255
255
|
setSostenutoPedal(channelNumber: any, value: any): void;
|
|
256
256
|
setSoftPedal(channelNumber: any, softPedal: any): void;
|
|
257
|
+
limitData(channel: any, minMSB: any, maxMSB: any, minLSB: any, maxLSB: any): void;
|
|
258
|
+
limitDataMSB(channel: any, minMSB: any, maxMSB: any): void;
|
|
259
|
+
handleRPN(channelNumber: any, value: any): void;
|
|
257
260
|
setRPNMSB(channelNumber: any, value: any): void;
|
|
258
261
|
setRPNLSB(channelNumber: any, value: any): void;
|
|
259
262
|
setDataEntry(channelNumber: any, value: any, isMSB: any): void;
|
|
260
|
-
|
|
263
|
+
updateDetune(channel: any, detuneChange: any): void;
|
|
264
|
+
handlePitchBendRangeMessage(channelNumber: any): void;
|
|
261
265
|
setPitchBendRange(channelNumber: any, pitchBendRange: any): void;
|
|
266
|
+
handleFineTuningMessage(channelNumber: any): void;
|
|
267
|
+
setFineTuning(channelNumber: any, fineTuning: any): void;
|
|
268
|
+
handleCoarseTuningMessage(channelNumber: any): void;
|
|
269
|
+
setCoarseTuning(channelNumber: any, coarseTuning: any): void;
|
|
262
270
|
allSoundOff(channelNumber: any): any[];
|
|
263
271
|
resetAllControllers(channelNumber: any): void;
|
|
264
272
|
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;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"midy-GM2.d.ts","sourceRoot":"","sources":["../src/midy-GM2.js"],"names":[],"mappings":"AAuBA;IAwBE;;;;;;;;;;;;;;;;;MAiBE;IAEF;;;;;;;;;;;MAWE;IAEF;;;;;;;MAOE;IAEF,+BAMC;IAtED,qBAAmB;IACnB,kBAAc;IACd,qBAAmB;IACnB,yBAAqB;IACrB,2BAAuB;IACvB,cAAa;IACb,cAAa;IACb,0BAAwB;IACxB,kBAAc;IACd,mBAAiB;IACjB,kBAAc;IACd,mBAAe;IACf,kBAAgB;IAChB,sBAA2C;IAC3C,mBAAkB;IAClB,mBAAkB;IAClB,kBAAiB;IACjB,oBAAmB;IACnB,mBAAkB;IAClB,gBAAc;IACd,mBAAiB;IACjB,oBAAkB;IA4ChB,kBAAgC;IAChC,gBAA4C;IAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAAiD;IAInD,4BAMC;IAED,mCASC;IAED,gDAMC;IAED,sCASC;IAED;;;;;;;;;;;;;;MAqBC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAcC;IAED,+DAyBC;IAED,mEAWC;IAED,qDAOC;IAED,2EAkDC;IAED,mCAOC;IAED,0BA+CC;IAED,uDAEC;IAED,wDAEC;IAED;;;MAgGC;IAED,4BAsBC;IAED,uBAKC;IAED,aAGC;IAED,cAKC;IAED,wBAIC;IAED,0BAKC;IAED,wBAOC;IAED,sBAGC;IAED,uDASC;IAED,6CAQC;IAED;;;;MAoCC;IAED;;;;;MAqCC;IAED,sDA6BC;IAED,2BAEC;IAED,4BAEC;IAED,sCAKC;IAED,mFAGC;IAED,iDAiBC;IAED,iDAiCC;IAED,0DAmBC;IAED,wHAiCC;IAED,gDAQC;IAED,kGAgCC;IAED,0EAGC;IAED,sIAoDC;IAED,0FAGC;IAED,kEAeC;IAED,oEAYC;IAED,wFAmBC;IAED,4DAIC;IAED,+DAcC;IAED,qEAGC;IAED,uDAOC;IAED,mFAuDC;IAED,+CAEC;IAED,yDAiBC;IAED,iEAEC;IAED,iDAIC;IAED;;;MAMC;IAED,2CAIC;IAED,yDAIC;IAED,+CAEC;IAED,sCAUC;IAED,sDAMC;IAED,oDAEC;IAED,iDASC;IAED,iDAIC;IAED,wDAWC;IAED,uDAGC;IAED,kFAeC;IAED,2DAMC;IAED,gDAqBC;IAED,gDAEC;IAED,gDAEC;IAED,+DAIC;IAED,oDAUC;IAED,sDAKC;IAED,iEAOC;IAED,kDAKC;IAED,yDAGC;IAED,oDAKC;IAED,6DAGC;IAED,uCAoBC;IAED,8CAEC;IAED,uCAoBC;IAED,gBAEC;IAED,eAEC;IAED,eAEC;IAED,eAEC;IAED,4DAmBC;IAED,oBAQC;IAED,oBAQC;IAED,yDAgDC;IAED,yCAGC;IAED,mCAQC;IAED,6CAGC;IAED,2CAMC;IAED,+CAGC;IAED,+CAMC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AA17CD;IASE,gFAKC;IAbD,kBAAa;IACb,cAAS;IACT,gBAAW;IACX,YAAO;IACP,gBAAW;IACX,YAAO;IACP,gBAAW;IAGT,gBAA4B;IAC5B,cAAwB;IACxB,eAA0B;IAC1B,mBAAkC;CAErC"}
|
package/esm/midy-GM2.js
CHANGED
|
@@ -225,22 +225,23 @@ export class MidyGM2 {
|
|
|
225
225
|
this.totalTime = this.calcTotalTime();
|
|
226
226
|
}
|
|
227
227
|
setChannelAudioNodes(audioContext) {
|
|
228
|
-
const
|
|
229
|
-
|
|
230
|
-
});
|
|
231
|
-
const
|
|
232
|
-
|
|
233
|
-
|
|
228
|
+
const { gainLeft, gainRight } = this.panToGain(MidyGM2.channelSettings.pan);
|
|
229
|
+
const gainL = new GainNode(audioContext, { gain: gainLeft });
|
|
230
|
+
const gainR = new GainNode(audioContext, { gain: gainRight });
|
|
231
|
+
const merger = new ChannelMergerNode(audioContext, { numberOfInputs: 2 });
|
|
232
|
+
gainL.connect(merger, 0, 0);
|
|
233
|
+
gainR.connect(merger, 0, 1);
|
|
234
|
+
merger.connect(this.masterGain);
|
|
234
235
|
const reverbEffect = this.createReverbEffect(audioContext);
|
|
235
236
|
const chorusEffect = this.createChorusEffect(audioContext);
|
|
236
237
|
chorusEffect.lfo.start();
|
|
237
|
-
reverbEffect.dryGain.connect(
|
|
238
|
-
reverbEffect.
|
|
239
|
-
|
|
240
|
-
|
|
238
|
+
reverbEffect.dryGain.connect(gainL);
|
|
239
|
+
reverbEffect.dryGain.connect(gainR);
|
|
240
|
+
reverbEffect.wetGain.connect(gainL);
|
|
241
|
+
reverbEffect.wetGain.connect(gainR);
|
|
241
242
|
return {
|
|
242
|
-
|
|
243
|
-
|
|
243
|
+
gainL,
|
|
244
|
+
gainR,
|
|
244
245
|
reverbEffect,
|
|
245
246
|
chorusEffect,
|
|
246
247
|
};
|
|
@@ -644,14 +645,16 @@ export class MidyGM2 {
|
|
|
644
645
|
connectNoteEffects(channel, gainNode) {
|
|
645
646
|
if (channel.reverb === 0) {
|
|
646
647
|
if (channel.chorus === 0) { // no effect
|
|
647
|
-
gainNode.connect(channel.
|
|
648
|
+
gainNode.connect(channel.gainL);
|
|
649
|
+
gainNode.connect(channel.gainR);
|
|
648
650
|
}
|
|
649
651
|
else { // chorus
|
|
650
652
|
channel.chorusEffect.delayNodes.forEach((delayNode) => {
|
|
651
653
|
gainNode.connect(delayNode);
|
|
652
654
|
});
|
|
653
655
|
channel.chorusEffect.chorusGains.forEach((chorusGain) => {
|
|
654
|
-
chorusGain.connect(channel.
|
|
656
|
+
chorusGain.connect(channel.gainL);
|
|
657
|
+
chorusGain.connect(channel.gainR);
|
|
655
658
|
});
|
|
656
659
|
}
|
|
657
660
|
}
|
|
@@ -932,20 +935,12 @@ export class MidyGM2 {
|
|
|
932
935
|
this.setPitchBend(channelNumber, pitchBend);
|
|
933
936
|
}
|
|
934
937
|
setPitchBend(channelNumber, pitchBend) {
|
|
935
|
-
const now = this.audioContext.currentTime;
|
|
936
938
|
const channel = this.channels[channelNumber];
|
|
937
939
|
const prevPitchBend = channel.pitchBend;
|
|
938
940
|
channel.pitchBend = (pitchBend - 8192) / 8192;
|
|
939
941
|
const detuneChange = (channel.pitchBend - prevPitchBend) *
|
|
940
942
|
channel.pitchBendRange * 100;
|
|
941
|
-
|
|
942
|
-
activeNotes.forEach((activeNote) => {
|
|
943
|
-
const { bufferSource } = activeNote;
|
|
944
|
-
const detune = bufferSource.detune.value + detuneChange;
|
|
945
|
-
bufferSource.detune
|
|
946
|
-
.cancelScheduledValues(now)
|
|
947
|
-
.setValueAtTime(detune, now);
|
|
948
|
-
});
|
|
943
|
+
this.updateDetune(channel, detuneChange);
|
|
949
944
|
}
|
|
950
945
|
handleControlChange(channelNumber, controller, value) {
|
|
951
946
|
switch (controller) {
|
|
@@ -980,9 +975,9 @@ export class MidyGM2 {
|
|
|
980
975
|
case 93:
|
|
981
976
|
return this.setChorus(channelNumber, value);
|
|
982
977
|
case 100:
|
|
983
|
-
return this.setRPNMSB(channelNumber, value);
|
|
984
|
-
case 101:
|
|
985
978
|
return this.setRPNLSB(channelNumber, value);
|
|
979
|
+
case 101:
|
|
980
|
+
return this.setRPNMSB(channelNumber, value);
|
|
986
981
|
case 120:
|
|
987
982
|
return this.allSoundOff(channelNumber);
|
|
988
983
|
case 121:
|
|
@@ -1101,44 +1096,65 @@ export class MidyGM2 {
|
|
|
1101
1096
|
const channel = this.channels[channelNumber];
|
|
1102
1097
|
channel.softPedal = softPedal / 127;
|
|
1103
1098
|
}
|
|
1104
|
-
|
|
1105
|
-
|
|
1099
|
+
limitData(channel, minMSB, maxMSB, minLSB, maxLSB) {
|
|
1100
|
+
if (maxLSB < channel.dataLSB) {
|
|
1101
|
+
channel.dataMSB++;
|
|
1102
|
+
channel.dataLSB = minLSB;
|
|
1103
|
+
}
|
|
1104
|
+
else if (channel.dataLSB < 0) {
|
|
1105
|
+
channel.dataMSB--;
|
|
1106
|
+
channel.dataLSB = maxLSB;
|
|
1107
|
+
}
|
|
1108
|
+
if (maxMSB < channel.dataMSB) {
|
|
1109
|
+
channel.dataMSB = maxMSB;
|
|
1110
|
+
channel.dataLSB = maxLSB;
|
|
1111
|
+
}
|
|
1112
|
+
else if (channel.dataMSB < 0) {
|
|
1113
|
+
channel.dataMSB = minMSB;
|
|
1114
|
+
channel.dataLSB = minLSB;
|
|
1115
|
+
}
|
|
1106
1116
|
}
|
|
1107
|
-
|
|
1108
|
-
|
|
1117
|
+
limitDataMSB(channel, minMSB, maxMSB) {
|
|
1118
|
+
if (maxMSB < channel.dataMSB) {
|
|
1119
|
+
channel.dataMSB = maxMSB;
|
|
1120
|
+
}
|
|
1121
|
+
else if (channel.dataMSB < 0) {
|
|
1122
|
+
channel.dataMSB = minMSB;
|
|
1123
|
+
}
|
|
1109
1124
|
}
|
|
1110
|
-
|
|
1125
|
+
handleRPN(channelNumber, value) {
|
|
1111
1126
|
const channel = this.channels[channelNumber];
|
|
1112
1127
|
const rpn = channel.rpnMSB * 128 + channel.rpnLSB;
|
|
1113
|
-
isMSB ? channel.dataMSB = value : channel.dataLSB = value;
|
|
1114
|
-
const { dataMSB, dataLSB } = channel;
|
|
1115
1128
|
switch (rpn) {
|
|
1116
1129
|
case 0:
|
|
1117
|
-
|
|
1130
|
+
channel.dataLSB += value;
|
|
1131
|
+
this.handlePitchBendRangeMessage(channelNumber);
|
|
1132
|
+
break;
|
|
1118
1133
|
case 1:
|
|
1119
|
-
channel.
|
|
1134
|
+
channel.dataLSB += value;
|
|
1135
|
+
this.handleFineTuningMessage(channelNumber);
|
|
1120
1136
|
break;
|
|
1121
1137
|
case 2:
|
|
1122
|
-
channel.
|
|
1123
|
-
|
|
1124
|
-
case 5:
|
|
1125
|
-
channel.modulationDepthRange = dataMSB + dataLSB / 128;
|
|
1138
|
+
channel.dataMSB += value;
|
|
1139
|
+
this.handleCoarseTuningMessage(channelNumber);
|
|
1126
1140
|
break;
|
|
1127
1141
|
default:
|
|
1128
1142
|
console.warn(`Channel ${channelNumber}: Unsupported RPN MSB=${channel.rpnMSB} LSB=${channel.rpnLSB}`);
|
|
1129
1143
|
}
|
|
1130
1144
|
}
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
this.setPitchBendRange(channelNumber, pitchBendRange);
|
|
1145
|
+
setRPNMSB(channelNumber, value) {
|
|
1146
|
+
this.channels[channelNumber].rpnMSB = value;
|
|
1134
1147
|
}
|
|
1135
|
-
|
|
1136
|
-
|
|
1148
|
+
setRPNLSB(channelNumber, value) {
|
|
1149
|
+
this.channels[channelNumber].rpnLSB = value;
|
|
1150
|
+
}
|
|
1151
|
+
setDataEntry(channelNumber, value, isMSB) {
|
|
1137
1152
|
const channel = this.channels[channelNumber];
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1153
|
+
isMSB ? channel.dataMSB = value : channel.dataLSB = value;
|
|
1154
|
+
this.handleRPN(channelNumber);
|
|
1155
|
+
}
|
|
1156
|
+
updateDetune(channel, detuneChange) {
|
|
1157
|
+
const now = this.audioContext.currentTime;
|
|
1142
1158
|
const activeNotes = this.getActiveNotes(channel, now);
|
|
1143
1159
|
activeNotes.forEach((activeNote) => {
|
|
1144
1160
|
const { bufferSource } = activeNote;
|
|
@@ -1148,6 +1164,40 @@ export class MidyGM2 {
|
|
|
1148
1164
|
.setValueAtTime(detune, now);
|
|
1149
1165
|
});
|
|
1150
1166
|
}
|
|
1167
|
+
handlePitchBendRangeMessage(channelNumber) {
|
|
1168
|
+
const channel = this.channels[channelNumber];
|
|
1169
|
+
this.limitData(channel, 0, 127, 0, 99);
|
|
1170
|
+
const pitchBendRange = channel.dataMSB + channel.dataLSB / 100;
|
|
1171
|
+
this.setPitchBendRange(channelNumber, pitchBendRange);
|
|
1172
|
+
}
|
|
1173
|
+
setPitchBendRange(channelNumber, pitchBendRange) {
|
|
1174
|
+
const channel = this.channels[channelNumber];
|
|
1175
|
+
const prevPitchBendRange = channel.pitchBendRange;
|
|
1176
|
+
channel.pitchBendRange = pitchBendRange;
|
|
1177
|
+
const detuneChange = (channel.pitchBendRange - prevPitchBendRange) *
|
|
1178
|
+
channel.pitchBend * 100;
|
|
1179
|
+
this.updateDetune(channel, detuneChange);
|
|
1180
|
+
}
|
|
1181
|
+
handleFineTuningMessage(channelNumber) {
|
|
1182
|
+
const channel = this.channels[channelNumber];
|
|
1183
|
+
this.limitData(channel, 0, 127, 0, 127);
|
|
1184
|
+
const fineTuning = (channel.dataMSB * 128 + channel.dataLSB - 8192) / 8192;
|
|
1185
|
+
this.setFineTuning(channelNumber, fineTuning);
|
|
1186
|
+
}
|
|
1187
|
+
setFineTuning(channelNumber, fineTuning) {
|
|
1188
|
+
const channel = this.channels[channelNumber];
|
|
1189
|
+
channel.fineTuning = fineTuning;
|
|
1190
|
+
}
|
|
1191
|
+
handleCoarseTuningMessage(channelNumber) {
|
|
1192
|
+
const channel = this.channels[channelNumber];
|
|
1193
|
+
this.limitDataMSB(channel, 0, 127);
|
|
1194
|
+
const coarseTuning = channel.dataMSB - 64;
|
|
1195
|
+
this.setFineTuning(channelNumber, coarseTuning);
|
|
1196
|
+
}
|
|
1197
|
+
setCoarseTuning(channelNumber, coarseTuning) {
|
|
1198
|
+
const channel = this.channels[channelNumber];
|
|
1199
|
+
channel.fineTuning = coarseTuning;
|
|
1200
|
+
}
|
|
1151
1201
|
allSoundOff(channelNumber) {
|
|
1152
1202
|
const now = this.audioContext.currentTime;
|
|
1153
1203
|
const channel = this.channels[channelNumber];
|
package/esm/midy-GMLite.d.ts
CHANGED
|
@@ -134,10 +134,12 @@ export class MidyGMLite {
|
|
|
134
134
|
setExpression(channelNumber: any, expression: any): void;
|
|
135
135
|
updateChannelGain(channel: any): void;
|
|
136
136
|
setSustainPedal(channelNumber: any, value: any): void;
|
|
137
|
+
handleRPN(channelNumber: any): void;
|
|
137
138
|
setRPNMSB(channelNumber: any, value: any): void;
|
|
138
139
|
setRPNLSB(channelNumber: any, value: any): void;
|
|
139
140
|
setDataEntry(channelNumber: any, value: any, isMSB: any): void;
|
|
140
|
-
|
|
141
|
+
updateDetune(channel: any, detuneChange: any): void;
|
|
142
|
+
handlePitchBendRangeMessage(channelNumber: any): void;
|
|
141
143
|
setPitchBendRange(channelNumber: any, pitchBendRange: any): void;
|
|
142
144
|
allSoundOff(channelNumber: any): any[];
|
|
143
145
|
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,
|
|
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,yDAiBC;IAED,iDAIC;IAED;;;MAMC;IAED,2CAIC;IAED,yDAIC;IAED,sCAUC;IAED,sDAMC;IAED,oCAYC;IAED,gDAEC;IAED,gDAEC;IAED,+DAIC;IAED,oDAUC;IAED,sDAKC;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;AAl/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
|
@@ -492,7 +492,8 @@ export class MidyGMLite {
|
|
|
492
492
|
return noteList[0];
|
|
493
493
|
}
|
|
494
494
|
connectNoteEffects(channel, gainNode) {
|
|
495
|
-
gainNode.connect(channel.
|
|
495
|
+
gainNode.connect(channel.gainL);
|
|
496
|
+
gainNode.connect(channel.gainR);
|
|
496
497
|
}
|
|
497
498
|
cbToRatio(cb) {
|
|
498
499
|
return Math.pow(10, cb / 200);
|
|
@@ -702,20 +703,12 @@ export class MidyGMLite {
|
|
|
702
703
|
this.setPitchBend(channelNumber, pitchBend);
|
|
703
704
|
}
|
|
704
705
|
setPitchBend(channelNumber, pitchBend) {
|
|
705
|
-
const now = this.audioContext.currentTime;
|
|
706
706
|
const channel = this.channels[channelNumber];
|
|
707
707
|
const prevPitchBend = channel.pitchBend;
|
|
708
708
|
channel.pitchBend = (pitchBend - 8192) / 8192;
|
|
709
709
|
const detuneChange = (channel.pitchBend - prevPitchBend) *
|
|
710
710
|
channel.pitchBendRange * 100;
|
|
711
|
-
|
|
712
|
-
activeNotes.forEach((activeNote) => {
|
|
713
|
-
const { bufferSource } = activeNote;
|
|
714
|
-
const detune = bufferSource.detune.value + detuneChange;
|
|
715
|
-
bufferSource.detune
|
|
716
|
-
.cancelScheduledValues(now)
|
|
717
|
-
.setValueAtTime(detune, now);
|
|
718
|
-
});
|
|
711
|
+
this.updateDetune(channel, detuneChange);
|
|
719
712
|
}
|
|
720
713
|
handleControlChange(channelNumber, controller, value) {
|
|
721
714
|
switch (controller) {
|
|
@@ -734,9 +727,9 @@ export class MidyGMLite {
|
|
|
734
727
|
case 64:
|
|
735
728
|
return this.setSustainPedal(channelNumber, value);
|
|
736
729
|
case 100:
|
|
737
|
-
return this.setRPNMSB(channelNumber, value);
|
|
738
|
-
case 101:
|
|
739
730
|
return this.setRPNLSB(channelNumber, value);
|
|
731
|
+
case 101:
|
|
732
|
+
return this.setRPNMSB(channelNumber, value);
|
|
740
733
|
case 120:
|
|
741
734
|
return this.allSoundOff(channelNumber);
|
|
742
735
|
case 121:
|
|
@@ -803,6 +796,17 @@ export class MidyGMLite {
|
|
|
803
796
|
this.releaseSustainPedal(channelNumber, value);
|
|
804
797
|
}
|
|
805
798
|
}
|
|
799
|
+
handleRPN(channelNumber) {
|
|
800
|
+
const channel = this.channels[channelNumber];
|
|
801
|
+
const rpn = channel.rpnMSB * 128 + channel.rpnLSB;
|
|
802
|
+
switch (rpn) {
|
|
803
|
+
case 0:
|
|
804
|
+
this.handlePitchBendRangeMessage(channelNumber);
|
|
805
|
+
break;
|
|
806
|
+
default:
|
|
807
|
+
console.warn(`Channel ${channelNumber}: Unsupported RPN MSB=${channel.rpnMSB} LSB=${channel.rpnLSB}`);
|
|
808
|
+
}
|
|
809
|
+
}
|
|
806
810
|
setRPNMSB(channelNumber, value) {
|
|
807
811
|
this.channels[channelNumber].rpnMSB = value;
|
|
808
812
|
}
|
|
@@ -811,27 +815,11 @@ export class MidyGMLite {
|
|
|
811
815
|
}
|
|
812
816
|
setDataEntry(channelNumber, value, isMSB) {
|
|
813
817
|
const channel = this.channels[channelNumber];
|
|
814
|
-
const rpn = channel.rpnMSB * 128 + channel.rpnLSB;
|
|
815
818
|
isMSB ? channel.dataMSB = value : channel.dataLSB = value;
|
|
816
|
-
|
|
817
|
-
switch (rpn) {
|
|
818
|
-
case 0:
|
|
819
|
-
return this.handlePitchBendRangeMessage(channelNumber, dataMSB, dataLSB);
|
|
820
|
-
default:
|
|
821
|
-
console.warn(`Channel ${channelNumber}: Unsupported RPN MSB=${channel.rpnMSB} LSB=${channel.rpnLSB}`);
|
|
822
|
-
}
|
|
823
|
-
}
|
|
824
|
-
handlePitchBendRangeMessage(channelNumber, dataMSB, dataLSB) {
|
|
825
|
-
const pitchBendRange = dataMSB + dataLSB / 100;
|
|
826
|
-
this.setPitchBendRange(channelNumber, pitchBendRange);
|
|
819
|
+
this.handleRPN(channelNumber);
|
|
827
820
|
}
|
|
828
|
-
|
|
821
|
+
updateDetune(channel, detuneChange) {
|
|
829
822
|
const now = this.audioContext.currentTime;
|
|
830
|
-
const channel = this.channels[channelNumber];
|
|
831
|
-
const prevPitchBendRange = channel.pitchBendRange;
|
|
832
|
-
channel.pitchBendRange = pitchBendRange;
|
|
833
|
-
const detuneChange = (channel.pitchBendRange - prevPitchBendRange) *
|
|
834
|
-
channel.pitchBend * 100;
|
|
835
823
|
const activeNotes = this.getActiveNotes(channel, now);
|
|
836
824
|
activeNotes.forEach((activeNote) => {
|
|
837
825
|
const { bufferSource } = activeNote;
|
|
@@ -841,6 +829,20 @@ export class MidyGMLite {
|
|
|
841
829
|
.setValueAtTime(detune, now);
|
|
842
830
|
});
|
|
843
831
|
}
|
|
832
|
+
handlePitchBendRangeMessage(channelNumber) {
|
|
833
|
+
const channel = this.channels[channelNumber];
|
|
834
|
+
this.limitData(channel, 0, 127, 0, 99);
|
|
835
|
+
const pitchBendRange = channel.dataMSB + channel.dataLSB / 100;
|
|
836
|
+
this.setPitchBendRange(channelNumber, pitchBendRange);
|
|
837
|
+
}
|
|
838
|
+
setPitchBendRange(channelNumber, pitchBendRange) {
|
|
839
|
+
const channel = this.channels[channelNumber];
|
|
840
|
+
const prevPitchBendRange = channel.pitchBendRange;
|
|
841
|
+
channel.pitchBendRange = pitchBendRange;
|
|
842
|
+
const detuneChange = (channel.pitchBendRange - prevPitchBendRange) *
|
|
843
|
+
channel.pitchBend * 100;
|
|
844
|
+
this.updateDetune(channel, detuneChange);
|
|
845
|
+
}
|
|
844
846
|
allSoundOff(channelNumber) {
|
|
845
847
|
const now = this.audioContext.currentTime;
|
|
846
848
|
const channel = this.channels[channelNumber];
|
package/esm/midy.d.ts
CHANGED
|
@@ -284,13 +284,21 @@ export class Midy {
|
|
|
284
284
|
setVibratoRate(channelNumber: any, vibratoRate: any): void;
|
|
285
285
|
setVibratoDepth(channelNumber: any, vibratoDepth: any): void;
|
|
286
286
|
setVibratoDelay(channelNumber: any, vibratoDelay: any): void;
|
|
287
|
+
limitData(channel: any, minMSB: any, maxMSB: any, minLSB: any, maxLSB: any): void;
|
|
288
|
+
limitDataMSB(channel: any, minMSB: any, maxMSB: any): void;
|
|
289
|
+
handleRPN(channelNumber: any, value: any): void;
|
|
287
290
|
incrementRPNValue(channelNumber: any): void;
|
|
288
291
|
decrementRPNValue(channelNumber: any): void;
|
|
289
292
|
setRPNMSB(channelNumber: any, value: any): void;
|
|
290
293
|
setRPNLSB(channelNumber: any, value: any): void;
|
|
291
294
|
setDataEntry(channelNumber: any, value: any, isMSB: any): void;
|
|
292
|
-
|
|
295
|
+
updateDetune(channel: any, detuneChange: any): void;
|
|
296
|
+
handlePitchBendRangeMessage(channelNumber: any): void;
|
|
293
297
|
setPitchBendRange(channelNumber: any, pitchBendRange: any): void;
|
|
298
|
+
handleFineTuningMessage(channelNumber: any): void;
|
|
299
|
+
setFineTuning(channelNumber: any, fineTuning: any): void;
|
|
300
|
+
handleCoarseTuningMessage(channelNumber: any): void;
|
|
301
|
+
setCoarseTuning(channelNumber: any, coarseTuning: any): void;
|
|
294
302
|
allSoundOff(channelNumber: any): any[];
|
|
295
303
|
resetAllControllers(channelNumber: any): void;
|
|
296
304
|
allNotesOff(channelNumber: any): any[];
|
package/esm/midy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"midy.d.ts","sourceRoot":"","sources":["../src/midy.js"],"names":[],"mappings":"AAuBA;IAwBE;;;;;;;;;;;;;;;;;;;;MAoBE;IAEF;;;;;;;;;;;MAWE;IAEF;;;;;;;MAOE;IAEF,+BAMC;IAzED,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;IA+ChB,kBAAgC;IAChC,gBAA4C;IAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAAiD;IAInD,4BAMC;IAED,mCASC;IAED,gDAMC;IAED,sCASC;IAED;;;;;;;;;;;;;;MAqBC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAiBC;IAED,+DAyBC;IAED,mEAWC;IAED,qDAOC;IAED,2EAyDC;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,
|
|
1
|
+
{"version":3,"file":"midy.d.ts","sourceRoot":"","sources":["../src/midy.js"],"names":[],"mappings":"AAuBA;IAwBE;;;;;;;;;;;;;;;;;;;;MAoBE;IAEF;;;;;;;;;;;MAWE;IAEF;;;;;;;MAOE;IAEF,+BAMC;IAzED,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;IA+ChB,kBAAgC;IAChC,gBAA4C;IAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAAiD;IAInD,4BAMC;IAED,mCASC;IAED,gDAMC;IAED,sCASC;IAED;;;;;;;;;;;;;;MAqBC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAiBC;IAED,+DAyBC;IAED,mEAWC;IAED,qDAOC;IAED,2EAyDC;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,uDAcC;IAED,wHAqCC;IAED,gDAQC;IAED,kGAgCC;IAED,0EAGC;IAED,sIAwDC;IAED,0FAGC;IAED,kEAeC;IAED,oEAYC;IAED,gEAqBC;IAED,sFAcC;IAED,4DAIC;IAED,+DAcC;IAED,qEAGC;IAED,uDAOC;IAED,0EAkEC;IAED,+CAEC;IAED,yDAiBC;IAED,iEAEC;IAED,iDAIC;IAED;;;MAMC;IAED,2CAIC;IAED,yDAIC;IAED,+CAEC;IAED,sCAUC;IAED,sDAMC;IAED,oDAEC;IAED,iDASC;IAED,iDAIC;IAED,wDAWC;IAED,uDAGC;IAED,2DAGC;IAED,6DAGC;IAED,6DASC;IAED,kFAeC;IAED,2DAMC;IAGD,gDAqBC;IAED,4CAEC;IAED,4CAEC;IAED,gDAEC;IAED,gDAEC;IAED,+DAIC;IAED,oDAUC;IAED,sDAKC;IAED,iEAOC;IAED,kDAKC;IAED,yDAGC;IAED,oDAKC;IAED,6DAGC;IAED,uCAoBC;IAED,8CAEC;IAED,uCAoBC;IAED,gBAEC;IAED,eAEC;IAED,eAEC;IAED,eAEC;IAED,4DAmBC;IAED,oBAQC;IAED,oBAQC;IAED,yDAgDC;IAED,yCAGC;IAED,mCAQC;IAED,6CAGC;IAED,2CAMC;IAED,+CAGC;IAED,+CAMC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AA1hDD;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"}
|