@marmooo/midy 0.1.4 → 0.1.5

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.
Files changed (35) hide show
  1. package/esm/deps/cdn.jsdelivr.net/npm/@marmooo/{soundfont-parser@0.0.4 → soundfont-parser@0.0.6}/+esm.d.ts +16 -20
  2. package/esm/deps/cdn.jsdelivr.net/npm/@marmooo/soundfont-parser@0.0.6/+esm.d.ts.map +1 -0
  3. package/esm/deps/cdn.jsdelivr.net/npm/@marmooo/soundfont-parser@0.0.6/+esm.js +180 -0
  4. package/esm/midy-GM1.d.ts +29 -1
  5. package/esm/midy-GM1.d.ts.map +1 -1
  6. package/esm/midy-GM1.js +27 -32
  7. package/esm/midy-GM2.d.ts +53 -1
  8. package/esm/midy-GM2.d.ts.map +1 -1
  9. package/esm/midy-GM2.js +81 -79
  10. package/esm/midy-GMLite.d.ts +29 -1
  11. package/esm/midy-GMLite.d.ts.map +1 -1
  12. package/esm/midy-GMLite.js +27 -32
  13. package/esm/midy.d.ts +73 -1
  14. package/esm/midy.d.ts.map +1 -1
  15. package/esm/midy.js +104 -97
  16. package/package.json +1 -1
  17. package/script/deps/cdn.jsdelivr.net/npm/@marmooo/{soundfont-parser@0.0.4 → soundfont-parser@0.0.6}/+esm.d.ts +16 -20
  18. package/script/deps/cdn.jsdelivr.net/npm/@marmooo/soundfont-parser@0.0.6/+esm.d.ts.map +1 -0
  19. package/script/deps/cdn.jsdelivr.net/npm/@marmooo/soundfont-parser@0.0.6/+esm.js +190 -0
  20. package/script/midy-GM1.d.ts +29 -1
  21. package/script/midy-GM1.d.ts.map +1 -1
  22. package/script/midy-GM1.js +27 -32
  23. package/script/midy-GM2.d.ts +53 -1
  24. package/script/midy-GM2.d.ts.map +1 -1
  25. package/script/midy-GM2.js +81 -79
  26. package/script/midy-GMLite.d.ts +29 -1
  27. package/script/midy-GMLite.d.ts.map +1 -1
  28. package/script/midy-GMLite.js +27 -32
  29. package/script/midy.d.ts +73 -1
  30. package/script/midy.d.ts.map +1 -1
  31. package/script/midy.js +104 -97
  32. package/esm/deps/cdn.jsdelivr.net/npm/@marmooo/soundfont-parser@0.0.4/+esm.d.ts.map +0 -1
  33. package/esm/deps/cdn.jsdelivr.net/npm/@marmooo/soundfont-parser@0.0.4/+esm.js +0 -162
  34. package/script/deps/cdn.jsdelivr.net/npm/@marmooo/soundfont-parser@0.0.4/+esm.d.ts.map +0 -1
  35. package/script/deps/cdn.jsdelivr.net/npm/@marmooo/soundfont-parser@0.0.4/+esm.js +0 -169
