@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/script/midy-GM2.js
CHANGED
|
@@ -78,13 +78,13 @@ class MidyGM2 {
|
|
|
78
78
|
configurable: true,
|
|
79
79
|
writable: true,
|
|
80
80
|
value: 0
|
|
81
|
-
});
|
|
81
|
+
}); // cb
|
|
82
82
|
Object.defineProperty(this, "masterCoarseTuning", {
|
|
83
83
|
enumerable: true,
|
|
84
84
|
configurable: true,
|
|
85
85
|
writable: true,
|
|
86
86
|
value: 0
|
|
87
|
-
});
|
|
87
|
+
}); // cb
|
|
88
88
|
Object.defineProperty(this, "mono", {
|
|
89
89
|
enumerable: true,
|
|
90
90
|
configurable: true,
|
|
@@ -954,7 +954,7 @@ class MidyGM2 {
|
|
|
954
954
|
case 5:
|
|
955
955
|
return this.setPortamentoTime(channelNumber, value);
|
|
956
956
|
case 6:
|
|
957
|
-
return this.
|
|
957
|
+
return this.dataEntryMSB(channelNumber, value);
|
|
958
958
|
case 7:
|
|
959
959
|
return this.setVolume(channelNumber, value);
|
|
960
960
|
case 10:
|
|
@@ -964,7 +964,7 @@ class MidyGM2 {
|
|
|
964
964
|
case 32:
|
|
965
965
|
return this.setBankLSB(channelNumber, value);
|
|
966
966
|
case 38:
|
|
967
|
-
return this.
|
|
967
|
+
return this.dataEntryLSB(channelNumber, value);
|
|
968
968
|
case 64:
|
|
969
969
|
return this.setSustainPedal(channelNumber, value);
|
|
970
970
|
case 65:
|
|
@@ -974,9 +974,9 @@ class MidyGM2 {
|
|
|
974
974
|
case 67:
|
|
975
975
|
return this.setSoftPedal(channelNumber, value);
|
|
976
976
|
case 91:
|
|
977
|
-
return this.
|
|
977
|
+
return this.setReverbSendLevel(channelNumber, value);
|
|
978
978
|
case 93:
|
|
979
|
-
return this.
|
|
979
|
+
return this.setChorusSendLevel(channelNumber, value);
|
|
980
980
|
case 100:
|
|
981
981
|
return this.setRPNLSB(channelNumber, value);
|
|
982
982
|
case 101:
|
|
@@ -1002,22 +1002,24 @@ class MidyGM2 {
|
|
|
1002
1002
|
setBankMSB(channelNumber, msb) {
|
|
1003
1003
|
this.channels[channelNumber].bankMSB = msb;
|
|
1004
1004
|
}
|
|
1005
|
-
|
|
1005
|
+
updateModulation(channel) {
|
|
1006
1006
|
const now = this.audioContext.currentTime;
|
|
1007
|
-
const channel = this.channels[channelNumber];
|
|
1008
|
-
channel.modulation = (modulation / 127) *
|
|
1009
|
-
(channel.modulationDepthRange * 100);
|
|
1010
1007
|
const activeNotes = this.getActiveNotes(channel, now);
|
|
1011
1008
|
activeNotes.forEach((activeNote) => {
|
|
1012
1009
|
if (activeNote.modLFO) {
|
|
1013
|
-
|
|
1014
|
-
|
|
1010
|
+
const { gainNode, instrumentKey } = activeNote;
|
|
1011
|
+
gainNode.gain.setValueAtTime(this.cbToRatio(instrumentKey.modLfoToVolume + channel.modulation), now);
|
|
1015
1012
|
}
|
|
1016
1013
|
else {
|
|
1017
1014
|
this.startModulation(channel, activeNote, now);
|
|
1018
1015
|
}
|
|
1019
1016
|
});
|
|
1020
1017
|
}
|
|
1018
|
+
setModulation(channelNumber, modulation) {
|
|
1019
|
+
const channel = this.channels[channelNumber];
|
|
1020
|
+
channel.modulation = (modulation / 127) * channel.modulationDepthRange;
|
|
1021
|
+
this.updateModulation(channel);
|
|
1022
|
+
}
|
|
1021
1023
|
setPortamentoTime(channelNumber, portamentoTime) {
|
|
1022
1024
|
this.channels[channelNumber].portamentoTime = portamentoTime / 127;
|
|
1023
1025
|
}
|
|
@@ -1046,6 +1048,10 @@ class MidyGM2 {
|
|
|
1046
1048
|
setBankLSB(channelNumber, lsb) {
|
|
1047
1049
|
this.channels[channelNumber].bankLSB = lsb;
|
|
1048
1050
|
}
|
|
1051
|
+
dataEntryLSB(channelNumber, value) {
|
|
1052
|
+
this.channels[channelNumber].dataLSB = value;
|
|
1053
|
+
this.handleRPN(channelNumber);
|
|
1054
|
+
}
|
|
1049
1055
|
updateChannelGain(channel) {
|
|
1050
1056
|
const now = this.audioContext.currentTime;
|
|
1051
1057
|
const volume = channel.volume * channel.expression;
|
|
@@ -1067,7 +1073,7 @@ class MidyGM2 {
|
|
|
1067
1073
|
setPortamento(channelNumber, value) {
|
|
1068
1074
|
this.channels[channelNumber].portamento = value >= 64;
|
|
1069
1075
|
}
|
|
1070
|
-
|
|
1076
|
+
setReverbSendLevel(channelNumber, reverb) {
|
|
1071
1077
|
const now = this.audioContext.currentTime;
|
|
1072
1078
|
const channel = this.channels[channelNumber];
|
|
1073
1079
|
const reverbEffect = channel.reverbEffect;
|
|
@@ -1077,7 +1083,7 @@ class MidyGM2 {
|
|
|
1077
1083
|
reverbEffect.wetGain.gain.cancelScheduledValues(now);
|
|
1078
1084
|
reverbEffect.wetGain.gain.setValueAtTime(channel.reverb, now);
|
|
1079
1085
|
}
|
|
1080
|
-
|
|
1086
|
+
setChorusSendLevel(channelNumber, chorus) {
|
|
1081
1087
|
const channel = this.channels[channelNumber];
|
|
1082
1088
|
channel.chorus = chorus / 127;
|
|
1083
1089
|
channel.chorusEffect.lfoGain = channel.chorus;
|
|
@@ -1125,21 +1131,21 @@ class MidyGM2 {
|
|
|
1125
1131
|
channel.dataMSB = minMSB;
|
|
1126
1132
|
}
|
|
1127
1133
|
}
|
|
1128
|
-
handleRPN(channelNumber
|
|
1134
|
+
handleRPN(channelNumber) {
|
|
1129
1135
|
const channel = this.channels[channelNumber];
|
|
1130
1136
|
const rpn = channel.rpnMSB * 128 + channel.rpnLSB;
|
|
1131
1137
|
switch (rpn) {
|
|
1132
1138
|
case 0:
|
|
1133
|
-
|
|
1134
|
-
this.handlePitchBendRangeMessage(channelNumber);
|
|
1139
|
+
this.handlePitchBendRangeRPN(channelNumber);
|
|
1135
1140
|
break;
|
|
1136
1141
|
case 1:
|
|
1137
|
-
|
|
1138
|
-
this.handleFineTuningMessage(channelNumber);
|
|
1142
|
+
this.handleFineTuningRPN(channelNumber);
|
|
1139
1143
|
break;
|
|
1140
1144
|
case 2:
|
|
1141
|
-
|
|
1142
|
-
|
|
1145
|
+
this.handleCoarseTuningRPN(channelNumber);
|
|
1146
|
+
break;
|
|
1147
|
+
case 5:
|
|
1148
|
+
this.handleModulationDepthRangeRPN(channelNumber);
|
|
1143
1149
|
break;
|
|
1144
1150
|
default:
|
|
1145
1151
|
console.warn(`Channel ${channelNumber}: Unsupported RPN MSB=${channel.rpnMSB} LSB=${channel.rpnLSB}`);
|
|
@@ -1151,9 +1157,8 @@ class MidyGM2 {
|
|
|
1151
1157
|
setRPNLSB(channelNumber, value) {
|
|
1152
1158
|
this.channels[channelNumber].rpnLSB = value;
|
|
1153
1159
|
}
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
isMSB ? channel.dataMSB = value : channel.dataLSB = value;
|
|
1160
|
+
dataEntryMSB(channelNumber, value) {
|
|
1161
|
+
this.channels[channelNumber].dataMSB = value;
|
|
1157
1162
|
this.handleRPN(channelNumber);
|
|
1158
1163
|
}
|
|
1159
1164
|
updateDetune(channel, detuneChange) {
|
|
@@ -1167,7 +1172,7 @@ class MidyGM2 {
|
|
|
1167
1172
|
.setValueAtTime(detune, now);
|
|
1168
1173
|
});
|
|
1169
1174
|
}
|
|
1170
|
-
|
|
1175
|
+
handlePitchBendRangeRPN(channelNumber) {
|
|
1171
1176
|
const channel = this.channels[channelNumber];
|
|
1172
1177
|
this.limitData(channel, 0, 127, 0, 99);
|
|
1173
1178
|
const pitchBendRange = channel.dataMSB + channel.dataLSB / 100;
|
|
@@ -1181,7 +1186,7 @@ class MidyGM2 {
|
|
|
1181
1186
|
channel.pitchBend * 100;
|
|
1182
1187
|
this.updateDetune(channel, detuneChange);
|
|
1183
1188
|
}
|
|
1184
|
-
|
|
1189
|
+
handleFineTuningRPN(channelNumber) {
|
|
1185
1190
|
const channel = this.channels[channelNumber];
|
|
1186
1191
|
this.limitData(channel, 0, 127, 0, 127);
|
|
1187
1192
|
const fineTuning = (channel.dataMSB * 128 + channel.dataLSB - 8192) / 8192;
|
|
@@ -1189,9 +1194,12 @@ class MidyGM2 {
|
|
|
1189
1194
|
}
|
|
1190
1195
|
setFineTuning(channelNumber, fineTuning) {
|
|
1191
1196
|
const channel = this.channels[channelNumber];
|
|
1197
|
+
const prevFineTuning = channel.fineTuning;
|
|
1192
1198
|
channel.fineTuning = fineTuning;
|
|
1199
|
+
const detuneChange = channel.fineTuning - prevFineTuning;
|
|
1200
|
+
this.updateDetune(channel, detuneChange);
|
|
1193
1201
|
}
|
|
1194
|
-
|
|
1202
|
+
handleCoarseTuningRPN(channelNumber) {
|
|
1195
1203
|
const channel = this.channels[channelNumber];
|
|
1196
1204
|
this.limitDataMSB(channel, 0, 127);
|
|
1197
1205
|
const coarseTuning = channel.dataMSB - 64;
|
|
@@ -1199,7 +1207,22 @@ class MidyGM2 {
|
|
|
1199
1207
|
}
|
|
1200
1208
|
setCoarseTuning(channelNumber, coarseTuning) {
|
|
1201
1209
|
const channel = this.channels[channelNumber];
|
|
1202
|
-
|
|
1210
|
+
const prevCoarseTuning = channel.coarseTuning;
|
|
1211
|
+
channel.coarseTuning = coarseTuning;
|
|
1212
|
+
const detuneChange = channel.coarseTuning - prevCoarseTuning;
|
|
1213
|
+
this.updateDetune(channel, detuneChange);
|
|
1214
|
+
}
|
|
1215
|
+
handleModulationDepthRangeRPN(channelNumber) {
|
|
1216
|
+
const channel = this.channels[channelNumber];
|
|
1217
|
+
this.limitData(channel, 0, 127, 0, 127);
|
|
1218
|
+
const modulationDepthRange = dataMSB + dataLSB / 128;
|
|
1219
|
+
this.setModulationDepthRange(channelNumber, modulationDepthRange);
|
|
1220
|
+
}
|
|
1221
|
+
setModulationDepthRange(channelNumber, modulationDepthRange) {
|
|
1222
|
+
const channel = this.channels[channelNumber];
|
|
1223
|
+
channel.modulationDepthRange = modulationDepthRange;
|
|
1224
|
+
channel.modulation = (modulation / 127) * channel.modulationDepthRange;
|
|
1225
|
+
this.updateModulation(channel);
|
|
1203
1226
|
}
|
|
1204
1227
|
allSoundOff(channelNumber) {
|
|
1205
1228
|
const now = this.audioContext.currentTime;
|
|
@@ -1290,9 +1313,9 @@ class MidyGM2 {
|
|
|
1290
1313
|
switch (data[3]) {
|
|
1291
1314
|
case 1:
|
|
1292
1315
|
return this.handleMasterVolumeSysEx(data);
|
|
1293
|
-
case 3:
|
|
1316
|
+
case 3: // https://amei.or.jp/midistandardcommittee/Recommended_Practice/e/ca25.pdf
|
|
1294
1317
|
return this.handleMasterFineTuningSysEx(data);
|
|
1295
|
-
case 4:
|
|
1318
|
+
case 4: // https://amei.or.jp/midistandardcommittee/Recommended_Practice/e/ca25.pdf
|
|
1296
1319
|
return this.handleMasterCoarseTuningSysEx(data);
|
|
1297
1320
|
// case 5: // TODO: Global Parameter Control
|
|
1298
1321
|
default:
|
|
@@ -1404,7 +1427,7 @@ Object.defineProperty(MidyGM2, "channelSettings", {
|
|
|
1404
1427
|
value: {
|
|
1405
1428
|
currentBufferSource: null,
|
|
1406
1429
|
volume: 100 / 127,
|
|
1407
|
-
pan:
|
|
1430
|
+
pan: 64,
|
|
1408
1431
|
portamentoTime: 0,
|
|
1409
1432
|
reverb: 0,
|
|
1410
1433
|
chorus: 0,
|
|
@@ -1415,9 +1438,9 @@ Object.defineProperty(MidyGM2, "channelSettings", {
|
|
|
1415
1438
|
dataLSB: 0,
|
|
1416
1439
|
program: 0,
|
|
1417
1440
|
pitchBend: 0,
|
|
1418
|
-
fineTuning: 0,
|
|
1419
|
-
coarseTuning: 0,
|
|
1420
|
-
modulationDepthRange: 0.5,
|
|
1441
|
+
fineTuning: 0, // cb
|
|
1442
|
+
coarseTuning: 0, // cb
|
|
1443
|
+
modulationDepthRange: 0.5, // cb
|
|
1421
1444
|
}
|
|
1422
1445
|
});
|
|
1423
1446
|
Object.defineProperty(MidyGM2, "effectSettings", {
|
package/script/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;
|
|
@@ -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/script/midy-GMLite.js
CHANGED
|
@@ -718,7 +718,7 @@ class MidyGMLite {
|
|
|
718
718
|
case 1:
|
|
719
719
|
return this.setModulation(channelNumber, value);
|
|
720
720
|
case 6:
|
|
721
|
-
return this.
|
|
721
|
+
return this.dataEntryMSB(channelNumber, value);
|
|
722
722
|
case 7:
|
|
723
723
|
return this.setVolume(channelNumber, value);
|
|
724
724
|
case 10:
|
|
@@ -726,7 +726,7 @@ class MidyGMLite {
|
|
|
726
726
|
case 11:
|
|
727
727
|
return this.setExpression(channelNumber, value);
|
|
728
728
|
case 38:
|
|
729
|
-
return this.
|
|
729
|
+
return this.dataEntryLSB(channelNumber, value);
|
|
730
730
|
case 64:
|
|
731
731
|
return this.setSustainPedal(channelNumber, value);
|
|
732
732
|
case 100:
|
|
@@ -743,22 +743,24 @@ class MidyGMLite {
|
|
|
743
743
|
console.warn(`Unsupported Control change: controller=${controller} value=${value}`);
|
|
744
744
|
}
|
|
745
745
|
}
|
|
746
|
-
|
|
746
|
+
updateModulation(channel) {
|
|
747
747
|
const now = this.audioContext.currentTime;
|
|
748
|
-
const channel = this.channels[channelNumber];
|
|
749
|
-
channel.modulation = (modulation / 127) *
|
|
750
|
-
(channel.modulationDepthRange * 100);
|
|
751
748
|
const activeNotes = this.getActiveNotes(channel, now);
|
|
752
749
|
activeNotes.forEach((activeNote) => {
|
|
753
750
|
if (activeNote.modLFO) {
|
|
754
|
-
|
|
755
|
-
|
|
751
|
+
const { gainNode, instrumentKey } = activeNote;
|
|
752
|
+
gainNode.gain.setValueAtTime(this.cbToRatio(instrumentKey.modLfoToVolume + channel.modulation), now);
|
|
756
753
|
}
|
|
757
754
|
else {
|
|
758
755
|
this.startModulation(channel, activeNote, now);
|
|
759
756
|
}
|
|
760
757
|
});
|
|
761
758
|
}
|
|
759
|
+
setModulation(channelNumber, modulation) {
|
|
760
|
+
const channel = this.channels[channelNumber];
|
|
761
|
+
channel.modulation = (modulation / 127) * channel.modulationDepthRange;
|
|
762
|
+
this.updateModulation(channel);
|
|
763
|
+
}
|
|
762
764
|
setVolume(channelNumber, volume) {
|
|
763
765
|
const channel = this.channels[channelNumber];
|
|
764
766
|
channel.volume = volume / 127;
|
|
@@ -781,6 +783,10 @@ class MidyGMLite {
|
|
|
781
783
|
channel.expression = expression / 127;
|
|
782
784
|
this.updateChannelGain(channel);
|
|
783
785
|
}
|
|
786
|
+
dataEntryLSB(channelNumber, value) {
|
|
787
|
+
this.channels[channelNumber].dataLSB = value;
|
|
788
|
+
this.handleRPN(channelNumber);
|
|
789
|
+
}
|
|
784
790
|
updateChannelGain(channel) {
|
|
785
791
|
const now = this.audioContext.currentTime;
|
|
786
792
|
const volume = channel.volume * channel.expression;
|
|
@@ -804,7 +810,7 @@ class MidyGMLite {
|
|
|
804
810
|
const rpn = channel.rpnMSB * 128 + channel.rpnLSB;
|
|
805
811
|
switch (rpn) {
|
|
806
812
|
case 0:
|
|
807
|
-
this.
|
|
813
|
+
this.handlePitchBendRangeRPN(channelNumber);
|
|
808
814
|
break;
|
|
809
815
|
default:
|
|
810
816
|
console.warn(`Channel ${channelNumber}: Unsupported RPN MSB=${channel.rpnMSB} LSB=${channel.rpnLSB}`);
|
|
@@ -816,9 +822,8 @@ class MidyGMLite {
|
|
|
816
822
|
setRPNLSB(channelNumber, value) {
|
|
817
823
|
this.channels[channelNumber].rpnLSB = value;
|
|
818
824
|
}
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
isMSB ? channel.dataMSB = value : channel.dataLSB = value;
|
|
825
|
+
dataEntryMSB(channelNumber, value) {
|
|
826
|
+
this.channels[channelNumber].dataMSB = value;
|
|
822
827
|
this.handleRPN(channelNumber);
|
|
823
828
|
}
|
|
824
829
|
updateDetune(channel, detuneChange) {
|
|
@@ -832,7 +837,7 @@ class MidyGMLite {
|
|
|
832
837
|
.setValueAtTime(detune, now);
|
|
833
838
|
});
|
|
834
839
|
}
|
|
835
|
-
|
|
840
|
+
handlePitchBendRangeRPN(channelNumber) {
|
|
836
841
|
const channel = this.channels[channelNumber];
|
|
837
842
|
this.limitData(channel, 0, 127, 0, 99);
|
|
838
843
|
const pitchBendRange = channel.dataMSB + channel.dataLSB / 100;
|
|
@@ -971,7 +976,7 @@ Object.defineProperty(MidyGMLite, "channelSettings", {
|
|
|
971
976
|
dataLSB: 0,
|
|
972
977
|
program: 0,
|
|
973
978
|
pitchBend: 0,
|
|
974
|
-
modulationDepthRange: 0.5,
|
|
979
|
+
modulationDepthRange: 0.5, // cb
|
|
975
980
|
}
|
|
976
981
|
});
|
|
977
982
|
Object.defineProperty(MidyGMLite, "effectSettings", {
|
package/script/midy.d.ts
CHANGED
|
@@ -256,14 +256,15 @@ export class Midy {
|
|
|
256
256
|
releaseNote(channelNumber: any, noteNumber: any, velocity: any): Promise<any> | undefined;
|
|
257
257
|
releaseSustainPedal(channelNumber: any, halfVelocity: any): any[];
|
|
258
258
|
releaseSostenutoPedal(channelNumber: any, halfVelocity: any): any[];
|
|
259
|
-
handleMIDIMessage(statusByte: any, data1: any, data2: any): any
|
|
259
|
+
handleMIDIMessage(statusByte: any, data1: any, data2: any): void | any[] | Promise<any>;
|
|
260
260
|
handlePolyphonicKeyPressure(channelNumber: any, noteNumber: any, pressure: any): void;
|
|
261
261
|
handleProgramChange(channelNumber: any, program: any): void;
|
|
262
262
|
handleChannelPressure(channelNumber: any, pressure: any): void;
|
|
263
263
|
handlePitchBendMessage(channelNumber: any, lsb: any, msb: any): void;
|
|
264
264
|
setPitchBend(channelNumber: any, pitchBend: any): void;
|
|
265
|
-
handleControlChange(channelNumber: any, controller: any, value: any): any;
|
|
265
|
+
handleControlChange(channelNumber: any, controller: any, value: any): void | any[];
|
|
266
266
|
setBankMSB(channelNumber: any, msb: any): void;
|
|
267
|
+
updateModulation(channel: any): void;
|
|
267
268
|
setModulation(channelNumber: any, modulation: any): void;
|
|
268
269
|
setPortamentoTime(channelNumber: any, portamentoTime: any): void;
|
|
269
270
|
setVolume(channelNumber: any, volume: any): void;
|
|
@@ -274,11 +275,12 @@ export class Midy {
|
|
|
274
275
|
setPan(channelNumber: any, pan: any): void;
|
|
275
276
|
setExpression(channelNumber: any, expression: any): void;
|
|
276
277
|
setBankLSB(channelNumber: any, lsb: any): void;
|
|
278
|
+
dataEntryLSB(channelNumber: any, value: any): void;
|
|
277
279
|
updateChannelGain(channel: any): void;
|
|
278
280
|
setSustainPedal(channelNumber: any, value: any): void;
|
|
279
281
|
setPortamento(channelNumber: any, value: any): void;
|
|
280
|
-
|
|
281
|
-
|
|
282
|
+
setReverbSendLevel(channelNumber: any, reverb: any): void;
|
|
283
|
+
setChorusSendLevel(channelNumber: any, chorus: any): void;
|
|
282
284
|
setSostenutoPedal(channelNumber: any, value: any): void;
|
|
283
285
|
setSoftPedal(channelNumber: any, softPedal: any): void;
|
|
284
286
|
setVibratoRate(channelNumber: any, vibratoRate: any): void;
|
|
@@ -287,18 +289,20 @@ export class Midy {
|
|
|
287
289
|
limitData(channel: any, minMSB: any, maxMSB: any, minLSB: any, maxLSB: any): void;
|
|
288
290
|
limitDataMSB(channel: any, minMSB: any, maxMSB: any): void;
|
|
289
291
|
handleRPN(channelNumber: any, value: any): void;
|
|
290
|
-
|
|
291
|
-
|
|
292
|
+
dataIncrement(channelNumber: any): void;
|
|
293
|
+
dataDecrement(channelNumber: any): void;
|
|
292
294
|
setRPNMSB(channelNumber: any, value: any): void;
|
|
293
295
|
setRPNLSB(channelNumber: any, value: any): void;
|
|
294
|
-
|
|
296
|
+
dataEntryMSB(channelNumber: any, value: any): void;
|
|
295
297
|
updateDetune(channel: any, detuneChange: any): void;
|
|
296
|
-
|
|
298
|
+
handlePitchBendRangeRPN(channelNumber: any): void;
|
|
297
299
|
setPitchBendRange(channelNumber: any, pitchBendRange: any): void;
|
|
298
|
-
|
|
300
|
+
handleFineTuningRPN(channelNumber: any): void;
|
|
299
301
|
setFineTuning(channelNumber: any, fineTuning: any): void;
|
|
300
|
-
|
|
302
|
+
handleCoarseTuningRPN(channelNumber: any): void;
|
|
301
303
|
setCoarseTuning(channelNumber: any, coarseTuning: any): void;
|
|
304
|
+
handleModulationDepthRangeRPN(channelNumber: any): void;
|
|
305
|
+
setModulationDepthRange(channelNumber: any, modulationDepthRange: any): void;
|
|
302
306
|
allSoundOff(channelNumber: any): any[];
|
|
303
307
|
resetAllControllers(channelNumber: any): void;
|
|
304
308
|
allNotesOff(channelNumber: any): any[];
|
package/script/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,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,
|
|
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,wFAqBC;IAED,sFAcC;IAED,4DAIC;IAED,+DAcC;IAED,qEAGC;IAED,uDAOC;IAED,mFAkEC;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,2DAGC;IAED,6DAGC;IAED,6DASC;IAED,kFAeC;IAED,2DAMC;IAED,gDAyBC;IAED,wCAEC;IAED,wCAEC;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;AAxjDD;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"}
|