@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.
@@ -221,11 +221,11 @@ export class MidyGMLite {
221
221
  value: new Map()
222
222
  });
223
223
  this.audioContext = audioContext;
224
- this.masterGain = new GainNode(audioContext);
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.masterGain.connect(audioContext.destination);
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.masterGain);
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
- updateDetune(channel) {
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.bufferSource.detune
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.updateDetune(channel);
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(channel, note);
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(channel.state.modulationDepth, now);
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 = (modulation / 127) *
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, pitchWheelSensitivity) {
1124
+ setPitchBendRange(channelNumber, value) {
1120
1125
  const channel = this.channels[channelNumber];
1121
1126
  const state = channel.state;
1122
- state.pitchWheelSensitivity = pitchWheelSensitivity / 128;
1123
- const detune = (state.pitchWheel * 2 - 1) * pitchWheelSensitivity * 100;
1124
- this.updateDetune(channel, detune);
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.masterGain.gain.cancelScheduledValues(now);
1204
- this.masterGain.gain.setValueAtTime(volume * volume, now);
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
- pressureTable: Uint8Array<ArrayBuffer>;
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
- masterGain: any;
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
- updateDetune(channel: any): void;
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(channel: any, note: any): void;
233
- setModLfoToVolume(channel: any, note: any): void;
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): void;
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
- handleChannelPressureSysEx(data: any): void;
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): void;
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":"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"}
1
+ {"version":3,"file":"midy.d.ts","sourceRoot":"","sources":["../src/midy.js"],"names":[],"mappings":"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"}