@blibliki/engine 0.1.15 → 0.1.17

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.
package/README.md CHANGED
@@ -12,6 +12,116 @@ One notable advantage of the data-driven approach is the ability to easily save
12
12
 
13
13
  Blibliki Engine offers polyphony support and provides access to essential audio modules such as oscillators, filters, envelopes, and effects. It's important to note that the list of available audio modules will be extended as the development of the engine continues.
14
14
 
15
+ ## Installing
16
+
17
+ ```bash
18
+ npm install @blibliki/engine
19
+ ```
20
+
21
+ ## Usage
22
+
23
+ ```JavaScript
24
+ import Engine from "@blibliki/engine";
25
+ ```
26
+
27
+ #### Initialize
28
+
29
+ `Engine.initialize` returns a promise that resolves when the engine is initialized and ready for use.
30
+
31
+ ```JavaScript
32
+ Engine.initialize({ context: { lookAhead: 0.03 } });
33
+ ```
34
+
35
+ #### Start / Stop
36
+
37
+ This methods are triggering all audio modules to start or stop
38
+
39
+ ```JavaScript
40
+ Engine.start();
41
+ Engine.stop();
42
+ ```
43
+
44
+ #### Modules
45
+
46
+ ##### AudioModule structure
47
+
48
+ All audio modules share the shame structure.
49
+ The props structure vary per audioModule.
50
+
51
+ ```JavaScript
52
+ {
53
+ id: string,
54
+ name: string,
55
+ props: Object
56
+ }
57
+ ```
58
+
59
+ ##### Create audio module
60
+
61
+ ```JavaScript
62
+ const master = Engine.master;
63
+ const osc = Engine.addModule({ name: "Osc", type: "Oscillator" });
64
+ const volume = Engine.addModule({
65
+ name: "Vol",
66
+ type: "Volume",
67
+ props: { volume: -10 },
68
+ });
69
+ ```
70
+
71
+ ##### Update props
72
+
73
+ ```JavaScript
74
+ // Update props
75
+ Engine.updatePropsModule(volume.id, { volume: -20 });
76
+ Engine.updatePropsModule(osc.id, { wave: "square", fine: -10 });
77
+ ```
78
+
79
+ ##### Remove audio module
80
+
81
+ ```JavaScript
82
+ Engine.removeModule(osc.id);
83
+ ```
84
+
85
+ #### Routes
86
+
87
+ ##### Route structure
88
+
89
+ ```JavaScript
90
+ {
91
+ id: string,
92
+ sourceId: string,
93
+ outputName: string,
94
+ destinationId: string,
95
+ inputName: string,
96
+ }
97
+ ```
98
+
99
+ ##### Add Route
100
+
101
+ ```JavaScript
102
+ // Connect oscillator out to volume input
103
+ const oscVolRoute = Engine.addRoute({
104
+ sourceId: osc.id,
105
+ outputName: "output",
106
+ destinationId: volume.id,
107
+ inputName: "input",
108
+ });
109
+
110
+ // Connect oscillator out to volume input
111
+ const volToMaster = Engine.addRoute({
112
+ sourceId: volume.id,
113
+ outputName: "output",
114
+ destinationId: master.id,
115
+ inputName: "input",
116
+ });
117
+ ```
118
+
119
+ ##### Remove route
120
+
121
+ ```JavaScript
122
+ Engine.removeRoute(oscVolRoute.id);
123
+ ```
124
+
15
125
  ## Contributing
16
126
 
17
127
  As a work-in-progress project, Blibliki Engine actively welcomes contributions and feedback from the community. Whether it's reporting issues, suggesting new features, or submitting code changes, contributors are encouraged to get involved and help shape the future of Blibliki Engine.
package/build/Engine.d.ts CHANGED
@@ -25,17 +25,12 @@ declare class Engine {
25
25
  };
26
26
  private constructor();
27
27
  static getInstance(): Engine;
