@marmooo/midy 0.4.3 → 0.4.5
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/README.md +6 -1
- package/esm/midy-GM1.d.ts +10 -5
- package/esm/midy-GM1.d.ts.map +1 -1
- package/esm/midy-GM1.js +68 -41
- package/esm/midy-GM2.d.ts +15 -9
- package/esm/midy-GM2.d.ts.map +1 -1
- package/esm/midy-GM2.js +139 -93
- package/esm/midy-GMLite.d.ts +10 -5
- package/esm/midy-GMLite.d.ts.map +1 -1
- package/esm/midy-GMLite.js +71 -43
- package/esm/midy.d.ts +59 -7
- package/esm/midy.d.ts.map +1 -1
- package/esm/midy.js +286 -83
- package/package.json +2 -2
- package/script/midy-GM1.d.ts +10 -5
- package/script/midy-GM1.d.ts.map +1 -1
- package/script/midy-GM1.js +68 -41
- package/script/midy-GM2.d.ts +15 -9
- package/script/midy-GM2.d.ts.map +1 -1
- package/script/midy-GM2.js +139 -93
- package/script/midy-GMLite.d.ts +10 -5
- package/script/midy-GMLite.d.ts.map +1 -1
- package/script/midy-GMLite.js +71 -43
- package/script/midy.d.ts +59 -7
- package/script/midy.d.ts.map +1 -1
- package/script/midy.js +286 -83
package/esm/midy-GMLite.js
CHANGED
|
@@ -174,6 +174,16 @@ const releaseCurve = 1 / (-Math.log(cbToRatio(-600)));
|
|
|
174
174
|
export class MidyGMLite extends EventTarget {
|
|
175
175
|
constructor(audioContext) {
|
|
176
176
|
super();
|
|
177
|
+
// https://pmc.ncbi.nlm.nih.gov/articles/PMC4191557/
|
|
178
|
+
// https://pubmed.ncbi.nlm.nih.gov/12488797/
|
|
179
|
+
// Gap detection studies indicate humans detect temporal discontinuities
|
|
180
|
+
// around 2–3 ms. Smoothing over ~4 ms is perceived as continuous.
|
|
181
|
+
Object.defineProperty(this, "perceptualSmoothingTime", {
|
|
182
|
+
enumerable: true,
|
|
183
|
+
configurable: true,
|
|
184
|
+
writable: true,
|
|
185
|
+
value: 0.004
|
|
186
|
+
});
|
|
177
187
|
Object.defineProperty(this, "mode", {
|
|
178
188
|
enumerable: true,
|
|
179
189
|
configurable: true,
|
|
@@ -560,8 +570,8 @@ export class MidyGMLite extends EventTarget {
|
|
|
560
570
|
this.voiceCache.clear();
|
|
561
571
|
this.realtimeVoiceCache.clear();
|
|
562
572
|
const channels = this.channels;
|
|
563
|
-
for (let
|
|
564
|
-
channels[
|
|
573
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
574
|
+
channels[ch].scheduledNotes = [];
|
|
565
575
|
this.resetChannelStates(i);
|
|
566
576
|
}
|
|
567
577
|
}
|
|
@@ -752,8 +762,8 @@ export class MidyGMLite extends EventTarget {
|
|
|
752
762
|
}
|
|
753
763
|
stopNotes(velocity, force, scheduleTime) {
|
|
754
764
|
const channels = this.channels;
|
|
755
|
-
for (let
|
|
756
|
-
this.stopChannelNotes(
|
|
765
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
766
|
+
this.stopChannelNotes(ch, velocity, force, scheduleTime);
|
|
757
767
|
}
|
|
758
768
|
const stopPromise = Promise.all(this.notePromises);
|
|
759
769
|
this.notePromises = [];
|
|
@@ -794,6 +804,13 @@ export class MidyGMLite extends EventTarget {
|
|
|
794
804
|
this.isSeeking = true;
|
|
795
805
|
}
|
|
796
806
|
}
|
|
807
|
+
tempoChange(tempo) {
|
|
808
|
+
const timeScale = this.tempo / tempo;
|
|
809
|
+
this.resumeTime = this.resumeTime * timeScale;
|
|
810
|
+
this.tempo = tempo;
|
|
811
|
+
this.totalTime = this.calcTotalTime();
|
|
812
|
+
this.seekTo(this.currentTime() * timeScale);
|
|
813
|
+
}
|
|
797
814
|
calcTotalTime() {
|
|
798
815
|
const totalTimeEventTypes = this.totalTimeEventTypes;
|
|
799
816
|
const timeline = this.timeline;
|
|
@@ -861,13 +878,11 @@ export class MidyGMLite extends EventTarget {
|
|
|
861
878
|
}
|
|
862
879
|
updateChannelDetune(channel, scheduleTime) {
|
|
863
880
|
this.processScheduledNotes(channel, (note) => {
|
|
864
|
-
this.
|
|
881
|
+
this.setDetune(channel, note, scheduleTime);
|
|
865
882
|
});
|
|
866
883
|
}
|
|
867
|
-
|
|
868
|
-
note.
|
|
869
|
-
.cancelScheduledValues(scheduleTime)
|
|
870
|
-
.setValueAtTime(channel.detune, scheduleTime);
|
|
884
|
+
calcNoteDetune(channel, note) {
|
|
885
|
+
return channel.detune + note.voiceParams.detune;
|
|
871
886
|
}
|
|
872
887
|
setVolumeEnvelope(note, scheduleTime) {
|
|
873
888
|
const { voiceParams, startTime } = note;
|
|
@@ -880,30 +895,38 @@ export class MidyGMLite extends EventTarget {
|
|
|
880
895
|
note.volumeEnvelopeNode.gain
|
|
881
896
|
.cancelScheduledValues(scheduleTime)
|
|
882
897
|
.setValueAtTime(0, startTime)
|
|
883
|
-
.setValueAtTime(
|
|
884
|
-
.
|
|
898
|
+
.setValueAtTime(1e-6, volDelay)
|
|
899
|
+
.exponentialRampToValueAtTime(attackVolume, volAttack)
|
|
885
900
|
.setValueAtTime(attackVolume, volHold)
|
|
886
901
|
.setTargetAtTime(sustainVolume, volHold, decayDuration * decayCurve);
|
|
887
902
|
}
|
|
903
|
+
setDetune(channel, note, scheduleTime) {
|
|
904
|
+
const detune = this.calcNoteDetune(channel, note);
|
|
905
|
+
note.bufferSource.detune
|
|
906
|
+
.cancelScheduledValues(scheduleTime)
|
|
907
|
+
.setValueAtTime(detune, scheduleTime);
|
|
908
|
+
const timeConstant = this.perceptualSmoothingTime / 5; // 99.3% (5 * tau)
|
|
909
|
+
note.bufferSource.detune
|
|
910
|
+
.cancelAndHoldAtTime(scheduleTime)
|
|
911
|
+
.setTargetAtTime(detune, scheduleTime, timeConstant);
|
|
912
|
+
}
|
|
888
913
|
setPitchEnvelope(note, scheduleTime) {
|
|
889
|
-
const { voiceParams } = note;
|
|
914
|
+
const { bufferSource, voiceParams } = note;
|
|
890
915
|
const baseRate = voiceParams.playbackRate;
|
|
891
|
-
|
|
916
|
+
bufferSource.playbackRate
|
|
892
917
|
.cancelScheduledValues(scheduleTime)
|
|
893
|
-
.setValueAtTime(baseRate,
|
|
918
|
+
.setValueAtTime(baseRate, scheduleTime);
|
|
894
919
|
const modEnvToPitch = voiceParams.modEnvToPitch;
|
|
895
920
|
if (modEnvToPitch === 0)
|
|
896
921
|
return;
|
|
897
|
-
const
|
|
898
|
-
const peekPitch = basePitch + modEnvToPitch;
|
|
899
|
-
const peekRate = this.centToRate(peekPitch);
|
|
922
|
+
const peekRate = baseRate * this.centToRate(modEnvToPitch);
|
|
900
923
|
const modDelay = note.startTime + voiceParams.modDelay;
|
|
901
924
|
const modAttack = modDelay + voiceParams.modAttack;
|
|
902
925
|
const modHold = modAttack + voiceParams.modHold;
|
|
903
926
|
const decayDuration = voiceParams.modDecay;
|
|
904
|
-
|
|
927
|
+
bufferSource.playbackRate
|
|
905
928
|
.setValueAtTime(baseRate, modDelay)
|
|
906
|
-
.
|
|
929
|
+
.exponentialRampToValueAtTime(peekRate, modAttack)
|
|
907
930
|
.setValueAtTime(peekRate, modHold)
|
|
908
931
|
.setTargetAtTime(baseRate, modHold, decayDuration * decayCurve);
|
|
909
932
|
}
|
|
@@ -934,7 +957,7 @@ export class MidyGMLite extends EventTarget {
|
|
|
934
957
|
.cancelScheduledValues(scheduleTime)
|
|
935
958
|
.setValueAtTime(adjustedBaseFreq, startTime)
|
|
936
959
|
.setValueAtTime(adjustedBaseFreq, modDelay)
|
|
937
|
-
.
|
|
960
|
+
.exponentialRampToValueAtTime(adjustedPeekFreq, modAttack)
|
|
938
961
|
.setValueAtTime(adjustedPeekFreq, modHold)
|
|
939
962
|
.setTargetAtTime(adjustedSustainFreq, modHold, decayDuration * decayCurve);
|
|
940
963
|
}
|
|
@@ -1005,7 +1028,7 @@ export class MidyGMLite extends EventTarget {
|
|
|
1005
1028
|
this.setVolumeEnvelope(note, now);
|
|
1006
1029
|
this.setFilterEnvelope(note, now);
|
|
1007
1030
|
this.setPitchEnvelope(note, now);
|
|
1008
|
-
this.
|
|
1031
|
+
this.setDetune(channel, note, now);
|
|
1009
1032
|
if (0 < state.modulationDepthMSB) {
|
|
1010
1033
|
this.startModulation(channel, note, now);
|
|
1011
1034
|
}
|
|
@@ -1102,15 +1125,14 @@ export class MidyGMLite extends EventTarget {
|
|
|
1102
1125
|
}
|
|
1103
1126
|
releaseNote(channel, note, endTime) {
|
|
1104
1127
|
endTime ??= this.audioContext.currentTime;
|
|
1105
|
-
const
|
|
1106
|
-
const volRelease = endTime +
|
|
1107
|
-
const modRelease = endTime + note.voiceParams.modRelease;
|
|
1128
|
+
const volDuration = note.voiceParams.volRelease;
|
|
1129
|
+
const volRelease = endTime + volDuration;
|
|
1108
1130
|
note.filterNode.frequency
|
|
1109
1131
|
.cancelScheduledValues(endTime)
|
|
1110
|
-
.
|
|
1132
|
+
.setTargetAtTime(note.adjustedBaseFreq, endTime, note.voiceParams.modRelease * releaseCurve);
|
|
1111
1133
|
note.volumeEnvelopeNode.gain
|
|
1112
1134
|
.cancelScheduledValues(endTime)
|
|
1113
|
-
.setTargetAtTime(0, endTime,
|
|
1135
|
+
.setTargetAtTime(0, endTime, volDuration * releaseCurve);
|
|
1114
1136
|
return new Promise((resolve) => {
|
|
1115
1137
|
this.scheduleTask(() => {
|
|
1116
1138
|
const bufferSource = note.bufferSource;
|
|
@@ -1304,12 +1326,15 @@ export class MidyGMLite extends EventTarget {
|
|
|
1304
1326
|
}
|
|
1305
1327
|
},
|
|
1306
1328
|
freqModLFO: (_channel, note, scheduleTime) => {
|
|
1307
|
-
if (0 < channel.state.
|
|
1329
|
+
if (0 < channel.state.modulationDepthMSB) {
|
|
1308
1330
|
this.setFreqModLFO(note, scheduleTime);
|
|
1309
1331
|
}
|
|
1310
1332
|
},
|
|
1311
1333
|
delayVibLFO: (_channel, _note, _scheduleTime) => { },
|
|
1312
1334
|
freqVibLFO: (_channel, _note, _scheduleTime) => { },
|
|
1335
|
+
detune: (channel, note, scheduleTime) => {
|
|
1336
|
+
this.setDetune(channel, note, scheduleTime);
|
|
1337
|
+
},
|
|
1313
1338
|
};
|
|
1314
1339
|
}
|
|
1315
1340
|
getControllerState(channel, noteNumber, velocity) {
|
|
@@ -1379,7 +1404,8 @@ export class MidyGMLite extends EventTarget {
|
|
|
1379
1404
|
}
|
|
1380
1405
|
}
|
|
1381
1406
|
updateModulation(channel, scheduleTime) {
|
|
1382
|
-
const depth = channel.state.
|
|
1407
|
+
const depth = channel.state.modulationDepthMSB *
|
|
1408
|
+
channel.modulationDepthRange;
|
|
1383
1409
|
this.processScheduledNotes(channel, (note) => {
|
|
1384
1410
|
if (note.modulationDepth) {
|
|
1385
1411
|
note.modulationDepth.gain.setValueAtTime(depth, scheduleTime);
|
|
@@ -1389,18 +1415,18 @@ export class MidyGMLite extends EventTarget {
|
|
|
1389
1415
|
}
|
|
1390
1416
|
});
|
|
1391
1417
|
}
|
|
1392
|
-
setModulationDepth(channelNumber,
|
|
1418
|
+
setModulationDepth(channelNumber, value, scheduleTime) {
|
|
1393
1419
|
const channel = this.channels[channelNumber];
|
|
1394
1420
|
if (!(0 <= scheduleTime))
|
|
1395
1421
|
scheduleTime = this.audioContext.currentTime;
|
|
1396
|
-
channel.state.
|
|
1422
|
+
channel.state.modulationDepthMSB = value / 127;
|
|
1397
1423
|
this.updateModulation(channel, scheduleTime);
|
|
1398
1424
|
}
|
|
1399
|
-
setVolume(channelNumber,
|
|
1425
|
+
setVolume(channelNumber, value, scheduleTime) {
|
|
1400
1426
|
if (!(0 <= scheduleTime))
|
|
1401
1427
|
scheduleTime = this.audioContext.currentTime;
|
|
1402
1428
|
const channel = this.channels[channelNumber];
|
|
1403
|
-
channel.state.
|
|
1429
|
+
channel.state.volumeMSB = value / 127;
|
|
1404
1430
|
this.updateChannelVolume(channel, scheduleTime);
|
|
1405
1431
|
}
|
|
1406
1432
|
panToGain(pan) {
|
|
@@ -1410,18 +1436,18 @@ export class MidyGMLite extends EventTarget {
|
|
|
1410
1436
|
gainRight: Math.sin(theta),
|
|
1411
1437
|
};
|
|
1412
1438
|
}
|
|
1413
|
-
setPan(channelNumber,
|
|
1439
|
+
setPan(channelNumber, value, scheduleTime) {
|
|
1414
1440
|
if (!(0 <= scheduleTime))
|
|
1415
1441
|
scheduleTime = this.audioContext.currentTime;
|
|
1416
1442
|
const channel = this.channels[channelNumber];
|
|
1417
|
-
channel.state.
|
|
1443
|
+
channel.state.panMSB = value / 127;
|
|
1418
1444
|
this.updateChannelVolume(channel, scheduleTime);
|
|
1419
1445
|
}
|
|
1420
|
-
setExpression(channelNumber,
|
|
1446
|
+
setExpression(channelNumber, value, scheduleTime) {
|
|
1421
1447
|
if (!(0 <= scheduleTime))
|
|
1422
1448
|
scheduleTime = this.audioContext.currentTime;
|
|
1423
1449
|
const channel = this.channels[channelNumber];
|
|
1424
|
-
channel.state.
|
|
1450
|
+
channel.state.expressionMSB = value / 127;
|
|
1425
1451
|
this.updateChannelVolume(channel, scheduleTime);
|
|
1426
1452
|
}
|
|
1427
1453
|
dataEntryLSB(channelNumber, value, scheduleTime) {
|
|
@@ -1430,14 +1456,14 @@ export class MidyGMLite extends EventTarget {
|
|
|
1430
1456
|
}
|
|
1431
1457
|
updateChannelVolume(channel, scheduleTime) {
|
|
1432
1458
|
const state = channel.state;
|
|
1433
|
-
const
|
|
1434
|
-
const { gainLeft, gainRight } = this.panToGain(state.
|
|
1459
|
+
const gain = state.volumeMSB * state.expressionMSB;
|
|
1460
|
+
const { gainLeft, gainRight } = this.panToGain(state.panMSB);
|
|
1435
1461
|
channel.gainL.gain
|
|
1436
1462
|
.cancelScheduledValues(scheduleTime)
|
|
1437
|
-
.setValueAtTime(
|
|
1463
|
+
.setValueAtTime(gain * gainLeft, scheduleTime);
|
|
1438
1464
|
channel.gainR.gain
|
|
1439
1465
|
.cancelScheduledValues(scheduleTime)
|
|
1440
|
-
.setValueAtTime(
|
|
1466
|
+
.setValueAtTime(gain * gainRight, scheduleTime);
|
|
1441
1467
|
}
|
|
1442
1468
|
setSustainPedal(channelNumber, value, scheduleTime) {
|
|
1443
1469
|
const channel = this.channels[channelNumber];
|
|
@@ -1478,6 +1504,8 @@ export class MidyGMLite extends EventTarget {
|
|
|
1478
1504
|
case 0:
|
|
1479
1505
|
this.handlePitchBendRangeRPN(channelNumber, scheduleTime);
|
|
1480
1506
|
break;
|
|
1507
|
+
case 16383: // NULL
|
|
1508
|
+
break;
|
|
1481
1509
|
default:
|
|
1482
1510
|
console.warn(`Channel ${channelNumber}: Unsupported RPN MSB=${channel.rpnMSB} LSB=${channel.rpnLSB}`);
|
|
1483
1511
|
}
|
|
@@ -1590,9 +1618,9 @@ export class MidyGMLite extends EventTarget {
|
|
|
1590
1618
|
if (!(0 <= scheduleTime))
|
|
1591
1619
|
scheduleTime = this.audioContext.currentTime;
|
|
1592
1620
|
this.mode = "GM1";
|
|
1593
|
-
for (let
|
|
1594
|
-
this.allSoundOff(
|
|
1595
|
-
const channel = channels[
|
|
1621
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
1622
|
+
this.allSoundOff(ch, 0, scheduleTime);
|
|
1623
|
+
const channel = channels[ch];
|
|
1596
1624
|
channel.isDrum = false;
|
|
1597
1625
|
}
|
|
1598
1626
|
channels[9].isDrum = true;
|
package/esm/midy.d.ts
CHANGED
|
@@ -14,8 +14,11 @@ export class Midy extends EventTarget {
|
|
|
14
14
|
fineTuning: number;
|
|
15
15
|
coarseTuning: number;
|
|
16
16
|
portamentoControl: boolean;
|
|
17
|
+
isMPEMember: boolean;
|
|
18
|
+
isMPEManager: boolean;
|
|
17
19
|
};
|
|
18
20
|
constructor(audioContext: any);
|
|
21
|
+
perceptualSmoothingTime: number;
|
|
19
22
|
mode: string;
|
|
20
23
|
masterFineTuning: number;
|
|
21
24
|
masterCoarseTuning: number;
|
|
@@ -61,6 +64,13 @@ export class Midy extends EventTarget {
|
|
|
61
64
|
instruments: Set<any>;
|
|
62
65
|
exclusiveClassNotes: any[];
|
|
63
66
|
drumExclusiveClassNotes: any[];
|
|
67
|
+
mpeEnabled: boolean;
|
|
68
|
+
lowerMPEMembers: number;
|
|
69
|
+
upperMPEMembers: number;
|
|
70
|
+
mpeState: {
|
|
71
|
+
channelToNotes: Map<any, any>;
|
|
72
|
+
noteToChannel: Map<any, any>;
|
|
73
|
+
};
|
|
64
74
|
audioContext: any;
|
|
65
75
|
masterVolume: any;
|
|
66
76
|
scheduler: any;
|
|
@@ -77,6 +87,7 @@ export class Midy extends EventTarget {
|
|
|
77
87
|
freqModLFO: (_channel: any, note: any, scheduleTime: any) => void;
|
|
78
88
|
delayVibLFO: (channel: any, note: any, _scheduleTime: any) => void;
|
|
79
89
|
freqVibLFO: (channel: any, note: any, scheduleTime: any) => void;
|
|
90
|
+
detune: (channel: any, note: any, scheduleTime: any) => void;
|
|
80
91
|
};
|
|
81
92
|
controlChangeHandlers: any[];
|
|
82
93
|
keyBasedControllerHandlers: any[];
|
|
@@ -130,10 +141,12 @@ export class Midy extends EventTarget {
|
|
|
130
141
|
pause(): Promise<void>;
|
|
131
142
|
resume(): Promise<void>;
|
|
132
143
|
seekTo(second: any): void;
|
|
144
|
+
tempoChange(tempo: any): void;
|
|
133
145
|
calcTotalTime(): number;
|
|
134
146
|
currentTime(): number;
|
|
135
147
|
processScheduledNotes(channel: any, callback: any): Promise<void>;
|
|
136
148
|
processActiveNotes(channel: any, scheduleTime: any, callback: any): Promise<void>;
|
|
149
|
+
applyToMPEChannels(channelNumber: any, fn: any): void;
|
|
137
150
|
createConvolutionReverbImpulse(audioContext: any, decay: any, preDecay: any): any;
|
|
138
151
|
createConvolutionReverb(audioContext: any, impulse: any): {
|
|
139
152
|
input: any;
|
|
@@ -164,14 +177,16 @@ export class Midy extends EventTarget {
|
|
|
164
177
|
centToRate(cent: any): number;
|
|
165
178
|
centToHz(cent: any): number;
|
|
166
179
|
calcChannelDetune(channel: any): any;
|
|
167
|
-
calcNoteDetune(channel: any, note: any): any;
|
|
168
180
|
updateChannelDetune(channel: any, scheduleTime: any): void;
|
|
169
|
-
|
|
181
|
+
calcScaleOctaveTuning(channel: any, note: any): any;
|
|
182
|
+
calcNoteDetune(channel: any, note: any): any;
|
|
170
183
|
getPortamentoTime(channel: any, note: any): number;
|
|
171
184
|
getPitchIncrementSpeed(value: any): number;
|
|
172
185
|
setPortamentoVolumeEnvelope(channel: any, note: any, scheduleTime: any): void;
|
|
173
186
|
setVolumeEnvelope(channel: any, note: any, scheduleTime: any): void;
|
|
174
|
-
|
|
187
|
+
setPortamentoDetune(channel: any, note: any, scheduleTime: any): void;
|
|
188
|
+
setDetune(channel: any, note: any, scheduleTime: any): void;
|
|
189
|
+
setPortamentoPitchEnvelope(channel: any, note: any, scheduleTime: any): void;
|
|
175
190
|
setPitchEnvelope(note: any, scheduleTime: any): void;
|
|
176
191
|
clampCutoffFrequency(frequency: any): number;
|
|
177
192
|
setPortamentoFilterEnvelope(channel: any, note: any, scheduleTime: any): void;
|
|
@@ -184,9 +199,11 @@ export class Midy extends EventTarget {
|
|
|
184
199
|
handleDrumExclusiveClass(note: any, channelNumber: any, startTime: any): void;
|
|
185
200
|
setNoteRouting(channelNumber: any, note: any, startTime: any): void;
|
|
186
201
|
noteOn(channelNumber: any, noteNumber: any, velocity: any, startTime: any): Promise<void>;
|
|
202
|
+
startNote(channelNumber: any, noteNumber: any, velocity: any, startTime: any): Promise<Note | undefined>;
|
|
187
203
|
disconnectNote(note: any): void;
|
|
188
204
|
releaseNote(channel: any, note: any, endTime: any): Promise<any>;
|
|
189
|
-
noteOff(channelNumber: any, noteNumber: any,
|
|
205
|
+
noteOff(channelNumber: any, noteNumber: any, velocity: any, endTime: any, force: any): any;
|
|
206
|
+
stopNote(channelNumber: any, noteNumber: any, _velocity: any, endTime: any, force: any): any;
|
|
190
207
|
setNoteIndex(channel: any, index: any): void;
|
|
191
208
|
findNoteOffIndex(channel: any, noteNumber: any): any;
|
|
192
209
|
releaseSustainPedal(channelNumber: any, halfVelocity: any, scheduleTime: any): any[];
|
|
@@ -195,10 +212,13 @@ export class Midy extends EventTarget {
|
|
|
195
212
|
handleMessage(data: any, scheduleTime: any): void;
|
|
196
213
|
activeSensing(): void;
|
|
197
214
|
setPolyphonicKeyPressure(channelNumber: any, noteNumber: any, pressure: any, scheduleTime: any): void;
|
|
198
|
-
setProgramChange(channelNumber: any, programNumber: any,
|
|
215
|
+
setProgramChange(channelNumber: any, programNumber: any, scheduleTime: any): void;
|
|
216
|
+
applyProgramChange(channelNumber: any, programNumber: any, _scheduleTime: any): void;
|
|
199
217
|
setChannelPressure(channelNumber: any, value: any, scheduleTime: any): void;
|
|
218
|
+
applyChannelPressure(channelNumber: any, value: any, scheduleTime: any): void;
|
|
200
219
|
handlePitchBendMessage(channelNumber: any, lsb: any, msb: any, scheduleTime: any): void;
|
|
201
220
|
setPitchBend(channelNumber: any, value: any, scheduleTime: any): void;
|
|
221
|
+
applyPitchBend(channelNumber: any, value: any, scheduleTime: any): void;
|
|
202
222
|
setModLfoToPitch(channel: any, note: any, scheduleTime: any): void;
|
|
203
223
|
setVibLfoToPitch(channel: any, note: any, scheduleTime: any): void;
|
|
204
224
|
setModLfoToFilterFc(channel: any, note: any, scheduleTime: any): void;
|
|
@@ -207,8 +227,8 @@ export class Midy extends EventTarget {
|
|
|
207
227
|
setChorusSend(channel: any, note: any, scheduleTime: any): void;
|
|
208
228
|
setDelayModLFO(note: any): void;
|
|
209
229
|
setFreqModLFO(note: any, scheduleTime: any): void;
|
|
210
|
-
setFreqVibLFO(channel: any, note: any, scheduleTime: any): void;
|
|
211
230
|
setDelayVibLFO(channel: any, note: any): void;
|
|
231
|
+
setFreqVibLFO(channel: any, note: any, scheduleTime: any): void;
|
|
212
232
|
createVoiceParamsHandlers(): {
|
|
213
233
|
modLfoToPitch: (channel: any, note: any, scheduleTime: any) => void;
|
|
214
234
|
vibLfoToPitch: (channel: any, note: any, scheduleTime: any) => void;
|
|
@@ -220,11 +240,13 @@ export class Midy extends EventTarget {
|
|
|
220
240
|
freqModLFO: (_channel: any, note: any, scheduleTime: any) => void;
|
|
221
241
|
delayVibLFO: (channel: any, note: any, _scheduleTime: any) => void;
|
|
222
242
|
freqVibLFO: (channel: any, note: any, scheduleTime: any) => void;
|
|
243
|
+
detune: (channel: any, note: any, scheduleTime: any) => void;
|
|
223
244
|
};
|
|
224
245
|
getControllerState(channel: any, noteNumber: any, velocity: any, polyphonicKeyPressure: any): Float32Array<any>;
|
|
225
246
|
applyVoiceParams(channel: any, controllerType: any, scheduleTime: any): void;
|
|
226
247
|
createControlChangeHandlers(): any[];
|
|
227
248
|
setControlChange(channelNumber: any, controllerType: any, value: any, scheduleTime: any): void;
|
|
249
|
+
applyControlChange(channelNumber: any, controllerType: any, value: any, scheduleTime: any): void;
|
|
228
250
|
setBankMSB(channelNumber: any, msb: any): void;
|
|
229
251
|
updateModulation(channel: any, scheduleTime: any): void;
|
|
230
252
|
setModulationDepth(channelNumber: any, value: any, scheduleTime: any): void;
|
|
@@ -275,8 +297,11 @@ export class Midy extends EventTarget {
|
|
|
275
297
|
setCoarseTuning(channelNumber: any, value: any, scheduleTime: any): void;
|
|
276
298
|
handleModulationDepthRangeRPN(channelNumber: any, scheduleTime: any): void;
|
|
277
299
|
setModulationDepthRange(channelNumber: any, value: any, scheduleTime: any): void;
|
|
300
|
+
handleMIDIPolyphonicExpressionRPN(channelNumber: any, _scheduleTime: any): void;
|
|
301
|
+
setMIDIPolyphonicExpression(channelNumber: any, value: any): void;
|
|
278
302
|
setRPGMakerLoop(_channelNumber: any, _value: any, scheduleTime: any): void;
|
|
279
|
-
allSoundOff(channelNumber: any,
|
|
303
|
+
allSoundOff(channelNumber: any, value: any, scheduleTime: any): void;
|
|
304
|
+
applyAllSoundOff(channelNumber: any, _value: any, scheduleTime: any): Promise<any[]> | undefined;
|
|
280
305
|
resetChannelStates(channelNumber: any): void;
|
|
281
306
|
resetAllControllers(channelNumber: any, _value: any, scheduleTime: any): void;
|
|
282
307
|
allNotesOff(channelNumber: any, _value: any, scheduleTime: any): Promise<any[]>;
|
|
@@ -332,4 +357,31 @@ export class Midy extends EventTarget {
|
|
|
332
357
|
handleSysEx(data: any, scheduleTime: any): void;
|
|
333
358
|
scheduleTask(callback: any, scheduleTime: any): Promise<any>;
|
|
334
359
|
}
|
|
360
|
+
declare class Note {
|
|
361
|
+
constructor(noteNumber: any, velocity: any, startTime: any);
|
|
362
|
+
voice: any;
|
|
363
|
+
voiceParams: any;
|
|
364
|
+
adjustedBaseFreq: number;
|
|
365
|
+
index: number;
|
|
366
|
+
ending: boolean;
|
|
367
|
+
bufferSource: any;
|
|
368
|
+
filterNode: any;
|
|
369
|
+
filterDepth: any;
|
|
370
|
+
volumeEnvelopeNode: any;
|
|
371
|
+
volumeDepth: any;
|
|
372
|
+
modulationLFO: any;
|
|
373
|
+
modulationDepth: any;
|
|
374
|
+
vibratoLFO: any;
|
|
375
|
+
vibratoDepth: any;
|
|
376
|
+
reverbSend: any;
|
|
377
|
+
chorusSend: any;
|
|
378
|
+
portamentoNoteNumber: number;
|
|
379
|
+
pressure: number;
|
|
380
|
+
noteNumber: any;
|
|
381
|
+
velocity: any;
|
|
382
|
+
startTime: any;
|
|
383
|
+
ready: Promise<any>;
|
|
384
|
+
resolveReady: (value: any) => void;
|
|
385
|
+
}
|
|
386
|
+
export {};
|
|
335
387
|
//# sourceMappingURL=midy.d.ts.map
|
package/esm/midy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"midy.d.ts","sourceRoot":"","sources":["../src/midy.js"],"names":[],"mappings":"AAgLA;
|
|
1
|
+
{"version":3,"file":"midy.d.ts","sourceRoot":"","sources":["../src/midy.js"],"names":[],"mappings":"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"}
|