@blibliki/engine 0.1.5 → 0.1.6

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 (82) hide show
  1. package/build/Engine.d.ts +5 -41
  2. package/build/Engine.js +2 -3
  3. package/build/Engine.js.map +1 -1
  4. package/build/Module/Base.d.ts +4 -19
  5. package/build/Module/Base.js +1 -19
  6. package/build/Module/Base.js.map +1 -1
  7. package/build/Module/BitCrusher.d.ts +1 -1
  8. package/build/Module/BitCrusher.js +2 -3
  9. package/build/Module/BitCrusher.js.map +1 -1
  10. package/build/Module/Delay.js +1 -2
  11. package/build/Module/Delay.js.map +1 -1
  12. package/build/Module/Distortion.js +1 -2
  13. package/build/Module/Distortion.js.map +1 -1
  14. package/build/Module/Effect.d.ts +2 -2
  15. package/build/Module/Effect.js +1 -2
  16. package/build/Module/Effect.js.map +1 -1
  17. package/build/Module/Envelope/AmpEnvelope.d.ts +3 -2
  18. package/build/Module/Envelope/AmpEnvelope.js +4 -6
  19. package/build/Module/Envelope/AmpEnvelope.js.map +1 -1
  20. package/build/Module/Envelope/Base.d.ts +8 -7
  21. package/build/Module/Envelope/Base.js +10 -11
  22. package/build/Module/Envelope/Base.js.map +1 -1
  23. package/build/Module/Envelope/FreqEnvelope.d.ts +2 -2
  24. package/build/Module/Envelope/FreqEnvelope.js +4 -6
  25. package/build/Module/Envelope/FreqEnvelope.js.map +1 -1
  26. package/build/Module/Envelope/index.d.ts +1 -1
  27. package/build/Module/Envelope/index.js +1 -1
  28. package/build/Module/Envelope/index.js.map +1 -1
  29. package/build/Module/Filter.d.ts +8 -8
  30. package/build/Module/Filter.js +9 -9
  31. package/build/Module/Filter.js.map +1 -1
  32. package/build/Module/Master.d.ts +1 -1
  33. package/build/Module/Master.js +1 -2
  34. package/build/Module/Master.js.map +1 -1
  35. package/build/Module/MidiSelector.d.ts +2 -0
  36. package/build/Module/MidiSelector.js +12 -6
  37. package/build/Module/MidiSelector.js.map +1 -1
  38. package/build/Module/Oscillator.d.ts +5 -5
  39. package/build/Module/Oscillator.js +6 -7
  40. package/build/Module/Oscillator.js.map +1 -1
  41. package/build/Module/PolyModule.d.ts +9 -18
  42. package/build/Module/PolyModule.js +9 -26
  43. package/build/Module/PolyModule.js.map +1 -1
  44. package/build/Module/Reverb.js +1 -2
  45. package/build/Module/Reverb.js.map +1 -1
  46. package/build/Module/VirtualMidi.d.ts +2 -2
  47. package/build/Module/VirtualMidi.js +1 -2
  48. package/build/Module/VirtualMidi.js.map +1 -1
  49. package/build/Module/VoiceScheduler.d.ts +7 -7
  50. package/build/Module/VoiceScheduler.js +5 -6
  51. package/build/Module/VoiceScheduler.js.map +1 -1
  52. package/build/Module/Volume.d.ts +5 -5
  53. package/build/Module/Volume.js +6 -7
  54. package/build/Module/Volume.js.map +1 -1
  55. package/build/Module/index.d.ts +2 -17
  56. package/build/Module/index.js +24 -41
  57. package/build/Module/index.js.map +1 -1
  58. package/build/index.d.ts +0 -1
  59. package/build/index.js +0 -1
  60. package/build/index.js.map +1 -1
  61. package/package.json +3 -1
  62. package/src/Engine.ts +2 -7
  63. package/src/Module/Base.ts +5 -20
  64. package/src/Module/BitCrusher.ts +2 -3
  65. package/src/Module/Delay.ts +1 -2
  66. package/src/Module/Distortion.ts +1 -2
  67. package/src/Module/Effect.ts +1 -3
  68. package/src/Module/Envelope/AmpEnvelope.ts +4 -6
  69. package/src/Module/Envelope/Base.ts +10 -13
  70. package/src/Module/Envelope/FreqEnvelope.ts +4 -6
  71. package/src/Module/Envelope/index.ts +1 -1
  72. package/src/Module/Filter.ts +15 -15
  73. package/src/Module/Master.ts +1 -2
  74. package/src/Module/MidiSelector.ts +14 -6
  75. package/src/Module/Oscillator.ts +8 -10
  76. package/src/Module/PolyModule.ts +15 -30
  77. package/src/Module/Reverb.ts +1 -2
  78. package/src/Module/VirtualMidi.ts +1 -2
  79. package/src/Module/VoiceScheduler.ts +7 -10
  80. package/src/Module/Volume.ts +7 -9
  81. package/src/Module/index.ts +27 -41
  82. package/src/index.ts +0 -1
