@marmooo/midy 0.0.5 → 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 +22 -10
- package/esm/midy-GM1.d.ts.map +1 -1
- package/esm/midy-GM1.js +126 -73
- package/esm/midy-GM2.d.ts +24 -10
- package/esm/midy-GM2.d.ts.map +1 -1
- package/esm/midy-GM2.js +145 -82
- package/esm/midy-GMLite.d.ts +16 -8
- package/esm/midy-GMLite.d.ts.map +1 -1
- package/esm/midy-GMLite.js +79 -60
- package/esm/midy.d.ts +24 -10
- package/esm/midy.d.ts.map +1 -1
- package/esm/midy.js +145 -111
- package/package.json +1 -1
- package/script/midy-GM1.d.ts +22 -10
- package/script/midy-GM1.d.ts.map +1 -1
- package/script/midy-GM1.js +126 -73
- package/script/midy-GM2.d.ts +24 -10
- package/script/midy-GM2.d.ts.map +1 -1
- package/script/midy-GM2.js +145 -82
- package/script/midy-GMLite.d.ts +16 -8
- package/script/midy-GMLite.d.ts.map +1 -1
- package/script/midy-GMLite.js +79 -60
- package/script/midy.d.ts +24 -10
- package/script/midy.d.ts.map +1 -1
- package/script/midy.js +145 -111
package/script/midy-GM2.js
CHANGED
|
@@ -228,22 +228,23 @@ class MidyGM2 {
|
|
|
228
228
|
this.totalTime = this.calcTotalTime();
|
|
229
229
|
}
|
|
230
230
|
setChannelAudioNodes(audioContext) {
|
|
231
|
-
const
|
|
232
|
-
|
|
233
|
-
});
|
|
234
|
-
const
|
|
235
|
-
|
|
236
|
-
|
|
231
|
+
const { gainLeft, gainRight } = this.panToGain(MidyGM2.channelSettings.pan);
|
|
232
|
+
const gainL = new GainNode(audioContext, { gain: gainLeft });
|
|
233
|
+
const gainR = new GainNode(audioContext, { gain: gainRight });
|
|
234
|
+
const merger = new ChannelMergerNode(audioContext, { numberOfInputs: 2 });
|
|
235
|
+
gainL.connect(merger, 0, 0);
|
|
236
|
+
gainR.connect(merger, 0, 1);
|
|
237
|
+
merger.connect(this.masterGain);
|
|
237
238
|
const reverbEffect = this.createReverbEffect(audioContext);
|
|
238
239
|
const chorusEffect = this.createChorusEffect(audioContext);
|
|
239
240
|
chorusEffect.lfo.start();
|
|
240
|
-
reverbEffect.dryGain.connect(
|
|
241
|
-
reverbEffect.
|
|
242
|
-
|
|
243
|
-
|
|
241
|
+
reverbEffect.dryGain.connect(gainL);
|
|
242
|
+
reverbEffect.dryGain.connect(gainR);
|
|
243
|
+
reverbEffect.wetGain.connect(gainL);
|
|
244
|
+
reverbEffect.wetGain.connect(gainR);
|
|
244
245
|
return {
|
|
245
|
-
|
|
246
|
-
|
|
246
|
+
gainL,
|
|
247
|
+
gainR,
|
|
247
248
|
reverbEffect,
|
|
248
249
|
chorusEffect,
|
|
249
250
|
};
|
|
@@ -337,7 +338,7 @@ class MidyGM2 {
|
|
|
337
338
|
this.handleChannelPressure(event.channel, event.amount);
|
|
338
339
|
break;
|
|
339
340
|
case "pitchBend":
|
|
340
|
-
this.
|
|
341
|
+
this.setPitchBend(event.channel, event.value);
|
|
341
342
|
break;
|
|
342
343
|
case "sysEx":
|
|
343
344
|
this.handleSysEx(event.data);
|
|
@@ -417,7 +418,6 @@ class MidyGM2 {
|
|
|
417
418
|
const tmpChannels = new Array(16);
|
|
418
419
|
for (let i = 0; i < tmpChannels.length; i++) {
|
|
419
420
|
tmpChannels[i] = {
|
|
420
|
-
durationTicks: new Map(),
|
|
421
421
|
programNumber: -1,
|
|
422
422
|
bankMSB: this.channels[i].bankMSB,
|
|
423
423
|
bankLSB: this.channels[i].bankLSB,
|
|
@@ -447,16 +447,6 @@ class MidyGM2 {
|
|
|
447
447
|
}
|
|
448
448
|
channel.programNumber = 0;
|
|
449
449
|
}
|
|
450
|
-
channel.durationTicks.set(event.noteNumber, {
|
|
451
|
-
ticks: event.ticks,
|
|
452
|
-
noteOn: event,
|
|
453
|
-
});
|
|
454
|
-
break;
|
|
455
|
-
}
|
|
456
|
-
case "noteOff": {
|
|
457
|
-
const { ticks, noteOn } = tmpChannels[event.channel].durationTicks
|
|
458
|
-
.get(event.noteNumber);
|
|
459
|
-
noteOn.durationTicks = event.ticks - ticks;
|
|
460
450
|
break;
|
|
461
451
|
}
|
|
462
452
|
case "controller":
|
|
@@ -491,8 +481,8 @@ class MidyGM2 {
|
|
|
491
481
|
});
|
|
492
482
|
});
|
|
493
483
|
const priority = {
|
|
494
|
-
|
|
495
|
-
|
|
484
|
+
controller: 0,
|
|
485
|
+
sysEx: 1,
|
|
496
486
|
};
|
|
497
487
|
timeline.sort((a, b) => {
|
|
498
488
|
if (a.ticks !== b.ticks)
|
|
@@ -630,12 +620,8 @@ class MidyGM2 {
|
|
|
630
620
|
}
|
|
631
621
|
createChorusEffect(audioContext, options = {}) {
|
|
632
622
|
const { chorusCount = 2, chorusRate = 0.6, chorusDepth = 0.15, delay = 0.01, variance = delay * 0.1, } = options;
|
|
633
|
-
const lfo = new OscillatorNode(audioContext, {
|
|
634
|
-
|
|
635
|
-
});
|
|
636
|
-
const lfoGain = new GainNode(audioContext, {
|
|
637
|
-
gain: chorusDepth,
|
|
638
|
-
});
|
|
623
|
+
const lfo = new OscillatorNode(audioContext, { frequency: chorusRate });
|
|
624
|
+
const lfoGain = new GainNode(audioContext, { gain: chorusDepth });
|
|
639
625
|
const chorusGains = [];
|
|
640
626
|
const delayNodes = [];
|
|
641
627
|
const baseGain = 1 / chorusCount;
|
|
@@ -646,9 +632,7 @@ class MidyGM2 {
|
|
|
646
632
|
maxDelayTime: delayTime,
|
|
647
633
|
});
|
|
648
634
|
delayNodes.push(delayNode);
|
|
649
|
-
const chorusGain = new GainNode(audioContext, {
|
|
650
|
-
gain: baseGain,
|
|
651
|
-
});
|
|
635
|
+
const chorusGain = new GainNode(audioContext, { gain: baseGain });
|
|
652
636
|
chorusGains.push(chorusGain);
|
|
653
637
|
lfo.connect(lfoGain);
|
|
654
638
|
lfoGain.connect(delayNode.delayTime);
|
|
@@ -664,14 +648,16 @@ class MidyGM2 {
|
|
|
664
648
|
connectNoteEffects(channel, gainNode) {
|
|
665
649
|
if (channel.reverb === 0) {
|
|
666
650
|
if (channel.chorus === 0) { // no effect
|
|
667
|
-
gainNode.connect(channel.
|
|
651
|
+
gainNode.connect(channel.gainL);
|
|
652
|
+
gainNode.connect(channel.gainR);
|
|
668
653
|
}
|
|
669
654
|
else { // chorus
|
|
670
655
|
channel.chorusEffect.delayNodes.forEach((delayNode) => {
|
|
671
656
|
gainNode.connect(delayNode);
|
|
672
657
|
});
|
|
673
658
|
channel.chorusEffect.chorusGains.forEach((chorusGain) => {
|
|
674
|
-
chorusGain.connect(channel.
|
|
659
|
+
chorusGain.connect(channel.gainL);
|
|
660
|
+
chorusGain.connect(channel.gainR);
|
|
675
661
|
});
|
|
676
662
|
}
|
|
677
663
|
}
|
|
@@ -710,9 +696,7 @@ class MidyGM2 {
|
|
|
710
696
|
}
|
|
711
697
|
setVolumeEnvelope(channel, note) {
|
|
712
698
|
const { instrumentKey, startTime, velocity } = note;
|
|
713
|
-
note.gainNode = new GainNode(this.audioContext, {
|
|
714
|
-
gain: 0,
|
|
715
|
-
});
|
|
699
|
+
note.gainNode = new GainNode(this.audioContext, { gain: 0 });
|
|
716
700
|
let volume = (velocity / 127) * channel.volume * channel.expression;
|
|
717
701
|
if (volume === 0)
|
|
718
702
|
volume = 1e-6; // exponentialRampToValueAtTime() requires a non-zero value
|
|
@@ -951,21 +935,15 @@ class MidyGM2 {
|
|
|
951
935
|
}
|
|
952
936
|
handlePitchBendMessage(channelNumber, lsb, msb) {
|
|
953
937
|
const pitchBend = msb * 128 + lsb;
|
|
954
|
-
this.
|
|
938
|
+
this.setPitchBend(channelNumber, pitchBend);
|
|
955
939
|
}
|
|
956
|
-
|
|
957
|
-
const now = this.audioContext.currentTime;
|
|
940
|
+
setPitchBend(channelNumber, pitchBend) {
|
|
958
941
|
const channel = this.channels[channelNumber];
|
|
942
|
+
const prevPitchBend = channel.pitchBend;
|
|
959
943
|
channel.pitchBend = (pitchBend - 8192) / 8192;
|
|
960
|
-
const
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
const { bufferSource, instrumentKey, noteNumber } = activeNote;
|
|
964
|
-
const playbackRate = calcPlaybackRate(instrumentKey, noteNumber, semitoneOffset);
|
|
965
|
-
bufferSource.playbackRate
|
|
966
|
-
.cancelScheduledValues(now)
|
|
967
|
-
.setValueAtTime(playbackRate * pressure, now);
|
|
968
|
-
});
|
|
944
|
+
const detuneChange = (channel.pitchBend - prevPitchBend) *
|
|
945
|
+
channel.pitchBendRange * 100;
|
|
946
|
+
this.updateDetune(channel, detuneChange);
|
|
969
947
|
}
|
|
970
948
|
handleControlChange(channelNumber, controller, value) {
|
|
971
949
|
switch (controller) {
|
|
@@ -1000,9 +978,9 @@ class MidyGM2 {
|
|
|
1000
978
|
case 93:
|
|
1001
979
|
return this.setChorus(channelNumber, value);
|
|
1002
980
|
case 100:
|
|
1003
|
-
return this.setRPNMSB(channelNumber, value);
|
|
1004
|
-
case 101:
|
|
1005
981
|
return this.setRPNLSB(channelNumber, value);
|
|
982
|
+
case 101:
|
|
983
|
+
return this.setRPNMSB(channelNumber, value);
|
|
1006
984
|
case 120:
|
|
1007
985
|
return this.allSoundOff(channelNumber);
|
|
1008
986
|
case 121:
|
|
@@ -1048,12 +1026,17 @@ class MidyGM2 {
|
|
|
1048
1026
|
channel.volume = volume / 127;
|
|
1049
1027
|
this.updateChannelGain(channel);
|
|
1050
1028
|
}
|
|
1029
|
+
panToGain(pan) {
|
|
1030
|
+
const theta = Math.PI / 2 * Math.max(0, pan - 1) / 126;
|
|
1031
|
+
return {
|
|
1032
|
+
gainLeft: Math.cos(theta),
|
|
1033
|
+
gainRight: Math.sin(theta),
|
|
1034
|
+
};
|
|
1035
|
+
}
|
|
1051
1036
|
setPan(channelNumber, pan) {
|
|
1052
|
-
const now = this.audioContext.currentTime;
|
|
1053
1037
|
const channel = this.channels[channelNumber];
|
|
1054
|
-
channel.pan = pan
|
|
1055
|
-
|
|
1056
|
-
channel.pannerNode.pan.setValueAtTime(channel.pan, now);
|
|
1038
|
+
channel.pan = pan;
|
|
1039
|
+
this.updateChannelGain(channel);
|
|
1057
1040
|
}
|
|
1058
1041
|
setExpression(channelNumber, expression) {
|
|
1059
1042
|
const channel = this.channels[channelNumber];
|
|
@@ -1066,8 +1049,13 @@ class MidyGM2 {
|
|
|
1066
1049
|
updateChannelGain(channel) {
|
|
1067
1050
|
const now = this.audioContext.currentTime;
|
|
1068
1051
|
const volume = channel.volume * channel.expression;
|
|
1069
|
-
channel.
|
|
1070
|
-
channel.
|
|
1052
|
+
const { gainLeft, gainRight } = this.panToGain(channel.pan);
|
|
1053
|
+
channel.gainL.gain
|
|
1054
|
+
.cancelScheduledValues(now)
|
|
1055
|
+
.setValueAtTime(volume * gainLeft, now);
|
|
1056
|
+
channel.gainR.gain
|
|
1057
|
+
.cancelScheduledValues(now)
|
|
1058
|
+
.setValueAtTime(volume * gainRight, now);
|
|
1071
1059
|
}
|
|
1072
1060
|
setSustainPedal(channelNumber, value) {
|
|
1073
1061
|
const isOn = value >= 64;
|
|
@@ -1099,7 +1087,8 @@ class MidyGM2 {
|
|
|
1099
1087
|
const channel = this.channels[channelNumber];
|
|
1100
1088
|
channel.sostenutoPedal = isOn;
|
|
1101
1089
|
if (isOn) {
|
|
1102
|
-
const
|
|
1090
|
+
const now = this.audioContext.currentTime;
|
|
1091
|
+
const activeNotes = this.getActiveNotes(channel, now);
|
|
1103
1092
|
channel.sostenutoNotes = new Map(activeNotes);
|
|
1104
1093
|
}
|
|
1105
1094
|
else {
|
|
@@ -1110,34 +1099,108 @@ class MidyGM2 {
|
|
|
1110
1099
|
const channel = this.channels[channelNumber];
|
|
1111
1100
|
channel.softPedal = softPedal / 127;
|
|
1112
1101
|
}
|
|
1113
|
-
|
|
1114
|
-
|
|
1102
|
+
limitData(channel, minMSB, maxMSB, minLSB, maxLSB) {
|
|
1103
|
+
if (maxLSB < channel.dataLSB) {
|
|
1104
|
+
channel.dataMSB++;
|
|
1105
|
+
channel.dataLSB = minLSB;
|
|
1106
|
+
}
|
|
1107
|
+
else if (channel.dataLSB < 0) {
|
|
1108
|
+
channel.dataMSB--;
|
|
1109
|
+
channel.dataLSB = maxLSB;
|
|
1110
|
+
}
|
|
1111
|
+
if (maxMSB < channel.dataMSB) {
|
|
1112
|
+
channel.dataMSB = maxMSB;
|
|
1113
|
+
channel.dataLSB = maxLSB;
|
|
1114
|
+
}
|
|
1115
|
+
else if (channel.dataMSB < 0) {
|
|
1116
|
+
channel.dataMSB = minMSB;
|
|
1117
|
+
channel.dataLSB = minLSB;
|
|
1118
|
+
}
|
|
1115
1119
|
}
|
|
1116
|
-
|
|
1117
|
-
|
|
1120
|
+
limitDataMSB(channel, minMSB, maxMSB) {
|
|
1121
|
+
if (maxMSB < channel.dataMSB) {
|
|
1122
|
+
channel.dataMSB = maxMSB;
|
|
1123
|
+
}
|
|
1124
|
+
else if (channel.dataMSB < 0) {
|
|
1125
|
+
channel.dataMSB = minMSB;
|
|
1126
|
+
}
|
|
1118
1127
|
}
|
|
1119
|
-
|
|
1128
|
+
handleRPN(channelNumber, value) {
|
|
1120
1129
|
const channel = this.channels[channelNumber];
|
|
1121
1130
|
const rpn = channel.rpnMSB * 128 + channel.rpnLSB;
|
|
1122
|
-
isMSB ? channel.dataMSB = value : channel.dataLSB = value;
|
|
1123
|
-
const { dataMSB, dataLSB } = channel;
|
|
1124
1131
|
switch (rpn) {
|
|
1125
1132
|
case 0:
|
|
1126
|
-
channel.
|
|
1133
|
+
channel.dataLSB += value;
|
|
1134
|
+
this.handlePitchBendRangeMessage(channelNumber);
|
|
1127
1135
|
break;
|
|
1128
1136
|
case 1:
|
|
1129
|
-
channel.
|
|
1137
|
+
channel.dataLSB += value;
|
|
1138
|
+
this.handleFineTuningMessage(channelNumber);
|
|
1130
1139
|
break;
|
|
1131
1140
|
case 2:
|
|
1132
|
-
channel.
|
|
1133
|
-
|
|
1134
|
-
case 5:
|
|
1135
|
-
channel.modulationDepthRange = dataMSB + dataLSB / 128;
|
|
1141
|
+
channel.dataMSB += value;
|
|
1142
|
+
this.handleCoarseTuningMessage(channelNumber);
|
|
1136
1143
|
break;
|
|
1137
1144
|
default:
|
|
1138
1145
|
console.warn(`Channel ${channelNumber}: Unsupported RPN MSB=${channel.rpnMSB} LSB=${channel.rpnLSB}`);
|
|
1139
1146
|
}
|
|
1140
1147
|
}
|
|
1148
|
+
setRPNMSB(channelNumber, value) {
|
|
1149
|
+
this.channels[channelNumber].rpnMSB = value;
|
|
1150
|
+
}
|
|
1151
|
+
setRPNLSB(channelNumber, value) {
|
|
1152
|
+
this.channels[channelNumber].rpnLSB = value;
|
|
1153
|
+
}
|
|
1154
|
+
setDataEntry(channelNumber, value, isMSB) {
|
|
1155
|
+
const channel = this.channels[channelNumber];
|
|
1156
|
+
isMSB ? channel.dataMSB = value : channel.dataLSB = value;
|
|
1157
|
+
this.handleRPN(channelNumber);
|
|
1158
|
+
}
|
|
1159
|
+
updateDetune(channel, detuneChange) {
|
|
1160
|
+
const now = this.audioContext.currentTime;
|
|
1161
|
+
const activeNotes = this.getActiveNotes(channel, now);
|
|
1162
|
+
activeNotes.forEach((activeNote) => {
|
|
1163
|
+
const { bufferSource } = activeNote;
|
|
1164
|
+
const detune = bufferSource.detune.value + detuneChange;
|
|
1165
|
+
bufferSource.detune
|
|
1166
|
+
.cancelScheduledValues(now)
|
|
1167
|
+
.setValueAtTime(detune, now);
|
|
1168
|
+
});
|
|
1169
|
+
}
|
|
1170
|
+
handlePitchBendRangeMessage(channelNumber) {
|
|
1171
|
+
const channel = this.channels[channelNumber];
|
|
1172
|
+
this.limitData(channel, 0, 127, 0, 99);
|
|
1173
|
+
const pitchBendRange = channel.dataMSB + channel.dataLSB / 100;
|
|
1174
|
+
this.setPitchBendRange(channelNumber, pitchBendRange);
|
|
1175
|
+
}
|
|
1176
|
+
setPitchBendRange(channelNumber, pitchBendRange) {
|
|
1177
|
+
const channel = this.channels[channelNumber];
|
|
1178
|
+
const prevPitchBendRange = channel.pitchBendRange;
|
|
1179
|
+
channel.pitchBendRange = pitchBendRange;
|
|
1180
|
+
const detuneChange = (channel.pitchBendRange - prevPitchBendRange) *
|
|
1181
|
+
channel.pitchBend * 100;
|
|
1182
|
+
this.updateDetune(channel, detuneChange);
|
|
1183
|
+
}
|
|
1184
|
+
handleFineTuningMessage(channelNumber) {
|
|
1185
|
+
const channel = this.channels[channelNumber];
|
|
1186
|
+
this.limitData(channel, 0, 127, 0, 127);
|
|
1187
|
+
const fineTuning = (channel.dataMSB * 128 + channel.dataLSB - 8192) / 8192;
|
|
1188
|
+
this.setFineTuning(channelNumber, fineTuning);
|
|
1189
|
+
}
|
|
1190
|
+
setFineTuning(channelNumber, fineTuning) {
|
|
1191
|
+
const channel = this.channels[channelNumber];
|
|
1192
|
+
channel.fineTuning = fineTuning;
|
|
1193
|
+
}
|
|
1194
|
+
handleCoarseTuningMessage(channelNumber) {
|
|
1195
|
+
const channel = this.channels[channelNumber];
|
|
1196
|
+
this.limitDataMSB(channel, 0, 127);
|
|
1197
|
+
const coarseTuning = channel.dataMSB - 64;
|
|
1198
|
+
this.setFineTuning(channelNumber, coarseTuning);
|
|
1199
|
+
}
|
|
1200
|
+
setCoarseTuning(channelNumber, coarseTuning) {
|
|
1201
|
+
const channel = this.channels[channelNumber];
|
|
1202
|
+
channel.fineTuning = coarseTuning;
|
|
1203
|
+
}
|
|
1141
1204
|
allSoundOff(channelNumber) {
|
|
1142
1205
|
const now = this.audioContext.currentTime;
|
|
1143
1206
|
const channel = this.channels[channelNumber];
|
|
@@ -1228,9 +1291,9 @@ class MidyGM2 {
|
|
|
1228
1291
|
case 1:
|
|
1229
1292
|
return this.handleMasterVolumeSysEx(data);
|
|
1230
1293
|
case 3:
|
|
1231
|
-
return this.
|
|
1294
|
+
return this.handleMasterFineTuningSysEx(data);
|
|
1232
1295
|
case 4:
|
|
1233
|
-
return this.
|
|
1296
|
+
return this.handleMasterCoarseTuningSysEx(data);
|
|
1234
1297
|
// case 5: // TODO: Global Parameter Control
|
|
1235
1298
|
default:
|
|
1236
1299
|
console.warn(`Unsupported Exclusive Message ${data}`);
|
|
@@ -1272,9 +1335,9 @@ class MidyGM2 {
|
|
|
1272
1335
|
}
|
|
1273
1336
|
handleMasterVolumeSysEx(data) {
|
|
1274
1337
|
const volume = (data[5] * 128 + data[4]) / 16383;
|
|
1275
|
-
this.
|
|
1338
|
+
this.setMasterVolume(volume);
|
|
1276
1339
|
}
|
|
1277
|
-
|
|
1340
|
+
setMasterVolume(volume) {
|
|
1278
1341
|
if (volume < 0 && 1 < volume) {
|
|
1279
1342
|
console.error("Master Volume is out of range");
|
|
1280
1343
|
}
|
|
@@ -1286,9 +1349,9 @@ class MidyGM2 {
|
|
|
1286
1349
|
}
|
|
1287
1350
|
handleMasterFineTuningSysEx(data) {
|
|
1288
1351
|
const fineTuning = (data[5] * 128 + data[4] - 8192) / 8192;
|
|
1289
|
-
this.
|
|
1352
|
+
this.setMasterFineTuning(fineTuning);
|
|
1290
1353
|
}
|
|
1291
|
-
|
|
1354
|
+
setMasterFineTuning(fineTuning) {
|
|
1292
1355
|
if (fineTuning < -1 && 1 < fineTuning) {
|
|
1293
1356
|
console.error("Master Fine Tuning value is out of range");
|
|
1294
1357
|
}
|
|
@@ -1298,9 +1361,9 @@ class MidyGM2 {
|
|
|
1298
1361
|
}
|
|
1299
1362
|
handleMasterCoarseTuningSysEx(data) {
|
|
1300
1363
|
const coarseTuning = data[4];
|
|
1301
|
-
this.
|
|
1364
|
+
this.setMasterCoarseTuning(coarseTuning);
|
|
1302
1365
|
}
|
|
1303
|
-
|
|
1366
|
+
setMasterCoarseTuning(coarseTuning) {
|
|
1304
1367
|
if (coarseTuning < 0 && 127 < coarseTuning) {
|
|
1305
1368
|
console.error("Master Coarse Tuning value is out of range");
|
|
1306
1369
|
}
|
package/script/midy-GMLite.d.ts
CHANGED
|
@@ -39,8 +39,8 @@ export class MidyGMLite {
|
|
|
39
39
|
masterGain: any;
|
|
40
40
|
channels: {
|
|
41
41
|
scheduledNotes: Map<any, any>;
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
gainL: any;
|
|
43
|
+
gainR: any;
|
|
44
44
|
expression: number;
|
|
45
45
|
modulation: number;
|
|
46
46
|
sustainPedal: boolean;
|
|
@@ -61,13 +61,13 @@ export class MidyGMLite {
|
|
|
61
61
|
loadSoundFont(soundFontUrl: any): Promise<void>;
|
|
62
62
|
loadMIDI(midiUrl: any): Promise<void>;
|
|
63
63
|
setChannelAudioNodes(audioContext: any): {
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
gainL: any;
|
|
65
|
+
gainR: any;
|
|
66
66
|
};
|
|
67
67
|
createChannels(audioContext: any): {
|
|
68
68
|
scheduledNotes: Map<any, any>;
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
gainL: any;
|
|
70
|
+
gainR: any;
|
|
71
71
|
expression: number;
|
|
72
72
|
modulation: number;
|
|
73
73
|
sustainPedal: boolean;
|
|
@@ -122,17 +122,25 @@ export class MidyGMLite {
|
|
|
122
122
|
handleMIDIMessage(statusByte: any, data1: any, data2: any): void | any[] | Promise<any>;
|
|
123
123
|
handleProgramChange(channelNumber: any, program: any): void;
|
|
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
127
|
setModulation(channelNumber: any, modulation: any): void;
|
|
128
128
|
setVolume(channelNumber: any, volume: any): void;
|
|
129
|
+
panToGain(pan: any): {
|
|
130
|
+
gainLeft: number;
|
|
131
|
+
gainRight: number;
|
|
132
|
+
};
|
|
129
133
|
setPan(channelNumber: any, pan: any): void;
|
|
130
134
|
setExpression(channelNumber: any, expression: any): void;
|
|
131
135
|
updateChannelGain(channel: any): void;
|
|
132
136
|
setSustainPedal(channelNumber: any, value: any): void;
|
|
137
|
+
handleRPN(channelNumber: any): void;
|
|
133
138
|
setRPNMSB(channelNumber: any, value: any): void;
|
|
134
139
|
setRPNLSB(channelNumber: any, value: any): void;
|
|
135
140
|
setDataEntry(channelNumber: any, value: any, isMSB: any): void;
|
|
141
|
+
updateDetune(channel: any, detuneChange: any): void;
|
|
142
|
+
handlePitchBendRangeMessage(channelNumber: any): void;
|
|
143
|
+
setPitchBendRange(channelNumber: any, pitchBendRange: any): void;
|
|
136
144
|
allSoundOff(channelNumber: any): any[];
|
|
137
145
|
resetAllControllers(channelNumber: any): void;
|
|
138
146
|
allNotesOff(channelNumber: any): any[];
|
|
@@ -140,7 +148,7 @@ export class MidyGMLite {
|
|
|
140
148
|
GM1SystemOn(): void;
|
|
141
149
|
handleUniversalRealTimeExclusiveMessage(data: any): void;
|
|
142
150
|
handleMasterVolumeSysEx(data: any): void;
|
|
143
|
-
|
|
151
|
+
setMasterVolume(volume: any): void;
|
|
144
152
|
handleExclusiveMessage(data: any): void;
|
|
145
153
|
handleSysEx(data: any): void;
|
|
146
154
|
scheduleTask(callback: any, startTime: any): Promise<any>;
|
|
@@ -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;;;
|
|
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"}
|