@marmooo/midy 0.0.5 → 0.0.7
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/esm/midy-GM1.d.ts +22 -10
- package/esm/midy-GM1.d.ts.map +1 -1
- package/esm/midy-GM1.js +126 -73
- package/esm/midy-GM2.d.ts +24 -10
- package/esm/midy-GM2.d.ts.map +1 -1
- package/esm/midy-GM2.js +145 -82
- package/esm/midy-GMLite.d.ts +16 -8
- package/esm/midy-GMLite.d.ts.map +1 -1
- package/esm/midy-GMLite.js +79 -60
- package/esm/midy.d.ts +24 -10
- package/esm/midy.d.ts.map +1 -1
- package/esm/midy.js +145 -111
- package/package.json +1 -1
- package/script/midy-GM1.d.ts +22 -10
- package/script/midy-GM1.d.ts.map +1 -1
- package/script/midy-GM1.js +126 -73
- package/script/midy-GM2.d.ts +24 -10
- package/script/midy-GM2.d.ts.map +1 -1
- package/script/midy-GM2.js +145 -82
- package/script/midy-GMLite.d.ts +16 -8
- package/script/midy-GMLite.d.ts.map +1 -1
- package/script/midy-GMLite.js +79 -60
- package/script/midy.d.ts +24 -10
- package/script/midy.d.ts.map +1 -1
- package/script/midy.js +145 -111
package/esm/midy-GM1.d.ts
CHANGED
|
@@ -41,8 +41,8 @@ export class MidyGM1 {
|
|
|
41
41
|
masterGain: any;
|
|
42
42
|
channels: {
|
|
43
43
|
scheduledNotes: Map<any, any>;
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
gainL: any;
|
|
45
|
+
gainR: any;
|
|
46
46
|
expression: number;
|
|
47
47
|
modulation: number;
|
|
48
48
|
sustainPedal: boolean;
|
|
@@ -65,13 +65,13 @@ export class MidyGM1 {
|
|
|
65
65
|
loadSoundFont(soundFontUrl: any): Promise<void>;
|
|
66
66
|
loadMIDI(midiUrl: any): Promise<void>;
|
|
67
67
|
setChannelAudioNodes(audioContext: any): {
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
gainL: any;
|
|
69
|
+
gainR: any;
|
|
70
70
|
};
|
|
71
71
|
createChannels(audioContext: any): {
|
|
72
72
|
scheduledNotes: Map<any, any>;
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
gainL: any;
|
|
74
|
+
gainR: any;
|
|
75
75
|
expression: number;
|
|
76
76
|
modulation: number;
|
|
77
77
|
sustainPedal: boolean;
|
|
@@ -128,17 +128,31 @@ export class MidyGM1 {
|
|
|
128
128
|
handleMIDIMessage(statusByte: any, data1: any, data2: any): void | any[] | Promise<any>;
|
|
129
129
|
handleProgramChange(channelNumber: any, program: any): void;
|
|
130
130
|
handlePitchBendMessage(channelNumber: any, lsb: any, msb: any): void;
|
|
131
|
-
|
|
131
|
+
setPitchBend(channelNumber: any, pitchBend: any): void;
|
|
132
132
|
handleControlChange(channelNumber: any, controller: any, value: any): void | any[];
|
|
133
133
|
setModulation(channelNumber: any, modulation: any): void;
|
|
134
134
|
setVolume(channelNumber: any, volume: any): void;
|
|
135
|
+
panToGain(pan: any): {
|
|
136
|
+
gainLeft: number;
|
|
137
|
+
gainRight: number;
|
|
138
|
+
};
|
|
135
139
|
setPan(channelNumber: any, pan: any): void;
|
|
136
140
|
setExpression(channelNumber: any, expression: any): void;
|
|
137
141
|
updateChannelGain(channel: any): void;
|
|
138
142
|
setSustainPedal(channelNumber: any, value: any): void;
|
|
143
|
+
limitData(channel: any, minMSB: any, maxMSB: any, minLSB: any, maxLSB: any): void;
|
|
144
|
+
limitDataMSB(channel: any, minMSB: any, maxMSB: any): void;
|
|
145
|
+
handleRPN(channelNumber: any): void;
|
|
139
146
|
setRPNMSB(channelNumber: any, value: any): void;
|
|
140
147
|
setRPNLSB(channelNumber: any, value: any): void;
|
|
141
148
|
setDataEntry(channelNumber: any, value: any, isMSB: any): void;
|
|
149
|
+
updateDetune(channel: any, detuneChange: any): void;
|
|
150
|
+
handlePitchBendRangeMessage(channelNumber: any): void;
|
|
151
|
+
setPitchBendRange(channelNumber: any, pitchBendRange: any): void;
|
|
152
|
+
handleFineTuningMessage(channelNumber: any): void;
|
|
153
|
+
setFineTuning(channelNumber: any, fineTuning: any): void;
|
|
154
|
+
handleCoarseTuningMessage(channelNumber: any): void;
|
|
155
|
+
setCoarseTuning(channelNumber: any, coarseTuning: any): void;
|
|
142
156
|
allSoundOff(channelNumber: any): any[];
|
|
143
157
|
resetAllControllers(channelNumber: any): void;
|
|
144
158
|
allNotesOff(channelNumber: any): any[];
|
|
@@ -146,7 +160,7 @@ export class MidyGM1 {
|
|
|
146
160
|
GM1SystemOn(): void;
|
|
147
161
|
handleUniversalRealTimeExclusiveMessage(data: any): void;
|
|
148
162
|
handleMasterVolumeSysEx(data: any): void;
|
|
149
|
-
|
|
163
|
+
setMasterVolume(volume: any): void;
|
|
150
164
|
handleExclusiveMessage(data: any): void;
|
|
151
165
|
handleSysEx(data: any): void;
|
|
152
166
|
scheduleTask(callback: any, startTime: any): Promise<any>;
|
|
@@ -158,8 +172,6 @@ declare class Note {
|
|
|
158
172
|
filterNode: any;
|
|
159
173
|
modLFO: any;
|
|
160
174
|
modLFOGain: any;
|
|
161
|
-
vibLFO: any;
|
|
162
|
-
vibLFOGain: any;
|
|
163
175
|
noteNumber: any;
|
|
164
176
|
velocity: any;
|
|
165
177
|
startTime: 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":"
|
|
1
|
+
{"version":3,"file":"midy-GM1.d.ts","sourceRoot":"","sources":["../src/midy-GM1.js"],"names":[],"mappings":"AAqBA;IAmBE;;;;;;;;;;;MAWE;IAEF;;;;;;;MAOE;IAEF,+BAMC;IA9CD,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;IAyBhB,kBAAgC;IAChC,gBAA4C;IAE5C;;;;;;;;;;;;;;;;;;;;QAAiD;IAInD,4BAMC;IAED,mCASC;IAED,gDAMC;IAED,sCASC;IAED;;;MAYC;IAED;;;;;;;;;;;;;;;;;;;;QAUC;IAED,+DAyBC;IAED,mEAWC;IAED,qDAOC;IAED,2EA+CC;IAED,mCAOC;IAED,0BA+CC;IAED,uDAEC;IAED,wDAEC;IAED;;;MA8DC;IAED,4BAsBC;IAED,uBAKC;IAED,aAGC;IAED,cAKC;IAED,wBAIC;IAED,0BAKC;IAED,wBAOC;IAED,sBAGC;IAED,uDASC;IAED,6CAQC;IAED,sDAGC;IAED,2BAEC;IAED,4BAEC;IAED,sCAGC;IAED,mFAGC;IAED,iDAiBC;IAED,iDAiCC;IAED,0DAmBC;IAED,wHA6BC;IAED,kGA6BC;IAED,0EAGC;IAED,sIAmDC;IAED,0FAGC;IAED,kEAeC;IAED,wFAiBC;IAED,4DAGC;IAED,qEAGC;IAED,uDAOC;IAED,mFA+BC;IAED,yDAiBC;IAED,iDAIC;IAED;;;MAMC;IAED,2CAIC;IAED,yDAIC;IAED,sCAUC;IAED,sDAMC;IAED,kFAeC;IAED,2DAMC;IAED,oCAkBC;IAED,gDAEC;IAED,gDAEC;IAED,+DAIC;IAED,oDAUC;IAED,sDAKC;IAED,iEAOC;IAED,kDAKC;IAED,yDAGC;IAED,oDAKC;IAED,6DAGC;IAED,uCAoBC;IAED,8CAEC;IAED,uCAoBC;IAED,4DAgBC;IAED,oBAQC;IAED,yDAaC;IAED,yCAGC;IAED,mCAQC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AA1iCD;IAOE,gFAKC;IAXD,kBAAa;IACb,cAAS;IACT,gBAAW;IACX,YAAO;IACP,gBAAW;IAGT,gBAA4B;IAC5B,cAAwB;IACxB,eAA0B;IAC1B,mBAAkC;CAErC"}
|
package/esm/midy-GM1.js
CHANGED
|
@@ -32,18 +32,6 @@ class Note {
|
|
|
32
32
|
writable: true,
|
|
33
33
|
value: void 0
|
|
34
34
|
});
|
|
35
|
-
Object.defineProperty(this, "vibLFO", {
|
|
36
|
-
enumerable: true,
|
|
37
|
-
configurable: true,
|
|
38
|
-
writable: true,
|
|
39
|
-
value: void 0
|
|
40
|
-
});
|
|
41
|
-
Object.defineProperty(this, "vibLFOGain", {
|
|
42
|
-
enumerable: true,
|
|
43
|
-
configurable: true,
|
|
44
|
-
writable: true,
|
|
45
|
-
value: void 0
|
|
46
|
-
});
|
|
47
35
|
this.noteNumber = noteNumber;
|
|
48
36
|
this.velocity = velocity;
|
|
49
37
|
this.startTime = startTime;
|
|
@@ -195,17 +183,16 @@ export class MidyGM1 {
|
|
|
195
183
|
this.totalTime = this.calcTotalTime();
|
|
196
184
|
}
|
|
197
185
|
setChannelAudioNodes(audioContext) {
|
|
198
|
-
const
|
|
199
|
-
|
|
200
|
-
});
|
|
201
|
-
const
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
gainNode.connect(this.masterGain);
|
|
186
|
+
const { gainLeft, gainRight } = this.panToGain(MidyGM1.channelSettings.pan);
|
|
187
|
+
const gainL = new GainNode(audioContext, { gain: gainLeft });
|
|
188
|
+
const gainR = new GainNode(audioContext, { gain: gainRight });
|
|
189
|
+
const merger = new ChannelMergerNode(audioContext, { numberOfInputs: 2 });
|
|
190
|
+
gainL.connect(merger, 0, 0);
|
|
191
|
+
gainR.connect(merger, 0, 1);
|
|
192
|
+
merger.connect(this.masterGain);
|
|
206
193
|
return {
|
|
207
|
-
|
|
208
|
-
|
|
194
|
+
gainL,
|
|
195
|
+
gainR,
|
|
209
196
|
};
|
|
210
197
|
}
|
|
211
198
|
createChannels(audioContext) {
|
|
@@ -290,7 +277,7 @@ export class MidyGM1 {
|
|
|
290
277
|
this.handleProgramChange(event.channel, event.programNumber);
|
|
291
278
|
break;
|
|
292
279
|
case "pitchBend":
|
|
293
|
-
this.
|
|
280
|
+
this.setPitchBend(event.channel, event.value);
|
|
294
281
|
break;
|
|
295
282
|
case "sysEx":
|
|
296
283
|
this.handleSysEx(event.data);
|
|
@@ -370,7 +357,6 @@ export class MidyGM1 {
|
|
|
370
357
|
const tmpChannels = new Array(16);
|
|
371
358
|
for (let i = 0; i < tmpChannels.length; i++) {
|
|
372
359
|
tmpChannels[i] = {
|
|
373
|
-
durationTicks: new Map(),
|
|
374
360
|
programNumber: -1,
|
|
375
361
|
bank: this.channels[i].bank,
|
|
376
362
|
};
|
|
@@ -387,16 +373,6 @@ export class MidyGM1 {
|
|
|
387
373
|
instruments.add(`${channel.bank}:0`);
|
|
388
374
|
channel.programNumber = 0;
|
|
389
375
|
}
|
|
390
|
-
channel.durationTicks.set(event.noteNumber, {
|
|
391
|
-
ticks: event.ticks,
|
|
392
|
-
noteOn: event,
|
|
393
|
-
});
|
|
394
|
-
break;
|
|
395
|
-
}
|
|
396
|
-
case "noteOff": {
|
|
397
|
-
const { ticks, noteOn } = tmpChannels[event.channel].durationTicks
|
|
398
|
-
.get(event.noteNumber);
|
|
399
|
-
noteOn.durationTicks = event.ticks - ticks;
|
|
400
376
|
break;
|
|
401
377
|
}
|
|
402
378
|
case "programChange": {
|
|
@@ -410,8 +386,8 @@ export class MidyGM1 {
|
|
|
410
386
|
});
|
|
411
387
|
});
|
|
412
388
|
const priority = {
|
|
413
|
-
|
|
414
|
-
|
|
389
|
+
controller: 0,
|
|
390
|
+
sysEx: 1,
|
|
415
391
|
};
|
|
416
392
|
timeline.sort((a, b) => {
|
|
417
393
|
if (a.ticks !== b.ticks)
|
|
@@ -516,7 +492,8 @@ export class MidyGM1 {
|
|
|
516
492
|
return noteList[0];
|
|
517
493
|
}
|
|
518
494
|
connectNoteEffects(channel, gainNode) {
|
|
519
|
-
gainNode.connect(channel.
|
|
495
|
+
gainNode.connect(channel.gainL);
|
|
496
|
+
gainNode.connect(channel.gainR);
|
|
520
497
|
}
|
|
521
498
|
cbToRatio(cb) {
|
|
522
499
|
return Math.pow(10, cb / 200);
|
|
@@ -534,9 +511,7 @@ export class MidyGM1 {
|
|
|
534
511
|
}
|
|
535
512
|
setVolumeEnvelope(channel, note) {
|
|
536
513
|
const { instrumentKey, startTime, velocity } = note;
|
|
537
|
-
note.gainNode = new GainNode(this.audioContext, {
|
|
538
|
-
gain: 0,
|
|
539
|
-
});
|
|
514
|
+
note.gainNode = new GainNode(this.audioContext, { gain: 0 });
|
|
540
515
|
let volume = (velocity / 127) * channel.volume * channel.expression;
|
|
541
516
|
if (volume === 0)
|
|
542
517
|
volume = 1e-6; // exponentialRampToValueAtTime() requires a non-zero value
|
|
@@ -726,21 +701,15 @@ export class MidyGM1 {
|
|
|
726
701
|
}
|
|
727
702
|
handlePitchBendMessage(channelNumber, lsb, msb) {
|
|
728
703
|
const pitchBend = msb * 128 + lsb;
|
|
729
|
-
this.
|
|
704
|
+
this.setPitchBend(channelNumber, pitchBend);
|
|
730
705
|
}
|
|
731
|
-
|
|
732
|
-
const now = this.audioContext.currentTime;
|
|
706
|
+
setPitchBend(channelNumber, pitchBend) {
|
|
733
707
|
const channel = this.channels[channelNumber];
|
|
708
|
+
const prevPitchBend = channel.pitchBend;
|
|
734
709
|
channel.pitchBend = (pitchBend - 8192) / 8192;
|
|
735
|
-
const
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
const { bufferSource, instrumentKey, noteNumber } = activeNote;
|
|
739
|
-
const playbackRate = calcPlaybackRate(instrumentKey, noteNumber, semitoneOffset);
|
|
740
|
-
bufferSource.playbackRate
|
|
741
|
-
.cancelScheduledValues(now)
|
|
742
|
-
.setValueAtTime(playbackRate * pressure, now);
|
|
743
|
-
});
|
|
710
|
+
const detuneChange = (channel.pitchBend - prevPitchBend) *
|
|
711
|
+
channel.pitchBendRange * 100;
|
|
712
|
+
this.updateDetune(channel, detuneChange);
|
|
744
713
|
}
|
|
745
714
|
handleControlChange(channelNumber, controller, value) {
|
|
746
715
|
switch (controller) {
|
|
@@ -759,9 +728,9 @@ export class MidyGM1 {
|
|
|
759
728
|
case 64:
|
|
760
729
|
return this.setSustainPedal(channelNumber, value);
|
|
761
730
|
case 100:
|
|
762
|
-
return this.setRPNMSB(channelNumber, value);
|
|
763
|
-
case 101:
|
|
764
731
|
return this.setRPNLSB(channelNumber, value);
|
|
732
|
+
case 101:
|
|
733
|
+
return this.setRPNMSB(channelNumber, value);
|
|
765
734
|
case 120:
|
|
766
735
|
return this.allSoundOff(channelNumber);
|
|
767
736
|
case 121:
|
|
@@ -793,12 +762,17 @@ export class MidyGM1 {
|
|
|
793
762
|
channel.volume = volume / 127;
|
|
794
763
|
this.updateChannelGain(channel);
|
|
795
764
|
}
|
|
765
|
+
panToGain(pan) {
|
|
766
|
+
const theta = Math.PI / 2 * Math.max(0, pan - 1) / 126;
|
|
767
|
+
return {
|
|
768
|
+
gainLeft: Math.cos(theta),
|
|
769
|
+
gainRight: Math.sin(theta),
|
|
770
|
+
};
|
|
771
|
+
}
|
|
796
772
|
setPan(channelNumber, pan) {
|
|
797
|
-
const now = this.audioContext.currentTime;
|
|
798
773
|
const channel = this.channels[channelNumber];
|
|
799
|
-
channel.pan = pan
|
|
800
|
-
|
|
801
|
-
channel.pannerNode.pan.setValueAtTime(channel.pan, now);
|
|
774
|
+
channel.pan = pan;
|
|
775
|
+
this.updateChannelGain(channel);
|
|
802
776
|
}
|
|
803
777
|
setExpression(channelNumber, expression) {
|
|
804
778
|
const channel = this.channels[channelNumber];
|
|
@@ -808,8 +782,13 @@ export class MidyGM1 {
|
|
|
808
782
|
updateChannelGain(channel) {
|
|
809
783
|
const now = this.audioContext.currentTime;
|
|
810
784
|
const volume = channel.volume * channel.expression;
|
|
811
|
-
channel.
|
|
812
|
-
channel.
|
|
785
|
+
const { gainLeft, gainRight } = this.panToGain(channel.pan);
|
|
786
|
+
channel.gainL.gain
|
|
787
|
+
.cancelScheduledValues(now)
|
|
788
|
+
.setValueAtTime(volume * gainLeft, now);
|
|
789
|
+
channel.gainR.gain
|
|
790
|
+
.cancelScheduledValues(now)
|
|
791
|
+
.setValueAtTime(volume * gainRight, now);
|
|
813
792
|
}
|
|
814
793
|
setSustainPedal(channelNumber, value) {
|
|
815
794
|
const isOn = value >= 64;
|
|
@@ -818,31 +797,105 @@ export class MidyGM1 {
|
|
|
818
797
|
this.releaseSustainPedal(channelNumber, value);
|
|
819
798
|
}
|
|
820
799
|
}
|
|
821
|
-
|
|
822
|
-
|
|
800
|
+
limitData(channel, minMSB, maxMSB, minLSB, maxLSB) {
|
|
801
|
+
if (maxLSB < channel.dataLSB) {
|
|
802
|
+
channel.dataMSB++;
|
|
803
|
+
channel.dataLSB = minLSB;
|
|
804
|
+
}
|
|
805
|
+
else if (channel.dataLSB < 0) {
|
|
806
|
+
channel.dataMSB--;
|
|
807
|
+
channel.dataLSB = maxLSB;
|
|
808
|
+
}
|
|
809
|
+
if (maxMSB < channel.dataMSB) {
|
|
810
|
+
channel.dataMSB = maxMSB;
|
|
811
|
+
channel.dataLSB = maxLSB;
|
|
812
|
+
}
|
|
813
|
+
else if (channel.dataMSB < 0) {
|
|
814
|
+
channel.dataMSB = minMSB;
|
|
815
|
+
channel.dataLSB = minLSB;
|
|
816
|
+
}
|
|
823
817
|
}
|
|
824
|
-
|
|
825
|
-
|
|
818
|
+
limitDataMSB(channel, minMSB, maxMSB) {
|
|
819
|
+
if (maxMSB < channel.dataMSB) {
|
|
820
|
+
channel.dataMSB = maxMSB;
|
|
821
|
+
}
|
|
822
|
+
else if (channel.dataMSB < 0) {
|
|
823
|
+
channel.dataMSB = minMSB;
|
|
824
|
+
}
|
|
826
825
|
}
|
|
827
|
-
|
|
826
|
+
handleRPN(channelNumber) {
|
|
828
827
|
const channel = this.channels[channelNumber];
|
|
829
828
|
const rpn = channel.rpnMSB * 128 + channel.rpnLSB;
|
|
830
|
-
isMSB ? channel.dataMSB = value : channel.dataLSB = value;
|
|
831
|
-
const { dataMSB, dataLSB } = channel;
|
|
832
829
|
switch (rpn) {
|
|
833
830
|
case 0:
|
|
834
|
-
|
|
831
|
+
this.handlePitchBendRangeMessage(channelNumber);
|
|
835
832
|
break;
|
|
836
833
|
case 1:
|
|
837
|
-
|
|
834
|
+
this.handleFineTuningMessage(channelNumber);
|
|
838
835
|
break;
|
|
839
836
|
case 2:
|
|
840
|
-
|
|
837
|
+
this.handleCoarseTuningMessage(channelNumber);
|
|
841
838
|
break;
|
|
842
839
|
default:
|
|
843
840
|
console.warn(`Channel ${channelNumber}: Unsupported RPN MSB=${channel.rpnMSB} LSB=${channel.rpnLSB}`);
|
|
844
841
|
}
|
|
845
842
|
}
|
|
843
|
+
setRPNMSB(channelNumber, value) {
|
|
844
|
+
this.channels[channelNumber].rpnMSB = value;
|
|
845
|
+
}
|
|
846
|
+
setRPNLSB(channelNumber, value) {
|
|
847
|
+
this.channels[channelNumber].rpnLSB = value;
|
|
848
|
+
}
|
|
849
|
+
setDataEntry(channelNumber, value, isMSB) {
|
|
850
|
+
const channel = this.channels[channelNumber];
|
|
851
|
+
isMSB ? channel.dataMSB = value : channel.dataLSB = value;
|
|
852
|
+
this.handleRPN(channelNumber);
|
|
853
|
+
}
|
|
854
|
+
updateDetune(channel, detuneChange) {
|
|
855
|
+
const now = this.audioContext.currentTime;
|
|
856
|
+
const activeNotes = this.getActiveNotes(channel, now);
|
|
857
|
+
activeNotes.forEach((activeNote) => {
|
|
858
|
+
const { bufferSource } = activeNote;
|
|
859
|
+
const detune = bufferSource.detune.value + detuneChange;
|
|
860
|
+
bufferSource.detune
|
|
861
|
+
.cancelScheduledValues(now)
|
|
862
|
+
.setValueAtTime(detune, now);
|
|
863
|
+
});
|
|
864
|
+
}
|
|
865
|
+
handlePitchBendRangeMessage(channelNumber) {
|
|
866
|
+
const channel = this.channels[channelNumber];
|
|
867
|
+
this.limitData(channel, 0, 127, 0, 99);
|
|
868
|
+
const pitchBendRange = channel.dataMSB + channel.dataLSB / 100;
|
|
869
|
+
this.setPitchBendRange(channelNumber, pitchBendRange);
|
|
870
|
+
}
|
|
871
|
+
setPitchBendRange(channelNumber, pitchBendRange) {
|
|
872
|
+
const channel = this.channels[channelNumber];
|
|
873
|
+
const prevPitchBendRange = channel.pitchBendRange;
|
|
874
|
+
channel.pitchBendRange = pitchBendRange;
|
|
875
|
+
const detuneChange = (channel.pitchBendRange - prevPitchBendRange) *
|
|
876
|
+
channel.pitchBend * 100;
|
|
877
|
+
this.updateDetune(channel, detuneChange);
|
|
878
|
+
}
|
|
879
|
+
handleFineTuningMessage(channelNumber) {
|
|
880
|
+
const channel = this.channels[channelNumber];
|
|
881
|
+
this.limitData(channel, 0, 127, 0, 127);
|
|
882
|
+
const fineTuning = (channel.dataMSB * 128 + channel.dataLSB - 8192) / 8192;
|
|
883
|
+
this.setFineTuning(channelNumber, fineTuning);
|
|
884
|
+
}
|
|
885
|
+
setFineTuning(channelNumber, fineTuning) {
|
|
886
|
+
const channel = this.channels[channelNumber];
|
|
887
|
+
channel.fineTuning = fineTuning;
|
|
888
|
+
}
|
|
889
|
+
handleCoarseTuningMessage(channelNumber) {
|
|
890
|
+
const channel = this.channels[channelNumber];
|
|
891
|
+
this.limitDataMSB(channel, 0, 127);
|
|
892
|
+
const coarseTuning = channel.dataMSB - 64;
|
|
893
|
+
this.setFineTuning(channelNumber, coarseTuning);
|
|
894
|
+
}
|
|
895
|
+
setCoarseTuning(channelNumber, coarseTuning) {
|
|
896
|
+
const channel = this.channels[channelNumber];
|
|
897
|
+
channel.fineTuning = coarseTuning;
|
|
898
|
+
}
|
|
846
899
|
allSoundOff(channelNumber) {
|
|
847
900
|
const now = this.audioContext.currentTime;
|
|
848
901
|
const channel = this.channels[channelNumber];
|
|
@@ -918,9 +971,9 @@ export class MidyGM1 {
|
|
|
918
971
|
}
|
|
919
972
|
handleMasterVolumeSysEx(data) {
|
|
920
973
|
const volume = (data[5] * 128 + data[4]) / 16383;
|
|
921
|
-
this.
|
|
974
|
+
this.setMasterVolume(volume);
|
|
922
975
|
}
|
|
923
|
-
|
|
976
|
+
setMasterVolume(volume) {
|
|
924
977
|
if (volume < 0 && 1 < volume) {
|
|
925
978
|
console.error("Master Volume is out of range");
|
|
926
979
|
}
|
|
@@ -961,7 +1014,7 @@ Object.defineProperty(MidyGM1, "channelSettings", {
|
|
|
961
1014
|
writable: true,
|
|
962
1015
|
value: {
|
|
963
1016
|
volume: 100 / 127,
|
|
964
|
-
pan:
|
|
1017
|
+
pan: 64,
|
|
965
1018
|
bank: 0,
|
|
966
1019
|
dataMSB: 0,
|
|
967
1020
|
dataLSB: 0,
|
package/esm/midy-GM2.d.ts
CHANGED
|
@@ -73,8 +73,8 @@ export class MidyGM2 {
|
|
|
73
73
|
lfoFilterDepth: number;
|
|
74
74
|
lfoAmplitudeDepth: number;
|
|
75
75
|
};
|
|
76
|
-
|
|
77
|
-
|
|
76
|
+
gainL: any;
|
|
77
|
+
gainR: any;
|
|
78
78
|
reverbEffect: {
|
|
79
79
|
convolverNode: any;
|
|
80
80
|
dryGain: any;
|
|
@@ -117,8 +117,8 @@ export class MidyGM2 {
|
|
|
117
117
|
loadSoundFont(soundFontUrl: any): Promise<void>;
|
|
118
118
|
loadMIDI(midiUrl: any): Promise<void>;
|
|
119
119
|
setChannelAudioNodes(audioContext: any): {
|
|
120
|
-
|
|
121
|
-
|
|
120
|
+
gainL: any;
|
|
121
|
+
gainR: any;
|
|
122
122
|
reverbEffect: {
|
|
123
123
|
convolverNode: any;
|
|
124
124
|
dryGain: any;
|
|
@@ -142,8 +142,8 @@ export class MidyGM2 {
|
|
|
142
142
|
lfoFilterDepth: number;
|
|
143
143
|
lfoAmplitudeDepth: number;
|
|
144
144
|
};
|
|
145
|
-
|
|
146
|
-
|
|
145
|
+
gainL: any;
|
|
146
|
+
gainR: any;
|
|
147
147
|
reverbEffect: {
|
|
148
148
|
convolverNode: any;
|
|
149
149
|
dryGain: any;
|
|
@@ -234,12 +234,16 @@ export class MidyGM2 {
|
|
|
234
234
|
handleProgramChange(channelNumber: any, program: any): void;
|
|
235
235
|
handleChannelPressure(channelNumber: any, pressure: any): void;
|
|
236
236
|
handlePitchBendMessage(channelNumber: any, lsb: any, msb: any): void;
|
|
237
|
-
|
|
237
|
+
setPitchBend(channelNumber: any, pitchBend: any): void;
|
|
238
238
|
handleControlChange(channelNumber: any, controller: any, value: any): void | any[];
|
|
239
239
|
setBankMSB(channelNumber: any, msb: any): void;
|
|
240
240
|
setModulation(channelNumber: any, modulation: any): void;
|
|
241
241
|
setPortamentoTime(channelNumber: any, portamentoTime: any): void;
|
|
242
242
|
setVolume(channelNumber: any, volume: any): void;
|
|
243
|
+
panToGain(pan: any): {
|
|
244
|
+
gainLeft: number;
|
|
245
|
+
gainRight: number;
|
|
246
|
+
};
|
|
243
247
|
setPan(channelNumber: any, pan: any): void;
|
|
244
248
|
setExpression(channelNumber: any, expression: any): void;
|
|
245
249
|
setBankLSB(channelNumber: any, lsb: any): void;
|
|
@@ -250,9 +254,19 @@ export class MidyGM2 {
|
|
|
250
254
|
setChorus(channelNumber: any, chorus: any): void;
|
|
251
255
|
setSostenutoPedal(channelNumber: any, value: any): void;
|
|
252
256
|
setSoftPedal(channelNumber: any, softPedal: any): void;
|
|
257
|
+
limitData(channel: any, minMSB: any, maxMSB: any, minLSB: any, maxLSB: any): void;
|
|
258
|
+
limitDataMSB(channel: any, minMSB: any, maxMSB: any): void;
|
|
259
|
+
handleRPN(channelNumber: any, value: any): void;
|
|
253
260
|
setRPNMSB(channelNumber: any, value: any): void;
|
|
254
261
|
setRPNLSB(channelNumber: any, value: any): void;
|
|
255
262
|
setDataEntry(channelNumber: any, value: any, isMSB: any): void;
|
|
263
|
+
updateDetune(channel: any, detuneChange: any): void;
|
|
264
|
+
handlePitchBendRangeMessage(channelNumber: any): void;
|
|
265
|
+
setPitchBendRange(channelNumber: any, pitchBendRange: any): void;
|
|
266
|
+
handleFineTuningMessage(channelNumber: any): void;
|
|
267
|
+
setFineTuning(channelNumber: any, fineTuning: any): void;
|
|
268
|
+
handleCoarseTuningMessage(channelNumber: any): void;
|
|
269
|
+
setCoarseTuning(channelNumber: any, coarseTuning: any): void;
|
|
256
270
|
allSoundOff(channelNumber: any): any[];
|
|
257
271
|
resetAllControllers(channelNumber: any): void;
|
|
258
272
|
allNotesOff(channelNumber: any): any[];
|
|
@@ -265,11 +279,11 @@ export class MidyGM2 {
|
|
|
265
279
|
GM2SystemOn(): void;
|
|
266
280
|
handleUniversalRealTimeExclusiveMessage(data: any): void;
|
|
267
281
|
handleMasterVolumeSysEx(data: any): void;
|
|
268
|
-
|
|
282
|
+
setMasterVolume(volume: any): void;
|
|
269
283
|
handleMasterFineTuningSysEx(data: any): void;
|
|
270
|
-
|
|
284
|
+
setMasterFineTuning(fineTuning: any): void;
|
|
271
285
|
handleMasterCoarseTuningSysEx(data: any): void;
|
|
272
|
-
|
|
286
|
+
setMasterCoarseTuning(coarseTuning: any): void;
|
|
273
287
|
handleExclusiveMessage(data: any): void;
|
|
274
288
|
handleSysEx(data: any): void;
|
|
275
289
|
scheduleTask(callback: any, startTime: any): Promise<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":"AAuBA;IAwBE;;;;;;;;;;;;;;;;;MAiBE;IAEF;;;;;;;;;;;MAWE;IAEF;;;;;;;MAOE;IAEF,+BAMC;IAtED,qBAAmB;IACnB,kBAAc;IACd,qBAAmB;IACnB,yBAAqB;IACrB,2BAAuB;IACvB,cAAa;IACb,cAAa;IACb,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;IA4ChB,kBAAgC;IAChC,gBAA4C;IAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAAiD;IAInD,4BAMC;IAED,mCASC;IAED,gDAMC;IAED,sCASC;IAED;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"midy-GM2.d.ts","sourceRoot":"","sources":["../src/midy-GM2.js"],"names":[],"mappings":"AAuBA;IAwBE;;;;;;;;;;;;;;;;;MAiBE;IAEF;;;;;;;;;;;MAWE;IAEF;;;;;;;MAOE;IAEF,+BAMC;IAtED,qBAAmB;IACnB,kBAAc;IACd,qBAAmB;IACnB,yBAAqB;IACrB,2BAAuB;IACvB,cAAa;IACb,cAAa;IACb,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;IA4ChB,kBAAgC;IAChC,gBAA4C;IAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAAiD;IAInD,4BAMC;IAED,mCASC;IAED,gDAMC;IAED,sCASC;IAED;;;;;;;;;;;;;;MAqBC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAcC;IAED,+DAyBC;IAED,mEAWC;IAED,qDAOC;IAED,2EAkDC;IAED,mCAOC;IAED,0BA+CC;IAED,uDAEC;IAED,wDAEC;IAED;;;MAgGC;IAED,4BAsBC;IAED,uBAKC;IAED,aAGC;IAED,cAKC;IAED,wBAIC;IAED,0BAKC;IAED,wBAOC;IAED,sBAGC;IAED,uDASC;IAED,6CAQC;IAED;;;;MAoCC;IAED;;;;;MAqCC;IAED,sDA6BC;IAED,2BAEC;IAED,4BAEC;IAED,sCAKC;IAED,mFAGC;IAED,iDAiBC;IAED,iDAiCC;IAED,0DAmBC;IAED,wHAiCC;IAED,gDAQC;IAED,kGAgCC;IAED,0EAGC;IAED,sIAoDC;IAED,0FAGC;IAED,kEAeC;IAED,oEAYC;IAED,wFAmBC;IAED,4DAIC;IAED,+DAcC;IAED,qEAGC;IAED,uDAOC;IAED,mFAuDC;IAED,+CAEC;IAED,yDAiBC;IAED,iEAEC;IAED,iDAIC;IAED;;;MAMC;IAED,2CAIC;IAED,yDAIC;IAED,+CAEC;IAED,sCAUC;IAED,sDAMC;IAED,oDAEC;IAED,iDASC;IAED,iDAIC;IAED,wDAWC;IAED,uDAGC;IAED,kFAeC;IAED,2DAMC;IAED,gDAqBC;IAED,gDAEC;IAED,gDAEC;IAED,+DAIC;IAED,oDAUC;IAED,sDAKC;IAED,iEAOC;IAED,kDAKC;IAED,yDAGC;IAED,oDAKC;IAED,6DAGC;IAED,uCAoBC;IAED,8CAEC;IAED,uCAoBC;IAED,gBAEC;IAED,eAEC;IAED,eAEC;IAED,eAEC;IAED,4DAmBC;IAED,oBAQC;IAED,oBAQC;IAED,yDAgDC;IAED,yCAGC;IAED,mCAQC;IAED,6CAGC;IAED,2CAMC;IAED,+CAGC;IAED,+CAMC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AA17CD;IASE,gFAKC;IAbD,kBAAa;IACb,cAAS;IACT,gBAAW;IACX,YAAO;IACP,gBAAW;IACX,YAAO;IACP,gBAAW;IAGT,gBAA4B;IAC5B,cAAwB;IACxB,eAA0B;IAC1B,mBAAkC;CAErC"}
|