@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/esm/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;
|
package/esm/midy-GMLite.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"midy-GMLite.d.ts","sourceRoot":"","sources":["../src/midy-GMLite.js"],"names":[],"mappings":"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/esm/midy-GMLite.js
CHANGED
|
@@ -14,7 +14,7 @@ class Note {
|
|
|
14
14
|
writable: true,
|
|
15
15
|
value: void 0
|
|
16
16
|
});
|
|
17
|
-
Object.defineProperty(this, "
|
|
17
|
+
Object.defineProperty(this, "volumeEnvelopeNode", {
|
|
18
18
|
enumerable: true,
|
|
19
19
|
configurable: true,
|
|
20
20
|
writable: true,
|
|
@@ -581,14 +581,33 @@ export class MidyGMLite {
|
|
|
581
581
|
cbToRatio(cb) {
|
|
582
582
|
return Math.pow(10, cb / 200);
|
|
583
583
|
}
|
|
584
|
+
rateToCent(rate) {
|
|
585
|
+
return 1200 * Math.log2(rate);
|
|
586
|
+
}
|
|
587
|
+
centToRate(cent) {
|
|
588
|
+
return Math.pow(2, cent / 1200);
|
|
589
|
+
}
|
|
584
590
|
centToHz(cent) {
|
|
585
|
-
return 8.176 *
|
|
591
|
+
return 8.176 * this.centToRate(cent);
|
|
586
592
|
}
|
|
587
|
-
|
|
593
|
+
calcChannelDetune(channel) {
|
|
588
594
|
const pitchWheel = channel.state.pitchWheel * 2 - 1;
|
|
589
|
-
const pitchWheelSensitivity = channel.state.pitchWheelSensitivity *
|
|
595
|
+
const pitchWheelSensitivity = channel.state.pitchWheelSensitivity * 12800;
|
|
590
596
|
return pitchWheel * pitchWheelSensitivity;
|
|
591
597
|
}
|
|
598
|
+
updateDetune(channel) {
|
|
599
|
+
const now = this.audioContext.currentTime;
|
|
600
|
+
channel.scheduledNotes.forEach((noteList) => {
|
|
601
|
+
for (let i = 0; i < noteList.length; i++) {
|
|
602
|
+
const note = noteList[i];
|
|
603
|
+
if (!note)
|
|
604
|
+
continue;
|
|
605
|
+
note.bufferSource.detune
|
|
606
|
+
.cancelScheduledValues(now)
|
|
607
|
+
.setValueAtTime(channel.detune, now);
|
|
608
|
+
}
|
|
609
|
+
});
|
|
610
|
+
}
|
|
592
611
|
setVolumeEnvelope(note) {
|
|
593
612
|
const now = this.audioContext.currentTime;
|
|
594
613
|
const { voiceParams, startTime } = note;
|
|
@@ -598,7 +617,7 @@ export class MidyGMLite {
|
|
|
598
617
|
const volAttack = volDelay + voiceParams.volAttack;
|
|
599
618
|
const volHold = volAttack + voiceParams.volHold;
|
|
600
619
|
const volDecay = volHold + voiceParams.volDecay;
|
|
601
|
-
note.
|
|
620
|
+
note.volumeEnvelopeNode.gain
|
|
602
621
|
.cancelScheduledValues(now)
|
|
603
622
|
.setValueAtTime(0, startTime)
|
|
604
623
|
.setValueAtTime(1e-6, volDelay) // exponentialRampToValueAtTime() requires a non-zero value
|
|
@@ -606,32 +625,28 @@ export class MidyGMLite {
|
|
|
606
625
|
.setValueAtTime(attackVolume, volHold)
|
|
607
626
|
.linearRampToValueAtTime(sustainVolume, volDecay);
|
|
608
627
|
}
|
|
609
|
-
|
|
628
|
+
setPitchEnvelope(note) {
|
|
610
629
|
const now = this.audioContext.currentTime;
|
|
630
|
+
const { voiceParams } = note;
|
|
631
|
+
const baseRate = voiceParams.playbackRate;
|
|
611
632
|
note.bufferSource.playbackRate
|
|
612
633
|
.cancelScheduledValues(now)
|
|
613
|
-
.setValueAtTime(
|
|
614
|
-
|
|
615
|
-
setPitch(channel, note) {
|
|
616
|
-
const now = this.audioContext.currentTime;
|
|
617
|
-
const { startTime } = note;
|
|
618
|
-
const basePitch = this.calcSemitoneOffset(channel) * 100;
|
|
619
|
-
note.bufferSource.detune
|
|
620
|
-
.cancelScheduledValues(now)
|
|
621
|
-
.setValueAtTime(basePitch, startTime);
|
|
622
|
-
const modEnvToPitch = note.voiceParams.modEnvToPitch;
|
|
634
|
+
.setValueAtTime(baseRate, now);
|
|
635
|
+
const modEnvToPitch = voiceParams.modEnvToPitch;
|
|
623
636
|
if (modEnvToPitch === 0)
|
|
624
637
|
return;
|
|
638
|
+
const basePitch = this.rateToCent(baseRate);
|
|
625
639
|
const peekPitch = basePitch + modEnvToPitch;
|
|
640
|
+
const peekRate = this.centToRate(peekPitch);
|
|
626
641
|
const modDelay = startTime + voiceParams.modDelay;
|
|
627
642
|
const modAttack = modDelay + voiceParams.modAttack;
|
|
628
643
|
const modHold = modAttack + voiceParams.modHold;
|
|
629
644
|
const modDecay = modHold + voiceParams.modDecay;
|
|
630
|
-
note.bufferSource.
|
|
631
|
-
.setValueAtTime(
|
|
632
|
-
.exponentialRampToValueAtTime(
|
|
633
|
-
.setValueAtTime(
|
|
634
|
-
.linearRampToValueAtTime(
|
|
645
|
+
note.bufferSource.playbackRate
|
|
646
|
+
.setValueAtTime(baseRate, modDelay)
|
|
647
|
+
.exponentialRampToValueAtTime(peekRate, modAttack)
|
|
648
|
+
.setValueAtTime(peekRate, modHold)
|
|
649
|
+
.linearRampToValueAtTime(baseRate, modDecay);
|
|
635
650
|
}
|
|
636
651
|
clampCutoffFrequency(frequency) {
|
|
637
652
|
const minFrequency = 20; // min Hz of initialFilterFc
|
|
@@ -678,27 +693,26 @@ export class MidyGMLite {
|
|
|
678
693
|
note.modulationLFO.connect(note.modulationDepth);
|
|
679
694
|
note.modulationDepth.connect(note.bufferSource.detune);
|
|
680
695
|
note.modulationLFO.connect(note.volumeDepth);
|
|
681
|
-
note.volumeDepth.connect(note.
|
|
696
|
+
note.volumeDepth.connect(note.volumeEnvelopeNode.gain);
|
|
682
697
|
}
|
|
683
698
|
async createNote(channel, voice, noteNumber, velocity, startTime, isSF3) {
|
|
684
699
|
const state = channel.state;
|
|
685
700
|
const voiceParams = voice.getAllParams(state.array);
|
|
686
701
|
const note = new Note(noteNumber, velocity, startTime, voice, voiceParams);
|
|
687
702
|
note.bufferSource = await this.createNoteBufferNode(voiceParams, isSF3);
|
|
688
|
-
note.
|
|
703
|
+
note.volumeEnvelopeNode = new GainNode(this.audioContext);
|
|
689
704
|
note.filterNode = new BiquadFilterNode(this.audioContext, {
|
|
690
705
|
type: "lowpass",
|
|
691
706
|
Q: voiceParams.initialFilterQ / 10, // dB
|
|
692
707
|
});
|
|
693
708
|
this.setVolumeEnvelope(note);
|
|
694
709
|
this.setFilterEnvelope(note);
|
|
695
|
-
this.
|
|
710
|
+
this.setPitchEnvelope(note);
|
|
696
711
|
if (0 < state.modulationDepth) {
|
|
697
|
-
this.setPitch(channel, note);
|
|
698
712
|
this.startModulation(channel, note, startTime);
|
|
699
713
|
}
|
|
700
714
|
note.bufferSource.connect(note.filterNode);
|
|
701
|
-
note.filterNode.connect(note.
|
|
715
|
+
note.filterNode.connect(note.volumeEnvelopeNode);
|
|
702
716
|
note.bufferSource.start(startTime);
|
|
703
717
|
return note;
|
|
704
718
|
}
|
|
@@ -714,8 +728,8 @@ export class MidyGMLite {
|
|
|
714
728
|
if (!voice)
|
|
715
729
|
return;
|
|
716
730
|
const note = await this.createNote(channel, voice, noteNumber, velocity, startTime, isSF3);
|
|
717
|
-
note.
|
|
718
|
-
note.
|
|
731
|
+
note.volumeEnvelopeNode.connect(channel.gainL);
|
|
732
|
+
note.volumeEnvelopeNode.connect(channel.gainR);
|
|
719
733
|
const exclusiveClass = note.voiceParams.exclusiveClass;
|
|
720
734
|
if (exclusiveClass !== 0) {
|
|
721
735
|
if (this.exclusiveClassMap.has(exclusiveClass)) {
|
|
@@ -743,7 +757,7 @@ export class MidyGMLite {
|
|
|
743
757
|
}
|
|
744
758
|
stopNote(endTime, stopTime, scheduledNotes, index) {
|
|
745
759
|
const note = scheduledNotes[index];
|
|
746
|
-
note.
|
|
760
|
+
note.volumeEnvelopeNode.gain
|
|
747
761
|
.cancelScheduledValues(endTime)
|
|
748
762
|
.linearRampToValueAtTime(0, stopTime);
|
|
749
763
|
note.ending = true;
|
|
@@ -754,8 +768,8 @@ export class MidyGMLite {
|
|
|
754
768
|
note.bufferSource.onended = () => {
|
|
755
769
|
scheduledNotes[index] = null;
|
|
756
770
|
note.bufferSource.disconnect();
|
|
757
|
-
note.volumeNode.disconnect();
|
|
758
771
|
note.filterNode.disconnect();
|
|
772
|
+
note.volumeEnvelopeNode.disconnect();
|
|
759
773
|
if (note.modulationDepth) {
|
|
760
774
|
note.volumeDepth.disconnect();
|
|
761
775
|
note.modulationDepth.disconnect();
|
|
@@ -838,29 +852,22 @@ export class MidyGMLite {
|
|
|
838
852
|
setPitchBend(channelNumber, value) {
|
|
839
853
|
const channel = this.channels[channelNumber];
|
|
840
854
|
const state = channel.state;
|
|
855
|
+
const prev = state.pitchWheel * 2 - 1;
|
|
856
|
+
const next = (value - 8192) / 8192;
|
|
841
857
|
state.pitchWheel = value / 16383;
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
this.
|
|
858
|
+
channel.detune += (next - prev) * state.pitchWheelSensitivity * 12800;
|
|
859
|
+
this.updateDetune(channel);
|
|
860
|
+
this.applyVoiceParams(channel, 14);
|
|
845
861
|
}
|
|
846
862
|
setModLfoToPitch(channel, note) {
|
|
847
863
|
const now = this.audioContext.currentTime;
|
|
848
864
|
const modLfoToPitch = note.voiceParams.modLfoToPitch;
|
|
849
|
-
const
|
|
865
|
+
const baseDepth = Math.abs(modLfoToPitch) +
|
|
850
866
|
channel.state.modulationDepth;
|
|
851
|
-
const
|
|
867
|
+
const modulationDepth = baseDepth * Math.sign(modLfoToPitch);
|
|
852
868
|
note.modulationDepth.gain
|
|
853
869
|
.cancelScheduledValues(now)
|
|
854
|
-
.setValueAtTime(modulationDepth
|
|
855
|
-
}
|
|
856
|
-
setModLfoToVolume(note) {
|
|
857
|
-
const now = this.audioContext.currentTime;
|
|
858
|
-
const modLfoToVolume = note.voiceParams.modLfoToVolume;
|
|
859
|
-
const volumeDepth = this.cbToRatio(Math.abs(modLfoToVolume)) - 1;
|
|
860
|
-
const volumeDepthSign = (0 < modLfoToVolume) ? 1 : -1;
|
|
861
|
-
note.volumeDepth.gain
|
|
862
|
-
.cancelScheduledValues(now)
|
|
863
|
-
.setValueAtTime(volumeDepth * volumeDepthSign, now);
|
|
870
|
+
.setValueAtTime(modulationDepth, now);
|
|
864
871
|
}
|
|
865
872
|
setModLfoToFilterFc(note) {
|
|
866
873
|
const now = this.audioContext.currentTime;
|
|
@@ -869,6 +876,15 @@ export class MidyGMLite {
|
|
|
869
876
|
.cancelScheduledValues(now)
|
|
870
877
|
.setValueAtTime(modLfoToFilterFc, now);
|
|
871
878
|
}
|
|
879
|
+
setModLfoToVolume(note) {
|
|
880
|
+
const now = this.audioContext.currentTime;
|
|
881
|
+
const modLfoToVolume = note.voiceParams.modLfoToVolume;
|
|
882
|
+
const baseDepth = this.cbToRatio(Math.abs(modLfoToVolume)) - 1;
|
|
883
|
+
const volumeDepth = baseDepth * Math.sign(modLfoToVolume);
|
|
884
|
+
note.volumeDepth.gain
|
|
885
|
+
.cancelScheduledValues(now)
|
|
886
|
+
.setValueAtTime(volumeDepth, now);
|
|
887
|
+
}
|
|
872
888
|
setDelayModLFO(note) {
|
|
873
889
|
const now = this.audioContext.currentTime;
|
|
874
890
|
const startTime = note.startTime;
|
|
@@ -945,7 +961,7 @@ export class MidyGMLite {
|
|
|
945
961
|
noteVoiceParams[key] = voiceParams[key];
|
|
946
962
|
}
|
|
947
963
|
this.setFilterEnvelope(channel, note);
|
|
948
|
-
this.
|
|
964
|
+
this.setPitchEnvelope(note);
|
|
949
965
|
}
|
|
950
966
|
else if (volumeEnvelopeKeySet.has(key)) {
|
|
951
967
|
if (appliedVolumeEnvelope)
|
|
@@ -999,7 +1015,7 @@ export class MidyGMLite {
|
|
|
999
1015
|
note.modulationDepth.gain.setValueAtTime(channel.state.modulationDepth, now);
|
|
1000
1016
|
}
|
|
1001
1017
|
else {
|
|
1002
|
-
this.
|
|
1018
|
+
this.setPitchEnvelope(note);
|
|
1003
1019
|
this.startModulation(channel, note, now);
|
|
1004
1020
|
}
|
|
1005
1021
|
}
|
|
@@ -1094,20 +1110,6 @@ export class MidyGMLite {
|
|
|
1094
1110
|
this.channels[channelNumber].dataMSB = value;
|
|
1095
1111
|
this.handleRPN(channelNumber);
|
|
1096
1112
|
}
|
|
1097
|
-
updateDetune(channel, detune) {
|
|
1098
|
-
const now = this.audioContext.currentTime;
|
|
1099
|
-
channel.scheduledNotes.forEach((noteList) => {
|
|
1100
|
-
for (let i = 0; i < noteList.length; i++) {
|
|
1101
|
-
const note = noteList[i];
|
|
1102
|
-
if (!note)
|
|
1103
|
-
continue;
|
|
1104
|
-
const { bufferSource } = note;
|
|
1105
|
-
bufferSource.detune
|
|
1106
|
-
.cancelScheduledValues(now)
|
|
1107
|
-
.setValueAtTime(detune, now);
|
|
1108
|
-
}
|
|
1109
|
-
});
|
|
1110
|
-
}
|
|
1111
1113
|
handlePitchBendRangeRPN(channelNumber) {
|
|
1112
1114
|
const channel = this.channels[channelNumber];
|
|
1113
1115
|
this.limitData(channel, 0, 127, 0, 99);
|
|
@@ -1233,6 +1235,7 @@ Object.defineProperty(MidyGMLite, "channelSettings", {
|
|
|
1233
1235
|
writable: true,
|
|
1234
1236
|
value: {
|
|
1235
1237
|
currentBufferSource: null,
|
|
1238
|
+
detune: 0,
|
|
1236
1239
|
program: 0,
|
|
1237
1240
|
bank: 0,
|
|
1238
1241
|
dataMSB: 0,
|
package/esm/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/esm/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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"}
|