@blibliki/engine 0.1.0

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 (91) hide show
  1. package/README.md +4 -0
  2. package/build/Engine.d.ts +114 -0
  3. package/build/Engine.js +81 -0
  4. package/build/Engine.js.map +1 -0
  5. package/build/MidiDevice.d.ts +25 -0
  6. package/build/MidiDevice.js +45 -0
  7. package/build/MidiDevice.js.map +1 -0
  8. package/build/MidiDeviceManager.d.ts +12 -0
  9. package/build/MidiDeviceManager.js +45 -0
  10. package/build/MidiDeviceManager.js.map +1 -0
  11. package/build/MidiEvent.d.ts +12 -0
  12. package/build/MidiEvent.js +37 -0
  13. package/build/MidiEvent.js.map +1 -0
  14. package/build/Module/Base.d.ts +72 -0
  15. package/build/Module/Base.js +139 -0
  16. package/build/Module/Base.js.map +1 -0
  17. package/build/Module/Envelope/AmpEnvelope.d.ts +8 -0
  18. package/build/Module/Envelope/AmpEnvelope.js +15 -0
  19. package/build/Module/Envelope/AmpEnvelope.js.map +1 -0
  20. package/build/Module/Envelope/Base.d.ts +45 -0
  21. package/build/Module/Envelope/Base.js +110 -0
  22. package/build/Module/Envelope/Base.js.map +1 -0
  23. package/build/Module/Envelope/FreqEnvelope.d.ts +17 -0
  24. package/build/Module/Envelope/FreqEnvelope.js +51 -0
  25. package/build/Module/Envelope/FreqEnvelope.js.map +1 -0
  26. package/build/Module/Envelope/index.d.ts +3 -0
  27. package/build/Module/Envelope/index.js +4 -0
  28. package/build/Module/Envelope/index.js.map +1 -0
  29. package/build/Module/Filter.d.ts +31 -0
  30. package/build/Module/Filter.js +83 -0
  31. package/build/Module/Filter.js.map +1 -0
  32. package/build/Module/IO.d.ts +39 -0
  33. package/build/Module/IO.js +59 -0
  34. package/build/Module/IO.js.map +1 -0
  35. package/build/Module/Master.d.ts +7 -0
  36. package/build/Module/Master.js +12 -0
  37. package/build/Module/Master.js.map +1 -0
  38. package/build/Module/MidiSelector.d.ts +16 -0
  39. package/build/Module/MidiSelector.js +44 -0
  40. package/build/Module/MidiSelector.js.map +1 -0
  41. package/build/Module/Oscillator.d.ts +42 -0
  42. package/build/Module/Oscillator.js +123 -0
  43. package/build/Module/Oscillator.js.map +1 -0
  44. package/build/Module/PolyModule.d.ts +57 -0
  45. package/build/Module/PolyModule.js +191 -0
  46. package/build/Module/PolyModule.js.map +1 -0
  47. package/build/Module/VoiceScheduler.d.ts +37 -0
  48. package/build/Module/VoiceScheduler.js +117 -0
  49. package/build/Module/VoiceScheduler.js.map +1 -0
  50. package/build/Module/Volume.d.ts +15 -0
  51. package/build/Module/Volume.js +34 -0
  52. package/build/Module/Volume.js.map +1 -0
  53. package/build/Module/index.d.ts +20 -0
  54. package/build/Module/index.js +60 -0
  55. package/build/Module/index.js.map +1 -0
  56. package/build/Note/frequencyTable.d.ts +4 -0
  57. package/build/Note/frequencyTable.js +146 -0
  58. package/build/Note/frequencyTable.js.map +1 -0
  59. package/build/Note/index.d.ts +13 -0
  60. package/build/Note/index.js +53 -0
  61. package/build/Note/index.js.map +1 -0
  62. package/build/index.d.ts +8 -0
  63. package/build/index.js +6 -0
  64. package/build/index.js.map +1 -0
  65. package/build/routes.d.ts +17 -0
  66. package/build/routes.js +23 -0
  67. package/build/routes.js.map +1 -0
  68. package/package.json +37 -0
  69. package/src/Engine.ts +129 -0
  70. package/src/MidiDevice.ts +67 -0
  71. package/src/MidiDeviceManager.ts +61 -0
  72. package/src/MidiEvent.ts +44 -0
  73. package/src/Module/Base.ts +200 -0
  74. package/src/Module/Envelope/AmpEnvelope.ts +17 -0
  75. package/src/Module/Envelope/Base.ts +159 -0
  76. package/src/Module/Envelope/FreqEnvelope.ts +69 -0
  77. package/src/Module/Envelope/index.ts +3 -0
  78. package/src/Module/Filter.ts +111 -0
  79. package/src/Module/IO.ts +85 -0
  80. package/src/Module/Master.ts +18 -0
  81. package/src/Module/MidiSelector.ts +64 -0
  82. package/src/Module/Oscillator.ts +166 -0
  83. package/src/Module/PolyModule.ts +243 -0
  84. package/src/Module/VoiceScheduler.ts +153 -0
  85. package/src/Module/Volume.ts +46 -0
  86. package/src/Module/index.ts +78 -0
  87. package/src/Note/frequencyTable.ts +146 -0
  88. package/src/Note/index.ts +65 -0
  89. package/src/index.ts +10 -0
  90. package/src/routes.ts +41 -0
  91. package/tsconfig.json +22 -0
