@blibliki/engine 0.1.17 → 0.1.19

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 (161) hide show
  1. package/README.md +13 -1
  2. package/{build → dist/build}/Engine.d.ts +14 -22
  3. package/dist/build/core/IO/AudioNode.d.ts +35 -0
  4. package/dist/build/core/IO/Collection.d.ts +13 -0
  5. package/dist/build/core/IO/ForwardNode.d.ts +38 -0
  6. package/dist/build/core/IO/MidiNode.d.ts +30 -0
  7. package/dist/build/core/IO/Node.d.ts +36 -0
  8. package/dist/build/core/IO/index.d.ts +12 -0
  9. package/dist/build/core/Module/MonoModule.d.ts +67 -0
  10. package/dist/build/core/Module/PolyModule.d.ts +57 -0
  11. package/dist/build/core/Module/index.d.ts +6 -0
  12. package/{build → dist/build/core}/Note/index.d.ts +3 -0
  13. package/{build → dist/build/core/midi}/MidiDevice.d.ts +1 -1
  14. package/dist/build/core/midi/MidiEvent.d.ts +21 -0
  15. package/dist/build/core/midi/index.d.ts +5 -0
  16. package/dist/build/index.d.ts +9 -0
  17. package/{build/Module → dist/build/modules}/BitCrusher.d.ts +5 -1
  18. package/{build/Module → dist/build/modules}/Delay.d.ts +5 -1
  19. package/{build/Module → dist/build/modules}/Distortion.d.ts +5 -1
  20. package/{build/Module → dist/build/modules}/Effect.d.ts +7 -2
  21. package/{build/Module → dist/build/modules}/Envelope/AmpEnvelope.d.ts +10 -2
  22. package/{build/Module → dist/build/modules}/Envelope/Base.d.ts +30 -11
  23. package/{build/Module → dist/build/modules}/Envelope/FreqEnvelope.d.ts +10 -3
  24. package/{build/Module → dist/build/modules}/Filter.d.ts +13 -13
  25. package/{build/Module → dist/build/modules}/Master.d.ts +5 -2
  26. package/{build/Module → dist/build/modules}/MidiSelector.d.ts +9 -5
  27. package/{build/Module → dist/build/modules}/Oscillator.d.ts +15 -9
  28. package/{build/Module → dist/build/modules}/Reverb.d.ts +5 -1
  29. package/{build/Module → dist/build/modules}/Sequencer.d.ts +9 -5
  30. package/{build/Module → dist/build/modules}/VirtualMidi.d.ts +12 -8
  31. package/dist/build/modules/VoiceScheduler.d.ts +43 -0
  32. package/dist/build/modules/Volume.d.ts +26 -0
  33. package/dist/build/modules/index.d.ts +16 -0
  34. package/{build → dist/build}/routes.d.ts +6 -5
  35. package/dist/build/types.d.ts +5 -0
  36. package/dist/build/utils.d.ts +1 -0
  37. package/dist/main.cjs.js +33 -0
  38. package/dist/main.cjs.js.map +1 -0
  39. package/dist/main.esm.js +33 -0
  40. package/dist/main.esm.js.map +1 -0
  41. package/package.json +26 -22
  42. package/src/Engine.ts +27 -36
  43. package/src/core/IO/AudioNode.ts +77 -0
  44. package/src/core/IO/Collection.ts +76 -0
  45. package/src/core/IO/ForwardNode.ts +192 -0
  46. package/src/core/IO/MidiNode.ts +67 -0
  47. package/src/core/IO/Node.ts +117 -0
  48. package/src/core/IO/index.ts +47 -0
  49. package/src/core/Module/MonoModule.ts +219 -0
  50. package/src/core/Module/PolyModule.ts +206 -0
  51. package/src/core/Module/index.ts +15 -0
  52. package/src/{Note → core/Note}/index.ts +19 -4
  53. package/src/{MidiDeviceManager.ts → core/midi/MidiDeviceManager.ts} +20 -15
  54. package/src/core/midi/MidiEvent.ts +91 -0
  55. package/src/core/midi/index.ts +5 -0
  56. package/src/index.ts +8 -12
  57. package/src/{Module → modules}/BitCrusher.ts +15 -4
  58. package/src/{Module → modules}/Delay.ts +15 -4
  59. package/src/{Module → modules}/Distortion.ts +15 -4
  60. package/src/{Module → modules}/Effect.ts +10 -6
  61. package/src/modules/Envelope/AmpEnvelope.ts +23 -0
  62. package/src/{Module → modules}/Envelope/Base.ts +50 -31
  63. package/src/{Module → modules}/Envelope/FreqEnvelope.ts +18 -23
  64. package/src/{Module → modules}/Filter.ts +18 -46
  65. package/src/{Module → modules}/Master.ts +8 -2
  66. package/src/{Module → modules}/MidiSelector.ts +18 -14
  67. package/src/{Module → modules}/Oscillator.ts +27 -16
  68. package/src/{Module → modules}/Reverb.ts +15 -4
  69. package/src/{Module → modules}/Sequencer.ts +17 -13
  70. package/src/{Module → modules}/VirtualMidi.ts +16 -12
  71. package/src/modules/VoiceScheduler.ts +145 -0
  72. package/src/{Module → modules}/Volume.ts +23 -15
  73. package/src/{Module → modules}/index.ts +14 -21
  74. package/src/routes.ts +19 -18
  75. package/src/types.ts +3 -0
  76. package/src/utils.ts +18 -0
  77. package/build/Engine.js +0 -165
  78. package/build/Engine.js.map +0 -1
  79. package/build/MidiDevice.js +0 -45
  80. package/build/MidiDevice.js.map +0 -1
  81. package/build/MidiDeviceManager.js +0 -59
  82. package/build/MidiDeviceManager.js.map +0 -1
  83. package/build/MidiEvent.d.ts +0 -18
  84. package/build/MidiEvent.js +0 -64
  85. package/build/MidiEvent.js.map +0 -1
  86. package/build/Module/Base.d.ts +0 -63
  87. package/build/Module/Base.js +0 -138
  88. package/build/Module/Base.js.map +0 -1
  89. package/build/Module/BitCrusher.js +0 -22
  90. package/build/Module/BitCrusher.js.map +0 -1
  91. package/build/Module/DataSequencer.d.ts +0 -26
  92. package/build/Module/DataSequencer.js +0 -91
  93. package/build/Module/DataSequencer.js.map +0 -1
  94. package/build/Module/Delay.js +0 -30
  95. package/build/Module/Delay.js.map +0 -1
  96. package/build/Module/Distortion.js +0 -22
  97. package/build/Module/Distortion.js.map +0 -1
  98. package/build/Module/Effect.js +0 -22
  99. package/build/Module/Effect.js.map +0 -1
  100. package/build/Module/Envelope/AmpEnvelope.js +0 -14
  101. package/build/Module/Envelope/AmpEnvelope.js.map +0 -1
  102. package/build/Module/Envelope/Base.js +0 -106
  103. package/build/Module/Envelope/Base.js.map +0 -1
  104. package/build/Module/Envelope/FreqEnvelope.js +0 -50
  105. package/build/Module/Envelope/FreqEnvelope.js.map +0 -1
  106. package/build/Module/Envelope/index.js +0 -4
  107. package/build/Module/Envelope/index.js.map +0 -1
  108. package/build/Module/Filter.js +0 -100
  109. package/build/Module/Filter.js.map +0 -1
  110. package/build/Module/IO.d.ts +0 -39
  111. package/build/Module/IO.js +0 -59
  112. package/build/Module/IO.js.map +0 -1
  113. package/build/Module/Master.js +0 -12
  114. package/build/Module/Master.js.map +0 -1
  115. package/build/Module/MidiSelector.js +0 -50
  116. package/build/Module/MidiSelector.js.map +0 -1
  117. package/build/Module/Oscillator.js +0 -136
  118. package/build/Module/Oscillator.js.map +0 -1
  119. package/build/Module/PolyModule.d.ts +0 -49
  120. package/build/Module/PolyModule.js +0 -175
  121. package/build/Module/PolyModule.js.map +0 -1
  122. package/build/Module/Reverb.js +0 -30
  123. package/build/Module/Reverb.js.map +0 -1
  124. package/build/Module/Sequencer.js +0 -131
  125. package/build/Module/Sequencer.js.map +0 -1
  126. package/build/Module/VirtualMidi.js +0 -53
  127. package/build/Module/VirtualMidi.js.map +0 -1
  128. package/build/Module/VoiceScheduler.d.ts +0 -38
  129. package/build/Module/VoiceScheduler.js +0 -130
  130. package/build/Module/VoiceScheduler.js.map +0 -1
  131. package/build/Module/Volume.d.ts +0 -20
  132. package/build/Module/Volume.js +0 -48
  133. package/build/Module/Volume.js.map +0 -1
  134. package/build/Module/index.d.ts +0 -14
  135. package/build/Module/index.js +0 -66
  136. package/build/Module/index.js.map +0 -1
  137. package/build/Note/frequencyTable.js +0 -146
  138. package/build/Note/frequencyTable.js.map +0 -1
  139. package/build/Note/index.js +0 -81
  140. package/build/Note/index.js.map +0 -1
  141. package/build/index.d.ts +0 -8
  142. package/build/index.js +0 -5
  143. package/build/index.js.map +0 -1
  144. package/build/routes.js +0 -31
  145. package/build/routes.js.map +0 -1
  146. package/jest.config.js +0 -19
  147. package/src/MidiEvent.ts +0 -93
  148. package/src/Module/Base.ts +0 -223
  149. package/src/Module/DataSequencer.ts +0 -121
  150. package/src/Module/Envelope/AmpEnvelope.ts +0 -17
  151. package/src/Module/IO.ts +0 -85
  152. package/src/Module/PolyModule.ts +0 -234
  153. package/src/Module/VoiceScheduler.ts +0 -161
  154. package/test/Module/Oscillator.test.ts +0 -9
  155. package/tsconfig.json +0 -22
  156. /package/{build → dist/build/core}/Note/frequencyTable.d.ts +0 -0
  157. /package/{build → dist/build/core/midi}/MidiDeviceManager.d.ts +0 -0
  158. /package/{build/Module → dist/build/modules}/Envelope/index.d.ts +0 -0
  159. /package/src/{Note → core/Note}/frequencyTable.ts +0 -0
  160. /package/src/{MidiDevice.ts → core/midi/MidiDevice.ts} +0 -0
  161. /package/src/{Module → modules}/Envelope/index.ts +0 -0
