@marmooo/midy 0.2.1 → 0.2.3
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 +3 -5
- package/esm/midy-GM1.d.ts +5 -5
- package/esm/midy-GM1.d.ts.map +1 -1
- package/esm/midy-GM1.js +32 -29
- package/esm/midy-GM2.d.ts +35 -19
- package/esm/midy-GM2.d.ts.map +1 -1
- package/esm/midy-GM2.js +350 -155
- package/esm/midy-GMLite.d.ts +5 -5
- package/esm/midy-GMLite.d.ts.map +1 -1
- package/esm/midy-GMLite.js +26 -24
- package/esm/midy.d.ts +30 -15
- package/esm/midy.d.ts.map +1 -1
- package/esm/midy.js +312 -139
- package/package.json +1 -1
- package/script/midy-GM1.d.ts +5 -5
- package/script/midy-GM1.d.ts.map +1 -1
- package/script/midy-GM1.js +32 -29
- package/script/midy-GM2.d.ts +35 -19
- package/script/midy-GM2.d.ts.map +1 -1
- package/script/midy-GM2.js +350 -155
- package/script/midy-GMLite.d.ts +5 -5
- package/script/midy-GMLite.d.ts.map +1 -1
- package/script/midy-GMLite.js +26 -24
- package/script/midy.d.ts +30 -15
- package/script/midy.d.ts.map +1 -1
- package/script/midy.js +312 -139
package/README.md
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
# Midy
|
|
2
2
|
|
|
3
|
-
A MIDI player/synthesizer written in JavaScript that supports GM-Lite/GM1
|
|
4
|
-
SF2/SF3.
|
|
3
|
+
A MIDI player/synthesizer written in JavaScript that supports GM-Lite/GM1/GM2
|
|
4
|
+
and SF2/SF3.
|
|
5
5
|
|
|
6
|
-
This library provides several files depending on the implementation level.
|
|
7
|
-
support is in progress and should be completed soon.
|
|
6
|
+
This library provides several files depending on the implementation level.
|
|
8
7
|
|
|
9
8
|
- midy-GMLite.js: support minimal GM-Lite (ref:
|
|
10
9
|
[en](https://amei.or.jp/midistandardcommittee/Recommended_Practice/e/gml-v1.pdf),
|
|
@@ -16,7 +15,6 @@ support is in progress and should be completed soon.
|
|
|
16
15
|
[en v1.2a](https://amei.or.jp/midistandardcommittee/Recommended_Practice/e/GM2-v12a.pdf),
|
|
17
16
|
[en v1.0](https://amei.or.jp/midistandardcommittee/Recommended_Practice/e/rp24(e).pdf),
|
|
18
17
|
[ja v1.0](https://amei.or.jp/midistandardcommittee/Recommended_Practice/GM2_japanese.pdf))
|
|
19
|
-
(in progress)
|
|
20
18
|
- midy.js: full implementation (in progress)
|
|
21
19
|
|
|
22
20
|
## Usage
|
package/esm/midy-GM1.d.ts
CHANGED
|
@@ -32,12 +32,12 @@ export class MidyGM1 {
|
|
|
32
32
|
notePromises: any[];
|
|
33
33
|
exclusiveClassMap: Map<any, any>;
|
|
34
34
|
audioContext: any;
|
|
35
|
-
|
|
35
|
+
masterVolume: any;
|
|
36
36
|
voiceParamsHandlers: {
|
|
37
37
|
modLfoToPitch: (channel: any, note: any, _prevValue: any) => void;
|
|
38
38
|
vibLfoToPitch: (channel: any, note: any, _prevValue: any) => void;
|
|
39
39
|
modLfoToFilterFc: (channel: any, note: any, _prevValue: any) => void;
|
|
40
|
-
modLfoToVolume: (channel: any, note: any) => void;
|
|
40
|
+
modLfoToVolume: (channel: any, note: any, _prevValue: any) => void;
|
|
41
41
|
chorusEffectsSend: (_channel: any, _note: any, _prevValue: any) => void;
|
|
42
42
|
reverbEffectsSend: (_channel: any, _note: any, _prevValue: any) => void;
|
|
43
43
|
delayModLFO: (_channel: any, note: any, _prevValue: any) => void;
|
|
@@ -124,7 +124,7 @@ export class MidyGM1 {
|
|
|
124
124
|
modLfoToPitch: (channel: any, note: any, _prevValue: any) => void;
|
|
125
125
|
vibLfoToPitch: (channel: any, note: any, _prevValue: any) => void;
|
|
126
126
|
modLfoToFilterFc: (channel: any, note: any, _prevValue: any) => void;
|
|
127
|
-
modLfoToVolume: (channel: any, note: any) => void;
|
|
127
|
+
modLfoToVolume: (channel: any, note: any, _prevValue: any) => void;
|
|
128
128
|
chorusEffectsSend: (_channel: any, _note: any, _prevValue: any) => void;
|
|
129
129
|
reverbEffectsSend: (_channel: any, _note: any, _prevValue: any) => void;
|
|
130
130
|
delayModLFO: (_channel: any, note: any, _prevValue: any) => void;
|
|
@@ -132,7 +132,7 @@ export class MidyGM1 {
|
|
|
132
132
|
delayVibLFO: (channel: any, note: any, prevValue: any) => void;
|
|
133
133
|
freqVibLFO: (channel: any, note: any, _prevValue: any) => void;
|
|
134
134
|
};
|
|
135
|
-
getControllerState(channel: any, noteNumber: any, velocity: any): Float32Array
|
|
135
|
+
getControllerState(channel: any, noteNumber: any, velocity: any): Float32Array<any>;
|
|
136
136
|
applyVoiceParams(channel: any, controllerType: any): void;
|
|
137
137
|
createControlChangeHandlers(): {
|
|
138
138
|
1: (channelNumber: any, modulation: any) => void;
|
|
@@ -189,7 +189,7 @@ declare class Note {
|
|
|
189
189
|
constructor(noteNumber: any, velocity: any, startTime: any, voice: any, voiceParams: any);
|
|
190
190
|
bufferSource: any;
|
|
191
191
|
filterNode: any;
|
|
192
|
-
|
|
192
|
+
volumeEnvelopeNode: any;
|
|
193
193
|
volumeDepth: any;
|
|
194
194
|
modulationLFO: any;
|
|
195
195
|
modulationDepth: any;
|
package/esm/midy-GM1.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"midy-GM1.d.ts","sourceRoot":"","sources":["../src/midy-GM1.js"],"names":[],"mappings":"AAqFA;IAoBE;;;;;;;;;;;;MAYE;IAEF,+BAQC;IAzCD,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;IAiB5B,kBAAgC;IAChC,
|
|
1
|
+
{"version":3,"file":"midy-GM1.d.ts","sourceRoot":"","sources":["../src/midy-GM1.js"],"names":[],"mappings":"AAqFA;IAoBE;;;;;;;;;;;;MAYE;IAEF,+BAQC;IAzCD,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;IAiB5B,kBAAgC;IAChC,kBAA8C;IAC9C;;;;;;;;;;;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,qCAMC;IAED,iCAWC;IAED,mCAgBC;IAED,kCAqBC;IAED,6CAIC;IAED,mCAuBC;IAED,+DAoBC;IAED,gHA2BC;IAED,kGAgDC;IAED,0EAGC;IAED,qFA4BC;IAED,6HAuBC;IAED,0FAGC;IAED,kEAeC;IAED,gFAiBC;IAED,4DAGC;IAED,qEAGC;IAED,mDASC;IAED,gDASC;IAED,gDASC;IAED,qCAMC;IAED,mCAQC;IAED,gCAOC;IAED,+BAMC;IAED;;;;;;;;;;;MA4CC;IAED,oFAMC;IAED,0DA6CC;IAED;;;;;;;;;;;;;MAeC;IAED,+EAWC;IAED,qCAeC;IAED,8DAIC;IACD,iDAIC;IAED;;;MAMC;IAED,2CAIC;IAED,yDAIC;IAED,mDAGC;IAED,wCAWC;IAED,sDAKC;IAED,kFAeC;IAED,2DAMC;IAED,oCAkBC;IAED,gDAEC;IAED,gDAEC;IAED,mDAGC;IAED,kDAKC;IAED,wDASC;IAED,8CAKC;IAED,oDAOC;IAED,gDAKC;IAED,sDAOC;IAED,+CAEC;IAED,8CAqBC;IAED,+CAEC;IAED,4DAgBC;IAED,oBAMC;IAED,yDAaC;IAED,yCAGC;IAED,mCAQC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AAjzCD;IAUE,0FAMC;IAfD,kBAAa;IACb,gBAAW;IACX,wBAAmB;IACnB,iBAAY;IACZ,mBAAc;IACd,qBAAgB;IAChB,gBAAW;IACX,kBAAa;IAGX,gBAA4B;IAC5B,cAAwB;IACxB,eAA0B;IAC1B,WAAkB;IAClB,iBAA8B;CAEjC"}
|
package/esm/midy-GM1.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,
|
|
@@ -233,11 +233,11 @@ export class MidyGM1 {
|
|
|
233
233
|
value: new Map()
|
|
234
234
|
});
|
|
235
235
|
this.audioContext = audioContext;
|
|
236
|
-
this.
|
|
236
|
+
this.masterVolume = new GainNode(audioContext);
|
|
237
237
|
this.voiceParamsHandlers = this.createVoiceParamsHandlers();
|
|
238
238
|
this.controlChangeHandlers = this.createControlChangeHandlers();
|
|
239
239
|
this.channels = this.createChannels(audioContext);
|
|
240
|
-
this.
|
|
240
|
+
this.masterVolume.connect(audioContext.destination);
|
|
241
241
|
this.GM1SystemOn();
|
|
242
242
|
}
|
|
243
243
|
initSoundFontTable() {
|
|
@@ -283,7 +283,7 @@ export class MidyGM1 {
|
|
|
283
283
|
const merger = new ChannelMergerNode(audioContext, { numberOfInputs: 2 });
|
|
284
284
|
gainL.connect(merger, 0, 0);
|
|
285
285
|
gainR.connect(merger, 0, 1);
|
|
286
|
-
merger.connect(this.
|
|
286
|
+
merger.connect(this.masterVolume);
|
|
287
287
|
return {
|
|
288
288
|
gainL,
|
|
289
289
|
gainR,
|
|
@@ -631,7 +631,7 @@ export class MidyGM1 {
|
|
|
631
631
|
const volAttack = volDelay + voiceParams.volAttack;
|
|
632
632
|
const volHold = volAttack + voiceParams.volHold;
|
|
633
633
|
const volDecay = volHold + voiceParams.volDecay;
|
|
634
|
-
note.
|
|
634
|
+
note.volumeEnvelopeNode.gain
|
|
635
635
|
.cancelScheduledValues(now)
|
|
636
636
|
.setValueAtTime(0, startTime)
|
|
637
637
|
.setValueAtTime(1e-6, volDelay) // exponentialRampToValueAtTime() requires a non-zero value
|
|
@@ -707,14 +707,14 @@ export class MidyGM1 {
|
|
|
707
707
|
note.modulationLFO.connect(note.modulationDepth);
|
|
708
708
|
note.modulationDepth.connect(note.bufferSource.detune);
|
|
709
709
|
note.modulationLFO.connect(note.volumeDepth);
|
|
710
|
-
note.volumeDepth.connect(note.
|
|
710
|
+
note.volumeDepth.connect(note.volumeEnvelopeNode.gain);
|
|
711
711
|
}
|
|
712
712
|
async createNote(channel, voice, noteNumber, velocity, startTime, isSF3) {
|
|
713
713
|
const state = channel.state;
|
|
714
714
|
const voiceParams = voice.getAllParams(state.array);
|
|
715
715
|
const note = new Note(noteNumber, velocity, startTime, voice, voiceParams);
|
|
716
716
|
note.bufferSource = await this.createNoteBufferNode(voiceParams, isSF3);
|
|
717
|
-
note.
|
|
717
|
+
note.volumeEnvelopeNode = new GainNode(this.audioContext);
|
|
718
718
|
note.filterNode = new BiquadFilterNode(this.audioContext, {
|
|
719
719
|
type: "lowpass",
|
|
720
720
|
Q: voiceParams.initialFilterQ / 10, // dB
|
|
@@ -726,7 +726,7 @@ export class MidyGM1 {
|
|
|
726
726
|
this.startModulation(channel, note, startTime);
|
|
727
727
|
}
|
|
728
728
|
note.bufferSource.connect(note.filterNode);
|
|
729
|
-
note.filterNode.connect(note.
|
|
729
|
+
note.filterNode.connect(note.volumeEnvelopeNode);
|
|
730
730
|
note.bufferSource.start(startTime);
|
|
731
731
|
return note;
|
|
732
732
|
}
|
|
@@ -742,8 +742,8 @@ export class MidyGM1 {
|
|
|
742
742
|
if (!voice)
|
|
743
743
|
return;
|
|
744
744
|
const note = await this.createNote(channel, voice, noteNumber, velocity, startTime, isSF3);
|
|
745
|
-
note.
|
|
746
|
-
note.
|
|
745
|
+
note.volumeEnvelopeNode.connect(channel.gainL);
|
|
746
|
+
note.volumeEnvelopeNode.connect(channel.gainR);
|
|
747
747
|
const exclusiveClass = note.voiceParams.exclusiveClass;
|
|
748
748
|
if (exclusiveClass !== 0) {
|
|
749
749
|
if (this.exclusiveClassMap.has(exclusiveClass)) {
|
|
@@ -771,7 +771,7 @@ export class MidyGM1 {
|
|
|
771
771
|
}
|
|
772
772
|
stopNote(endTime, stopTime, scheduledNotes, index) {
|
|
773
773
|
const note = scheduledNotes[index];
|
|
774
|
-
note.
|
|
774
|
+
note.volumeEnvelopeNode.gain
|
|
775
775
|
.cancelScheduledValues(endTime)
|
|
776
776
|
.linearRampToValueAtTime(0, stopTime);
|
|
777
777
|
note.ending = true;
|
|
@@ -782,8 +782,8 @@ export class MidyGM1 {
|
|
|
782
782
|
note.bufferSource.onended = () => {
|
|
783
783
|
scheduledNotes[index] = null;
|
|
784
784
|
note.bufferSource.disconnect();
|
|
785
|
-
note.volumeNode.disconnect();
|
|
786
785
|
note.filterNode.disconnect();
|
|
786
|
+
note.volumeEnvelopeNode.disconnect();
|
|
787
787
|
if (note.modulationDepth) {
|
|
788
788
|
note.volumeDepth.disconnect();
|
|
789
789
|
note.modulationDepth.disconnect();
|
|
@@ -880,12 +880,12 @@ export class MidyGM1 {
|
|
|
880
880
|
setModLfoToPitch(channel, note) {
|
|
881
881
|
const now = this.audioContext.currentTime;
|
|
882
882
|
const modLfoToPitch = note.voiceParams.modLfoToPitch;
|
|
883
|
-
const
|
|
883
|
+
const baseDepth = Math.abs(modLfoToPitch) +
|
|
884
884
|
channel.state.modulationDepth;
|
|
885
|
-
const
|
|
885
|
+
const modulationDepth = baseDepth * Math.sign(modLfoToPitch);
|
|
886
886
|
note.modulationDepth.gain
|
|
887
887
|
.cancelScheduledValues(now)
|
|
888
|
-
.setValueAtTime(modulationDepth
|
|
888
|
+
.setValueAtTime(modulationDepth, now);
|
|
889
889
|
}
|
|
890
890
|
setVibLfoToPitch(channel, note) {
|
|
891
891
|
const now = this.audioContext.currentTime;
|
|
@@ -907,11 +907,11 @@ export class MidyGM1 {
|
|
|
907
907
|
setModLfoToVolume(note) {
|
|
908
908
|
const now = this.audioContext.currentTime;
|
|
909
909
|
const modLfoToVolume = note.voiceParams.modLfoToVolume;
|
|
910
|
-
const
|
|
911
|
-
const
|
|
910
|
+
const baseDepth = this.cbToRatio(Math.abs(modLfoToVolume)) - 1;
|
|
911
|
+
const volumeDepth = baseDepth * Math.sign(modLfoToVolume);
|
|
912
912
|
note.volumeDepth.gain
|
|
913
913
|
.cancelScheduledValues(now)
|
|
914
|
-
.setValueAtTime(volumeDepth
|
|
914
|
+
.setValueAtTime(volumeDepth, now);
|
|
915
915
|
}
|
|
916
916
|
setDelayModLFO(note) {
|
|
917
917
|
const now = this.audioContext.currentTime;
|
|
@@ -945,7 +945,7 @@ export class MidyGM1 {
|
|
|
945
945
|
if (0 < channel.state.modulationDepth)
|
|
946
946
|
this.setModLfoToFilterFc(note);
|
|
947
947
|
},
|
|
948
|
-
modLfoToVolume: (channel, note) => {
|
|
948
|
+
modLfoToVolume: (channel, note, _prevValue) => {
|
|
949
949
|
if (0 < channel.state.modulationDepth)
|
|
950
950
|
this.setModLfoToVolume(note);
|
|
951
951
|
},
|
|
@@ -956,12 +956,12 @@ export class MidyGM1 {
|
|
|
956
956
|
delayVibLFO: (channel, note, prevValue) => {
|
|
957
957
|
if (0 < channel.state.vibratoDepth) {
|
|
958
958
|
const now = this.audioContext.currentTime;
|
|
959
|
-
const
|
|
960
|
-
|
|
959
|
+
const vibratoDelay = channel.state.vibratoDelay * 2;
|
|
960
|
+
const prevStartTime = note.startTime + prevValue * vibratoDelay;
|
|
961
961
|
if (now < prevStartTime)
|
|
962
962
|
return;
|
|
963
|
-
const
|
|
964
|
-
|
|
963
|
+
const value = note.voiceParams.delayVibLFO;
|
|
964
|
+
const startTime = note.startTime + value * vibratoDelay;
|
|
965
965
|
note.vibratoLFO.stop(now);
|
|
966
966
|
note.vibratoLFO.start(startTime);
|
|
967
967
|
}
|
|
@@ -969,9 +969,10 @@ export class MidyGM1 {
|
|
|
969
969
|
freqVibLFO: (channel, note, _prevValue) => {
|
|
970
970
|
if (0 < channel.state.vibratoDepth) {
|
|
971
971
|
const now = this.audioContext.currentTime;
|
|
972
|
+
const freqVibLFO = note.voiceParams.freqVibLFO;
|
|
972
973
|
note.vibratoLFO.frequency
|
|
973
974
|
.cancelScheduledValues(now)
|
|
974
|
-
.setValueAtTime(
|
|
975
|
+
.setValueAtTime(freqVibLFO * channel.state.vibratoRate, now);
|
|
975
976
|
}
|
|
976
977
|
},
|
|
977
978
|
};
|
|
@@ -1050,6 +1051,8 @@ export class MidyGM1 {
|
|
|
1050
1051
|
const handler = this.controlChangeHandlers[controllerType];
|
|
1051
1052
|
if (handler) {
|
|
1052
1053
|
handler.call(this, channelNumber, value);
|
|
1054
|
+
const channel = this.channels[channelNumber];
|
|
1055
|
+
this.applyVoiceParams(channel, controller + 128);
|
|
1053
1056
|
}
|
|
1054
1057
|
else {
|
|
1055
1058
|
console.warn(`Unsupported Control change: controllerType=${controllerType} value=${value}`);
|
|
@@ -1057,13 +1060,14 @@ export class MidyGM1 {
|
|
|
1057
1060
|
}
|
|
1058
1061
|
updateModulation(channel) {
|
|
1059
1062
|
const now = this.audioContext.currentTime;
|
|
1063
|
+
const depth = channel.state.modulationDepth * channel.modulationDepthRange;
|
|
1060
1064
|
channel.scheduledNotes.forEach((noteList) => {
|
|
1061
1065
|
for (let i = 0; i < noteList.length; i++) {
|
|
1062
1066
|
const note = noteList[i];
|
|
1063
1067
|
if (!note)
|
|
1064
1068
|
continue;
|
|
1065
1069
|
if (note.modulationDepth) {
|
|
1066
|
-
note.modulationDepth.gain.setValueAtTime(
|
|
1070
|
+
note.modulationDepth.gain.setValueAtTime(depth, now);
|
|
1067
1071
|
}
|
|
1068
1072
|
else {
|
|
1069
1073
|
this.setPitchEnvelope(note);
|
|
@@ -1074,8 +1078,7 @@ export class MidyGM1 {
|
|
|
1074
1078
|
}
|
|
1075
1079
|
setModulationDepth(channelNumber, modulation) {
|
|
1076
1080
|
const channel = this.channels[channelNumber];
|
|
1077
|
-
channel.state.modulationDepth =
|
|
1078
|
-
channel.modulationDepthRange;
|
|
1081
|
+
channel.state.modulationDepth = modulation / 127;
|
|
1079
1082
|
this.updateModulation(channel);
|
|
1080
1083
|
}
|
|
1081
1084
|
setVolume(channelNumber, volume) {
|
|
@@ -1295,8 +1298,8 @@ export class MidyGM1 {
|
|
|
1295
1298
|
}
|
|
1296
1299
|
else {
|
|
1297
1300
|
const now = this.audioContext.currentTime;
|
|
1298
|
-
this.
|
|
1299
|
-
this.
|
|
1301
|
+
this.masterVolume.gain.cancelScheduledValues(now);
|
|
1302
|
+
this.masterVolume.gain.setValueAtTime(volume * volume, now);
|
|
1300
1303
|
}
|
|
1301
1304
|
}
|
|
1302
1305
|
handleExclusiveMessage(data) {
|
package/esm/midy-GM2.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ export class MidyGM2 {
|
|
|
3
3
|
currentBufferSource: null;
|
|
4
4
|
detune: number;
|
|
5
5
|
scaleOctaveTuningTable: any[];
|
|
6
|
+
pressureTable: Uint8Array<ArrayBuffer>;
|
|
7
|
+
keyBasedInstrumentControlTable: Int8Array<ArrayBuffer>;
|
|
6
8
|
program: number;
|
|
7
9
|
bank: number;
|
|
8
10
|
bankMSB: number;
|
|
@@ -75,14 +77,14 @@ export class MidyGM2 {
|
|
|
75
77
|
output: any;
|
|
76
78
|
};
|
|
77
79
|
};
|
|
78
|
-
|
|
80
|
+
masterVolume: any;
|
|
79
81
|
voiceParamsHandlers: {
|
|
80
82
|
modLfoToPitch: (channel: any, note: any, _prevValue: any) => void;
|
|
81
83
|
vibLfoToPitch: (channel: any, note: any, _prevValue: any) => void;
|
|
82
84
|
modLfoToFilterFc: (channel: any, note: any, _prevValue: any) => void;
|
|
83
|
-
modLfoToVolume: (channel: any, note: any) => void;
|
|
84
|
-
chorusEffectsSend: (
|
|
85
|
-
reverbEffectsSend: (
|
|
85
|
+
modLfoToVolume: (channel: any, note: any, _prevValue: any) => void;
|
|
86
|
+
chorusEffectsSend: (channel: any, note: any, prevValue: any) => void;
|
|
87
|
+
reverbEffectsSend: (channel: any, note: any, prevValue: any) => void;
|
|
86
88
|
delayModLFO: (_channel: any, note: any, _prevValue: any) => void;
|
|
87
89
|
freqModLFO: (_channel: any, note: any, _prevValue: any) => void;
|
|
88
90
|
delayVibLFO: (channel: any, note: any, prevValue: any) => void;
|
|
@@ -187,11 +189,12 @@ export class MidyGM2 {
|
|
|
187
189
|
rateToCent(rate: any): number;
|
|
188
190
|
centToRate(cent: any): number;
|
|
189
191
|
centToHz(cent: any): number;
|
|
190
|
-
|
|
192
|
+
calcChannelDetune(channel: any): any;
|
|
191
193
|
calcNoteDetune(channel: any, note: any): any;
|
|
192
194
|
updateDetune(channel: any): void;
|
|
195
|
+
getPortamentoTime(channel: any): number;
|
|
193
196
|
setPortamentoStartVolumeEnvelope(channel: any, note: any): void;
|
|
194
|
-
setVolumeEnvelope(note: any): void;
|
|
197
|
+
setVolumeEnvelope(channel: any, note: any): void;
|
|
195
198
|
setPitchEnvelope(note: any): void;
|
|
196
199
|
clampCutoffFrequency(frequency: any): number;
|
|
197
200
|
setPortamentoStartFilterEnvelope(channel: any, note: any): void;
|
|
@@ -209,30 +212,31 @@ export class MidyGM2 {
|
|
|
209
212
|
releaseSostenutoPedal(channelNumber: any, halfVelocity: any): any[];
|
|
210
213
|
handleMIDIMessage(statusByte: any, data1: any, data2: any): void | Promise<any>;
|
|
211
214
|
handleProgramChange(channelNumber: any, program: any): void;
|
|
212
|
-
handleChannelPressure(channelNumber: any,
|
|
215
|
+
handleChannelPressure(channelNumber: any, value: any): void;
|
|
216
|
+
setChannelPressure(channel: any, note: any): void;
|
|
213
217
|
handlePitchBendMessage(channelNumber: any, lsb: any, msb: any): void;
|
|
214
218
|
setPitchBend(channelNumber: any, value: any): void;
|
|
215
219
|
setModLfoToPitch(channel: any, note: any): void;
|
|
216
220
|
setVibLfoToPitch(channel: any, note: any): void;
|
|
217
|
-
setModLfoToFilterFc(note: any): void;
|
|
218
|
-
setModLfoToVolume(note: any): void;
|
|
219
|
-
|
|
220
|
-
|
|
221
|
+
setModLfoToFilterFc(channel: any, note: any): void;
|
|
222
|
+
setModLfoToVolume(channel: any, note: any): void;
|
|
223
|
+
setReverbEffectsSend(channel: any, note: any, prevValue: any): void;
|
|
224
|
+
setChorusEffectsSend(channel: any, note: any, prevValue: any): void;
|
|
221
225
|
setDelayModLFO(note: any): void;
|
|
222
226
|
setFreqModLFO(note: any): void;
|
|
223
227
|
createVoiceParamsHandlers(): {
|
|
224
228
|
modLfoToPitch: (channel: any, note: any, _prevValue: any) => void;
|
|
225
229
|
vibLfoToPitch: (channel: any, note: any, _prevValue: any) => void;
|
|
226
230
|
modLfoToFilterFc: (channel: any, note: any, _prevValue: any) => void;
|
|
227
|
-
modLfoToVolume: (channel: any, note: any) => void;
|
|
228
|
-
chorusEffectsSend: (
|
|
229
|
-
reverbEffectsSend: (
|
|
231
|
+
modLfoToVolume: (channel: any, note: any, _prevValue: any) => void;
|
|
232
|
+
chorusEffectsSend: (channel: any, note: any, prevValue: any) => void;
|
|
233
|
+
reverbEffectsSend: (channel: any, note: any, prevValue: any) => void;
|
|
230
234
|
delayModLFO: (_channel: any, note: any, _prevValue: any) => void;
|
|
231
235
|
freqModLFO: (_channel: any, note: any, _prevValue: any) => void;
|
|
232
236
|
delayVibLFO: (channel: any, note: any, prevValue: any) => void;
|
|
233
237
|
freqVibLFO: (channel: any, note: any, _prevValue: any) => void;
|
|
234
238
|
};
|
|
235
|
-
getControllerState(channel: any, noteNumber: any, velocity: any): Float32Array
|
|
239
|
+
getControllerState(channel: any, noteNumber: any, velocity: any): Float32Array<any>;
|
|
236
240
|
applyVoiceParams(channel: any, controllerType: any): void;
|
|
237
241
|
createControlChangeHandlers(): {
|
|
238
242
|
0: (channelNumber: any, msb: any) => void;
|
|
@@ -265,11 +269,13 @@ export class MidyGM2 {
|
|
|
265
269
|
updateModulation(channel: any): void;
|
|
266
270
|
setModulationDepth(channelNumber: any, modulation: any): void;
|
|
267
271
|
setPortamentoTime(channelNumber: any, portamentoTime: any): void;
|
|
272
|
+
setKeyBasedVolume(channel: any): void;
|
|
268
273
|
setVolume(channelNumber: any, volume: any): void;
|
|
269
274
|
panToGain(pan: any): {
|
|
270
275
|
gainLeft: number;
|
|
271
276
|
gainRight: number;
|
|
272
277
|
};
|
|
278
|
+
setKeyBasedPan(channel: any): void;
|
|
273
279
|
setPan(channelNumber: any, pan: any): void;
|
|
274
280
|
setExpression(channelNumber: any, expression: any): void;
|
|
275
281
|
setBankLSB(channelNumber: any, lsb: any): void;
|
|
@@ -277,10 +283,10 @@ export class MidyGM2 {
|
|
|
277
283
|
updateChannelVolume(channel: any): void;
|
|
278
284
|
setSustainPedal(channelNumber: any, value: any): void;
|
|
279
285
|
setPortamento(channelNumber: any, value: any): void;
|
|
280
|
-
setReverbSendLevel(channelNumber: any, reverbSendLevel: any): void;
|
|
281
|
-
setChorusSendLevel(channelNumber: any, chorusSendLevel: any): void;
|
|
282
286
|
setSostenutoPedal(channelNumber: any, value: any): void;
|
|
283
287
|
setSoftPedal(channelNumber: any, softPedal: any): void;
|
|
288
|
+
setReverbSendLevel(channelNumber: any, reverbSendLevel: any): void;
|
|
289
|
+
setChorusSendLevel(channelNumber: any, chorusSendLevel: any): void;
|
|
284
290
|
limitData(channel: any, minMSB: any, maxMSB: any, minLSB: any, maxLSB: any): void;
|
|
285
291
|
limitDataMSB(channel: any, minMSB: any, maxMSB: any): void;
|
|
286
292
|
handleRPN(channelNumber: any): void;
|
|
@@ -312,8 +318,6 @@ export class MidyGM2 {
|
|
|
312
318
|
setMasterFineTuning(value: any): void;
|
|
313
319
|
handleMasterCoarseTuningSysEx(data: any): void;
|
|
314
320
|
setMasterCoarseTuning(value: any): void;
|
|
315
|
-
getChannelBitmap(data: any): any[];
|
|
316
|
-
handleScaleOctaveTuning1ByteFormat(data: any): void;
|
|
317
321
|
handleGlobalParameterControlSysEx(data: any): void;
|
|
318
322
|
handleReverbParameterSysEx(data: any): void;
|
|
319
323
|
setReverbType(type: any): void;
|
|
@@ -332,6 +336,15 @@ export class MidyGM2 {
|
|
|
332
336
|
getChorusFeedback(value: any): number;
|
|
333
337
|
setChorusSendToReverb(value: any): void;
|
|
334
338
|
getChorusSendToReverb(value: any): number;
|
|
339
|
+
getChannelBitmap(data: any): any[];
|
|
340
|
+
handleScaleOctaveTuning1ByteFormatSysEx(data: any): void;
|
|
341
|
+
applyDestinationSettings(channel: any, note: any, table: any): void;
|
|
342
|
+
handleChannelPressureSysEx(data: any): void;
|
|
343
|
+
initControlTable(): Uint8Array<ArrayBuffer>;
|
|
344
|
+
applyControlTable(channel: any, controllerType: any): void;
|
|
345
|
+
handleControlChangeSysEx(data: any): void;
|
|
346
|
+
getKeyBasedInstrumentControlValue(channel: any, keyNumber: any, controllerType: any): number;
|
|
347
|
+
handleKeyBasedInstrumentControlSysEx(data: any): void;
|
|
335
348
|
handleExclusiveMessage(data: any): void;
|
|
336
349
|
handleSysEx(data: any): void;
|
|
337
350
|
scheduleTask(callback: any, startTime: any): Promise<any>;
|
|
@@ -340,7 +353,10 @@ declare class Note {
|
|
|
340
353
|
constructor(noteNumber: any, velocity: any, startTime: any, voice: any, voiceParams: any);
|
|
341
354
|
bufferSource: any;
|
|
342
355
|
filterNode: any;
|
|
356
|
+
volumeEnvelopeNode: any;
|
|
343
357
|
volumeNode: any;
|
|
358
|
+
gainL: any;
|
|
359
|
+
gainR: any;
|
|
344
360
|
volumeDepth: any;
|
|
345
361
|
modulationLFO: any;
|
|
346
362
|
modulationDepth: any;
|
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":"
|
|
1
|
+
{"version":3,"file":"midy-GM2.d.ts","sourceRoot":"","sources":["../src/midy-GM2.js"],"names":[],"mappings":"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"}
|