@marmooo/midy 0.4.4 → 0.4.6
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 +5 -1
- package/esm/midy-GM1.js +7 -7
- package/esm/midy-GM2.d.ts.map +1 -1
- package/esm/midy-GM2.js +17 -15
- package/esm/midy-GMLite.js +7 -7
- package/esm/midy.d.ts +6 -2
- package/esm/midy.d.ts.map +1 -1
- package/esm/midy.js +81 -39
- package/package.json +1 -1
- package/script/midy-GM1.js +7 -7
- package/script/midy-GM2.d.ts.map +1 -1
- package/script/midy-GM2.js +17 -15
- package/script/midy-GMLite.js +7 -7
- package/script/midy.d.ts +6 -2
- package/script/midy.d.ts.map +1 -1
- package/script/midy.js +81 -39
package/README.md
CHANGED
|
@@ -23,7 +23,11 @@ This library provides several files depending on the implementation level.
|
|
|
23
23
|
- [@marmooo/midi-player](https://marmooo.github.io/midi-player/) - GUI library
|
|
24
24
|
- [Humidy](https://marmooo.github.io/humidy/) - GM2 MIDI mixer app
|
|
25
25
|
- [Timidy](https://marmooo.github.io/timidy/) - Timidity++ style MIDI player
|
|
26
|
-
- [4x4pad](https://marmooo.github.io/4x4pad/) - 4x4 grid
|
|
26
|
+
- [4x4pad](https://marmooo.github.io/4x4pad/) - 4x4 grid MPE MIDI controller
|
|
27
|
+
- [Celltone](https://marmooo.github.io/celltone/) - Grid MPE MIDI controller with
|
|
28
|
+
Janko-Piano layout
|
|
29
|
+
- [Isotone](https://marmooo.github.io/isotone/) - Grid MPE MIDI controller
|
|
30
|
+
optimized for chords
|
|
27
31
|
|
|
28
32
|
## Support Status
|
|
29
33
|
|
package/esm/midy-GM1.js
CHANGED
|
@@ -549,8 +549,8 @@ export class MidyGM1 extends EventTarget {
|
|
|
549
549
|
this.voiceCache.clear();
|
|
550
550
|
this.realtimeVoiceCache.clear();
|
|
551
551
|
const channels = this.channels;
|
|
552
|
-
for (let
|
|
553
|
-
channels[
|
|
552
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
553
|
+
channels[ch].scheduledNotes = [];
|
|
554
554
|
this.resetChannelStates(i);
|
|
555
555
|
}
|
|
556
556
|
}
|
|
@@ -741,8 +741,8 @@ export class MidyGM1 extends EventTarget {
|
|
|
741
741
|
}
|
|
742
742
|
stopNotes(velocity, force, scheduleTime) {
|
|
743
743
|
const channels = this.channels;
|
|
744
|
-
for (let
|
|
745
|
-
this.stopChannelNotes(
|
|
744
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
745
|
+
this.stopChannelNotes(ch, velocity, force, scheduleTime);
|
|
746
746
|
}
|
|
747
747
|
const stopPromise = Promise.all(this.notePromises);
|
|
748
748
|
this.notePromises = [];
|
|
@@ -1626,9 +1626,9 @@ export class MidyGM1 extends EventTarget {
|
|
|
1626
1626
|
if (!(0 <= scheduleTime))
|
|
1627
1627
|
scheduleTime = this.audioContext.currentTime;
|
|
1628
1628
|
this.mode = "GM1";
|
|
1629
|
-
for (let
|
|
1630
|
-
this.allSoundOff(
|
|
1631
|
-
const channel = channels[
|
|
1629
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
1630
|
+
this.allSoundOff(ch, 0, scheduleTime);
|
|
1631
|
+
const channel = channels[ch];
|
|
1632
1632
|
channel.isDrum = false;
|
|
1633
1633
|
}
|
|
1634
1634
|
channels[9].isDrum = true;
|
package/esm/midy-GM2.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"midy-GM2.d.ts","sourceRoot":"","sources":["../src/midy-GM2.js"],"names":[],"mappings":"AA+JA;IAuDE;;;;;;;;;;;;;;MAcE;IAEF,+BAqBC;IAvFD,gCAAgC;IAChC,aAAa;IACb,yBAAqB;IACrB,2BAAuB;IACvB;;;;MAIE;IACF;;;;;;MAME;IACF,oBAAiB;IACjB,qBAAmB;IACnB,kBAAc;IACd,0BAAsB;IACtB,+BAA6B;IAC7B,0BAAwB;IACxB,kBAAc;IACd,mBAAiB;IACjB,kBAAc;IACd,mBAAe;IACf,kBAAgB;IAChB,0BAAuD;IACvD,4BAAyB;IACzB,0BAAuB;IACvB,kCAA+B;IAC/B,mBAAkB;IAClB,mBAAkB;IAClB,kBAAiB;IACjB,oBAAmB;IACnB,mBAAkB;IAClB,iCAEG;IACH,cAAU;IACV,cAAa;IACb,iBAAY;IACZ,gBAAc;IACd,oBAAkB;IAClB,sBAAwB;IACxB,2BAAqC;IACrC,+BAEE;IAoBA,kBAAgC;IAChC,kBAA8C;IAC9C,eAAwD;IACxD,qBAGE;IACF,uBAAmD;IACnD;;;;;;;;;;;;MAA2D;IAC3D,6BAA+D;IAC/D,kCAAyE;IACzE,gBAAiD;IACjD;;;kBAAyD;IACzD;;;;;;;;MAAyD;IAQ3D,mCASC;IAED,2DAYC;IAED,yCAmBC;IAED,oCASC;IAED,sBAoCC;IAED,8DAeC;IAED;;;;MAeC;IAED,sCAKC;IAED,yCAqBC;IAED,kDASC;IAED,mDAIC;IAED,2FAWC;IAED,gEAyDC;IAED,mCASC;IAED,uBAUC;IAED,yDAqCC;IAED,2BAoFC;IAED,uDAEC;IAED,wDAEC;IAED,qCAMC;IAED;;;MAqFC;IAED,kGAeC;IAED,mGAeC;IAED,wEAQC;IAED,uBAMC;IAED,sBAIC;IAED,uBAMC;IAED,wBAIC;IAED,0BAKC;IAED,8BAMC;IAED,wBAYC;IAED,sBAIC;IAED,kEAWC;IAED,kFAYC;IAED,kFAuBC;IAED;;;;MASC;IAED,gFAUC;IAED,mFAYC;IAED,sGAcC;IAID;;;MA8BC;IAED;;;kBA6BC;IAED;;;;;;;;MA0CC;IAED,8BAEC;IAED,8BAEC;IAED,4BAEC;IAED,qCAkBC;IAED,2DAQC;IAED,oDAEC;IAED,6CAKC;IAED,mDAIC;IAED,2CAoDC;IAED,8EASC;IAED,oEAgBC;IAED,sEASC;IAED,4DASC;IAED,6EAOC;IAED,qDAkBC;IAED,6CAIC;IAED,8EAmBC;IAED,oEA+BC;IAED,kEAqBC;IAED,+DAeC;IAED,4GAkCC;IAED,uEAkEC;IAED,0EAiBC;IAED,8EAoBC;IAED,oEAuBC;IAED,0FAwBC;IAED,gCAmBC;IAED,iEAwBC;IAED,4FA2BC;IAED,6CAUC;IAED,qDAUC;IAED,qFAeC;IAED,uFAkBC;IAED,+BAuBC;IAED,kDAOC;IAED,sBAEC;IAED,mFAcC;IAED,4EAiBC;IAED,wFAGC;IAED,sEAWC;IAED,mEAaC;IAED,mEAYC;IAED,sEAMC;IAED,oEAQC;IAED,gEAyBC;IAED,gEAyBC;IAED,gCAKC;IAED,kDAKC;IAED,8CAOC;IAED,gEAMC;IAED;;;;;;;;;;;;MAwDC;IAED,oFAOC;IAED,6EA+BC;IAED,qCA2BC;IAED,+FAYC;IAED,+CAEC;IAED,wDAUC;IAED,4EAMC;IAED,wDAeC;IAED,2EAMC;IAED,mEAWC;IAED;;;MAMC;IAED,gEAWC;IAED,uEAKC;IAED,+CAEC;IAED,sEAGC;IAED,2DAUC;IAED,4EAoBC;IAED,yEAYC;IAED,+CAEC;IAED,uEAMC;IAED,2EAcC;IAED,oDAEC;IAED,0EAeC;IAED,sFAQC;IAED,sFAQC;IAED,kFAeC;IAED,2DAMC;IAED,uDAuBC;IAED,gDAEC;IAED,gDAEC;IAED,sEAGC;IAED,qEAKC;IAED,2EAWC;IAED,iEAMC;IAED,uEASC;IAED,mEAKC;IAED,yEASC;IAED,2EAKC;IAED,iFAMC;IAED,gFAGC;IAED,6CAwBC;IAGD,8EAoCC;IAED,gFAGC;IAED,iEAEC;IAED,gEAEC;IAED,gEAIC;IAED,gEAIC;IAED,+EAgCC;IAED,qCAaC;IAED,qCAaC;IAED,4EA4CC;IAED,4DAGC;IAED,qDAKC;IAED,gEAIC;IAED,
|
|
1
|
+
{"version":3,"file":"midy-GM2.d.ts","sourceRoot":"","sources":["../src/midy-GM2.js"],"names":[],"mappings":"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"}
|
package/esm/midy-GM2.js
CHANGED
|
@@ -708,9 +708,9 @@ export class MidyGM2 extends EventTarget {
|
|
|
708
708
|
this.voiceCache.clear();
|
|
709
709
|
this.realtimeVoiceCache.clear();
|
|
710
710
|
const channels = this.channels;
|
|
711
|
-
for (let
|
|
712
|
-
channels[
|
|
713
|
-
this.resetChannelStates(
|
|
711
|
+
for (let ch = 0; i < channels.length; ch++) {
|
|
712
|
+
channels[ch].scheduledNotes = [];
|
|
713
|
+
this.resetChannelStates(ch);
|
|
714
714
|
}
|
|
715
715
|
}
|
|
716
716
|
updateStates(queueIndex, nextQueueIndex) {
|
|
@@ -938,8 +938,8 @@ export class MidyGM2 extends EventTarget {
|
|
|
938
938
|
}
|
|
939
939
|
stopNotes(velocity, force, scheduleTime) {
|
|
940
940
|
const channels = this.channels;
|
|
941
|
-
for (let
|
|
942
|
-
this.stopChannelNotes(
|
|
941
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
942
|
+
this.stopChannelNotes(ch, velocity, force, scheduleTime);
|
|
943
943
|
}
|
|
944
944
|
const stopPromise = Promise.all(this.notePromises);
|
|
945
945
|
this.notePromises = [];
|
|
@@ -2559,9 +2559,9 @@ export class MidyGM2 extends EventTarget {
|
|
|
2559
2559
|
if (!(0 <= scheduleTime))
|
|
2560
2560
|
scheduleTime = this.audioContext.currentTime;
|
|
2561
2561
|
this.mode = "GM1";
|
|
2562
|
-
for (let
|
|
2563
|
-
this.allSoundOff(
|
|
2564
|
-
const channel = channels[
|
|
2562
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
2563
|
+
this.allSoundOff(ch, 0, scheduleTime);
|
|
2564
|
+
const channel = channels[ch];
|
|
2565
2565
|
channel.bankMSB = 0;
|
|
2566
2566
|
channel.bankLSB = 0;
|
|
2567
2567
|
channel.isDrum = false;
|
|
@@ -2574,9 +2574,9 @@ export class MidyGM2 extends EventTarget {
|
|
|
2574
2574
|
if (!(0 <= scheduleTime))
|
|
2575
2575
|
scheduleTime = this.audioContext.currentTime;
|
|
2576
2576
|
this.mode = "GM2";
|
|
2577
|
-
for (let
|
|
2578
|
-
this.allSoundOff(
|
|
2579
|
-
const channel = channels[
|
|
2577
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
2578
|
+
this.allSoundOff(ch, 0, scheduleTime);
|
|
2579
|
+
const channel = channels[ch];
|
|
2580
2580
|
channel.bankMSB = 121;
|
|
2581
2581
|
channel.bankLSB = 0;
|
|
2582
2582
|
channel.isDrum = false;
|
|
@@ -2643,8 +2643,9 @@ export class MidyGM2 extends EventTarget {
|
|
|
2643
2643
|
const next = value;
|
|
2644
2644
|
this.masterFineTuning = next;
|
|
2645
2645
|
const detuneChange = next - prev;
|
|
2646
|
-
|
|
2647
|
-
|
|
2646
|
+
const channels = this.channels;
|
|
2647
|
+
for (let ch = 0; i < channels.length; ch++) {
|
|
2648
|
+
const channel = this.channels[ch];
|
|
2648
2649
|
if (channel.isDrum)
|
|
2649
2650
|
continue;
|
|
2650
2651
|
channel.detune += detuneChange;
|
|
@@ -2660,8 +2661,9 @@ export class MidyGM2 extends EventTarget {
|
|
|
2660
2661
|
const next = value;
|
|
2661
2662
|
this.masterCoarseTuning = next;
|
|
2662
2663
|
const detuneChange = next - prev;
|
|
2663
|
-
|
|
2664
|
-
|
|
2664
|
+
const channels = this.channels;
|
|
2665
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
2666
|
+
const channel = this.channels[ch];
|
|
2665
2667
|
if (channel.isDrum)
|
|
2666
2668
|
continue;
|
|
2667
2669
|
channel.detune += detuneChange;
|
package/esm/midy-GMLite.js
CHANGED
|
@@ -570,8 +570,8 @@ export class MidyGMLite extends EventTarget {
|
|
|
570
570
|
this.voiceCache.clear();
|
|
571
571
|
this.realtimeVoiceCache.clear();
|
|
572
572
|
const channels = this.channels;
|
|
573
|
-
for (let
|
|
574
|
-
channels[
|
|
573
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
574
|
+
channels[ch].scheduledNotes = [];
|
|
575
575
|
this.resetChannelStates(i);
|
|
576
576
|
}
|
|
577
577
|
}
|
|
@@ -762,8 +762,8 @@ export class MidyGMLite extends EventTarget {
|
|
|
762
762
|
}
|
|
763
763
|
stopNotes(velocity, force, scheduleTime) {
|
|
764
764
|
const channels = this.channels;
|
|
765
|
-
for (let
|
|
766
|
-
this.stopChannelNotes(
|
|
765
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
766
|
+
this.stopChannelNotes(ch, velocity, force, scheduleTime);
|
|
767
767
|
}
|
|
768
768
|
const stopPromise = Promise.all(this.notePromises);
|
|
769
769
|
this.notePromises = [];
|
|
@@ -1618,9 +1618,9 @@ export class MidyGMLite extends EventTarget {
|
|
|
1618
1618
|
if (!(0 <= scheduleTime))
|
|
1619
1619
|
scheduleTime = this.audioContext.currentTime;
|
|
1620
1620
|
this.mode = "GM1";
|
|
1621
|
-
for (let
|
|
1622
|
-
this.allSoundOff(
|
|
1623
|
-
const channel = channels[
|
|
1621
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
1622
|
+
this.allSoundOff(ch, 0, scheduleTime);
|
|
1623
|
+
const channel = channels[ch];
|
|
1624
1624
|
channel.isDrum = false;
|
|
1625
1625
|
}
|
|
1626
1626
|
channels[9].isDrum = true;
|
package/esm/midy.d.ts
CHANGED
|
@@ -68,7 +68,7 @@ export class Midy extends EventTarget {
|
|
|
68
68
|
lowerMPEMembers: number;
|
|
69
69
|
upperMPEMembers: number;
|
|
70
70
|
mpeState: {
|
|
71
|
-
|
|
71
|
+
channelToNotes: Map<any, any>;
|
|
72
72
|
noteToChannel: Map<any, any>;
|
|
73
73
|
};
|
|
74
74
|
audioContext: any;
|
|
@@ -146,6 +146,7 @@ export class Midy extends EventTarget {
|
|
|
146
146
|
currentTime(): number;
|
|
147
147
|
processScheduledNotes(channel: any, callback: any): Promise<void>;
|
|
148
148
|
processActiveNotes(channel: any, scheduleTime: any, callback: any): Promise<void>;
|
|
149
|
+
applyToMPEChannels(channelNumber: any, fn: any): void;
|
|
149
150
|
createConvolutionReverbImpulse(audioContext: any, decay: any, preDecay: any): any;
|
|
150
151
|
createConvolutionReverb(audioContext: any, impulse: any): {
|
|
151
152
|
input: any;
|
|
@@ -211,10 +212,13 @@ export class Midy extends EventTarget {
|
|
|
211
212
|
handleMessage(data: any, scheduleTime: any): void;
|
|
212
213
|
activeSensing(): void;
|
|
213
214
|
setPolyphonicKeyPressure(channelNumber: any, noteNumber: any, pressure: any, scheduleTime: any): void;
|
|
214
|
-
setProgramChange(channelNumber: any, programNumber: any,
|
|
215
|
+
setProgramChange(channelNumber: any, programNumber: any, scheduleTime: any): void;
|
|
216
|
+
applyProgramChange(channelNumber: any, programNumber: any, _scheduleTime: any): void;
|
|
215
217
|
setChannelPressure(channelNumber: any, value: any, scheduleTime: any): void;
|
|
218
|
+
applyChannelPressure(channelNumber: any, value: any, scheduleTime: any): void;
|
|
216
219
|
handlePitchBendMessage(channelNumber: any, lsb: any, msb: any, scheduleTime: any): void;
|
|
217
220
|
setPitchBend(channelNumber: any, value: any, scheduleTime: any): void;
|
|
221
|
+
applyPitchBend(channelNumber: any, value: any, scheduleTime: any): void;
|
|
218
222
|
setModLfoToPitch(channel: any, note: any, scheduleTime: any): void;
|
|
219
223
|
setVibLfoToPitch(channel: any, note: any, scheduleTime: any): void;
|
|
220
224
|
setModLfoToFilterFc(channel: any, note: any, scheduleTime: any): void;
|
package/esm/midy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"midy.d.ts","sourceRoot":"","sources":["../src/midy.js"],"names":[],"mappings":"AAgLA;IA+DE;;;;;;;;;;;;;;;;;MAiBE;IAEF,+BAqBC;IAlGD,gCAAgC;IAChC,aAAa;IACb,yBAAqB;IACrB,2BAAuB;IACvB;;;;MAIE;IACF;;;;;;MAME;IACF,oBAAiB;IACjB,qBAAmB;IACnB,kBAAc;IACd,0BAAsB;IACtB,+BAA6B;IAC7B,0BAAwB;IACxB,kBAAc;IACd,mBAAiB;IACjB,kBAAc;IACd,mBAAe;IACf,kBAAgB;IAChB,0BAAuD;IACvD,4BAAyB;IACzB,0BAAuB;IACvB,kCAA+B;IAC/B,mBAAkB;IAClB,mBAAkB;IAClB,kBAAiB;IACjB,oBAAmB;IACnB,mBAAkB;IAClB,iCAEG;IACH,cAAU;IACV,cAAa;IACb,kBAAc;IACd,iBAAY;IACZ,gBAAc;IACd,oBAAkB;IAClB,sBAAwB;IACxB,2BAAqC;IACrC,+BAEE;IACF,oBAAmB;IACnB,wBAAoB;IACpB,wBAAoB;IACpB;;;MAGE;IAuBA,kBAAgC;IAChC,kBAA8C;IAC9C,eAAwD;IACxD,qBAGE;IACF,uBAAmD;IACnD;;;;;;;;;;;;MAA2D;IAC3D,6BAA+D;IAC/D,kCAAyE;IACzE,gBAAiD;IACjD;;;kBAAyD;IACzD;;;;;;;;MAAyD;IAQ3D,mCASC;IAED,2DAYC;IAED,yCAmBC;IAED,oCASC;IAED,sBAoCC;IAED,8DAeC;IAED;;;;MAeC;IAED,sCAMC;IAED,yCAqBC;IAED,kDASC;IAED,mDAIC;IAED,2FAWC;IAED,gEAiEC;IAED,mCASC;IAED,uBAUC;IAED,yDAqCC;IAED,2BA0FC;IAED,uDAEC;IAED,wDAEC;IAED,qCAMC;IAED;;;MAqFC;IAED,kGAeC;IAED,mGAeC;IAED,wEAQC;IAED,uBAMC;IAED,sBAIC;IAED,uBAMC;IAED,wBAIC;IAED,0BAKC;IAED,8BAMC;IAED,wBAYC;IAED,sBAIC;IAED,kEAWC;IAED,kFAYC;IAED,kFAuBC;IAED;;;;MASC;IAED,gFAUC;IAED,mFAYC;IAED,sGAcC;IAID;;;MA8BC;IAED;;;kBA6BC;IAED;;;;;;;;MA0CC;IAED,8BAEC;IAED,8BAEC;IAED,4BAEC;IAED,qCAkBC;IAED,2DAQC;IAED,oDAEC;IAED,6CAKC;IAED,mDAMC;IAED,2CAoDC;IAED,8EASC;IAED,oEAkBC;IAED,sEAgBC;IAED,4DASC;IAED,6EAOC;IAED,qDAkBC;IAED,6CAIC;IAED,8EAqBC;IAED,oEAiCC;IAED,kEAqBC;IAED,+DAcC;IAED,4GAkCC;IAED,uEAoEC;IAED,0EAiBC;IAED,8EAoBC;IAED,oEAuBC;IAED,
|
|
1
|
+
{"version":3,"file":"midy.d.ts","sourceRoot":"","sources":["../src/midy.js"],"names":[],"mappings":"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"}
|
package/esm/midy.js
CHANGED
|
@@ -517,7 +517,7 @@ export class Midy extends EventTarget {
|
|
|
517
517
|
configurable: true,
|
|
518
518
|
writable: true,
|
|
519
519
|
value: {
|
|
520
|
-
|
|
520
|
+
channelToNotes: new Map(),
|
|
521
521
|
noteToChannel: new Map(),
|
|
522
522
|
}
|
|
523
523
|
});
|
|
@@ -768,9 +768,9 @@ export class Midy extends EventTarget {
|
|
|
768
768
|
this.voiceCache.clear();
|
|
769
769
|
this.realtimeVoiceCache.clear();
|
|
770
770
|
const channels = this.channels;
|
|
771
|
-
for (let
|
|
772
|
-
channels[
|
|
773
|
-
this.resetChannelStates(
|
|
771
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
772
|
+
channels[ch].scheduledNotes = [];
|
|
773
|
+
this.resetChannelStates(ch);
|
|
774
774
|
}
|
|
775
775
|
}
|
|
776
776
|
updateStates(queueIndex, nextQueueIndex) {
|
|
@@ -1105,6 +1105,22 @@ export class Midy extends EventTarget {
|
|
|
1105
1105
|
}
|
|
1106
1106
|
await Promise.all(tasks);
|
|
1107
1107
|
}
|
|
1108
|
+
applyToMPEChannels(channelNumber, fn) {
|
|
1109
|
+
fn(channelNumber);
|
|
1110
|
+
const channel = this.channels[channelNumber];
|
|
1111
|
+
if (!channel.isMPEManager)
|
|
1112
|
+
return;
|
|
1113
|
+
if (channelNumber === 0) {
|
|
1114
|
+
for (let ch = 1; ch <= this.lowerMPEMembers; ch++) {
|
|
1115
|
+
fn(ch);
|
|
1116
|
+
}
|
|
1117
|
+
}
|
|
1118
|
+
else if (channelNumber === 15) {
|
|
1119
|
+
for (let ch = 15 - this.upperMPEMembers; ch <= 14; ch++) {
|
|
1120
|
+
fn(ch);
|
|
1121
|
+
}
|
|
1122
|
+
}
|
|
1123
|
+
}
|
|
1108
1124
|
createConvolutionReverbImpulse(audioContext, decay, preDecay) {
|
|
1109
1125
|
const sampleRate = audioContext.sampleRate;
|
|
1110
1126
|
const length = sampleRate * decay;
|
|
@@ -1677,7 +1693,10 @@ export class Midy extends EventTarget {
|
|
|
1677
1693
|
async noteOn(channelNumber, noteNumber, velocity, startTime) {
|
|
1678
1694
|
if (this.mpeEnabled) {
|
|
1679
1695
|
const note = await this.startNote(channelNumber, noteNumber, velocity, startTime);
|
|
1680
|
-
this.mpeState.
|
|
1696
|
+
if (!this.mpeState.channelToNotes.has(channelNumber)) {
|
|
1697
|
+
this.mpeState.channelToNotes.set(channelNumber, new Set());
|
|
1698
|
+
}
|
|
1699
|
+
this.mpeState.channelToNotes.get(channelNumber).add(note.index);
|
|
1681
1700
|
this.mpeState.noteToChannel.set(note.index, channelNumber);
|
|
1682
1701
|
}
|
|
1683
1702
|
else {
|
|
@@ -1757,17 +1776,30 @@ export class Midy extends EventTarget {
|
|
|
1757
1776
|
}
|
|
1758
1777
|
noteOff(channelNumber, noteNumber, velocity, endTime, force) {
|
|
1759
1778
|
if (this.mpeEnabled) {
|
|
1760
|
-
const
|
|
1761
|
-
if (
|
|
1779
|
+
const noteIndices = this.mpeState.channelToNotes.get(channelNumber);
|
|
1780
|
+
if (!noteIndices || noteIndices.size === 0)
|
|
1762
1781
|
return;
|
|
1763
1782
|
const channel = this.channels[channelNumber];
|
|
1764
|
-
|
|
1783
|
+
let targetNoteIndex = undefined;
|
|
1784
|
+
for (const noteIndex of noteIndices) {
|
|
1785
|
+
const note = channel.scheduledNotes[noteIndex];
|
|
1786
|
+
if (note && note.noteNumber === noteNumber && !note.ending) {
|
|
1787
|
+
targetNoteIndex = noteIndex;
|
|
1788
|
+
break;
|
|
1789
|
+
}
|
|
1790
|
+
}
|
|
1791
|
+
if (targetNoteIndex === undefined)
|
|
1792
|
+
return;
|
|
1793
|
+
const note = channel.scheduledNotes[targetNoteIndex];
|
|
1765
1794
|
note.ending = true;
|
|
1766
1795
|
const promise = note.ready.then(() => {
|
|
1767
1796
|
return this.releaseNote(channel, note, endTime);
|
|
1768
1797
|
});
|
|
1769
|
-
|
|
1770
|
-
|
|
1798
|
+
noteIndices.delete(targetNoteIndex);
|
|
1799
|
+
if (noteIndices.size === 0) {
|
|
1800
|
+
this.mpeState.channelToNotes.delete(channelNumber);
|
|
1801
|
+
}
|
|
1802
|
+
this.mpeState.noteToChannel.delete(targetNoteIndex);
|
|
1771
1803
|
return promise;
|
|
1772
1804
|
}
|
|
1773
1805
|
else {
|
|
@@ -1904,7 +1936,12 @@ export class Midy extends EventTarget {
|
|
|
1904
1936
|
});
|
|
1905
1937
|
this.applyVoiceParams(channel, 10, scheduleTime);
|
|
1906
1938
|
}
|
|
1907
|
-
setProgramChange(channelNumber, programNumber,
|
|
1939
|
+
setProgramChange(channelNumber, programNumber, scheduleTime) {
|
|
1940
|
+
this.applyToMPEChannels(channelNumber, (ch) => {
|
|
1941
|
+
this.applyProgramChange(ch, programNumber, scheduleTime);
|
|
1942
|
+
});
|
|
1943
|
+
}
|
|
1944
|
+
applyProgramChange(channelNumber, programNumber, _scheduleTime) {
|
|
1908
1945
|
const channel = this.channels[channelNumber];
|
|
1909
1946
|
channel.programNumber = programNumber;
|
|
1910
1947
|
if (this.mode === "GM2") {
|
|
@@ -1920,6 +1957,11 @@ export class Midy extends EventTarget {
|
|
|
1920
1957
|
}
|
|
1921
1958
|
}
|
|
1922
1959
|
setChannelPressure(channelNumber, value, scheduleTime) {
|
|
1960
|
+
this.applyToMPEChannels(channelNumber, (ch) => {
|
|
1961
|
+
this.applyChannelPressure(ch, value, scheduleTime);
|
|
1962
|
+
});
|
|
1963
|
+
}
|
|
1964
|
+
applyChannelPressure(channelNumber, value, scheduleTime) {
|
|
1923
1965
|
if (!(0 <= scheduleTime))
|
|
1924
1966
|
scheduleTime = this.audioContext.currentTime;
|
|
1925
1967
|
const channel = this.channels[channelNumber];
|
|
@@ -1944,6 +1986,11 @@ export class Midy extends EventTarget {
|
|
|
1944
1986
|
this.setPitchBend(channelNumber, pitchBend, scheduleTime);
|
|
1945
1987
|
}
|
|
1946
1988
|
setPitchBend(channelNumber, value, scheduleTime) {
|
|
1989
|
+
this.applyToMPEChannels(channelNumber, (ch) => {
|
|
1990
|
+
this.applyPitchBend(ch, value, scheduleTime);
|
|
1991
|
+
});
|
|
1992
|
+
}
|
|
1993
|
+
applyPitchBend(channelNumber, value, scheduleTime) {
|
|
1947
1994
|
const channel = this.channels[channelNumber];
|
|
1948
1995
|
if (channel.isDrum)
|
|
1949
1996
|
return;
|
|
@@ -2245,19 +2292,9 @@ export class Midy extends EventTarget {
|
|
|
2245
2292
|
return handlers;
|
|
2246
2293
|
}
|
|
2247
2294
|
setControlChange(channelNumber, controllerType, value, scheduleTime) {
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
}
|
|
2252
|
-
else if (channel.isMPEManager) {
|
|
2253
|
-
channel.state[controllerType] = value / 127;
|
|
2254
|
-
for (const memberChannel of this.mpeState.channelToNote.keys()) {
|
|
2255
|
-
this.applyControlChange(memberChannel, controllerType, value, scheduleTime);
|
|
2256
|
-
}
|
|
2257
|
-
}
|
|
2258
|
-
else {
|
|
2259
|
-
this.applyControlChange(channelNumber, controllerType, value, scheduleTime);
|
|
2260
|
-
}
|
|
2295
|
+
this.applyToMPEChannels(channelNumber, (ch) => {
|
|
2296
|
+
this.applyControlChange(ch, controllerType, value, scheduleTime);
|
|
2297
|
+
});
|
|
2261
2298
|
}
|
|
2262
2299
|
applyControlChange(channelNumber, controllerType, value, scheduleTime) {
|
|
2263
2300
|
const handler = this.controlChangeHandlers[controllerType];
|
|
@@ -2804,11 +2841,12 @@ export class Midy extends EventTarget {
|
|
|
2804
2841
|
const lowerEnd = this.lowerMPEMembers;
|
|
2805
2842
|
const upperStart = 16 - this.upperMPEMembers;
|
|
2806
2843
|
const upperEnd = 14;
|
|
2807
|
-
|
|
2808
|
-
|
|
2809
|
-
const
|
|
2810
|
-
|
|
2811
|
-
|
|
2844
|
+
const { channels, lowerMPEMembers, upperMPEMembers, mpeEnabled } = this;
|
|
2845
|
+
for (let ch = 0; ch < 16; ch++) {
|
|
2846
|
+
const isLower = lowerMPEMembers && lowerStart <= ch && ch <= lowerEnd;
|
|
2847
|
+
const isUpper = upperMPEMembers && upperStart <= ch && ch <= upperEnd;
|
|
2848
|
+
channels[ch].isMPEMember = mpeEnabled && (isLower || isUpper);
|
|
2849
|
+
channels[ch].isMPEManager = mpeEnabled && (ch === 0 || ch === 15);
|
|
2812
2850
|
}
|
|
2813
2851
|
}
|
|
2814
2852
|
setRPGMakerLoop(_channelNumber, _value, scheduleTime) {
|
|
@@ -2891,6 +2929,8 @@ export class Midy extends EventTarget {
|
|
|
2891
2929
|
return this.stopActiveNotes(channelNumber, 0, false, scheduleTime);
|
|
2892
2930
|
}
|
|
2893
2931
|
omniOff(channelNumber, value, scheduleTime) {
|
|
2932
|
+
if (this.mpeEnabled)
|
|
2933
|
+
return;
|
|
2894
2934
|
this.allNotesOff(channelNumber, value, scheduleTime);
|
|
2895
2935
|
}
|
|
2896
2936
|
omniOn(channelNumber, value, scheduleTime) {
|
|
@@ -2949,9 +2989,9 @@ export class Midy extends EventTarget {
|
|
|
2949
2989
|
if (!(0 <= scheduleTime))
|
|
2950
2990
|
scheduleTime = this.audioContext.currentTime;
|
|
2951
2991
|
this.mode = "GM1";
|
|
2952
|
-
for (let
|
|
2953
|
-
this.applyAllSoundOff(
|
|
2954
|
-
const channel = channels[
|
|
2992
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
2993
|
+
this.applyAllSoundOff(ch, 0, scheduleTime);
|
|
2994
|
+
const channel = channels[ch];
|
|
2955
2995
|
channel.bankMSB = 0;
|
|
2956
2996
|
channel.bankLSB = 0;
|
|
2957
2997
|
channel.isDrum = false;
|
|
@@ -2964,9 +3004,9 @@ export class Midy extends EventTarget {
|
|
|
2964
3004
|
if (!(0 <= scheduleTime))
|
|
2965
3005
|
scheduleTime = this.audioContext.currentTime;
|
|
2966
3006
|
this.mode = "GM2";
|
|
2967
|
-
for (let
|
|
2968
|
-
this.applyAllSoundOff(
|
|
2969
|
-
const channel = channels[
|
|
3007
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
3008
|
+
this.applyAllSoundOff(ch, 0, scheduleTime);
|
|
3009
|
+
const channel = channels[ch];
|
|
2970
3010
|
channel.bankMSB = 121;
|
|
2971
3011
|
channel.bankLSB = 0;
|
|
2972
3012
|
channel.isDrum = false;
|
|
@@ -3046,8 +3086,9 @@ export class Midy extends EventTarget {
|
|
|
3046
3086
|
const next = value;
|
|
3047
3087
|
this.masterFineTuning = next;
|
|
3048
3088
|
const detuneChange = next - prev;
|
|
3049
|
-
|
|
3050
|
-
|
|
3089
|
+
const channels = this.channels;
|
|
3090
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
3091
|
+
const channel = channels[ch];
|
|
3051
3092
|
if (channel.isDrum)
|
|
3052
3093
|
continue;
|
|
3053
3094
|
channel.detune += detuneChange;
|
|
@@ -3063,8 +3104,9 @@ export class Midy extends EventTarget {
|
|
|
3063
3104
|
const next = value;
|
|
3064
3105
|
this.masterCoarseTuning = next;
|
|
3065
3106
|
const detuneChange = next - prev;
|
|
3066
|
-
|
|
3067
|
-
|
|
3107
|
+
const channels = this.channels;
|
|
3108
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
3109
|
+
const channel = channels[ch];
|
|
3068
3110
|
if (channel.isDrum)
|
|
3069
3111
|
continue;
|
|
3070
3112
|
channel.detune += detuneChange;
|
package/package.json
CHANGED
package/script/midy-GM1.js
CHANGED
|
@@ -552,8 +552,8 @@ class MidyGM1 extends EventTarget {
|
|
|
552
552
|
this.voiceCache.clear();
|
|
553
553
|
this.realtimeVoiceCache.clear();
|
|
554
554
|
const channels = this.channels;
|
|
555
|
-
for (let
|
|
556
|
-
channels[
|
|
555
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
556
|
+
channels[ch].scheduledNotes = [];
|
|
557
557
|
this.resetChannelStates(i);
|
|
558
558
|
}
|
|
559
559
|
}
|
|
@@ -744,8 +744,8 @@ class MidyGM1 extends EventTarget {
|
|
|
744
744
|
}
|
|
745
745
|
stopNotes(velocity, force, scheduleTime) {
|
|
746
746
|
const channels = this.channels;
|
|
747
|
-
for (let
|
|
748
|
-
this.stopChannelNotes(
|
|
747
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
748
|
+
this.stopChannelNotes(ch, velocity, force, scheduleTime);
|
|
749
749
|
}
|
|
750
750
|
const stopPromise = Promise.all(this.notePromises);
|
|
751
751
|
this.notePromises = [];
|
|
@@ -1629,9 +1629,9 @@ class MidyGM1 extends EventTarget {
|
|
|
1629
1629
|
if (!(0 <= scheduleTime))
|
|
1630
1630
|
scheduleTime = this.audioContext.currentTime;
|
|
1631
1631
|
this.mode = "GM1";
|
|
1632
|
-
for (let
|
|
1633
|
-
this.allSoundOff(
|
|
1634
|
-
const channel = channels[
|
|
1632
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
1633
|
+
this.allSoundOff(ch, 0, scheduleTime);
|
|
1634
|
+
const channel = channels[ch];
|
|
1635
1635
|
channel.isDrum = false;
|
|
1636
1636
|
}
|
|
1637
1637
|
channels[9].isDrum = true;
|
package/script/midy-GM2.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"midy-GM2.d.ts","sourceRoot":"","sources":["../src/midy-GM2.js"],"names":[],"mappings":"AA+JA;IAuDE;;;;;;;;;;;;;;MAcE;IAEF,+BAqBC;IAvFD,gCAAgC;IAChC,aAAa;IACb,yBAAqB;IACrB,2BAAuB;IACvB;;;;MAIE;IACF;;;;;;MAME;IACF,oBAAiB;IACjB,qBAAmB;IACnB,kBAAc;IACd,0BAAsB;IACtB,+BAA6B;IAC7B,0BAAwB;IACxB,kBAAc;IACd,mBAAiB;IACjB,kBAAc;IACd,mBAAe;IACf,kBAAgB;IAChB,0BAAuD;IACvD,4BAAyB;IACzB,0BAAuB;IACvB,kCAA+B;IAC/B,mBAAkB;IAClB,mBAAkB;IAClB,kBAAiB;IACjB,oBAAmB;IACnB,mBAAkB;IAClB,iCAEG;IACH,cAAU;IACV,cAAa;IACb,iBAAY;IACZ,gBAAc;IACd,oBAAkB;IAClB,sBAAwB;IACxB,2BAAqC;IACrC,+BAEE;IAoBA,kBAAgC;IAChC,kBAA8C;IAC9C,eAAwD;IACxD,qBAGE;IACF,uBAAmD;IACnD;;;;;;;;;;;;MAA2D;IAC3D,6BAA+D;IAC/D,kCAAyE;IACzE,gBAAiD;IACjD;;;kBAAyD;IACzD;;;;;;;;MAAyD;IAQ3D,mCASC;IAED,2DAYC;IAED,yCAmBC;IAED,oCASC;IAED,sBAoCC;IAED,8DAeC;IAED;;;;MAeC;IAED,sCAKC;IAED,yCAqBC;IAED,kDASC;IAED,mDAIC;IAED,2FAWC;IAED,gEAyDC;IAED,mCASC;IAED,uBAUC;IAED,yDAqCC;IAED,2BAoFC;IAED,uDAEC;IAED,wDAEC;IAED,qCAMC;IAED;;;MAqFC;IAED,kGAeC;IAED,mGAeC;IAED,wEAQC;IAED,uBAMC;IAED,sBAIC;IAED,uBAMC;IAED,wBAIC;IAED,0BAKC;IAED,8BAMC;IAED,wBAYC;IAED,sBAIC;IAED,kEAWC;IAED,kFAYC;IAED,kFAuBC;IAED;;;;MASC;IAED,gFAUC;IAED,mFAYC;IAED,sGAcC;IAID;;;MA8BC;IAED;;;kBA6BC;IAED;;;;;;;;MA0CC;IAED,8BAEC;IAED,8BAEC;IAED,4BAEC;IAED,qCAkBC;IAED,2DAQC;IAED,oDAEC;IAED,6CAKC;IAED,mDAIC;IAED,2CAoDC;IAED,8EASC;IAED,oEAgBC;IAED,sEASC;IAED,4DASC;IAED,6EAOC;IAED,qDAkBC;IAED,6CAIC;IAED,8EAmBC;IAED,oEA+BC;IAED,kEAqBC;IAED,+DAeC;IAED,4GAkCC;IAED,uEAkEC;IAED,0EAiBC;IAED,8EAoBC;IAED,oEAuBC;IAED,0FAwBC;IAED,gCAmBC;IAED,iEAwBC;IAED,4FA2BC;IAED,6CAUC;IAED,qDAUC;IAED,qFAeC;IAED,uFAkBC;IAED,+BAuBC;IAED,kDAOC;IAED,sBAEC;IAED,mFAcC;IAED,4EAiBC;IAED,wFAGC;IAED,sEAWC;IAED,mEAaC;IAED,mEAYC;IAED,sEAMC;IAED,oEAQC;IAED,gEAyBC;IAED,gEAyBC;IAED,gCAKC;IAED,kDAKC;IAED,8CAOC;IAED,gEAMC;IAED;;;;;;;;;;;;MAwDC;IAED,oFAOC;IAED,6EA+BC;IAED,qCA2BC;IAED,+FAYC;IAED,+CAEC;IAED,wDAUC;IAED,4EAMC;IAED,wDAeC;IAED,2EAMC;IAED,mEAWC;IAED;;;MAMC;IAED,gEAWC;IAED,uEAKC;IAED,+CAEC;IAED,sEAGC;IAED,2DAUC;IAED,4EAoBC;IAED,yEAYC;IAED,+CAEC;IAED,uEAMC;IAED,2EAcC;IAED,oDAEC;IAED,0EAeC;IAED,sFAQC;IAED,sFAQC;IAED,kFAeC;IAED,2DAMC;IAED,uDAuBC;IAED,gDAEC;IAED,gDAEC;IAED,sEAGC;IAED,qEAKC;IAED,2EAWC;IAED,iEAMC;IAED,uEASC;IAED,mEAKC;IAED,yEASC;IAED,2EAKC;IAED,iFAMC;IAED,gFAGC;IAED,6CAwBC;IAGD,8EAoCC;IAED,gFAGC;IAED,iEAEC;IAED,gEAEC;IAED,gEAIC;IAED,gEAIC;IAED,+EAgCC;IAED,qCAaC;IAED,qCAaC;IAED,4EA4CC;IAED,4DAGC;IAED,qDAKC;IAED,gEAIC;IAED,
|
|
1
|
+
{"version":3,"file":"midy-GM2.d.ts","sourceRoot":"","sources":["../src/midy-GM2.js"],"names":[],"mappings":"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"}
|
package/script/midy-GM2.js
CHANGED
|
@@ -711,9 +711,9 @@ class MidyGM2 extends EventTarget {
|
|
|
711
711
|
this.voiceCache.clear();
|
|
712
712
|
this.realtimeVoiceCache.clear();
|
|
713
713
|
const channels = this.channels;
|
|
714
|
-
for (let
|
|
715
|
-
channels[
|
|
716
|
-
this.resetChannelStates(
|
|
714
|
+
for (let ch = 0; i < channels.length; ch++) {
|
|
715
|
+
channels[ch].scheduledNotes = [];
|
|
716
|
+
this.resetChannelStates(ch);
|
|
717
717
|
}
|
|
718
718
|
}
|
|
719
719
|
updateStates(queueIndex, nextQueueIndex) {
|
|
@@ -941,8 +941,8 @@ class MidyGM2 extends EventTarget {
|
|
|
941
941
|
}
|
|
942
942
|
stopNotes(velocity, force, scheduleTime) {
|
|
943
943
|
const channels = this.channels;
|
|
944
|
-
for (let
|
|
945
|
-
this.stopChannelNotes(
|
|
944
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
945
|
+
this.stopChannelNotes(ch, velocity, force, scheduleTime);
|
|
946
946
|
}
|
|
947
947
|
const stopPromise = Promise.all(this.notePromises);
|
|
948
948
|
this.notePromises = [];
|
|
@@ -2562,9 +2562,9 @@ class MidyGM2 extends EventTarget {
|
|
|
2562
2562
|
if (!(0 <= scheduleTime))
|
|
2563
2563
|
scheduleTime = this.audioContext.currentTime;
|
|
2564
2564
|
this.mode = "GM1";
|
|
2565
|
-
for (let
|
|
2566
|
-
this.allSoundOff(
|
|
2567
|
-
const channel = channels[
|
|
2565
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
2566
|
+
this.allSoundOff(ch, 0, scheduleTime);
|
|
2567
|
+
const channel = channels[ch];
|
|
2568
2568
|
channel.bankMSB = 0;
|
|
2569
2569
|
channel.bankLSB = 0;
|
|
2570
2570
|
channel.isDrum = false;
|
|
@@ -2577,9 +2577,9 @@ class MidyGM2 extends EventTarget {
|
|
|
2577
2577
|
if (!(0 <= scheduleTime))
|
|
2578
2578
|
scheduleTime = this.audioContext.currentTime;
|
|
2579
2579
|
this.mode = "GM2";
|
|
2580
|
-
for (let
|
|
2581
|
-
this.allSoundOff(
|
|
2582
|
-
const channel = channels[
|
|
2580
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
2581
|
+
this.allSoundOff(ch, 0, scheduleTime);
|
|
2582
|
+
const channel = channels[ch];
|
|
2583
2583
|
channel.bankMSB = 121;
|
|
2584
2584
|
channel.bankLSB = 0;
|
|
2585
2585
|
channel.isDrum = false;
|
|
@@ -2646,8 +2646,9 @@ class MidyGM2 extends EventTarget {
|
|
|
2646
2646
|
const next = value;
|
|
2647
2647
|
this.masterFineTuning = next;
|
|
2648
2648
|
const detuneChange = next - prev;
|
|
2649
|
-
|
|
2650
|
-
|
|
2649
|
+
const channels = this.channels;
|
|
2650
|
+
for (let ch = 0; i < channels.length; ch++) {
|
|
2651
|
+
const channel = this.channels[ch];
|
|
2651
2652
|
if (channel.isDrum)
|
|
2652
2653
|
continue;
|
|
2653
2654
|
channel.detune += detuneChange;
|
|
@@ -2663,8 +2664,9 @@ class MidyGM2 extends EventTarget {
|
|
|
2663
2664
|
const next = value;
|
|
2664
2665
|
this.masterCoarseTuning = next;
|
|
2665
2666
|
const detuneChange = next - prev;
|
|
2666
|
-
|
|
2667
|
-
|
|
2667
|
+
const channels = this.channels;
|
|
2668
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
2669
|
+
const channel = this.channels[ch];
|
|
2668
2670
|
if (channel.isDrum)
|
|
2669
2671
|
continue;
|
|
2670
2672
|
channel.detune += detuneChange;
|
package/script/midy-GMLite.js
CHANGED
|
@@ -573,8 +573,8 @@ class MidyGMLite extends EventTarget {
|
|
|
573
573
|
this.voiceCache.clear();
|
|
574
574
|
this.realtimeVoiceCache.clear();
|
|
575
575
|
const channels = this.channels;
|
|
576
|
-
for (let
|
|
577
|
-
channels[
|
|
576
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
577
|
+
channels[ch].scheduledNotes = [];
|
|
578
578
|
this.resetChannelStates(i);
|
|
579
579
|
}
|
|
580
580
|
}
|
|
@@ -765,8 +765,8 @@ class MidyGMLite extends EventTarget {
|
|
|
765
765
|
}
|
|
766
766
|
stopNotes(velocity, force, scheduleTime) {
|
|
767
767
|
const channels = this.channels;
|
|
768
|
-
for (let
|
|
769
|
-
this.stopChannelNotes(
|
|
768
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
769
|
+
this.stopChannelNotes(ch, velocity, force, scheduleTime);
|
|
770
770
|
}
|
|
771
771
|
const stopPromise = Promise.all(this.notePromises);
|
|
772
772
|
this.notePromises = [];
|
|
@@ -1621,9 +1621,9 @@ class MidyGMLite extends EventTarget {
|
|
|
1621
1621
|
if (!(0 <= scheduleTime))
|
|
1622
1622
|
scheduleTime = this.audioContext.currentTime;
|
|
1623
1623
|
this.mode = "GM1";
|
|
1624
|
-
for (let
|
|
1625
|
-
this.allSoundOff(
|
|
1626
|
-
const channel = channels[
|
|
1624
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
1625
|
+
this.allSoundOff(ch, 0, scheduleTime);
|
|
1626
|
+
const channel = channels[ch];
|
|
1627
1627
|
channel.isDrum = false;
|
|
1628
1628
|
}
|
|
1629
1629
|
channels[9].isDrum = true;
|
package/script/midy.d.ts
CHANGED
|
@@ -68,7 +68,7 @@ export class Midy extends EventTarget {
|
|
|
68
68
|
lowerMPEMembers: number;
|
|
69
69
|
upperMPEMembers: number;
|
|
70
70
|
mpeState: {
|
|
71
|
-
|
|
71
|
+
channelToNotes: Map<any, any>;
|
|
72
72
|
noteToChannel: Map<any, any>;
|
|
73
73
|
};
|
|
74
74
|
audioContext: any;
|
|
@@ -146,6 +146,7 @@ export class Midy extends EventTarget {
|
|
|
146
146
|
currentTime(): number;
|
|
147
147
|
processScheduledNotes(channel: any, callback: any): Promise<void>;
|
|
148
148
|
processActiveNotes(channel: any, scheduleTime: any, callback: any): Promise<void>;
|
|
149
|
+
applyToMPEChannels(channelNumber: any, fn: any): void;
|
|
149
150
|
createConvolutionReverbImpulse(audioContext: any, decay: any, preDecay: any): any;
|
|
150
151
|
createConvolutionReverb(audioContext: any, impulse: any): {
|
|
151
152
|
input: any;
|
|
@@ -211,10 +212,13 @@ export class Midy extends EventTarget {
|
|
|
211
212
|
handleMessage(data: any, scheduleTime: any): void;
|
|
212
213
|
activeSensing(): void;
|
|
213
214
|
setPolyphonicKeyPressure(channelNumber: any, noteNumber: any, pressure: any, scheduleTime: any): void;
|
|
214
|
-
setProgramChange(channelNumber: any, programNumber: any,
|
|
215
|
+
setProgramChange(channelNumber: any, programNumber: any, scheduleTime: any): void;
|
|
216
|
+
applyProgramChange(channelNumber: any, programNumber: any, _scheduleTime: any): void;
|
|
215
217
|
setChannelPressure(channelNumber: any, value: any, scheduleTime: any): void;
|
|
218
|
+
applyChannelPressure(channelNumber: any, value: any, scheduleTime: any): void;
|
|
216
219
|
handlePitchBendMessage(channelNumber: any, lsb: any, msb: any, scheduleTime: any): void;
|
|
217
220
|
setPitchBend(channelNumber: any, value: any, scheduleTime: any): void;
|
|
221
|
+
applyPitchBend(channelNumber: any, value: any, scheduleTime: any): void;
|
|
218
222
|
setModLfoToPitch(channel: any, note: any, scheduleTime: any): void;
|
|
219
223
|
setVibLfoToPitch(channel: any, note: any, scheduleTime: any): void;
|
|
220
224
|
setModLfoToFilterFc(channel: any, note: any, scheduleTime: any): void;
|
package/script/midy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"midy.d.ts","sourceRoot":"","sources":["../src/midy.js"],"names":[],"mappings":"AAgLA;IA+DE;;;;;;;;;;;;;;;;;MAiBE;IAEF,+BAqBC;IAlGD,gCAAgC;IAChC,aAAa;IACb,yBAAqB;IACrB,2BAAuB;IACvB;;;;MAIE;IACF;;;;;;MAME;IACF,oBAAiB;IACjB,qBAAmB;IACnB,kBAAc;IACd,0BAAsB;IACtB,+BAA6B;IAC7B,0BAAwB;IACxB,kBAAc;IACd,mBAAiB;IACjB,kBAAc;IACd,mBAAe;IACf,kBAAgB;IAChB,0BAAuD;IACvD,4BAAyB;IACzB,0BAAuB;IACvB,kCAA+B;IAC/B,mBAAkB;IAClB,mBAAkB;IAClB,kBAAiB;IACjB,oBAAmB;IACnB,mBAAkB;IAClB,iCAEG;IACH,cAAU;IACV,cAAa;IACb,kBAAc;IACd,iBAAY;IACZ,gBAAc;IACd,oBAAkB;IAClB,sBAAwB;IACxB,2BAAqC;IACrC,+BAEE;IACF,oBAAmB;IACnB,wBAAoB;IACpB,wBAAoB;IACpB;;;MAGE;IAuBA,kBAAgC;IAChC,kBAA8C;IAC9C,eAAwD;IACxD,qBAGE;IACF,uBAAmD;IACnD;;;;;;;;;;;;MAA2D;IAC3D,6BAA+D;IAC/D,kCAAyE;IACzE,gBAAiD;IACjD;;;kBAAyD;IACzD;;;;;;;;MAAyD;IAQ3D,mCASC;IAED,2DAYC;IAED,yCAmBC;IAED,oCASC;IAED,sBAoCC;IAED,8DAeC;IAED;;;;MAeC;IAED,sCAMC;IAED,yCAqBC;IAED,kDASC;IAED,mDAIC;IAED,2FAWC;IAED,gEAiEC;IAED,mCASC;IAED,uBAUC;IAED,yDAqCC;IAED,2BA0FC;IAED,uDAEC;IAED,wDAEC;IAED,qCAMC;IAED;;;MAqFC;IAED,kGAeC;IAED,mGAeC;IAED,wEAQC;IAED,uBAMC;IAED,sBAIC;IAED,uBAMC;IAED,wBAIC;IAED,0BAKC;IAED,8BAMC;IAED,wBAYC;IAED,sBAIC;IAED,kEAWC;IAED,kFAYC;IAED,kFAuBC;IAED;;;;MASC;IAED,gFAUC;IAED,mFAYC;IAED,sGAcC;IAID;;;MA8BC;IAED;;;kBA6BC;IAED;;;;;;;;MA0CC;IAED,8BAEC;IAED,8BAEC;IAED,4BAEC;IAED,qCAkBC;IAED,2DAQC;IAED,oDAEC;IAED,6CAKC;IAED,mDAMC;IAED,2CAoDC;IAED,8EASC;IAED,oEAkBC;IAED,sEAgBC;IAED,4DASC;IAED,6EAOC;IAED,qDAkBC;IAED,6CAIC;IAED,8EAqBC;IAED,oEAiCC;IAED,kEAqBC;IAED,+DAcC;IAED,4GAkCC;IAED,uEAoEC;IAED,0EAiBC;IAED,8EAoBC;IAED,oEAuBC;IAED,
|
|
1
|
+
{"version":3,"file":"midy.d.ts","sourceRoot":"","sources":["../src/midy.js"],"names":[],"mappings":"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"}
|
package/script/midy.js
CHANGED
|
@@ -520,7 +520,7 @@ class Midy extends EventTarget {
|
|
|
520
520
|
configurable: true,
|
|
521
521
|
writable: true,
|
|
522
522
|
value: {
|
|
523
|
-
|
|
523
|
+
channelToNotes: new Map(),
|
|
524
524
|
noteToChannel: new Map(),
|
|
525
525
|
}
|
|
526
526
|
});
|
|
@@ -771,9 +771,9 @@ class Midy extends EventTarget {
|
|
|
771
771
|
this.voiceCache.clear();
|
|
772
772
|
this.realtimeVoiceCache.clear();
|
|
773
773
|
const channels = this.channels;
|
|
774
|
-
for (let
|
|
775
|
-
channels[
|
|
776
|
-
this.resetChannelStates(
|
|
774
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
775
|
+
channels[ch].scheduledNotes = [];
|
|
776
|
+
this.resetChannelStates(ch);
|
|
777
777
|
}
|
|
778
778
|
}
|
|
779
779
|
updateStates(queueIndex, nextQueueIndex) {
|
|
@@ -1108,6 +1108,22 @@ class Midy extends EventTarget {
|
|
|
1108
1108
|
}
|
|
1109
1109
|
await Promise.all(tasks);
|
|
1110
1110
|
}
|
|
1111
|
+
applyToMPEChannels(channelNumber, fn) {
|
|
1112
|
+
fn(channelNumber);
|
|
1113
|
+
const channel = this.channels[channelNumber];
|
|
1114
|
+
if (!channel.isMPEManager)
|
|
1115
|
+
return;
|
|
1116
|
+
if (channelNumber === 0) {
|
|
1117
|
+
for (let ch = 1; ch <= this.lowerMPEMembers; ch++) {
|
|
1118
|
+
fn(ch);
|
|
1119
|
+
}
|
|
1120
|
+
}
|
|
1121
|
+
else if (channelNumber === 15) {
|
|
1122
|
+
for (let ch = 15 - this.upperMPEMembers; ch <= 14; ch++) {
|
|
1123
|
+
fn(ch);
|
|
1124
|
+
}
|
|
1125
|
+
}
|
|
1126
|
+
}
|
|
1111
1127
|
createConvolutionReverbImpulse(audioContext, decay, preDecay) {
|
|
1112
1128
|
const sampleRate = audioContext.sampleRate;
|
|
1113
1129
|
const length = sampleRate * decay;
|
|
@@ -1680,7 +1696,10 @@ class Midy extends EventTarget {
|
|
|
1680
1696
|
async noteOn(channelNumber, noteNumber, velocity, startTime) {
|
|
1681
1697
|
if (this.mpeEnabled) {
|
|
1682
1698
|
const note = await this.startNote(channelNumber, noteNumber, velocity, startTime);
|
|
1683
|
-
this.mpeState.
|
|
1699
|
+
if (!this.mpeState.channelToNotes.has(channelNumber)) {
|
|
1700
|
+
this.mpeState.channelToNotes.set(channelNumber, new Set());
|
|
1701
|
+
}
|
|
1702
|
+
this.mpeState.channelToNotes.get(channelNumber).add(note.index);
|
|
1684
1703
|
this.mpeState.noteToChannel.set(note.index, channelNumber);
|
|
1685
1704
|
}
|
|
1686
1705
|
else {
|
|
@@ -1760,17 +1779,30 @@ class Midy extends EventTarget {
|
|
|
1760
1779
|
}
|
|
1761
1780
|
noteOff(channelNumber, noteNumber, velocity, endTime, force) {
|
|
1762
1781
|
if (this.mpeEnabled) {
|
|
1763
|
-
const
|
|
1764
|
-
if (
|
|
1782
|
+
const noteIndices = this.mpeState.channelToNotes.get(channelNumber);
|
|
1783
|
+
if (!noteIndices || noteIndices.size === 0)
|
|
1765
1784
|
return;
|
|
1766
1785
|
const channel = this.channels[channelNumber];
|
|
1767
|
-
|
|
1786
|
+
let targetNoteIndex = undefined;
|
|
1787
|
+
for (const noteIndex of noteIndices) {
|
|
1788
|
+
const note = channel.scheduledNotes[noteIndex];
|
|
1789
|
+
if (note && note.noteNumber === noteNumber && !note.ending) {
|
|
1790
|
+
targetNoteIndex = noteIndex;
|
|
1791
|
+
break;
|
|
1792
|
+
}
|
|
1793
|
+
}
|
|
1794
|
+
if (targetNoteIndex === undefined)
|
|
1795
|
+
return;
|
|
1796
|
+
const note = channel.scheduledNotes[targetNoteIndex];
|
|
1768
1797
|
note.ending = true;
|
|
1769
1798
|
const promise = note.ready.then(() => {
|
|
1770
1799
|
return this.releaseNote(channel, note, endTime);
|
|
1771
1800
|
});
|
|
1772
|
-
|
|
1773
|
-
|
|
1801
|
+
noteIndices.delete(targetNoteIndex);
|
|
1802
|
+
if (noteIndices.size === 0) {
|
|
1803
|
+
this.mpeState.channelToNotes.delete(channelNumber);
|
|
1804
|
+
}
|
|
1805
|
+
this.mpeState.noteToChannel.delete(targetNoteIndex);
|
|
1774
1806
|
return promise;
|
|
1775
1807
|
}
|
|
1776
1808
|
else {
|
|
@@ -1907,7 +1939,12 @@ class Midy extends EventTarget {
|
|
|
1907
1939
|
});
|
|
1908
1940
|
this.applyVoiceParams(channel, 10, scheduleTime);
|
|
1909
1941
|
}
|
|
1910
|
-
setProgramChange(channelNumber, programNumber,
|
|
1942
|
+
setProgramChange(channelNumber, programNumber, scheduleTime) {
|
|
1943
|
+
this.applyToMPEChannels(channelNumber, (ch) => {
|
|
1944
|
+
this.applyProgramChange(ch, programNumber, scheduleTime);
|
|
1945
|
+
});
|
|
1946
|
+
}
|
|
1947
|
+
applyProgramChange(channelNumber, programNumber, _scheduleTime) {
|
|
1911
1948
|
const channel = this.channels[channelNumber];
|
|
1912
1949
|
channel.programNumber = programNumber;
|
|
1913
1950
|
if (this.mode === "GM2") {
|
|
@@ -1923,6 +1960,11 @@ class Midy extends EventTarget {
|
|
|
1923
1960
|
}
|
|
1924
1961
|
}
|
|
1925
1962
|
setChannelPressure(channelNumber, value, scheduleTime) {
|
|
1963
|
+
this.applyToMPEChannels(channelNumber, (ch) => {
|
|
1964
|
+
this.applyChannelPressure(ch, value, scheduleTime);
|
|
1965
|
+
});
|
|
1966
|
+
}
|
|
1967
|
+
applyChannelPressure(channelNumber, value, scheduleTime) {
|
|
1926
1968
|
if (!(0 <= scheduleTime))
|
|
1927
1969
|
scheduleTime = this.audioContext.currentTime;
|
|
1928
1970
|
const channel = this.channels[channelNumber];
|
|
@@ -1947,6 +1989,11 @@ class Midy extends EventTarget {
|
|
|
1947
1989
|
this.setPitchBend(channelNumber, pitchBend, scheduleTime);
|
|
1948
1990
|
}
|
|
1949
1991
|
setPitchBend(channelNumber, value, scheduleTime) {
|
|
1992
|
+
this.applyToMPEChannels(channelNumber, (ch) => {
|
|
1993
|
+
this.applyPitchBend(ch, value, scheduleTime);
|
|
1994
|
+
});
|
|
1995
|
+
}
|
|
1996
|
+
applyPitchBend(channelNumber, value, scheduleTime) {
|
|
1950
1997
|
const channel = this.channels[channelNumber];
|
|
1951
1998
|
if (channel.isDrum)
|
|
1952
1999
|
return;
|
|
@@ -2248,19 +2295,9 @@ class Midy extends EventTarget {
|
|
|
2248
2295
|
return handlers;
|
|
2249
2296
|
}
|
|
2250
2297
|
setControlChange(channelNumber, controllerType, value, scheduleTime) {
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
}
|
|
2255
|
-
else if (channel.isMPEManager) {
|
|
2256
|
-
channel.state[controllerType] = value / 127;
|
|
2257
|
-
for (const memberChannel of this.mpeState.channelToNote.keys()) {
|
|
2258
|
-
this.applyControlChange(memberChannel, controllerType, value, scheduleTime);
|
|
2259
|
-
}
|
|
2260
|
-
}
|
|
2261
|
-
else {
|
|
2262
|
-
this.applyControlChange(channelNumber, controllerType, value, scheduleTime);
|
|
2263
|
-
}
|
|
2298
|
+
this.applyToMPEChannels(channelNumber, (ch) => {
|
|
2299
|
+
this.applyControlChange(ch, controllerType, value, scheduleTime);
|
|
2300
|
+
});
|
|
2264
2301
|
}
|
|
2265
2302
|
applyControlChange(channelNumber, controllerType, value, scheduleTime) {
|
|
2266
2303
|
const handler = this.controlChangeHandlers[controllerType];
|
|
@@ -2807,11 +2844,12 @@ class Midy extends EventTarget {
|
|
|
2807
2844
|
const lowerEnd = this.lowerMPEMembers;
|
|
2808
2845
|
const upperStart = 16 - this.upperMPEMembers;
|
|
2809
2846
|
const upperEnd = 14;
|
|
2810
|
-
|
|
2811
|
-
|
|
2812
|
-
const
|
|
2813
|
-
|
|
2814
|
-
|
|
2847
|
+
const { channels, lowerMPEMembers, upperMPEMembers, mpeEnabled } = this;
|
|
2848
|
+
for (let ch = 0; ch < 16; ch++) {
|
|
2849
|
+
const isLower = lowerMPEMembers && lowerStart <= ch && ch <= lowerEnd;
|
|
2850
|
+
const isUpper = upperMPEMembers && upperStart <= ch && ch <= upperEnd;
|
|
2851
|
+
channels[ch].isMPEMember = mpeEnabled && (isLower || isUpper);
|
|
2852
|
+
channels[ch].isMPEManager = mpeEnabled && (ch === 0 || ch === 15);
|
|
2815
2853
|
}
|
|
2816
2854
|
}
|
|
2817
2855
|
setRPGMakerLoop(_channelNumber, _value, scheduleTime) {
|
|
@@ -2894,6 +2932,8 @@ class Midy extends EventTarget {
|
|
|
2894
2932
|
return this.stopActiveNotes(channelNumber, 0, false, scheduleTime);
|
|
2895
2933
|
}
|
|
2896
2934
|
omniOff(channelNumber, value, scheduleTime) {
|
|
2935
|
+
if (this.mpeEnabled)
|
|
2936
|
+
return;
|
|
2897
2937
|
this.allNotesOff(channelNumber, value, scheduleTime);
|
|
2898
2938
|
}
|
|
2899
2939
|
omniOn(channelNumber, value, scheduleTime) {
|
|
@@ -2952,9 +2992,9 @@ class Midy extends EventTarget {
|
|
|
2952
2992
|
if (!(0 <= scheduleTime))
|
|
2953
2993
|
scheduleTime = this.audioContext.currentTime;
|
|
2954
2994
|
this.mode = "GM1";
|
|
2955
|
-
for (let
|
|
2956
|
-
this.applyAllSoundOff(
|
|
2957
|
-
const channel = channels[
|
|
2995
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
2996
|
+
this.applyAllSoundOff(ch, 0, scheduleTime);
|
|
2997
|
+
const channel = channels[ch];
|
|
2958
2998
|
channel.bankMSB = 0;
|
|
2959
2999
|
channel.bankLSB = 0;
|
|
2960
3000
|
channel.isDrum = false;
|
|
@@ -2967,9 +3007,9 @@ class Midy extends EventTarget {
|
|
|
2967
3007
|
if (!(0 <= scheduleTime))
|
|
2968
3008
|
scheduleTime = this.audioContext.currentTime;
|
|
2969
3009
|
this.mode = "GM2";
|
|
2970
|
-
for (let
|
|
2971
|
-
this.applyAllSoundOff(
|
|
2972
|
-
const channel = channels[
|
|
3010
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
3011
|
+
this.applyAllSoundOff(ch, 0, scheduleTime);
|
|
3012
|
+
const channel = channels[ch];
|
|
2973
3013
|
channel.bankMSB = 121;
|
|
2974
3014
|
channel.bankLSB = 0;
|
|
2975
3015
|
channel.isDrum = false;
|
|
@@ -3049,8 +3089,9 @@ class Midy extends EventTarget {
|
|
|
3049
3089
|
const next = value;
|
|
3050
3090
|
this.masterFineTuning = next;
|
|
3051
3091
|
const detuneChange = next - prev;
|
|
3052
|
-
|
|
3053
|
-
|
|
3092
|
+
const channels = this.channels;
|
|
3093
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
3094
|
+
const channel = channels[ch];
|
|
3054
3095
|
if (channel.isDrum)
|
|
3055
3096
|
continue;
|
|
3056
3097
|
channel.detune += detuneChange;
|
|
@@ -3066,8 +3107,9 @@ class Midy extends EventTarget {
|
|
|
3066
3107
|
const next = value;
|
|
3067
3108
|
this.masterCoarseTuning = next;
|
|
3068
3109
|
const detuneChange = next - prev;
|
|
3069
|
-
|
|
3070
|
-
|
|
3110
|
+
const channels = this.channels;
|
|
3111
|
+
for (let ch = 0; ch < channels.length; ch++) {
|
|
3112
|
+
const channel = channels[ch];
|
|
3071
3113
|
if (channel.isDrum)
|
|
3072
3114
|
continue;
|
|
3073
3115
|
channel.detune += detuneChange;
|