@@ -1,15 +1,14 @@
1
1
  import { Volume as Vol } from "tone";
2
- import Module, { ModuleType } from "../Module";
3
- import PolyModule, { PolyModuleType } from "./PolyModule";
2
+ import Module from "./Base";
3
+ import PolyModule from "./PolyModule";
4
4
  const InitialProps = {
5
5
  volume: -100,
6
6
  };
7
- export default class Volume extends Module {
7
+ class MonoVolume extends Module {
8
8
  constructor(name, props) {
9
9
  super(new Vol(), {
10
10
  name,
11
11
  props: { ...InitialProps, ...props },
12
- type: ModuleType.Volume,
13
12
  });
14
13
  }
15
14
  get volume() {
@@ -20,12 +19,12 @@ export default class Volume extends Module {
20
19
  this.internalModule.volume.value = this.volume;
21
20
  }
22
21
  }
23
- export class PolyVolume extends PolyModule {
22
+ export default class Volume extends PolyModule {
24
23
  constructor(name, props) {
25
- super(PolyModuleType.Volume, {
24
+ super({
26
25
  name,
26
+ child: MonoVolume,
27
27
  props: { ...InitialProps, ...props },
28
- type: ModuleType.Volume,
29
28
  });
30
29
  this.registerBasicInputs();
31
30
  this.registerBasicOutputs();
@@ -1 +1 @@
1
- {"version":3,"file":"Volume.js","sourceRoot":"","sources":["../../src/Module/Volume.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,MAAM,CAAC;AAErC,OAAO,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,UAAU,EAAE,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAO1D,MAAM,YAAY,GAAoB;IACpC,MAAM,EAAE,CAAC,GAAG;CACb,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,MAA4B;IAC9D,YAAY,IAAY,EAAE,KAA+B;QACvD,KAAK,CAAC,IAAI,GAAG,EAAE,EAAE;YACf,IAAI;YACJ,KAAK,EAAE,EAAE,GAAG,YAAY,EAAE,GAAG,KAAK,EAAE;YACpC,IAAI,EAAE,UAAU,CAAC,MAAM;SACxB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,MAAM,CAAC,KAAa;QACtB,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAE/C,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;IACjD,CAAC;CACF;AAED,MAAM,OAAO,UAAW,SAAQ,UAAmC;IACjE,YAAY,IAAY,EAAE,KAA+B;QACvD,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE;YAC3B,IAAI;YACJ,KAAK,EAAE,EAAE,GAAG,YAAY,EAAE,GAAG,KAAK,EAAE;YACpC,IAAI,EAAE,UAAU,CAAC,MAAM;SACxB,CAAC,CAAC;QAEH,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;CACF"}
1
+ {"version":3,"file":"Volume.js","sourceRoot":"","sources":["../../src/Module/Volume.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,MAAM,CAAC;AAErC,OAAO,MAAoB,MAAM,QAAQ,CAAC;AAC1C,OAAO,UAAU,MAAM,cAAc,CAAC;AAMtC,MAAM,YAAY,GAAoB;IACpC,MAAM,EAAE,CAAC,GAAG;CACb,CAAC;AAEF,MAAM,UAAW,SAAQ,MAA4B;IACnD,YAAY,IAAY,EAAE,KAA+B;QACvD,KAAK,CAAC,IAAI,GAAG,EAAE,EAAE;YACf,IAAI;YACJ,KAAK,EAAE,EAAE,GAAG,YAAY,EAAE,GAAG,KAAK,EAAE;SACrC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,MAAM,CAAC,KAAa;QACtB,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAE/C,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;IACjD,CAAC;CACF;AAED,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,UAAuC;IACzE,YAAY,IAAY,EAAE,KAA+B;QACvD,KAAK,CAAC;YACJ,IAAI;YACJ,KAAK,EAAE,UAAU;YACjB,KAAK,EAAE,EAAE,GAAG,YAAY,EAAE,GAAG,KAAK,EAAE;SACrC,CAAC,CAAC;QAEH,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;CACF"}
@@ -1,25 +1,10 @@
1
1
  import Module, { Connectable } from "./Base";
2
2
  import PolyModule from "./PolyModule";
3
- import Oscillator, { PolyOscillator } from "./Oscillator";
4
- import { Envelope, AmpEnvelope } from "./Envelope";
5
- import Filter, { PolyFilter } from "./Filter";
6
- import Master from "./Master";
7
- import VoiceScheduler, { Voice } from "./VoiceScheduler";
8
- import MidiSelector from "./MidiSelector";
9
- import { PolyAmpEnvelope } from "./Envelope/AmpEnvelope";
10
- import { PolyEnvelope } from "./Envelope/Base";
11
- import Volume, { PolyVolume } from "./Volume";
12
- import VirtualMidi from "./VirtualMidi";
13
- import Reverb from "./Reverb";
14
- import Delay from "./Delay";
15
- import Distortion from "./Distortion";
16
- import BitCrusher from "./BitCrusher";
17
- export { default, ModuleType } from "./Base";
18
- export { default as PolyModule, PolyModuleType } from "./PolyModule";
3
+ export { default } from "./Base";
4
+ export { default as PolyModule } from "./PolyModule";
19
5
  export type { ModuleInterface, Connectable, Triggerable } from "./Base";
20
6
  export { default as Filter } from "./Filter";
21
7
  export { default as Oscillator } from "./Oscillator";
22
8
  export { Envelope, AmpEnvelope, FreqEnvelope, EnvelopeStages, } from "./Envelope";
23
9
  export declare type AudioModule = Module<Connectable, any> | PolyModule<Module<Connectable, any>, any>;
24
10
  export declare function createModule(name: string, type: string, props: any): AudioModule;
25
- export declare function moduleClassFromType(type: string): typeof Reverb | typeof Delay | typeof Distortion | typeof BitCrusher | typeof Oscillator | typeof Envelope | typeof AmpEnvelope | typeof Filter | typeof Volume | typeof PolyOscillator | typeof PolyEnvelope | typeof PolyAmpEnvelope | typeof PolyFilter | typeof PolyVolume | typeof Master | typeof Voice | typeof VoiceScheduler | typeof MidiSelector | typeof VirtualMidi;
@@ -1,22 +1,18 @@
1
- import { ModuleType } from "./Base";
2
- import { PolyModuleType } from "./PolyModule";
3
- import Oscillator, { PolyOscillator } from "./Oscillator";
1
+ import { camelCase, upperFirst } from "lodash";
2
+ import Oscillator from "./Oscillator";
4
3
  import { Envelope, AmpEnvelope, FreqEnvelope } from "./Envelope";
5
- import Filter, { PolyFilter } from "./Filter";
4
+ import Filter from "./Filter";
6
5
  import Master from "./Master";
7
- import VoiceScheduler, { Voice } from "./VoiceScheduler";
6
+ import VoiceScheduler from "./VoiceScheduler";
8
7
  import MidiSelector from "./MidiSelector";
9
- import { PolyAmpEnvelope } from "./Envelope/AmpEnvelope";
10
- import { PolyFreqEnvelope } from "./Envelope/FreqEnvelope";
11
- import { PolyEnvelope } from "./Envelope/Base";
12
- import Volume, { PolyVolume } from "./Volume";
8
+ import Volume from "./Volume";
13
9
  import VirtualMidi from "./VirtualMidi";
14
10
  import Reverb from "./Reverb";
15
11
  import Delay from "./Delay";
16
12
  import Distortion from "./Distortion";
17
13
  import BitCrusher from "./BitCrusher";
18
- export { default, ModuleType } from "./Base";
19
- export { default as PolyModule, PolyModuleType } from "./PolyModule";
14
+ export { default } from "./Base";
15
+ export { default as PolyModule } from "./PolyModule";
20
16
  export { default as Filter } from "./Filter";
21
17
  export { default as Oscillator } from "./Oscillator";
22
18
  export { Envelope, AmpEnvelope, FreqEnvelope, EnvelopeStages, } from "./Envelope";
@@ -24,52 +20,39 @@ export function createModule(name, type, props) {
24
20
  const klass = moduleClassFromType(type);
25
21
  return new klass(name, props);
26
22
  }
27
- export function moduleClassFromType(type) {
23
+ function moduleClassFromType(type) {
24
+ type = upperFirst(camelCase(type));
28
25
  switch (type) {
29
- case ModuleType.Oscillator:
26
+ case Oscillator.name:
30
27
  return Oscillator;
31
- case ModuleType.Envelope:
28
+ case Envelope.name:
32
29
  return Envelope;
33
- case ModuleType.AmpEnvelope:
30
+ case AmpEnvelope.name:
34
31
  return AmpEnvelope;
35
- case ModuleType.FreqEnvelope:
32
+ case FreqEnvelope.name:
36
33
  return FreqEnvelope;
37
- case ModuleType.Filter:
34
+ case Filter.name:
38
35
  return Filter;
39
- case ModuleType.Volume:
36
+ case Volume.name:
40
37
  return Volume;
41
- case PolyModuleType.Oscillator:
42
- return PolyOscillator;
43
- case PolyModuleType.Envelope:
44
- return PolyEnvelope;
45
- case PolyModuleType.AmpEnvelope:
46
- return PolyAmpEnvelope;
47
- case PolyModuleType.FreqEnvelope:
48
- return PolyFreqEnvelope;
49
- case PolyModuleType.Filter:
50
- return PolyFilter;
51
- case PolyModuleType.Volume:
52
- return PolyVolume;
53
- case ModuleType.Master:
38
+ case Master.name:
54
39
  return Master;
55
- case ModuleType.Voice:
56
- return Voice;
57
- case PolyModuleType.VoiceScheduler:
40
+ case VoiceScheduler.name:
58
41
  return VoiceScheduler;
59
- case ModuleType.MidiSelector:
42
+ case MidiSelector.name:
60
43
  return MidiSelector;
61
- case ModuleType.VirtualMidi:
44
+ case VirtualMidi.name:
62
45
  return VirtualMidi;
63
- case ModuleType.Reverb:
46
+ case Reverb.name:
64
47
  return Reverb;
65
- case ModuleType.Delay:
48
+ case Delay.name:
66
49
  return Delay;
67
- case ModuleType.Distortion:
50
+ case Distortion.name:
68
51
  return Distortion;
69
- case ModuleType.BitCrusher:
52
+ case BitCrusher.name:
70
53
  return BitCrusher;
71
54
  default:
72
- throw Error("Unknown module type");
55
+ throw Error(`Unknown module type ${type}`);
73
56
  }
74
57
  }
75
58
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Module/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Module/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAG/C,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AAGrD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EACL,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,cAAc,GACf,MAAM,YAAY,CAAC;AAMpB,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,IAAY,EACZ,KAAU;IAEV,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAExC,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACvC,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAEnC,QAAQ,IAAI,EAAE;QACZ,KAAK,UAAU,CAAC,IAAI;YAClB,OAAO,UAAU,CAAC;QACpB,KAAK,QAAQ,CAAC,IAAI;YAChB,OAAO,QAAQ,CAAC;QAClB,KAAK,WAAW,CAAC,IAAI;YACnB,OAAO,WAAW,CAAC;QACrB,KAAK,YAAY,CAAC,IAAI;YACpB,OAAO,YAAY,CAAC;QACtB,KAAK,MAAM,CAAC,IAAI;YACd,OAAO,MAAM,CAAC;QAChB,KAAK,MAAM,CAAC,IAAI;YACd,OAAO,MAAM,CAAC;QAChB,KAAK,MAAM,CAAC,IAAI;YACd,OAAO,MAAM,CAAC;QAChB,KAAK,cAAc,CAAC,IAAI;YACtB,OAAO,cAAc,CAAC;QACxB,KAAK,YAAY,CAAC,IAAI;YACpB,OAAO,YAAY,CAAC;QACtB,KAAK,WAAW,CAAC,IAAI;YACnB,OAAO,WAAW,CAAC;QACrB,KAAK,MAAM,CAAC,IAAI;YACd,OAAO,MAAM,CAAC;QAChB,KAAK,KAAK,CAAC,IAAI;YACb,OAAO,KAAK,CAAC;QACf,KAAK,UAAU,CAAC,IAAI;YAClB,OAAO,UAAU,CAAC;QACpB,KAAK,UAAU,CAAC,IAAI;YAClB,OAAO,UAAU,CAAC;QACpB;YACE,MAAM,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;KAC9C;AACH,CAAC"}
package/build/index.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  export { default } from "./Engine";
2
- export { ModuleType, PolyModuleType } from "./Module";
3
2
  export { default as MidiDevice } from "./MidiDevice";
4
3
  export { default as MidiDeviceManager } from "./MidiDeviceManager";
5
4
  export { default as Note } from "./Note";
package/build/index.js CHANGED
@@ -1,5 +1,4 @@
1
1
  export { default } from "./Engine";
2
- export { ModuleType, PolyModuleType } from "./Module";
3
2
  export { default as MidiDevice } from "./MidiDevice";
4
3
  export { default as MidiDeviceManager } from "./MidiDeviceManager";
5
4
  export { default as Note } from "./Note";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC"}
package/package.json CHANGED
@@ -1,9 +1,11 @@
1
1
  {
2
2
  "name": "@blibliki/engine",
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
4
4
  "main": "build/index.js",
5
5
  "types": "build/index.d.ts",
6
6
  "dependencies": {
7
+ "@types/lodash": "^4.14.186",
8
+ "lodash": "^4.17.21",
7
9
  "tone": "^14.7.77",
8
10
  "uuid": "^8.3.2"
9
11
  },
package/src/Engine.ts CHANGED
@@ -2,7 +2,6 @@ import { Context, setContext } from "tone";
2
2
  import MidiDeviceManager from "./MidiDeviceManager";
3
3
  import MidiEvent from "./MidiEvent";
4
4
 
5
- import { ModuleType } from "./Module";
6
5
  import { AudioModule, createModule } from "./Module";
7
6
  import Master from "./Module/Master";
8
7
  import VirtualMidi from "./Module/VirtualMidi";
@@ -112,11 +111,7 @@ class Engine {
112
111
  get master() {
113
112
  if (this._master) return this._master.serialize();
114
113
 
115
- const masterProps = this.registerModule(
116
- "Master",
117
- "master",
118
- ModuleType.Master
119
- );
114
+ const masterProps = this.registerModule("Master", "Master");
120
115
  this._master = this.modules[masterProps.id] as Master;
121
116
 
122
117
  return masterProps;
@@ -130,7 +125,7 @@ class Engine {
130
125
 
131
126
  dispose() {
132
127
  Object.values(this.modules).forEach((m) => {
133
- if (m.type === "master") return;
128
+ if (m.constructor.name === "Master") return;
134
129
 
135
130
  m.dispose();
136
131
  });
@@ -5,23 +5,6 @@ import { Input, Output, IOInterface } from "./IO";
5
5
  import MidiEvent from "../MidiEvent";
6
6
  import { AudioModule, PolyModule } from "../Module";
7
7
 
8
- export enum ModuleType {
9
- Oscillator = "monoOscillator",
10
- Envelope = "monoEnvelope",
11
- AmpEnvelope = "monoAmpEnvelope",
12
- FreqEnvelope = "monoFreqEnvelope",
13
- Filter = "monoFilter",
14
- Master = "master",
15
- Voice = "voice",
16
- MidiSelector = "midiSelector",
17
- VirtualMidi = "virtualMidi",
18
- Volume = "monoVolume",
19
- Reverb = "reverb",
20
- Delay = "delay",
21
- Distortion = "distortion",
22
- BitCrusher = "bitCrusher",
23
- }
24
-
25
8
  export interface Connectable {
26
9
  connect: (inputNode: InputNode) => void;
27
10
  disconnect: (inputNode?: InputNode) => void;
@@ -33,9 +16,12 @@ export interface Triggerable {
33
16
  triggerRelease: Function;
34
17
  }
35
18
 
19
+ export interface Voicable {
20
+ voiceNo?: number;
21
+ }
22
+
36
23
  export interface ModuleInterface {
37
24
  name: string;
38
- type: ModuleType;
39
25
  props?: { [key: string]: any };
40
26
  voiceNo?: number;
41
27
  }
@@ -59,7 +45,6 @@ class Module<InternalModule extends Connectable, PropsInterface>
59
45
  name: string;
60
46
  inputs: Input[] = [];
61
47
  outputs: Output[] = [];
62
- type: ModuleType;
63
48
  readonly voiceNo?: number;
64
49
  updatedAt: Date;
65
50
  _props: PropsInterface;
@@ -160,7 +145,7 @@ class Module<InternalModule extends Connectable, PropsInterface>
160
145
  return {
161
146
  id: this.id,
162
147
  name: this.name,
163
- type: this.type,
148
+ type: this.constructor.name,
164
149
  props: this.props,
165
150
  inputs: this.inputs.map((i) => i.serialize()),
166
151
  outputs: this.outputs.map((i) => i.serialize()),
@@ -1,6 +1,5 @@
1
1
  import { BitCrusher as InternalBitCrasher } from "tone";
2
2
 
3
- import { ModuleType } from "./Base";
4
3
  import Effect, { EffectInterface } from "./Effect";
5
4
 
6
5
  interface BitCrusherInterface extends EffectInterface {
@@ -11,12 +10,12 @@ const InitialProps: Partial<BitCrusherInterface> = {
11
10
  bits: 16,
12
11
  };
13
12
 
14
- export default class Delay extends Effect<
13
+ export default class BitCrusher extends Effect<
15
14
  InternalBitCrasher,
16
15
  BitCrusherInterface
17
16
  > {
18
17
  constructor(name: string, props: Partial<BitCrusherInterface>) {
19
- super(name, ModuleType.BitCrusher, new InternalBitCrasher(), {
18
+ super(name, new InternalBitCrasher(), {
20
19
  ...InitialProps,
21
20
  ...props,
22
21
  });
@@ -1,6 +1,5 @@
1
1
  import { FeedbackDelay } from "tone";
2
2
 
3
- import { ModuleType } from "./Base";
4
3
  import Effect, { EffectInterface } from "./Effect";
5
4
 
6
5
  interface DelayInterface extends EffectInterface {
@@ -15,7 +14,7 @@ const InitialProps: Partial<DelayInterface> = {
15
14
 
16
15
  export default class Delay extends Effect<FeedbackDelay, DelayInterface> {
17
16
  constructor(name: string, props: Partial<DelayInterface>) {
18
- super(name, ModuleType.Delay, new FeedbackDelay(), {
17
+ super(name, new FeedbackDelay(), {
19
18
  ...InitialProps,
20
19
  ...props,
21
20
  });
@@ -1,6 +1,5 @@
1
1
  import { Distortion as InternalDistortion } from "tone";
2
2
 
3
- import { ModuleType } from "./Base";
4
3
  import Effect, { EffectInterface } from "./Effect";
5
4
 
6
5
  interface DistortionInterface extends EffectInterface {
@@ -16,7 +15,7 @@ export default class Distortion extends Effect<
16
15
  DistortionInterface
17
16
  > {
18
17
  constructor(name: string, props: Partial<DistortionInterface>) {
19
- super(name, ModuleType.Distortion, new InternalDistortion(), {
18
+ super(name, new InternalDistortion(), {
20
19
  ...InitialProps,
21
20
  ...props,
22
21
  });
@@ -1,5 +1,5 @@
1
1
  import { Signal } from "tone";
2
- import Module, { Connectable, ModuleType } from "./Base";
2
+ import Module, { Connectable } from "./Base";
3
3
 
4
4
  interface EffectLike extends Connectable {
5
5
  wet: Signal<"normalRange">;
@@ -19,13 +19,11 @@ export default abstract class Effect<
19
19
  > extends Module<InternalEffect, ModuleInterface> {
20
20
  constructor(
21
21
  name: string,
22
- type: ModuleType,
23
22
  internalModule: InternalEffect,
24
23
  props: Partial<ModuleInterface>
25
24
  ) {
26
25
  super(internalModule, {
27
26
  name,
28
- type,
29
27
  props: { ...InitialProps, ...props },
30
28
  });
31
29
 
@@ -1,17 +1,15 @@
1
1
  import { AmplitudeEnvelope } from "tone";
2
2
 
3
- import { ModuleType } from "../index";
4
3
  import Base, { EnvelopeInterface, PolyBase } from "./Base";
5
- import { PolyModuleType } from "../PolyModule";
6
4
 
7
- export default class AmpEnvelope extends Base<AmplitudeEnvelope> {
5
+ class MonoAmpEnvelope extends Base<AmplitudeEnvelope> {
8
6
  constructor(name: string, props: EnvelopeInterface) {
9
- super(name, ModuleType.AmpEnvelope, new AmplitudeEnvelope(), props);
7
+ super(name, new AmplitudeEnvelope(), props);
10
8
  }
11
9
  }
12
10
 
13
- export class PolyAmpEnvelope extends PolyBase<AmpEnvelope> {
11
+ export default class AmpEnvelope extends PolyBase<MonoAmpEnvelope> {
14
12
  constructor(name: string, props: Partial<EnvelopeInterface>) {
15
- super(name, ModuleType.AmpEnvelope, PolyModuleType.AmpEnvelope, props);
13
+ super(name, MonoAmpEnvelope, props);
16
14
  }
17
15
  }
@@ -1,7 +1,7 @@
1
1
  import { Envelope as Env } from "tone";
2
2
 
3
- import Module, { ModuleType, Connectable, Triggerable } from "../index";
4
- import PolyModule, { PolyModuleType } from "../PolyModule";
3
+ import Module, { Connectable, Triggerable, Voicable } from "../Base";
4
+ import PolyModule from "../PolyModule";
5
5
  import MidiEvent from "../../MidiEvent";
6
6
 
7
7
  export const enum EnvelopeStages {
@@ -16,7 +16,7 @@ const MIN_TIME = 0.01;
16
16
  const SUSTAIN_MAX_VALUE = 1;
17
17
  const SUSTAIN_MIN_VALUE = 0;
18
18
 
19
- export interface EnvelopeInterface {
19
+ export interface EnvelopeInterface extends Voicable {
20
20
  attack: number;
21
21
  decay: number;
22
22
  sustain: number;
@@ -40,13 +40,11 @@ export default abstract class EnvelopeModule<EnvelopeLike extends Env>
40
40
 
41
41
  constructor(
42
42
  name: string,
43
- type: ModuleType,
44
43
  internalModule: EnvelopeLike,
45
44
  props: EnvelopeInterface
46
45
  ) {
47
46
  super(internalModule, {
48
47
  name,
49
- type,
50
48
  props: { ...InitialProps, ...props },
51
49
  });
52
50
  }
@@ -120,13 +118,12 @@ export abstract class PolyBase<
120
118
  > extends PolyModule<EnvelopeModule, EnvelopeInterface> {
121
119
  constructor(
122
120
  name: string,
123
- type: ModuleType,
124
- polyType: PolyModuleType,
121
+ child: new (name: string, props: EnvelopeInterface) => EnvelopeModule,
125
122
  props: Partial<EnvelopeInterface>
126
123
  ) {
127
- super(polyType, {
124
+ super({
128
125
  name,
129
- type,
126
+ child,
130
127
  props: { ...InitialProps, ...props },
131
128
  });
132
129
 
@@ -143,15 +140,15 @@ export abstract class PolyBase<
143
140
  }
144
141
  }
145
142
 
146
- export class Envelope extends EnvelopeModule<Env> {
143
+ class MonoEnvelope extends EnvelopeModule<Env> {
147
144
  constructor(name: string, props: EnvelopeInterface) {
148
- super(name, ModuleType.Envelope, new Env(), props);
145
+ super(name, new Env(), props);
149
146
  }
150
147
  }
151
148
 
152
- export class PolyEnvelope extends PolyBase<Envelope> {
149
+ export class Envelope extends PolyBase<MonoEnvelope> {
153
150
  constructor(name: string, props: Partial<EnvelopeInterface>) {
154
- super(name, ModuleType.Envelope, PolyModuleType.Envelope, {
151
+ super(name, MonoEnvelope, {
155
152
  ...InitialProps,
156
153
  ...props,
157
154
  });
@@ -1,9 +1,7 @@
1
1
  import { FrequencyEnvelope } from "tone";
2
2
 
3
- import { ModuleType } from "../Base";
4
3
  import Filter from "../Filter";
5
4
  import { Output } from "../IO";
6
- import { PolyModuleType } from "../PolyModule";
7
5
 
8
6
  import Base, { EnvelopeInterface, PolyBase } from "./Base";
9
7
 
@@ -15,13 +13,13 @@ const InitialProps: FreqEnvelopeInterface = {
15
13
  amount: 0,
16
14
  };
17
15
 
18
- export default class FreqEnvelope extends Base<FrequencyEnvelope> {
16
+ export class MonoFreqEnvelope extends Base<FrequencyEnvelope> {
19
17
  private _frequency: number;
20
18
  private _amount: number;
21
19
  filter: Filter;
22
20
 
23
21
  constructor(name: string, props: EnvelopeInterface) {
24
- super(name, ModuleType.FreqEnvelope, new FrequencyEnvelope(), {
22
+ super(name, new FrequencyEnvelope(), {
25
23
  ...InitialProps,
26
24
  ...props,
27
25
  });
@@ -47,9 +45,9 @@ export default class FreqEnvelope extends Base<FrequencyEnvelope> {
47
45
  }
48
46
  }
49
47
 
50
- export class PolyFreqEnvelope extends PolyBase<FreqEnvelope> {
48
+ export default class FreqEnvelope extends PolyBase<MonoFreqEnvelope> {
51
49
  constructor(name: string, props: Partial<EnvelopeInterface>) {
52
- super(name, ModuleType.FreqEnvelope, PolyModuleType.FreqEnvelope, props);
50
+ super(name, MonoFreqEnvelope, props);
53
51
 
54
52
  this.registerOutputs();
55
53
  }
@@ -1,3 +1,3 @@
1
1
  export { default, Envelope, EnvelopeStages } from "./Base";
2
2
  export { default as AmpEnvelope } from "./AmpEnvelope";
3
- export { default as FreqEnvelope } from "./FreqEnvelope";
3
+ export { default as FreqEnvelope, MonoFreqEnvelope } from "./FreqEnvelope";
@@ -1,12 +1,12 @@
1
1
  import { Filter as InternalFilter } from "tone";
2
2
 
3
- import { FreqEnvelope } from "./Envelope";
4
- import Module, { ModuleType } from "./Base";
5
- import PolyModule, { PolyModuleType } from "./PolyModule";
6
- import { PolyFreqEnvelope } from "./Envelope/FreqEnvelope";
3
+ import { FreqEnvelope, MonoFreqEnvelope } from "./Envelope";
4
+ import Module, { Voicable } from "./Base";
5
+ import PolyModule from "./PolyModule";
7
6
 
8
- interface FilterInterface {
7
+ interface FilterInterface extends Voicable {
9
8
  cutoff: number;
9
+ filterType: BiquadFilterType;
10
10
  resonance: number;
11
11
  envelopeAmount: number;
12
12
  voiceNo?: number;
@@ -18,16 +18,16 @@ const InitialProps: FilterInterface = {
18
18
  cutoff: 20000,
19
19
  resonance: 0,
20
20
  envelopeAmount: 0,
21
+ filterType: "lowpass",
21
22
  };
22
23
 
23
- export default class Filter extends Module<InternalFilter, FilterInterface> {
24
- private _envelope: FreqEnvelope;
24
+ class MonoFilter extends Module<InternalFilter, FilterInterface> {
25
+ private _envelope: MonoFreqEnvelope;
25
26
 
26
27
  constructor(name: string, props: FilterProps) {
27
28
  super(new InternalFilter({ type: "lowpass" }), {
28
29
  name,
29
30
  props: { ...InitialProps, ...props },
30
- type: ModuleType.Filter,
31
31
  });
32
32
  }
33
33
 
@@ -71,19 +71,19 @@ export default class Filter extends Module<InternalFilter, FilterInterface> {
71
71
  this._envelope.amount = value;
72
72
  }
73
73
 
74
- conntectedEnvelope(envelope: FreqEnvelope) {
74
+ conntectedEnvelope(envelope: MonoFreqEnvelope) {
75
75
  this._envelope = envelope;
76
76
  this._envelope.frequency = this.cutoff;
77
77
  this._envelope.amount = this.envelopeAmount;
78
78
  }
79
79
  }
80
80
 
81
- export class PolyFilter extends PolyModule<Filter, FilterInterface> {
81
+ export default class Filter extends PolyModule<MonoFilter, FilterInterface> {
82
82
  constructor(name: string, props: Partial<FilterInterface>) {
83
- super(PolyModuleType.Filter, {
83
+ super({
84
84
  name,
85
+ child: MonoFilter,
85
86
  props: { ...InitialProps, ...props },
86
- type: ModuleType.Filter,
87
87
  });
88
88
 
89
89
  this.registerBasicInputs();
@@ -96,13 +96,13 @@ export class PolyFilter extends PolyModule<Filter, FilterInterface> {
96
96
  name: "frequency",
97
97
  pluggable: "frequency",
98
98
  onPlug: (output) => {
99
- this.conntectedEnvelope(output.audioModule as PolyFreqEnvelope);
99
+ this.conntectedEnvelope(output.audioModule as FreqEnvelope);
100
100
  },
101
101
  });
102
102
  }
103
103
 
104
- conntectedEnvelope(polyFreqEnvelope: PolyFreqEnvelope) {
105
- polyFreqEnvelope.audioModules.forEach((envelope) => {
104
+ conntectedEnvelope(freqEnvelope: FreqEnvelope) {
105
+ freqEnvelope.audioModules.forEach((envelope) => {
106
106
  if (envelope.voiceNo === undefined) return;
107
107
 
108
108
  const filter = this.findVoice(envelope.voiceNo);
@@ -1,5 +1,5 @@
1
1
  import { Destination, getDestination } from "tone";
2
- import Module, { ModuleType } from "../Module";
2
+ import Module from "./Base";
3
3
 
4
4
  export interface MasterInterface {}
5
5
 
@@ -10,7 +10,6 @@ export default class Master extends Module<
10
10
  constructor() {
11
11
  super(getDestination(), {
12
12
  name: "Master",
13
- type: ModuleType.Master,
14
13
  });
15
14
 
16
15
  this.registerBasicInputs();