package/esm/midy-GM2.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { parseMidi } from "./deps/cdn.jsdelivr.net/npm/midi-file@1.2.4/+esm.js";
2
- import { parse, SoundFont, } from "./deps/cdn.jsdelivr.net/npm/@marmooo/soundfont-parser@0.0.4/+esm.js";
2
+ import { parse, SoundFont, } from "./deps/cdn.jsdelivr.net/npm/@marmooo/soundfont-parser@0.0.6/+esm.js";
3
3
  class Note {
4
4
  constructor(noteNumber, velocity, startTime, instrumentKey) {
5
5
  Object.defineProperty(this, "bufferSource", {
@@ -230,6 +230,7 @@ export class MidyGM2 {
230
230
  this.audioContext = audioContext;
231
231
  this.options = { ...this.defaultOptions, ...options };
232
232
  this.masterGain = new GainNode(audioContext);
233
+ this.controlChangeHandlers = this.createControlChangeHandlers();
233
234
  this.channels = this.createChannels(audioContext);
234
235
  this.reverbEffect = this.options.reverbAlgorithm(audioContext);
235
236
  this.chorusEffect = this.createChorusEffect(audioContext);
@@ -925,7 +926,7 @@ export class MidyGM2 {
925
926
  return;
926
927
  const soundFont = this.soundFonts[soundFontIndex];
927
928
  const isSF3 = soundFont.parsed.info.version.major === 3;
928
- const instrumentKey = soundFont.getInstrumentKey(bankNumber, channel.program, noteNumber);
929
+ const instrumentKey = soundFont.getInstrumentKey(bankNumber, channel.program, noteNumber, velocity);
929
930
  if (!instrumentKey)
930
931
  return;
931
932
  const note = await this.createNote(channel, instrumentKey, noteNumber, velocity, startTime, isSF3);
@@ -948,10 +949,12 @@ export class MidyGM2 {
948
949
  }
949
950
  scheduleNoteRelease(channelNumber, noteNumber, _velocity, stopTime, stopPedal = false) {
950
951
  const channel = this.channels[channelNumber];
951
- if (stopPedal && channel.sustainPedal)
952
- return;
953
- if (stopPedal && channel.sostenutoNotes.has(noteNumber))
954
- return;
952
+ if (stopPedal) {
953
+ if (channel.sustainPedal)
954
+ return;
955
+ if (channel.sostenutoNotes.has(noteNumber))
956
+ return;
957
+ }
955
958
  if (!channel.scheduledNotes.has(noteNumber))
956
959
  return;
957
960
  const scheduledNotes = channel.scheduledNotes.get(noteNumber);
@@ -979,16 +982,11 @@ export class MidyGM2 {
979
982
  note.bufferSource.disconnect();
980
983
  note.volumeNode.disconnect();
981
984
  note.filterNode.disconnect();
982
- if (note.volumeDepth)
985
+ if (note.modulationDepth) {
983
986
  note.volumeDepth.disconnect();
984
- if (note.modulationDepth)
985
987
  note.modulationDepth.disconnect();
986
- if (note.modulationLFO)
987
988
  note.modulationLFO.stop();
988
- if (note.vibratoDepth)
989
- note.vibratoDepth.disconnect();
990
- if (note.vibratoLFO)
991
- note.vibratoLFO.stop();
989
+ }
992
990
  resolve();
993
991
  };
994
992
  note.bufferSource.stop(volEndTime);
@@ -1081,58 +1079,41 @@ export class MidyGM2 {
1081
1079
  channel.pitchBendRange * 100;
1082
1080
  this.updateDetune(channel, detuneChange);
1083
1081
  }
1082
+ createControlChangeHandlers() {
1083
+ return {
1084
+ 0: this.setBankMSB,
1085
+ 1: this.setModulationDepth,
1086
+ 5: this.setPortamentoTime,
1087
+ 6: this.dataEntryMSB,
1088
+ 7: this.setVolume,
1089
+ 10: this.setPan,
1090
+ 11: this.setExpression,
1091
+ 32: this.setBankLSB,
1092
+ 38: this.dataEntryLSB,
1093
+ 64: this.setSustainPedal,
1094
+ 65: this.setPortamento,
1095
+ 66: this.setSostenutoPedal,
1096
+ 67: this.setSoftPedal,
1097
+ 91: this.setReverbSendLevel,
1098
+ 93: this.setChorusSendLevel,
1099
+ 100: this.setRPNLSB,
1100
+ 101: this.setRPNMSB,
1101
+ 120: this.allSoundOff,
1102
+ 121: this.resetAllControllers,
1103
+ 123: this.allNotesOff,
1104
+ 124: this.omniOff,
1105
+ 125: this.omniOn,
1106
+ 126: this.monoOn,
1107
+ 127: this.polyOn,
1108
+ };
1109
+ }
1084
1110
  handleControlChange(channelNumber, controller, value) {
1085
- switch (controller) {
1086
- case 0:
1087
- return this.setBankMSB(channelNumber, value);
1088
- case 1:
1089
- return this.setModulationDepth(channelNumber, value);
1090
- case 5:
1091
- return this.setPortamentoTime(channelNumber, value);
1092
- case 6:
1093
- return this.dataEntryMSB(channelNumber, value);
1094
- case 7:
1095
- return this.setVolume(channelNumber, value);
1096
- case 10:
1097
- return this.setPan(channelNumber, value);
1098
- case 11:
1099
- return this.setExpression(channelNumber, value);
1100
- case 32:
1101
- return this.setBankLSB(channelNumber, value);
1102
- case 38:
1103
- return this.dataEntryLSB(channelNumber, value);
1104
- case 64:
1105
- return this.setSustainPedal(channelNumber, value);
1106
- case 65:
1107
- return this.setPortamento(channelNumber, value);
1108
- case 66:
1109
- return this.setSostenutoPedal(channelNumber, value);
1110
- case 67:
1111
- return this.setSoftPedal(channelNumber, value);
1112
- case 91:
1113
- return this.setReverbSendLevel(channelNumber, value);
1114
- case 93:
1115
- return this.setChorusSendLevel(channelNumber, value);
1116
- case 100:
1117
- return this.setRPNLSB(channelNumber, value);
1118
- case 101:
1119
- return this.setRPNMSB(channelNumber, value);
1120
- case 120:
1121
- return this.allSoundOff(channelNumber);
1122
- case 121:
1123
- return this.resetAllControllers(channelNumber);
1124
- case 123:
1125
- return this.allNotesOff(channelNumber);
1126
- case 124:
1127
- return this.omniOff();
1128
- case 125:
1129
- return this.omniOn();
1130
- case 126:
1131
- return this.monoOn();
1132
- case 127:
1133
- return this.polyOn();
1134
- default:
1135
- console.warn(`Unsupported Control change: controller=${controller} value=${value}`);
1111
+ const handler = this.controlChangeHandlers[controller];
1112
+ if (handler) {
1113
+ handler.call(this, channelNumber, value);
1114
+ }
1115
+ else {
1116
+ console.warn(`Unsupported Control change: controller=${controller} value=${value}`);
1136
1117
  }
1137
1118
  }
1138
1119
  setBankMSB(channelNumber, msb) {
@@ -1217,28 +1198,49 @@ export class MidyGM2 {
1217
1198
  }
1218
1199
  setReverbSendLevel(channelNumber, reverbSendLevel) {
1219
1200
  const channel = this.channels[channelNumber];
1220
- const reverbEffect = this.reverbEffect;
1221
- if (0 < reverbSendLevel) {
1222
- const now = this.audioContext.currentTime;
1223
- channel.reverbSendLevel = reverbSendLevel / 127;
1224
- reverbEffect.output.gain.cancelScheduledValues(now);
1225
- reverbEffect.output.gain.setValueAtTime(channel.reverbSendLevel, now);
1201
+ if (0 < channel.reverbSendLevel) {
1202
+ if (0 < reverbSendLevel) {
1203
+ const now = this.audioContext.currentTime;
1204
+ channel.reverbSendLevel = reverbSendLevel / 127;
1205
+ reverbEffect.output.gain.cancelScheduledValues(now);
1206
+ reverbEffect.output.gain.setValueAtTime(channel.reverbSendLevel, now);
1207
+ }
1208
+ else {
1209
+ channel.merger.disconnect(reverbEffect.input);
1210
+ }
1226
1211
  }
1227
- else if (channel.reverbSendLevel !== 0) {
1228
- channel.merger.disconnect(reverbEffect.input);
1212
+ else {
1213
+ if (0 < reverbSendLevel) {
1214
+ channel.merger.connect(reverbEffect.input);
1215
+ const now = this.audioContext.currentTime;
1216
+ channel.reverbSendLevel = reverbSendLevel / 127;
1217
+ reverbEffect.output.gain.cancelScheduledValues(now);
1218
+ reverbEffect.output.gain.setValueAtTime(channel.reverbSendLevel, now);
1219
+ }
1229
1220
  }
1230
1221
  }
1231
1222
  setChorusSendLevel(channelNumber, chorusSendLevel) {
1232
1223
  const channel = this.channels[channelNumber];
1233
1224
  const chorusEffect = this.chorusEffect;
1234
- if (0 < chorusSendLevel) {
1235
- const now = this.audioContext.currentTime;
1236
- channel.chorusSendLevel = chorusSendLevel / 127;
1237
- chorusEffect.output.gain.cancelScheduledValues(now);
1238
- chorusEffect.output.gain.setValueAtTime(channel.chorusSendLevel, now);
1225
+ if (0 < channel.chorusSendLevel) {
1226
+ if (0 < chorusSendLevel) {
1227
+ const now = this.audioContext.currentTime;
1228
+ channel.chorusSendLevel = chorusSendLevel / 127;
1229
+ chorusEffect.output.gain.cancelScheduledValues(now);
1230
+ chorusEffect.output.gain.setValueAtTime(channel.chorusSendLevel, now);
1231
+ }
1232
+ else {
1233
+ channel.merger.disconnect(chorusEffect.input);
1234
+ }
1239
1235
  }
1240
- else if (channel.chorusSendLevel !== 0) {
1241
- channel.merger.disconnect(chorusEffect.input);
1236
+ else {
1237
+ if (0 < chorusSendLevel) {
1238
+ channel.merger.connect(chorusEffect.input);
1239
+ const now = this.audioContext.currentTime;
1240
+ channel.chorusSendLevel = chorusSendLevel / 127;
1241
+ chorusEffect.output.gain.cancelScheduledValues(now);
1242
+ chorusEffect.output.gain.setValueAtTime(channel.chorusSendLevel, now);
1243
+ }
1242
1244
  }
1243
1245
  }
1244
1246
  setSostenutoPedal(channelNumber, value) {
@@ -37,6 +37,20 @@ export class MidyGMLite {
37
37
  notePromises: any[];
38
38
  audioContext: any;
39
39
  masterGain: any;
40
+ controlChangeHandlers: {
41
+ 1: (channelNumber: any, modulation: any) => void;
42
+ 6: (channelNumber: any, value: any) => void;
43
+ 7: (channelNumber: any, volume: any) => void;
44
+ 10: (channelNumber: any, pan: any) => void;
45
+ 11: (channelNumber: any, expression: any) => void;
46
+ 38: (channelNumber: any, value: any) => void;
47
+ 64: (channelNumber: any, value: any) => void;
48
+ 100: (channelNumber: any, value: any) => void;
49
+ 101: (channelNumber: any, value: any) => void;
50
+ 120: (channelNumber: any) => Promise<void>;
51
+ 121: (channelNumber: any) => void;
52
+ 123: (channelNumber: any) => Promise<void>;
53
+ };
40
54
  channels: any[];
41
55
  initSoundFontTable(): any[];
42
56
  addSoundFont(soundFont: any): void;
@@ -90,7 +104,21 @@ export class MidyGMLite {
90
104
  handleProgramChange(channelNumber: any, program: any): void;
91
105
  handlePitchBendMessage(channelNumber: any, lsb: any, msb: any): void;
92
106
  setPitchBend(channelNumber: any, pitchBend: any): void;
93
- handleControlChange(channelNumber: any, controller: any, value: any): void | Promise<void>;
107
+ createControlChangeHandlers(): {
108
+ 1: (channelNumber: any, modulation: any) => void;
109
+ 6: (channelNumber: any, value: any) => void;
110
+ 7: (channelNumber: any, volume: any) => void;
111
+ 10: (channelNumber: any, pan: any) => void;
112
+ 11: (channelNumber: any, expression: any) => void;
113
+ 38: (channelNumber: any, value: any) => void;
114
+ 64: (channelNumber: any, value: any) => void;
115
+ 100: (channelNumber: any, value: any) => void;
116
+ 101: (channelNumber: any, value: any) => void;
117
+ 120: (channelNumber: any) => Promise<void>;
118
+ 121: (channelNumber: any) => void;
119
+ 123: (channelNumber: any) => Promise<void>;
120
+ };
121
+ handleControlChange(channelNumber: any, controller: any, value: any): void;
94
122
  updateModulation(channel: any): void;
95
123
  setModulationDepth(channelNumber: any, modulation: any): void;
96
124
  setVolume(channelNumber: any, volume: any): void;
@@ -1 +1 @@
1
- {"version":3,"file":"midy-GMLite.d.ts","sourceRoot":"","sources":["../src/midy-GMLite.js"],"names":[],"mappings":"AAsBA;IAmBE;;;;;;;;;MASE;IAEF;;;;;;;MAOE;IAEF,+BAMC;IA5CD,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;IAuBhB,kBAAgC;IAChC,gBAA4C;IAC5C,gBAAiD;IAKnD,4BAMC;IAED,mCASC;IAED,gDAMC;IAED,sCASC;IAED;;;;MAeC;IAED,yCAUC;IAED,+DAyBC;IAED,mEAWC;IAED,qDAOC;IAED,2EA+CC;IAED,mCAOC;IAED,0BA+CC;IAED,uDAEC;IAED,wDAEC;IAED;;;MA8DC;IAED,mFAmBC;IAED,yDAKC;IAED,uBAKC;IAED,aAGC;IAED,cAKC;IAED,wBAIC;IAED,0BAKC;IAED,wBAOC;IAED,sBAGC;IAED,uDASC;IAED,6CAQC;IAED,2BAEC;IAED,4BAEC;IAED,yCAEC;IAED,mFAGC;IAED,mCAeC;IAED,+CAwBC;IAED,6CAIC;IAED,mCAsBC;IAED,+DA0BC;IAED,wHAmCC;IAED,kGA6BC;IAED,0EAGC;IAED,uIAyCC;IAED,0FAGC;IAED,kEAeC;IAED,gFAiBC;IAED,4DAGC;IAED,qEAGC;IAED,uDAOC;IAED,2FA+BC;IAED,qCAkBC;IAED,8DAIC;IACD,iDAIC;IAED;;;MAMC;IAED,2CAIC;IAED,yDAIC;IAED,mDAGC;IAED,sCAUC;IAED,sDAMC;IAED,oCAYC;IAED,gDAEC;IAED,gDAEC;IAED,mDAGC;IAED,oDAaC;IAED,kDAKC;IAED,iEAOC;IAED,+CAEC;IAED,8CAEC;IAED,+CAEC;IAED,4DAgBC;IAED,oBAQC;IAED,yDAaC;IAED,yCAGC;IAED,mCAQC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AAl/BD;IAQE,gFAKC;IAZD,kBAAa;IACb,gBAAW;IACX,gBAAW;IACX,iBAAY;IACZ,mBAAc;IACd,qBAAgB;IAGd,gBAA4B;IAC5B,cAAwB;IACxB,eAA0B;IAC1B,mBAAkC;CAErC"}
1
+ {"version":3,"file":"midy-GMLite.d.ts","sourceRoot":"","sources":["../src/midy-GMLite.js"],"names":[],"mappings":"AAsBA;IAmBE;;;;;;;;;MASE;IAEF;;;;;;;MAOE;IAEF,+BAOC;IA7CD,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;IAuBhB,kBAAgC;IAChC,gBAA4C;IAC5C;;;;;;;;;;;;;MAA+D;IAC/D,gBAAiD;IAKnD,4BAMC;IAED,mCASC;IAED,gDAMC;IAED,sCASC;IAED;;;;MAeC;IAED,yCAUC;IAED,+DAyBC;IAED,mEAWC;IAED,qDAOC;IAED,2EA+CC;IAED,mCAOC;IAED,0BA+CC;IAED,uDAEC;IAED,wDAEC;IAED;;;MA8DC;IAED,mFAmBC;IAED,yDAKC;IAED,uBAKC;IAED,aAGC;IAED,cAKC;IAED,wBAIC;IAED,0BAKC;IAED,wBAOC;IAED,sBAGC;IAED,uDASC;IAED,6CAQC;IAED,2BAEC;IAED,4BAEC;IAED,yCAEC;IAED,mFAGC;IAED,mCAeC;IAED,+CAwBC;IAED,6CAIC;IAED,mCAsBC;IAED,+DA0BC;IAED,wHAmCC;IAED,kGA8BC;IAED,0EAGC;IAED,uIA2CC;IAED,0FAGC;IAED,kEAeC;IAED,gFAiBC;IAED,4DAGC;IAED,qEAGC;IAED,uDAOC;IAED;;;;;;;;;;;;;MAeC;IAED,2EASC;IAED,qCAkBC;IAED,8DAIC;IACD,iDAIC;IAED;;;MAMC;IAED,2CAIC;IAED,yDAIC;IAED,mDAGC;IAED,sCAUC;IAED,sDAMC;IAED,oCAYC;IAED,gDAEC;IAED,gDAEC;IAED,mDAGC;IAED,oDAaC;IAED,kDAKC;IAED,iEAOC;IAED,+CAEC;IAED,8CAEC;IAED,+CAEC;IAED,4DAgBC;IAED,oBAQC;IAED,yDAaC;IAED,yCAGC;IAED,mCAQC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AAj/BD;IAQE,gFAKC;IAZD,kBAAa;IACb,gBAAW;IACX,gBAAW;IACX,iBAAY;IACZ,mBAAc;IACd,qBAAgB;IAGd,gBAA4B;IAC5B,cAAwB;IACxB,eAA0B;IAC1B,mBAAkC;CAErC"}
@@ -1,5 +1,5 @@
1
1
  import { parseMidi } from "./deps/cdn.jsdelivr.net/npm/midi-file@1.2.4/+esm.js";
2
- import { parse, SoundFont, } from "./deps/cdn.jsdelivr.net/npm/@marmooo/soundfont-parser@0.0.4/+esm.js";
2
+ import { parse, SoundFont, } from "./deps/cdn.jsdelivr.net/npm/@marmooo/soundfont-parser@0.0.6/+esm.js";
3
3
  class Note {
4
4
  constructor(noteNumber, velocity, startTime, instrumentKey) {
5
5
  Object.defineProperty(this, "bufferSource", {
@@ -150,6 +150,7 @@ export class MidyGMLite {
150
150
  });
151
151
  this.audioContext = audioContext;
152
152
  this.masterGain = new GainNode(audioContext);
153
+ this.controlChangeHandlers = this.createControlChangeHandlers();
153
154
  this.channels = this.createChannels(audioContext);
154
155
  this.masterGain.connect(audioContext.destination);
155
156
  this.GM1SystemOn();
@@ -633,7 +634,7 @@ export class MidyGMLite {
633
634
  return;
634
635
  const soundFont = this.soundFonts[soundFontIndex];
635
636
  const isSF3 = soundFont.parsed.info.version.major === 3;
636
- const instrumentKey = soundFont.getInstrumentKey(bankNumber, channel.program, noteNumber);
637
+ const instrumentKey = soundFont.getInstrumentKey(bankNumber, channel.program, noteNumber, velocity);
637
638
  if (!instrumentKey)
638
639
  return;
639
640
  const note = await this.createNote(channel, instrumentKey, noteNumber, velocity, startTime, isSF3);
@@ -682,12 +683,11 @@ export class MidyGMLite {
682
683
  note.bufferSource.disconnect();
683
684
  note.volumeNode.disconnect();
684
685
  note.filterNode.disconnect();
685
- if (note.volumeDepth)
686
+ if (note.modulationDepth) {
686
687
  note.volumeDepth.disconnect();
687
- if (note.modulationDepth)
688
688
  note.modulationDepth.disconnect();
689
- if (note.modulationLFO)
690
689
  note.modulationLFO.stop();
690
+ }
691
691
  resolve();
692
692
  };
693
693
  note.bufferSource.stop(volEndTime);
@@ -749,34 +749,29 @@ export class MidyGMLite {
749
749
  channel.pitchBendRange * 100;
750
750
  this.updateDetune(channel, detuneChange);
751
751
  }
752
+ createControlChangeHandlers() {
753
+ return {
754
+ 1: this.setModulationDepth,
755
+ 6: this.dataEntryMSB,
756
+ 7: this.setVolume,
757
+ 10: this.setPan,
758
+ 11: this.setExpression,
759
+ 38: this.dataEntryLSB,
760
+ 64: this.setSustainPedal,
761
+ 100: this.setRPNLSB,
762
+ 101: this.setRPNMSB,
763
+ 120: this.allSoundOff,
764
+ 121: this.resetAllControllers,
765
+ 123: this.allNotesOff,
766
+ };
767
+ }
752
768
  handleControlChange(channelNumber, controller, value) {
753
- switch (controller) {
754
- case 1:
755
- return this.setModulationDepth(channelNumber, value);
756
- case 6:
757
- return this.dataEntryMSB(channelNumber, value);
758
- case 7:
759
- return this.setVolume(channelNumber, value);
760
- case 10:
761
- return this.setPan(channelNumber, value);
762
- case 11:
763
- return this.setExpression(channelNumber, value);
764
- case 38:
765
- return this.dataEntryLSB(channelNumber, value);
766
- case 64:
767
- return this.setSustainPedal(channelNumber, value);
768
- case 100:
769
- return this.setRPNLSB(channelNumber, value);
770
- case 101:
771
- return this.setRPNMSB(channelNumber, value);
772
- case 120:
773
- return this.allSoundOff(channelNumber);
774
- case 121:
775
- return this.resetAllControllers(channelNumber);
776
- case 123:
777
- return this.allNotesOff(channelNumber);
778
- default:
779
- console.warn(`Unsupported Control change: controller=${controller} value=${value}`);
769
+ const handler = this.controlChangeHandlers[controller];
770
+ if (handler) {
771
+ handler.call(this, channelNumber, value);
772
+ }
773
+ else {
774
+ console.warn(`Unsupported Control change: controller=${controller} value=${value}`);
780
775
  }
781
776
  }
782
777
  updateModulation(channel) {
package/esm/midy.d.ts CHANGED
@@ -97,6 +97,42 @@ export class Midy {
97
97
  };
98
98
  };
99
99
  masterGain: any;
100
+ controlChangeHandlers: {
101
+ 0: (channelNumber: any, msb: any) => void;
102
+ 1: (channelNumber: any, modulation: any) => void;
103
+ 5: (channelNumber: any, portamentoTime: any) => void;
104
+ 6: (channelNumber: any, value: any) => void;
105
+ 7: (channelNumber: any, volume: any) => void;
106
+ 10: (channelNumber: any, pan: any) => void;
107
+ 11: (channelNumber: any, expression: any) => void;
108
+ 32: (channelNumber: any, lsb: any) => void;
109
+ 38: (channelNumber: any, value: any) => void;
110
+ 64: (channelNumber: any, value: any) => void;
111
+ 65: (channelNumber: any, value: any) => void;
112
+ 66: (channelNumber: any, value: any) => void;
113
+ 67: (channelNumber: any, softPedal: any) => void;
114
+ 71: (channelNumber: any, filterResonance: any) => void;
115
+ 72: (channelNumber: any, releaseTime: any) => void;
116
+ 73: (channelNumber: any, attackTime: any) => void;
117
+ 74: (channelNumber: any, brightness: any) => void;
118
+ 75: (channelNumber: any, dacayTime: any) => void;
119
+ 76: (channelNumber: any, vibratoRate: any) => void;
120
+ 77: (channelNumber: any, vibratoDepth: any) => void;
121
+ 78: (channelNumber: any, vibratoDelay: any) => void;
122
+ 91: (channelNumber: any, reverbSendLevel: any) => void;
123
+ 93: (channelNumber: any, chorusSendLevel: any) => void;
124
+ 96: (channelNumber: any) => void;
125
+ 97: (channelNumber: any) => void;
126
+ 100: (channelNumber: any, value: any) => void;
127
+ 101: (channelNumber: any, value: any) => void;
128
+ 120: (channelNumber: any) => Promise<void>;
129
+ 121: (channelNumber: any) => void;
130
+ 123: (channelNumber: any) => Promise<void>;
131
+ 124: () => void;
132
+ 125: () => void;
133
+ 126: () => void;
134
+ 127: () => void;
135
+ };
100
136
  channels: any[];
101
137
  reverbEffect: {
102
138
  input: any;
@@ -190,7 +226,43 @@ export class Midy {
190
226
  handleChannelPressure(channelNumber: any, pressure: any): void;
191
227
  handlePitchBendMessage(channelNumber: any, lsb: any, msb: any): void;
192
228
  setPitchBend(channelNumber: any, pitchBend: any): void;
193
- handleControlChange(channelNumber: any, controller: any, value: any): void | Promise<void>;
229
+ createControlChangeHandlers(): {
230
+ 0: (channelNumber: any, msb: any) => void;
231
+ 1: (channelNumber: any, modulation: any) => void;
232
+ 5: (channelNumber: any, portamentoTime: any) => void;
233
+ 6: (channelNumber: any, value: any) => void;
234
+ 7: (channelNumber: any, volume: any) => void;
235
+ 10: (channelNumber: any, pan: any) => void;
236
+ 11: (channelNumber: any, expression: any) => void;
237
+ 32: (channelNumber: any, lsb: any) => void;
238
+ 38: (channelNumber: any, value: any) => void;
239
+ 64: (channelNumber: any, value: any) => void;
240
+ 65: (channelNumber: any, value: any) => void;
241
+ 66: (channelNumber: any, value: any) => void;
242
+ 67: (channelNumber: any, softPedal: any) => void;
243
+ 71: (channelNumber: any, filterResonance: any) => void;
244
+ 72: (channelNumber: any, releaseTime: any) => void;
245
+ 73: (channelNumber: any, attackTime: any) => void;
246
+ 74: (channelNumber: any, brightness: any) => void;
247
+ 75: (channelNumber: any, dacayTime: any) => void;
248
+ 76: (channelNumber: any, vibratoRate: any) => void;
249
+ 77: (channelNumber: any, vibratoDepth: any) => void;
250
+ 78: (channelNumber: any, vibratoDelay: any) => void;
251
+ 91: (channelNumber: any, reverbSendLevel: any) => void;
252
+ 93: (channelNumber: any, chorusSendLevel: any) => void;
253
+ 96: (channelNumber: any) => void;
254
+ 97: (channelNumber: any) => void;
255
+ 100: (channelNumber: any, value: any) => void;
256
+ 101: (channelNumber: any, value: any) => void;
257
+ 120: (channelNumber: any) => Promise<void>;
258
+ 121: (channelNumber: any) => void;
259
+ 123: (channelNumber: any) => Promise<void>;
260
+ 124: () => void;
261
+ 125: () => void;
262
+ 126: () => void;
263
+ 127: () => void;
264
+ };
265
+ handleControlChange(channelNumber: any, controller: any, value: any): void;
194
266
  setBankMSB(channelNumber: any, msb: any): void;
195
267
  updateModulation(channel: any): void;
196
268
  setModulationDepth(channelNumber: any, modulation: any): void;
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":"AAwBA;IAkCE;;;;;;;;;;;;;;;;;;;;;;;;;MAyBE;IAEF;;;;;;;;;;;MAWE;IAEF;;;;;;;MAOE;IAgCF;;;;;OAYC;IA5HD,qBAAmB;IACnB,kBAAc;IACd,yBAAqB;IACrB,2BAAuB;IACvB;;;MAGE;IACF;;;;;;MAME;IACF,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;IAmDlB;;;;;MA4BE;IAGA,kBAAgC;IAChC;;;;;MAAqD;IACrD,gBAA4C;IAC5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAA+D;IAC/D,gBAAiD;IACjD;;;MAA8D;IAC9D;;;;;;;;MAAyD;IAO3D,4BAMC;IAED,mCASC;IAED,gDAMC;IAED,sCASC;IAED;;;;MAeC;IAED,yCAiBC;IAED,+DAyBC;IAED,mEAWC;IAED,qDAOC;IAED,2EAyDC;IAED,mCAOC;IAED,0BA+CC;IAED,uDAEC;IAED,wDAEC;IAED;;;MAgGC;IAED,mFAmBC;IAED,yDAKC;IAED,uBAKC;IAED,aAGC;IAED,cAKC;IAED,wBAIC;IAED,0BAKC;IAED,wBAOC;IAED,sBAGC;IAED,uDASC;IAED,6CAQC;IAED,kFAuBC;IAED;;;;MAWC;IAED,gFAUC;IAED,mFAYC;IAED,sGAcC;IAID;;;MA+BC;IAED;;;;;;;;MA0CC;IAED,2BAEC;IAED,4BAEC;IAED,sCAKC;IAED,mFAGC;IAED,iDAeC;IAED,+CAwBC;IAED,6CAIC;IAED,iDAyBC;IAED,+DA0BC;IAED,4DAiBC;IAED,wHA0CC;IAED,gDAQC;IAED,kGAiCC;IAED,0EAGC;IAED,uIAmDC;IAED,0FAGC;IAED,kEAeC;IAED,oEAYC;IAED,gFAqBC;IAED,sFAcC;IAED,4DAIC;IAED,+DAcC;IAED,qEAGC;IAED,uDAOC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAqCC;IAED,2EASC;IAED,+CAEC;IAED,qCAkBC;IAED,8DAIC;IAED,iEAEC;IAED,iDAIC;IAED;;;MAMC;IAED,2CAIC;IAED,yDAIC;IAED,+CAEC;IAED,mDAGC;IAED,sCAUC;IAED,sDAMC;IAGD,oDAEC;IAED,mEAoBC;IAED,mEAqBC;IAED,wDAWC;IAED,uDAGC;IAED,mEAaC;IAED,2DAGC;IAED,yDAYC;IAED,yDAUC;IAED,uDAUC;IAED,2DAWC;IAED,6DAGC;IAED,6DAGC;IAED,kFAeC;IAED,2DAMC;IAED,gDAyBC;IAGD,wCAEC;IAGD,wCAEC;IAED,gDAEC;IAED,gDAEC;IAED,mDAGC;IAED,oDAaC;IAED,kDAKC;IAED,iEAOC;IAED,8CAKC;IAED,yDAMC;IAED,gDAKC;IAED,6DAMC;IAED,wDAKC;IAED,6EAKC;IAED,+CAEC;IAED,8CAEC;IAED,+CAEC;IAED,gBAEC;IAED,eAEC;IAED,eAEC;IAED,eAEC;IAED,4DAmBC;IAED,oBAQC;IAED,oBAQC;IAED,yDAiDC;IAED,yCAGC;IAED,mCAQC;IAED,6CAGC;IAED,2CAMC;IAED,+CAGC;IAED,+CAMC;IAED,mDAeC;IAED,4CAOC;IAED,+BAKC;IAED,qDAiBC;IAED,gCAMC;IAED,kCAEC;IA6BD,4CAEC;IAED,4CAaC;IAED,+BAiBC;IAED,wFAKC;IAED,mCAQC;IAED,qCAEC;IAED,oCAUC;IAED,sCAEC;IAED,oCAaC;IAED,sCAEC;IAED,wCAWC;IAED,0CAEC;IAED,wCAEC;IAED,6BASC;IAED,0DAUC;CACF;AAr7DD;IAUE,gFAKC;IAdD,kBAAa;IACb,gBAAW;IACX,gBAAW;IACX,iBAAY;IACZ,mBAAc;IACd,qBAAgB;IAChB,gBAAW;IACX,kBAAa;IAGX,gBAA4B;IAC5B,cAAwB;IACxB,eAA0B;IAC1B,mBAAkC;CAErC"}