28
- initialize(props: InitializeInterface): {
29
- master: {
30
- id: string;
31
- name: string;
32
- type: string;
33
- props: any;
34
- inputs: import(".").IOProps[];
35
- outputs: import(".").IOProps[];
36
- };
37
- };
38
- registerModule(name: string, type: string, props?: any): {
28
+ initialize(props: InitializeInterface): Promise<unknown>;
29
+ addModule(params: {
30
+ name: string;
31
+ type: string;
32
+ props?: any;
33
+ }): {
39
34
  id: string;
40
35
  name: string;
41
36
  type: string;
@@ -43,7 +38,7 @@ declare class Engine {
43
38
  inputs: import(".").IOProps[];
44
39
  outputs: import(".").IOProps[];
45
40
  };
46
- unregisterModule(id: string): string[];
41
+ removeModule(id: string): string[];
47
42
  updateNameModule(id: string, name: string): {
48
43
  id: string;
49
44
  name: string;
@@ -86,6 +81,7 @@ declare class Engine {
86
81
  stop(): void;
87
82
  get bpm(): number;
88
83
  set bpm(value: number);
84
+ updateRoutes(): void;
89
85
  private applyRoutesRequired;
90
86
  private moduleRouteIds;
91
87
  }
package/build/Engine.js CHANGED
@@ -26,26 +26,31 @@ class Engine {
26
26
  return Engine.instance;
27
27
  }
28
28
  initialize(props) {
29
- this.context = new Context(props.context);
30
- setContext(this.context);
31
- this.context.transport.start();
32
- this.midiDeviceManager = new MidiDeviceManager();
33
- return {
34
- master: this.master,
35
- };
36
- }
37
- registerModule(name, type, props = {}) {
29
+ return new Promise((resolve) => {
30
+ if (this.context)
31
+ return resolve({ master: this.master });
32
+ this.context = new Context(props.context);
33
+ setContext(this.context);
34
+ this.context.transport.start();
35
+ this.midiDeviceManager = new MidiDeviceManager();
36
+ setTimeout(() => {
37
+ resolve({ master: this.master });
38
+ }, 0);
39
+ });
40
+ }
41
+ addModule(params) {
42
+ const { name, type, props = {} } = params;
38
43
  const audioModule = createModule(name, type, {});
39
44
  audioModule.props = props;
40
45
  this.modules[audioModule.id] = audioModule;
41
- applyRoutes(Object.values(this.routes));
46
+ this.updateRoutes();
42
47
  return audioModule.serialize();
43
48
  }
44
- unregisterModule(id) {
49
+ removeModule(id) {
45
50
  this.modules[id].dispose();
46
51
  const moduleRouteIds = this.moduleRouteIds(id);
47
52
  moduleRouteIds.forEach((routeId) => delete this.routes[routeId]);
48
- applyRoutes(Object.values(this.routes));
53
+ this.updateRoutes();
49
54
  delete this.modules[id];
50
55
  return moduleRouteIds;
51
56
  }
@@ -65,24 +70,24 @@ class Engine {
65
70
  const applyRoutesRequired = this.applyRoutesRequired(audioModule, props);
66
71
  audioModule.props = props;
67
72
  if (applyRoutesRequired)
68
- applyRoutes(Object.values(this.routes));
73
+ this.updateRoutes();
69
74
  return audioModule.serialize();
70
75
  }
71
76
  addRoute(props) {
72
77
  const route = createRoute(props);
73
78
  const newRoutes = { ...this.routes, [route.id]: route };
74
- applyRoutes(Object.values(newRoutes));
75
79
  this.routes = newRoutes;
80
+ this.updateRoutes();
76
81
  return route;
77
82
  }
78
83
  removeRoute(id) {
79
84
  delete this.routes[id];
80
- applyRoutes(Object.values(this.routes));
85
+ this.updateRoutes();
81
86
  }
82
87
  get master() {
83
88
  if (this._master)
84
89
  return this._master.serialize();
85
- const masterProps = this.registerModule("Master", "Master");
90
+ const masterProps = this.addModule({ name: "Master", type: "Master" });
86
91
  this._master = this.modules[masterProps.id];
87
92
  return masterProps;
88
93
  }
@@ -96,7 +101,7 @@ class Engine {
96
101
  return;
97
102
  m.dispose();
98
103
  });
99
- this.modules = { [this._master.id]: this._master };
104
+ this.modules = this._master ? { [this._master.id]: this._master } : {};
100
105
  this.routes = {};
101
106
  }
102
107
  findById(id) {
@@ -106,11 +111,14 @@ class Engine {
106
111
  return audioModule;
107
112
  }
108
113
  get isStarted() {
109
- return this.context.transport.state === "started" && this._isStarted;
114
+ return (this.context !== undefined &&
115
+ this.context.transport.state === "started" &&
116
+ this._isStarted);
110
117
  }
111
118
  start() {
112
119
  const startTime = now();
113
120
  this._isStarted = true;
121
+ this.updateRoutes();
114
122
  Object.values(this.modules).forEach((audioModule) => {
115
123
  const am = audioModule;
116
124
  if (!am.start)
@@ -134,6 +142,9 @@ class Engine {
134
142
  set bpm(value) {
135
143
  this.context.transport.bpm.value = value;
136
144
  }
145
+ updateRoutes() {
146
+ applyRoutes(Object.values(this.routes));
147
+ }
137
148
  applyRoutesRequired(audioModule, props) {
138
149
  if (!props.polyNumber)
139
150
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"Engine.js","sourceRoot":"","sources":["../src/Engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Engine.js","sourceRoot":"","sources":["../src/Engine.ts"],"names":[],"mappings":"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"}
@@ -15,11 +15,9 @@ export interface Triggerable {
15
15
  export interface Voicable {
16
16
  voiceNo?: number;
17
17
  }
18
- export interface ModuleInterface {
18
+ export interface ModuleInterface<PropsInterface> {
19
19
  name: string;
20
- props?: {
21
- [key: string]: any;
22
- };
20
+ props: PropsInterface;
23
21
  voiceNo?: number;
24
22
  }
25
23
  export declare class DummnyInternalModule implements Connectable {
@@ -27,7 +25,7 @@ export declare class DummnyInternalModule implements Connectable {
27
25
  disconnect(inputNode?: InputNode): void;
28
26
  dispose(): void;
29
27
  }
30
- declare class Module<InternalModule extends Connectable, PropsInterface> implements ModuleInterface {
28
+ declare class Module<InternalModule extends Connectable, PropsInterface> implements ModuleInterface<PropsInterface> {
31
29
  static readonly moduleName: string;
32
30
  readonly id: string;
33
31
  name: string;
@@ -37,7 +35,7 @@ declare class Module<InternalModule extends Connectable, PropsInterface> impleme
37
35
  readonly voiceNo?: number;
38
36
  updatedAt: Date;
39
37
  _props: PropsInterface;
40
- constructor(internalModule: InternalModule, props: Partial<ModuleInterface>);
38
+ constructor(internalModule: InternalModule, props: Partial<ModuleInterface<PropsInterface>>);
41
39
  set props(value: PropsInterface);
42
40
  get props(): PropsInterface;
43
41
  plug(audioModule: AudioModule, from: string, to: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"Base.js","sourceRoot":"","sources":["../../src/Module/Base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Base.js","sourceRoot":"","sources":["../../src/Module/Base.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,8 @@ export interface IDataSequence {
11
11
  export default class DataSequencer extends Module<DummnyInternalModule, IDataSequencer> {
12
12
  static moduleName: string;
13
13
  private midiOutput;
14
+ private prevNumberOfVoices;
15
+ private loop;
14
16
  constructor(name: string, props: Partial<IDataSequence>);
15
17
  get sequences(): IDataSequence[];
16
18
  set sequences(value: IDataSequence[]);
@@ -1,7 +1,7 @@
1
- import { now } from "tone";
1
+ import { Loop, now } from "tone";
2
2
  import Module, { DummnyInternalModule } from "./Base";
3
3
  import MidiEvent from "../MidiEvent";
4
- import { uniq } from "lodash";
4
+ import { sortBy, uniq } from "lodash";
5
5
  import Engine from "../Engine";
6
6
  const InitialProps = () => ({
7
7
  sequences: [],
@@ -9,6 +9,8 @@ const InitialProps = () => ({
9
9
  export default class DataSequencer extends Module {
10
10
  static moduleName = "DataSequencer";
11
11
  midiOutput;
12
+ prevNumberOfVoices;
13
+ loop;
12
14
  constructor(name, props) {
13
15
  super(new DummnyInternalModule(), {
14
16
  name,
@@ -21,7 +23,7 @@ export default class DataSequencer extends Module {
21
23
  return this._props["sequences"];
22
24
  }
23
25
  set sequences(value) {
24
- const sequences = value;
26
+ const sequences = sortBy(value, (seq) => -seq.time);
25
27
  this._props = { ...this.props, sequences };
26
28
  this.updateNumberOfVoices();
27
29
  this.start(now());
@@ -29,11 +31,29 @@ export default class DataSequencer extends Module {
29
31
  start(time) {
30
32
  if (!Engine.isStarted)
31
33
  return;
32
- this.sequences.forEach((sequence) => {
33
- this.onPartEvent(time + sequence.time, sequence);
34
- });
34
+ Engine.updateRoutes();
35
+ const loopLength = 0.1;
36
+ const tempSequences = [...this.sequences];
37
+ const iterate = (maxTime) => {
38
+ const sequence = tempSequences.pop();
39
+ if (!sequence)
40
+ return;
41
+ const seqTime = time + sequence.time;
42
+ this.onPartEvent(seqTime, sequence);
43
+ if (seqTime > maxTime)
44
+ return;
45
+ iterate(maxTime);
46
+ };
47
+ this.loop = new Loop((t) => {
48
+ iterate(time + t + loopLength);
49
+ }, loopLength).start(time);
50
+ }
51
+ stop() {
52
+ if (!this.loop)
53
+ return;
54
+ this.loop.stop();
55
+ this.loop.dispose();
35
56
  }
36
- stop() { }
37
57
  onPartEvent = (time, sequence) => {
38
58
  const { voiceNo } = sequence;
39
59
  const event = MidiEvent.fromDataSequence(sequence, time);
@@ -52,6 +72,10 @@ export default class DataSequencer extends Module {
52
72
  return;
53
73
  input.audioModule.numberOfVoices = this.numberOfVoices;
54
74
  });
75
+ if (this.prevNumberOfVoices !== this.numberOfVoices) {
76
+ Engine.updateRoutes();
77
+ }
78
+ this.prevNumberOfVoices = this.numberOfVoices;
55
79
  }
56
80
  registerOutputs() {
57
81
  this.midiOutput = this.registerOutput({
@@ -1 +1 @@
1
- {"version":3,"file":"DataSequencer.js","sourceRoot":"","sources":["../../src/Module/DataSequencer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DataSequencer.js","sourceRoot":"","sources":["../../src/Module/DataSequencer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Effect.js","sourceRoot":"","sources":["../../src/Module/Effect.ts"],"names":[],"mappings":"AACA,OAAO,MAAuB,MAAM,QAAQ,CAAC;AAU7C,MAAM,YAAY,GAAoB;IACpC,GAAG,EAAE,CAAC;CACP,CAAC;AAEF,MAAM,CAAC,OAAO,OAAgB,MAG5B,SAAQ,MAAuC;IAC/C,YACE,IAAY,EACZ,cAA8B,EAC9B,KAA+B;QAE/B,KAAK,CAAC,cAAc,EAAE;YACpB,IAAI;YACJ,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;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,GAAG,CAAC,KAAa;QACnB,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QAC5C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;IAC3C,CAAC;CACF"}
1
+ {"version":3,"file":"Effect.js","sourceRoot":"","sources":["../../src/Module/Effect.ts"],"names":[],"mappings":"AACA,OAAO,MAAuB,MAAM,QAAQ,CAAC;AAU7C,MAAM,YAAY,GAAoB;IACpC,GAAG,EAAE,CAAC;CACP,CAAC;AAEF,MAAM,CAAC,OAAO,OAAgB,MAG5B,SAAQ,MAAuC;IAC/C,YACE,IAAY,EACZ,cAA8B,EAC9B,KAA+B;QAE/B,KAAK,CAAC,cAAc,EAAE;YACpB,IAAI;YACJ,KAAK,EAAE,EAAE,GAAG,YAAY,EAAE,GAAG,KAAK,EAAqB;SACxD,CAAC,CAAC;QAEH,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,GAAG,CAAC,KAAa;QACnB,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QAC5C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;IAC3C,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blibliki/engine",
3
- "version": "0.1.15",
3
+ "version": "0.1.17",
4
4
  "main": "build/index.js",
5
5
  "types": "build/index.d.ts",
6
6
  "dependencies": {
package/src/Engine.ts CHANGED
@@ -50,33 +50,39 @@ class Engine {
50
50
  }
51
51
 
52
52
  initialize(props: InitializeInterface) {
53
- this.context = new Context(props.context);
54
- setContext(this.context);
55
- this.context.transport.start();
53
+ return new Promise((resolve) => {
54
+ if (this.context) return resolve({ master: this.master });
56
55
 
57
- this.midiDeviceManager = new MidiDeviceManager();
56
+ this.context = new Context(props.context);
57
+ setContext(this.context);
58
+ this.context.transport.start();
58
59
 
59
- return {
60
- master: this.master,
61
- };
60
+ this.midiDeviceManager = new MidiDeviceManager();
61
+
62
+ setTimeout(() => {
63
+ resolve({ master: this.master });
64
+ }, 0);
65
+ });
62
66
  }
63
67
 
64
- registerModule(name: string, type: string, props: any = {}) {
68
+ addModule(params: { name: string; type: string; props?: any }) {
69
+ const { name, type, props = {} } = params;
70
+
65
71
  const audioModule = createModule(name, type, {});
66
72
  audioModule.props = props;
67
73
  this.modules[audioModule.id] = audioModule;
68
74
 
69
- applyRoutes(Object.values(this.routes));
75
+ this.updateRoutes();
70
76
 
71
77
  return audioModule.serialize();
72
78
  }
73
79
 
74
- unregisterModule(id: string) {
80
+ removeModule(id: string) {
75
81
  this.modules[id].dispose();
76
82
  const moduleRouteIds = this.moduleRouteIds(id);
77
83
 
78
84
  moduleRouteIds.forEach((routeId) => delete this.routes[routeId]);
79
- applyRoutes(Object.values(this.routes));
85
+ this.updateRoutes();
80
86
  delete this.modules[id];
81
87
 
82
88
  return moduleRouteIds;
@@ -102,7 +108,7 @@ class Engine {
102
108
 
103
109
  const applyRoutesRequired = this.applyRoutesRequired(audioModule, props);
104
110
  audioModule.props = props;
105
- if (applyRoutesRequired) applyRoutes(Object.values(this.routes));
111
+ if (applyRoutesRequired) this.updateRoutes();
106
112
 
107
113
  return audioModule.serialize();
108
114
  }
@@ -111,21 +117,21 @@ class Engine {
111
117
  const route = createRoute(props);
112
118
  const newRoutes = { ...this.routes, [route.id]: route };
113
119
 
114
- applyRoutes(Object.values(newRoutes));
115
120
  this.routes = newRoutes;
121
+ this.updateRoutes();
116
122
 
117
123
  return route;
118
124
  }
119
125
 
120
126
  removeRoute(id: string) {
121
127
  delete this.routes[id];
122
- applyRoutes(Object.values(this.routes));
128
+ this.updateRoutes();
123
129
  }
124
130
 
125
131
  get master() {
126
132
  if (this._master) return this._master.serialize();
127
133
 
128
- const masterProps = this.registerModule("Master", "Master");
134
+ const masterProps = this.addModule({ name: "Master", type: "Master" });
129
135
  this._master = this.modules[masterProps.id] as Master;
130
136
 
131
137
  return masterProps;
@@ -144,7 +150,7 @@ class Engine {
144
150
  m.dispose();
145
151
  });
146
152
 
147
- this.modules = { [this._master.id]: this._master };
153
+ this.modules = this._master ? { [this._master.id]: this._master } : {};
148
154
  this.routes = {};
149
155
  }
150
156
 
@@ -157,12 +163,17 @@ class Engine {
157
163
  }
158
164
 
159
165
  get isStarted() {
160
- return this.context.transport.state === "started" && this._isStarted;
166
+ return (
167
+ this.context !== undefined &&
168
+ this.context.transport.state === "started" &&
169
+ this._isStarted
170
+ );
161
171
  }
162
172
 
163
173
  start() {
164
174
  const startTime = now();
165
175
  this._isStarted = true;
176
+ this.updateRoutes();
166
177
 
167
178
  Object.values(this.modules).forEach((audioModule) => {
168
179
  const am = audioModule as any;
@@ -192,6 +203,10 @@ class Engine {
192
203
  this.context.transport.bpm.value = value;
193
204
  }
194
205
 
206
+ updateRoutes() {
207
+ applyRoutes(Object.values(this.routes));
208
+ }
209
+
195
210
  private applyRoutesRequired(audioModule: AudioModule, props: any) {
196
211
  if (!props.polyNumber) return false;
197
212
  if (!(audioModule instanceof VoiceScheduler)) return false;
@@ -21,9 +21,9 @@ export interface Voicable {
21
21
  voiceNo?: number;
22
22
  }
23
23
 
24
- export interface ModuleInterface {
24
+ export interface ModuleInterface<PropsInterface> {
25
25
  name: string;
26
- props?: { [key: string]: any };
26
+ props: PropsInterface;
27
27
  voiceNo?: number;
28
28
  }
29
29
 
@@ -38,7 +38,7 @@ export class DummnyInternalModule implements Connectable {
38
38
  }
39
39
 
40
40
  class Module<InternalModule extends Connectable, PropsInterface>
41
- implements ModuleInterface
41
+ implements ModuleInterface<PropsInterface>
42
42
  {
43
43
  static readonly moduleName: string;
44
44
 
@@ -51,7 +51,10 @@ class Module<InternalModule extends Connectable, PropsInterface>
51
51
  updatedAt: Date;
52
52
  _props: PropsInterface = {} as PropsInterface;
53
53
 
54
- constructor(internalModule: InternalModule, props: Partial<ModuleInterface>) {
54
+ constructor(
55
+ internalModule: InternalModule,
56
+ props: Partial<ModuleInterface<PropsInterface>>
57
+ ) {
55
58
  this.internalModule = internalModule;
56
59
  this.id = uuidv4();
57
60
 
@@ -1,9 +1,9 @@
1
- import { now } from "tone";
1
+ import { Loop, now } from "tone";
2
2
 
3
3
  import Module, { DummnyInternalModule } from "./Base";
4
4
  import { Output } from "./IO";
5
5
  import MidiEvent from "../MidiEvent";
6
- import { uniq } from "lodash";
6
+ import { sortBy, uniq } from "lodash";
7
7
  import Engine from "../Engine";
8
8
 
9
9
  interface IDataSequencer {
@@ -27,6 +27,8 @@ export default class DataSequencer extends Module<
27
27
  > {
28
28
  static moduleName = "DataSequencer";
29
29
  private midiOutput: Output;
30
+ private prevNumberOfVoices: number;
31
+ private loop: Loop;
30
32
 
31
33
  constructor(name: string, props: Partial<IDataSequence>) {
32
34
  super(new DummnyInternalModule(), {
@@ -43,7 +45,7 @@ export default class DataSequencer extends Module<
43
45
  }
44
46
 
45
47
  set sequences(value: IDataSequence[]) {
46
- const sequences = value;
48
+ const sequences = sortBy(value, (seq) => -seq.time);
47
49
  this._props = { ...this.props, sequences };
48
50
  this.updateNumberOfVoices();
49
51
  this.start(now());
@@ -51,13 +53,32 @@ export default class DataSequencer extends Module<
51
53
 
52
54
  start(time: number) {
53
55
  if (!Engine.isStarted) return;
56
+ Engine.updateRoutes();
54
57
 
55
- this.sequences.forEach((sequence) => {
56
- this.onPartEvent(time + sequence.time, sequence);
57
- });
58
+ const loopLength = 0.1;
59
+ const tempSequences = [...this.sequences];
60
+ const iterate = (maxTime: number) => {
61
+ const sequence = tempSequences.pop();
62
+ if (!sequence) return;
63
+
64
+ const seqTime = time + sequence.time;
65
+ this.onPartEvent(seqTime, sequence);
66
+ if (seqTime > maxTime) return;
67
+
68
+ iterate(maxTime);
69
+ };
70
+
71
+ this.loop = new Loop((t) => {
72
+ iterate(time + t + loopLength);
73
+ }, loopLength).start(time);
58
74
  }
59
75
 
60
- stop() {}
76
+ stop() {
77
+ if (!this.loop) return;
78
+
79
+ this.loop.stop();
80
+ this.loop.dispose();
81
+ }
61
82
 
62
83
  private onPartEvent = (time: number, sequence: IDataSequence) => {
63
84
  const { voiceNo } = sequence;
@@ -80,6 +101,11 @@ export default class DataSequencer extends Module<
80
101
 
81
102
  input.audioModule.numberOfVoices = this.numberOfVoices;
82
103
  });
104
+
105
+ if (this.prevNumberOfVoices !== this.numberOfVoices) {
106
+ Engine.updateRoutes();
107
+ }
108
+ this.prevNumberOfVoices = this.numberOfVoices;
83
109
  }
84
110
 
85
111
  private registerOutputs() {
@@ -24,7 +24,7 @@ export default abstract class Effect<
24
24
  ) {
25
25
  super(internalModule, {
26
26
  name,
27
- props: { ...InitialProps, ...props },
27
+ props: { ...InitialProps, ...props } as ModuleInterface,
28
28
  });
29
29
 
30
30
  this.registerBasicInputs();