@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/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
|
};
|
|
@@ -334,7 +335,7 @@ export class MidyGM2 {
|
|
|
334
335
|
this.handleChannelPressure(event.channel, event.amount);
|
|
335
336
|
break;
|
|
336
337
|
case "pitchBend":
|
|
337
|
-
this.
|
|
338
|
+
this.setPitchBend(event.channel, event.value);
|
|
338
339
|
break;
|
|
339
340
|
case "sysEx":
|
|
340
341
|
this.handleSysEx(event.data);
|
|
@@ -414,7 +415,6 @@ export class MidyGM2 {
|
|
|
414
415
|
const tmpChannels = new Array(16);
|
|
415
416
|
for (let i = 0; i < tmpChannels.length; i++) {
|
|
416
417
|
tmpChannels[i] = {
|
|
417
|
-
durationTicks: new Map(),
|
|
418
418
|
programNumber: -1,
|
|
419
419
|
bankMSB: this.channels[i].bankMSB,
|
|
420
420
|
bankLSB: this.channels[i].bankLSB,
|
|
@@ -444,16 +444,6 @@ export class MidyGM2 {
|
|
|
444
444
|
}
|
|
445
445
|
channel.programNumber = 0;
|
|
446
446
|
}
|
|
447
|
-
channel.durationTicks.set(event.noteNumber, {
|
|
448
|
-
ticks: event.ticks,
|
|
449
|
-
noteOn: event,
|
|
450
|
-
});
|
|
451
|
-
break;
|
|
452
|
-
}
|
|
453
|
-
case "noteOff": {
|
|
454
|
-
const { ticks, noteOn } = tmpChannels[event.channel].durationTicks
|
|
455
|
-
.get(event.noteNumber);
|
|
456
|
-
noteOn.durationTicks = event.ticks - ticks;
|
|
457
447
|
break;
|
|
458
448
|
}
|
|
459
449
|
case "controller":
|
|
@@ -488,8 +478,8 @@ export class MidyGM2 {
|
|
|
488
478
|
});
|
|
489
479
|
});
|
|
490
480
|
const priority = {
|
|
491
|
-
|
|
492
|
-
|
|
481
|
+
controller: 0,
|
|
482
|
+
sysEx: 1,
|
|
493
483
|
};
|
|
494
484
|
timeline.sort((a, b) => {
|
|
495
485
|
if (a.ticks !== b.ticks)
|
|
@@ -627,12 +617,8 @@ export class MidyGM2 {
|
|
|
627
617
|
}
|
|
628
618
|
createChorusEffect(audioContext, options = {}) {
|
|
629
619
|
const { chorusCount = 2, chorusRate = 0.6, chorusDepth = 0.15, delay = 0.01, variance = delay * 0.1, } = options;
|
|
630
|
-
const lfo = new OscillatorNode(audioContext, {
|
|
631
|
-
|
|
632
|
-
});
|
|
633
|
-
const lfoGain = new GainNode(audioContext, {
|
|
634
|
-
gain: chorusDepth,
|
|
635
|
-
});
|
|
620
|
+
const lfo = new OscillatorNode(audioContext, { frequency: chorusRate });
|
|
621
|
+
const lfoGain = new GainNode(audioContext, { gain: chorusDepth });
|
|
636
622
|
const chorusGains = [];
|
|
637
623
|
const delayNodes = [];
|
|
638
624
|
const baseGain = 1 / chorusCount;
|
|
@@ -643,9 +629,7 @@ export class MidyGM2 {
|
|
|
643
629
|
maxDelayTime: delayTime,
|
|
644
630
|
});
|
|
645
631
|
delayNodes.push(delayNode);
|
|
646
|
-
const chorusGain = new GainNode(audioContext, {
|
|
647
|
-
gain: baseGain,
|
|
648
|
-
});
|
|
632
|
+
const chorusGain = new GainNode(audioContext, { gain: baseGain });
|
|
649
633
|
chorusGains.push(chorusGain);
|
|
650
634
|
lfo.connect(lfoGain);
|
|
651
635
|
lfoGain.connect(delayNode.delayTime);
|
|
@@ -661,14 +645,16 @@ export class MidyGM2 {
|
|
|
661
645
|
connectNoteEffects(channel, gainNode) {
|
|
662
646
|
if (channel.reverb === 0) {
|
|
663
647
|
if (channel.chorus === 0) { // no effect
|
|
664
|
-
gainNode.connect(channel.
|
|
648
|
+
gainNode.connect(channel.gainL);
|
|
649
|
+
gainNode.connect(channel.gainR);
|
|
665
650
|
}
|
|
666
651
|
else { // chorus
|
|
667
652
|
channel.chorusEffect.delayNodes.forEach((delayNode) => {
|
|
668
653
|
gainNode.connect(delayNode);
|
|
669
654
|
});
|
|
670
655
|
channel.chorusEffect.chorusGains.forEach((chorusGain) => {
|
|
671
|
-
chorusGain.connect(channel.
|
|
656
|
+
chorusGain.connect(channel.gainL);
|
|
657
|
+
chorusGain.connect(channel.gainR);
|
|
672
658
|
});
|
|
673
659
|
}
|
|
674
660
|
}
|
|
@@ -707,9 +693,7 @@ export class MidyGM2 {
|
|
|
707
693
|
}
|
|
708
694
|
setVolumeEnvelope(channel, note) {
|
|
709
695
|
const { instrumentKey, startTime, velocity } = note;
|
|
710
|
-
note.gainNode = new GainNode(this.audioContext, {
|
|
711
|
-
gain: 0,
|
|
712
|
-
});
|
|
696
|
+
note.gainNode = new GainNode(this.audioContext, { gain: 0 });
|
|
713
697
|
let volume = (velocity / 127) * channel.volume * channel.expression;
|
|
714
698
|
if (volume === 0)
|
|
715
699
|
volume = 1e-6; // exponentialRampToValueAtTime() requires a non-zero value
|
|
@@ -948,21 +932,15 @@ export class MidyGM2 {
|
|
|
948
932
|
}
|
|
949
933
|
handlePitchBendMessage(channelNumber, lsb, msb) {
|
|
950
934
|
const pitchBend = msb * 128 + lsb;
|
|
951
|
-
this.
|
|
935
|
+
this.setPitchBend(channelNumber, pitchBend);
|
|
952
936
|
}
|
|
953
|
-
|
|
954
|
-
const now = this.audioContext.currentTime;
|
|
937
|
+
setPitchBend(channelNumber, pitchBend) {
|
|
955
938
|
const channel = this.channels[channelNumber];
|
|
939
|
+
const prevPitchBend = channel.pitchBend;
|
|
956
940
|
channel.pitchBend = (pitchBend - 8192) / 8192;
|
|
957
|
-
const
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
const { bufferSource, instrumentKey, noteNumber } = activeNote;
|
|
961
|
-
const playbackRate = calcPlaybackRate(instrumentKey, noteNumber, semitoneOffset);
|
|
962
|
-
bufferSource.playbackRate
|
|
963
|
-
.cancelScheduledValues(now)
|
|
964
|
-
.setValueAtTime(playbackRate * pressure, now);
|
|
965
|
-
});
|
|
941
|
+
const detuneChange = (channel.pitchBend - prevPitchBend) *
|
|
942
|
+
channel.pitchBendRange * 100;
|
|
943
|
+
this.updateDetune(channel, detuneChange);
|
|
966
944
|
}
|
|
967
945
|
handleControlChange(channelNumber, controller, value) {
|
|
968
946
|
switch (controller) {
|
|
@@ -997,9 +975,9 @@ export class MidyGM2 {
|
|
|
997
975
|
case 93:
|
|
998
976
|
return this.setChorus(channelNumber, value);
|
|
999
977
|
case 100:
|
|
1000
|
-
return this.setRPNMSB(channelNumber, value);
|
|
1001
|
-
case 101:
|
|
1002
978
|
return this.setRPNLSB(channelNumber, value);
|
|
979
|
+
case 101:
|
|
980
|
+
return this.setRPNMSB(channelNumber, value);
|
|
1003
981
|
case 120:
|
|
1004
982
|
return this.allSoundOff(channelNumber);
|
|
1005
983
|
case 121:
|
|
@@ -1045,12 +1023,17 @@ export class MidyGM2 {
|
|
|
1045
1023
|
channel.volume = volume / 127;
|
|
1046
1024
|
this.updateChannelGain(channel);
|
|
1047
1025
|
}
|
|
1026
|
+
panToGain(pan) {
|
|
1027
|
+
const theta = Math.PI / 2 * Math.max(0, pan - 1) / 126;
|
|
1028
|
+
return {
|
|
1029
|
+
gainLeft: Math.cos(theta),
|
|
1030
|
+
gainRight: Math.sin(theta),
|
|
1031
|
+
};
|
|
1032
|
+
}
|
|
1048
1033
|
setPan(channelNumber, pan) {
|
|
1049
|
-
const now = this.audioContext.currentTime;
|
|
1050
1034
|
const channel = this.channels[channelNumber];
|
|
1051
|
-
channel.pan = pan
|
|
1052
|
-
|
|
1053
|
-
channel.pannerNode.pan.setValueAtTime(channel.pan, now);
|
|
1035
|
+
channel.pan = pan;
|
|
1036
|
+
this.updateChannelGain(channel);
|
|
1054
1037
|
}
|
|
1055
1038
|
setExpression(channelNumber, expression) {
|
|
1056
1039
|
const channel = this.channels[channelNumber];
|
|
@@ -1063,8 +1046,13 @@ export class MidyGM2 {
|
|
|
1063
1046
|
updateChannelGain(channel) {
|
|
1064
1047
|
const now = this.audioContext.currentTime;
|
|
1065
1048
|
const volume = channel.volume * channel.expression;
|
|
1066
|
-
channel.
|
|
1067
|
-
channel.
|
|
1049
|
+
const { gainLeft, gainRight } = this.panToGain(channel.pan);
|
|
1050
|
+
channel.gainL.gain
|
|
1051
|
+
.cancelScheduledValues(now)
|
|
1052
|
+
.setValueAtTime(volume * gainLeft, now);
|
|
1053
|
+
channel.gainR.gain
|
|
1054
|
+
.cancelScheduledValues(now)
|
|
1055
|
+
.setValueAtTime(volume * gainRight, now);
|
|
1068
1056
|
}
|
|
1069
1057
|
setSustainPedal(channelNumber, value) {
|
|
1070
1058
|
const isOn = value >= 64;
|
|
@@ -1096,7 +1084,8 @@ export class MidyGM2 {
|
|
|
1096
1084
|
const channel = this.channels[channelNumber];
|
|
1097
1085
|
channel.sostenutoPedal = isOn;
|
|
1098
1086
|
if (isOn) {
|
|
1099
|
-
const
|
|
1087
|
+
const now = this.audioContext.currentTime;
|
|
1088
|
+
const activeNotes = this.getActiveNotes(channel, now);
|
|
1100
1089
|
channel.sostenutoNotes = new Map(activeNotes);
|
|
1101
1090
|
}
|
|
1102
1091
|
else {
|
|
@@ -1107,34 +1096,108 @@ export class MidyGM2 {
|
|
|
1107
1096
|
const channel = this.channels[channelNumber];
|
|
1108
1097
|
channel.softPedal = softPedal / 127;
|
|
1109
1098
|
}
|
|
1110
|
-
|
|
1111
|
-
|
|
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
|
+
}
|
|
1112
1116
|
}
|
|
1113
|
-
|
|
1114
|
-
|
|
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
|
+
}
|
|
1115
1124
|
}
|
|
1116
|
-
|
|
1125
|
+
handleRPN(channelNumber, value) {
|
|
1117
1126
|
const channel = this.channels[channelNumber];
|
|
1118
1127
|
const rpn = channel.rpnMSB * 128 + channel.rpnLSB;
|
|
1119
|
-
isMSB ? channel.dataMSB = value : channel.dataLSB = value;
|
|
1120
|
-
const { dataMSB, dataLSB } = channel;
|
|
1121
1128
|
switch (rpn) {
|
|
1122
1129
|
case 0:
|
|
1123
|
-
channel.
|
|
1130
|
+
channel.dataLSB += value;
|
|
1131
|
+
this.handlePitchBendRangeMessage(channelNumber);
|
|
1124
1132
|
break;
|
|
1125
1133
|
case 1:
|
|
1126
|
-
channel.
|
|
1134
|
+
channel.dataLSB += value;
|
|
1135
|
+
this.handleFineTuningMessage(channelNumber);
|
|
1127
1136
|
break;
|
|
1128
1137
|
case 2:
|
|
1129
|
-
channel.
|
|
1130
|
-
|
|
1131
|
-
case 5:
|
|
1132
|
-
channel.modulationDepthRange = dataMSB + dataLSB / 128;
|
|
1138
|
+
channel.dataMSB += value;
|
|
1139
|
+
this.handleCoarseTuningMessage(channelNumber);
|
|
1133
1140
|
break;
|
|
1134
1141
|
default:
|
|
1135
1142
|
console.warn(`Channel ${channelNumber}: Unsupported RPN MSB=${channel.rpnMSB} LSB=${channel.rpnLSB}`);
|
|
1136
1143
|
}
|
|
1137
1144
|
}
|
|
1145
|
+
setRPNMSB(channelNumber, value) {
|
|
1146
|
+
this.channels[channelNumber].rpnMSB = value;
|
|
1147
|
+
}
|
|
1148
|
+
setRPNLSB(channelNumber, value) {
|
|
1149
|
+
this.channels[channelNumber].rpnLSB = value;
|
|
1150
|
+
}
|
|
1151
|
+
setDataEntry(channelNumber, value, isMSB) {
|
|
1152
|
+
const channel = this.channels[channelNumber];
|
|
1153
|
+
isMSB ? channel.dataMSB = value : channel.dataLSB = value;
|
|
1154
|
+
this.handleRPN(channelNumber);
|
|
1155
|
+
}
|
|
1156
|
+
updateDetune(channel, detuneChange) {
|
|
1157
|
+
const now = this.audioContext.currentTime;
|
|
1158
|
+
const activeNotes = this.getActiveNotes(channel, now);
|
|
1159
|
+
activeNotes.forEach((activeNote) => {
|
|
1160
|
+
const { bufferSource } = activeNote;
|
|
1161
|
+
const detune = bufferSource.detune.value + detuneChange;
|
|
1162
|
+
bufferSource.detune
|
|
1163
|
+
.cancelScheduledValues(now)
|
|
1164
|
+
.setValueAtTime(detune, now);
|
|
1165
|
+
});
|
|
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
|
+
}
|
|
1138
1201
|
allSoundOff(channelNumber) {
|
|
1139
1202
|
const now = this.audioContext.currentTime;
|
|
1140
1203
|
const channel = this.channels[channelNumber];
|
|
@@ -1225,9 +1288,9 @@ export class MidyGM2 {
|
|
|
1225
1288
|
case 1:
|
|
1226
1289
|
return this.handleMasterVolumeSysEx(data);
|
|
1227
1290
|
case 3:
|
|
1228
|
-
return this.
|
|
1291
|
+
return this.handleMasterFineTuningSysEx(data);
|
|
1229
1292
|
case 4:
|
|
1230
|
-
return this.
|
|
1293
|
+
return this.handleMasterCoarseTuningSysEx(data);
|
|
1231
1294
|
// case 5: // TODO: Global Parameter Control
|
|
1232
1295
|
default:
|
|
1233
1296
|
console.warn(`Unsupported Exclusive Message ${data}`);
|
|
@@ -1269,9 +1332,9 @@ export class MidyGM2 {
|
|
|
1269
1332
|
}
|
|
1270
1333
|
handleMasterVolumeSysEx(data) {
|
|
1271
1334
|
const volume = (data[5] * 128 + data[4]) / 16383;
|
|
1272
|
-
this.
|
|
1335
|
+
this.setMasterVolume(volume);
|
|
1273
1336
|
}
|
|
1274
|
-
|
|
1337
|
+
setMasterVolume(volume) {
|
|
1275
1338
|
if (volume < 0 && 1 < volume) {
|
|
1276
1339
|
console.error("Master Volume is out of range");
|
|
1277
1340
|
}
|
|
@@ -1283,9 +1346,9 @@ export class MidyGM2 {
|
|
|
1283
1346
|
}
|
|
1284
1347
|
handleMasterFineTuningSysEx(data) {
|
|
1285
1348
|
const fineTuning = (data[5] * 128 + data[4] - 8192) / 8192;
|
|
1286
|
-
this.
|
|
1349
|
+
this.setMasterFineTuning(fineTuning);
|
|
1287
1350
|
}
|
|
1288
|
-
|
|
1351
|
+
setMasterFineTuning(fineTuning) {
|
|
1289
1352
|
if (fineTuning < -1 && 1 < fineTuning) {
|
|
1290
1353
|
console.error("Master Fine Tuning value is out of range");
|
|
1291
1354
|
}
|
|
@@ -1295,9 +1358,9 @@ export class MidyGM2 {
|
|
|
1295
1358
|
}
|
|
1296
1359
|
handleMasterCoarseTuningSysEx(data) {
|
|
1297
1360
|
const coarseTuning = data[4];
|
|
1298
|
-
this.
|
|
1361
|
+
this.setMasterCoarseTuning(coarseTuning);
|
|
1299
1362
|
}
|
|
1300
|
-
|
|
1363
|
+
setMasterCoarseTuning(coarseTuning) {
|
|
1301
1364
|
if (coarseTuning < 0 && 127 < coarseTuning) {
|
|
1302
1365
|
console.error("Master Coarse Tuning value is out of range");
|
|
1303
1366
|
}
|
package/esm/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>;
|
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;;;
|
|
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"}
|