@blibliki/engine 0.1.16 → 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 +110 -0
- package/build/Engine.d.ts +7 -12
- package/build/Engine.js +20 -13
- package/build/Engine.js.map +1 -1
- package/build/Module/Base.d.ts +4 -6
- package/build/Module/Base.js.map +1 -1
- package/build/Module/DataSequencer.d.ts +1 -0
- package/build/Module/DataSequencer.js +26 -7
- package/build/Module/DataSequencer.js.map +1 -1
- package/build/Module/Effect.js.map +1 -1
- package/package.json +1 -1
- package/src/Engine.ts +22 -12
- package/src/Module/Base.ts +7 -4
- package/src/Module/DataSequencer.ts +27 -7
- package/src/Module/Effect.ts +1 -1
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
|
|
41
|
+
removeModule(id: string): string[];
|
|
47
42
|
updateNameModule(id: string, name: string): {
|
|
48
43
|
id: string;
|
|
49
44
|
name: string;
|
package/build/Engine.js
CHANGED
|
@@ -26,22 +26,27 @@ class Engine {
|
|
|
26
26
|
return Engine.instance;
|
|
27
27
|
}
|
|
28
28
|
initialize(props) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
46
|
this.updateRoutes();
|
|
42
47
|
return audioModule.serialize();
|
|
43
48
|
}
|
|
44
|
-
|
|
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]);
|
|
@@ -82,7 +87,7 @@ class Engine {
|
|
|
82
87
|
get master() {
|
|
83
88
|
if (this._master)
|
|
84
89
|
return this._master.serialize();
|
|
85
|
-
const masterProps = this.
|
|
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,7 +111,9 @@ class Engine {
|
|
|
106
111
|
return audioModule;
|
|
107
112
|
}
|
|
108
113
|
get isStarted() {
|
|
109
|
-
return this.context
|
|
114
|
+
return (this.context !== undefined &&
|
|
115
|
+
this.context.transport.state === "started" &&
|
|
116
|
+
this._isStarted);
|
|
110
117
|
}
|
|
111
118
|
start() {
|
|
112
119
|
const startTime = now();
|
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;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;
|
|
1
|
+
{"version":3,"file":"Engine.js","sourceRoot":"","sources":["../src/Engine.ts"],"names":[],"mappings":"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"}
|
package/build/Module/Base.d.ts
CHANGED
|
@@ -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;
|
package/build/Module/Base.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Base.js","sourceRoot":"","sources":["../../src/Module/Base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAGpC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAe,MAAM,MAAM,CAAC;AAElD,OAAO,EAAe,UAAU,EAAE,MAAM,WAAW,CAAC;AAwBpD,MAAM,OAAO,oBAAoB;IAC/B,OAAO,CAAC,SAAoB;QAC1B,MAAM,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAChD,CAAC;IAED,UAAU,CAAC,SAAqB,IAAG,CAAC;IAEpC,OAAO,KAAI,CAAC;CACb;AAED,MAAM,MAAM;IAGV,MAAM,CAAU,UAAU,CAAS;IAE1B,EAAE,CAAS;IACpB,IAAI,CAAS;IACb,cAAc,CAAiB;IAC/B,MAAM,GAAY,EAAE,CAAC;IACrB,OAAO,GAAa,EAAE,CAAC;IACd,OAAO,CAAU;IAC1B,SAAS,CAAO;IAChB,MAAM,GAAmB,EAAoB,CAAC;IAE9C,
|
|
1
|
+
{"version":3,"file":"Base.js","sourceRoot":"","sources":["../../src/Module/Base.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ export default class DataSequencer extends Module<DummnyInternalModule, IDataSeq
|
|
|
12
12
|
static moduleName: string;
|
|
13
13
|
private midiOutput;
|
|
14
14
|
private prevNumberOfVoices;
|
|
15
|
+
private loop;
|
|
15
16
|
constructor(name: string, props: Partial<IDataSequence>);
|
|
16
17
|
get sequences(): IDataSequence[];
|
|
17
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: [],
|
|
@@ -10,6 +10,7 @@ export default class DataSequencer extends Module {
|
|
|
10
10
|
static moduleName = "DataSequencer";
|
|
11
11
|
midiOutput;
|
|
12
12
|
prevNumberOfVoices;
|
|
13
|
+
loop;
|
|
13
14
|
constructor(name, props) {
|
|
14
15
|
super(new DummnyInternalModule(), {
|
|
15
16
|
name,
|
|
@@ -22,7 +23,7 @@ export default class DataSequencer extends Module {
|
|
|
22
23
|
return this._props["sequences"];
|
|
23
24
|
}
|
|
24
25
|
set sequences(value) {
|
|
25
|
-
const sequences = value;
|
|
26
|
+
const sequences = sortBy(value, (seq) => -seq.time);
|
|
26
27
|
this._props = { ...this.props, sequences };
|
|
27
28
|
this.updateNumberOfVoices();
|
|
28
29
|
this.start(now());
|
|
@@ -30,11 +31,29 @@ export default class DataSequencer extends Module {
|
|
|
30
31
|
start(time) {
|
|
31
32
|
if (!Engine.isStarted)
|
|
32
33
|
return;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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();
|
|
36
56
|
}
|
|
37
|
-
stop() { }
|
|
38
57
|
onPartEvent = (time, sequence) => {
|
|
39
58
|
const { voiceNo } = sequence;
|
|
40
59
|
const event = MidiEvent.fromDataSequence(sequence, time);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataSequencer.js","sourceRoot":"","sources":["../../src/Module/DataSequencer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;
|
|
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,
|
|
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
package/src/Engine.ts
CHANGED
|
@@ -50,18 +50,24 @@ class Engine {
|
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
initialize(props: InitializeInterface) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
this.context.transport.start();
|
|
53
|
+
return new Promise((resolve) => {
|
|
54
|
+
if (this.context) return resolve({ master: this.master });
|
|
56
55
|
|
|
57
|
-
|
|
56
|
+
this.context = new Context(props.context);
|
|
57
|
+
setContext(this.context);
|
|
58
|
+
this.context.transport.start();
|
|
58
59
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
this.midiDeviceManager = new MidiDeviceManager();
|
|
61
|
+
|
|
62
|
+
setTimeout(() => {
|
|
63
|
+
resolve({ master: this.master });
|
|
64
|
+
}, 0);
|
|
65
|
+
});
|
|
62
66
|
}
|
|
63
67
|
|
|
64
|
-
|
|
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;
|
|
@@ -71,7 +77,7 @@ class Engine {
|
|
|
71
77
|
return audioModule.serialize();
|
|
72
78
|
}
|
|
73
79
|
|
|
74
|
-
|
|
80
|
+
removeModule(id: string) {
|
|
75
81
|
this.modules[id].dispose();
|
|
76
82
|
const moduleRouteIds = this.moduleRouteIds(id);
|
|
77
83
|
|
|
@@ -125,7 +131,7 @@ class Engine {
|
|
|
125
131
|
get master() {
|
|
126
132
|
if (this._master) return this._master.serialize();
|
|
127
133
|
|
|
128
|
-
const masterProps = this.
|
|
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,7 +163,11 @@ class Engine {
|
|
|
157
163
|
}
|
|
158
164
|
|
|
159
165
|
get isStarted() {
|
|
160
|
-
return
|
|
166
|
+
return (
|
|
167
|
+
this.context !== undefined &&
|
|
168
|
+
this.context.transport.state === "started" &&
|
|
169
|
+
this._isStarted
|
|
170
|
+
);
|
|
161
171
|
}
|
|
162
172
|
|
|
163
173
|
start() {
|
package/src/Module/Base.ts
CHANGED
|
@@ -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
|
|
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(
|
|
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 {
|
|
@@ -28,6 +28,7 @@ export default class DataSequencer extends Module<
|
|
|
28
28
|
static moduleName = "DataSequencer";
|
|
29
29
|
private midiOutput: Output;
|
|
30
30
|
private prevNumberOfVoices: number;
|
|
31
|
+
private loop: Loop;
|
|
31
32
|
|
|
32
33
|
constructor(name: string, props: Partial<IDataSequence>) {
|
|
33
34
|
super(new DummnyInternalModule(), {
|
|
@@ -44,7 +45,7 @@ export default class DataSequencer extends Module<
|
|
|
44
45
|
}
|
|
45
46
|
|
|
46
47
|
set sequences(value: IDataSequence[]) {
|
|
47
|
-
const sequences = value;
|
|
48
|
+
const sequences = sortBy(value, (seq) => -seq.time);
|
|
48
49
|
this._props = { ...this.props, sequences };
|
|
49
50
|
this.updateNumberOfVoices();
|
|
50
51
|
this.start(now());
|
|
@@ -52,13 +53,32 @@ export default class DataSequencer extends Module<
|
|
|
52
53
|
|
|
53
54
|
start(time: number) {
|
|
54
55
|
if (!Engine.isStarted) return;
|
|
56
|
+
Engine.updateRoutes();
|
|
55
57
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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);
|
|
59
74
|
}
|
|
60
75
|
|
|
61
|
-
stop() {
|
|
76
|
+
stop() {
|
|
77
|
+
if (!this.loop) return;
|
|
78
|
+
|
|
79
|
+
this.loop.stop();
|
|
80
|
+
this.loop.dispose();
|
|
81
|
+
}
|
|
62
82
|
|
|
63
83
|
private onPartEvent = (time: number, sequence: IDataSequence) => {
|
|
64
84
|
const { voiceNo } = sequence;
|