package/README.md ADDED
@@ -0,0 +1,4 @@
1
+ # Blibliki Engine
2
+ This is an engine for making synth systems.
3
+
4
+ More info and documentation soon!
@@ -0,0 +1,114 @@
1
+ import { ModuleType } from "./Module";
2
+ import { AudioModule } from "./Module";
3
+ import { RouteInterface, RouteProps } from "./routes";
4
+ declare type LatencyHint = "interactive" | "playback" | "balanced";
5
+ interface ContextInterface {
6
+ latencyHint: LatencyHint;
7
+ lookAhead: number;
8
+ }
9
+ interface InitializeInterface {
10
+ context?: Partial<ContextInterface>;
11
+ }
12
+ declare class Engine {
13
+ private static instance;
14
+ private _master;
15
+ private context;
16
+ modules: {
17
+ [Identifier: string]: AudioModule;
18
+ };
19
+ routes: {
20
+ [Identifier: string]: RouteInterface;
21
+ };
22
+ private constructor();
23
+ static getInstance(): Engine;
24
+ initialize(props: InitializeInterface): {
25
+ master: {
26
+ id: string;
27
+ name: string;
28
+ type: ModuleType;
29
+ props: any;
30
+ inputs: import(".").IOProps[];
31
+ outputs: import(".").IOProps[];
32
+ } | {
33
+ id: string;
34
+ type: import("./Module").PolyModuleType;
35
+ inputs: import(".").IOProps[];
36
+ outputs: import(".").IOProps[];
37
+ name: string;
38
+ props: any;
39
+ };
40
+ };
41
+ registerModule(name: string, type: string, props?: any): {
42
+ id: string;
43
+ name: string;
44
+ type: ModuleType;
45
+ props: any;
46
+ inputs: import(".").IOProps[];
47
+ outputs: import(".").IOProps[];
48
+ } | {
49
+ id: string;
50
+ type: import("./Module").PolyModuleType;
51
+ inputs: import(".").IOProps[];
52
+ outputs: import(".").IOProps[];
53
+ name: string;
54
+ props: any;
55
+ };
56
+ updateNameModule(id: string, name: string): {
57
+ id: string;
58
+ name: string;
59
+ type: ModuleType;
60
+ props: any;
61
+ inputs: import(".").IOProps[];
62
+ outputs: import(".").IOProps[];
63
+ } | {
64
+ id: string;
65
+ type: import("./Module").PolyModuleType;
66
+ inputs: import(".").IOProps[];
67
+ outputs: import(".").IOProps[];
68
+ name: string;
69
+ props: any;
70
+ };
71
+ updatePropsModule(id: string, props: any): {
72
+ id: string;
73
+ name: string;
74
+ type: ModuleType;
75
+ props: any;
76
+ inputs: import(".").IOProps[];
77
+ outputs: import(".").IOProps[];
78
+ } | {
79
+ id: string;
80
+ type: import("./Module").PolyModuleType;
81
+ inputs: import(".").IOProps[];
82
+ outputs: import(".").IOProps[];
83
+ name: string;
84
+ props: any;
85
+ };
86
+ addRoute(props: RouteProps): {
87
+ id: string;
88
+ sourceId: string;
89
+ outputName: string;
90
+ destinationId: string;
91
+ inputName: string;
92
+ };
93
+ removeRoute(route: RouteInterface): void;
94
+ get master(): {
95
+ id: string;
96
+ name: string;
97
+ type: ModuleType;
98
+ props: any;
99
+ inputs: import(".").IOProps[];
100
+ outputs: import(".").IOProps[];
101
+ } | {
102
+ id: string;
103
+ type: import("./Module").PolyModuleType;
104
+ inputs: import(".").IOProps[];
105
+ outputs: import(".").IOProps[];
106
+ name: string;
107
+ props: any;
108
+ };
109
+ triggerKey(noteName: string, type: string): void;
110
+ dispose(): void;
111
+ findById(id: string): AudioModule;
112
+ }
113
+ declare const _default: Engine;
114
+ export default _default;
@@ -0,0 +1,81 @@
1
+ import { Context, setContext } from "tone";
2
+ import { ModuleType } from "./Module";
3
+ import { createModule } from "./Module";
4
+ import VoiceScheduler from "./Module/VoiceScheduler";
5
+ import { applyRoutes, createRoute } from "./routes";
6
+ class Engine {
7
+ static instance;
8
+ _master;
9
+ context;
10
+ modules;
11
+ routes;
12
+ constructor() {
13
+ this.modules = {};
14
+ this.routes = {};
15
+ }
16
+ static getInstance() {
17
+ if (!Engine.instance) {
18
+ Engine.instance = new Engine();
19
+ }
20
+ return Engine.instance;
21
+ }
22
+ initialize(props) {
23
+ this.context = new Context(props.context);
24
+ setContext(this.context);
25
+ this.context.transport.start();
26
+ return {
27
+ master: this.master,
28
+ };
29
+ }
30
+ registerModule(name, type, props = {}) {
31
+ const audioModule = createModule(name, type, props);
32
+ this.modules[audioModule.id] = audioModule;
33
+ applyRoutes(Object.values(this.routes));
34
+ return audioModule.serialize();
35
+ }
36
+ updateNameModule(id, name) {
37
+ const audioModule = this.findById(id);
38
+ audioModule.name = name;
39
+ return audioModule.serialize();
40
+ }
41
+ updatePropsModule(id, props) {
42
+ const audioModule = this.findById(id);
43
+ const polyNumber = audioModule instanceof VoiceScheduler && audioModule.polyNumber;
44
+ audioModule.props = props;
45
+ const { polyNumber: newPolyNumber } = props;
46
+ if (polyNumber !== newPolyNumber)
47
+ applyRoutes(Object.values(this.routes));
48
+ return audioModule.serialize();
49
+ }
50
+ addRoute(props) {
51
+ const route = createRoute(props);
52
+ const newRoutes = { ...this.routes, [route.id]: route };
53
+ applyRoutes(Object.values(newRoutes));
54
+ this.routes = newRoutes;
55
+ return route;
56
+ }
57
+ removeRoute(route) {
58
+ delete this.routes[route.id];
59
+ applyRoutes(Object.values(this.routes));
60
+ }
61
+ get master() {
62
+ if (this._master)
63
+ return this._master.serialize();
64
+ const masterProps = this.registerModule("Master", "master", ModuleType.Master);
65
+ this._master = this.modules[masterProps.id];
66
+ return masterProps;
67
+ }
68
+ triggerKey(noteName, type) { }
69
+ dispose() {
70
+ Object.values(this.modules).forEach((m) => m.dispose());
71
+ this.modules = {};
72
+ }
73
+ findById(id) {
74
+ const audioModule = this.modules[id];
75
+ if (!audioModule)
76
+ throw Error(`Audio module with id ${id} not exists`);
77
+ return audioModule;
78
+ }
79
+ }
80
+ export default Engine.getInstance();
81
+ //# sourceMappingURL=Engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Engine.js","sourceRoot":"","sources":["../src/Engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import MidiEvent from "./MidiEvent";
2
+ export interface MidiDeviceInterface {
3
+ id: string;
4
+ name: string;
5
+ state: string;
6
+ }
7
+ export declare type EventListerCallback = (event: MidiEvent) => void;
8
+ export default class MidiDevice implements MidiDeviceInterface {
9
+ id: string;
10
+ name: string;
11
+ state: string;
12
+ eventListerCallbacks: EventListerCallback[];
13
+ private _midi;
14
+ constructor(midi: MIDIInput);
15
+ connect(): void;
16
+ disconnect(): void;
17
+ serialize(): {
18
+ id: string;
19
+ name: string;
20
+ state: string;
21
+ };
22
+ addEventListener(callback: EventListerCallback): void;
23
+ removeEventListener(callback: EventListerCallback): void;
24
+ _processEvent(e: MIDIMessageEvent): void;
25
+ }
@@ -0,0 +1,45 @@
1
+ import MidiEvent from "./MidiEvent";
2
+ export default class MidiDevice {
3
+ id;
4
+ name;
5
+ state;
6
+ eventListerCallbacks = [];
7
+ _midi;
8
+ constructor(midi) {
9
+ this.id = midi.id;
10
+ this.name = midi.name || `Device ${midi.id}`;
11
+ this.state = midi.state;
12
+ this._midi = midi;
13
+ this.connect();
14
+ }
15
+ connect() {
16
+ this._midi.onmidimessage = (e) => {
17
+ const isMidiEvent = e instanceof MIDIMessageEvent;
18
+ if (!isMidiEvent)
19
+ return;
20
+ this._processEvent(e);
21
+ };
22
+ }
23
+ disconnect() {
24
+ this._midi.onmidimessage = null;
25
+ }
26
+ serialize() {
27
+ const { id, name, state } = this;
28
+ return { id, name, state };
29
+ }
30
+ addEventListener(callback) {
31
+ this.eventListerCallbacks.push(callback);
32
+ }
33
+ removeEventListener(callback) {
34
+ this.eventListerCallbacks = this.eventListerCallbacks.filter((c) => c === callback);
35
+ }
36
+ _processEvent(e) {
37
+ const event = new MidiEvent(e);
38
+ switch (event.type) {
39
+ case "noteOn":
40
+ case "noteOff":
41
+ this.eventListerCallbacks.forEach((callback) => callback(event));
42
+ }
43
+ }
44
+ }
45
+ //# sourceMappingURL=MidiDevice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MidiDevice.js","sourceRoot":"","sources":["../src/MidiDevice.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,aAAa,CAAC;AAUpC,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B,EAAE,CAAS;IACX,IAAI,CAAS;IACb,KAAK,CAAS;IACd,oBAAoB,GAA0B,EAAE,CAAC;IAEzC,KAAK,CAAY;IAEzB,YAAY,IAAe;QACzB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,UAAU,IAAI,CAAC,EAAE,EAAE,CAAC;QAC7C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,EAAE;YAC/B,MAAM,WAAW,GAAG,CAAC,YAAY,gBAAgB,CAAC;YAElD,IAAI,CAAC,WAAW;gBAAE,OAAO;YAEzB,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC,CAAC;IACJ,CAAC;IAED,UAAU;QACR,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;IAClC,CAAC;IAED,SAAS;QACP,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAEjC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED,gBAAgB,CAAC,QAA6B;QAC5C,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED,mBAAmB,CAAC,QAA6B;QAC/C,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAC1D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CACtB,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,CAAmB;QAC/B,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;QAE/B,QAAQ,KAAK,CAAC,IAAI,EAAE;YAClB,KAAK,QAAQ,CAAC;YACd,KAAK,SAAS;gBACZ,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;SACpE;IACH,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import MidiDevice from "./MidiDevice";
2
+ declare class MidiDeviceManager {
3
+ private devices;
4
+ private static instance;
5
+ static getInstance(): MidiDeviceManager;
6
+ fetchDevices(): Promise<MidiDevice[]>;
7
+ find(id: string): Promise<MidiDevice>;
8
+ _inputs(): Promise<MIDIInput[]>;
9
+ onStateChange(callback: Function): Promise<void>;
10
+ }
11
+ declare const _default: MidiDeviceManager;
12
+ export default _default;
@@ -0,0 +1,45 @@
1
+ import MidiDevice from "./MidiDevice";
2
+ class MidiDeviceManager {
3
+ devices;
4
+ static instance;
5
+ static getInstance() {
6
+ if (!MidiDeviceManager.instance) {
7
+ MidiDeviceManager.instance = new MidiDeviceManager();
8
+ }
9
+ return MidiDeviceManager.instance;
10
+ }
11
+ async fetchDevices() {
12
+ if (this.devices)
13
+ return this.devices;
14
+ this.devices = (await this._inputs()).map((input) => new MidiDevice(input));
15
+ return this.devices;
16
+ }
17
+ async find(id) {
18
+ const device = (await this.fetchDevices()).find((dev) => dev.id === id);
19
+ if (!device)
20
+ throw Error(`Midie device with id ${id} not found`);
21
+ return device;
22
+ }
23
+ async _inputs() {
24
+ const inputs = [];
25
+ const access = await navigator.requestMIDIAccess();
26
+ access.inputs.forEach((input) => inputs.push(input));
27
+ return inputs;
28
+ }
29
+ async onStateChange(callback) {
30
+ const access = await navigator.requestMIDIAccess();
31
+ await this.fetchDevices();
32
+ access.onstatechange = (e) => {
33
+ const isMidiEvent = e instanceof MIDIConnectionEvent;
34
+ if (!isMidiEvent)
35
+ return;
36
+ if (e.port instanceof MIDIOutput)
37
+ return;
38
+ const input = e.port;
39
+ const midi = new MidiDevice(input);
40
+ callback(midi);
41
+ };
42
+ }
43
+ }
44
+ export default MidiDeviceManager.getInstance();
45
+ //# sourceMappingURL=MidiDeviceManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MidiDeviceManager.js","sourceRoot":"","sources":["../src/MidiDeviceManager.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,MAAM,iBAAiB;IACb,OAAO,CAAoB;IAC3B,MAAM,CAAC,QAAQ,CAAoB;IAEpC,MAAM,CAAC,WAAW;QACvB,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE;YAC/B,iBAAiB,CAAC,QAAQ,GAAG,IAAI,iBAAiB,EAAE,CAAC;SACtD;QAED,OAAO,iBAAiB,CAAC,QAAQ,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC;QAEtC,IAAI,CAAC,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QAE5E,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAU;QACnB,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAC7C,CAAC,GAAe,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CACnC,CAAC;QAEF,IAAI,CAAC,MAAM;YAAE,MAAM,KAAK,CAAC,wBAAwB,EAAE,YAAY,CAAC,CAAC;QAEjE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,MAAM,GAAqB,EAAE,CAAC;QAEpC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,iBAAiB,EAAE,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAErD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAkB;QACpC,MAAM,MAAM,GAAe,MAAM,SAAS,CAAC,iBAAiB,EAAE,CAAC;QAC/D,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAE1B,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,EAAE;YAC3B,MAAM,WAAW,GAAG,CAAC,YAAY,mBAAmB,CAAC;YAErD,IAAI,CAAC,WAAW;gBAAE,OAAO;YACzB,IAAI,CAAC,CAAC,IAAI,YAAY,UAAU;gBAAE,OAAO;YAEzC,MAAM,KAAK,GAAG,CAAC,CAAC,IAAiB,CAAC;YAElC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;YAEnC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC,CAAC;IACJ,CAAC;CACF;AAED,eAAe,iBAAiB,CAAC,WAAW,EAAE,CAAC"}
@@ -0,0 +1,12 @@
1
+ import Note from "./Note";
2
+ export default class MidiEvent {
3
+ note?: Note;
4
+ triggeredAt: number;
5
+ private data;
6
+ private _type;
7
+ private _event;
8
+ constructor(event: MIDIMessageEvent);
9
+ get type(): string;
10
+ get isNote(): boolean;
11
+ defineNote(): void;
12
+ }
@@ -0,0 +1,37 @@
1
+ import { now } from "tone";
2
+ import Note from "./Note";
3
+ const EvenType = {
4
+ 8: "noteOff",
5
+ 9: "noteOn",
6
+ };
7
+ export default class MidiEvent {
8
+ note;
9
+ triggeredAt;
10
+ data;
11
+ _type;
12
+ _event;
13
+ constructor(event) {
14
+ this._event = event;
15
+ this.triggeredAt = now();
16
+ this.data = event.data;
17
+ this.defineNote();
18
+ }
19
+ get type() {
20
+ if (this._type)
21
+ return this._type;
22
+ let type = EvenType[this.data[0] >> 4];
23
+ if (type === "noteOn" && this.data[2] === 0) {
24
+ type = "noteOff";
25
+ }
26
+ return (this._type = type);
27
+ }
28
+ get isNote() {
29
+ return this.type === "noteOn" || this.type === "noteOff";
30
+ }
31
+ defineNote() {
32
+ if (!this.isNote)
33
+ return;
34
+ this.note = new Note(this._event);
35
+ }
36
+ }
37
+ //# sourceMappingURL=MidiEvent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MidiEvent.js","sourceRoot":"","sources":["../src/MidiEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAC3B,OAAO,IAAI,MAAM,QAAQ,CAAC;AAE1B,MAAM,QAAQ,GAA8B;IAC1C,CAAC,EAAE,SAAS;IACZ,CAAC,EAAE,QAAQ;CACZ,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,SAAS;IAC5B,IAAI,CAAQ;IACZ,WAAW,CAAS;IACZ,IAAI,CAAa;IACjB,KAAK,CAAS;IACd,MAAM,CAAmB;IAEjC,YAAY,KAAuB;QACjC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,WAAW,GAAG,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,IAAI,IAAI;QACN,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QAElC,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAEvC,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;YAC3C,IAAI,GAAG,SAAS,CAAC;SAClB;QAED,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;IAC3D,CAAC;IAED,UAAU;QACR,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEzB,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;CACF"}
@@ -0,0 +1,72 @@
1
+ import { InputNode } from "tone";
2
+ import { Input, Output, IOInterface } from "./IO";
3
+ import MidiEvent from "../MidiEvent";
4
+ import { AudioModule } from "../Module";
5
+ export declare enum ModuleType {
6
+ Oscillator = "monoOscillator",
7
+ Envelope = "monoEnvelope",
8
+ AmpEnvelope = "monoAmpEnvelope",
9
+ FreqEnvelope = "monoFreqEnvelope",
10
+ Filter = "monoFilter",
11
+ Master = "master",
12
+ Voice = "voice",
13
+ MidiSelector = "midiSelector",
14
+ Volume = "monoVolume"
15
+ }
16
+ export interface Connectable {
17
+ connect: (inputNode: InputNode) => void;
18
+ disconnect: (inputNode?: InputNode) => void;
19
+ dispose: () => void;
20
+ }
21
+ export interface Triggerable {
22
+ triggerAttack: Function;
23
+ triggerRelease: Function;
24
+ }
25
+ export interface ModuleInterface {
26
+ name: string;
27
+ type: ModuleType;
28
+ props?: {
29
+ [key: string]: any;
30
+ };
31
+ voiceNo?: number;
32
+ }
33
+ export declare class DummnyInternalModule implements Connectable {
34
+ connect(inputNode: InputNode): void;
35
+ disconnect(inputNode?: InputNode): void;
36
+ dispose(): void;
37
+ }
38
+ declare class Module<InternalModule extends Connectable, PropsInterface> implements ModuleInterface {
39
+ internalModule: InternalModule;
40
+ readonly id: string;
41
+ name: string;
42
+ inputs: Input[];
43
+ outputs: Output[];
44
+ type: ModuleType;
45
+ readonly voiceNo?: number;
46
+ updatedAt: Date;
47
+ _props: PropsInterface;
48
+ constructor(internalModule: InternalModule, props: Partial<ModuleInterface>);
49
+ set props(value: PropsInterface);
50
+ get props(): PropsInterface;
51
+ plug(audioModule: AudioModule, from: string, to: string): void;
52
+ unplugAll(): void;
53
+ connect: (inputAudioModule: AudioModule, attribute?: string) => void;
54
+ disconnect: (inputAudioModule: AudioModule, attribute?: string) => void;
55
+ dispose(): void;
56
+ triggerAttack(midiEvent: MidiEvent): void;
57
+ triggerRelease(midiEvent: MidiEvent): void;
58
+ midiTriggered: (midiEvent: MidiEvent) => void;
59
+ serialize(): {
60
+ id: string;
61
+ name: string;
62
+ type: ModuleType;
63
+ props: PropsInterface;
64
+ inputs: import("./IO").SerializeInterface[];
65
+ outputs: import("./IO").SerializeInterface[];
66
+ };
67
+ protected registerInput(props: IOInterface): Input;
68
+ protected registerOutput(props: IOInterface): Output;
69
+ protected registerBasicOutputs(): void;
70
+ protected registerBasicInputs(): void;
71
+ }
72
+ export default Module;
@@ -0,0 +1,139 @@
1
+ import { v4 as uuidv4 } from "uuid";
2
+ import { Input, Output } from "./IO";
3
+ import { PolyModule } from "../Module";
4
+ export var ModuleType;
5
+ (function (ModuleType) {
6
+ ModuleType["Oscillator"] = "monoOscillator";
7
+ ModuleType["Envelope"] = "monoEnvelope";
8
+ ModuleType["AmpEnvelope"] = "monoAmpEnvelope";
9
+ ModuleType["FreqEnvelope"] = "monoFreqEnvelope";
10
+ ModuleType["Filter"] = "monoFilter";
11
+ ModuleType["Master"] = "master";
12
+ ModuleType["Voice"] = "voice";
13
+ ModuleType["MidiSelector"] = "midiSelector";
14
+ ModuleType["Volume"] = "monoVolume";
15
+ })(ModuleType || (ModuleType = {}));
16
+ export class DummnyInternalModule {
17
+ connect(inputNode) {
18
+ throw Error("This module is not connectable");
19
+ }
20
+ disconnect(inputNode) { }
21
+ dispose() { }
22
+ }
23
+ class Module {
24
+ internalModule;
25
+ id;
26
+ name;
27
+ inputs = [];
28
+ outputs = [];
29
+ type;
30
+ voiceNo;
31
+ updatedAt;
32
+ _props;
33
+ constructor(internalModule, props) {
34
+ this.internalModule = internalModule;
35
+ this.id = uuidv4();
36
+ Object.assign(this, props);
37
+ }
38
+ set props(value) {
39
+ if (!value)
40
+ return;
41
+ if (!this._props)
42
+ this._props = value;
43
+ this.updatedAt = new Date();
44
+ Object.assign(this, value);
45
+ }
46
+ get props() {
47
+ return this._props;
48
+ }
49
+ plug(audioModule, from, to) {
50
+ const output = this.outputs.find((i) => i.name === from);
51
+ if (!output)
52
+ throw Error(`Output ${from} not exist`);
53
+ console.log(`${this.name}:${from} => ${audioModule.name}:${to}`);
54
+ const input = audioModule.inputs.find((i) => i.name === to);
55
+ if (!input)
56
+ throw Error(`Input ${to} in module ${audioModule.name} not exist`);
57
+ output.plug(input);
58
+ }
59
+ unplugAll() {
60
+ this.outputs.forEach((o) => o.unPlugAll());
61
+ }
62
+ connect = (inputAudioModule, attribute = "internalModule") => {
63
+ if (inputAudioModule instanceof PolyModule) {
64
+ inputAudioModule.audioModules.forEach((m) => {
65
+ this.internalModule.connect(m[attribute]);
66
+ });
67
+ return;
68
+ }
69
+ this.internalModule.connect(inputAudioModule[attribute]);
70
+ };
71
+ disconnect = (inputAudioModule, attribute = "internalModule") => {
72
+ if (inputAudioModule instanceof PolyModule) {
73
+ inputAudioModule.audioModules.forEach((m) => {
74
+ this.internalModule.disconnect(m[attribute]);
75
+ });
76
+ return;
77
+ }
78
+ this.internalModule.disconnect(inputAudioModule[attribute]);
79
+ };
80
+ dispose() {
81
+ this.internalModule.dispose();
82
+ }
83
+ triggerAttack(midiEvent) {
84
+ throw Error("triggerAttack not implemented");
85
+ }
86
+ triggerRelease(midiEvent) {
87
+ throw Error("triggerRelease not implemented");
88
+ }
89
+ midiTriggered = (midiEvent) => {
90
+ switch (midiEvent.type) {
91
+ case "noteOn":
92
+ this.triggerAttack(midiEvent);
93
+ break;
94
+ case "noteOff":
95
+ this.triggerRelease(midiEvent);
96
+ break;
97
+ default:
98
+ throw Error("This type is not a note");
99
+ }
100
+ };
101
+ serialize() {
102
+ return {
103
+ id: this.id,
104
+ name: this.name,
105
+ type: this.type,
106
+ props: this.props,
107
+ inputs: this.inputs.map((i) => i.serialize()),
108
+ outputs: this.outputs.map((i) => i.serialize()),
109
+ };
110
+ }
111
+ registerInput(props) {
112
+ const input = new Input(this, props);
113
+ this.inputs.push(input);
114
+ return input;
115
+ }
116
+ registerOutput(props) {
117
+ const output = new Output(this, props);
118
+ this.outputs.push(output);
119
+ return output;
120
+ }
121
+ registerBasicOutputs() {
122
+ this.registerOutput({
123
+ name: "output",
124
+ onPlug: (output) => {
125
+ this.connect(output.audioModule);
126
+ },
127
+ onUnPlug: (output) => {
128
+ this.disconnect(output.audioModule);
129
+ },
130
+ });
131
+ }
132
+ registerBasicInputs() {
133
+ this.registerInput({
134
+ name: "input",
135
+ });
136
+ }
137
+ }
138
+ export default Module;
139
+ //# sourceMappingURL=Base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Base.js","sourceRoot":"","sources":["../../src/Module/Base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { AmplitudeEnvelope } from "tone";
2
+ import Base, { EnvelopeInterface, PolyBase } from "./Base";
3
+ export default class AmpEnvelope extends Base<AmplitudeEnvelope> {
4
+ constructor(name: string, props: EnvelopeInterface);
5
+ }
6
+ export declare class PolyAmpEnvelope extends PolyBase<AmpEnvelope> {
7
+ constructor(name: string, props: Partial<EnvelopeInterface>);
8
+ }
@@ -0,0 +1,15 @@
1
+ import { AmplitudeEnvelope } from "tone";
2
+ import { ModuleType } from "../index";
3
+ import Base, { PolyBase } from "./Base";
4
+ import { PolyModuleType } from "../PolyModule";
5
+ export default class AmpEnvelope extends Base {
6
+ constructor(name, props) {
7
+ super(name, ModuleType.AmpEnvelope, new AmplitudeEnvelope(), props);
8
+ }
9
+ }
10
+ export class PolyAmpEnvelope extends PolyBase {
11
+ constructor(name, props) {
12
+ super(name, ModuleType.AmpEnvelope, PolyModuleType.AmpEnvelope, props);
13
+ }
14
+ }
15
+ //# sourceMappingURL=AmpEnvelope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AmpEnvelope.js","sourceRoot":"","sources":["../../../src/Module/Envelope/AmpEnvelope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,IAAI,EAAE,EAAqB,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,IAAuB;IAC9D,YAAY,IAAY,EAAE,KAAwB;QAChD,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,EAAE,IAAI,iBAAiB,EAAE,EAAE,KAAK,CAAC,CAAC;IACtE,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,QAAqB;IACxD,YAAY,IAAY,EAAE,KAAiC;QACzD,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,EAAE,cAAc,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACzE,CAAC;CACF"}