@marmooo/midy 0.2.2 → 0.2.4
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 -4
- package/esm/midy-GM1.d.ts.map +1 -1
- package/esm/midy-GM1.js +31 -25
- package/esm/midy-GM2.d.ts +19 -22
- package/esm/midy-GM2.d.ts.map +1 -1
- package/esm/midy-GM2.js +148 -119
- package/esm/midy-GMLite.d.ts +6 -5
- package/esm/midy-GMLite.d.ts.map +1 -1
- package/esm/midy-GMLite.js +28 -21
- package/esm/midy.d.ts +21 -22
- package/esm/midy.d.ts.map +1 -1
- package/esm/midy.js +229 -139
- package/package.json +1 -1
- package/script/midy-GM1.d.ts +5 -4
- package/script/midy-GM1.d.ts.map +1 -1
- package/script/midy-GM1.js +31 -25
- package/script/midy-GM2.d.ts +19 -22
- package/script/midy-GM2.d.ts.map +1 -1
- package/script/midy-GM2.js +148 -119
- package/script/midy-GMLite.d.ts +6 -5
- package/script/midy-GMLite.d.ts.map +1 -1
- package/script/midy-GMLite.js +28 -21
- package/script/midy.d.ts +21 -22
- package/script/midy.d.ts.map +1 -1
- package/script/midy.js +229 -139
package/esm/midy-GMLite.js
CHANGED
|
@@ -221,11 +221,11 @@ export class MidyGMLite {
|
|
|
221
221
|
value: new Map()
|
|
222
222
|
});
|
|
223
223
|
this.audioContext = audioContext;
|
|
224
|
-
this.
|
|
224
|
+
this.masterVolume = new GainNode(audioContext);
|
|
225
225
|
this.voiceParamsHandlers = this.createVoiceParamsHandlers();
|
|
226
226
|
this.controlChangeHandlers = this.createControlChangeHandlers();
|
|
227
227
|
this.channels = this.createChannels(audioContext);
|
|
228
|
-
this.
|
|
228
|
+
this.masterVolume.connect(audioContext.destination);
|
|
229
229
|
this.GM1SystemOn();
|
|
230
230
|
}
|
|
231
231
|
initSoundFontTable() {
|
|
@@ -271,7 +271,7 @@ export class MidyGMLite {
|
|
|
271
271
|
const merger = new ChannelMergerNode(audioContext, { numberOfInputs: 2 });
|
|
272
272
|
gainL.connect(merger, 0, 0);
|
|
273
273
|
gainR.connect(merger, 0, 1);
|
|
274
|
-
merger.connect(this.
|
|
274
|
+
merger.connect(this.masterVolume);
|
|
275
275
|
return {
|
|
276
276
|
gainL,
|
|
277
277
|
gainR,
|
|
@@ -595,19 +595,22 @@ export class MidyGMLite {
|
|
|
595
595
|
const pitchWheelSensitivity = channel.state.pitchWheelSensitivity * 12800;
|
|
596
596
|
return pitchWheel * pitchWheelSensitivity;
|
|
597
597
|
}
|
|
598
|
-
|
|
599
|
-
const now = this.audioContext.currentTime;
|
|
598
|
+
updateChannelDetune(channel) {
|
|
600
599
|
channel.scheduledNotes.forEach((noteList) => {
|
|
601
600
|
for (let i = 0; i < noteList.length; i++) {
|
|
602
601
|
const note = noteList[i];
|
|
603
602
|
if (!note)
|
|
604
603
|
continue;
|
|
605
|
-
note
|
|
606
|
-
.cancelScheduledValues(now)
|
|
607
|
-
.setValueAtTime(channel.detune, now);
|
|
604
|
+
this.updateDetune(channel, note);
|
|
608
605
|
}
|
|
609
606
|
});
|
|
610
607
|
}
|
|
608
|
+
updateDetune(channel, note) {
|
|
609
|
+
const now = this.audioContext.currentTime;
|
|
610
|
+
note.bufferSource.detune
|
|
611
|
+
.cancelScheduledValues(now)
|
|
612
|
+
.setValueAtTime(channel.detune, now);
|
|
613
|
+
}
|
|
611
614
|
setVolumeEnvelope(note) {
|
|
612
615
|
const now = this.audioContext.currentTime;
|
|
613
616
|
const { voiceParams, startTime } = note;
|
|
@@ -856,7 +859,7 @@ export class MidyGMLite {
|
|
|
856
859
|
const next = (value - 8192) / 8192;
|
|
857
860
|
state.pitchWheel = value / 16383;
|
|
858
861
|
channel.detune += (next - prev) * state.pitchWheelSensitivity * 12800;
|
|
859
|
-
this.
|
|
862
|
+
this.updateChannelDetune(channel);
|
|
860
863
|
this.applyVoiceParams(channel, 14);
|
|
861
864
|
}
|
|
862
865
|
setModLfoToPitch(channel, note) {
|
|
@@ -913,7 +916,7 @@ export class MidyGMLite {
|
|
|
913
916
|
if (0 < channel.state.modulationDepth)
|
|
914
917
|
this.setModLfoToFilterFc(note);
|
|
915
918
|
},
|
|
916
|
-
modLfoToVolume: (channel, note) => {
|
|
919
|
+
modLfoToVolume: (channel, note, _prevValue) => {
|
|
917
920
|
if (0 < channel.state.modulationDepth)
|
|
918
921
|
this.setModLfoToVolume(note);
|
|
919
922
|
},
|
|
@@ -960,7 +963,7 @@ export class MidyGMLite {
|
|
|
960
963
|
if (key in voiceParams)
|
|
961
964
|
noteVoiceParams[key] = voiceParams[key];
|
|
962
965
|
}
|
|
963
|
-
this.setFilterEnvelope(
|
|
966
|
+
this.setFilterEnvelope(note);
|
|
964
967
|
this.setPitchEnvelope(note);
|
|
965
968
|
}
|
|
966
969
|
else if (volumeEnvelopeKeySet.has(key)) {
|
|
@@ -999,6 +1002,8 @@ export class MidyGMLite {
|
|
|
999
1002
|
const handler = this.controlChangeHandlers[controllerType];
|
|
1000
1003
|
if (handler) {
|
|
1001
1004
|
handler.call(this, channelNumber, value);
|
|
1005
|
+
const channel = this.channels[channelNumber];
|
|
1006
|
+
this.applyVoiceParams(channel, controllerType + 128);
|
|
1002
1007
|
}
|
|
1003
1008
|
else {
|
|
1004
1009
|
console.warn(`Unsupported Control change: controllerType=${controllerType} value=${value}`);
|
|
@@ -1006,13 +1011,14 @@ export class MidyGMLite {
|
|
|
1006
1011
|
}
|
|
1007
1012
|
updateModulation(channel) {
|
|
1008
1013
|
const now = this.audioContext.currentTime;
|
|
1014
|
+
const depth = channel.state.modulationDepth * channel.modulationDepthRange;
|
|
1009
1015
|
channel.scheduledNotes.forEach((noteList) => {
|
|
1010
1016
|
for (let i = 0; i < noteList.length; i++) {
|
|
1011
1017
|
const note = noteList[i];
|
|
1012
1018
|
if (!note)
|
|
1013
1019
|
continue;
|
|
1014
1020
|
if (note.modulationDepth) {
|
|
1015
|
-
note.modulationDepth.gain.setValueAtTime(
|
|
1021
|
+
note.modulationDepth.gain.setValueAtTime(depth, now);
|
|
1016
1022
|
}
|
|
1017
1023
|
else {
|
|
1018
1024
|
this.setPitchEnvelope(note);
|
|
@@ -1023,8 +1029,7 @@ export class MidyGMLite {
|
|
|
1023
1029
|
}
|
|
1024
1030
|
setModulationDepth(channelNumber, modulation) {
|
|
1025
1031
|
const channel = this.channels[channelNumber];
|
|
1026
|
-
channel.state.modulationDepth =
|
|
1027
|
-
channel.modulationDepthRange;
|
|
1032
|
+
channel.state.modulationDepth = modulation / 127;
|
|
1028
1033
|
this.updateModulation(channel);
|
|
1029
1034
|
}
|
|
1030
1035
|
setVolume(channelNumber, volume) {
|
|
@@ -1116,12 +1121,14 @@ export class MidyGMLite {
|
|
|
1116
1121
|
const pitchBendRange = channel.dataMSB + channel.dataLSB / 100;
|
|
1117
1122
|
this.setPitchBendRange(channelNumber, pitchBendRange);
|
|
1118
1123
|
}
|
|
1119
|
-
setPitchBendRange(channelNumber,
|
|
1124
|
+
setPitchBendRange(channelNumber, value) {
|
|
1120
1125
|
const channel = this.channels[channelNumber];
|
|
1121
1126
|
const state = channel.state;
|
|
1122
|
-
|
|
1123
|
-
const
|
|
1124
|
-
|
|
1127
|
+
const prev = state.pitchWheelSensitivity;
|
|
1128
|
+
const next = value / 128;
|
|
1129
|
+
state.pitchWheelSensitivity = next;
|
|
1130
|
+
channel.detune += (state.pitchWheel * 2 - 1) * (next - prev) * 12800;
|
|
1131
|
+
this.updateChannelDetune(channel);
|
|
1125
1132
|
this.applyVoiceParams(channel, 16);
|
|
1126
1133
|
}
|
|
1127
1134
|
allSoundOff(channelNumber) {
|
|
@@ -1138,7 +1145,7 @@ export class MidyGMLite {
|
|
|
1138
1145
|
const state = channel.state;
|
|
1139
1146
|
for (let i = 0; i < stateTypes.length; i++) {
|
|
1140
1147
|
const type = stateTypes[i];
|
|
1141
|
-
state[type] = defaultControllerState[type];
|
|
1148
|
+
state[type] = defaultControllerState[type].defaultValue;
|
|
1142
1149
|
}
|
|
1143
1150
|
const settingTypes = [
|
|
1144
1151
|
"rpnMSB",
|
|
@@ -1200,8 +1207,8 @@ export class MidyGMLite {
|
|
|
1200
1207
|
}
|
|
1201
1208
|
else {
|
|
1202
1209
|
const now = this.audioContext.currentTime;
|
|
1203
|
-
this.
|
|
1204
|
-
this.
|
|
1210
|
+
this.masterVolume.gain.cancelScheduledValues(now);
|
|
1211
|
+
this.masterVolume.gain.setValueAtTime(volume * volume, now);
|
|
1205
1212
|
}
|
|
1206
1213
|
}
|
|
1207
1214
|
handleExclusiveMessage(data) {
|
package/esm/midy.d.ts
CHANGED
|
@@ -3,7 +3,8 @@ export class Midy {
|
|
|
3
3
|
currentBufferSource: null;
|
|
4
4
|
detune: number;
|
|
5
5
|
scaleOctaveTuningTable: any[];
|
|
6
|
-
|
|
6
|
+
channelPressureTable: Uint8Array<ArrayBuffer>;
|
|
7
|
+
polyphonicKeyPressureTable: Uint8Array<ArrayBuffer>;
|
|
7
8
|
keyBasedInstrumentControlTable: Int8Array<ArrayBuffer>;
|
|
8
9
|
program: number;
|
|
9
10
|
bank: number;
|
|
@@ -17,14 +18,6 @@ export class Midy {
|
|
|
17
18
|
coarseTuning: number;
|
|
18
19
|
modulationDepthRange: number;
|
|
19
20
|
};
|
|
20
|
-
static controllerDestinationSettings: {
|
|
21
|
-
pitchControl: number;
|
|
22
|
-
filterCutoffControl: number;
|
|
23
|
-
amplitudeControl: number;
|
|
24
|
-
lfoPitchDepth: number;
|
|
25
|
-
lfoFilterDepth: number;
|
|
26
|
-
lfoAmplitudeDepth: number;
|
|
27
|
-
};
|
|
28
21
|
constructor(audioContext: any, options?: {
|
|
29
22
|
reverbAlgorithm: (audioContext: any) => {
|
|
30
23
|
input: any;
|
|
@@ -77,12 +70,12 @@ export class Midy {
|
|
|
77
70
|
output: any;
|
|
78
71
|
};
|
|
79
72
|
};
|
|
80
|
-
|
|
73
|
+
masterVolume: any;
|
|
81
74
|
voiceParamsHandlers: {
|
|
82
75
|
modLfoToPitch: (channel: any, note: any, _prevValue: any) => void;
|
|
83
76
|
vibLfoToPitch: (channel: any, note: any, _prevValue: any) => void;
|
|
84
77
|
modLfoToFilterFc: (channel: any, note: any, _prevValue: any) => void;
|
|
85
|
-
modLfoToVolume: (channel: any, note: any) => void;
|
|
78
|
+
modLfoToVolume: (channel: any, note: any, _prevValue: any) => void;
|
|
86
79
|
chorusEffectsSend: (channel: any, note: any, prevValue: any) => void;
|
|
87
80
|
reverbEffectsSend: (channel: any, note: any, prevValue: any) => void;
|
|
88
81
|
delayModLFO: (_channel: any, note: any, _prevValue: any) => void;
|
|
@@ -201,14 +194,15 @@ export class Midy {
|
|
|
201
194
|
centToHz(cent: any): number;
|
|
202
195
|
calcChannelDetune(channel: any): any;
|
|
203
196
|
calcNoteDetune(channel: any, note: any): any;
|
|
204
|
-
|
|
197
|
+
updateChannelDetune(channel: any): void;
|
|
198
|
+
updateDetune(channel: any, note: any, pressure: any): void;
|
|
205
199
|
getPortamentoTime(channel: any): number;
|
|
206
200
|
setPortamentoStartVolumeEnvelope(channel: any, note: any): void;
|
|
207
|
-
setVolumeEnvelope(channel: any, note: any): void;
|
|
201
|
+
setVolumeEnvelope(channel: any, note: any, pressure: any): void;
|
|
208
202
|
setPitchEnvelope(note: any): void;
|
|
209
203
|
clampCutoffFrequency(frequency: any): number;
|
|
210
204
|
setPortamentoStartFilterEnvelope(channel: any, note: any): void;
|
|
211
|
-
setFilterEnvelope(channel: any, note: any): void;
|
|
205
|
+
setFilterEnvelope(channel: any, note: any, pressure: any): void;
|
|
212
206
|
startModulation(channel: any, note: any, startTime: any): void;
|
|
213
207
|
startVibrato(channel: any, note: any, startTime: any): void;
|
|
214
208
|
createNote(channel: any, voice: any, noteNumber: any, velocity: any, startTime: any, portamento: any, isSF3: any): Promise<Note>;
|
|
@@ -224,22 +218,22 @@ export class Midy {
|
|
|
224
218
|
handlePolyphonicKeyPressure(channelNumber: any, noteNumber: any, pressure: any): void;
|
|
225
219
|
handleProgramChange(channelNumber: any, program: any): void;
|
|
226
220
|
handleChannelPressure(channelNumber: any, value: any): void;
|
|
227
|
-
setChannelPressure(channel: any, note: any): void;
|
|
228
221
|
handlePitchBendMessage(channelNumber: any, lsb: any, msb: any): void;
|
|
229
222
|
setPitchBend(channelNumber: any, value: any): void;
|
|
230
|
-
setModLfoToPitch(channel: any, note: any): void;
|
|
223
|
+
setModLfoToPitch(channel: any, note: any, pressure: any): void;
|
|
231
224
|
setVibLfoToPitch(channel: any, note: any): void;
|
|
232
|
-
setModLfoToFilterFc(
|
|
233
|
-
setModLfoToVolume(
|
|
225
|
+
setModLfoToFilterFc(note: any, pressure: any): void;
|
|
226
|
+
setModLfoToVolume(note: any, pressure: any): void;
|
|
234
227
|
setReverbEffectsSend(channel: any, note: any, prevValue: any): void;
|
|
235
228
|
setChorusEffectsSend(channel: any, note: any, prevValue: any): void;
|
|
236
229
|
setDelayModLFO(note: any): void;
|
|
237
230
|
setFreqModLFO(note: any): void;
|
|
231
|
+
setFreqVibLFO(channel: any, note: any): void;
|
|
238
232
|
createVoiceParamsHandlers(): {
|
|
239
233
|
modLfoToPitch: (channel: any, note: any, _prevValue: any) => void;
|
|
240
234
|
vibLfoToPitch: (channel: any, note: any, _prevValue: any) => void;
|
|
241
235
|
modLfoToFilterFc: (channel: any, note: any, _prevValue: any) => void;
|
|
242
|
-
modLfoToVolume: (channel: any, note: any) => void;
|
|
236
|
+
modLfoToVolume: (channel: any, note: any, _prevValue: any) => void;
|
|
243
237
|
chorusEffectsSend: (channel: any, note: any, prevValue: any) => void;
|
|
244
238
|
reverbEffectsSend: (channel: any, note: any, prevValue: any) => void;
|
|
245
239
|
delayModLFO: (_channel: any, note: any, _prevValue: any) => void;
|
|
@@ -342,7 +336,7 @@ export class Midy {
|
|
|
342
336
|
handleUniversalNonRealTimeExclusiveMessage(data: any): void;
|
|
343
337
|
GM1SystemOn(): void;
|
|
344
338
|
GM2SystemOn(): void;
|
|
345
|
-
handleUniversalRealTimeExclusiveMessage(data: any):
|
|
339
|
+
handleUniversalRealTimeExclusiveMessage(data: any): any;
|
|
346
340
|
handleMasterVolumeSysEx(data: any): void;
|
|
347
341
|
setMasterVolume(volume: any): void;
|
|
348
342
|
handleMasterFineTuningSysEx(data: any): void;
|
|
@@ -369,11 +363,15 @@ export class Midy {
|
|
|
369
363
|
getChorusSendToReverb(value: any): number;
|
|
370
364
|
getChannelBitmap(data: any): any[];
|
|
371
365
|
handleScaleOctaveTuning1ByteFormatSysEx(data: any): void;
|
|
372
|
-
|
|
366
|
+
applyDestinationSettings(channel: any, note: any, table: any): void;
|
|
367
|
+
handleChannelPressureSysEx(data: any, tableName: any): void;
|
|
368
|
+
initControlTable(): Uint8Array<ArrayBuffer>;
|
|
369
|
+
applyControlTable(channel: any, controllerType: any): void;
|
|
370
|
+
handleControlChangeSysEx(data: any): void;
|
|
373
371
|
getKeyBasedInstrumentControlValue(channel: any, keyNumber: any, controllerType: any): number;
|
|
374
372
|
handleKeyBasedInstrumentControlSysEx(data: any): void;
|
|
375
373
|
handleExclusiveMessage(data: any): void;
|
|
376
|
-
handleSysEx(data: any):
|
|
374
|
+
handleSysEx(data: any): any;
|
|
377
375
|
scheduleTask(callback: any, startTime: any): Promise<any>;
|
|
378
376
|
}
|
|
379
377
|
declare class Note {
|
|
@@ -392,6 +390,7 @@ declare class Note {
|
|
|
392
390
|
reverbEffectsSend: any;
|
|
393
391
|
chorusEffectsSend: any;
|
|
394
392
|
portamento: any;
|
|
393
|
+
pressure: number;
|
|
395
394
|
noteNumber: any;
|
|
396
395
|
velocity: any;
|
|
397
396
|
startTime: 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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"}
|