@marmooo/midy 0.2.0 → 0.2.2
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/LICENSE +201 -0
- package/README.md +118 -0
- package/esm/midy-GM1.d.ts +12 -10
- package/esm/midy-GM1.d.ts.map +1 -1
- package/esm/midy-GM1.js +85 -78
- package/esm/midy-GM2.d.ts +40 -22
- package/esm/midy-GM2.d.ts.map +1 -1
- package/esm/midy-GM2.js +377 -194
- package/esm/midy-GMLite.d.ts +9 -7
- package/esm/midy-GMLite.d.ts.map +1 -1
- package/esm/midy-GMLite.js +64 -61
- package/esm/midy.d.ts +39 -21
- package/esm/midy.d.ts.map +1 -1
- package/esm/midy.js +444 -252
- package/package.json +1 -1
- package/script/midy-GM1.d.ts +12 -10
- package/script/midy-GM1.d.ts.map +1 -1
- package/script/midy-GM1.js +85 -78
- package/script/midy-GM2.d.ts +40 -22
- package/script/midy-GM2.d.ts.map +1 -1
- package/script/midy-GM2.js +377 -194
- package/script/midy-GMLite.d.ts +9 -7
- package/script/midy-GMLite.d.ts.map +1 -1
- package/script/midy-GMLite.js +64 -61
- package/script/midy.d.ts +39 -21
- package/script/midy.d.ts.map +1 -1
- package/script/midy.js +444 -252
package/script/midy-GMLite.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export class MidyGMLite {
|
|
2
2
|
static channelSettings: {
|
|
3
3
|
currentBufferSource: null;
|
|
4
|
+
detune: number;
|
|
4
5
|
program: number;
|
|
5
6
|
bank: number;
|
|
6
7
|
dataMSB: number;
|
|
@@ -89,11 +90,13 @@ export class MidyGMLite {
|
|
|
89
90
|
getActiveNotes(channel: any, time: any): Map<any, any>;
|
|
90
91
|
getActiveNote(noteList: any, time: any): any;
|
|
91
92
|
cbToRatio(cb: any): number;
|
|
93
|
+
rateToCent(rate: any): number;
|
|
94
|
+
centToRate(cent: any): number;
|
|
92
95
|
centToHz(cent: any): number;
|
|
93
|
-
|
|
96
|
+
calcChannelDetune(channel: any): number;
|
|
97
|
+
updateDetune(channel: any): void;
|
|
94
98
|
setVolumeEnvelope(note: any): void;
|
|
95
|
-
|
|
96
|
-
setPitch(channel: any, note: any): void;
|
|
99
|
+
setPitchEnvelope(note: any): void;
|
|
97
100
|
clampCutoffFrequency(frequency: any): number;
|
|
98
101
|
setFilterEnvelope(note: any): void;
|
|
99
102
|
startModulation(channel: any, note: any, startTime: any): void;
|
|
@@ -109,8 +112,8 @@ export class MidyGMLite {
|
|
|
109
112
|
handlePitchBendMessage(channelNumber: any, lsb: any, msb: any): void;
|
|
110
113
|
setPitchBend(channelNumber: any, value: any): void;
|
|
111
114
|
setModLfoToPitch(channel: any, note: any): void;
|
|
112
|
-
setModLfoToVolume(note: any): void;
|
|
113
115
|
setModLfoToFilterFc(note: any): void;
|
|
116
|
+
setModLfoToVolume(note: any): void;
|
|
114
117
|
setDelayModLFO(note: any): void;
|
|
115
118
|
setFreqModLFO(note: any): void;
|
|
116
119
|
createVoiceParamsHandlers(): {
|
|
@@ -125,7 +128,7 @@ export class MidyGMLite {
|
|
|
125
128
|
delayVibLFO: (_channel: any, _note: any, _prevValue: any) => void;
|
|
126
129
|
freqVibLFO: (_channel: any, _note: any, _prevValue: any) => void;
|
|
127
130
|
};
|
|
128
|
-
getControllerState(channel: any, noteNumber: any, velocity: any): Float32Array
|
|
131
|
+
getControllerState(channel: any, noteNumber: any, velocity: any): Float32Array<any>;
|
|
129
132
|
applyVoiceParams(channel: any, controllerType: any): void;
|
|
130
133
|
createControlChangeHandlers(): {
|
|
131
134
|
1: (channelNumber: any, modulation: any) => void;
|
|
@@ -159,7 +162,6 @@ export class MidyGMLite {
|
|
|
159
162
|
setRPNMSB(channelNumber: any, value: any): void;
|
|
160
163
|
setRPNLSB(channelNumber: any, value: any): void;
|
|
161
164
|
dataEntryMSB(channelNumber: any, value: any): void;
|
|
162
|
-
updateDetune(channel: any, detune: any): void;
|
|
163
165
|
handlePitchBendRangeRPN(channelNumber: any): void;
|
|
164
166
|
setPitchBendRange(channelNumber: any, pitchWheelSensitivity: any): void;
|
|
165
167
|
allSoundOff(channelNumber: any): Promise<void>;
|
|
@@ -178,7 +180,7 @@ declare class Note {
|
|
|
178
180
|
constructor(noteNumber: any, velocity: any, startTime: any, voice: any, voiceParams: any);
|
|
179
181
|
bufferSource: any;
|
|
180
182
|
filterNode: any;
|
|
181
|
-
|
|
183
|
+
volumeEnvelopeNode: any;
|
|
182
184
|
volumeDepth: any;
|
|
183
185
|
modulationLFO: any;
|
|
184
186
|
modulationDepth: any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"midy-GMLite.d.ts","sourceRoot":"","sources":["../src/midy-GMLite.js"],"names":[],"mappings":"AAmFA;IAoBE
|
|
1
|
+
{"version":3,"file":"midy-GMLite.d.ts","sourceRoot":"","sources":["../src/midy-GMLite.js"],"names":[],"mappings":"AAmFA;IAoBE;;;;;;;;;MASE;IAEF,+BAQC;IAtCD,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;IAClB,iCAA8B;IAc5B,kBAAgC;IAChC,gBAA4C;IAC5C;;;;;;;;;;;MAA2D;IAC3D;;;;;;;;;;;;;MAA+D;IAC/D,gBAAiD;IAKnD,4BAMC;IAED,mCAWC;IAED,gDAMC;IAED,sCASC;IAED;;;;MAeC;IAED,yCAUC;IAED,6DA2BC;IAED,iEAUC;IAED,2EA+CC;IAED,mCAOC;IAED,0BAkDC;IAED,uDAEC;IAED,wDAEC;IAED;;;MAgEC;IAED,+EAmBC;IAED,qDAKC;IAED,uBAKC;IAED,aAGC;IAED,cAKC;IAED,wBAIC;IAED,0BAKC;IAED,wBAOC;IAED,sBAGC;IAED,uDASC;IAED,6CAQC;IAED,2BAEC;IAED,8BAEC;IAED,8BAEC;IAED,4BAEC;IAED,wCAIC;IAED,iCAWC;IAED,mCAgBC;IAED,kCAqBC;IAED,6CAIC;IAED,mCAuBC;IAED,+DAoBC;IAED,gHA2BC;IAED,kGAgDC;IAED,0EAGC;IAED,qFAwBC;IAED,6HAuBC;IAED,0FAGC;IAED,kEAeC;IAED,gFAiBC;IAED,4DAGC;IAED,qEAGC;IAED,mDASC;IAED,gDASC;IAED,qCAMC;IAED,mCAQC;IAED,gCAOC;IAED,+BAMC;IAED;;;;;;;;;;;MAqBC;IAED,oFAMC;IAED,0DA6CC;IAED;;;;;;;;;;;;;MAeC;IAED,+EASC;IAED,qCAiBC;IAED,8DAKC;IACD,iDAIC;IAED;;;MAMC;IAED,2CAIC;IAED,yDAIC;IAED,mDAGC;IAED,wCAWC;IAED,sDAKC;IAED,kFAeC;IAED,oCAYC;IAED,gDAEC;IAED,gDAEC;IAED,mDAGC;IAED,kDAKC;IAED,wEAOC;IAED,+CAEC;IAED,8CAqBC;IAED,+CAEC;IAED,4DAgBC;IAED,oBAMC;IAED,yDAaC;IAED,yCAGC;IAED,mCAQC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AArtCD;IAQE,0FAMC;IAbD,kBAAa;IACb,gBAAW;IACX,wBAAmB;IACnB,iBAAY;IACZ,mBAAc;IACd,qBAAgB;IAGd,gBAA4B;IAC5B,cAAwB;IACxB,eAA0B;IAC1B,WAAkB;IAClB,iBAA8B;CAEjC"}
|
package/script/midy-GMLite.js
CHANGED
|
@@ -17,7 +17,7 @@ class Note {
|
|
|
17
17
|
writable: true,
|
|
18
18
|
value: void 0
|
|
19
19
|
});
|
|
20
|
-
Object.defineProperty(this, "
|
|
20
|
+
Object.defineProperty(this, "volumeEnvelopeNode", {
|
|
21
21
|
enumerable: true,
|
|
22
22
|
configurable: true,
|
|
23
23
|
writable: true,
|
|
@@ -584,14 +584,33 @@ class MidyGMLite {
|
|
|
584
584
|
cbToRatio(cb) {
|
|
585
585
|
return Math.pow(10, cb / 200);
|
|
586
586
|
}
|
|
587
|
+
rateToCent(rate) {
|
|
588
|
+
return 1200 * Math.log2(rate);
|
|
589
|
+
}
|
|
590
|
+
centToRate(cent) {
|
|
591
|
+
return Math.pow(2, cent / 1200);
|
|
592
|
+
}
|
|
587
593
|
centToHz(cent) {
|
|
588
|
-
return 8.176 *
|
|
594
|
+
return 8.176 * this.centToRate(cent);
|
|
589
595
|
}
|
|
590
|
-
|
|
596
|
+
calcChannelDetune(channel) {
|
|
591
597
|
const pitchWheel = channel.state.pitchWheel * 2 - 1;
|
|
592
|
-
const pitchWheelSensitivity = channel.state.pitchWheelSensitivity *
|
|
598
|
+
const pitchWheelSensitivity = channel.state.pitchWheelSensitivity * 12800;
|
|
593
599
|
return pitchWheel * pitchWheelSensitivity;
|
|
594
600
|
}
|
|
601
|
+
updateDetune(channel) {
|
|
602
|
+
const now = this.audioContext.currentTime;
|
|
603
|
+
channel.scheduledNotes.forEach((noteList) => {
|
|
604
|
+
for (let i = 0; i < noteList.length; i++) {
|
|
605
|
+
const note = noteList[i];
|
|
606
|
+
if (!note)
|
|
607
|
+
continue;
|
|
608
|
+
note.bufferSource.detune
|
|
609
|
+
.cancelScheduledValues(now)
|
|
610
|
+
.setValueAtTime(channel.detune, now);
|
|
611
|
+
}
|
|
612
|
+
});
|
|
613
|
+
}
|
|
595
614
|
setVolumeEnvelope(note) {
|
|
596
615
|
const now = this.audioContext.currentTime;
|
|
597
616
|
const { voiceParams, startTime } = note;
|
|
@@ -601,7 +620,7 @@ class MidyGMLite {
|
|
|
601
620
|
const volAttack = volDelay + voiceParams.volAttack;
|
|
602
621
|
const volHold = volAttack + voiceParams.volHold;
|
|
603
622
|
const volDecay = volHold + voiceParams.volDecay;
|
|
604
|
-
note.
|
|
623
|
+
note.volumeEnvelopeNode.gain
|
|
605
624
|
.cancelScheduledValues(now)
|
|
606
625
|
.setValueAtTime(0, startTime)
|
|
607
626
|
.setValueAtTime(1e-6, volDelay) // exponentialRampToValueAtTime() requires a non-zero value
|
|
@@ -609,32 +628,28 @@ class MidyGMLite {
|
|
|
609
628
|
.setValueAtTime(attackVolume, volHold)
|
|
610
629
|
.linearRampToValueAtTime(sustainVolume, volDecay);
|
|
611
630
|
}
|
|
612
|
-
|
|
631
|
+
setPitchEnvelope(note) {
|
|
613
632
|
const now = this.audioContext.currentTime;
|
|
633
|
+
const { voiceParams } = note;
|
|
634
|
+
const baseRate = voiceParams.playbackRate;
|
|
614
635
|
note.bufferSource.playbackRate
|
|
615
636
|
.cancelScheduledValues(now)
|
|
616
|
-
.setValueAtTime(
|
|
617
|
-
|
|
618
|
-
setPitch(channel, note) {
|
|
619
|
-
const now = this.audioContext.currentTime;
|
|
620
|
-
const { startTime } = note;
|
|
621
|
-
const basePitch = this.calcSemitoneOffset(channel) * 100;
|
|
622
|
-
note.bufferSource.detune
|
|
623
|
-
.cancelScheduledValues(now)
|
|
624
|
-
.setValueAtTime(basePitch, startTime);
|
|
625
|
-
const modEnvToPitch = note.voiceParams.modEnvToPitch;
|
|
637
|
+
.setValueAtTime(baseRate, now);
|
|
638
|
+
const modEnvToPitch = voiceParams.modEnvToPitch;
|
|
626
639
|
if (modEnvToPitch === 0)
|
|
627
640
|
return;
|
|
641
|
+
const basePitch = this.rateToCent(baseRate);
|
|
628
642
|
const peekPitch = basePitch + modEnvToPitch;
|
|
643
|
+
const peekRate = this.centToRate(peekPitch);
|
|
629
644
|
const modDelay = startTime + voiceParams.modDelay;
|
|
630
645
|
const modAttack = modDelay + voiceParams.modAttack;
|
|
631
646
|
const modHold = modAttack + voiceParams.modHold;
|
|
632
647
|
const modDecay = modHold + voiceParams.modDecay;
|
|
633
|
-
note.bufferSource.
|
|
634
|
-
.setValueAtTime(
|
|
635
|
-
.exponentialRampToValueAtTime(
|
|
636
|
-
.setValueAtTime(
|
|
637
|
-
.linearRampToValueAtTime(
|
|
648
|
+
note.bufferSource.playbackRate
|
|
649
|
+
.setValueAtTime(baseRate, modDelay)
|
|
650
|
+
.exponentialRampToValueAtTime(peekRate, modAttack)
|
|
651
|
+
.setValueAtTime(peekRate, modHold)
|
|
652
|
+
.linearRampToValueAtTime(baseRate, modDecay);
|
|
638
653
|
}
|
|
639
654
|
clampCutoffFrequency(frequency) {
|
|
640
655
|
const minFrequency = 20; // min Hz of initialFilterFc
|
|
@@ -681,27 +696,26 @@ class MidyGMLite {
|
|
|
681
696
|
note.modulationLFO.connect(note.modulationDepth);
|
|
682
697
|
note.modulationDepth.connect(note.bufferSource.detune);
|
|
683
698
|
note.modulationLFO.connect(note.volumeDepth);
|
|
684
|
-
note.volumeDepth.connect(note.
|
|
699
|
+
note.volumeDepth.connect(note.volumeEnvelopeNode.gain);
|
|
685
700
|
}
|
|
686
701
|
async createNote(channel, voice, noteNumber, velocity, startTime, isSF3) {
|
|
687
702
|
const state = channel.state;
|
|
688
703
|
const voiceParams = voice.getAllParams(state.array);
|
|
689
704
|
const note = new Note(noteNumber, velocity, startTime, voice, voiceParams);
|
|
690
705
|
note.bufferSource = await this.createNoteBufferNode(voiceParams, isSF3);
|
|
691
|
-
note.
|
|
706
|
+
note.volumeEnvelopeNode = new GainNode(this.audioContext);
|
|
692
707
|
note.filterNode = new BiquadFilterNode(this.audioContext, {
|
|
693
708
|
type: "lowpass",
|
|
694
709
|
Q: voiceParams.initialFilterQ / 10, // dB
|
|
695
710
|
});
|
|
696
711
|
this.setVolumeEnvelope(note);
|
|
697
712
|
this.setFilterEnvelope(note);
|
|
698
|
-
this.
|
|
713
|
+
this.setPitchEnvelope(note);
|
|
699
714
|
if (0 < state.modulationDepth) {
|
|
700
|
-
this.setPitch(channel, note);
|
|
701
715
|
this.startModulation(channel, note, startTime);
|
|
702
716
|
}
|
|
703
717
|
note.bufferSource.connect(note.filterNode);
|
|
704
|
-
note.filterNode.connect(note.
|
|
718
|
+
note.filterNode.connect(note.volumeEnvelopeNode);
|
|
705
719
|
note.bufferSource.start(startTime);
|
|
706
720
|
return note;
|
|
707
721
|
}
|
|
@@ -717,8 +731,8 @@ class MidyGMLite {
|
|
|
717
731
|
if (!voice)
|
|
718
732
|
return;
|
|
719
733
|
const note = await this.createNote(channel, voice, noteNumber, velocity, startTime, isSF3);
|
|
720
|
-
note.
|
|
721
|
-
note.
|
|
734
|
+
note.volumeEnvelopeNode.connect(channel.gainL);
|
|
735
|
+
note.volumeEnvelopeNode.connect(channel.gainR);
|
|
722
736
|
const exclusiveClass = note.voiceParams.exclusiveClass;
|
|
723
737
|
if (exclusiveClass !== 0) {
|
|
724
738
|
if (this.exclusiveClassMap.has(exclusiveClass)) {
|
|
@@ -746,7 +760,7 @@ class MidyGMLite {
|
|
|
746
760
|
}
|
|
747
761
|
stopNote(endTime, stopTime, scheduledNotes, index) {
|
|
748
762
|
const note = scheduledNotes[index];
|
|
749
|
-
note.
|
|
763
|
+
note.volumeEnvelopeNode.gain
|
|
750
764
|
.cancelScheduledValues(endTime)
|
|
751
765
|
.linearRampToValueAtTime(0, stopTime);
|
|
752
766
|
note.ending = true;
|
|
@@ -757,8 +771,8 @@ class MidyGMLite {
|
|
|
757
771
|
note.bufferSource.onended = () => {
|
|
758
772
|
scheduledNotes[index] = null;
|
|
759
773
|
note.bufferSource.disconnect();
|
|
760
|
-
note.volumeNode.disconnect();
|
|
761
774
|
note.filterNode.disconnect();
|
|
775
|
+
note.volumeEnvelopeNode.disconnect();
|
|
762
776
|
if (note.modulationDepth) {
|
|
763
777
|
note.volumeDepth.disconnect();
|
|
764
778
|
note.modulationDepth.disconnect();
|
|
@@ -841,29 +855,22 @@ class MidyGMLite {
|
|
|
841
855
|
setPitchBend(channelNumber, value) {
|
|
842
856
|
const channel = this.channels[channelNumber];
|
|
843
857
|
const state = channel.state;
|
|
858
|
+
const prev = state.pitchWheel * 2 - 1;
|
|
859
|
+
const next = (value - 8192) / 8192;
|
|
844
860
|
state.pitchWheel = value / 16383;
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
this.
|
|
861
|
+
channel.detune += (next - prev) * state.pitchWheelSensitivity * 12800;
|
|
862
|
+
this.updateDetune(channel);
|
|
863
|
+
this.applyVoiceParams(channel, 14);
|
|
848
864
|
}
|
|
849
865
|
setModLfoToPitch(channel, note) {
|
|
850
866
|
const now = this.audioContext.currentTime;
|
|
851
867
|
const modLfoToPitch = note.voiceParams.modLfoToPitch;
|
|
852
|
-
const
|
|
868
|
+
const baseDepth = Math.abs(modLfoToPitch) +
|
|
853
869
|
channel.state.modulationDepth;
|
|
854
|
-
const
|
|
870
|
+
const modulationDepth = baseDepth * Math.sign(modLfoToPitch);
|
|
855
871
|
note.modulationDepth.gain
|
|
856
872
|
.cancelScheduledValues(now)
|
|
857
|
-
.setValueAtTime(modulationDepth
|
|
858
|
-
}
|
|
859
|
-
setModLfoToVolume(note) {
|
|
860
|
-
const now = this.audioContext.currentTime;
|
|
861
|
-
const modLfoToVolume = note.voiceParams.modLfoToVolume;
|
|
862
|
-
const volumeDepth = this.cbToRatio(Math.abs(modLfoToVolume)) - 1;
|
|
863
|
-
const volumeDepthSign = (0 < modLfoToVolume) ? 1 : -1;
|
|
864
|
-
note.volumeDepth.gain
|
|
865
|
-
.cancelScheduledValues(now)
|
|
866
|
-
.setValueAtTime(volumeDepth * volumeDepthSign, now);
|
|
873
|
+
.setValueAtTime(modulationDepth, now);
|
|
867
874
|
}
|
|
868
875
|
setModLfoToFilterFc(note) {
|
|
869
876
|
const now = this.audioContext.currentTime;
|
|
@@ -872,6 +879,15 @@ class MidyGMLite {
|
|
|
872
879
|
.cancelScheduledValues(now)
|
|
873
880
|
.setValueAtTime(modLfoToFilterFc, now);
|
|
874
881
|
}
|
|
882
|
+
setModLfoToVolume(note) {
|
|
883
|
+
const now = this.audioContext.currentTime;
|
|
884
|
+
const modLfoToVolume = note.voiceParams.modLfoToVolume;
|
|
885
|
+
const baseDepth = this.cbToRatio(Math.abs(modLfoToVolume)) - 1;
|
|
886
|
+
const volumeDepth = baseDepth * Math.sign(modLfoToVolume);
|
|
887
|
+
note.volumeDepth.gain
|
|
888
|
+
.cancelScheduledValues(now)
|
|
889
|
+
.setValueAtTime(volumeDepth, now);
|
|
890
|
+
}
|
|
875
891
|
setDelayModLFO(note) {
|
|
876
892
|
const now = this.audioContext.currentTime;
|
|
877
893
|
const startTime = note.startTime;
|
|
@@ -948,7 +964,7 @@ class MidyGMLite {
|
|
|
948
964
|
noteVoiceParams[key] = voiceParams[key];
|
|
949
965
|
}
|
|
950
966
|
this.setFilterEnvelope(channel, note);
|
|
951
|
-
this.
|
|
967
|
+
this.setPitchEnvelope(note);
|
|
952
968
|
}
|
|
953
969
|
else if (volumeEnvelopeKeySet.has(key)) {
|
|
954
970
|
if (appliedVolumeEnvelope)
|
|
@@ -1002,7 +1018,7 @@ class MidyGMLite {
|
|
|
1002
1018
|
note.modulationDepth.gain.setValueAtTime(channel.state.modulationDepth, now);
|
|
1003
1019
|
}
|
|
1004
1020
|
else {
|
|
1005
|
-
this.
|
|
1021
|
+
this.setPitchEnvelope(note);
|
|
1006
1022
|
this.startModulation(channel, note, now);
|
|
1007
1023
|
}
|
|
1008
1024
|
}
|
|
@@ -1097,20 +1113,6 @@ class MidyGMLite {
|
|
|
1097
1113
|
this.channels[channelNumber].dataMSB = value;
|
|
1098
1114
|
this.handleRPN(channelNumber);
|
|
1099
1115
|
}
|
|
1100
|
-
updateDetune(channel, detune) {
|
|
1101
|
-
const now = this.audioContext.currentTime;
|
|
1102
|
-
channel.scheduledNotes.forEach((noteList) => {
|
|
1103
|
-
for (let i = 0; i < noteList.length; i++) {
|
|
1104
|
-
const note = noteList[i];
|
|
1105
|
-
if (!note)
|
|
1106
|
-
continue;
|
|
1107
|
-
const { bufferSource } = note;
|
|
1108
|
-
bufferSource.detune
|
|
1109
|
-
.cancelScheduledValues(now)
|
|
1110
|
-
.setValueAtTime(detune, now);
|
|
1111
|
-
}
|
|
1112
|
-
});
|
|
1113
|
-
}
|
|
1114
1116
|
handlePitchBendRangeRPN(channelNumber) {
|
|
1115
1117
|
const channel = this.channels[channelNumber];
|
|
1116
1118
|
this.limitData(channel, 0, 127, 0, 99);
|
|
@@ -1237,6 +1239,7 @@ Object.defineProperty(MidyGMLite, "channelSettings", {
|
|
|
1237
1239
|
writable: true,
|
|
1238
1240
|
value: {
|
|
1239
1241
|
currentBufferSource: null,
|
|
1242
|
+
detune: 0,
|
|
1240
1243
|
program: 0,
|
|
1241
1244
|
bank: 0,
|
|
1242
1245
|
dataMSB: 0,
|
package/script/midy.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
export class Midy {
|
|
2
2
|
static channelSettings: {
|
|
3
3
|
currentBufferSource: null;
|
|
4
|
+
detune: number;
|
|
5
|
+
scaleOctaveTuningTable: any[];
|
|
6
|
+
pressureTable: Uint8Array<ArrayBuffer>;
|
|
7
|
+
keyBasedInstrumentControlTable: Int8Array<ArrayBuffer>;
|
|
4
8
|
program: number;
|
|
5
9
|
bank: number;
|
|
6
10
|
bankMSB: number;
|
|
@@ -79,8 +83,8 @@ export class Midy {
|
|
|
79
83
|
vibLfoToPitch: (channel: any, note: any, _prevValue: any) => void;
|
|
80
84
|
modLfoToFilterFc: (channel: any, note: any, _prevValue: any) => void;
|
|
81
85
|
modLfoToVolume: (channel: any, note: any) => void;
|
|
82
|
-
chorusEffectsSend: (
|
|
83
|
-
reverbEffectsSend: (
|
|
86
|
+
chorusEffectsSend: (channel: any, note: any, prevValue: any) => void;
|
|
87
|
+
reverbEffectsSend: (channel: any, note: any, prevValue: any) => void;
|
|
84
88
|
delayModLFO: (_channel: any, note: any, _prevValue: any) => void;
|
|
85
89
|
freqModLFO: (_channel: any, note: any, _prevValue: any) => void;
|
|
86
90
|
delayVibLFO: (channel: any, note: any, prevValue: any) => void;
|
|
@@ -192,12 +196,16 @@ export class Midy {
|
|
|
192
196
|
feedbackGains: any[];
|
|
193
197
|
};
|
|
194
198
|
cbToRatio(cb: any): number;
|
|
199
|
+
rateToCent(rate: any): number;
|
|
200
|
+
centToRate(cent: any): number;
|
|
195
201
|
centToHz(cent: any): number;
|
|
196
|
-
|
|
202
|
+
calcChannelDetune(channel: any): any;
|
|
203
|
+
calcNoteDetune(channel: any, note: any): any;
|
|
204
|
+
updateDetune(channel: any): void;
|
|
205
|
+
getPortamentoTime(channel: any): number;
|
|
197
206
|
setPortamentoStartVolumeEnvelope(channel: any, note: any): void;
|
|
198
207
|
setVolumeEnvelope(channel: any, note: any): void;
|
|
199
|
-
|
|
200
|
-
setPitch(channel: any, note: any): void;
|
|
208
|
+
setPitchEnvelope(note: any): void;
|
|
201
209
|
clampCutoffFrequency(frequency: any): number;
|
|
202
210
|
setPortamentoStartFilterEnvelope(channel: any, note: any): void;
|
|
203
211
|
setFilterEnvelope(channel: any, note: any): void;
|
|
@@ -215,15 +223,16 @@ export class Midy {
|
|
|
215
223
|
handleMIDIMessage(statusByte: any, data1: any, data2: any): void | Promise<any>;
|
|
216
224
|
handlePolyphonicKeyPressure(channelNumber: any, noteNumber: any, pressure: any): void;
|
|
217
225
|
handleProgramChange(channelNumber: any, program: any): void;
|
|
218
|
-
handleChannelPressure(channelNumber: any,
|
|
226
|
+
handleChannelPressure(channelNumber: any, value: any): void;
|
|
227
|
+
setChannelPressure(channel: any, note: any): void;
|
|
219
228
|
handlePitchBendMessage(channelNumber: any, lsb: any, msb: any): void;
|
|
220
229
|
setPitchBend(channelNumber: any, value: any): void;
|
|
221
230
|
setModLfoToPitch(channel: any, note: any): void;
|
|
222
|
-
setModLfoToVolume(note: any): void;
|
|
223
|
-
setChorusEffectsSend(note: any, prevValue: any): void;
|
|
224
|
-
setReverbEffectsSend(note: any, prevValue: any): void;
|
|
225
231
|
setVibLfoToPitch(channel: any, note: any): void;
|
|
226
|
-
setModLfoToFilterFc(note: any): void;
|
|
232
|
+
setModLfoToFilterFc(channel: any, note: any): void;
|
|
233
|
+
setModLfoToVolume(channel: any, note: any): void;
|
|
234
|
+
setReverbEffectsSend(channel: any, note: any, prevValue: any): void;
|
|
235
|
+
setChorusEffectsSend(channel: any, note: any, prevValue: any): void;
|
|
227
236
|
setDelayModLFO(note: any): void;
|
|
228
237
|
setFreqModLFO(note: any): void;
|
|
229
238
|
createVoiceParamsHandlers(): {
|
|
@@ -231,14 +240,14 @@ export class Midy {
|
|
|
231
240
|
vibLfoToPitch: (channel: any, note: any, _prevValue: any) => void;
|
|
232
241
|
modLfoToFilterFc: (channel: any, note: any, _prevValue: any) => void;
|
|
233
242
|
modLfoToVolume: (channel: any, note: any) => void;
|
|
234
|
-
chorusEffectsSend: (
|
|
235
|
-
reverbEffectsSend: (
|
|
243
|
+
chorusEffectsSend: (channel: any, note: any, prevValue: any) => void;
|
|
244
|
+
reverbEffectsSend: (channel: any, note: any, prevValue: any) => void;
|
|
236
245
|
delayModLFO: (_channel: any, note: any, _prevValue: any) => void;
|
|
237
246
|
freqModLFO: (_channel: any, note: any, _prevValue: any) => void;
|
|
238
247
|
delayVibLFO: (channel: any, note: any, prevValue: any) => void;
|
|
239
248
|
freqVibLFO: (channel: any, note: any, _prevValue: any) => void;
|
|
240
249
|
};
|
|
241
|
-
getControllerState(channel: any, noteNumber: any, velocity: any): Float32Array
|
|
250
|
+
getControllerState(channel: any, noteNumber: any, velocity: any): Float32Array<any>;
|
|
242
251
|
applyVoiceParams(channel: any, controllerType: any): void;
|
|
243
252
|
createControlChangeHandlers(): {
|
|
244
253
|
0: (channelNumber: any, msb: any) => void;
|
|
@@ -281,11 +290,13 @@ export class Midy {
|
|
|
281
290
|
updateModulation(channel: any): void;
|
|
282
291
|
setModulationDepth(channelNumber: any, modulation: any): void;
|
|
283
292
|
setPortamentoTime(channelNumber: any, portamentoTime: any): void;
|
|
293
|
+
setKeyBasedVolume(channel: any): void;
|
|
284
294
|
setVolume(channelNumber: any, volume: any): void;
|
|
285
295
|
panToGain(pan: any): {
|
|
286
296
|
gainLeft: number;
|
|
287
297
|
gainRight: number;
|
|
288
298
|
};
|
|
299
|
+
setKeyBasedPan(channel: any): void;
|
|
289
300
|
setPan(channelNumber: any, pan: any): void;
|
|
290
301
|
setExpression(channelNumber: any, expression: any): void;
|
|
291
302
|
setBankLSB(channelNumber: any, lsb: any): void;
|
|
@@ -293,8 +304,6 @@ export class Midy {
|
|
|
293
304
|
updateChannelVolume(channel: any): void;
|
|
294
305
|
setSustainPedal(channelNumber: any, value: any): void;
|
|
295
306
|
setPortamento(channelNumber: any, value: any): void;
|
|
296
|
-
setReverbSendLevel(channelNumber: any, reverbSendLevel: any): void;
|
|
297
|
-
setChorusSendLevel(channelNumber: any, chorusSendLevel: any): void;
|
|
298
307
|
setSostenutoPedal(channelNumber: any, value: any): void;
|
|
299
308
|
setSoftPedal(channelNumber: any, softPedal: any): void;
|
|
300
309
|
setFilterResonance(channelNumber: any, filterResonance: any): void;
|
|
@@ -305,6 +314,8 @@ export class Midy {
|
|
|
305
314
|
setVibratoRate(channelNumber: any, vibratoRate: any): void;
|
|
306
315
|
setVibratoDepth(channelNumber: any, vibratoDepth: any): void;
|
|
307
316
|
setVibratoDelay(channelNumber: any, vibratoDelay: any): void;
|
|
317
|
+
setReverbSendLevel(channelNumber: any, reverbSendLevel: any): void;
|
|
318
|
+
setChorusSendLevel(channelNumber: any, chorusSendLevel: any): void;
|
|
308
319
|
limitData(channel: any, minMSB: any, maxMSB: any, minLSB: any, maxLSB: any): void;
|
|
309
320
|
limitDataMSB(channel: any, minMSB: any, maxMSB: any): void;
|
|
310
321
|
handleRPN(channelNumber: any, value: any): void;
|
|
@@ -313,13 +324,12 @@ export class Midy {
|
|
|
313
324
|
setRPNMSB(channelNumber: any, value: any): void;
|
|
314
325
|
setRPNLSB(channelNumber: any, value: any): void;
|
|
315
326
|
dataEntryMSB(channelNumber: any, value: any): void;
|
|
316
|
-
updateDetune(channel: any, detune: any): void;
|
|
317
327
|
handlePitchBendRangeRPN(channelNumber: any): void;
|
|
318
|
-
setPitchBendRange(channelNumber: any,
|
|
328
|
+
setPitchBendRange(channelNumber: any, value: any): void;
|
|
319
329
|
handleFineTuningRPN(channelNumber: any): void;
|
|
320
|
-
setFineTuning(channelNumber: any,
|
|
330
|
+
setFineTuning(channelNumber: any, value: any): void;
|
|
321
331
|
handleCoarseTuningRPN(channelNumber: any): void;
|
|
322
|
-
setCoarseTuning(channelNumber: any,
|
|
332
|
+
setCoarseTuning(channelNumber: any, value: any): void;
|
|
323
333
|
handleModulationDepthRangeRPN(channelNumber: any): void;
|
|
324
334
|
setModulationDepthRange(channelNumber: any, modulationDepthRange: any): void;
|
|
325
335
|
allSoundOff(channelNumber: any): Promise<void>;
|
|
@@ -336,9 +346,9 @@ export class Midy {
|
|
|
336
346
|
handleMasterVolumeSysEx(data: any): void;
|
|
337
347
|
setMasterVolume(volume: any): void;
|
|
338
348
|
handleMasterFineTuningSysEx(data: any): void;
|
|
339
|
-
setMasterFineTuning(
|
|
349
|
+
setMasterFineTuning(value: any): void;
|
|
340
350
|
handleMasterCoarseTuningSysEx(data: any): void;
|
|
341
|
-
setMasterCoarseTuning(
|
|
351
|
+
setMasterCoarseTuning(value: any): void;
|
|
342
352
|
handleGlobalParameterControlSysEx(data: any): void;
|
|
343
353
|
handleReverbParameterSysEx(data: any): void;
|
|
344
354
|
setReverbType(type: any): void;
|
|
@@ -357,6 +367,11 @@ export class Midy {
|
|
|
357
367
|
getChorusFeedback(value: any): number;
|
|
358
368
|
setChorusSendToReverb(value: any): void;
|
|
359
369
|
getChorusSendToReverb(value: any): number;
|
|
370
|
+
getChannelBitmap(data: any): any[];
|
|
371
|
+
handleScaleOctaveTuning1ByteFormatSysEx(data: any): void;
|
|
372
|
+
handleChannelPressureSysEx(data: any): void;
|
|
373
|
+
getKeyBasedInstrumentControlValue(channel: any, keyNumber: any, controllerType: any): number;
|
|
374
|
+
handleKeyBasedInstrumentControlSysEx(data: any): void;
|
|
360
375
|
handleExclusiveMessage(data: any): void;
|
|
361
376
|
handleSysEx(data: any): void;
|
|
362
377
|
scheduleTask(callback: any, startTime: any): Promise<any>;
|
|
@@ -365,7 +380,10 @@ declare class Note {
|
|
|
365
380
|
constructor(noteNumber: any, velocity: any, startTime: any, voice: any, voiceParams: any);
|
|
366
381
|
bufferSource: any;
|
|
367
382
|
filterNode: any;
|
|
383
|
+
volumeEnvelopeNode: any;
|
|
368
384
|
volumeNode: any;
|
|
385
|
+
gainL: any;
|
|
386
|
+
gainR: any;
|
|
369
387
|
volumeDepth: any;
|
|
370
388
|
modulationLFO: any;
|
|
371
389
|
modulationDepth: any;
|
package/script/midy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"midy.d.ts","sourceRoot":"","sources":["../src/midy.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"midy.d.ts","sourceRoot":"","sources":["../src/midy.js"],"names":[],"mappings":"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"}
|