@blibliki/engine 0.1.14 → 0.1.16
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/build/Engine.d.ts +2 -0
- package/build/Engine.js +13 -6
- package/build/Engine.js.map +1 -1
- package/build/Module/DataSequencer.d.ts +1 -0
- package/build/Module/DataSequencer.js +8 -0
- package/build/Module/DataSequencer.js.map +1 -1
- package/build/Module/Oscillator.js +2 -2
- package/build/Module/Oscillator.js.map +1 -1
- package/build/Module/Sequencer.js +3 -3
- package/build/Module/Sequencer.js.map +1 -1
- package/package.json +1 -1
- package/src/Engine.ts +16 -6
- package/src/Module/DataSequencer.ts +9 -0
- package/src/Module/Oscillator.ts +2 -2
- package/src/Module/Sequencer.ts +3 -3
package/build/Engine.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ declare class Engine {
|
|
|
16
16
|
private _master;
|
|
17
17
|
private context;
|
|
18
18
|
private propsUpdateCallbacks;
|
|
19
|
+
private _isStarted;
|
|
19
20
|
modules: {
|
|
20
21
|
[Identifier: string]: AudioModule;
|
|
21
22
|
};
|
|
@@ -85,6 +86,7 @@ declare class Engine {
|
|
|
85
86
|
stop(): void;
|
|
86
87
|
get bpm(): number;
|
|
87
88
|
set bpm(value: number);
|
|
89
|
+
updateRoutes(): void;
|
|
88
90
|
private applyRoutesRequired;
|
|
89
91
|
private moduleRouteIds;
|
|
90
92
|
}
|
package/build/Engine.js
CHANGED
|
@@ -11,6 +11,7 @@ class Engine {
|
|
|
11
11
|
_master;
|
|
12
12
|
context;
|
|
13
13
|
propsUpdateCallbacks;
|
|
14
|
+
_isStarted = false;
|
|
14
15
|
modules;
|
|
15
16
|
routes;
|
|
16
17
|
constructor() {
|
|
@@ -37,14 +38,14 @@ class Engine {
|
|
|
37
38
|
const audioModule = createModule(name, type, {});
|
|
38
39
|
audioModule.props = props;
|
|
39
40
|
this.modules[audioModule.id] = audioModule;
|
|
40
|
-
|
|
41
|
+
this.updateRoutes();
|
|
41
42
|
return audioModule.serialize();
|
|
42
43
|
}
|
|
43
44
|
unregisterModule(id) {
|
|
44
45
|
this.modules[id].dispose();
|
|
45
46
|
const moduleRouteIds = this.moduleRouteIds(id);
|
|
46
47
|
moduleRouteIds.forEach((routeId) => delete this.routes[routeId]);
|
|
47
|
-
|
|
48
|
+
this.updateRoutes();
|
|
48
49
|
delete this.modules[id];
|
|
49
50
|
return moduleRouteIds;
|
|
50
51
|
}
|
|
@@ -64,19 +65,19 @@ class Engine {
|
|
|
64
65
|
const applyRoutesRequired = this.applyRoutesRequired(audioModule, props);
|
|
65
66
|
audioModule.props = props;
|
|
66
67
|
if (applyRoutesRequired)
|
|
67
|
-
|
|
68
|
+
this.updateRoutes();
|
|
68
69
|
return audioModule.serialize();
|
|
69
70
|
}
|
|
70
71
|
addRoute(props) {
|
|
71
72
|
const route = createRoute(props);
|
|
72
73
|
const newRoutes = { ...this.routes, [route.id]: route };
|
|
73
|
-
applyRoutes(Object.values(newRoutes));
|
|
74
74
|
this.routes = newRoutes;
|
|
75
|
+
this.updateRoutes();
|
|
75
76
|
return route;
|
|
76
77
|
}
|
|
77
78
|
removeRoute(id) {
|
|
78
79
|
delete this.routes[id];
|
|
79
|
-
|
|
80
|
+
this.updateRoutes();
|
|
80
81
|
}
|
|
81
82
|
get master() {
|
|
82
83
|
if (this._master)
|
|
@@ -105,10 +106,12 @@ class Engine {
|
|
|
105
106
|
return audioModule;
|
|
106
107
|
}
|
|
107
108
|
get isStarted() {
|
|
108
|
-
return this.context.transport.state === "started";
|
|
109
|
+
return this.context.transport.state === "started" && this._isStarted;
|
|
109
110
|
}
|
|
110
111
|
start() {
|
|
111
112
|
const startTime = now();
|
|
113
|
+
this._isStarted = true;
|
|
114
|
+
this.updateRoutes();
|
|
112
115
|
Object.values(this.modules).forEach((audioModule) => {
|
|
113
116
|
const am = audioModule;
|
|
114
117
|
if (!am.start)
|
|
@@ -124,6 +127,7 @@ class Engine {
|
|
|
124
127
|
return;
|
|
125
128
|
am.stop(startTime);
|
|
126
129
|
});
|
|
130
|
+
this._isStarted = false;
|
|
127
131
|
}
|
|
128
132
|
get bpm() {
|
|
129
133
|
return this.context.transport.bpm.value;
|
|
@@ -131,6 +135,9 @@ class Engine {
|
|
|
131
135
|
set bpm(value) {
|
|
132
136
|
this.context.transport.bpm.value = value;
|
|
133
137
|
}
|
|
138
|
+
updateRoutes() {
|
|
139
|
+
applyRoutes(Object.values(this.routes));
|
|
140
|
+
}
|
|
134
141
|
applyRoutesRequired(audioModule, props) {
|
|
135
142
|
if (!props.polyNumber)
|
|
136
143
|
return false;
|
package/build/Engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Engine.js","sourceRoot":"","sources":["../src/Engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAChD,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,SAAoB,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAe,YAAY,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAErC,OAAO,cAAc,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,WAAW,EAA8B,MAAM,UAAU,CAAC;AAahF,MAAM,MAAM;IACV,iBAAiB,CAAoB;IAC7B,MAAM,CAAC,QAAQ,CAAS;IACxB,OAAO,CAAS;IAChB,OAAO,CAAU;IACjB,oBAAoB,CAAuC;
|
|
1
|
+
{"version":3,"file":"Engine.js","sourceRoot":"","sources":["../src/Engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAChD,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,SAAoB,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAe,YAAY,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAErC,OAAO,cAAc,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,WAAW,EAA8B,MAAM,UAAU,CAAC;AAahF,MAAM,MAAM;IACV,iBAAiB,CAAoB;IAC7B,MAAM,CAAC,QAAQ,CAAS;IACxB,OAAO,CAAS;IAChB,OAAO,CAAU;IACjB,oBAAoB,CAAuC;IAC3D,UAAU,GAAY,KAAK,CAAC;IAEpC,OAAO,CAEL;IAEF,MAAM,CAEJ;IAEF;QACE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;IACjC,CAAC;IAEM,MAAM,CAAC,WAAW;QACvB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YACpB,MAAM,CAAC,QAAQ,GAAG,IAAI,MAAM,EAAE,CAAC;SAChC;QAED,OAAO,MAAM,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,UAAU,CAAC,KAA0B;QACnC,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1C,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAE/B,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC;QAEjD,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,IAAY,EAAE,IAAY,EAAE,QAAa,EAAE;QACxD,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QACjD,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;QAE3C,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,OAAO,WAAW,CAAC,SAAS,EAAE,CAAC;IACjC,CAAC;IAED,gBAAgB,CAAC,EAAU;QACzB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAC3B,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAE/C,cAAc,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAExB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,gBAAgB,CAAC,EAAU,EAAE,IAAY;QACvC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACtC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC;QAExB,OAAO,WAAW,CAAC,SAAS,EAAE,CAAC;IACjC,CAAC;IAED,aAAa,CAAC,QAA0C;QACtD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED,mBAAmB,CAAC,EAAU,EAAE,KAAU;QACxC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,iBAAiB,CAAC,EAAU,EAAE,KAAU;QACtC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAEtC,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACzE,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;QAC1B,IAAI,mBAAmB;YAAE,IAAI,CAAC,YAAY,EAAE,CAAC;QAE7C,OAAO,WAAW,CAAC,SAAS,EAAE,CAAC;IACjC,CAAC;IAED,QAAQ,CAAC,KAAiB;QACxB,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;QAExD,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,WAAW,CAAC,EAAU;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACvB,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,IAAI,MAAM;QACR,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAElD,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC5D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAW,CAAC;QAEtD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,kBAAkB,CAAC,EAAU,EAAE,QAAgB,EAAE,IAAW;QAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAgB,CAAC;QAErD,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO;QACL,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACxC,IAAI,CAAC,YAAY,MAAM;gBAAE,OAAO;YAEhC,CAAC,CAAC,OAAO,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QACnD,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,QAAQ,CAAC,EAAU;QACjB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAErC,IAAI,CAAC,WAAW;YAAE,MAAM,KAAK,CAAC,wBAAwB,EAAE,aAAa,CAAC,CAAC;QAEvE,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC;IACvE,CAAC;IAED,KAAK;QACH,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;YAClD,MAAM,EAAE,GAAG,WAAkB,CAAC;YAC9B,IAAI,CAAC,EAAE,CAAC,KAAK;gBAAE,OAAO;YAEtB,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI;QACF,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC;QACxB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;YAClD,MAAM,EAAE,GAAG,WAAkB,CAAC;YAC9B,IAAI,CAAC,EAAE,CAAC,IAAI;gBAAE,OAAO;YAErB,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;IAC1C,CAAC;IAED,IAAI,GAAG,CAAC,KAAa;QACnB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;IAC3C,CAAC;IAED,YAAY;QACV,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1C,CAAC;IAEO,mBAAmB,CAAC,WAAwB,EAAE,KAAU;QAC9D,IAAI,CAAC,KAAK,CAAC,UAAU;YAAE,OAAO,KAAK,CAAC;QACpC,IAAI,CAAC,CAAC,WAAW,YAAY,cAAc,CAAC;YAAE,OAAO,KAAK,CAAC;QAE3D,OAAO,KAAK,CAAC,UAAU,KAAK,WAAW,CAAC,UAAU,CAAC;IACrD,CAAC;IAEO,cAAc,CAAC,EAAU;QAC/B,MAAM,WAAW,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAEvC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3D,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;YAEzD,OAAO,QAAQ,KAAK,EAAE,IAAI,aAAa,KAAK,EAAE,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAED,eAAe,MAAM,CAAC,WAAW,EAAE,CAAC"}
|
|
@@ -11,6 +11,7 @@ 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;
|
|
14
15
|
constructor(name: string, props: Partial<IDataSequence>);
|
|
15
16
|
get sequences(): IDataSequence[];
|
|
16
17
|
set sequences(value: IDataSequence[]);
|
|
@@ -2,12 +2,14 @@ import { now } from "tone";
|
|
|
2
2
|
import Module, { DummnyInternalModule } from "./Base";
|
|
3
3
|
import MidiEvent from "../MidiEvent";
|
|
4
4
|
import { uniq } from "lodash";
|
|
5
|
+
import Engine from "../Engine";
|
|
5
6
|
const InitialProps = () => ({
|
|
6
7
|
sequences: [],
|
|
7
8
|
});
|
|
8
9
|
export default class DataSequencer extends Module {
|
|
9
10
|
static moduleName = "DataSequencer";
|
|
10
11
|
midiOutput;
|
|
12
|
+
prevNumberOfVoices;
|
|
11
13
|
constructor(name, props) {
|
|
12
14
|
super(new DummnyInternalModule(), {
|
|
13
15
|
name,
|
|
@@ -26,6 +28,8 @@ export default class DataSequencer extends Module {
|
|
|
26
28
|
this.start(now());
|
|
27
29
|
}
|
|
28
30
|
start(time) {
|
|
31
|
+
if (!Engine.isStarted)
|
|
32
|
+
return;
|
|
29
33
|
this.sequences.forEach((sequence) => {
|
|
30
34
|
this.onPartEvent(time + sequence.time, sequence);
|
|
31
35
|
});
|
|
@@ -49,6 +53,10 @@ export default class DataSequencer extends Module {
|
|
|
49
53
|
return;
|
|
50
54
|
input.audioModule.numberOfVoices = this.numberOfVoices;
|
|
51
55
|
});
|
|
56
|
+
if (this.prevNumberOfVoices !== this.numberOfVoices) {
|
|
57
|
+
Engine.updateRoutes();
|
|
58
|
+
}
|
|
59
|
+
this.prevNumberOfVoices = this.numberOfVoices;
|
|
52
60
|
}
|
|
53
61
|
registerOutputs() {
|
|
54
62
|
this.midiOutput = this.registerOutput({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataSequencer.js","sourceRoot":"","sources":["../../src/Module/DataSequencer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAE3B,OAAO,MAAM,EAAE,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAEtD,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"DataSequencer.js","sourceRoot":"","sources":["../../src/Module/DataSequencer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { now, Oscillator as Osc } from "tone";
|
|
2
|
+
import Engine from "../Engine";
|
|
2
3
|
import Note from "../Note";
|
|
3
4
|
import Module from "./Base";
|
|
4
5
|
import PolyModule from "./PolyModule";
|
|
@@ -73,8 +74,7 @@ class MonoOscillator extends Module {
|
|
|
73
74
|
this.updateFrequency();
|
|
74
75
|
}
|
|
75
76
|
start(time) {
|
|
76
|
-
|
|
77
|
-
if (state !== "started")
|
|
77
|
+
if (!Engine.isStarted)
|
|
78
78
|
return;
|
|
79
79
|
const oscState = this.internalModule.state;
|
|
80
80
|
if (oscState === "started") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Oscillator.js","sourceRoot":"","sources":["../../src/Module/Oscillator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,UAAU,IAAI,GAAG,EAAsB,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"Oscillator.js","sourceRoot":"","sources":["../../src/Module/Oscillator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { now, Part } from "tone";
|
|
2
2
|
import Module, { DummnyInternalModule } from "./Base";
|
|
3
3
|
import MidiEvent from "../MidiEvent";
|
|
4
|
+
import Engine from "../Engine";
|
|
4
5
|
const InitialProps = () => ({
|
|
5
6
|
sequences: [],
|
|
6
7
|
steps: 16,
|
|
@@ -48,8 +49,7 @@ export default class Sequencer extends Module {
|
|
|
48
49
|
this._props = { ...this.props, sequences };
|
|
49
50
|
}
|
|
50
51
|
start(time) {
|
|
51
|
-
|
|
52
|
-
if (state !== "started")
|
|
52
|
+
if (!Engine.isStarted)
|
|
53
53
|
return;
|
|
54
54
|
this.part.start(time);
|
|
55
55
|
}
|
|
@@ -111,7 +111,7 @@ export default class Sequencer extends Module {
|
|
|
111
111
|
}
|
|
112
112
|
updateBarParts() {
|
|
113
113
|
this.part.clear();
|
|
114
|
-
this.sequences.forEach((barSeqs,
|
|
114
|
+
this.sequences.forEach((barSeqs, _) => {
|
|
115
115
|
barSeqs.forEach((seq) => this.part.add(seq.time, seq));
|
|
116
116
|
});
|
|
117
117
|
this.part.loopEnd = this.loopEnd;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sequencer.js","sourceRoot":"","sources":["../../src/Module/Sequencer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAQ,MAAM,MAAM,CAAC;AACvC,OAAO,MAAM,EAAE,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAGtD,OAAO,SAAS,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Sequencer.js","sourceRoot":"","sources":["../../src/Module/Sequencer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/Engine.ts
CHANGED
|
@@ -25,6 +25,7 @@ class Engine {
|
|
|
25
25
|
private _master: Master;
|
|
26
26
|
private context: Context;
|
|
27
27
|
private propsUpdateCallbacks: { (id: string, props: any): void }[];
|
|
28
|
+
private _isStarted: boolean = false;
|
|
28
29
|
|
|
29
30
|
modules: {
|
|
30
31
|
[Identifier: string]: AudioModule;
|
|
@@ -65,7 +66,7 @@ class Engine {
|
|
|
65
66
|
audioModule.props = props;
|
|
66
67
|
this.modules[audioModule.id] = audioModule;
|
|
67
68
|
|
|
68
|
-
|
|
69
|
+
this.updateRoutes();
|
|
69
70
|
|
|
70
71
|
return audioModule.serialize();
|
|
71
72
|
}
|
|
@@ -75,7 +76,7 @@ class Engine {
|
|
|
75
76
|
const moduleRouteIds = this.moduleRouteIds(id);
|
|
76
77
|
|
|
77
78
|
moduleRouteIds.forEach((routeId) => delete this.routes[routeId]);
|
|
78
|
-
|
|
79
|
+
this.updateRoutes();
|
|
79
80
|
delete this.modules[id];
|
|
80
81
|
|
|
81
82
|
return moduleRouteIds;
|
|
@@ -101,7 +102,7 @@ class Engine {
|
|
|
101
102
|
|
|
102
103
|
const applyRoutesRequired = this.applyRoutesRequired(audioModule, props);
|
|
103
104
|
audioModule.props = props;
|
|
104
|
-
if (applyRoutesRequired)
|
|
105
|
+
if (applyRoutesRequired) this.updateRoutes();
|
|
105
106
|
|
|
106
107
|
return audioModule.serialize();
|
|
107
108
|
}
|
|
@@ -110,15 +111,15 @@ class Engine {
|
|
|
110
111
|
const route = createRoute(props);
|
|
111
112
|
const newRoutes = { ...this.routes, [route.id]: route };
|
|
112
113
|
|
|
113
|
-
applyRoutes(Object.values(newRoutes));
|
|
114
114
|
this.routes = newRoutes;
|
|
115
|
+
this.updateRoutes();
|
|
115
116
|
|
|
116
117
|
return route;
|
|
117
118
|
}
|
|
118
119
|
|
|
119
120
|
removeRoute(id: string) {
|
|
120
121
|
delete this.routes[id];
|
|
121
|
-
|
|
122
|
+
this.updateRoutes();
|
|
122
123
|
}
|
|
123
124
|
|
|
124
125
|
get master() {
|
|
@@ -156,11 +157,14 @@ class Engine {
|
|
|
156
157
|
}
|
|
157
158
|
|
|
158
159
|
get isStarted() {
|
|
159
|
-
return this.context.transport.state === "started";
|
|
160
|
+
return this.context.transport.state === "started" && this._isStarted;
|
|
160
161
|
}
|
|
161
162
|
|
|
162
163
|
start() {
|
|
163
164
|
const startTime = now();
|
|
165
|
+
this._isStarted = true;
|
|
166
|
+
this.updateRoutes();
|
|
167
|
+
|
|
164
168
|
Object.values(this.modules).forEach((audioModule) => {
|
|
165
169
|
const am = audioModule as any;
|
|
166
170
|
if (!am.start) return;
|
|
@@ -177,6 +181,8 @@ class Engine {
|
|
|
177
181
|
|
|
178
182
|
am.stop(startTime);
|
|
179
183
|
});
|
|
184
|
+
|
|
185
|
+
this._isStarted = false;
|
|
180
186
|
}
|
|
181
187
|
|
|
182
188
|
get bpm() {
|
|
@@ -187,6 +193,10 @@ class Engine {
|
|
|
187
193
|
this.context.transport.bpm.value = value;
|
|
188
194
|
}
|
|
189
195
|
|
|
196
|
+
updateRoutes() {
|
|
197
|
+
applyRoutes(Object.values(this.routes));
|
|
198
|
+
}
|
|
199
|
+
|
|
190
200
|
private applyRoutesRequired(audioModule: AudioModule, props: any) {
|
|
191
201
|
if (!props.polyNumber) return false;
|
|
192
202
|
if (!(audioModule instanceof VoiceScheduler)) return false;
|
|
@@ -4,6 +4,7 @@ import Module, { DummnyInternalModule } from "./Base";
|
|
|
4
4
|
import { Output } from "./IO";
|
|
5
5
|
import MidiEvent from "../MidiEvent";
|
|
6
6
|
import { uniq } from "lodash";
|
|
7
|
+
import Engine from "../Engine";
|
|
7
8
|
|
|
8
9
|
interface IDataSequencer {
|
|
9
10
|
sequences: IDataSequence[];
|
|
@@ -26,6 +27,7 @@ export default class DataSequencer extends Module<
|
|
|
26
27
|
> {
|
|
27
28
|
static moduleName = "DataSequencer";
|
|
28
29
|
private midiOutput: Output;
|
|
30
|
+
private prevNumberOfVoices: number;
|
|
29
31
|
|
|
30
32
|
constructor(name: string, props: Partial<IDataSequence>) {
|
|
31
33
|
super(new DummnyInternalModule(), {
|
|
@@ -49,6 +51,8 @@ export default class DataSequencer extends Module<
|
|
|
49
51
|
}
|
|
50
52
|
|
|
51
53
|
start(time: number) {
|
|
54
|
+
if (!Engine.isStarted) return;
|
|
55
|
+
|
|
52
56
|
this.sequences.forEach((sequence) => {
|
|
53
57
|
this.onPartEvent(time + sequence.time, sequence);
|
|
54
58
|
});
|
|
@@ -77,6 +81,11 @@ export default class DataSequencer extends Module<
|
|
|
77
81
|
|
|
78
82
|
input.audioModule.numberOfVoices = this.numberOfVoices;
|
|
79
83
|
});
|
|
84
|
+
|
|
85
|
+
if (this.prevNumberOfVoices !== this.numberOfVoices) {
|
|
86
|
+
Engine.updateRoutes();
|
|
87
|
+
}
|
|
88
|
+
this.prevNumberOfVoices = this.numberOfVoices;
|
|
80
89
|
}
|
|
81
90
|
|
|
82
91
|
private registerOutputs() {
|
package/src/Module/Oscillator.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { now, Oscillator as Osc, ToneOscillatorType } from "tone";
|
|
2
|
+
import Engine from "../Engine";
|
|
2
3
|
|
|
3
4
|
import Note from "../Note";
|
|
4
5
|
import Module, { Voicable } from "./Base";
|
|
@@ -105,8 +106,7 @@ class MonoOscillator extends Module<Osc, OscillatorInterface> {
|
|
|
105
106
|
}
|
|
106
107
|
|
|
107
108
|
start(time: number) {
|
|
108
|
-
|
|
109
|
-
if (state !== "started") return;
|
|
109
|
+
if (!Engine.isStarted) return;
|
|
110
110
|
|
|
111
111
|
const oscState = this.internalModule.state;
|
|
112
112
|
|
package/src/Module/Sequencer.ts
CHANGED
|
@@ -3,6 +3,7 @@ import Module, { DummnyInternalModule } from "./Base";
|
|
|
3
3
|
import { INote } from "../Note";
|
|
4
4
|
import { Output } from "./IO";
|
|
5
5
|
import MidiEvent from "../MidiEvent";
|
|
6
|
+
import Engine from "../Engine";
|
|
6
7
|
|
|
7
8
|
export interface ISequence {
|
|
8
9
|
active: boolean;
|
|
@@ -77,8 +78,7 @@ export default class Sequencer extends Module<
|
|
|
77
78
|
}
|
|
78
79
|
|
|
79
80
|
start(time: number) {
|
|
80
|
-
|
|
81
|
-
if (state !== "started") return;
|
|
81
|
+
if (!Engine.isStarted) return;
|
|
82
82
|
|
|
83
83
|
this.part.start(time);
|
|
84
84
|
}
|
|
@@ -151,7 +151,7 @@ export default class Sequencer extends Module<
|
|
|
151
151
|
private updateBarParts() {
|
|
152
152
|
this.part.clear();
|
|
153
153
|
|
|
154
|
-
this.sequences.forEach((barSeqs,
|
|
154
|
+
this.sequences.forEach((barSeqs, _) => {
|
|
155
155
|
barSeqs.forEach((seq) => this.part.add(seq.time, seq));
|
|
156
156
|
});
|
|
157
157
|
|