package/README.md CHANGED
@@ -52,7 +52,19 @@ The props structure vary per audioModule.
52
52
  {
53
53
  id: string,
54
54
  name: string,
55
- props: Object
55
+ props: Object,
56
+ inputs: [{
57
+ id: string,
58
+ name: string,
59
+ moduleId: string,
60
+ moduleName: string
61
+ }],
62
+ outputs: [{
63
+ id: string,
64
+ name: string,
65
+ moduleId: string,
66
+ moduleName: string
67
+ }],
56
68
  }
57
69
  ```
58
70
 
@@ -1,8 +1,8 @@
1
- import MidiDeviceManager from "./MidiDeviceManager";
2
- import { EType } from "./MidiEvent";
3
- import { AudioModule } from "./Module";
4
- import { RouteInterface, RouteProps } from "./routes";
5
- declare type LatencyHint = "interactive" | "playback" | "balanced";
1
+ import { MidiDeviceManager } from "./core/midi";
2
+ import { AudioModule } from "./core/Module";
3
+ import { RouteInterface } from "./routes";
4
+ import { AnyObject, Optional } from "./types";
5
+ type LatencyHint = "interactive" | "playback" | "balanced";
6
6
  interface ContextInterface {
7
7
  latencyHint: LatencyHint;
8
8
  lookAhead: number;
@@ -13,7 +13,6 @@ interface InitializeInterface {
13
13
  declare class Engine {
14
14
  midiDeviceManager: MidiDeviceManager;
15
15
  private static instance;
16
- private _master;
17
16
  private context;
18
17
  private propsUpdateCallbacks;
19
18
  private _isStarted;
@@ -27,9 +26,10 @@ declare class Engine {
27
26
  static getInstance(): Engine;
28
27
  initialize(props: InitializeInterface): Promise<unknown>;
29
28
  addModule(params: {
29
+ id?: string;
30
30
  name: string;
31
31
  type: string;
32
- props?: any;
32
+ props?: AnyObject;
33
33
  }): {
34
34
  id: string;
35
35
  name: string;
@@ -47,9 +47,9 @@ declare class Engine {
47
47
  inputs: import(".").IOProps[];
48
48
  outputs: import(".").IOProps[];
49
49
  };
50
- onPropsUpdate(callback: (id: string, props: any) => void): void;
51
- _triggerPropsUpdate(id: string, props: any): void;
52
- updatePropsModule(id: string, props: any): {
50
+ onPropsUpdate(callback: (id: string, props: AnyObject) => void): void;
51
+ _triggerPropsUpdate(id: string, props: AnyObject): void;
52
+ updatePropsModule(id: string, props: AnyObject): {
53
53
  id: string;
54
54
  name: string;
55
55
  type: string;
@@ -57,23 +57,15 @@ declare class Engine {
57
57
  inputs: import(".").IOProps[];
58
58
  outputs: import(".").IOProps[];
59
59
  };
60
- addRoute(props: RouteProps): {
60
+ addRoute(props: Optional<RouteInterface, "id">): {
61
61
  id: string;
62
62
  sourceId: string;
63
- outputName: string;
63
+ sourceIOId: string;
64
64
  destinationId: string;
65
- inputName: string;
65
+ destinationIOId: string;
66
66
  };
67
67
  removeRoute(id: string): void;
68
- get master(): {
69
- id: string;
70
- name: string;
71
- type: string;
72
- props: any;
73
- inputs: import(".").IOProps[];
74
- outputs: import(".").IOProps[];
75
- };
76
- triggerVirtualMidi(id: string, noteName: string, type: EType): void;
68
+ triggerVirtualMidi(id: string, noteName: string, type: "noteOn" | "noteOff"): void;
77
69
  dispose(): void;
78
70
  findById(id: string): AudioModule;
79
71
  get isStarted(): boolean;
@@ -0,0 +1,35 @@
1
+ import { InputNode } from "tone";
2
+ import IONode, { IOType, IIONode } from "./Node";
3
+ import MonoModule, { Connectable } from "../Module/index";
4
+ import { AnyObject } from "../../types";
5
+ import { ForwardInput, ForwardOutput } from "./ForwardNode";
6
+ export type AudioIO = AudioInput | AudioOutput;
7
+ export interface IAudioInput extends IIONode {
8
+ ioType: IOType.AudioInput;
9
+ internalModule: InputNode;
10
+ }
11
+ export interface IAudioOutput extends IIONode {
12
+ ioType: IOType.AudioOutput;
13
+ internalModule: IInternalModule;
14
+ }
15
+ interface IInternalModule extends Connectable {
16
+ }
17
+ export declare class AudioInput extends IONode implements IAudioInput {
18
+ ioType: IOType.AudioInput;
19
+ internalModule: InputNode;
20
+ connections: AudioOutput[];
21
+ constructor(plugableModule: MonoModule<Connectable, AnyObject>, props: IAudioInput);
22
+ plug(io: AudioOutput | ForwardOutput, plugOther?: boolean): void;
23
+ unPlug(io: AudioOutput | ForwardOutput, plugOther?: boolean): void;
24
+ unPlugAll(): void;
25
+ }
26
+ export declare class AudioOutput extends IONode implements IAudioOutput {
27
+ ioType: IOType.AudioOutput;
28
+ internalModule: IInternalModule;
29
+ connections: AudioInput[];
30
+ constructor(plugableModule: MonoModule<Connectable, AnyObject>, props: IAudioOutput);
31
+ plug(io: AudioInput | ForwardInput, plugOther?: boolean): void;
32
+ unPlug(io: AudioInput | ForwardInput, plugOther?: boolean): void;
33
+ unPlugAll(): void;
34
+ }
35
+ export {};
@@ -0,0 +1,13 @@
1
+ import { AudioModule } from "../Module";
2
+ import IO from "./Node";
3
+ import { IAnyIO } from ".";
4
+ export default class IOCollection<AnyIO extends IO> {
5
+ plugableModule: AudioModule;
6
+ collection: AnyIO[];
7
+ constructor(plugableModule: AudioModule);
8
+ add<CurrentIO extends AnyIO>(props: IAnyIO): CurrentIO;
9
+ unPlugAll(): void;
10
+ find(id: string): AnyIO | undefined;
11
+ findByName(name: string): AnyIO | undefined;
12
+ serialize(): import("./Node").IIOSerialize[];
13
+ }
@@ -0,0 +1,38 @@
1
+ import IONode, { IOType, IIONode } from "./Node";
2
+ import Module, { Connectable, PolyModule } from "../Module";
3
+ import { AnyObject } from "../../types";
4
+ import { AnyInput, AnyOuput } from ".";
5
+ export interface IForwardInput extends IIONode {
6
+ ioType: IOType.ForwardInput;
7
+ }
8
+ export interface IForwardOutput extends IIONode {
9
+ ioType: IOType.ForwardOutput;
10
+ }
11
+ export declare class ForwardInput extends IONode implements IForwardInput {
12
+ plugableModule: PolyModule<Module<Connectable, AnyObject>, AnyObject>;
13
+ ioType: IOType.ForwardInput;
14
+ connections: ForwardOutput[];
15
+ constructor(plugableModule: PolyModule<Module<Connectable, AnyObject>, AnyObject>, props: IForwardInput);
16
+ get subInputs(): (import("./AudioNode").AudioInput | import("./MidiNode").MidiInput)[];
17
+ get subModules(): Module<Connectable, AnyObject>[];
18
+ subModule(voiceNo: number): Module<Connectable, AnyObject>;
19
+ subInput(voiceNo: number): import("./AudioNode").AudioInput | import("./MidiNode").MidiInput;
20
+ plug(io: AnyOuput, plugOther?: boolean): void;
21
+ unPlug(io: AnyOuput, plugOther?: boolean): void;
22
+ unPlugAll(): void;
23
+ private checkNameValidity;
24
+ }
25
+ export declare class ForwardOutput extends IONode implements IForwardOutput {
26
+ plugableModule: PolyModule<Module<Connectable, AnyObject>, AnyObject>;
27
+ ioType: IOType.ForwardOutput;
28
+ connections: ForwardInput[];
29
+ constructor(plugableModule: PolyModule<Module<Connectable, AnyObject>, AnyObject>, props: IForwardOutput);
30
+ get subOutputs(): (import("./AudioNode").AudioOutput | import("./MidiNode").MidiOutput)[];
31
+ get subModules(): Module<Connectable, AnyObject>[];
32
+ subModule(voiceNo: number): Module<Connectable, AnyObject>;
33
+ subOutput(voiceNo: number): import("./AudioNode").AudioOutput | import("./MidiNode").MidiOutput;
34
+ plug(io: AnyInput, plugOther?: boolean): void;
35
+ unPlug(io: AnyInput, plugOther?: boolean): void;
36
+ unPlugAll(): void;
37
+ private checkNameValidity;
38
+ }
@@ -0,0 +1,30 @@
1
+ import { AudioModule } from "../Module";
2
+ import { MidiEvent } from "../midi";
3
+ import { ForwardInput, ForwardOutput } from "./ForwardNode";
4
+ import IONode, { IOType, IIONode } from "./Node";
5
+ export interface IMidiInput extends IIONode {
6
+ ioType: IOType.MidiInput;
7
+ onMidiEvent: (event: MidiEvent) => void;
8
+ }
9
+ export interface IMidiOutput extends IIONode {
10
+ ioType: IOType.MidiOutput;
11
+ }
12
+ export declare class MidiInput extends IONode implements IMidiInput {
13
+ ioType: IOType.MidiInput;
14
+ connections: MidiOutput[];
15
+ onMidiEvent: (event: MidiEvent) => void;
16
+ constructor(plugableModule: AudioModule, props: IMidiInput);
17
+ plug(io: MidiOutput | ForwardOutput, plugOther?: boolean): void;
18
+ unPlug(io: MidiOutput | ForwardOutput, plugOther?: boolean): void;
19
+ unPlugAll(): void;
20
+ }
21
+ export declare class MidiOutput extends IONode implements IMidiOutput {
22
+ ioType: IOType.MidiOutput;
23
+ connections: MidiInput[];
24
+ constructor(plugableModule: AudioModule, props: IIONode);
25
+ plug(io: MidiInput | ForwardInput, plugOther?: boolean): void;
26
+ unPlug(io: MidiInput | ForwardOutput, plugOther?: boolean): void;
27
+ unPlugAll(): void;
28
+ onMidiEvent: (event: MidiEvent) => void;
29
+ private get midiConnections();
30
+ }
@@ -0,0 +1,36 @@
1
+ import { AudioModule } from "../Module";
2
+ import { AnyInput, AnyOuput } from ".";
3
+ export interface IIONode {
4
+ name: string;
5
+ ioType: IOType;
6
+ }
7
+ export interface IIOSerialize {
8
+ id: string;
9
+ name: string;
10
+ ioType: IOType;
11
+ moduleId: string;
12
+ moduleName: string;
13
+ }
14
+ export declare enum IOType {
15
+ AudioInput = "audioInput",
16
+ AudioOutput = "audioOutput",
17
+ MidiInput = "midiInput",
18
+ MidiOutput = "midiOutput",
19
+ ForwardInput = "forwardInput",
20
+ ForwardOutput = "forwardOutput"
21
+ }
22
+ export declare function plugCompatibleIO(input: AnyInput, output: AnyOuput): void;
23
+ export declare function unPlugCompatibleIO(input: AnyInput, output: AnyOuput): void;
24
+ export default abstract class IONode implements IIONode {
25
+ id: string;
26
+ ioType: IOType;
27
+ name: string;
28
+ plugableModule: AudioModule;
29
+ connections: IONode[];
30
+ static unPlugAll(io: IONode): void;
31
+ constructor(plugableModule: AudioModule, props: IIONode);
32
+ plug(io: IONode, plugOther?: boolean): void;
33
+ unPlug(io: IONode, plugOther?: boolean): void;
34
+ abstract unPlugAll(): void;
35
+ serialize(): IIOSerialize;
36
+ }
@@ -0,0 +1,12 @@
1
+ import { default as IOCollection } from "./Collection";
2
+ import { IIONode, IOType, IIOSerialize } from "./Node";
3
+ import { AudioInput, AudioOutput, IAudioInput, IAudioOutput } from "./AudioNode";
4
+ import { IMidiInput, IMidiOutput, MidiInput, MidiOutput } from "./MidiNode";
5
+ import { ForwardInput, ForwardOutput, IForwardInput, IForwardOutput } from "./ForwardNode";
6
+ type AnyInput = AudioInput | MidiInput | ForwardInput;
7
+ type AnyOuput = AudioOutput | MidiOutput | ForwardOutput;
8
+ type IAnyInput = IAudioInput | IMidiInput | IForwardInput;
9
+ type IAnyOutput = IAudioOutput | IMidiOutput | IForwardOutput;
10
+ type IAnyIO = IAnyInput | IAnyOutput | IForwardOutput;
11
+ export { IOCollection, IOType, AudioInput, AudioOutput, MidiInput, MidiOutput, ForwardInput, ForwardOutput, };
12
+ export type { IAnyIO, IIONode, IAudioInput, IAudioOutput, IMidiInput, IMidiOutput, IForwardInput, IForwardOutput, IAnyInput, IAnyOutput, IIOSerialize, AnyInput, AnyOuput, };
@@ -0,0 +1,67 @@
1
+ import { InputNode } from "tone";
2
+ import { IOCollection, AudioInput, AudioOutput, MidiInput, IMidiInput, IAudioInput, IAudioOutput, MidiOutput, IMidiOutput } from "../IO";
3
+ import { MidiEvent } from "../../core/midi";
4
+ import { AudioModule } from "./index";
5
+ import Note from "../../core/Note";
6
+ import { AtLeast } from "../../types";
7
+ export interface Startable {
8
+ start(time: number): void;
9
+ stop(time: number): void;
10
+ }
11
+ export interface Connectable {
12
+ connect: (inputNode: InputNode) => void;
13
+ disconnect: (inputNode?: InputNode) => void;
14
+ dispose: () => void;
15
+ }
16
+ export interface Triggerable {
17
+ triggerAttack: (note: Note, triggeredAt: number) => void;
18
+ triggerRelease: (note: Note, triggeredAt: number) => void;
19
+ }
20
+ export interface ModuleInterface<PropsInterface> {
21
+ id: string;
22
+ name: string;
23
+ props: PropsInterface;
24
+ voiceNo?: number;
25
+ }
26
+ export declare class DummnyInternalModule implements Connectable {
27
+ connect(): void;
28
+ disconnect(): void;
29
+ dispose(): void;
30
+ }
31
+ declare abstract class Module<InternalModule extends Connectable, PropsInterface> implements ModuleInterface<PropsInterface> {
32
+ static readonly moduleName: string;
33
+ readonly id: string;
34
+ name: string;
35
+ internalModule: InternalModule;
36
+ inputs: IOCollection<AudioInput | MidiInput>;
37
+ outputs: IOCollection<AudioOutput | MidiOutput>;
38
+ readonly voiceNo?: number;
39
+ updatedAt: Date;
40
+ _props: PropsInterface;
41
+ constructor(internalModule: InternalModule, props: AtLeast<ModuleInterface<PropsInterface>, "name">);
42
+ set props(value: PropsInterface);
43
+ get props(): PropsInterface;
44
+ plug(audioModule: AudioModule, from: string, to: string): void;
45
+ unPlugAll(): void;
46
+ dispose(): void;
47
+ triggerAttack: (note: Note, triggeredAt: number) => void;
48
+ triggerRelease: (note: Note, triggeredAt: number) => void;
49
+ onMidiEvent: (midiEvent: MidiEvent) => void;
50
+ private triggerer;
51
+ serialize(): {
52
+ id: string;
53
+ name: string;
54
+ type: string;
55
+ props: PropsInterface;
56
+ inputs: import("../IO").IIOSerialize[];
57
+ outputs: import("../IO").IIOSerialize[];
58
+ };
59
+ protected registerMidiInput(props: Omit<IMidiInput, "ioType">): MidiInput;
60
+ protected registerAudioInput(props: Omit<IAudioInput, "ioType">): AudioInput;
61
+ protected registerMidiOutput(props: Omit<IMidiOutput, "ioType">): MidiOutput;
62
+ protected registerAudioOutput(props: Omit<IAudioOutput, "ioType">): AudioOutput;
63
+ protected registerBasicOutputs(): void;
64
+ protected registerBasicInputs(): void;
65
+ protected registerDefaultMidiInput(): void;
66
+ }
67
+ export default Module;
@@ -0,0 +1,57 @@
1
+ import { MidiEvent } from "../midi";
2
+ import Module, { Connectable } from "./MonoModule";
3
+ import { IOCollection, ForwardInput, ForwardOutput, IMidiInput, IMidiOutput, IForwardInput, IForwardOutput, MidiOutput, MidiInput } from "../IO";
4
+ import { AudioModule } from "./index";
5
+ interface PolyModuleInterface<MonoAudioModule, PropsInterface> {
6
+ id?: string;
7
+ name: string;
8
+ child: new (params: {
9
+ id?: string;
10
+ name: string;
11
+ props: PropsInterface;
12
+ }) => MonoAudioModule;
13
+ props: PropsInterface;
14
+ }
15
+ export default abstract class PolyModule<MonoAudioModule extends Module<Connectable, PropsInterface>, PropsInterface> {
16
+ static readonly moduleName: string;
17
+ readonly id: string;
18
+ readonly child: new (params: {
19
+ id?: string;
20
+ name: string;
21
+ props: PropsInterface;
22
+ }) => MonoAudioModule;
23
+ _name: string;
24
+ audioModules: MonoAudioModule[];
25
+ inputs: IOCollection<ForwardInput | MidiInput>;
26
+ outputs: IOCollection<ForwardOutput | MidiOutput>;
27
+ private _numberOfVoices;
28
+ constructor(params: PolyModuleInterface<MonoAudioModule, PropsInterface>);
29
+ get name(): string;
30
+ set name(value: string);
31
+ get props(): PropsInterface;
32
+ set props(value: PropsInterface);
33
+ get numberOfVoices(): number;
34
+ set numberOfVoices(value: number);
35
+ plug(audioModule: AudioModule, from: string, to: string): void;
36
+ unPlugAll(): void;
37
+ dispose(): void;
38
+ onMidiEvent: (midiEvent: MidiEvent) => void;
39
+ serialize(): {
40
+ id: string;
41
+ type: string;
42
+ inputs: import("../IO").IIOSerialize[];
43
+ outputs: import("../IO").IIOSerialize[];
44
+ name: string;
45
+ props: PropsInterface;
46
+ };
47
+ protected find(callback: (audioModule: MonoAudioModule) => boolean): MonoAudioModule;
48
+ protected findVoice(voiceNo: number): MonoAudioModule | undefined;
49
+ protected registerInput(props: Omit<IForwardInput, "ioType">): ForwardInput;
50
+ protected registerOutput(props: Omit<IForwardOutput, "ioType">): ForwardOutput;
51
+ protected registerMidiInput(props: Omit<IMidiInput, "ioType">): MidiInput;
52
+ protected registerMidiOutput(props: Omit<IMidiOutput, "ioType">): MidiOutput;
53
+ protected registerBasicOutputs(): void;
54
+ protected registerBasicInputs(): void;
55
+ private adjustNumberOfModules;
56
+ }
57
+ export {};
@@ -0,0 +1,6 @@
1
+ import Module, { Connectable } from "./MonoModule";
2
+ import PolyModule from "./PolyModule";
3
+ export { default, DummnyInternalModule } from "./MonoModule";
4
+ export { default as PolyModule } from "./PolyModule";
5
+ export type { ModuleInterface, Connectable, Triggerable, Startable, } from "./MonoModule";
6
+ export type AudioModule = Module<Connectable, any> | PolyModule<Module<Connectable, any>, any>;
@@ -15,6 +15,9 @@ export default class Note {
15
15
  static notes(octave?: number): Note[];
16
16
  get isSemi(): boolean;
17
17
  get fullName(): string;
18
+ midiData(noteOn?: boolean): Uint8Array;
19
+ get midiNumber(): number;
20
+ get noteIndex(): number;
18
21
  adjustFrequency(range?: number, coarse?: number): number;
19
22
  valueOf(): string;
20
23
  serialize(): INote;
@@ -4,7 +4,7 @@ export interface MidiDeviceInterface {
4
4
  name: string;
5
5
  state: string;
6
6
  }
7
- export declare type EventListerCallback = (event: MidiEvent) => void;
7
+ export type EventListerCallback = (event: MidiEvent) => void;
8
8
  export default class MidiDevice implements MidiDeviceInterface {
9
9
  id: string;
10
10
  name: string;
@@ -0,0 +1,21 @@
1
+ import { ISequence } from "../../modules";
2
+ import Note, { INote } from "../Note";
3
+ export type MidiEventType = "noteOn" | "noteOff" | "cc";
4
+ export default class MidiEvent {
5
+ note: Note;
6
+ voiceNo?: number;
7
+ readonly triggeredAt: number;
8
+ _type: MidiEventType;
9
+ private data;
10
+ private event;
11
+ static fromSequence(sequence: ISequence, triggeredAt: number): MidiEvent[];
12
+ static fromNote(noteName: string | Note | INote, noteOn?: boolean, triggeredAt?: number): MidiEvent;
13
+ static fromCC(cc: number, value: number, triggeredAt?: number): MidiEvent;
14
+ constructor(event: MIDIMessageEvent, triggeredAt?: number);
15
+ get statusByte(): number;
16
+ get firstData(): number;
17
+ get secondData(): number;
18
+ get type(): MidiEventType;
19
+ get isNote(): boolean;
20
+ defineNotes(): void;
21
+ }
@@ -0,0 +1,5 @@
1
+ export { default as MidiEvent } from "./MidiEvent";
2
+ export { default as MidiDevice } from "./MidiDevice";
3
+ export { default as MidiDeviceManager } from "./MidiDeviceManager";
4
+ export type { MidiDeviceInterface } from "./MidiDevice";
5
+ export type { MidiEventType } from "./MidiEvent";
@@ -0,0 +1,9 @@
1
+ export { default } from "./Engine";
2
+ export { MidiDevice, MidiDeviceManager } from "./core/midi";
3
+ export { default as Note } from "./core/Note";
4
+ export type { MidiDeviceInterface } from "./core/midi";
5
+ export type { INote } from "./core/Note";
6
+ export type { ModuleInterface, AudioModule } from "./core/Module";
7
+ export type { ISequence } from "./modules";
8
+ export type { RouteInterface, RouteProps } from "./routes";
9
+ export type { IIOSerialize as IOProps } from "./core/IO";
@@ -5,7 +5,11 @@ interface BitCrusherInterface extends EffectInterface {
5
5
  }
6
6
  export default class BitCrusher extends Effect<InternalBitCrasher, BitCrusherInterface> {
7
7
  static moduleName: string;
8
- constructor(name: string, props: Partial<BitCrusherInterface>);
8
+ constructor(params: {
9
+ id?: string;
10
+ name: string;
11
+ props: Partial<BitCrusherInterface>;
12
+ });
9
13
  get bits(): number;
10
14
  set bits(value: number);
11
15
  }
@@ -6,7 +6,11 @@ interface DelayInterface extends EffectInterface {
6
6
  }
7
7
  export default class Delay extends Effect<FeedbackDelay, DelayInterface> {
8
8
  static moduleName: string;
9
- constructor(name: string, props: Partial<DelayInterface>);
9
+ constructor(params: {
10
+ id?: string;
11
+ name: string;
12
+ props: Partial<DelayInterface>;
13
+ });
10
14
  get delayTime(): number;
11
15
  set delayTime(value: number);
12
16
  get feedback(): number;
@@ -5,7 +5,11 @@ interface DistortionInterface extends EffectInterface {
5
5
  }
6
6
  export default class Distortion extends Effect<InternalDistortion, DistortionInterface> {
7
7
  static moduleName: string;
8
- constructor(name: string, props: Partial<DistortionInterface>);
8
+ constructor(params: {
9
+ id?: string;
10
+ name: string;
11
+ props: Partial<DistortionInterface>;
12
+ });
9
13
  get drive(): number;
10
14
  set drive(value: number);
11
15
  }
@@ -1,5 +1,5 @@
1
1
  import { Signal } from "tone";
2
- import Module, { Connectable } from "./Base";
2
+ import Module, { Connectable } from "../core/Module";
3
3
  interface EffectLike extends Connectable {
4
4
  wet: Signal<"normalRange">;
5
5
  }
@@ -7,7 +7,12 @@ export interface EffectInterface {
7
7
  wet: number;
8
8
  }
9
9
  export default abstract class Effect<InternalEffect extends EffectLike, ModuleInterface extends EffectInterface> extends Module<InternalEffect, ModuleInterface> {
10
- constructor(name: string, internalModule: InternalEffect, props: Partial<ModuleInterface>);
10
+ constructor(params: {
11
+ id?: string;
12
+ name: string;
13
+ internalModule: InternalEffect;
14
+ props: Partial<ModuleInterface>;
15
+ });
11
16
  get wet(): number;
12
17
  set wet(value: number);
13
18
  }
@@ -1,10 +1,18 @@
1
1
  import { AmplitudeEnvelope } from "tone";
2
2
  import Base, { EnvelopeInterface, PolyBase } from "./Base";
3
3
  declare class MonoAmpEnvelope extends Base<AmplitudeEnvelope> {
4
- constructor(name: string, props: EnvelopeInterface);
4
+ constructor(params: {
5
+ id?: string;
6
+ name: string;
7
+ props: EnvelopeInterface;
8
+ });
5
9
  }
6
10
  export default class AmpEnvelope extends PolyBase<MonoAmpEnvelope> {
7
11
  static moduleName: string;
8
- constructor(name: string, props: Partial<EnvelopeInterface>);
12
+ constructor(params: {
13
+ id?: string;
14
+ name: string;
15
+ props: Partial<EnvelopeInterface>;
16
+ });
9
17
  }
10
18
  export {};
@@ -1,24 +1,27 @@
1
1
  import { Envelope as Env } from "tone";
2
- import Module, { Connectable, Triggerable, Voicable } from "../Base";
3
- import PolyModule from "../PolyModule";
4
- import Note from "../../Note";
2
+ import Module, { PolyModule, Connectable, Triggerable } from "../../core/Module";
3
+ import Note from "../../core/Note";
5
4
  export declare const enum EnvelopeStages {
6
5
  Attack = "attack",
7
6
  Decay = "decay",
8
7
  Sustain = "sustain",
9
8
  Release = "release"
10
9
  }
11
- export interface EnvelopeInterface extends Voicable {
10
+ export interface EnvelopeInterface {
12
11
  attack: number;
13
12
  decay: number;
14
13
  sustain: number;
15
14
  release: number;
16
- voiceNo?: number;
17
15
  }
18
16
  export default abstract class EnvelopeModule<EnvelopeLike extends Env> extends Module<EnvelopeLike, EnvelopeInterface> implements Triggerable {
19
17
  activeNote?: string;
20
18
  triggeredAt: number;
21
- constructor(name: string, internalModule: EnvelopeLike, props: EnvelopeInterface);
19
+ constructor(params: {
20
+ id?: string;
21
+ name: string;
22
+ internalModule: EnvelopeLike;
23
+ props: EnvelopeInterface;
24
+ });
22
25
  get attack(): number;
23
26
  set attack(value: number);
24
27
  get decay(): number;
@@ -33,15 +36,31 @@ export default abstract class EnvelopeModule<EnvelopeLike extends Env> extends M
33
36
  private maxTime;
34
37
  private minTime;
35
38
  }
36
- export declare abstract class PolyBase<EnvelopeModule extends Module<Connectable, any>> extends PolyModule<EnvelopeModule, EnvelopeInterface> {
37
- constructor(name: string, child: new (name: string, props: EnvelopeInterface) => EnvelopeModule, props: Partial<EnvelopeInterface>);
38
- private registerInputs;
39
+ export declare abstract class PolyBase<EnvelopeModule extends Module<Connectable, EnvelopeInterface>> extends PolyModule<EnvelopeModule, EnvelopeInterface> {
40
+ constructor(params: {
41
+ id?: string;
42
+ name: string;
43
+ child: new (params: {
44
+ id?: string;
45
+ name: string;
46
+ props: EnvelopeInterface;
47
+ }) => EnvelopeModule;
48
+ props: Partial<EnvelopeInterface>;
49
+ });
39
50
  }
40
51
  declare class MonoEnvelope extends EnvelopeModule<Env> {
41
- constructor(name: string, props: EnvelopeInterface);
52
+ constructor(params: {
53
+ id?: string;
54
+ name: string;
55
+ props: EnvelopeInterface;
56
+ });
42
57
  }
43
58
  export declare class Envelope extends PolyBase<MonoEnvelope> {
44
59
  static moduleName: string;
45
- constructor(name: string, props: Partial<EnvelopeInterface>);
60
+ constructor(params: {
61
+ id?: string;
62
+ name: string;
63
+ props: Partial<EnvelopeInterface>;
64
+ });
46
65
  }
47
66
  export {};
@@ -5,7 +5,11 @@ export declare class MonoFreqEnvelope extends Base<FrequencyEnvelope> {
5
5
  private _frequency;
6
6
  private _amount;
7
7
  filter: Filter;
8
- constructor(name: string, props: EnvelopeInterface);
8
+ constructor(params: {
9
+ id?: string;
10
+ name: string;
11
+ props: EnvelopeInterface;
12
+ });
9
13
  get frequency(): number;
10
14
  set frequency(value: number);
11
15
  get amount(): number;
@@ -13,6 +17,9 @@ export declare class MonoFreqEnvelope extends Base<FrequencyEnvelope> {
13
17
  }
14
18
  export default class FreqEnvelope extends PolyBase<MonoFreqEnvelope> {
15
19
  static moduleName: string;
16
- constructor(name: string, props: Partial<EnvelopeInterface>);
17
- protected registerOutputs(): void;
20
+ constructor(params: {
21
+ id?: string;
22
+ name: string;
23
+ props: Partial<EnvelopeInterface>;
24
+ });
18
25
  }